欣然随风的表单验证类

<?php
/**
 * 页面作用:常用表单验证类
 * 作    者:欣然随风
 * 建立时间:2006-3-6
 * QQ:276624915
 */
class class_post
{
 //验证是否为指定长度的字母/数字组合
 function fun_text1($num1,$num2,$str)
 {
    Return (preg_match("/^[a-zA-Z0-9]{".$num1.",".$num2."}$/",$str))?true:false;
 }

 //验证是否为指定长度数字
 function fun_text2($num1,$num2,$str)
 {
    return (preg_match("/^[0-9]{".$num1.",".$num2."}$/i",$str))?true:false;
 }
 //验证是否为指定长度汉字
 function fun_font($num1,$num2,$str)
 {
 // preg_match("/^[/xa0-/xff]{1,4}$/", $string);
    return (preg_match("/^([/x81-/xfe][/x40-/xfe]){".$num1.",".$num2."}$/",$str))?true:false;
 }
 //验证身份证号码
 function fun_status($str)
 {
    return (preg_match('/(^([/d]{15}|[/d]{18}|[/d]{17}x)$)/',$str))?true:false;
 }

 //验证邮件地址
 function fun_email($str){
    return (preg_match('/^[_/.0-9a-z-]+@([0-9a-z][0-9a-z-]+/.)+[a-z]{2,4}$/',$str))?true:false;
 }
 //验证电话号码
 function fun_phone($str)
 {
  return (preg_match("/^((/(/d{3}/))|(/d{3}/-))?(/(0/d{2,3}/)|0/d{2,3}-)?[1-9]/d{6,7}$/",$str))?true:false;
 }
 //验证邮编
 function fun_zip($str)
 {
  return (preg_match("/^[1-9]/d{5}$/",$str))?true:false;
 }
 //验证url地址
 function fun_url($str)
 {
  return (preg_match("/^http:////[A-Za-z0-9]+/.[A-Za-z0-9]+[//=/?%/-&_~`@[/]/':+!]*([^<>/"/"])*$/",$str))?true:false;
 }

 // 数据入库 转义 特殊字符 传入值可为字符串 或 一维数组
 function data_join(&$data)
 {
  if(get_magic_quotes_gpc() == false)
  {
   if (is_array($data))
   {
    foreach ($data as $k => $v)
    {
     $data[$k] = addslashes($v);
    }
   }
   else
   {
    $data = addslashes($data);
   }
  }
  Return $data;
 }

 // 数据出库 还原 特殊字符 传入值可为字符串 或 一/二维数组
 function data_revert(&$data)
 {
  if (is_array($data))
  {
   foreach ($data as $k1 => $v1)
   {
    if (is_array($v1))
    {
     foreach ($v1 as $k2 => $v2)
     {
      $data[$k1][$k2] = stripslashes($v2);
     }
    }
    else
    {
     $data[$k1] = stripslashes($v1);
    }
   }
  }
  else
  {
   $data = stripslashes($data);
  }
  Return $data;
 }

 // 数据显示 还原 数据格式 主要用于内容输出 传入值可为字符串 或 一/二维数组
 // 执行此方法前应先data_revert(),表单内容无须此还原
 function data_show(&$data)
 {
  if (is_array($data))
  {
   foreach ($data as $k1 => $v1)
   {
    if (is_array($v1))
    {
     foreach ($v1 as $k2 => $v2)
     {
      $data[$k1][$k2]=nl2br(htmlspecialchars($data[$k1][$k2]));
      $data[$k1][$k2]=str_replace(" ","&nbsp;",$data[$k1][$k2]);
      $data[$k1][$k2]=str_replace("/n","<br>/n",$data[$k1][$k2]);
     }
    }
    else
    {
     $data[$k1]=nl2br(htmlspecialchars($data[$k1]));
     $data[$k1]=str_replace(" ","&nbsp;",$data[$k1]);
     $data[$k1]=str_replace("/n","<br>/n",$data[$k1]);
    }
   }
  }
  else
  {
   $data=nl2br(htmlspecialchars($data));
   $data=str_replace(" ","&nbsp;",$data);
   $data=str_replace("/n","<br>/n",$data);
  }
  Return $data;
 }
 }
?>
 
