✅ 操作成功!

药店管理系统

发布时间:2023-06-04 作者:admin 来源:文学

药店管理系统

药店管理系统

-

2023年2月12日发(作者:)

网络工程毕业论文

课题

药店管理系统设计与实现

专业

网络工程

摘要

21世纪是信息的世纪,信息化正以极快的速度取代传统的效率低下的人工作

业。随着小型计算机,微型计算机的成本的不断下降,性能的不断提升,使得计算

机作为当今最重要的信息产品,成为人民大众必不可缺的工具。计算机技术已经广

泛应用于日常办公,企业管理,文字处理、电子报表以及进行简单的人事管理、财

务管理等,大大提高了我们的工作效率,节省许多资源,使管理更加规范化,系统

化,科学化。

目前随着计算机技术的发展和普及,各行各业的管理机构开始使用计算机处理大

量信息。在我国药品品种繁多,规模甚大,以往的手工记载、查询操作容易出错且

工作效率低,已经不能适应时代发展的要求,从管理的角度来看,对管理者会造成

诸多的不便,还有可能疏忽一些细节,让不法商家逃脱罪责。所以,市场迫切需要

一款简单实用的药品管理系统。

经过前期的调研,在反复的修改和综合考量后,笔者觉定使用JAVASWING技

术,ECLIPSEJ2SE开发平台,。药品管理系统的设计理念是,让企业能够拥有更高

效的管理工具,使企业在21世纪异常激烈的竞争中脱颖而出。国外的管理系统有许

多优秀的经验,但是并不完全符合我国的国情,我国的最广大药品销售的企业是分

布在全国各地的中小型销售企业。所以,此次开发的药品管理系统功能乃是汲取了

外国优秀管理工具的优秀功能,同时又创新了更符合我国用户需求的功能的一个综

合信息管理系统。药品管理系统分为五大模块,分别为系统用户模块,职工信息管

理模块,进货管理模块,销售管理模块,库存转移管理模块。该五大功能模块设计

合理,功能全面,同时界面友好,非常符合我国各大小型药品销售企业的管理需

求。但由于时间仓促以及笔者找工作实习的原因,系统还不是很完善,和市场上一

些成熟的产品比较仍然有不足之处。今后笔者将利用工作休息时间,学习新的技术

和设计理念,对药品管理系统进行深入的二次迭代开发,目标是在今后三个月使代

码更加规范,界面更加美观,程序的可拓展性进一步增强,更加与市场接轨,然后

发布到ChinaJavaWorld上开源供大家免费下载使用和学习。

关键词:JAVASWING、、JDBC、药品管理管理系统、药品管理

Abstract

21stcenturyisthecenturyofinformation,Informationtechnologyiswithgreatspeed

allcomputer,

microcomputercostofdeclining,performance,makesthecomputerasthemostimportant

informationproduct,ertechnology

hasbeenwidelyusedindailyoffice,enterprisemanagement,wordprocessing,

spreadsheetsandsimplepersonnelmanagement,financialmanagement,andgreatly

improveourworkefficiency,savingmanyresources,makemanagementstandardization,

systematization,morescientific.

Nowwiththedevelopmentofcomputertechnologyandpopularizationofthe

managementinstitution,

country,thegreatvarietyofscale,pastrecords,queryoperationmanualandlowworking

efficiencyerror-prone,alreadycannotadapttothedevelopmentofTheTimes,from

managementpointofview,themanagerwillcausemanyinconvenience,theremaybe

somedetails,ore,asimpleandpracticaldrug

managementsystemisverymuchinlinewiththeneedsofthemarket.

Throughtheresearchonthemodification,andcomprehensiveconsiderations

repeatedly,theauthordeterminedafteruseJAVASWINGtechnology,ECLIPSEJ2SE

JAVAdevelopmentplatform,

managementsystemisdesigned,makeenterprisecanhavemoreefficientmanagement

tools,nmanagementsystem

hasmanyexcellentexperience,butnotcompletelyaccordwiththenationalconditionof

ourcountry,China\'svastdrugsalesenterpriseisdistributedinthesmallandmedium-sized

ore,thedevelopmentofmedicinemanagementsystem

functionisabsorbedforeignoutstandingmanagementtoolsandexcellentfunction,the

innovationofourcustomersdemandmoreaccordwithacomprehensivefunctionsof

nagementsystemisdividedintofivemodules,

respectively,theworkersystemuserinformationmanagementmodule,stockmanagement

module,modules,e

functionmoduledesignisreasonable,comprehensivefunctions,andfriendlyinterface,

verylargepharmaceuticalsalesinconformitywiththerequirementsoftheenterprise

tolackoftimeandthepracticeofthejob,systemisnotperfect,and

workwilluse

theresttime,learningnewtechnologyanddesignconceptofdrugadministrationsystem,

furtherdevelopmentiteration,thesecondgoalinthenextthreemonthsaremorestandard

code,theinterfaceoftheprogramcanbemorebeautiful,expandingfurtherstrengthens,

morewithmarket,andthenreleasedtotheChinaopenforWorldJavaonlearningand

usingfreedownload.

Keywords:JavaSwing、、JDBC、MedMgrSystem、Medicinesales&mgr

目录

第一章概述..............................................................6

系统开发背景和意义..................................................6

开发环境............................................................6

第二章需求分析..........................................................8

任务概述............................................................8

功能需求............................................................8

性能需求............................................................7

数据描述(数据流图+数据字典).........................................8

第三章系统总体设计.....................................................14

业务流程...........................................................14

系统功能模块图.....................................................14

系统流程图.........................................................16

第四章详细设计.........................................................18

程序流程图.........................................................18

程序输入输出描述...................................................23

用户管理模块...................................................23

