实现药品入库单编辑功能.docx
《实现药品入库单编辑功能.docx》由会员分享,可在线阅读,更多相关《实现药品入库单编辑功能.docx(55页珍藏版)》请在冰豆网上搜索。
实现药品入库单编辑功能
软件设计案例实验报告
学院:
数学计算机学院
专业:
软件工程
班级:
09级(7)班
姓名:
李可新
学号:
12009242539
实验项目名称:
实现药品入库单编辑功能
指导老师:
肖军
起止时间:
2012年3月20号至2012年4月10号
实现药品入库单编辑功能
1开发背景
1.1开发背景和意义
如何利用现代信息技术使企业拥有快速、高效的市场反映能力和高度的效率,已是医药经营企业,特别是医药连锁经营企业特别关心的问题。
尽快建立一个功能齐备的药品进、出库管理系统,完善现代企业的信息化管理机制,已成为医药企业生存发展的当务之急。
通过开发这个药品管理系统,使药品进销存管理工作系统化,规范化,自动化,从而达到提高管理效率的目的。
本系统开发设计思想是实现药品管理的数字化。
尽量采用现有软硬件环境,及先进的管理系统开发方案,提高系统开发水平和应用效果的目的。
系统应符合企业管理的规定,满足日常管理的需要,并达到操作过程中的直观、方便、实用、安全等要求,系统采用模块化程序设计方法,这样既便于系统功能的各种组合,又便于未参与开发的技术维护人员补充,维护。
系统应具备入库单维护功能,及时根据用户需求进行数据的添加,删除,修改,保存等操作。
1.2开发环境
考虑到该系统属于一个规模较大、较为复杂的数据库系统,对计算机的性能要求较高,决定使用MyEclipse7.0开发此系统。
所以在这里给出开发与运行环境的选择如下:
开发环境:
WindowXP
开发工具:
Myedipse9.0
数据库版本:
MicrosoftofficeAccess2007
2需求分析
2.1任务概述
药品管理系统是为了加强药品管理,以便更好地对药品进行监督和管理,对售药机构人员的工作,起到了高效性、准确性管理而开发。
本系统主要包含系统用户管理模块、药品管理模块、销售管理模块、进货管理模块、存货转移管理模块。
药品管理系统是以合理、全面、准确的药品编码体系为基础,提供了对药品数量、金额、有效期的全面管理,统一的药价管理机制规范了药品的价格。
系统能随时提供药库的库存、药品流向和消耗,还能根据现有库存,药品有效期提供采购计划或应暂停采购的药品清单,以提高资金的利用率,避免不必要的损失,方便快捷的途径对药基本信息进行定期的更新和删除等管理。
2.2功能需求
一功能划分
药品管理系统分为系统用户管理、药品销售管理、药品库存管理、进货管理、职工管理、查询与报表分析。
二功能描述
(1)系统用户管理:
允许添加删除用户(只有管理员才可以修改),任意权限的用户允许更改自己的密码,添加或删除职工,修改职工,对药品进行销售和库存的控制的资料。
(2)药品进货管理:
当企业需要增加新的销售药品时,利用此模块可以添加新的药品信息,删除旧的药品信息,修改已存在的药品信息,提供所有与药品相关的各类信息,初始化库存,初始化供应商相关信息。
(3)药品销售管理:
药品统一的价格销售,对已查询销售单,可以对药品的价格进行控制。
(4)库存转移管理:
实际生活中容易发生药品过期和损毁,此时利用此模块对过期的药品和损毁的药品进行清理。
(6)职工管理:
对药品企业进行职工的管理,对职工进行增加,修改,删除,查询等操作。
(7)查询与报表分析:
此功能并未单独作为一个模块,而是分布在各个模块中,各个模块产生业务时,可以在各模块的相应功能按钮上选择查询。
2.3性能需求
为了保证系统能够长期、安全、稳定、可靠、高效的运行,药品管理系统应该满足以下的性能需求:
1、系统处理的准确性和及时性
系统处理的准确性和及时性是系统的必要性能。
在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足学校对信息处理的需求。
2、系统的开放性和系统的可扩充性
药品管理系统在开发过程中,应该充分考虑以后的可扩充性。
例如用户查询的需求也会不断的更新和完善。
所有这些,都要求系统提供足够的手段进行功能的调整和扩充。
而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。
通过软件的修补、替换完成系统的升级和更新换代。
3、系统的易用性和易维护性
药品管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。
这就要求系统能够提供良好的用户接口,易用的人机交互界面。
要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。
4、系统的标准性
系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。
所有这些都要符合主流国际、国家和行业标准。
5、系统的先进性
目前计算系统的技术发展相当快,做为药品管理系统工程,在系统的生命周期尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。
这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。
另一方面,在系统设计和开发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的产品。
6、系统的响应速度
药品管理系统系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。
在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。
2.4数据描述(数据流图+数据字典)
图2.4系统数据流图
图2.5详细数据流图
2.4.1数据字典
数据流项目:
1.名字:
用户信息(Admin)
别名:
无
流量:
每天上十次
来源:
用户基本信息表
去向:
核对用户信息
定义:
用户信息=用户名+用户密码+权限
2.名字:
药品信息
别名:
无
流量:
每天上十次
来源:
药品表
去向:
核对药品库存初始化、核对出库信息、核对入库信息
定义:
药品信息=药品编号+药品名称+药品建成+药品规格+药品产地+批号+进价+批发价+零售价+供应商+类别+有效期+备注.
3.名字:
库存信息
别名:
无
流量:
每天上十次
来源:
库存表
去向:
核对药品库存查询、核对进货单、核对销售单
定义:
库存信息=ID+药品编号+药品名称+供应商编号+单价+数量+入库日期+仓库类别.
4.名字:
供应商信息
别名:
无
流量:
每天上十次
来源:
供应商表
去向:
反馈给用户,核对进货单
定义:
供应商信息=ID+供货商编号+供货商名+地区+备注
5.名字:
销售单单信息
别名:
无
流量:
每天上十次
来源:
销售单单表
去向:
反馈给用户
定义:
销售单信息=ID+药品编号+药品名称+数量+销售日期+销售数量+销售收入
2.4.2存储条目:
1.文件名:
用户基本信息表
别名:
无
存储方式:
随机存储
存储频率:
每天上十次
定义:
用户基本信息表=用户名+用户密码+权限
2.文件名:
药品表
别名:
无
存储方式:
随机存储
存储频率:
每天上十次
定义:
药品表=药品编号+药品名称+药品建成+药品规格+药品产地+批号+进价+批发价+零售价+供应商+类别+有效期+备注.
3.数据项条目:
项名:
药品类型
别名:
无
描述:
用户输入试题的类型
定义:
药品类型=所有药品规定类型
位置:
药品表
4.处理条目:
1.处理名:
药品添加
处理逻辑:
用户添加药品信息
执行频率:
每天上十次
2.处理名:
库存初始化
处理逻辑:
用户初始化药品库存表
执行频率:
进货上十次
3.处理名:
入库
处理逻辑:
用户添加进货单
执行频率:
每天上十次
4.处理名:
销售
处理逻辑:
用户添加销售单
执行频率:
每天上十次
3概要设计和详细设计
3.1针对业务流程,现具体描述其功能如下:
1.用户登录:
系统对用户合法性进行检查。
2.药品入库:
对新购进的药品分类进行编号,并把药品基本信息录入计算机。
3.药品销售:
对已入库的药品,销售人员可以进行销售。
4.药品进货:
对已入库的药品,管理人员可以进行货存控制。
5.存货转移:
对于已经过期或者损坏的药品,可以进行处理。
6.信息查询:
对药品的各种变动情况的查询。
7.职员管理:
对药店的职工进行管理。
3.2系统功能模块图
药品管理系统模块是用JAVASWING进行设计,MYSQL作为后台数据库管理系统。
系统管理模块分为用户登录、进货管理、销售管理、职工管理和坏货转移;用户管理模块主要是新增用户,修改用户,查询用户,删除用户;进货管理模块主要有供应商创始,进货,进货单查询,药品创始;销售管理模块主要有销售,修改价目表,销售单查询;职工管理有添加职工,处理职工。
系统体系结构框图如下图:
图3.2药品管理系统功能模块图
3.3系统流程图
依据软件工程的基本原理,综合以上分析给出系统流程图如图3.4所示。
图3.2系统的处理流程图
说明:
用户通过登陆界面登陆系统时,第一次使用系统时需要进行药品的创始,即将各个药品的详细信息依次录入系统,第一次使用系统时同样要初始化库存,将现有的药品情况录入系统,接下来通过进货模块进行进货,进货时要为每一个供应商进行供应商创始,当发生销售时销售药品,并对库存进行相应的出来,退出时推出系统。
3.4程序流程图
依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在系统实现阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
具体来说就是把经过总体设计得到的各个模块详细的加以描述。
本系统采用支持面向对象的Eclipse作为开发工具,运用了J2SE的SWing的技术,更加的方便了程序员的工作。
程序对系统配置要求较高。
在此给出软件系统的主要模块,如图3.4所示。
图3.4主程序模块图
根据以上主程序的模块图,我们可以得出下面的关于各个模块的程序流程图,如图3.5所示。
图3.5总体流程图
说明:
用户登陆系统时,系统判断用户的级别,如果为系统管理员,则可以进行用户的用户管理,如果是管理员,则可以进行相应的销售管理,进货管理,坏货转移,职工管理,管理员点击退出按钮时,退出系统。
失败
操作成功
成功
图3.6用户登陆流程
说明:
用户根据已知的用户名和密码登录系统,只有登录成功才能进行系列的用户管理、库存管理、销售管理,职工管理的操作。
登陆
录入药品
失败
成功
成功
图3.7药品创始流程
登陆
输入库存
操作成功
操作失败
成功
图3.8存货创始流程
登陆
操作失败销售单录入
操作成功
成功
图3.9销售流程
登陆
录入坏货信息
操作失败
操作成功
成功
图3.11坏货转移流程
说明:
用户登陆后进行药品的相关管理,通过药品创始,为系统初始化一些药品及添加新的代售药品。
通过存货创始将具体进货的药品录入库存中,销售成功则对库存做相应的修改。
当药品损坏或者过期时,应当对库存做相应的调整。
用户
登陆
录入职员信息
操作成功
成功
失败
图3.12职员管理
说明:
管理员通过职工管理模块进行职工的管理,添加职工后,录入到职员列表中。
3.5程序输入输出描述
3.5.1用户登陆模块
1.输入项目:
输入用户名及密码。
2.输出项目:
打开系统。
3.5.2用户管理模块
1.输入项目:
与用户相关的所有信息。
2.输出项目:
操作结果的显示,出错弹出对话框。
3.5.3销售管理模块
1.输入项目:
选择药品编号,药品的进销价格。
2.输出项目:
操作结果的显示,出错弹出对话框。
3.5.4进货管理模块
1.进货项目:
供应商的详细信息,仓库的详细信息,药品的数量。
2.输出项目:
药品的有关资料的显示,进货单列表
3.5.5坏货管理模块
1.输入项目:
发生意外无法使用的药品编号。
2.输出项目:
操作结果的显示。
3.5.6职工管理模块
1.输入项目:
职工的详细信息。
2.输出项目:
根据用户的输入显示相应的结果。
3.6数据库的设计
3.6.1数据库的概念结构设计和ER图
用户E-R图
n
1
m
m
n
n
n
1
3.7数据库的逻辑设计
药品管理管理系统主要涉及到4个表,即:
药品信息表、药品入库表、药品出库表和库存表。
药品信息表:
这张表是用来存储药品信息的。
药品添加以后它的信息就会储存到这张表中,其中包含:
药品编号、药品名称、化学名称、规格、药品类别、剂型、批号及厂商。
其中药品编号是主键,非空且唯一。
其余信息可以为空,并在数据表建立的时候给他们相应的规定好数据类型。
药品入库表:
这张表是用来存储入库表单信息的,所有入库单信息都包含在这张表中。
包括:
入库单号、药品编号、批号、入库日期、有效日期、进价、预售价、数量、整量单位、散量单位及验收人。
其中入库单号是主键,非空且唯一。
药品出库表:
这张表是用来存储出库表单信息的,所有出库信息都包含在这张表单中。
它的字段有:
出库单号、药品编号、批号、数量、出库日期及验收人。
其中出库单号是主键,非空且唯一。
药品库存表:
这张表是用来存储库存信息的,所有初始化的库存信息和出库入库信息改变后的信息都会被记录下来。
它字段有:
库存号、药品编号、批号、药品名称、数量、整量单位、散量单位、入库日期、有效日期、进价、预售价、库存下限及验收人。
3.8.数据库的物理设计
药品管理系统数据库中各个表的设计结果如下面几个表格所示。
每个表格表示为数据库中的一个表。
表3.14药品信息表
Medicine
mid(PK)
Varchar(8)
N
药品编号
mname
Varchar(40)
N
药品名称
mshortname
Varchar(10)
Y
药品建成
mnors
Varchar(4)
N
规格
marea
Varchar(40)
N
药品产地
mlot
Varchar(10)
N
批号
minpri
float
N
0
进价
mwpri
float
N
0
批发价
mpri
float
N
0
零售价
Mcon
Varchar(8)
N
供应商
Mcate
Varchar(20)
N
类别
Musetime
decimal(10,0)
N
有效期
memo
Varchar(40)
Y
备注
表3.15用户表
User
Username(PK)
Varchar(20)
N
用户名
password
Varchar(8)
N
密码
rank
int
N
1
权限
表3.16供应商表
Supplier
spid(PK)
Varchar(8)
N
供应商编号
spname
Varchar(8)
N
供应商名
Sparea
Varchar(8)
N
地区
Spmeno
Varchar(40)
Y
备注
表3.17销售单表
SalesOrder
Soid(PK)
Varchar(8)
N
销售单编号
mid
Varchar(8)
N
药品编号
Mname
Varchar(40)
N
药品名
Snum
int
N
0
数量
price
double
N
0
单价
表3.18职工表
Staff
Staffid(PK)
Varchar(8)
N
职工编号
staffname
Varchar(20)
N
职工名称
Staffsex
varchar
(2)
N
性别
stafftel
varchar(12)
N
电话
staffadd
varchar(40)
Y
地址
Staffcard
varchar(40)
N
身份证
staffzip
varchar(6)
Y
备注
表3.19货存表
Stock
Mid(PK)
Varchar(8)
N
职工编号
mname
Varchar(20)
N
职工名称
mprice
float
N
性别
mnum
int
N
电话
spid
varchar(8)
Y
地址
time
datetime
N
身份证
status
int
N
存货类别
4源代码(关键点和难点的代码及注释)
4.1用户登陆模块
关键代码如下:
//显示出图形界面,Login.java
publicLogin(Stringmsg){
super(msg);
setLayout(newBorderLayout());
login_message=newJTextField("用户登陆");
login_message.setEditable(false);
login=newJButton("登陆");
regeist=newJButton("注册");
setVisible(true);
add(login_message,"North");
JPanelbtn=newJPanel();
btn.setLayout(newGridLayout(1,2));
btn.add(login);
btn.add(regeist);
add(btn,"South");
JPanelinput=newJPanel();
JLabelunameLabel=newJLabel("用户名:
");
uname=newJTextField("",20);
JLabelpwdLabel=newJLabel("密码:
");
pwd=newJPasswordField("",20);
input.setLayout(newGridLayout(2,2));
input.add(unameLabel);
input.add(uname);
input.add(pwdLabel);
input.add(pwd);
add(input,"Center");
login.addActionListener(newloginListener());
regeist.addActionListener(newregeistListener());
}
classloginListenerimplementsActionListener{
publicvoidactionPerformed(ActionEventevent){
UserDaoud=newUserDao();
if(ud.login(uname.getText().trim(),pwd.getText().trim())){
newMainGui().start();
setVisible(false);
}else{
JOptionPane.showMessageDialog(null,"您的输入不正确,请重输","警告",1);
}
}
loginListener(){
}
}
//数据库中检查是使用UserDao.java
publicbooleanlogin(Stringusername,Stringpassword){
Connectionconn=DB.getConn();
Statementstmt=DB.getStatement(conn);
Stringsql="select*fromuserwhereusername='"+username+"'";
ResultSetrs=DB.getResultSet(stmt,sql);
try{
while(rs.next()){
Stringdbpassword=rs.getString("password");
if(dbpassword!
=null&&dbpassword.equals(password))
returntrue;
}
}catch(SQLExceptione){
System.out.println("用户登陆连接数据库异常,系统退出");
System.exit(-1);
}
returnfalse;
}
4.2通知管理模块
packagelikexin;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.table.DefaultTableModel;
importjavax.swing.table.JTableHeader;
importjavax.swing.table.TableColumn;
importjavax.swing.table.TableModel;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Image;
importjava.awt.Toolkit;
importlikexin.DButil;
/**
*通知档案管理
*
*/
publicclasstzdaglextendsJFrameimplementsActionListener,WindowListener
{
privatestaticfinallongserialVersionUID=1L;
Fontfont1=newFont("Default",Font.BOLD,15);
Fontfont2=newFont("Default",Font.BOLD,40);
privateStringuname=null;
privateStringgro=null;
privateJMenumenu1=newJMenu("返回");
privateJMenuItemment11=newJMenuItem("返回主界面");
privateJMenuBarmenubar=newJMenuBar();
privateJButtonbut