Java药店标准管理专业系统设计方案报告.doc
洛 阳 理 工 学 院课 程 设 计 报 告 课程名称 面向对象程序设计课程设计 设计题目 药店管理系统 专 业 计算机科学和技术 班 级 学 号 姓 名 完成日期 .1.6 课 程 设 计 任 务 书设计题目: 药店管理系统 设计内容和要求:1.问题描述设计实现药店管理系统。能够实现药品库存管理、销售信息管理和查询功效。 2.基础要求库存管理:包含药品入库、出库管理,药品库存报警,药品使用期管理(过期报警)。销售管理:依据实际销售自动生成销售单据。假如是会员,则药品价格按95折计算。查询及统计功效:对指定时间段内出/入库进行查询/统计,对药品使用期进行查询/统计,对药品过期进行查询/统计,对指定时间段内药品销售进行查询/统计和利润查询/统计等。能帮用户查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。 指导老师: 12 月 20 日课 程 设 计 评 语 成绩: 指导老师: 年 月 日目录第1章需求分析11.1功效需求11.2数据需求1第2章 数据库设计22.1数据库逻辑级设计22.2 关系模式22.3基础表3第3章 概要设计43.1系统结构和模块功效4第4章 具体设计和实现64.1模块步骤图64.2界面效果图及代码7第5章总结14第1章 需求分析1.1功效需求药店管理系统能够实现药品库存、销售信息管理和查询功效,依据实际销售自动生成销售单据。能帮用户查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。库存管理:包含药品入库、出库管理,药品库存报警,药品使用期管理(过期报警)。销售管理:依据实际销售自动生成销售单据。假如是会员,则药品价格按95折计算。查询及统计功效:对指定时间段内出/入库进行查询/统计,对药品使用期进行查询/统计,对药品过期进行查询/统计,对指定时间段内药品销售进行查询/统计和利润查询/统计等。能帮用户查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。1.2数据需求经过对学校周围药店调研和在网上查找资料,药店药品管理系统处理对象关键包含:药品信息、供给商信息、用户信息、药品销售信息、药品存放信息等多个方面。依据市场需求需要数据组成以下需要数据有操作员、会员、药品、订单、厂家、进货单这些实体组成数据有,操作人员需要包含:账号、密码、姓名、联络电话、邮箱、地址;会员表:账号、姓名、年纪、联络电话、邮箱、地址;药品信息中含有:药品ID、药品名、类别、生产日期、使用期、进价、售价、生产厂家;订单详情中含有有:订单编号、药品名、购置数量、售价、购置人员、销售日期;厂家信息包含:厂家编号、厂家名、电话、地址;进药表、药品ID、操作员、进药日期、进药数量第2章 数据库设计2.1数据库逻辑级设计E-R以下图所表示存放N仓库N1年纪姓名账号电话邮箱编号品名数量售价买家日期账号密码姓名电话邮箱地址药品操作员订单会员提交参考处理厂家生产11厂名类别ID电话地址名称编号编号数量生产期使用期进价售价批次ID11NNNNN2.2 关系模式管理员(账号、密码、姓名、联络电话、邮箱、地址)会员(账号、姓名、年纪、联络电话、邮箱、地址)药品(药品ID、药品名称、类别、生产厂家编号)仓库(批次ID、药品ID、药品名、类别、生产日期、使用期、进价、售价、生产厂家)订单详情(订单编号、药品名、购置数量、售价、购置人员、销售日期、操作员姓名)厂家(厂家编号、厂家名、电话、地址)进药(药品ID、操作员姓名、进药日期、进药数量)其中下划线部分为主键2.3基础表依据需求构建表基础组成。(1)管理员表图2-1名称字段名称数据类型长度主键许可空值账号Mnovarchar10是否密码Mpasswvarchar20否否姓名Mnamevarchar20否否电话Mphonechar11否是邮箱Memailvarchar20否是地址Maddressvarchar50否是图2-1(2)会员表图2-2名称字段名称数据类型长度主键许可空值会员号Cnovarchar10是否姓名Cnamevarchar20否否年纪Cageint否是电话Cphonechar11否是邮箱Cemailvarchar20否是地址Caddressvarchar50否是图2-2(3)药品表图2-3名称字段名称数据类型长度主键许可空值编号Dnovarchar10是否品名Dnamevarchar20否否类别Dclassvarchar20否否生产商Snamevarchar20否否 图2-3(4)供给商表图2-4名称字段名称数据类型长度主键许可空值编号Snovarchar10是否供给商名Snamevarchar20否否电话Sphonechar11否是邮箱Semailvarchar20否是地址Saddressvarchar50否是 图2-4(5)库存表图2-5名称字段名称数据类型长度主键许可空值批次Lnovarchar10是否药品IDDnovarchar10否否药品名Dnamevarchar20否否药品类别Dclassvarchar20否否数量Pquantityint否否入库时间Idatedate否否过期时间out_datedate否否进价Dbiddfloat否否售价Dpricefloat否否供给商Snamevarchar20否否 图2-5(6)销售表图2-6名称字段名称数据类型长度主键许可空值订单Slnovarchar10是否批次Lnovarchar10否否会员IDCnovarchar10否是售价Ddpricefloat否否数量Mquantityint否否总价Amoneyfloat否否日期Idatedate否否 图2-6(7)缺货单表图2-7名称字段名称数据类型长度主键许可空值缺货单号Lnovarchar10是否药品IDDnovarchar10否否数量Pquantityint否否日期Pdadedate否否状态Astatevarchar10否否 图2-7第3章 概要设计3.1系统结构和模块功效本系统结构关键包含登录模块,主界面模块,添加药品名模块,修改和删除品名模块,入库模块, 会员管理模块,出售管理模块,使用期查询模块,盈利查询模块,缺货查询模块。(1) 登录界面设计:为了保护药店销售管理系统安全性,所以设置必需输入账号密码才能进入系统。(2) 主界面设计:为了让系统愈加简练,愈加人性化,特加入主界面,能够让操作人员愈加清楚找到需要功效,只要用户在该界面选择对应按钮,她就会弹出和各个相对应界面。(3) 添加品名设计:为了能够使自己药店愈加多元化,愈加轻易管理,引入添加药品名称设计。能够让使用者愈加清楚知道现现在自己药店中药品种类和药品类型,以进行愈加方便进货和添加新药品。(4) 修改品名设计:为了让使用者在不使用某一家药品或药品信息更改后进行立即删除修改。保持药品库实时性。(5) 入库设计:能够在该页面对已经录入药品名进行入库,会自动添加入库时间,生成一个批次编号,方便管理,能够在售卖中立即发觉哪批货物为最先入库。(6) 会员管理设计:进行会员系统设计能够让药店愈加好锁定固定用户,在此界面中,使用者能够对会员信息进行录入,修改和删除。(7) 出售管理设计:出售管理中能够依据药品ID和药品名称进行搜索,查找药品然后售卖,而且有会员检测机制,当输入正确会员ID后检测然后进行打折。(8) 使用期查询设计:能够对库存中药品进行使用期查询,当使用期低于一定时间就会在此窗口显示出来,而且支持对立即过期药品和已经过期药品进行销毁处理。(9) 盈利查询设计:能够对要求时间范围订单进行查询,而且计算总定价、总售价和总盈利。能够具体显示药品批次ID、购置人ID,时间、数量。假如是非会员就会显示出为匿名,默认是对全部订单进行计算查询(10) 缺货查询设计:自动对售卖过程中药品进行统计,当数量低于一定数值会自动在缺货单中显示出来,而且显示现在状态,假如进行进货后会将未处理改为已处理。(11) 退出功效设计:此功效比较简单,仅仅在弹出警告窗口后退出。第4章 具体设计和实现4.1模块步骤图依据系统需求做出模块之间大致步骤图以下4-1所表示。添加修改入库会员出售使用期盈利缺货药品管理库存管理销售管理查询管理 登录主界面图4-14.2界面效果图及代码(1)药店登录界面图4-1 图4-1关键代码以下private void loginActionPerformed(ActionEvent evt) String userName=this.UserNameTxt.getText();String password=new String(this.UserPawTxt.getPassword();if(StringUtil.isEmpty(userName)JOptionPane.showMessageDialog(null, "用户名不能为空!");return;if(StringUtil.isEmpty(password)JOptionPane.showMessageDialog(null, "密码不能为空!");return;User user=new User(userName,password);Connection con=null;try con=dbUtil.getCon();User currentUser=userDao.login(con, user);if(currentUser!=null)dispose();new MainFrm().setVisible(true);elseJOptionPane.showMessageDialog(null, "用户名或密码错误!"); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();finallytry dbUtil.closeCon(con); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();(2)药店主界面图4-2 图4-2(3)入库界面图4-3 图4-3关键代码:private void DrugAddAction(ActionEvent e)Connection con=null;String dName=dNameTxt.getText();String dClass=dClassTxt.getText();String sName=sNameTxt.getText();String dNo=""int a = 0;DrugDao drugDao = new DrugDao();Drug drug=new Drug(dNo,dName,dClass,sName);try con=dbUtil.getCon();a=drugDao.insert(con,drug); catch (Exception e1) / TODO Auto-generated catch blocke1.printStackTrace();if(a=1)JOptionPane.showConfirmDialog(null, "添加成功");resetValue();elseJOptionPane.showConfirmDialog(null, "添加失败");(4)添加药品图4-4 图4-4(5)修改药品图4-5 图4-5关键代码以下:private void drugAddActionPerformed(ActionEvent evt) throws SQLException String pQuantity=this.pQuantityTxt.getText();String dBidd=this.dBiddTxt.getText();String dprice=this.dPriceTxt.getText();String out_date=this.out_dateTxt.getText();int row=drugTable.getSelectedRow();String dno=(String)drugTable.getValueAt(row, 0);String dname=(String)drugTable.getValueAt(row, 1);String dclass=(String)drugTable.getValueAt(row, 2);String sname=(String)drugTable.getValueAt(row, 3);if(StringUtil.isEmpty(pQuantity)JOptionPane.showMessageDialog(null, "数量不能为空!");return;if(StringUtil.isEmpty(dBidd)JOptionPane.showMessageDialog(null, "进价不能为空!");return;if(StringUtil.isEmpty(dprice)JOptionPane.showMessageDialog(null, "售价不能为空!");return;DrugStore drugStore=new DrugStore(dno,dname,dclass,sname,Integer.parseUnsignedInt(pQuantity),Float.parseFloat(dBidd),Float.parseFloat(dprice),out_date,mName);Connection con=null;trycon=dbUtil.getCon();int addNum=drugStoreDao.add(con, drugStore);if(addNum=1)JOptionPane.showMessageDialog(null, "入库成功!");resetValue();elseJOptionPane.showMessageDialog(null, "入库失败!");catch(Exception e)e.printStackTrace();JOptionPane.showMessageDialog(null, "入库失败!");finallytry dbUtil.closeCon(con); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();(6)会员管理界面图4-6 图4-6关键代码以下:private void custromerAddActionEvent(ActionEvent e)Connection con=null;String cNo=this.cNoTxt.getText();String cName=this.cNameTxt.getText();String cAge=this.cAgeTxt.getText();String cPhone=this.cPhoneTxt.getText();String cEmail=this.cEmailTxt.getText();String cAddress=this.cAddressTxt.getText();Customer customer = new Customer(cNo,cName,Integer.parseInt(cAge),cPhone,cEmail,cAddress);try con=dbUtil.getCon();int addNum=customerDao.add(con, customer);if(addNum=1)JOptionPane.showMessageDialog(null, "添加成功!");resetValue();elseJOptionPane.showMessageDialog(null, "添加失败!"); catch (Exception e1) / TODO Auto-generated catch blocke1.printStackTrace();(7)出售管理界面图4-7 图4-7关键代码以下:/监听会员信息事件private void isNotUser1(ActionEvent e2) int row=drugTable.getSelectedRow();Connection con=null;String cNo=this.cNoTxt.getText();custormerDao=new CustomerDao();Customer customer =new Customer(cNo);try con=dbUtil.getCon(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();if(custormerDao.IsCustomer(con,customer)userTxt.setText("是");per=(float) 0.95;elseper=1;userTxt.setText("否");return;/计算总金额事件private void drugActionMoney(MouseEvent arg0)String cmuantity=this.cMuantityTxt.getText();if(StringUtil.isNotEmpty(this.cMuantityTxt.getText()if(Integer.parseInt(cmuantity)<=Integer.parseInt(cMuantity)cMoneyTxt.setText(String.valueOf(per*money*Integer.parseInt(cmuantity);zmoney=per*money*Integer.parseInt(cmuantity);elseJOptionPane.showConfirmDialog(null, "购置数量不能大于库存量");return;(8)使用期查询图4-8 图4-8(9)销售查询图4-9 图4-9(10)缺货查询图4-10 图4-10第5章 总结生活中四处需要处理数据,在人工管理阶段,大家花费大量人力、时间等来处理这些数据,不仅效率低、而且犯错率较高。现在,我们处于信息时代,有了电脑这种高科技产品,使得我们生活变得信息化,各行各业全部和电脑计算机联络起来了,人工管理数据时代已经逐步远去,取而代之是数据库管理,它使得大家工作效率大大提升了。 在这个课程设计中,我题目是药店管理系统,在今天,我们周围部分小型个体在药品管理上还是由人来实现,所以,我想法是设计一个针对小型个体药店管理系统。Java监听器是Java功效实现关键组成部分,监听器中接口也是很关键一个步骤。两个类中两个类似功效,调用她们类动态决定一个实现,那她们提供一个抽象父类,子类分别实现父类所定义方法。问题出现:Java是一个单继承语言,通常情况下,哪个具体类可能已经有了一个超类,处理是给它父类加父类,或给它父类父类加父类,直到移动到类等级结构最顶端。这么一来,对一个具体类可插入性设计,就变成了对整个等级结构中全部类修改。在刚开始试验时候,按键总是没反应,以后才知道是没有安装监听器原因,加上监听器后又出现问题了,还是没反应,原因是没有让监听器实现其反应,在监听器中实现其方法后成功处理问题。总而言之,此次试验就是这么一步步探索出来,哪里出现问题,就在哪里寻求原因,还好总算把试验做出来了。