职员管理模块...................................................23

销售管理模块...................................................23

进货管理模块...................................................23

货存转移模块...................................................23

财务信息模块...................................................23

数据库的设计.......................................................24

数据库的概念结构设计和ER图....................................24

数据库的逻辑设计...............................................26

数据库的物理设计...............................................27

第五章编码实现.........................................................29

用户登陆模块.......................................................31

用户管理模块.......................................................33

销售管理模块.......................................................37

进货管理模块.......................................................39

职员管理模块.......................................................43

坏货转移模块.......................................................45

第六章测试分析报告.....................................................47

什么是软件测试.....................................................48

软件测试的目的.....................................................48

测试计划和要点.....................................................48

药品以及药品管理模块测试要点...................................48

销售管理测试要点...............................................48

进货管理测试要点...............................................48

职工信息测试要点...............................................46

部分测试图.........................................................48

测试结论...........................................................50

总结.....................................................................51

参考文献.................................................................51

第一章概述

如何利用现代信息技术使企业拥有快速、高效的市场反映能力和高度的效率,

已是医药经营企业,特别是医药连锁经营企业特别关心的问题。尽快建立一个功能

齐备的药品进、出库管理系统,完善现代企业的信息化管理机制,已成为医药企业

生存发展的当务之急。通过开发这个药品管理系统,使药品进销存管理工作系统

化,规范化,自动化,从而达到提高管理效率的目的。本系统开发设计思想是实现

药品管理的数字化。

尽量采用现有软硬件环境,及先进的管理系统开发方案,提高系统开发水平和

应用效果的目的。系统应符合企业管理的规定,满足日常管理的需要,并达到操作

过程中的直观、方便、实用、安全等要求,系统采用模块化程序设计方法,这样既

便于系统功能的各种组合,又便于未参与开发的技术维护人员补充,维护。系统应

具备数据库维护功能,及时根据用户需求进行数据的添加,删除,修改等操作。

系统开发背景和意义

本次的毕业设计是一个可以充分地锻炼自己的动手实践能力以及考核四年大学

所学知识的积累的机会。针对我的实际情况,结合四年来对计算机软件的熟练程度

以及对数据库的了解,经过与指导老师以及小组成员的协商,我选择了药品管理系

统软件设计与开发这个课题。这是一个属于实际的课题,如果顺利,我们所设计的

药品管理系统将实际应用到中国最广大的售药系统中去,对于初涉社会的我们来

说,无疑是一个非常好地锻炼机会。考虑到该系统属于一个规模较大、较为复杂的

数据库系统,对计算机的性能要求较高,。

此次毕业设计选题范围是相当广泛且实用的,含盖了目前大部分计算机软件类

开发的课题,给我们很大的自由发展的空间。可以每个学生挑选出最合适的课题,

更适合同学们的兴趣和价值取向。选择此课题对我来说有着不同的意义,应该来说

此课题更接近于实际开发的全过程。同时对编程、数据库调用、结构化查询语言

STRUCTUREDQUERYLANGUAGE等方面是一个比较综合的考验。让我在此过程

中得到很好的锻炼。

随着医疗制度改革的进行,药品招标采购的逐年规范和扩大,药品管理已经成

为药剂科乃至整个医院管理的重要内容。传统的管理模式已经跟不上顾客对快节奏

生活的要求了!随着计算机的普及和计算机软件的不断发展,越来越多的医疗机构

开始注视计算机这个辅助工具为自己带来的效益了。医院的售药机构需要通过计算

机提高自已工作效率、对药品实现进销存管理和职工管理,提高经济效益

开发环境

开发环境的选择会影响到数据库的设计,所以在这里给出图书管理系统开发与

运行环境的选择如下:

开发环境:Window7旗舰版

开发工具:

数据库版本:MySql

数据库引擎:MyISAM

第二章需求分析

任务概述

药品管理系统是为了加强药品管理,以便更好地对药品进行监督和管理,对售

药机构人员的工作,起到了高效性、准确性管理而开发。本系统主要包含系统用户

管理模块、药品管理模块、销售管理模块、进货管理模块、存货转移管理模块。药

品管理系统是以合理、全面、准确的药品编码体系为基础,提供了对药品数量、金

额、有效期的全面管理,统一的药价管理机制规范了药品的价格。系统能随时提供

药库的库存、药品流向和消耗,还能根据现有库存,药品有效期提供采购计划或应

暂停采购的药品清单,以提高资金的利用率,避免不必要的损失,方便快捷的途径

对药基本信息进行定期的更新和删除等管理。

功能需求

一功能划分

药品管理系统分为系统用户管理、药品销售管理、药品库存管理、进货管

理、职工管理、查询与报表分析。

二功能描述

(1)系统用户管理:允许添加删除用户(只有管理员才可以修改),任意

权限的用户允许更改自己的密码,添加或删除职工,修改职工,对药品进行销

售和库存的控制的资料。

(2)药品进货管理:当企业需要增加新的销售药品时,利用此模块可以

添加新的药品信息,删除旧的药品信息,修改已存在的药品信息,提供所有与

药品相关的各类信息,初始化库存,初始化供应商相关信息。

(3)药品销售管理:药品统一的价格销售,对已查询销售单,可以对药品

的价格进行控制。

(4)库存转移管理:实际生活中容易发生药品过期和损毁,此时利用此模

块对过期的药品和损毁的药品进行清理。

(6)职工管理:对药品企业进行职工的管理,对职工进行增加,修改,

删除,查询等操作。

(7)查询与报表分析:此功能并未单独作为一个模块,而是分布在各个模

块中,各个模块产生业务时,可以在各模块的相应功能按钮上选择查询。

性能需求

为了保证系统能够长期、安全、稳定、可靠、高效的运行,药品管理系统应该

