Java药店管理系统设计报告.docx
《Java药店管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《Java药店管理系统设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
Java药店管理系统设计报告
Java药店管理系统设计报告
————————————————————————————————作者:
————————————————————————————————日期:
洛阳理工学院
课程设计报告
课程名称面向对象程序设计课程设计
设计题目药店管理系统
专业计算机科学与技术
班级
学号
姓名
完成日期2017.1.6
课程设计任务书
设计题目:
药店管理系统
设计内容与要求:
1.问题描述
设计实现药店管理系统。
能够实现药品库存管理、销售信息管理和查询功能。
2.基本要求
库存管理:
包括药品入库、出库管理,药品库存报警,药品有效期管理(过期报警)。
销售管理:
根据实际销售自动生成销售单据。
如果是会员,则药品价格按95折计算。
查询及统计功能:
对指定时间段内的出/入库进行查询/统计,对药品有效期进行查询/统计,对药品过期进行查询/统计,对指定时间段内的药品销售进行查询/统计以及利润查询/统计等。
能帮顾客查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。
指导教师:
2016年12月20日
课程设计评语
成绩:
指导教师:
年月日
目 录
第1章需求分析
1.1功能需求
药店管理系统能够实现药品库存、销售信息管理和查询功能,根据实际销售自动生成销售单据。
能帮顾客查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。
库存管理:
包括药品入库、出库管理,药品库存报警,药品有效期管理(过期报警)。
销售管理:
根据实际销售自动生成销售单据。
如果是会员,则药品价格按95折计算。
查询及统计功能:
对指定时间段内的出/入库进行查询/统计,对药品有效期进行查询/统计,对药品过期进行查询/统计,对指定时间段内的药品销售进行查询/统计以及利润查询/统计等。
能帮顾客查询药品信息,能按品名、生产厂家、药品类别、存货量进行查询。
1.2数据需求
经过对学校附近的药店的调研以及在网上查找的资料,药店药品管理系统的处理对象主要包括:
药品信息、供应商信息、顾客信息、药品销售信息、药品存储信息等几个方面。
根据市场需求需要的数据组成如下需要的数据有操作员、会员、药品、订单、厂家、进货单这些实体的组成数据有,操作人员需要包括:
账号、密码、姓名、联系电话、邮箱、地址;会员表:
账号、姓名、年龄、联系电话、邮箱、地址;药品信息中含有:
药品ID、药品名、类别、生产日期、有效期、进价、售价、生产厂家;订单详情中含有的有:
订单编号、药品名、购买数量、售价、购买人员、销售日期;厂家信息包括:
厂家编号、厂家名、电话、地址;进药表、药品ID、操作员、进药日期、进药数量
第2章数据库设计
存储
N
仓库
N
1
年龄
姓名
账号
电话
邮箱
编号
品名
数量
售价
买家
日期
账号
密码
姓名
电话
邮箱
地址
药品
操作员
订单
会员
提交
参照
处理
厂家
生产
1
1
厂名
类别
ID
电话
地址
名称
编号
编号
数量
生产期
有效期
进价
售价
批次
ID
1
2.1数据库逻辑级设计
E-R如下图所示
1
N
N
N
N
N
2.2关系模式
管理员(账号、密码、姓名、联系电话、邮箱、地址)
会员(账号、姓名、年龄、联系电话、邮箱、地址)
药品(药品ID、药品名称、类别、生产厂家编号)
仓库(批次ID、药品ID、药品名、类别、生产日期、有效期、进价、售价、生产厂家)
订单详情(订单编号、药品名、购买数量、售价、购买人员、销售日期、操作员姓名)
厂家(厂家编号、厂家名、电话、地址)
进药(药品ID、操作员姓名、进药日期、进药数量)
其中下划线部分为主键
2.3基本表
根据需求构建表的基本组成。
(1)管理员表如图2-1
名称
字段名称
数据类型
长度
主键
允许空值
账号
Mno
varchar
10
是
否
密码
Mpassw
varchar
20
否
否
姓名
Mname
varchar
20
否
否
电话
Mphone
char
11
否
是
邮箱
Memail
varchar
20
否
是
地址
Maddress
varchar
50
否
是
图2-1
(2)会员表如图2-2
名称
字段名称
数据类型
长度
主键
允许空值
会员号
Cno
varchar
10
是
否
姓名
Cname
varchar
20
否
否
年龄
Cage
int
否
是
电话
Cphone
char
11
否
是
邮箱
Cemail
varchar
20
否
是
地址
Caddress
varchar
50
否
是
图2-2
(3)药品表如图2-3
名称
字段名称
数据类型
长度
主键
允许空值
编号
Dno
varchar
10
是
否
品名
Dname
varchar
20
否
否
类别
Dclass
varchar
20
否
否
生产商
Sname
varchar
20
否
否
图2-3
(4)供应商表如图2-4
名称
字段名称
数据类型
长度
主键
允许空值
编号
Sno
varchar
10
是
否
供应商名
Sname
varchar
20
否
否
电话
Sphone
char
11
否
是
邮箱
Semail
varchar
20
否
是
地址
Saddress
varchar
50
否
是
图2-4
(5)库存表如图2-5
名称
字段名称
数据类型
长度
主键
允许空值
批次
Lno
varchar
10
是
否
药品ID
Dno
varchar
10
否
否
药品名
Dname
varchar
20
否
否
药品类别
Dclass
varchar
20
否
否
数量
Pquantity
int
否
否
入库时间
Idate
date
否
否
过期时间
out_date
date
否
否
进价
Dbidd
float
否
否
售价
Dprice
float
否
否
供应商
Sname
varchar
20
否
否
图2-5
(6)销售表如图2-6
名称
字段名称
数据类型
长度
主键
允许空值
订单
Slno
varchar
10
是
否
批次
Lno
varchar
10
否
否
会员ID
Cno
varchar
10
否
是
售价
Ddprice
float
否
否
数量
Mquantity
int
否
否
总价
Amoney
float
否
否
日期
Idate
date
否
否
图2-6
(7)缺货单表如图2-7
名称
字段名称
数据类型
长度
主键
允许空值
缺货单号
Lno
varchar
10
是
否
药品ID
Dno
varchar
10
否
否
数量
Pquantity
int
否
否
日期
Pdade
date
否
否
状态
Astate
varchar
10
否
否
图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-1
4.2界面效果图及代码
(1)药店登录界面如图4-1
图4-1
主要代码如下
privatevoidloginActionPerformed(ActionEventevt){
StringuserName=this.UserNameTxt.getText();
Stringpassword=newString(this.UserPawTxt.getPassword());
if(StringUtil.isEmpty(userName)){
JOptionPane.showMessageDialog(null,"用户名不能为空!
");
return;
}
if(StringUtil.isEmpty(password)){
JOptionPane.showMessageDialog(null,"密码不能为空!
");
return;
}
Useruser=newUser(userName,password);
Connectioncon=null;
try{
con=dbUtil.getCon();
UsercurrentUser=userDao.login(con,user);
if(currentUser!
=null){
dispose();
newMainFrm().setVisible(true);
}else{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!
");
}
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
try{
dbUtil.closeCon(con);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}}}
(2)药店主界面如图4-2
图4-2
(3)入库界面如图4-3
图4-3
主要代码:
privatevoidDrugAddAction(ActionEvente){
Connectioncon=null;
StringdName=dNameTxt.getText();
StringdClass=dClassTxt.getText();
StringsName=sNameTxt.getText();
StringdNo="";inta=0;
DrugDaodrugDao=newDrugDao();
Drugdrug=newDrug(dNo,dName,dClass,sName);
try{
con=dbUtil.getCon();
a=drugDao.insert(con,drug);
}catch(Exceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
if(a==1){
JOptionPane.showConfirmDialog(null,"添加成功");
resetValue();
}else{
JOptionPane.showConfirmDialog(null,"添加失败");
}}
(4)添加药品如图4-4
图4-4
(5)修改药品如图4-5
图4-5
主要代码如下:
privatevoiddrugAddActionPerformed(ActionEventevt)throwsSQLException{
StringpQuantity=this.pQuantityTxt.getText();
StringdBidd=this.dBiddTxt.getText();
Stringdprice=this.dPriceTxt.getText();
Stringout_date=this.out_dateTxt.getText();
introw=drugTable.getSelectedRow();
Stringdno=(String)drugTable.getValueAt(row,0);
Stringdname=(String)drugTable.getValueAt(row,1);
Stringdclass=(String)drugTable.getValueAt(row,2);
Stringsname=(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;
}
DrugStoredrugStore=newDrugStore(dno,dname,dclass,sname,Integer.parseUnsignedInt(pQuantity),Float.parseFloat(dBidd),Float.parseFloat(dprice),out_date,mName);
Connectioncon=null;
try{
con=dbUtil.getCon();
intaddNum=drugStoreDao.add(con,drugStore);
if(addNum==1){
JOptionPane.showMessageDialog(null,"入库成功!
");
resetValue();
}else{
JOptionPane.showMessageDialog(null,"入库失败!
");
}
}catch(Exceptione){
e.printStackTrace();
JOptionPane.showMessageDialog(null,"入库失败!
");
}finally{
try{
dbUtil.closeCon(con);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}}}
(6)会员管理界面如图4-6
图4-6
主要代码如下:
privatevoidcustromerAddActionEvent(ActionEvente){
Connectioncon=null;
StringcNo=this.cNoTxt.getText();
StringcName=this.cNameTxt.getText();
StringcAge=this.cAgeTxt.getText();
StringcPhone=this.cPhoneTxt.getText();
StringcEmail=this.cEmailTxt.getText();
StringcAddress=this.cAddressTxt.getText();
Customercustomer=newCustomer(cNo,cName,Integer.parseInt(cAge),cPhone,cEmail,cAddress);
try{
con=dbUtil.getCon();
intaddNum=customerDao.add(con,customer);
if(addNum==1){
JOptionPane.showMessageDialog(null,"添加成功!
");
resetValue();
}else{
JOptionPane.showMessageDialog(null,"添加失败!
");
}
}catch(Exceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();}}
(7)出售管理界面如图4-7
图4-7
主要代码如下:
//监听会员信息事件
privatevoidisNotUser1(ActionEvente2){
introw=drugTable.getSelectedRow();
Connectioncon=null;
StringcNo=this.cNoTxt.getText();
custormerDao=newCustomerDao();
Customercustomer=newCustomer(cNo);
try{
con=dbUtil.getCon();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
if(custormerDao.IsCustomer(con,customer)){
userTxt.setText("是");
per=(float)0.95;
}else{
per=1;
userTxt.setText("否");
return;}}
//计算总金额事件
privatevoiddrugActionMoney(MouseEventarg0){
Stringcmuantity=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);}
else{
JOptionPane.showConfirmDialog(null,"购买数量不能大于库存量");
return;}}}
(8)有效期查询如图4-8
图4-8
(9)销售查询如图4-9
图4-9
(10)缺货查询如图4-10
图4-10
第5章总结
生活中处处需要处理数据,在人工管理阶段,人们耗费大量的人力、时间等来处理这些数据,不仅效率低、而且出错率较高。
现在,我们处在信息时代,有了电脑这种高科技产品,使得我们的生活变得信息化,各行各业都与电脑计算机联系起来了,人工管理数据的时代已经逐渐远去,取而代之的是数据库管理,它使得人们的工作效率大大的提高了。
在这个课程设计中,我的题目是药店管理系统,在今天,我们周围的一些小型个体在药品管理上还是由人来实现,所以,我的想法是设计一个针对小型个体药店管理系统。
Java监听器是Java功能实现的重要组成部分,监听器中的接口也是很重要的一个环节。
两个类中的两个类似的功能,调用他们的类动态的决定一种实现,那他们提供一个抽象父类,子类分别实现父类所定义的方法。
问题的出现:
Java是一种单继承的语言,一般情况下,哪个具体类可能已经有了一个超类,解决是给它的父类加父类,或者给它父类的父类加父类,直到移动到类等级结构的最顶端。
这样一来,对一个具体类的可插入性的设计,就变成了对整个等级结构中所