版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录第一章概述 51.1系统开发背景和意义 51.2开发环境 5第二章需求分析 72.1任务概述 72.2功能需求 72.3性能需求 82.4数据描述(数据流图+数据字典) 8第三章系统总体设计 153.1业务流程 153.2系统功能模块图 153.3系统流程图 17第四章详细设计 184.1程序流程图 184.2程序输入输出描述 234.2.1用户登陆模块 234.2.2用户管理模块 234.2.3销售管理模块 234.2.4进货管理模块 234.2.5坏货管理模块 234.2.6职工管理模块 234.3数据库的设计 244.3.1数据库的概念结构设计和ER图 244.3.2数据库的逻辑设计 264.3.3数据库的物理设计 27第五章编码实现 315.1用户登陆模块 315.2用户管理模块 335.3销售管理模块 385.4进货管理模块 405.5职工管理模块 435.6坏货转移模块 456.1什么是软件测试 476.2软件测试的目的 476.3测试计划和要点 476.3.1药品以及药品管理模块测试要点 476.3.2销售管理模块测试要点 476.3.3进货管理模块测试要点 476.3.4职工信息测试要点 476.4部分测试图 476.5测试结论 49总结 50参考文献 51致谢 52附录:部分程序代码 53摘要大家只要看了新闻,就可以了解到21世纪是信息的世纪,信息化正以极快的速度取代传统的效率低下的人工作业。随着小型计算机,微型计算机的成本的不断下降,性能的不断提升,使得计算机作为当今最重要的信息产品,成为人民大众必不可缺的工具。计算机技术已经广泛应用于日常办公,企业管理,文字处理、电子报表以及进行简单的人事管理、财务管理等,大大提高了我们的工作效率,节省许多资源,使管理更加规范化,系统化,科学化。目前随着计算机技术的发展和普及,各行各业的管理机构开始使用计算机处理大量信息。在我国药品品种繁多,规模甚大,以往的手工记载、查询操作容易出错且工作效率低,已经不能适应时代发展的要求,从管理的角度来看,对管理者会造成诸多的不便,还有可能疏忽一些细节,让不法商家逃脱罪责。所以,市场迫切需要一款简单实用的药品管理系统。
经过前期的调研,在反复的修改和综合考量后,笔者觉定使用JAVASWING技术,ECLIPSEJ2SE开发平台,MYSQL5.0数据库开发药品管理系统。药品管理系统的设计理念是,让企业能够拥有更高效的管理工具,使企业在21世纪异常激烈的竞争中脱颖而出。国外的管理系统有许多优秀的经验,但是并不完全符合我国的国情,我国的最广大药品销售的企业是分布在全国各地的中小型销售企业。所以,此次开发的药品管理系统功能乃是汲取了外国优秀管理工具的优秀功能,同时又创新了更符合我国用户需求的功能的一个综合信息管理系统。药品管理系统分为五大模块,分别为系统用户模块,职工信息管理模块,进货管理模块,销售管理模块,库存转移管理模块。该五大功能模块设计合理,功能全面,同时界面友好,非常符合我国各大小型药品销售企业的管理需求。但由于时间仓促以及笔者找工作实习的原因,系统还不是很完善,和市场上一些成熟的产品比较仍然有不足之处。今后笔者将利用工作休息时间,学习新的技术和设计理念,对药品管理系统进行深入的二次迭代开发,目标是在今后三个月使代码更加规范,界面更加美观,程序的可拓展性进一步增强,更加与市场接轨,然后发布到ChinaJavaWorld上开源供大家免费下载使用和学习。
关键词:JAVASWING、MYSQL5.0、JDBC、药品管理系统、药品管理
AbstractIfyouseethenews,theycanunderstandthe21stcenturyisthecenturyofinformation,Informationtechnologyiswithgreatspeedinsteadoftraditionalinefficientartificiallyassignments.Withsmallcomputer,microcomputercostofdeclining,performance,makesthecomputerasthemostimportantinformationproduct,becomeindispensableforthemassesoftools.Computertechnologyhasbeenwidelyusedindailyoffice,enterprisemanagement,wordprocessing,spreadsheetsandsimplepersonnelmanagement,financialmanagement,andgreatlyimproveourworkefficiency,savingmanyresources,makemanagementstandardization,systematization,morescientific.Nowwiththedevelopmentofcomputertechnologyandpopularizationofthemanagementinstitution,tencentstartedusingcomputerprocessingofinformation.Inourcountry,thegreatvarietyofscale,pastrecords,queryoperationmanualandlowworkingefficiencyerror-prone,alreadycannotadapttothedevelopmentofTheTimes,frommanagementpointofview,themanagerwillcausemanyinconvenience,theremaybesomedetails,lettheillegalbusinessmentoescape.Therefore,asimpleandpracticaldrugmanagementsystemisverymuchinlinewiththeneedsofthemarket.Throughtheresearchonthemodification,andcomprehensiveconsiderationsrepeatedly,theauthordeterminedafteruseJAVASWINGtechnology,MYSQL5.0ECLIPSEJ2SEJAVAdevelopmentplatform,thedrugadministrationsystemdatabasedevelopment.Drugmanagementsystemisdesigned,makeenterprisecanhavemoreefficientmanagementtools,enterpriseinthe21stcenturythefiercecompetition.Foreignmanagementsystemhasmanyexcellentexperience,butnotcompletelyaccordwiththenationalconditionofourcountry,China'svastdrugsalesenterpriseisdistributedinthesmallandmedium-sizedenterprisesnationwidesales.Therefore,thedevelopmentofmedicinemanagementsystemfunctionisabsorbedforeignoutstandingmanagementtoolsandexcellentfunction,theinnovationofourcustomersdemandmoreaccordwithacomprehensivefunctionsofinformationmanagementsystem.Drugmanagementsystemisdividedintofivemodules,respectively,theworkersystemuserinformationmanagementmodule,stockmanagementmodule,modules,stocktransfersalesmanagementmodulemanagementmodule.Thefivefunctionmoduledesignisreasonable,comprehensivefunctions,andfriendlyinterface,verylargepharmaceuticalsalesinconformitywiththerequirementsoftheenterprisemanagement.Butduetolackoftimeandthepracticeofthejob,systemisnotperfect,andsomematureproductsonthemarketisstillhassomeshortcomings.Futureworkwillusetheresttime,learningnewtechnologyanddesignconceptofdrugadministrationsystem,furtherdevelopmentiteration,thesecondgoalinthenextthreemonthsaremorestandardcode,theinterfaceoftheprogramcanbemorebeautiful,expandingfurtherstrengthens,morewithmarket,andthenreleasedtotheChinaopenforWorldJavaonlearningandusingfreedownload.Keywords:JavaSwing、Mysql5.5、JDBC、MedMgrSystem、Medicinesales&mgr
第一章概述如何利用现代信息技术使企业拥有快速、高效的市场反映能力和高度的效率,已是医药经营企业,特别是医药连锁经营企业特别关心的问题。尽快建立一个功能齐备的药品进、出库管理系统,完善现代企业的信息化管理机制,已成为医药企业生存发展的当务之急。通过开发这个药品管理系统,使药品进销存管理工作系统化,规范化,自动化,从而达到提高管理效率的目的。本系统开发设计思想是实现药品管理的数字化。尽量采用现有软硬件环境,及先进的管理系统开发方案,提高系统开发水平和应用效果的目的。系统应符合企业管理的规定,满足日常管理的需要,并达到操作过程中的直观、方便、实用、安全等要求,系统采用模块化程序设计方法,这样既便于系统功能的各种组合,又便于未参与开发的技术维护人员补充,维护。系统应具备数据库维护功能,及时根据用户需求进行数据的添加,删除,修改等操作。1.1系统开发背景和意义此次毕业设计的选题是由我校计算机学院统一选题。本次的毕业设计是一个可以充分地锻炼自己的动手实践能力以及考核四年大学所学知识的积累的机会。针对我的实际情况,结合四年来对计算机软件的熟练程度以及对数据库的了解,经过与指导老师以及小组成员的协商,我选择了药品管理系统软件设计与开发这个课题。这是一个属于实际的课题,如果顺利,我们所设计的药品管理系统将实际应用到中国最广大的售药系统中去,对于初涉社会的我们来说,无疑是一个非常好地锻炼机会。考虑到该系统属于一个规模较大、较为复杂的数据库系统,对计算机的性能要求较高,决定使用MyEclipse7.0开发此系统。此次毕业设计选题范围是相当广泛且实用的,含盖了目前大部分计算机软件类开发的课题,给我们很大的自由发展的空间。可以每个学生挑选出最合适的课题,更适合同学们的兴趣和价值取向。选择此课题对我来说有着不同的意义,应该来说此课题更接近于实际开发的全过程。同时对编程、数据库调用、结构化查询语言STRUCTUREDQUERYLANGUAGE等方面是一个比较综合的考验。让我在此过程中得到很好的锻炼。随着医疗制度改革的进行,药品招标采购的逐年规范和扩大,药品管理已经成为药剂科乃至整个医院管理的重要内容。传统的管理模式已经跟不上顾客对快节奏生活的要求了!随着计算机的普及和计算机软件的不断发展,越来越多的医疗机构开始注视计算机这个辅助工具为自己带来的效益了。医院的售药机构需要通过计算机提高自已工作效率、对药品实现进销存管理和职工管理,提高经济效益本次毕业设计我们秉承良好的治学之风,除了严格按照毕业设计进度表来安排我的设计情况,同时加强我与指导李老师联系和交流。同时这是一个面向实际应用的课题,和基础调研更是尤为显得重要,为最终能够成为一个成功的案例而努力。1.2开发环境开发环境的选择会影响到数据库的设计,所以在这里给出图书管理系统开发与运行环境的选择如下:开发环境:Window7旗舰版开发工具:MyEclipse7.0数据库版本:MySql5.0.87数据库引擎:MyISAM第二章需求分析
2.1任务概述药品管理系统是为了加强药品管理,以便更好地对药品进行监督和管理,对售药机构人员的工作,起到了高效性、准确性管理而开发。本系统主要包含系统用户管理模块、药品管理模块、销售管理模块、进货管理模块、存货转移管理模块。药品管理系统是以合理、全面、准确的药品编码体系为基础,提供了对药品数量、金额、有效期的全面管理,统一的药价管理机制规范了药品的价格。系统能随时提供药库的库存、药品流向和消耗,还能根据现有库存,药品有效期提供采购计划或应暂停采购的药品清单,以提高资金的利用率,避免不必要的损失,方便快捷的途径对药基本信息进行定期的更新和删除等管理。2.2功能需求一 功能划分药品管理系统分为系统用户管理、药品销售管理、药品库存管理、进货管理、职工管理、查询与报表分析。二 功能描述(1)系统用户管理:允许添加删除用户(只有管理员才可以修改),任意权限的用户允许更改自己的密码,添加或删除职工,修改职工,对药品进行销售和库存的控制的资料。(2)药品进货管理:当企业需要增加新的销售药品时,利用此模块可以添加新的药品信息,删除旧的药品信息,修改已存在的药品信息,提供所有与药品相关的各类信息,初始化库存,初始化供应商相关信息。(3)药品销售管理:药品统一的价格销售,对已查询销售单,可以对药品的价格进行控制。(4)库存转移管理:实际生活中容易发生药品过期和损毁,此时利用此模块对过期的药品和损毁的药品进行清理。(6)职工管理:
对药品企业进行职工的管理,对职工进行增加,修改,删除,查询等操作。(7)查询与报表分析:此功能并未单独作为一个模块,而是分布在各个模块中,各个模块产生业务时,可以在各模块的相应功能按钮上选择查询。2.3性能需求为了保证系统能够长期、安全、稳定、可靠、高效的运行,药品管理系统应该满足以下的性能需求:1、系统处理的准确性和及时性系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足学校对信息处理的需求。2、系统的开放性和系统的可扩充性药品管理系统在开发过程中,应该充分考虑以后的可扩充性。例如用户查询的需求也会不断的更新和完善。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成,既系统应是一个开放系统,只要符合一定的规范,可以简单的加入和减少系统的模块,配置系统的硬件。通过软件的修补、替换完成系统的升级和更新换代。3、系统的易用性和易维护性图书管理系统是直接面对使用人员的,而使用人员往往对计算机并不时非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面;针对用户可能出现的使用问题,要提供足够的在线帮助,缩短用户对系统熟悉的过程。4、系统的标准性系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流国际、国家和行业标准。5、系统的先进性目前计算系统的技术发展相当快,做为药品管理系统工程,在系统的生命周期尽量做到系统的先进,充分完成企业信息处理的要求而不至于落后。这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开发的过程中,应在考虑成本的基础上尽量采用当前主流并先进且有良好发展前途的产品。6、系统的响应速度药品管理系统系统在日常处理中的响应速度为秒级,达到实时要求,以及时反馈信息。在进行统计分析时,根据所需数据量的不同而从秒级到分钟级,原则是保证操作人员不会因为速度问题而影响工作效率。2.4数据描述(数据流图+数据字典)经过调研,我们发现,一个药店最基本的工作流程是进货和销售。消费者选择药店进行购物,药店通过我们的药店管理系统进行药品的销售及销售后的库存整理。流程简介:2.4.1要求A.为每种药品设置编号,输入药品的信息,以便于管理人员对药品进行管理,也便于核对修改B.为职工设置库,便于操作员对职工进行管理C.为供货商设置库,便于操作员及时与供货商联系货源D.设置系统权限E.药品价格分为进货价、零售价和批发价2.4.2目标A.使药品销售的信息能及时得到统计、查询B.方便操作员的操作,达到简单、易用的效果C.提高操作员的工作效率D.提高操作的正确率E.提高系统的可靠性及安全性管理人员顾客药品管理系统管理人员顾客药品管理系统图2.1药品管理系统基本流程以上便是我们这个药品管理系统的总体数据流程图,通过上述的这幅图片,我们可以清楚地了解到该系统的大致情况,有两个数据源/终点,分别是客户、用户。而该系统进一步地功能显示在下图中可以得到解释。控制信息控制信息 管理人员管理人员统计信息统计信息销售统计管理销售统计管理进出货管理职工管理进出货管理职工管理图2.2管理人员的数据流图销售人员通过输入药品编号,查出系统中存在的药品,通过医生看病以及配药,考虑所售药品的价格,将病人所要购买的药品列入药品清单中,最后的销售入库存系统将此次的交易数据保存到数据库中,最终完成交易,将药品交给病人手中。经过对数据流程分析,提示出现行系统具有4个主要模块:药品信息系统、药品库存管理系统、供应商管理系统、药品销售系统。通过它们我们的药品管理系统才成为了一个能够成功的软件。首先是药品信息系统:在这个模块中由用户或管理员输入所有药品的基本信息即药品的初始化。第二个是药品库存管理系统:在这里这个系统有两个功能,一是查出现有药库中的所有过期药品,更新现有的数据库;二是实现药品入库,避免药品空缺造成的销售问题。第三个是供应商管理系统:供应商是药品进货时,从何处购得的一种记录方法,通过供应商可以方便的再次进货。最后一个是药品销售系统:在这个模块中,管理人员可以很方便地对销售情况进行查看,显示当天的销售金额并备份所有的数据库表。药品管理系统与3个外部实体有关:顾客、药房销售人员和系统管理员。其中系统管理人员拥有所有信息资料添加、删除和修改的权限,而药房销售人员只具有普通权限不能对信息资料做任何的删除操作。以上只是整个系统的总体流程,大概显示了一次一个用户完整交易的全部过程。在这里我们还要对这个数据流程进行进一步详细的分解。反馈结果反馈结果购药要求消费者购药要求消费者
购药及退货购药及退货图2.3消费者的数据流图消费者通过选购,选购好合适的药品,到管理者处登记结账,发生销售管理。管理者通过药品编号,录入系统需要销售的数量,系统生成仓库中是否有足够的药品。发生销售之后产生销售单和销售金额,消费者付款拿货。销售管理完成。当消费者发现购买的药品不符合要求,管理者在认真核实之后,予以退款,发生退货。此时管理者要在系统的坏货转移中,将不合格药品转移到不合格仓库中。图2.4系统数据流图图2.5详细数据流图2.4.3数据字典数据流项目:1.名字:用户信息(admin)别名:无流量:每天上十次来源:用户基本信息表去向:核对用户信息定义:用户信息=用户名+用户密码+权限2.名字:药品信息别名:无流量:每天上十次来源:药品表去向:核对药品库存初始化、核对出库信息、核对入库信息定义:药品信息=药品编号+药品名称+药品建成+药品规格+药品产地+批号+进价+批发价+零售价+供应商+类别+有效期+备注.3.名字:库存信息别名:无流量:每天上十次来源:库存表去向:核对药品库存查询、核对进货单、核对销售单定义:库存信息=ID+药品编号+药品名称+供应商编号+单价+数量+入库日期+仓库类别.4.名字:供应商信息别名:无流量:每天上十次来源:供应商表去向:反馈给用户,核对进货单定义:供应商信息=ID+供货商编号+供货商名+地区+备注5.名字:销售单单信息别名:无流量:每天上十次来源:销售单单表去向:反馈给用户定义:销售单信息=ID+药品编号+药品名称+数量+销售日期+销售数量+销售收入2.4.4存储条目:1.文件名:用户基本信息表别名:无存储方式:随机存储存储频率:每天上十次定义:用户基本信息表=用户名+用户密码+权限2.文件名:药品表别名:无存储方式:随机存储存储频率:每天上十次定义:药品表=药品编号+药品名称+药品建成+药品规格+药品产地+批号+进价+批发价+零售价+供应商+类别+有效期+备注.3.数据项条目:项名:药品类型别名:无描述:用户输入试题的类型定义:药品类型=所有药品规定类型位置:药品表4.处理条目:1.处理名:药品添加处理逻辑:用户添加药品信息执行频率:每天上十次2.处理名:库存初始化处理逻辑:用户初始化药品库存表执行频率:进货上十次3.处理名:入库处理逻辑:用户添加进货单执行频率:每天上十次4.处理名:销售处理逻辑:用户添加销售单执行频率:每天上十次第三章系统总体设计
3.1业务流程根据需求分析的得到的现行业务处理流程,在用户反复研究后,首先确定目标系统的业务流程,其处理流程如图3.1。用户验证药品登记管理员用户验证药品登记管理员 登陆 合法用户 登记后的 药品销售和库存整理销售和库存整理管理员 退出登陆管理员图3.1药品管理系统的业务流程针对业务流程,现具体描述其功能如下:1.用户登录:系统对用户合法性进行检查。2.药品入库:对新购进的药品分类进行编号,并把药品基本信息录入计算机。3.药品销售:对已入库的药品,销售人员可以进行销售。4.药品进货:对已入库的药品,管理人员可以进行货存控制。5.存货转移:对于已经过期或者损坏的药品,可以进行处理。6.信息查询:对药品的各种变动情况的查询。7.职员管理:对药店的职工进行管理。3.2系统功能模块图药品管理系统模块是用JAVASWING进行设计,MYSQL作为后台数据库管理系统。系统管理模块分为用户登录、进货管理、销售管理、职工管理和坏货转移;用户管理模块主要是新增用户,修改用户,查询用户,删除用户;进货管理模块主要有供应商创始,进货,进货单查询,药品创始;销售管理模块主要有销售,修改价目表,销售单查询;职工管理有添加职工,处理职工。系统体系结构框图如下图:药品管理系统药品管理系统销售管理进货管理坏货转移职工管理用户管理销售管理进货管理坏货转移职工管理用户管理过期处理损毁处理处理职工添加职工销售单查询修改价目表销售药品创始进货单查询进货供应商创始删除用户修改用户新增用户查询用户过期处理损毁处理处理职工添加职工销售单查询修改价目表销售药品创始进货单查询进货供应商创始删除用户修改用户新增用户查询用户图3.2药品管理系统功能模块图
3.3系统流程图依据软件工程的基本原理,综合以上分析给出系统流程图如图3.4所示。用户登陆用户登陆药品创始药品创始库存创始库存创始进货登陆进货登陆销售 销售退出退出图3.2系统的处理流程图说明:用户通过登陆界面登陆系统时,第一次使用系统时需要进行药品的创始,即将各个药品的详细信息依次录入系统,第一次使用系统时同样要初始化库存,将现有的药品情况录入系统,接下来通过进货模块进行进货,进货时要为每一个供应商进行供应商创始,当发生销售时销售药品,并对库存进行相应的出来,退出时推出系统。第四章详细设计
4.1程序流程图依据软件工程的基本原理,详细设计阶段的根本任务是确定应该怎样具体实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在系统实现阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。具体来说就是把经过总体设计得到的各个模块详细的加以描述。本系统采用支持面向对象的Eclipse作为开发工具,运用了J2SE的SWing的技术,更加的方便了程序员的工作。程序对系统配置要求较高。在此给出软件系统的主要模块,如图4.1所示。职工管理销售管理进货管理坏货转移用户管理职工管理销售管理进货管理坏货转移用户管理图4.1主程序模块图根据以上主程序的模块图,我们可以得出下面的关于各个模块的程序流程图,如图4.2所示。开始 开始用户类型用户类型管理员系统管理员管理员系统管理员职工管理坏货转移进货管理销售管理用户管理职工管理坏货转移进货管理销售管理用户管理退出系统退出系统结束结束图4.2总体流程图说明:用户登陆系统时,系统判断用户的级别,如果为系统管理员,则可以进行用户的用户管理,如果是管理员,则可以进行相应的销售管理,进货管理,坏货转移,职工管理,管理员点击退出按钮时,退出系统。用户登陆用户登陆 失败用户核对用户核对 操作成功成功用户管理用户管理用户管理操作用户管理操作图4.3用户登陆流程说明:用户根据已知的用户名和密码登录系统,只有登录成功才能进行系列的用户管理、库存管理、销售管理,职工管理的操作。用户用户 登陆药品添加药品添加 录入药品核对药品信息 失败核对药品信息药品表 成功药品表成功图4.4药品创始流程用户用户 登陆库存管理库存管理 输入库存 库存创始 操作成功库存创始 操作失败成功库存表库存表图4.5存货创始流程用户用户登陆销售管理销售管理 操作失败 销售单录入核对信息核对信息 操作成功成功库存表库存表图4.6销售流程用户用户 登陆坏货转移坏货转移核对信息 录入坏货信息核对信息 操作失败 操作成功 成功库存表库存表图4.7坏货转移流程说明:用户登陆后进行药品的相关管理,通过药品创始,为系统初始化一些药品及添加新的代售药品。通过存货创始将具体进货的药品录入库存中,销售成功则对库存做相应的修改。当药品损坏或者过期时,应当对库存做相应的调整。用户用户用户 登陆职员管理职员管理核对信息 录入职员信息核对信息 操作成功 成功职员列表 失败职员列表图4.7职员管理说明:管理员通过职工管理模块进行职工的管理,添加职工后,录入到职员列表中。4.2程序输入输出描述4.2.1用户登陆模块1.输入项目:输入用户名及密码。2.输出项目:打开系统。4.2.2用户管理模块1.输入项目:与用户相关的所有信息。2.输出项目:操作结果的显示,出错弹出对话框。4.2.3销售管理模块1.输入项目:选择药品编号,药品的进销价格。2.输出项目:操作结果的显示,出错弹出对话框。4.2.4进货管理模块1.进货项目:供应商的详细信息,仓库的详细信息,药品的数量。2.输出项目:药品的有关资料的显示,进货单列表4.2.5坏货管理模块1.输入项目:发生意外无法使用的药品编号。2.输出项目:操作结果的显示。4.2.6职工管理模块1.输入项目:职工的详细信息。2.输出项目:根据用户的输入显示相应的结果。
4.3数据库的设计4.3.1数据库的概念结构设计和ER图在需求分析阶段已完成该系统所有的数据分析。根据该阶段所建立的概念模型,已经得出满足系统设计要求的几个关系描述,该阶段的主要工作就是把前一阶段的成果转化为具体的数据库。概念结构设计就是要找出实体和他们之间的联系,去除非本质的东西。实体是名词,在ER图中设计中就是所说的表。比如“药品”,“库存”。
行为是动词,在ER图中设计时一般不考虑行为,它是业务逻辑,在详细设计才有设计,是方法。比如“销售”,“进货”等等。
在设计ER图时时强调的是不同实体之间关系,不是行为。比如:药品"销售"库存,“转移”是一种关系,不是行为。在某种情况下,“销售”是一个关系表,将“药品”和“库存”联系起来。
在找出实体后,我们要根据分析来定义实体的属性,就是表的列。比如药品有ID,名称,进价,销价,简介等等;库存有ID,名称,数量等等。“库存”可拥有0-MANY的“药品”,而药品同样属于0-MANY的库存。所以是多对多的关系根据以上的分析给出下面的概念结构设计得E-R图如图4.3所示。用户表用户表权限权限用户名用户名用户名用户名图4.8用户E-R图有效期有效期零售商别名零售商别名药品表零售价药品表零售价ID批发价ID批发价药品名药品名备注进价产地备注进价产地规格类别规格类别图4.9药品E-R图供应商供应商备注备注地区编号地区编号供应商名供应商名图4.10供应商E-R图库存表库存表药品名药品编号药品名药品编号零售价零售价数量供应商编号数量供应商编号图4.11库存E-R图价格销售单价格销售单销售单编号销售单编号数量数量药品名药品ID药品名药品ID图4.12供应商E-R图职工表邮编职工表邮编职工号地址职工号地址证件号电话证件号电话性别职工名性别职工名图4.12职员E-R图零售商有效期规格产地别名零售商有效期规格产地别名ID进价ID进价类别零售价类别零售价批发价药品表批发价药品表备注药品名备注药品名n供货销售单编号1供货销售单编号备注备注库存初始化地区药品ID m库存初始化地区药品ID销售单供应商药品名销售单供应商药品名供应商名 m供应商名销售进货编号价格 n销售进货编号价格数量n数量库存表 n库存表 1药品编号药品编号零售价数量药品名供应商编号零售价数量药品名供应商编号图4.13实体联系E-R图4.3.2数据库的逻辑设计药品管理管理系统主要涉及到4个表,即:药品信息表、药品入库表、药品出库表和库存表。药品信息表:这张表是用来存储药品信息的。药品添加以后它的信息就会储存到这张表中,其中包含:药品编号药品名称化学名称、规格、药品类别、剂型、批号及厂商。其中药品编号是主键,非空且唯一。其余信息可以为空,并在数据表建立的时候给他们相应的规定好数据类型。药品入库表:这张表是用来存储入库表单信息的,所有入库单信息都包含在这张表中。包括:入库单号药品编号批号入库日期、有效日期、进价、预售价、数量、整量单位、散量单位及验收人。其中入库单号是主键,非空且唯一。药品出库表:这张表是用来存储出库表单信息的,所有出库信息都包含在这张表单中。它的字段有:出库单号、药品编号、批号、数量、出库日期及验收人。其中出库单号是主键,非空且唯一。药品库存表:这张表是用来存储库存信息的,所有初始化的库存信息和出库入库信息改变后的信息都会被记录下来。它字段有:库存号、药品编号、批号、药品名称、数量、整量单位、散量单位、入库日期、有效日期、进价、预售价、库存下限及验收人。4.3.3数据库的物理设计数据库设计有几个范式,一般我们要做到的是第三范式,即数据表中没有冗余字段以及同一个表中的字段没有函数依赖关系,冗余字段即在一个表中已经保存过的信息,在另一个表中就不应该存在,如果需要的话,可以通过表间的关联来得到,函数依赖性就是一个表中的字段间不应该有计算关系,如一个表中有单价字段、数量字段,就不应该有一个总金额字段。如果程序运行过程中需要总金额,可以实时计算。不过在一些较常用的表中,我们可以适当地保留冗余字段,这样,在程序运行过程中可以减少由于表间互相关联而使用速度降低等问题。这就是所谓的第四范式。数据表设计时,最好不要使用用户输入的信息作为主键,每一个数据表自己定义一个主键,添加信息是由程序自动添加,这样就可以减少数据更新时产生的错误。表与表相关联的外键最好是由程序自动生成的主键,这样数据库就比较规范了。另外,数据表设计时一般都应该有一些标志字段,标志字段可以定义成CHAR(1)或BIT型。建议实际应用中定义成CHAR(1)字段可以存储多种可能的状态,在最初设计时,可能我们没有考虑到的一些情况,在程序后来的开发中,可以通过设计标志字段为不同的值来解决,这样就避免了修改数据库结构。数据库初期设计时一定要谨慎,把所有可能的情况都考虑进去,即使当时没有用到,也要将它留在数据库中作为备用字段以便将来扩充。程序一旦开始编码,就应该尽量避免再修改数据库。因为如果数据库结构一旦改变,所有与修改的数据表相关的业务都有可能受到影响,而某些影响还很难看到,这样就容易形成一个恶性循环。错误越改越多,越改越乱,最终导致程序的失败。PB的数据窗口与其他语言的数据控件不一样,它的很多东西是预编译的。即使你一个模块已经调试无误,但只要数据库结构改动。相应的模块就一定要重新修改,否则一定会出问题。药品管理系统数据库中各个表的设计结果如下面几个表格所示。每个表格表示为数据库中的一个表。表4.14药品信息表Medicine列名数据类型允许空值默认值描述mid(PK)Varchar(8)N药品编号mname Varchar(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备注表4.15用户表User列名数据类型允许空值默认值描述Username(PK)Varchar(20)N用户名password Varchar(8)N密码rankintN1权限表4.16供应商表Supplier列名数据类型允许空值默认值描述spid(PK)Varchar(8)N供应商编号spnameVarchar(8)N供应商名SpareaVarchar(8)N地区SpmenoVarchar(40)Y备注表4.17销售单表SalesOrder列名数据类型允许空值默认值描述Soid(PK)Varchar(8)N销售单编号mid Varchar(8)N药品编号MnameVarchar(40)N药品名SnumintN0数量pricedoubleN0单价表4.18职工表Staff列名数据类型允许空值默认值描述Staffid(PK)Varchar(8)N职工编号staffnameVarchar(20)N职工名称Staffsexvarchar(2)N性别stafftelvarchar(12)N电话staffaddvarchar(40)Y地址Staffcardvarchar(40)N身份证staffzipvarchar(6)Y备注表4.19货存表Stock列名数据类型允许空值默认值描述Mid(PK)Varchar(8)N职工编号mnameVarchar(20)N职工名称mpricefloatN性别mnumintN电话spidvarchar(8)Y地址timedatetimeN身份证statusintN存货类别第五章编码实现
5.1用户登陆模块用户登陆界面如图5.1所示图5.1药品登陆界面关键代码如下://显示出图形界面,Login.javapublicLogin(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.javapublicbooleanlogin(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; }5.2用户管理模块用户管理界面5.2所示。图5.2用户管理界面关键代码如下:(点击“续接”时系统执行的操作)//UserDao.java//用户注册publicbooleanregeist(Useruser){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="insertintouser(username,password,rank)values('"+user.getUsername()+"','"+user.getPassword()+"',"+user.getRank()+")"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"添加失败,您输入的用户已存在","警告",1); returnfalse; } JOptionPane.showMessageDialog(null,"恭喜您,添加成功","恭喜",1); returntrue;} //查询用户publicString[]findUser(){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="select*fromuser"; String[]userlist=newString[128]; System.out.println(sql); try{ ResultSetrs=stmt.executeQuery(sql); inti=0; while(rs.next()){ userlist[i]=rs.getString("username"); i++; } }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"查找用户失败","警告",1); returnnull; } returnuserlist;}//删除用户publicbooleandelUser(Stringusername){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="deletefromuserwhereusername='"+username+"'andrank=0"; String[]userlist=newString[]{}; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"删除用户失败","警告",1); returnfalse; } returntrue;} //修改用户publicbooleanmodify(Useruser){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="updateusersetusername='"+ user.getUsername()+"',password='"+ user.getPassword()+"',rank="+user.getRank()+" whereusername='"+user.getUsername()+"'"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); JOptionPane.showMessageDialog(null,"修改失败","警告",1); returnfalse; } JOptionPane.showMessageDialog(null,"恭喜您,修改成功","恭喜",1); returntrue;}//显示模块com.ahut.frame.usermgr用户添加核心代码://显示用户添加界面JPaneleditPanel=newJPanel();editPanel.setBorder(BorderFactory.createTitledBorder("添加用户"));editPanel.setLayout(newGridLayout(2,1));JPanelupPanel=newJPanel();upPanel.setBorder(BorderFactory.createTitledBorder("用户信息"));upPanel.setLayout(newGridLayout(3,1));JPaneljp1=newJPanel();JPaneljp2=newJPanel();JPaneljp3=newJPanel(); jp1.add(newJLabel("用户名"));username=newJTextField("",8);password=newJPasswordField("",8);password2=newJPasswordField("",8);jp1.add(username);upPanel.add(jp1);jp2.add(newJLabel("密码"));jp2.add(password);jp3.add(newJLabel("再次密码"));jp3.add(password2);upPanel.add(jp2);upPanel.add(jp3);editPanel.add(upPanel); JPaneladdUserSubmitPanel=newJPanel();JButtonaddUserSubmitBtn=newJButton("提交");JButtonaddUserCancelBtn=newJButton("取消");addUserSubmitPanel.add(addUserSubmitBtn);addUserSubmitPanel.add(addUserCancelBtn);editPanel.add(addUserSubmitPanel);addUserSubmitBtn.addActionListener(newaddUserSubmitListener());addUserCancelBtn.addActionListener(newaddUserCancelListener());add(editPanel,BorderLayout.CENTER);//提交用户添加时执行的操作publicclassaddUserSubmitListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ System.out.println("==="+password.getText().trim()+"===="); if(password.getText().trim().equals("")||!password.getText().trim().equals(password2.getText().trim())){ JOptionPane.showMessageDialog(null,"输入不正确","警告",1); }else{ Useruser=newUser(); user.setUsername(username.getText().trim()); user.setPassword(password.getText().trim()); user.setRank(0); UserDaoud=newUserDao(); ud.regeist(user); } }//用户修改的核心代码://核心代码:JPaneleditPanel=newJPanel(); editPanel.setLayout(newGridLayout(0,2)); editPanel.setBorder(BorderFactory.createTitledBorder("修改用户")); JPanelleftPanel=newJPanel(); leftPanel.setLayout(newGridLayout(0,1)); leftPanel.setBorder(BorderFactory.createTitledBorder("用户列表")); UserDaoud=newUserDao(); userlist=newJList(ud.findUser()); leftPanel.add(newJScrollPane(userlist,22,31)); userlist.addListSelectionListener(newuserlistListener()); editPanel.add(leftPanel); JPanelrightPanel=newJPanel(); rightPanel=newJPanel(newBorderLayout()); rightPanel.setBorder(BorderFactory.createTitledBorder("用户信息")); rightPanel.setLayout(newFlowLayout()); unfld=newJTextField("",8); pwdfld=newJTextField("",8); rankfld=newJTextField("",8); JPaneljPanel1=newJPanel(newGridLayout(0,1)); jPanel1.add(newJLabel("用户名:")); jPanel1.add(newJLabel("密码:")); jPanel1.add(newJLabel("权限:")); JPaneljPanel2=newJPanel(newGridLayout(0,1)); jPanel2.add(unfld); jPanel2.add(pwdfld); jPanel2.add(rankfld); rightPanel.add(jPanel1,"West"); rightPanel.add(jPanel2,"East"); editPanel.add(rightPanel); add(editPanel,BorderLayout.CENTER); JPanelmodifyUserSubmitPanel=newJPanel(); JButtonmodifyUserSubmitBtn=newJButton("修改用户"); modifyUserSubmitPanel.add(modifyUserSubmitBtn); add(modifyUserSubmitPanel,BorderLayout.SOUTH);//监听器publicclassmodifyUserSubmitListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ if(username==null||username.equals("")){ JOptionPane.showMessageDialog(null,"未选中用户","警告",1); }else{ inti=JOptionPane.showConfirmDialog(null,"是否修改该用户?修改将无法恢复!","警告",0); if(i==1)return; UserDaoud=newUserDao(); Useruser=newUser(); user.setUsername(unfld.getText().trim()); user.setPassword(pwdfld.getText().trim()); if(rankfld.getText().trim().equals("系统管理员")){ user.setRank(1); }else{ user.setRank(0); } ud.modify(user); } }5.3销售管理模块销售管理界面如图5.3所示。图5.3销售界面关键代码如下:(点击“销售”时系统执行的操作)//DAO中的处理publicbooleansales(SalesOrderso){ Connectionconn=DB.getConn(); Statementstmt=DB.getStatement(conn); Stringsql="insertintosalesordervalues('"+so.getSoid()+"','" +so.getMid()+"','"+so.getMname()+"','" +so.getNum()+"',"+so.getPrice()+")"; System.out.println(sql); try{ stmt.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); returnfalse; } returntrue;}//com.ahut.frame.salesMgr包中执行的操作publicclassbuyListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ for(intn=0;n<order.length;n++){ if(order[n]!=null&&!order[n].equals("")){ Stringmsg=order[n]; StringTokenizerstnizer=newStringTokenizer(msg,","); inti1=Integer.parseInt(stnizer.nextToken()); Stringname1=stnizer.nextToken(); Stringpricestr=stnizer.nextToken(); StringTokenizerstnizerprice=new StringTokenizer(pricestr,"元"); floatprice1= Float.parseFloat(stnizerprice.nextToken()); SalesOrdersod=newSalesOrder(); sod.setSoid(name1); sod.setMid(name1); sod.setMname(name1); sod.setNum(1); sod.setPrice(price1); SalesOrderDaosodao=newSalesOrderDao(); sodao.regeist(sod); StockDaostockdao=newStockDao(); stockdao.modifyNum(name1); stocklist.setListData(stockdao.findStock()); } } JOptionPane.showMessageDialog(null,"销售成功了","警告",1); }}5.4进货管理模块图5.4药品管理界面核
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工产品检测代理合同模板
- 企业专用劳动合同聘用合同书
- 科技园区企业租赁合同模板
- 养老院建设项目招投标文件
- 林业开发铣刨机租赁合同
- 国有企业知识管理策略
- 环保项目内部招投标管理规定
- 木结构工程混凝土施工承包合同
- 水果公司宿舍电费管理准则
- 商业大厦铁艺施工合同
- 幼儿园小班科学课件《比较多少》
- 食品安全事故处置规章制度
- 解读退役军人安置条例制定微课
- DL 5190.2-2019 电力建设施工技术规范 第2部分:锅炉机组
- 年产500万只塑料包装袋(厚度不低于0.025毫米)生产线建设项目环评报告书
- 《SYB创业培训》实操沙盘Ⅰ
- 洗碗外包合同
- 研学车辆安全责任协议书
- 钢结构施工施工质量管理体系与保证措施
- 医学美容技术专业《疾病学基础》课程标准
- 视频制作保密协议版
评论
0/150
提交评论