满足以下的性能需求:

1、系统处理的准确性和及时性

系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要

充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满

足学校对信息处理的需求。

2、系统的开放性和系统的可扩充性

药品管理系统在开发过程中,应该充分考虑以后的可扩充性。例如用户查询的

需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调

整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系

统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。

通过软件的修补、替换完成系统的升级和更新换代。

3、系统的易用性和易维护性

图书管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟

悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一

点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出

现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。

4、系统的标准性

系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要

符合主流国际、国家和行业标准。

5、系统的先进性

目前计算系统的技术发展相当快,做为药品管理系统工程,在系统的生命周期

尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。这一方面通过

系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开

发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的

产品。

数据描述(数据流图+数据字典)

经过调研,我们发现,一个药店最基本的工作流程是进货和销售。消费者选择

药店进行购物,药店通过我们的药店管理系统进行药品的销售及销售后的库存整

理。流程简介:

要求

,输入药品的信息,以便于管理人员对药品进行管理,也便于核对修改

,便于操作员对职工进行管理

,便于操作员及时与供货商联系货源

、零售价和批发价

目标

、查询

,达到简单、易用的效果

药品管理系统基本流程

以上便是我们这个药品管理系统的总体数据流程图,通过上述的这幅图片,我

们可以清楚地了解到该系统的大致情况,有两个数据源/终点,分别是客户、用户。

而该系统进一步地功能显示在下图中可以得到解释。

管理人员的数据流图

销售人员通过输入药品编号,查出系统中存在的药品,通过医生看病以及配

药,考虑所售药品的价格,将病人所要购买的药品列入药品清单中,最后的销售入

库存系统将此次的交易数据保存到数据库中,最终完成交易,将药品交给病人手

中。

经过对数据流程分析,提示出现行系统具有4个主要模块:药品信息系统、药

品库存管理系统、供应商管理系统、药品销售系统。通过它们我们的药品管理系统

才成为了一个能够成功的软件。

管理人员药品管理系统

顾客

管理人员

进出货管理

控制信息

职工管理

销售统计

统计信息

首先是药品信息系统:在这个模块中由用户或管理员输入所有药品的基本信息

即药品的初始化。

第二个是药品库存管理系统:在这里这个系统有两个功能,一是查出现有药库

中的所有过期药品,更新现有的数据库;二是实现药品入库,避免药品空缺造成的

销售问题。

第三个是供应商管理系统:供应商是药品进货时,从何处购得的一种记录方

法,通过供应商可以方便的再次进货。

最后一个是药品销售系统:在这个模块中,管理人员可以很方便地对销售情况

进行查看,显示当天的销售金额并备份所有的数据库表。

药品管理系统与3个外部实体有关:顾客、药房销售人员和系统管理员。其中

系统管理人员拥有所有信息资料添加、删除和修改的权限,而药房销售人员只具有

普通权限不能对信息资料做任何的删除操作。以上只是整个系统的总体流程,大概

显示了一次一个用户完整交易的全部过程。在这里我们还要对这个数据流程进行进

一步详细的分解。

消费者的数据流图

消费者通过选购,选购好合适的药品,到管理者处登记结账,发生销售管理。

管理者通过药品编号,录入系统需要销售的数量,系统生成仓库中是否有足够的药

品。发生销售之后产生销售单和销售金额,消费者付款拿货。销售管理完成。

当消费者发现购买的药品不符合要求,管理者在认真核实之后,予以退款,发生退

货。此时管理者要在系统的坏货转移中,将不合格药品转移到不合格仓库中。

消费者

购药及退货

购药要求

反馈结果

系统数据流图

详细数据流图

数据字典

数据流项目:

:用户信息(admin)

别名:无

流量:每天上十次

来源:用户基本信息表

去向:核对用户信息

定义:用户信息=用户名+用户密码+权限

:药品信息

别名:无

流量:每天上十次

来源:药品表

去向:核对药品库存初始化、核对出库信息、核对入库信息

定义:药品信息=药品编号+药品名称+药品建成+药品规格+药品

产地+批号+进价+批发价+零售价+供应商+类别+有效期+备注.

:库存信息

别名:无

流量:每天上十次

来源:库存表

去向:核对药品库存查询、核对进货单、核对销售单

定义:库存信息=ID+药品编号+药品名称+供应商编号+单价+数

量+入库日期+仓库类别.

:供应商信息

别名:无

流量:每天上十次

来源:供应商表

去向:反馈给用户,核对进货单

定义:供应商信息=ID+供货商编号+供货商名+地区+备注

:销售单单信息

别名:无

流量:每天上十次

来源:销售单单表

去向:反馈给用户

定义:销售单信息=ID+药品编号+药品名称+数量+销售日期+销

售数量+销售收入

存储条目:

:用户基本信息表

别名:无

存储方式:随机存储

存储频率:每天上十次

定义:用户基本信息表=用户名+用户密码+权限

:药品表

别名:无

存储方式:随机存储

存储频率:每天上十次

定义:药品表=药品编号+药品名称+药品建成+药品规格+药品产地+

批号+进价+批发价+零售价+供应商+类别+有效期+备注.

项名:药品类型

别名:无

描述:用户输入试题的类型

定义:药品类型=所有药品规定类型

位置:药品表

:药品添加

处理逻辑:用户添加药品信息

执行频率:每天上十次

:库存初始化

处理逻辑:用户初始化药品库存表

执行频率:进货上十次

:入库

处理逻辑:用户添加进货单

执行频率:每天上十次

:销售

处理逻辑:用户添加销售单

执行频率:每天上十次

第三章系统总体设计

业务流程

根据需求分析的得到的现行业务处理流程,在用户反复研究后,首先确定目标