<think>由于问题描述为“欣然药品库房管理系统项目Java源码”,这是一个非常广泛的需求。通常,一个完整的库房管理系统会涉及多个模块,例如:药品入库、出库、库存管理、药品信息管理、供应商管理、报表统计等。由于篇幅限制,我无法在这里提供整个系统的完整代码,但我可以设计一个简化的系统框架,并实现部分核心功能作为示例。我们将设计以下核心:1.药品(Medicine):表示药品的基本信息。2.库存(Inventory):表示药品的库存信息。3.入库(InStock):处理药品入库操作。4.出库(OutStock):处理药品出库操作。5.库存管理(InventoryManager):管理库存,提供库存查询等功能。此外,为了简单起见,我们使用内存数据结构(如Map)来存储数据,实际项目中可能会使用数据库。下面是一个简单的实现:###1.Medicine表示药品的基本信息,包括药品编号、名称、规格、单位、生产厂家等。###2.Inventory表示库存信息,包括药品对象和当前库存数量。###3.InStock实现入库操作,包括添加入库记录并更新库存。###4.OutStock实现出库操作,包括添加出库记录并更新库存,同时检查库存是否足够。###5.InventoryManager提供库存查询功能。此外,我们还需要一个数据存储(DataStore)来模拟数据存储,这里使用静态变量来存储数据。注意:这个示例为了简化,没有考虑事务、并发、持久化等复杂问题。以下是代码实现:```javaimportjava.util.*;/***药品*/classMedicine{privateStringid;//药品编号privateStringname;//药品名称privateStringspec;//规格privateStringunit;//单位privateStringmanufacturer;//生产厂家publicMedicine(Stringid,Stringname,Stringspec,Stringunit,Stringmanufacturer){this.id=id;this.name=name;this.spec=spec;this.unit=unit;this.manufacturer=manufacturer;}//省略getter和setter方法publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetSpec(){returnspec;}publicvoidsetSpec(Stringspec){this.spec=spec;}publicStringgetUnit(){returnunit;}publicvoidsetUnit(Stringunit){this.unit=unit;}publicStringgetManufacturer(){returnmanufacturer;}publicvoidsetManufacturer(Stringmanufacturer){this.manufacturer=manufacturer;}@OverridepublicStringtoString(){return"Medicine{"+"id='"+id+'\''+",name='"+name+'\''+",spec='"+spec+'\''+",unit='"+unit+'\''+",manufacturer='"+manufacturer+'\''+'}';}}/***库存*/classInventory{privateMedicinemedicine;//药品privateintquantity;//库存数量publicInventory(Medicinemedicine,intquantity){this.medicine=medicine;this.quantity=quantity;}publicMedicinegetMedicine(){returnmedicine;}publicvoidsetMedicine(Medicinemedicine){this.medicine=medicine;}publicintgetQuantity(){returnquantity;}publicvoidsetQuantity(intquantity){this.quantity=quantity;}}/***数据存储(模拟数据库)*/classDataStore{//药品信息存储,key为药品IDpublicstaticMap<String,Medicine>medicineMap=newHashMap<>();//库存信息存储,key为药品IDpublicstaticMap<String,Inventory>inventoryMap=newHashMap<>();//入库记录(实际项目中应有入库记录,这里简化)publicstaticList<String>inStockRecords=newArrayList<>();//出库记录(实际项目中应有出库记录,这里简化)publicstaticList<String>outStockRecords=newArrayList<>();}/***入库操作*/classInStock{/***药品入库*@parammedicineId药品ID*@paramquantity入库数量*@return是否成功*/publicbooleaninStock(StringmedicineId,intquantity){//检查药品是否存在Medicinemedicine=DataStore.medicineMap.get(medicineId);if(medicine==null){System.out.println("药品不存在!");returnfalse;}//更新库存Inventoryinventory=DataStore.inventoryMap.get(medicineId);if(inventory==null){//如果库存不存在,创建新的库存记录inventory=newInventory(medicine,quantity);DataStore.inventoryMap.put(medicineId,inventory);}else{inventory.setQuantity(inventory.getQuantity()+quantity);}//添加入库记录(这里简化,只记录一条字符串)DataStore.inStockRecords.add("入库:药品ID="+medicineId+",数量="+quantity);System.out.println("入库成功!");returntrue;}}/***出库操作*/classOutStock{/***药品出库*@parammedicineId药品ID*@paramquantity出库数量*@return是否成功*/publicbooleanoutStock(StringmedicineId,intquantity){//检查药品是否存在Medicinemedicine=DataStore.medicineMap.get(medicineId);if(medicine==null){System.out.println("药品不存在!");returnfalse;}//检查库存是否足够Inventoryinventory=DataStore.inventoryMap.get(medicineId);if(inventory==null||inventory.getQuantity()<quantity){System.out.println("库存不足!");returnfalse;}//更新库存inventory.setQuantity(inventory.getQuantity()-quantity);//添加出库记录DataStore.outStockRecords.add("出库:药品ID="+medicineId+",数量="+quantity);System.out.println("出库成功!");returntrue;}}/***库存管理*/classInventoryManager{/***查询所有库存*/publicvoidlistInventory(){System.out.println("库存列表:");for(Map.Entry<String,Inventory>entry:DataStore.inventoryMap.entrySet()){Inventoryinventory=entry.getValue();System.out.println("药品ID:"+inventory.getMedicine().getId()+",药品名称:"+inventory.getMedicine().getName()+",库存数量:"+inventory.getQuantity());}}/***查询指定药品的库存*@parammedicineId药品ID*/publicvoidqueryInventory(StringmedicineId){Inventoryinventory=DataStore.inventoryMap.get(medicineId);if(inventory==null){System.out.println("该药品暂无库存!");}else{System.out.println("药品ID:"+inventory.getMedicine().getId()+",药品名称:"+inventory.getMedicine().getName()+",库存数量:"+inventory.getQuantity());}}}/***测试*/publicclassMedicineWarehouseManagement{publicstaticvoidmain(String[]args){//初始化一些药品Medicinemedicine1=newMedicine("M001","感冒灵","10g*9袋","盒","白云山");Medicinemedicine2=newMedicine("M002","阿莫西林","0.25g*24粒","盒","哈药集团");DataStore.medicineMap.put(medicine1.getId(),medicine1);DataStore.medicineMap.put(medicine2.getId(),medicine2);//入库操作InStockinStock=newInStock();inStock.inStock("M001",100);inStock.inStock("M002",200);//出库操作OutStockoutStock=newOutStock();outStock.outStock("M001",30);outStock.outStock("M002",50);//库存查询InventoryManagerinventoryManager=newInventoryManager();inventoryManager.listInventory();//查询单个药品库存inventoryManager.queryInventory("M001");}}```###代码解释:1.**Medicine**:表示药品的基本信息,包括药品编号、名称、规格、单位、生产厂家。2.**Inventory**:表示库存信息,包括药品对象和库存数量。3.**DataStore**:模拟数据存储,使用静态Map和List来存储药品、库存、入库记录和出库记录。实际项目中应使用数据库。4.**InStock**:提供入库方法,根据药品ID和数量更新库存,并记录入库记录。5.**OutStock**:提供出库方法,在出库前检查库存是否足够,然后更新库存并记录出库记录。6.**InventoryManager**:提供库存查询功能,可以查询所有库存或指定药品的库存。7.**测试(MedicineWarehouseManagement)**:在main方法中初始化药品,执行入库、出库操作,并查询库存。###运行结果示例:```入库成功!入库成功!出库成功!出库成功!库存列表:药品ID:M001,药品名称:感冒灵,库存数量:70药品ID:M002,药品名称:阿莫西林,库存数量:150药品ID:M001,药品名称:感冒灵,库存数量:70```###注意:这个示例非常简化,实际项目中需要考虑:1.数据库持久化(如使用JDBC或ORM框架)。2.事务管理(确保入库和出库操作的原子性)。3.并发控制(多用户同时操作时的数据一致性)。4.更完善的记录信息(如入库/出库时间、操作员等)。5.异常处理。6.用户界面(如Web或Swing)。###相关问题:根据这个简化的药品库房管理系统,可以延伸出以下相关问题:§§相关问题§§:1.如何将上述内存存储改为使用数据库存储?2.在药品出库时如何保证事务的原子性?3.如何设计一个药品入库记录,包含更多信息(如入库时间、操作员、供应商等)?4.如何实现库存预警功能(当库存低于某个阈值时自动报警)?</think>### 欣然药品库房管理系统核心模块实现 我将实现一个简化的药品库房管理系统核心模块,包含药品管理、库存管理和出入库操作功能。以下是使用Java实现的代码框架: ```java import java.util.*; import java.time.LocalDate; // 药品实体 class Medicine { private String id; // 药品ID private String name; // 药品名称 private String spec; // 规格 private String unit; // 单位 private String manufacturer;// 生产厂家 private LocalDate expiryDate; // 有效期 public Medicine(String id, String name, String spec, String unit, String manufacturer, LocalDate expiryDate) { this.id = id; this.name = name; this.spec = spec; this.unit = unit; this.manufacturer = manufacturer; this.expiryDate = expiryDate; } // Getters and Setters public String getId() { return id; } public String getName() { return name; } public LocalDate getExpiryDate() { return expiryDate; } // ... 其他getters/setters } // 库存管理 class InventoryManager { private Map<String, Integer> stock = new HashMap<>(); // 药品ID -> 库存数量 private Map<String, Medicine> medicines = new HashMap<>(); // 药品ID -> 药品对象 // 添加新药品 public void addMedicine(Medicine medicine, int initialStock) { medicines.put(medicine.getId(), medicine); stock.put(medicine.getId(), initialStock); } // 入库操作 public void inStock(String medicineId, int quantity) { stock.put(medicineId, stock.getOrDefault(medicineId, 0) + quantity); System.out.println(quantity + "件药品[" + medicineId + "]入库成功"); } // 出库操作(带有效期检查) public boolean outStock(String medicineId, int quantity) { if (!stock.containsKey(medicineId)) { System.out.println("错误:药品不存在"); return false; } Medicine med = medicines.get(medicineId); if (med.getExpiryDate().isBefore(LocalDate.now())) { System.out.println("错误:药品已过期"); return false; } int currentStock = stock.get(medicineId); if (currentStock < quantity) { System.out.println("错误:库存不足"); return false; } stock.put(medicineId, currentStock - quantity); System.out.println(quantity + "件药品[" + medicineId + "]出库成功"); return true; } // 获取库存信息 public int getStock(String medicineId) { return stock.getOrDefault(medicineId, 0); } // 获取临近过期药品 public List<Medicine> getExpiringMedicines(int days) { List<Medicine> expiring = new ArrayList<>(); LocalDate threshold = LocalDate.now().plusDays(days); for (Medicine med : medicines.values()) { if (med.getExpiryDate().isBefore(threshold)) { expiring.add(med); } } return expiring; } } // 库房管理系统主 public class MedicineWarehouseSystem { private InventoryManager inventory = new InventoryManager(); private Scanner scanner = new Scanner(System.in); public void run() { while (true) { System.out.println("\n=== 药品库房管理系统 ==="); System.out.println("1. 添加新药品"); System.out.println("2. 药品入库"); System.out.println("3. 药品出库"); System.out.println("4. 查询库存"); System.out.println("5. 检查临期药品"); System.out.println("0. 退出"); System.out.print("请选择操作: "); int choice = scanner.nextInt(); scanner.nextLine(); // 消耗换行符 switch (choice) { case 1: addMedicine(); break; case 2: inStock(); break; case 3: outStock(); break; case 4: checkStock(); break; case 5: checkExpiring(); break; case 0: System.exit(0); default: System.out.println("无效选择"); } } } private void addMedicine() { System.out.print("输入药品ID: "); String id = scanner.nextLine(); System.out.print("输入药品名称: "); String name = scanner.nextLine(); // 其他字段输入... System.out.print("输入有效期(YYYY-MM-DD): "); LocalDate expiry = LocalDate.parse(scanner.nextLine()); System.out.print("输入初始库存: "); int stock = scanner.nextInt(); inventory.addMedicine(new Medicine(id, name, "10mg/片", "盒", "某药厂", expiry), stock); System.out.println("药品添加成功!"); } private void inStock() { System.out.print("输入药品ID: "); String id = scanner.nextLine(); System.out.print("输入入库数量: "); int qty = scanner.nextInt(); inventory.inStock(id, qty); } // 其他方法实现似... public static void main(String[] args) { new MedicineWarehouseSystem().run(); } } ``` ### 代码解释: 1. **Medicine**: - 表示药品实体,包含ID、名称、规格、单位、生产厂家和有效期 - 使用`LocalDate`处理有效期,便于进行日期比较 2. **InventoryManager**: - `stock`映射:存储药品ID到库存数量的关系 - `medicines`映射:存储药品ID到药品对象的完整信息 - `addMedicine()`:添加新药品并初始化库存 - `inStock()`:增加指定药品库存 - `outStock()`:减少库存并检查有效期和库存量 - `getExpiringMedicines()`:获取指定天数内过期的药品 3. **MedicineWarehouseSystem**: - 提供命令行交互界面 - 实现添加药品、出入库操作、库存查询等功能 - 使用`Scanner`处理用户输入 ### 核心功能说明: 1. **药品管理**: - 支持药品基本信息录入 - 使用唯一ID标识每种药品 2. **库存管理**: - 实时跟踪药品库存数量 - 提供库存增减接口 3. **出入库控制**: - 入库操作直接增加库存 - 出库操作包含三个检查: - 药品是否存在 - 库存是否充足 - 药品是否过期 4. **有效期监控**: - 可查询指定天数内过期的药品 - 出库时自动检查有效期 ### 扩展建议: 1. 添加数据库持久化(MySQL/PostgreSQL) 2. 实现批次管理(同一药品不同批次) 3. 添加供应商和采购管理 4. 实现库存预警功能 5. 开发图形用户界面(JavaFX/Swing)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值