系统的业务流程,。

登陆合法用户

登记后的

药品

退出登陆

药品管理系统的业务流程

针对业务流程,现具体描述其功能如下:

:系统对用户合法性进行检查。

:对新购进的药品分类进行编号,并把药品基本信息录入计算机。

:对已入库的药品,销售人员可以进行销售。

:对已入库的药品,管理人员可以进行货存控制。

:对于已经过期或者损坏的药品,可以进行处理。

:对药品的各种变动情况的查询。

:对药店的职工进行管理。

系统功能模块图

药品管理系统模块是用JAVASWING进行设计,MYSQL作为后台数据库管理

系统。

系统管理模块分为用户登录、进货管理、销售管理、职工管理和坏货转移;用

户管理模块主要是新增用户,修改用户,查询用户,删除用户;进货管理模块主要

有供应商创始,进货,进货单查询,药品创始;销售管理模块主要有销售,修改

价目表,销售单查询;职工管理有添加职工,处理职工。

管理员

用户验证

药品登记

销售和库

存整理

管理员

系统体系结构框图如下图:

药品管理系统功能模块图

药品管理系统

用户管理

进货管理

销售管理

职工管理

坏货转

系统流程图

依据软件工程的基本原理,。

系统的处理流程图

说明:用户通过登陆界面登陆系统时,第一次使用系统时需要进行药品的创始,

即将各个药品的详细信息依次录入系统,第一次使用系统时同样要初始化库存,将

现有的药品情况录入系统,接下来通过进货模块进行进货,进货时要为每一个供应

商进行供应商创始,当发生销售时销售药品,并对库存进行相应的出来,退出时推

出系统。

用户登陆

退出

药品创始

销售

库存创始

进货

第四章详细设计

程序流程图

依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具体实现

所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确

描述,从而在系统实现阶段可以把这个描述直接翻译成用某种程序设计语言书写的

程序。具体来说就是把经过总体设计得到的各个模块详细的加以描述。

本系统采用支持面向对象的Eclipse作为开发工具,运用了J2SE的SWing的技

术,更加的方便了程序员的工作。程序对系统配置要求较高。在此给出软件系统的

主要模块,。

主程序模块图

根据以上主程序的模块图,我们可以得出下面的关于各个模块的程序流程

图,。

销售管理用户管理

进货管理坏货转移

职工管理

总体流程图

说明:用户登陆系统时,系统判断用户的级别,如果为系统管理员,则可以进

行用户的用户管理,如果是管理员,则可以进行相应的销售管理,进货管理,坏货

转移,职工管理,管理员点击退出按钮时,退出系统。

开始

用户类型

系统管理员

管理员

用户管理

销售管理

进货管理

坏货转移职工管理

退出系统

结束

失败

操作成功

成功

用户登陆流程

说明:用户根据已知的用户名和密码登录系统,只有登录成功才能进行系列的

用户管理、库存管理、销售管理,职工管理的操作。

登陆

录入药品

失败

成功

成功

药品创始流程

用户登陆

用户核对

用户管理

用户管理

操作

用户

药品添加

核对药品信息

药品表

登陆

输入库存

操作成功

操作失败

成功

存货创始流程

登陆

操作失败销售单录入

操作成功

成功

销售流程

用户

库存管理

库存创始

库存表

用户

销售管理

核对信息

库存表

登陆

录入坏货信息

操作失败

操作成功

成功

坏货转移流程

说明:用户登陆后进行药品的相关管理,通过药品创始,为系统初始化一些药

品及添加新的代售药品。通过存货创始将具体进货的药品录入库存中,销售成功则

对库存做相应的修改。当药品损坏或者过期时,应当对库存做相应的调整。

用户

登陆

录入职员信息

操作成功

成功

失败

职员管理

用户

职员管理

核对信息

职员列表

用户

坏货转移

核对信息

库存表

说明:管理员通过职工管理模块进行职工的管理,添加职工后,录入到职员列表中。

程序输入输出描述

用户登陆模块

:输入用户名及密码。

:打开系统。

用户管理模块

:与用户相关的所有信息。

:操作结果的显示,出错弹出对话框。

销售管理模块

:选择药品编号,药品的进销价格。

:操作结果的显示,出错弹出对话框。

进货管理模块

:供应商的详细信息,仓库的详细信息,药品的数量。

:药品的有关资料的显示,进货单列表

坏货管理模块

:发生意外无法使用的药品编号。

:操作结果的显示。

职工管理模块

:职工的详细信息。

:根据用户的输入显示相应的结果。

数据库的设计

数据库的概念结构设计和ER图

在需求分析阶段已完成该系统所有的数据分析。根据该阶段所建立的概念模

型,已经得出满足系统设计要求的几个关系描述,该阶段的主要工作就是把前一阶

段的成果转化为具体的数据库。

概念结构设计就是要找出实体和他们之间的联系,去除非本质的东西。

实体是名词,在ER图中设计中就是所说的表。比如“药品”,“库存”。

行为是动词,在ER图中设计时一般不考虑行为,它是业务逻辑,在详细设计才有

设计,是方法。比如“销售”,“进货”等等。

在设计ER图时时强调的是不同实体之间关系,不是行为。比如:药品\"销售\"

库存,“转移”是一种关系,不是行为。在某种情况下,“销售”是一个关系表,将

“药品”和“库存”联系起来。

在找出实体后,我们要根据分析来定义实体的属性,就是表的列。比如药品有

ID,名称,进价,销价,简介等等;库存有ID,名称,数量等等。

“库存”可拥有0-MANY的“药品”,而药品同样属于0-MANY的库存。所以是

多对多的关系

用户E-R图

药品E-R图

用户表

用户名

用户名

权限

药品表

ID

药品名

别名

规格

产地

进价

批发

零售价

零售商

有效期

类别

备注

供应商E-R图

库存E-R图

供应商E-R图

职员E-R图

供应商

编号

供应商名

地区

备注

库存表

药品编号

供应商编号数量

零售价

药品名

销售单

销售单编号

药品ID

药品名

数量

价格

职工表

职工号

职工名

性别

电话

地址

证件号

邮编

n

1

m

m

n

n

n

1

实体联系E-R图

数据库的逻辑设计

药品管理管理系统主要涉及到4个表,即:药品信息表、药品入库表、药品出

库表和库存表。

药品信息表:这张表是用来存储药品信息的。药品添加以后它的信息就会储存

到这张表中,其中包含:药品编号、药品名称、化学名称、规格、药品类别、剂

药品表

ID

药品名

别名

规格

产地

进价

批发

零售价

零售商

有效期

类别

备注

库存表

药品编号

供应商编号

数量

零售价

药品名

销售单

销售单编号

药品ID

药品名

数量

价格

供应商

编号

供应商名

地区

备注

销售

进货

供货

库存初始化

型、批号及厂商。其中药品编号是主键,非空且唯一。其余信息可以为空,并在数

据表建立的时候给他们相应的规定好数据类型。

药品入库表:这张表是用来存储入库表单信息的,所有入库单信息都包含在这

张表中。包括:入库单号、药品编号、批号、入库日期、有效日期、进价、预售

价、数量、整量单位、散量单位及验收人。其中入库单号是主键,非空且唯一。

药品出库表:这张表是用来存储出库表单信息的,所有出库信息都包含在这张

表单中。它的字段有:出库单号、药品编号、批号、数量、出库日期及验收人。其

中出库单号是主键,非空且唯一。

药品库存表:这张表是用来存储库存信息的,所有初始化的库存信息和出库入

库信息改变后的信息都会被记录下来。它字段有:库存号、药品编号、批号、药品

名称、数量、整量单位、散量单位、入库日期、有效日期、进价、预售价、库存下

限及验收人。

数据库的物理设计

数据库设计有几个范式,一般我们要做到的是第三范式,即数据表中没有冗余

字段以及同一个表中的字段没有函数依赖关系,冗余字段即在一个表中已经保存过

的信息,在另一个表中就不应该存在,如果需要的话,可以通过表间的关联来得

到,函数依赖性就是一个表中的字段间不应该有计算关系,如一个表中有单价字

段、数量字段,就不应该有一个总金额字段。如果程序运行过程中需要总金额,可

以实时计算。不过在一些较常用的表中,我们可以适当地保留冗余字段,这样,在

程序运行过程中可以减少由于表间互相关联而使用速度降低等问题。这就是所谓的

第四范式。数据表设计时,最好不要使用用户输入的信息作为主键,每一个数据表

自己定义一个主键,添加信息是由程序自动添加,这样就可以减少数据更新时产生

的错误。表与表相关联的外键最好是由程序自动生成的主键,这样数据库就比较规

范了。另外,数据表设计时一般都应该有一些标志字段,标志字段可以定义成

CHAR(1)或BIT型。建议实际应用中定义成CHAR(1)字段可以存储多种可能的状态,

在最初设计时,可能我们没有考虑到的一些情况,在程序后来的开发中,可以通过

设计标志字段为不同的值来解决,这样就避免了修改数据库结构。

数据库初期设计时一定要谨慎,把所有可能的情况都考虑进去,即使当时没有

用到,也要将它留在数据库中作为备用字段以便将来扩充。

药品管理系统数据库中各个表的设计结果如下面几个表格所示。每个表格表示

为数据库中的一个表。

药品信息表

Medicine

mid(PK)Varchar(8)N

药品编号

mnameVarchar(40)N

药品名称

mshortnameVarchar(10)Y

药品建成

mnorsVarchar(4)N

规格

mareaVarchar(40)N

药品产地

mlotVarchar(10)N

批号

minprifloatN0

进价

mwprifloatN0

批发价

mprifloatN0

零售价

MconVarchar(8)N

供应商

McateVarchar(20)N

类别

Musetimedecimal(10,0)N

有效期

memoVarchar(40)Y

备注

用户表

User

Username(PK)Varchar(20)N

用户名

passwordVarchar(8)N

密码

rankintN1

权限

供应商表

Supplier

spid(PK)Varchar(8)N

供应商编号

spnameVarchar(8)N

供应商名

SpareaVarchar(8)N

地区

SpmenoVarchar(40)Y

备注

销售单表

SalesOrder

Soid(PK)Varchar(8)N

销售单编号

midVarchar(8)N

药品编号

MnameVarchar(40)N

药品名

SnumintN0

数量

pricedoubleN0

单价

职工表

Staff

Staffid(PK)Varchar(8)N

职工编号

staffnameVarchar(20)N

职工名称

Staffsexvarchar(2)N

性别

stafftelvarchar(12)N

电话

staffaddvarchar(40)Y

地址

Staffcardvarchar(40)N

身份证

staffzipvarchar(6)Y

备注

货存表

Stock

Mid(PK)Varchar(8)N

职工编号

mnameVarchar(20)N

职工名称

mpricefloatN

性别

mnumintN

电话

spidvarchar(8)Y

地址

timedatetimeN

身份证

statusintN

存货类别

第五章编码实现

用户登陆模块

关键代码如下:

//显示出图形界面,

publicLogin(Stringmsg){

super(msg);

setLayout(newBorderLayout());

login_message=newJTextField(\"用户登陆\");

(false);

login=newJButton(\"登陆\");

regeist=newJButton(\"注册\");

setVisible(true);

add(login_message,\"North\");

JPanelbtn=newJPanel();

(newGridLayout(1,2));

(login);

(regeist);

add(btn,\"South\");

JPanelinput=newJPanel();

JLabelunameLabel=newJLabel(\"用户名:\");

uname=newJTextField(\"\",20);

JLabelpwdLabel=newJLabel(\"密码:\");

pwd=newJPasswordField(\"\",20);

(newGridLayout(2,2));

(unameLabel);

(uname);

(pwdLabel);

(pwd);

add(input,\"Center\");

(newloginListener());

(newregeistListener());

}

classloginListenerimplementsActionListener{

publicvoidactionPerformed(ActionEventevent){

UserDaoud=newUserDao();

if((().trim(),().trim())){

newMainGui().start();

setVisible(false);

}else{

(null,\"您的输入不正确,请重输\",\"警告\",1);

}

}

loginListener(){

}

}

//

publicbooleanlogin(Stringusername,Stringpassword){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"select*fromuserwhereusername=\'\"+username

+\"\'\";

ResultSetrs=(stmt,sql);

try{

while(()){

Stringdbpassword=(\"password\");

if(dbpassword!=null&&(password))

returntrue;

}

}catch(SQLExceptione){

(\"用户登陆连接数据库异常,系统退出\");

(-1);

}

returnfalse;

}

用户管理模块

用户管理界面

关键代码如下:(点击“续接”时系统执行的操作)

//

//用户注册

publicbooleanregeist(Useruser){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"insertintouser(username,password,rank)values(\'\"+

()+\"\',\'\"+()+\"\',\"+()+\")\";

(sql);

try{

(sql);

}catch(SQLExceptione){

();

(null,\"添加失败,您输入的用户已存在\",\"警告\",1);

returnfalse;

}

(null,\"恭喜您,添加成功\",\"恭喜\",1);

returntrue;

}

//查询用户

publicString[]findUser(){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"select*fromuser\";

String[]userlist=newString[128];

(sql);

try{

ResultSetrs=(sql);

inti=0;

while(()){

userlist[i]=(\"username\");

i++;

}

}catch(SQLExceptione){

();

(null,\"查找用户失败\",\"警告\",1);

returnnull;

}

returnuserlist;

}

//删除用户

publicbooleandelUser(Stringusername){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"deletefromuserwhereusername=\'\"+username+\"\'

andrank=0\";

String[]userlist=newString[]{};

(sql);

try{

(sql);

}catch(SQLExceptione){

();

(null,\"删除用户失败\",\"警告\",1);

returnfalse;

}

returntrue;

}

//修改用户

publicbooleanmodify(Useruser){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"updateusersetusername=\'\"+

()+\"\',password=\'\"+

()+\"\',rank=\"+()+\"

whereusername=\'\"+()+\"\'\";

(sql);

try{

(sql);

}catch(SQLExceptione){

();

(null,\"修改失败\",\"警告\",1);

returnfalse;

}

(null,\"恭喜您,修改成功\",\"恭喜\",1);

returntrue;

}

//显示模块

用户添加核心代码:

//显示用户添加界面

JPaneleditPanel=newJPanel();

((\"添加用户\"));

(newGridLayout(2,1));

JPanelupPanel=newJPanel();

((\"用户信息\"));

(newGridLayout(3,1));

JPaneljp1=newJPanel();

JPaneljp2=newJPanel();

JPaneljp3=newJPanel();

(newJLabel(\"用户名\"));

username=newJTextField(\"\",8);

password=newJPasswordField(\"\",8);

password2=newJPasswordField(\"\",8);

(username);

(jp1);

(newJLabel(\"密码\"));

(password);

(newJLabel(\"再次密码\"));

(password2);

(jp2);

(jp3);

(upPanel);

JPaneladdUserSubmitPanel=newJPanel();

JButtonaddUserSubmitBtn=newJButton(\"提交\");

JButtonaddUserCancelBtn=newJButton(\"取消\");

(addUserSubmitBtn);

(addUserCancelBtn);

(addUserSubmitPanel);

(newaddUserSubmitListener());

(newaddUserCancelListener());

add(editPanel,);

//提交用户添加时执行的操作

publicclassaddUserSubmitListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

(\"===\"+().trim()+\"====\");

if(().trim().equals(\"\")

||!().trim().equals(().trim())){

(null,\"输入不正确\",\"警告\",1);

}else{

Useruser=newUser();

(().trim());

(().trim());

(0);

UserDaoud=newUserDao();

(user);

}

}

//用户修改的核心代码:

//核心代码:

JPaneleditPanel=newJPanel();

(newGridLayout(0,2));

((\"修改用户\"));

JPanelleftPanel=newJPanel();

(newGridLayout(0,1));

((\"用户列表\"));

UserDaoud=newUserDao();

userlist=newJList(());

(newJScrollPane(userlist,22,31));

(newuserlistListener());

(leftPanel);

JPanelrightPanel=newJPanel();

rightPanel=newJPanel(newBorderLayout());

((\"用户信息\"));

(newFlowLayout());

unfld=newJTextField(\"\",8);

pwdfld=newJTextField(\"\",8);

rankfld=newJTextField(\"\",8);

JPaneljPanel1=newJPanel(newGridLayout(0,1));

(newJLabel(\"用户名:\"));

(newJLabel(\"密码:\"));

(newJLabel(\"权限:\"));

JPaneljPanel2=newJPanel(newGridLayout(0,1));

(unfld);

(pwdfld);

(rankfld);

(jPanel1,\"West\");

(jPanel2,\"East\");

(rightPanel);

add(editPanel,);

JPanelmodifyUserSubmitPanel=newJPanel();

JButtonmodifyUserSubmitBtn=newJButton(\"修改用户\");

(modifyUserSubmitBtn);

add(modifyUserSubmitPanel,);

//监听器

publicclassmodifyUserSubmitListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

if(username==null||(\"\")){

(null,\"未选中用户\",\"警告\",1);

}else{

inti=(null,\"是否修改该用户?修改将无法恢复!\",\"警告\",0);

if(i==1)return;

UserDaoud=newUserDao();

Useruser=newUser();

(().trim());

(().trim());

if(().trim().equals(\"系统管理员\")){

(1);

}else{

(0);

}

(user);

}

}

销售管理模块

销售界面

关键代码如下:(点击“销售”时系统执行的操作)

//DAO中的处理

publicbooleansales(SalesOrderso){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"insertintosalesordervalues(\'\"+()+\"\',\'\"

+()+\"\',\'\"+()+\"\',\'\"

+()+\"\',\"+()+\")\";

(sql);

try{

(sql);

}catch(SQLExceptione){

();

returnfalse;

}

returntrue;}

//

publicclassbuyListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

for(intn=0;n<;n++){

if(order[n]!=null&&!order[n].equals(\"\")){

Stringmsg=order[n];

StringTokenizerstnizer=newStringTokenizer(msg,

\",\");

inti1=(());

Stringname1=();

Stringpricestr=();

StringTokenizerstnizerprice=new

StringTokenizer(pricestr,\"元\");

floatprice1=

(());

SalesOrdersod=newSalesOrder();

(name1);

(name1);

(name1);

(1);

(price1);

SalesOrderDaosodao=newSalesOrderDao();

(sod);

StockDaostockdao=newStockDao();

(name1);

(());

}

}

(null,\"销售成功了\",\"警告\",1);

}

}

进货管理模块

药品管理界面

核心代码:(添加药品及加入库存)

//添加药品Dao中

publicbooleanregeist(Medicinemedicine){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"insertintomedicinevalues(\'\"+()+\"\',\'\"

+()+\"\',\'\"+()+\"\',\'\"

+()+\"\',\'\"+()+\"\',\'\"

+()+\"\',\"+()+\",\"

+()+\",\"+()+\",\'\"

+()+\"\',\'\"+()+\"\',\"

+()+\",\'\"+()+\"\')\";

(sql);

try{

(sql);

}catch(SQLExceptione){

();

(null,\"您的输入不正确\",\"警告\",1)returnfalse;

}

returntrue;

}

//添加药品frame中

publicclassAddMedButtonListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

try{

Medicinemedicine=newMedicine();

(().trim());

(().trim());

(().trim());

(().trim());

(().trim());

((());

(().trim());

(().trim());

(().trim());

((());(());

((());

((());

MedDaomd=newMedDao();

if((medicine)){

(null,\"药品添加成功\",\"恭喜\",1);

}

}catch(Exceptione2){

();

(null,\"您的输入不正确\",\"警告\",1);

}

}

}

//加入库存frame中

publicclassbuyButtonListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

try{

Stockstock=newStock();

(().trim());

(().trim());

((().trim()));

((().trim()));

(().trim());

Calendarc=();

(());

d=();

(d);

StockDaosd=newStockDao();

if((stock)){

(null,\"进货成功\",\"恭喜\",1);

}

}catch(Exceptione2){

();

(null,\"您的输入不正确\",\"警告\",1);

}

}

}

//加入库存DAO中

publicbooleanadd(Stockstock){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"insertintostockvalues(\'\"+()+\"\',\'\"+()+\"\',\"+

()+\",\"+()+\",\'\"+()+\"\',curdate()\"+\",0)\";

(sql);

try{

(sql);

}catch(SQLExceptione){

();

(null,\"操作失败\",\"警告\",1);

returnfalse;

}

returntrue;

}

职工管理模块

药品修改界面

核心代码:(修改职工信息)

//DAO中修改职工信息

publicbooleanmodify(Staffstaff){

Connectionconn=();

Statementstmt=(conn);

Stringsql=\"updatestaffsetstaffid=\'\"+()+\"\',staffname=\'\"+()

+\"\',staffsex=\'\"+()+\"\',stafftel=\'\"+()+\"\',staffadd=\'\"+fadd()

+\"\',staffcard=\'\"+()+\"\',staffzip=\'\"+ffzip()+\"\'where

staffid=\'\"+()+\"\'\";

(sql);

try{

(sql);

}catch(SQLExceptione){

();

(null,\"修改失败\",\"警告\",1);

returnfalse;

}

(null,\"恭喜您,修改成功\",\"恭喜\",1);

returntrue;

}

//FRAME中监听修改用户按钮的处理流程

publicclassmodifyStfListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

if(staffname==null||(\"\")){

(null,\"未选中用户\",\"警告\",1);

}else{

inti=(null,\"是否修改该职员?修改将无法恢复!\",\"警告\",0);

if(i==1)

return;

StaffDaosd=newStaffDao();

Staffstaff=newStaff();

(().trim());

(().trim());

(().trim());

(().trim());

(().trim());

(().trim());

(().trim());

(staff);

}

}

}

坏货转移模块

坏货转移界面

核心代码:(对发生以外的和过期的药品的处理)

//按钮的事件响应

publicclassoutOfDateListenerimplementsActionListener{

publicvoidactionPerformed(ActionEvente){

StockDaosd=newStockDao();

String[]mnamelist=();

(mnamelist);

(null,\"成功\",\"恭喜\",1);

(newString[]{});

}

}

//数据库DAO中的操作

publicvoidOFDTranStock(String[]mnamelist){

Connectionconn=();

Statementstmt=(conn);

for(inti=0;i<;i++){

if(mnamelist[i]!=null&&!mnamelist[i].equals(\"\")){

Stringsql=\"updatestocksetstatus=1wheremname=

\'\"+mnamelist[i]+\"\'\";

(sql);

try{

(sql);

}catch(SQLExceptione){

();

(null,\"失败\",\"警告\",1);

}

}

}

第六章测试分析报告

什么是软件测试

软件测试就是在受控制的条件下对系统或应用程序进行操作并评价操作结果的

过程,所谓控制条件应包括正常条件与非正常条件。

软件测试过程中应该故意地去促使错误的发生,也就是事情在不该出现的时候

出现或者在应该出现的时候没有出现。从本质上说,软件测试是“探测”,在“探测”

中发现软件的毛病。

软件测试贯穿于软件定义与开发的整个周期,软件的需求规格说明书,结构

设计及程序编码,都属于软件测试的对象。

软件测试包含白盒测试与黑盒测试,白盒测试是针对程序代码进行正确性检验

的测试工作,黑盒测试独立于程序代码,从用户的角度,通过一定的测试步骤与测

试案例,验证软件功能、性能等指标能否满足实际应用需求的测试作。

软件测试的目的

软件测试的目的是为了保证软件产品的最终质量,在软件开发的过程中,对软

件产品进行质量控制。一般来说软件测试应由独立的产品评测中心负责,严格按照

软件测试流程,制定测试计划、测试方案、测试规范,实施测试,对测试记录进行

分析,并根据回归测试情况撰写测试报告。测试是为了证明程序有错,而不能保证

程序没有错误。

测试计划和要点

软件测试的本质是针对要测试的内容确定一组测试用例。在讨论之前,我先把

要测试各个模块的计划和要点列出:

药品以及药品管理模块测试要点

用户的登录用户名和密码的核对,药品创始信息格式的判断,防止不规范的

数据和错误的数据插入数据库。例如,已经存在的用户不可被再次注册,用户的生

日和email格式等。

销售管理模块测试要点

发生销售时,库存的变动情况,是否减少,药品为零则禁止销售。

进货管理模块测试要点

录入数据时对数据格式的限制,防止不正确的数据进入数据库。

职工信息测试要点

防止脏数据进入数据库。

部分测试图

1.用户名或密码错误

(登陆)用户名或密码错误提示

(注册)用户已存在提示

药品录入数据格式的限制

测试结论

1.测试目标完成;

2.测试已经通过;

3.可以进入下一阶段项目目标;

总结

三个月的设计结束了。在这三个月的设计,让我受益非浅。自我学计算机专业

以来,始终认为一个完整的程序就相当于一个优秀的软件产品,只要程序编得精

致、具体、详细,所开发的软件就绝对完美、实用。

在这次设计药品管理系统中,我积极查阅各种资料,实地调研,在李老师的帮

助下完成了这个系统的全部设计。刚开始设计时遇到了一些困难,因为之前自学过

的JavaSwing已经忘了差不多了,再加上自己还要参加其他单位的实习,时间的安

排上也很紧迫,编程的进度比较缓慢。在设计中还会遇到一些功能不知该如何实现

的困难,在同学们,同事们的热情帮助下,我渐渐的复习了JavaSwing控件的使用

方法、JavaSwing的编程语法,之后的编程过程也相对得心应手,基本完成了预期

计划的要求。但是系统功能还没有完全完善,有待进一步加强。

通过这次毕业设计,我进一步加深对基础理论的理解,扩大专业知识面,对收

集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用

能力的提高。同时,发现问题、分析归纳、综合比较的逻辑分析能力、处理问题等

能力也得到了提高。但是在这次毕业设计过程中,还是发现了自己很多不足之处,

也遇到了许多问题和困难,而这些困难大多是三年中不注重自己系统学习,学有所

用造成的,这让我认识到系统的学习和锻炼的重要性,基础知识掌握不仅要多,而

且要会运用它,那样的话设计才会更全面、更顺利、更完美。

参考文献

[1]侯维瑞英语语体上海:上海外语教育出版社,1988

[2][美]RogersCadenhead.:人民邮电出版社,2007

[3]:清华大学出版社,2006

[4]:冶金工业出版社,2006

[5]李春葆,Server2000学习与上机指导[M].北京:清华大学出版社,.

[6]:机械工业出版社,2006

[7]:机械工业出版社,2006

[8]耿祥义,张跃平.《JSP实用教程》.清华大学出版社,2003年5月1日:1-354

月.

致谢

毕业设计终于结束,此为大学里最后一次考核,我在大家的鼓励、帮助和支持

下,最终顺利完成。回首从零到毕业设计最终的完成,我的老师们,朋友们,同事

们,亲人们对我的帮助让我受益匪浅。首先,我想感谢一下我的指导老师李乔老

师,李老师做事认真负责,待人亲切和蔼,同时对我的论文和程序积极督促,耐心

指导和正确引导,让我从茫然不知所错到如屡平地。此次毕业设计同时让我更加深

刻的了解到大学里教的课程是多么的有用,感谢母校给了我这么多知识储备,让我

能成为有一个有用的心中有底的人。

还要感谢学院领导这四年来对我的培养和关心,在这四年当中,院里领导为我

们做好不少好事,对于我们的困难,院领导总是热情的帮我们解决,我除了学会大

学里应该学会的课程外,还学会了怎样做人,做一个对社会有贡献的人。

同时,我还要感谢我们们学校所有的同学。他们和我共同在安工大学习生活了

四年,在生活和学习上给了我很大的帮助,正是有了你们的支持,我才能顺利的完

成毕业设计。

谢谢所有教过我的老师们,你们教了我很多的专业知识,还给我提供动手实践

的机会,老师辛苦了!

最后我还要感谢把我培养长大,含辛茹苦的父母,谢谢你们!

👁️ 阅读量:0