您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页基于Java的医药销售管理系统的设计

基于Java的医药销售管理系统的设计

来源:五一七教育网


摘 要

伴随着计算机的普及和计算机科学技术的飞速发展,人们开始越来越多地利用计算机解决实际问题。医药各种信息的管理是医药行业管理中的重要部分,面对大量的药品信息,采用人工处理将浪费大量的时间、人力和物力,并且数据准确性低,数据汇总速度慢。为解决这一问题,开发一个界面友好、易于操作的综合软件成为医药企业的首选。

本系统从操作简便、界面友好、灵活、实用、安全的要求出发,完成对进货、销售、库存管理全过程信息的跟踪与管理,包括对操作员与系统数据的维护,信息的添加、删除、查询、统计等。本医药销售管理系统是按照各医药行业中各种批发、零售及经销公司的进、销、存方面的需求进行设计的,是企业信息化管理的理想工具。

本系统采用MyEclipse 8.6作为开发工具,采用Mysql作为后台数据库。以及采用了JAVA开发技术,采用MVC架构对系统进行构造。前台运用Swing技术,后台运用J2EE中Hibernate和Spring轻量级的框架。

【关键词】医药销售管理系统;Myeclipse8.6;Mysql;Swing.

i

Abstract

Along with the rapid development of computer technology and computer science popularization , more and more people began to use computers to solve practical problems. Medical management of a variety of information management in the pharmaceutical industry is an important part of the face of a large number of drug information , the use of manual processing will waste a lot of time, manpower and material resources , and low data accuracy , data collection and slow. To solve this problem , the development of a user-friendly, easy to operate integrated software of choice for pharmaceutical companies .

The system from a simple, user-friendly, flexible, practical and safety requirements, the completion of the purchase, sales, inventory management, tracking and management of the whole process of information, including data on the operator and the system maintenance information to add , delete, query, statistics and so on. The pharmaceutical sales management system is in accordance with the needs of the pharmaceutical industry in a variety of wholesale, retail and distribution companies , sales, save aspects of the design , is the ideal tool for enterprise information management.

The system uses MyEclipse 8.6 as a development tool, using Mysql as the backend database . And the use of the JAVA development techniques , the use of MVC architecture of the system configuration. Reception use Swing technology background in the use of J2EE Hibernate and Spring lightweight frame.

【Keywords】 Pharmaceutical sales management system ; Myeclipse8.6; Mysql; Swing.

ii

目 录

第1章 绪 论 .............................................................................................................. 1

1.1 研究背景 .......................................................................................................... 1 1.2国内外研究现状 ............................................................................................... 1 1.3 前景意义 .......................................................................................................... 3 1.4 系统特征 .......................................................................................................... 3 1.5 论文组织结构 .................................................................................................. 4 第2章 系统相关技术基础 .......................................................................................... 5

2.1 MyEclipse8.6简介 ........................................................................................... 5 2.2 Mysql简介 ....................................................................................................... 5 2.3 SQL语言简介 .................................................................................................. 5 2.4 本章小结 .......................................................................................................... 6 第3章 系统分析 .......................................................................................................... 7

3.1可行性分析 ....................................................................................................... 7

3.1.1技术可行性 ............................................................................................. 7 3.1.2经济可行性 ............................................................................................. 7 3.1.3操作可行性 ............................................................................................. 7 3.2需求分析 ........................................................................................................... 7 3.3系统的需求描述 ............................................................................................... 8

3.3.1 系统用例图 ............................................................................................ 8 3.3.2 系统活动图 .......................................................................................... 11 3.4本章小结 ......................................................................................................... 13 第4章 概要设计 ........................................................................................................ 14

4.1 项目规划 ........................................................................................................ 14 4.2 系统功能结构图 ............................................................................................ 14 4.3 本章小结 ........................................................................................................ 15 第5章 系统详细设计 ................................................................................................ 16

I

5.1 数据库设计 .................................................................................................... 16

5.1.1 数据项设计 .......................................................................................... 16 5.1.2 数据库的概念结构设计 ...................................................................... 16 5.2 逻辑结构设计 ................................................................................................ 19

5.2.1 数据库模型图 ...................................................................................... 19 5.2.2 数据表 .................................................................................................. 19 5.3 系统主框架布局与实现 ................................................................................ 22

5.3.1 搭建环境 .............................................................................................. 22 5.3.2登录界面的设计 ................................................................................... 23 5.3.2 主窗体设计 .......................................................................................... 25 5.3.3 药品模块设计 ...................................................................................... 28 5.3.4 药品采购模块设计 .............................................................................. 31 5.3.5 库存模块设计 ...................................................................................... 34 5.3.6销售退款模块设计 ............................................................................... 36 5.3.7 入库明细查询模块设计 ...................................................................... 40 5.3.8 用户模块设计 ...................................................................................... 45 5.4 本章总结 ........................................................................................................ 48 第6章 系统测试 ........................................................................................................ 49

6.1 测试目的 ........................................................................................................ 49 6.2 测试结果 ........................................................................................................ 49

6.2.1操作员登录测试 ................................................................................... 49 6.2.2 药品采购测试 ...................................................................................... 50 6.2.3 药品销售测试 ...................................................................................... 51 6.2.4 库存盘点测试 ...................................................................................... 52 6.3 本章总结 ........................................................................................................ 52 第7章 系统总结与展望 ............................................................................................ 53

7.1 总结 ................................................................................................................ 53 7.2 展望 ................................................................................................................ 53

II

参考文献 ...................................................................................................................... 54 致谢 ................................................................................................ 错误!未定义书签。

III

基于Java的医药销售管理系统的设计与实现

第1章 绪 论

1.1 研究背景

随着计算机的普及和计算机科学技术的飞速发展,人们开始越来越多地利用计算机解决实际问题。医药各种信息的管理是医药行业管理中的重要部分,面对大量的药品信息,采用人工处理将浪费大量的时间、人力和物力,并且数据准确性低,数据汇总速度慢。为解决这一问题,开发一个界面友好、易于操作的综合软件成为医药企业的首选[1]。通过计算机对企业信息流通过程中的数据进行自动化管理是开发本系统的主要目的。

整个系统从操作简便、界面友好、灵活、实用、安全的要求出发,完成对进货、销售、库存管理全过程信息的跟踪与管理,包括对操作员与系统数据的维护,信息的添加、删除、查询、统计等。本文所设计的医药综合管理系统可以满足医药行业中各种批发、零售及经销公司的进、销、存方面的需要,是企业信息化管理的理想工具。

现在伴着医疗制度改革的进行,药品招标采购的逐年规范和扩大,药品管理已经成为药剂科乃至整个医院管理的重要内容。传统的管理模式已经跟不上顾客对快节奏生活的要求了!随着计算机的普及和计算机软件的不断发展,越来越多的医疗机构开始注视计算机这个辅助工具为自己带来的效益了[2]。医院的售药机构需要通过计算机提高自已工作效率、对药品实现进销存管理和职工管理,提高经济效益

1.2国内外研究现状

上世纪五十年代,计算机就开始应用于管理中。当时只是用于处理简单的工资单。由于经济的不断发展,计算机在管理中的应用也在不断增加。据计算机应用方面发展较快的国家统计,计算机永夜经济管理的约占80%;用于科技运算的占8%;用于生产过程控制的占12%。因此,经济管理师计算机应用的主要领域。销售时经济管理的重要组成部分,在发达国家计算机在销售管理中的应用已经达到很高的水平[3]。

医院药品管理信息系统的主要目标是支持医院药品的行政管理与事务处理业务,减轻事务处理人员的劳动强度,辅助医院药品管理,辅助高层领导决策,

1

基于Java的医药销售管理系统的设计与实现

提高医院药品的工作效率,从而使医院药品能够以少的投入获得更好的社会效益与经济效益,像财务系统、人事系统、药品库存管理系统等就属于管理系统的范围。

但是,无论外国还是中国,当一个医院药品的医院药品管理系统刚刚起步时,往往是首先建立医院药品管理信息系统。

在国外,发达国家医院药品管理系统的开发实现已有三十多年的历史,至今有了长足的进步,有许多举世公认的成功的系统在医院药品有效地运转着。像盐湖城LDS医院药品的HELP系统,麻省总医院药品的COSTAR系统,退伍军人管理局的DHCP系统。

纵观美国的医药库房发展历史,大约可分为三个阶段:第一个十年,集中在开发医院药品行政管理的功能上,像财务收费管理管理等。但到1972年Collen仍报告美国迄今为止连一个成功的已完成的全面医院药品(管理)计算机系统都没有。第二个十年,在继续完成和实现医院药品管理信息的计算机化的同时,开发者的努力已进入医疗信息的处理领域,像病人医疗处理系统,实验室系统等。到1985年,美国全国医院药品数据处理工作调查表明,100张床位以上的医院药品80%实现了计算机财务收费管理,70%的医院药品可支持病人挂号登记和行政事务管理,25%的医院药品有了较完整的MIS。医院药品管理系统正在经历着小型化(DownSizing)、智能化(Intellegence)和集成化(Integration)的改造过程。

在国内,一些先进的、运用计算机技术有了一些经验或者成功地运行着某些部门级信息系统的药材公司或医院,迫切地从国内、国际市场上寻求一种较为完整的适合中国国情的药品管理系统产品[4]。一些大的集团化的药材公司或大中小型医院都迫切地需要国家卫生部及有关信息开发部门集中财力、人力、物力,下真功夫开发出一套适合我国市场的,有中国特色的药材公司药品信息管理系统,满足药材公司和医院药品管理的迫切需求,并进而推动整个中国医药卫生信息产业的形成。 趋于这种形势,加上各方面的,如本人技术有限、人力不足等,我本着从大处着眼、小处着手、循序渐进,先建一个简单实用的小型医院药品管理系统,然后逐步完善。

目前医药管理系统地应用已成为医院管理的重要工具和手段,它的引入有助于改变传统的工作方式,提高工作效率;提高经济效益;加强过程控制,提高医

2

基于Java的医药销售管理系统的设计与实现

药管理质量;提高医院信誉,增强竞争能力;实现卫生资源共享;强化医院的科学管理等等。

总之,药品管理系统应该能够为管理员提供充足的信息和快捷的数据处理手段,对医院药品的各类信息及数据进行处理,做到数据管理及分析,为医院管理者提供一个适用的管理工具,从而方便医院的管理。

1.3 前景意义

由于医药产品种类繁多、销售模式特殊、业务大,单凭手工记账已很难适应工作的需要。医药作为一个关系到人们健康的特殊行业,国家对此又有一些不同于其他汉特的管理,这些都加大了管理的难度。

如何尽快建立和完善现代企业的信息管理机制的问题,已成为医药企业发展的关键所在。而方便、安全、快捷的医药管理软件系统正是在这样的背景下发展起来的。

这种管理软件对硬件的要求很低,一般有一个比较简单的服务器与PC机组成的网络即可,再加上使用比较廉价、性能不错的软件,这样就可以以较低的成本来实现一个足够使用的功能,而这种模式也正满足了那种中小型医药公司的要求。但是目前对这种管理软件的开发还处于一种比较原始的阶段。开发者往往都是出于资金和时间的顾虑使用比较陈旧的技术,而且各为己见,并且很少涉及网络。可是当今是一个网络化的社会,单机版的管理软件多如牛毛,去开发一个类似的软件无疑是一种在时间上、精神上和资源上的极大浪费[5]。所以为这种有需要的中小型企业开发一种基于网络的医药管理软件是非常有实用价值的。

1.4 系统特征

本系统结合Java架构和Mysql的强大优势,不但为医药销售管理系统省去了大把时间和金钱,还了促进信息大众化和社会化的进步,另一面又可获得巨大的经济利润,创造出巨大市场空间。

本设计为基于Java架构的医药销售管理系统,通过多模块的功能结合实现方便快捷的医药销售管理,医药销售人员的双手与大脑。特色也就是所谓的创新点主要表现在本系统在极大的扩展医药销售建设的简洁性及使用的高效性。

3

基于Java的医药销售管理系统的设计与实现

1.5 论文组织结构

这篇论文被分七个章节。绪论是论文的第1章,这一章自上而下说的是医药销售管理系统的研究背景、国内外研究现状、意义、系统结构和论文的组成。第2章说的是医药管理系统所采用的开发工具,主要介绍了MyEclipse8.6,Mysql的功能及优势。第3章是在之前章节的根基上对本系统做出了详细的需求分析,第4章做了概要设计从主要功能模块分析确定了系统开发的作用和意义。可行性分析从技术、经济、操作三个方面分析确定了系统开发的作用和意义,为以后的开发打好基础。论文从第5章开始介绍开发此系统的详细过程,主要包括系统的概要设计包括项目规划、系统功能结构图,系统详细设计包括设计目标、逻辑结构设计、具体实现的功能等。第6章是主要功能的系统测试。最后一章是对本系统的总结与对未来发展和改善的展望。

4

基于Java的医药销售管理系统的设计与实现

第2章 系统相关技术基础

2.1 MyEclipse8.6简介

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSP,CSS,Javascript,Spring,SQL,Hibernate[1]。

MyEclipse 是一个十分优秀的用于开发Java, J2EE的 Eclipse 插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse目前支持Java Servlet,AJAX, JSP, JSF, Struts,Spring,

Hibernate,EJB3,JDBC数据库链接工具等多项功能[6]。可以说MyEclipse是几乎囊括了目前所有主流开源产品的专属eclipse开发工具。

根据官方最新消息,MyEclipse 2013已经正式发布!MyEclipse 2013[2]支持HTML5、JQuery和主流的Javascript 库。随着MyEclipse 2013支持Html5,你可以添加音频、视频和API元素到你的项目,从而为移动设备创建复杂的Web应用程序。你甚至还可以通过HTML5 可视化设计器设计令人难以置信的用户界面

[7]

。同时,随着MyEclipse 2013支持JQuery,你可以通过插件提升性能,并添加

动画效果到设计中。

2.2 Mysql简介

Mysql是一个开放源码的小型关联式数据库管理系统,开发者为瑞典Mysql AB公司。目前Mysql被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了Mysql作为网站数据库[8]。

2.3 SQL语言简介

SQL是高级的非过程化编程语言,是沟通数据库服务器和客户端的重要工具,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以,具有完全不同底层结构的不同数据库系统,可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合

5

基于Java的医药销售管理系统的设计与实现

作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句[9]。

结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言[10]。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用[11]。如今无论是像Oracle、Sybase、DB2、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxpro、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言[12]。

SQL语言包含3个部分:

数据定义语言Data Definition Language(DDL),用来建立数据库、数据对象和定义其列。定义:definition/ 例如:CREATE、DROP、ALTER等语句。

数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以修改数据库中的数据[13]。操作:make/ 例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句、SELECT(查询)也就是通常我们称之的CRUD操作。

数据控制语言Data Controlling Language(DCL),用来控制数据库组件的存取许可、存取权限等。控制:control/ 例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句[14]。

SQL语言包括三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)[15]。

SQL 是用于访问和处理数据库的标准的计算机语言。

2.4 本章小结

这一章首先介绍Myeclipse8.6的丰富功能和明显的优势,并采用Mysql数据库作为处理数据用的数据库。前后台分工明确,具有很强的可操作性。

6

基于Java的医药销售管理系统的设计与实现

第3章 系统分析

3.1可行性分析

可行性分析必须做到严谨认真。它能分析出你要做系统的成功概率和是不是有真正的开发与使用的价值和意义。不管是为客户做一个项目还是为自己做一个商品,都要进行需求分析[16]。这样可以使企业减少不必要的损失和资金投入。从而降低系统开发所面临的风险。

做系统可行性研究是系统开发过程中的一个计划的过程,它的研究范围非常的广泛,能够设计出简单可行的人事管理系统是非常具有现实意义的[17]。应从以下三个方面进行本系统的可行性分析: 3.1.1技术可行性

本设计在windows 7系统中采用现在较流行的JSP编程语言设计,采用Mysql建立药品信息数据库, 利用Tomcat服务器运行程序,以及JDBC技术访问数据库。对于软件技术要求,现在的程序设计语言已非常成熟,采用B/S模式,利用JSP技术,使用Mysql中提供的数据库[18]。所以在技术上完全可行。 3.1.2经济可行性

当前许多中小型药房都使用人工管理方式(即纸和笔)来管理药品的进销存,这样的管理方式既困难又浪费时间和成本,并且容易出现漏账、差账的情况,因此中小药房应该向大型企业那样采用先进的管理方式,提高药房效率、降低运营成本[19]。 3.1.3操作可行性

界面设计时充分考虑管理人员的习惯,使得操作简单;数据录入迅速、规范、可靠;统计准确;制表灵活;适应力强;容易扩充。所以系统操作上完全可行[20]。

3.2需求分析

根据现在一些大中型医药公司、药店、以及药品批发零售商的实际需求,要求本系统具有以下功能。

1.统一友好的操作界面,能保证系统的易用性。 2.规范、完善的基础信息设置。 3.全方位、多功能的信息查询。

7

基于Java的医药销售管理系统的设计与实现

4.连续录入式的用户增添及维护。对药品的录入、采购、销售、退货、盘点等数据信息进行全面的管理。

3.3系统的需求描述

3.3.1 系统用例图

用例图主要用于描述用例与角色之间的相互作用以及系统的行为,系统的用例图描述符号,如图3-1所示。

<<原型>>用例名称

角色名称

角色(actor) 用例(use case) 关联(association) 依赖(dependence)

图3-1 用例图符号

1.根据对系统的分析,画出系统的顶层用例图,如图3-2所示。

医药销售管理系统基本信息业务管理业务查询用户管理管理员系统管理窗口帮助 图3-2 系统顶层用例图

2.基本信息用例图,主要是描述系统管理模块的功能,如图3-3所示。

8

基于Java的医药销售管理系统的设计与实现

基本信息药品情况客户情况管理员供应商情况 图3-3 基本信息用例图

3.业务管理用例图,主要是描述系信息设置模块的功能,如图3-4所示。

业务管理药品采购药品销售库存盘点管理员销售退货客户回款 图3-4 业务管理用例图

4.业务查询用例图,主要是描述业务查询模块的功能,如图3-5所示。

业务查询基本信息入库明细销售明细管理员回款信息 图3-5 人事管理用例图

5.用户管理用例图,主要是描述用户管理模块的功能,如图3-6所示。

9

基于Java的医药销售管理系统的设计与实现

用户管理用户增加用户维护管理员

图3-6 用户管理用例图

6.系统管理用例图,主要是描述系统管理模块的功能,如图3-7所示。

系统管理系统退出管理员

图3-7 系统管理用例图

7.窗口用例图,主要是描述窗口模块的功能,如图3-8所示。

窗口窗口平铺全部关闭全部最小化管理员全部还原 图3-8 窗口用例图

8.关于用例图,主要是描述关于模块的功能,如图3-9所示。

帮助关于管理员

图3-9 关于用例图

10

基于Java的医药销售管理系统的设计与实现

系统用例图是在需求分析阶段产生的可视化的描述工具,能够直观、规范的反应系统需求。 3.3.2 系统活动图

活动图常常被用来描述系统的行为,配合系统用例图完成需求分析阶段对系统复杂交互过程的说明。活动图用到的描述符号,如图3-10所示。

活动名称 开始(start) 活动(activity) 转换(transition) 判断(decision) 图3-10 系统活动图常用符号

根据对系统的分析,画出系统主要功能活动图。 1.操作员登录活动图,如图3-11所示

打开登录界面否登录信息是否正确填写登录信息登录成功是 图3-11 管理员登陆活动图

2.用户管理活动图,如图3-12所示。

用户管理新增用户用户维护

图3-12 更改密码活动图

3.业务管理活动图,如图3-13所示。

11

结束(end)

基于Java的医药销售管理系统的设计与实现

业务管理药品采购药品销售入库盘点销售退货客户回款 图3-13 业务管理活动图

4.业务查询活动图,如图3-14所示。

业务查询基本信息入库明细销售明细回款明细

图3-14 员工离职复职活动图

5.系统管理活动图,如图3-15所示。

系统管理系统退出 图3-15 帮助活动图

12

基于Java的医药销售管理系统的设计与实现

6.帮助活动图,如图3-16所示。

帮助关于 图3-16 帮助活动图

3.4本章小结

在研发医药销售管理系统之前对此立项进行的可行性分析和需求分析。从技术、经济、操作三个方面对此立项可行性进行了分析。从而确定了所要做的系统所需要的基本功能。

13

基于Java的医药销售管理系统的设计与实现

第4章 概要设计

4.1 项目规划

经过收集资料和需求分析,本医药销售管理系统主要有以下6大模块: 1. 业务管理模块的主要功能是采购药品、药品销售、销售退款、客户回款。 2. 基本信息模块主要功能是药品情况、客户情况、供应商情况。 3. 用户管理模块主要功能是新增用户、用户维护。

4. 业务查询模块主要是基本查询、入库明细、销售明细、回款信息。 5. 窗口管理模块主要是窗口关闭、窗口平铺、窗口最小化、窗口还原 6. 技术支持模块主要是版权信息。 本系统的运行环境: 1. 硬件环境 CPU:CORE i3 内存:4GB 硬盘:硬盘500G 2. 软件环境 后台数据库: Mysql 操作系统: Windows 7 开发工具:MyEclipse

Tomcat6.0

JDK1.5或1.5以上

Jigloo(Eclipse插件,可视化的GUI)

4.2 系统功能结构图

医药销售管理系统包含业务系统、基本信息、用户信息、业务查询、窗口管理、帮助6个大的功能模块,在这几个大的功能模块中各自又有自己的详细功能,如图4-1所示。

14

基于Java的医药销售管理系统的设计与实现

图 4-1 系统功能结构图

4.3 本章小结

这一章介绍的是系统的概要设计,通过对需求分析阶段的分析研究,从而

设计出所做系统的大体结构框架。继而对所做系统完善了结构设计,最终获得了所做系统的六个主要模块。

15

基于Java的医药销售管理系统的设计与实现

第5章 系统详细设计

5.1 数据库设计

5.1.1 数据项设计

根据现代中小型医疗企业机构的需求现状和本系统的设计,经过需求分析后,对医疗信息的收集,进行数据库的第一步构造。为下面奠定基础。

部分重要数据项如下;

1. 药品:药品编号、药品名称、药品条形、拼音码、通用名称、单位、规格、剂型、产地、包装数量、有效期、质量标准、经营方式、批号、零售价格、进货价格等。

2. 客户:客户编号、客户名称、拼音编码、客户地址、所属地、邮政编码、联系电话、联系人、开户银行、开户账户等。

3. 供应商:供应商编号、供应商名称、拼音编码、供应商地址、所属地区、邮政编码、联系电话、联系人、开户银行、开户账户等。

4.采购:录单日期、供应商名称、采购品种、经办人、采购总数、合计金额、采购票号等。

5. 销售:销售票号、录单日期、经办人、销售客户等。 6. 用户:用户ID、用户姓名、重复口令、用户口令等。 5.1.2 数据库的概念结构设计

通过分析得到了这些数据项之后,下一步要做的就是设计本医药销售管理系统的各个实体,以及它们之间的联系,为后面的逻辑结构打好铺垫。这些实体包含了系统中的具体信息。

根据上面的设计规划出实体:药品实体、客户实体、供应商实体、采购实体、销售实体、用户实体。描述各实体的E-R图如下所示。

.药品实体图,包括药品编号、药品名称、药品条形、拼音码、通用名称、单位、规格、剂型、产地、包装数量、有效期、质量标准、经营方式、批号、零售价格、进货价格、医疗保险编号、药品类名等。如图5-1所示。

16

基于Java的医药销售管理系统的设计与实现

药品编号药品条形通用名称规格药品编号药品名称拼音码单位剂型药品类名药品医疗保险编号进货价格零售价格经营方式有效期产地包装数量批号质量标准 图5-1 药品实体图

客户实体图,包括客户编号、客户名称、拼音编码、客户地址、所属地、邮政编码、联系电话、联系人、开户银行、开户账户等。如图5-2所示。

客户编号开户账户客户名称拼音编码客户地址客户邮政编码所属地区开户银行联系人联系电话 图5-2 客户实体图

供应商实体图,包括供应商编号、供应商名称、拼音编码、供应商地址、所属地区、邮政编码、联系电话、联系人、开户银行、开户账户等。如图5-3所示。

供应商编号开户账户供应商名称拼音编码供应商地址供应商邮政编码所属地区开户银行联系人联系电话

图5-3 供应商实体图

采购实体图,包括录单日期、供应商名称、采购品种、经办人、采购总数、合计金额、采购票号等。如图5-4所示。。

17

基于Java的医药销售管理系统的设计与实现

录单日期供应商名称采购品种采购票号采购经办人合计金额采购总数 图5-4 采购实体图

销售实体图,包括销售票号、录单日期、经办人、销售客户等。如图5-5所示。

销售票号录单日期销售销售客户经办人 图5-5 销售实体图

用户实体图,包括用户ID、用户姓名、重复口令、用户口令等。如图5-6所示。

用户ID用户姓名用户用户口令重复口令 图5-6 用户实体图

实体E-R图,如图5-7所示

管理员录入供应商录入登记提供客户购买药品 图 5-7 实体E-R图

18

基于Java的医药销售管理系统的设计与实现

5.2 逻辑结构设计

5.2.1 数据库模型图

该管理系统属于小型系统,Mysql数据库是目前数据库产品运行速度最快的关系型数据库,且是免费的,非常适合该医药进销存系统。所以该系统采用Mysql数据库,用来存储药品信息,及用户个人信息。在这个系统中,数据库为DB_JXC,这个数据库的表树形结构如图5-8所示。

图5-8 数据表树形结构

5.2.2 数据表

下面给出这个系统中比较关键的数据表: 1. Buy_detaile(药品采购明细表)

这张表主要是用来保存采购药品的明细信息。表结构表5-1所示。

表5-1药品采购明细表的结构 字段名称 入库流水号码

入库单据号 药品编号 入库数量 入库单价 入库金额 入库日期 库存数量 库存状态

数据类型 varchar(20) varchar(20) varchar(20) Int(10) Float Float

Timestamp Int(10) Char(4)

自增主键

是 否 否 否 否 否 否 否 否

允许为空

否 是 是 是 是 是 是 是 是

默认值

2. Buy_main(药品采购明细表)

这张表主要是用来保存药品采购数据。表结构如表5-2所示。

19

基于Java的医药销售管理系统的设计与实现

表5-2药品采购明细表的结构 字段名称 入库单据号码

品种数量 入库数量 入库金额 入库日期 经办人 库存状态 供应商编号

数据类型 Varchar(20) Int(10) Int(10) Float

Timestamp Varchar(10) Varchar(4) Varchar(20)

自增主键

是 否 否 否 否 否 否 否

允许为空

否 是 是 是 是 是 是 是

默认值

3. Client_jbqkb(客户基本情况表)

客户表主要是用来存储客户的基本信息数据,表的结构如5-3所示。

表5-3客户基本情况的结构 字段名称 客户编号 客户名称 拼音码 客户地址 所属地区 邮政编码 电话 联系人 开户银行 开户账户

数据类型 Varchar(20) Varchar(80) Varchar(10) Varchar(80) Varchar(40) Varchar(10) Varchar(20) Varchar(10) Varchar(40) Varchar(20)

自增主键

是 否 否 否 否 否 否 否 否 否

允许为空

否 是 是 是 是 是 是 是 是 是

默认值

4. Gys_jbqkb(供应商基本情况表)

客户表主要是用来存储客户的基本信息数据,表的结构如表5-4所示。

表5-4供应商基本情况的结构 字段名称 供应商编号 供应商名称 拼音码 供应商地址 所属地区 邮政编码 电话 联系人 开户银行 开户账户

数据类型 Varchar(20) Varchar(80) Varchar(10) Varchar(80) Varchar(40) Varchar(10) Varchar(20) Varchar(10) Varchar(40) Varchar(20)

自增主键

是 否 否 否 否 否 否 否 否 否

允许为空

否 是 是 是 是 是 是 是 是 是

默认值

5. Medicine_jbqkb(药品表)

20

基于Java的医药销售管理系统的设计与实现

药品表主要用来保存药品信息,表的结构如5-5所示。

表5-5药品表的结构 字段名称 药品编号

药品条码 药品名称 通用码 拼音码 单位 规格 剂型 产地 包装数量 有效期 质量标准 经营方式 批号 零售价格 进货价格 批发价格 药品类别 医疗编号

数据类型 Varchar(20) Varchar(20) Varchar(80) Varchar(20) Varchar(10) Varchar(4) Varchar(20) Varchar(10) Varchar(20) Varchar(10) Varchar(10) Varchar(20) Varchar(8) Varchar(10) Float Float Float

Varchar(20) Varchar(10)

自增主键

是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否

允许为空

否 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是 是

默认值

6. Sell_detaile(药品销售明细表)

这张表主要用来存储药品的明细信息,表的结构如5-6所示。

表5-6药品销售明细表的结构 字段名称 销售流水号 药品编号 销售单据号码 销售数量 销售单据 销售金额 销售日期 退款状态

数据类型 Varchar(20) Varchar(20) Varchar(20) Varchar(10) Int Float Float Char(10)

自增主键

是 否 否 否 否 否 否 否

允许为空

否 是 是 是 是 是 是 是

默认值

7. username(用户信息表)

这张表主要用来存用户的明细信息,表的表结构如5-7所示。

表5-7用户信息表的结构 字段名称

数据类型

自增主键

允许为空

默认值

21

基于Java的医药销售管理系统的设计与实现

用户ID

用户账号 用户密码 重复密码

Varchar(20) Varchar(20) Varchar(20) Varchar(50) 是 否 否 否 否 是 是 是

5.3 系统主框架布局与实现

5.3.1 搭建环境

新建一个Java Project,命名为Medical Systems。 在lib文件夹下导入所需的包。如图5-9所示。

图5-9 lib包

建立package包,如图5-10所示。

图5-10 package包

在com.zhangxiang包存放医药管理主界面和登陆页面;在com.zhangxiang.dao

22

基于Java的医药销售管理系统的设计与实现

包下存放DAO工具类;在com.zhangxiang.constrol包下存放控制页面逻辑类;在com.zhangxiang.view包下存放页面;在images包下存放所需的图片。 5.3.2登录界面的设计

由Jigloo这个插件编写后自动生成的代码大致如下:

package com.zhangxiang;

@SuppressWarnings(\"serial\")

public class LoginDialog extends JFrame { private MedicalMain loginPanel = null; private JTextField userField = null; private JPasswordField passwordField = null; private JButton loginButton = null; private JButton exitButton = null; private JF_main mainFrame; private JLabel jLabel1 = null; private JLabel jLabel = null; public LoginDialog() {}

private MedicalMain getLoginPanel() { }

private JTextField getUserField() { }

private JPasswordField getPasswordField() { }

private JButton getLoginButton() {}

public void actionPerformed(ActionEvent e) { }

private JButton getExitButton() { }

//界面初始化方法

private void initialize() { }

//主程序

public static void main(String[] args) {}

//背景面板 //用户名文本框 //密码文本框 //登陆按钮 //退出按钮 //主窗体对象

其中登录按钮做了处理,关键代码如下

loginButton.addActionListener(new ActionListener() {

private UserName user;

@SuppressWarnings(\"unchecked\") @Override

public void actionPerformed(ActionEvent e) { String id = getUserField().getText().trim(); if (id == null || id.length() <= 0) {

JOptionPane.showMessageDialog(null, \"输入用户ID不能为空,请重新输入\系统提示\

23

基于Java的医药销售管理系统的设计与实现

getUserField().requestFocus();

return; }

String sqlStr = \"from UserName where id = '\" + id + \"'\"; List list = null;

list = AdapterDao.QueryObject(sqlStr); if (list.size() > 0) {

Iterator iterator = list.iterator(); user = (UserName) iterator.next();

String pass = new String(getPasswordField().getPassword()); if (!user.getPassword().equals(pass)) {

JOptionPane.showMessageDialog(LoginDialog.this, \"用户名或密码错误,无法登录\登录失败\

return; } }

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = mainFrame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; }

if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; }

mainFrame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);

mainFrame.setVisible(true);

LoginDialog.this.setVisible(false); } });

登录模块在程序中运行的登录界面,如图5-11所示。

24

基于Java的医药销售管理系统的设计与实现

图5-11 系统登录界面

5.3.2 主窗体设计

当用户登录成功后进入到医药综合系统主界面,在这个主界面中主要是完成用户信息,药品信息和相关业务的操作,其中包括各种基本信息的录入及查询。主界面运行的结果图,如图5-12所示。

图5-12 主窗体界面

这个窗体用到的主要技术是为菜单增加菜单监听事件。对于这些菜单项可以调用addMenuListener方法来进行监听。这个方法定义如下:

Public void addMenuListener(MenuListener l)

在菜单监听接口中,有个menuSelected()方法,这个方法的作用是选择某个菜单前调用这个方法。可以用来实现对菜单项禁用。这个方法定义如下:

Public void menuSelected(MenuEvent e)

这里说明一下,为什么这个地方没有用到适配器,MenuListener接口不提供适配器。由于这个接口只有3个方法,顾没有必要为这个类提供适配器。这边就采用空实现的方法,即只有方法名,而方法体的内容为空。

在JF_main这个类代码中分别定义了对这几个控件的字段和方法。其中定义

25

基于Java的医药销售管理系统的设计与实现

了工具栏控件和主菜单控件,定义了事件类处理、窗口菜单等等一系类菜单。也定义了创建主菜单的私有方法BuildMenuBar()和BuildToolBar()方法,代码如下:

package com.zhangxiang.view;

@SuppressWarnings(\"serial\")

public class JF_main extends JFrame { JPanel contentPane;

BorderLayout borderLayout1 = new BorderLayout(); // 定义静态实例变量desktop用来生成桌面面板

public static JDesktopPane desktop = new JDesktopPane();

MenuBarEvent _MenuBarEvent = new MenuBarEvent();// 自定义事件类处理 //菜单条

JMenuBar jMenuBarMain = new JMenuBar(); // 定义界面中的主菜单控件 JToolBar jToolBarMain = new JToolBar();// 定义界面中的工具栏控件 //窗口菜单

private JMenu chuang_kouMenu; //窗口平铺菜单项

private JMenuItem pingpuItem; //全部关闭菜单项

private JMenuItem closeAllItem; //全部最小化菜单项

private JMenuItem allIconItem; //全部还原菜单项

private JMenuItem allResumeItem; //关于菜单项

private JMenuItem guanyu_Item; //帮助菜单

private JMenu bang_zhuMenu; /*

* 菜单绑定菜单项 */

private void BuildMenuBar() {}

private void BuildToolBar() {}

实现私有方法BuildMenuBar()实现过程:先定义菜单对象的数组,主要用来生成整个系统的业务主菜单;然后定义子菜单项目。这块的关键代码如下:

private void BuildMenuBar() {

// 定义菜单对象数组用来生成主菜单

JMenu[] _jMenu = { new JMenu(\"基本信息(B)\"), new JMenu(\"业务管理(M)\"), new JMenu(\"业务查询(C)\"), new JMenu(\"用户管理(U)\"), new JMenu(\"系统管理(S)\") };

//快捷键设定

_jMenu[0].setMnemonic(KeyEvent.VK_B); _jMenu[1].setMnemonic(KeyEvent.VK_M); _jMenu[2].setMnemonic(KeyEvent.VK_C);

26

基于Java的医药销售管理系统的设计与实现

_jMenu[3].setMnemonic(KeyEvent.VK_U);

_jMenu[4].setMnemonic(KeyEvent.VK_S); //基本信息

JMenuItem[] _jMenuItem0 = { new JMenuItem(\"药品情况\"), new JMenuItem(\"客户情况\"), new JMenuItem(\"供应商情况\") };

String[] _jMenuItem0Name = { \"Medicinal\ //业务管理

JMenuItem[] _jMenuItem1 = { new JMenuItem(\"药品采购\"), new JMenuItem(\"药品销售\"), new JMenuItem(\"库存盘点\"), new JMenuItem(\"销售退货\"), new JMenuItem(\"客户回款\") };

String[] _jMenuItem1Name = { \"JF_view_buy\\"JF_view_xstk\

//用户管理

JMenuItem[] _jMenuItem3 = { new JMenuItem(\"增加用户\"), new JMenuItem(\"用户维护\") };

String[] _jMenuItem3Name = { \"sys_user_add\ //系统管理

JMenuItem[] _jMenuItem4 = { new JMenuItem(\"系统退出\") }; String[] _jMenuItem4Name = { \"JB_EXIT\" }; //业务查询

JMenuItem[] _jMenuItem2 = { new JMenuItem(\"基本信息\"), new JMenuItem(\"入库明细\"), new JMenuItem(\"销售明细\"), new JMenuItem(\"回款信息\") };

String[] _jMenuItem2Name = { \"JF_view_query_jbqk\\"JF_view_query_rkqk\\"JF_view_query_kcmx_ck\

/* 设置菜单、菜单项 */

for (int i = 0; i < _jMenu.length; i++) { jMenuBarMain.add(_jMenu[i]); }

//窗口

jMenuBarMain.add(getChuang_kouMenu());// 添加窗口菜单 //帮助

jMenuBarMain.add(getBang_zhuMenu());// 添加帮助菜单 //为基本信息注册

for (int j = 0; j < _jMenuItem0.length; j++) {

final String EventName1 = _jMenuItem0Name[j];

_jMenuItem0[j].addActionListener(new ActionListener() { @Override

public void actionPerformed(ActionEvent e) {

_MenuBarEvent.setEventName(EventName1); _MenuBarEvent.actionPerformed(e); } });

_jMenu[0].add(_jMenuItem0[j]); if (j == 1) {

27

基于Java的医药销售管理系统的设计与实现

_jMenu[0].addSeparator();

} } //省略... }

主界面的主菜单设计完成之后,可以BuildToolBar方法进行对工具栏的创建,这个方法中定义了3个String数组,为工具栏设置不同的标签,也定义了Jbutton控件。代码如下所示:

private void BuildToolBar() { String TipString[] = { \"药品录入\供应商录入\药品采购\药品销售\库存盘点\

\"销售退货\客户回款\基本查询\入库明细\销售明细\用户管理\系统退出\" };

String ImageName[] = { \"yplr.png\\"gyslr.png\\"ypcg.png\\"ypxs.png\\"kcpd.png\

\"xsth.png\ \"yhgl.png\

String ComandString[] = { \"JF_view_medicine\ \"JF_view_sell\ \"JF_view_query_jbqk\

\"JF_view_query_kcmx_ck\ for (int i = 0; i < ComandString.length; i++) { JButton jb = new JButton();

URL url = getClass().getResource(\"/images/\" + ImageName[i]); if (url == null) continue;

ImageIcon image = new ImageIcon(url); jb.setIcon(image);

jb.setContentAreaFilled(false); jb.setBorderPainted(false);

jb.setMargin(new Insets(0, 0, 0, 0)); jb.setToolTipText(TipString[i]);

jb.setActionCommand(ComandString[i]); jb.addActionListener(_MenuBarEvent); jToolBarMain.add(jb); } }

5.3.3 药品模块设计

药品的基本信息是这个系统的重要组成成分,这部分为其他模块奠定基础。在系统主界面上点击菜单中的基本信息,药品情况的选择。在这个窗体二舅可以

28

基于Java的医药销售管理系统的设计与实现

进行对药品就行基本信息的录入,同时这部分也提供了对查询功能,从而可以方便了对用户的管理。这个模块中用到的技术主要是对Hibernate的持久化对象的查询,主要的技术是用到了HQL查询。前面介绍到,HQL是一门类似于SQL的语言,但两者还是有很大的差别。这块代码主要是通过公共类AdapterDao和BuildTable对后台medicine_jdqkb的各种操作,这些操作包括对数据的添加,修改,和存盘等操作。运行药品基本录入结果图,如图5-13所示。

图5-13 药品基本录入模块

运行药品数据浏览结果图,如图5-14所示。

29

基于Java的医药销售管理系统的设计与实现

图5-14 药品数据浏览模块

具体重要代码如下:

public void jBsave_actionPerformed(ActionEvent e) {

// 弹出用户提示对话框,询问用户是否进行存盘操作

int result = JOptionPane.showOptionDialog(null, \"是否进行药品基本信息情况存盘?\系统提示\new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.NO_OPTION) return;

JTextField jText = null; String className = null; for (int i = 0; i <= 37; i++) {

className = jPanel4.getComponent(i).getClass().getName(); if (className.equals(\"javax.swing.JTextField\")) { jText = (JTextField) jPanel4.getComponent(i); if (jText.getText().length() <= 0) { JLabel jLstr = null;

jLstr = (JLabel) jPanel4.getComponent(i - 1);

JOptionPane.showMessageDialog(null, jLstr.getText() + \"不允许为空,请录入\系统提示\

jText.requestFocus(); return;

30

基于Java的医药销售管理系统的设计与实现

}

} } try {

bzsl = Integer.parseInt(jTextField10.getText().trim()); lsjg = Double.valueOf(jTextField15.getText().trim()); jhjg = Double.valueOf(jTextField16.getText().trim()); pfjg = Double.valueOf(jTextField17.getText().trim()); } catch (java.lang.NumberFormatException format) {

JOptionPane.showMessageDialog(null, \"输入的数据格式有误,请重新录入!!\\n\" + format.getMessage(), \"系统提示\

return; }

if (AdapterDao.insertmedicine(medicine) && AdapterDao.InsertStock(objstock)) {

JOptionPane.showMessageDialog(null, \"药品基本数据存盘成功\\"系统提示\

} else {

JOptionPane.showMessageDialog(null, \"药品基本数据存盘失败\\"系统提示\

} }

public void jTbh_keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_ENTER) { if (e.getSource().equals(jTbh)) {

String bh = jTbh.getText().trim(); if (bh.length() <= 0) {

JOptionPane.showMessageDialog(null, \"编号不允许为空\\"系统提示\

jTbh.requestFocus(); return; }

String QueryStr = \" from Medicine where ypbh = '\" + bh + \"'\"; List list = AdapterDao.QueryObject(QueryStr); if (list.isEmpty()) {

JOptionPane.showMessageDialog(null, \"编号不存在请重新输入\系统提示\

jTbh.requestFocus(); return; }

5.3.4 药品采购模块设计

各种信息都录入到数据库中,就可以进行对药品的入库操作。点击业务管理

31

基于Java的医药销售管理系统的设计与实现

下的药品采购选项,进入到这个模块。这个模块主要是为了完成对药品的入库基本操作,其中包括入库的等级,删除药品明细操作,添加药品明细操作,以及存盘信息系的操作。这部分用到的技术点主要是创建内部窗体,这个内部窗体可以通过继承JInternalFrame类是实现。这个类提供了很多对本机窗体功能的对象。这些功能包括调整大小,标题的显示,拖动。为了更便捷的使用这个内容窗格,这个类已经重写了remove和setLayout。这样我们就可以直接将子级添加到内容窗格ContentPane这个控件上。可以通过internalFrame.add(child)这个方式来添加进去。ContentPane还能对布局窗格和glassPane。这个模块的运行结果,如图5-15所示。

图5-15 药品采购模块

具体重要代码如下:

public void jBadd_actionPerformed(ActionEvent e) {

// 定义vector变量用来填充一条采购明细记录 Vector vdata = new Vector();

String lsh = new com.zhangxiang.constrol.GenalLsh().getLsh(); vdata.addElement(lsh); tableModel.addRow(vdata); jTable1.setModel(tableModel);

// 此处简洁处理为一次读入完成之后,在进行登记添加的时候不进行读取以提高效

32

基于Java的医药销售管理系统的设计与实现

if (jcbh.getItemCount() <= 0) {

String queryStr = \"select m.ypbh from Medicine m\"; List list = AdapterDao.QueryObject(queryStr); Iterator iterator = list.iterator(); jcbh.removeAllItems(); while (iterator.hasNext()) {

jcbh.addItem(iterator.next()); }

jcbh.addItemListener(new JF_view_buy_jcbh_itemAdapter(this));// 为jcbh控件注册监听方法 }

public void tableChanged(javax.swing.event.TableModelEvent e) { int row = e.getFirstRow(); int col = e.getColumn();

if (col == 8) { // 为进货数量

Object obj = jTable1.getValueAt(row, col); int jhsl;

float jhdj, jhje;

jhdj = Float.parseFloat(String.valueOf(jTable1.getValueAt(row, 7)).trim()); jhsl = Integer.parseInt(String.valueOf(obj).trim()); jhje = jhdj * jhsl;

jTable1.setValueAt(String.valueOf(jhje), row, 9);

jTxszl.setText(String.valueOf(jTable1.getRowCount())); // 销售品种数 int xszs = 0; float hjje = 0;

for (int i = 0; i < jTable1.getRowCount(); i++) {

xszs = xszs + Integer.parseInt(String.valueOf(jTable1.getValueAt(i, 8)).trim());

hjje = hjje + Float.parseFloat(String.valueOf(jTable1.getValueAt(i, 9)).trim()); }

jTxssl.setText(String.valueOf(xszs)); // 销售总数 jThjje.setText(String.valueOf(hjje)); // 合计金额 }

public void jButton3_actionPerformed(ActionEvent e) {

DefaultDesktopManager manger = new DefaultDesktopManager();

int result = JOptionPane.showOptionDialog(null, \"是否真的退出药品入库信息情况?\\"系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.YES_OPTION) { manger.closeFrame(this); }

33

基于Java的医药销售管理系统的设计与实现

}

public void jBsave_actionPerformed(ActionEvent e) {

DefaultDesktopManager manger = new DefaultDesktopManager();

int result = JOptionPane.showOptionDialog(null, \"是否真的存盘药品入库信息情况?\\"系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.NO_OPTION) return;

if (jTjbr.getText().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"经办人不允许为空,请录入\\"系统提示\ jTjbr.requestFocus(); return; }

if (jTable1.getRowCount() > 1) {

for (int i = 0; i < jTable1.getRowCount(); i++) { String ypbh, ypbh1;

ypbh = String.valueOf(jTable1.getValueAt(i, 1)); int j = i + 1;

if (j == jTable1.getRowCount()) continue;

for (; j < jTable1.getRowCount(); j++) {

ypbh1 = String.valueOf(jTable1.getValueAt(j, 1)); if (ypbh.equals(ypbh1)) {

JOptionPane.showMessageDialog(null, \"编号【\" + ypbh1 + \"】重复请重新选择\系统提示\ return; } } } }

5.3.5 库存模块设计

这个系统中要对药品采购和药品销售情况的统计进行查看,就要通过库存盘点。这个模块用到了的主要技术是在控件中添加数据,以及可以保存到数据库中去。前面介绍说,这个系统框架采用的事MVC模式来开发的,在JAVA Swing中使用了这个设计模式,它可以将一个控件分为三个部分来开发。下面我们以表格为例,JTable这个类主要是用来对表格的显示,这就是MVC模式中的V。通常情况我们会用到填充模式,要使用到DefaultTableModel这个类,主要是负责模型这块,即M。当用户点击业务管理下的库存盘点,就可以进入该模块,库

34

基于Java的医药销售管理系统的设计与实现

存盘点的运行结果,如图5-16所示。

图5-16 库存模块

具体的代码如下所示:

public void buildTable()

{

String[] tname = { \"药品编号\药品名称\药品批号\规格\产地\单位\剂型\有效期至\库存数量\盘点数量\" };

Vector vname = new Vector(); for (int i = 0; i < tname.length; i++) { vname.addElement(tname[i]); }

tableModel = new DefaultTableModel(vname, 0); jTable1.setModel(tableModel); }

public void jBexit_actionPerformed(ActionEvent e) {

javax.swing.DefaultDesktopManager manger = new DefaultDesktopManager();

int result = JOptionPane.showOptionDialog(null, \"是否真的退出药品药品盘点情况?\\"系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.YES_OPTION) { manger.closeFrame(this); }

35

基于Java的医药销售管理系统的设计与实现

}

public void jBpd_actionPerformed(ActionEvent e) { if (jTable1.getRowCount() <= 0) return;

int result = JOptionPane.showOptionDialog(null, \"是否真的存盘药品入库信息情况?\\"系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.NO_OPTION)

5.3.6销售退款模块设计

这个模块主要是针对在销售明细表中的数据进行处理。这个系统中用到的主要技术是JSplitPane的使用。这个类做用就是用来分割两个Component.这两个Componnet图形化分割主要以外观实现为基础。这个组件改版大小采用setDividerLocation。用户点击业务管理下的销售退货,就可以进入该模块。这个模块的运行结果图,如图5-17所示。

图5-17 销售退款模块

具体重要代码如下:

public void buildTable() {

String[] tname = { \"药品编号\药品名称\药品批号\规格\产地\单位\剂型\有效期至\" };

String[] tname1 = { \"销售流水号\药品编号\销售价格\销售数量\销售金额\

36

基于Java的医药销售管理系统的设计与实现

\"销售日期\退库数量\退库金额\退库日期\经办人\" };

Vector vname = new Vector(); Vector vname1 = new Vector(); for (int i = 0; i < tname.length; i++) { vname.addElement(tname[i]); }

for (int i = 0; i < tname1.length; i++) { vname1.addElement(tname1[i]); }

tableModel = new DefaultTableModel(vname, 0); tableMode2 = new DefaultTableModel(vname1, 0); jTable1.setModel(tableModel); jTable2.setModel(tableMode2);

jTable2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); }

private void jbInit() throws Exception {

this.getContentPane().setLayout(borderLayout1);

jPanel1.setBorder(BorderFactory.createLineBorder(Color.black)); jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

jTable1.addMouseListener(new JF_view_xstk_jTable1_mouseAdapter(this));

jScrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

jBquery.setFont(new java.awt.Font(\"新宋体\ jBquery.setText(\"查询\");

jBquery.addActionListener(new JF_view_xstk_jBquery_actionAdapter(this)); jBexit.addActionListener(new JF_view_xstk_jBexit_actionAdapter(this)); jBth.setFont(new java.awt.Font(\"新宋体\

jBth.addActionListener(new JF_view_xstk_jBpd_actionAdapter(this)); jBexit.setFont(new java.awt.Font(\"新宋体\ this.setClosable(true);

this.setTitle(\"医药销售管理系统-[销售退货]\");

jLabel1.setFont(new java.awt.Font(\"新宋体\ jLabel1.setText(\"销售单据号:\");

jTdjh.setPreferredSize(new Dimension(226, 27)); jTdjh.setText(\"\");

jTdjh.addKeyListener(new JF_view_xstk_jTdjh_keyAdapter(this)); flowLayout1.setHgap(10); jBth.setText(\"退货\");

jPanel1.setLayout(flowLayout1);

37

基于Java的医药销售管理系统的设计与实现

jBexit.setText(\"退出\");

jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT); jPanel1.add(jLabel1); jPanel1.add(jTdjh); jPanel1.add(jBquery); jPanel1.add(jBth); jPanel1.add(jBexit);

this.getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER); jScrollPane1.getViewport().add(jTable1);

jSplitPane1.add(jScrollPane1, JSplitPane.TOP);

jSplitPane1.add(jScrollPane2, JSplitPane.BOTTOM); jScrollPane2.getViewport().add(jTable2);

this.getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);

setSize(700, 500); setVisible(true);

jSplitPane1.setDividerLocation(110); }

public void jBquery_actionPerformed(ActionEvent e) { if (jTdjh.getText().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"销售单据号不允许为空,请输入\\"系统提示\ jTdjh.requestFocus(); return; }

String[] tname = { \"药品编号\药品名称\药品批号\规格\产地\单位\剂型\有效期至\" };

String[] tname1 = { \"销售流水号\药品编号\销售价格\销售数量\销售金额\\"销售日期\退库数量\退库金额\退库日期\经办人\" }; Vector vname = new Vector(); Vector vname1 = new Vector(); for (int i = 0; i < tname.length; i++) { vname.addElement(tname[i]); }

for (int i = 0; i < tname1.length; i++) { vname1.addElement(tname1[i]); }

tableModel = new DefaultTableModel(vname, 0); tableMode2 = new DefaultTableModel(vname1, 0); jTable1.setModel(tableModel); jTable2.setModel(tableMode2);

38

基于Java的医药销售管理系统的设计与实现

String djh = null, queryStr = null;

djh = jTdjh.getText().trim();

queryStr = \"from SellDetaile s join s.medicine where s.thsts = 'F' and s.xsdjh = '\" + djh + \"'\";

List list = null;

list = AdapterDao.QueryObject(queryStr); if (list.size() <= 0) {

JOptionPane.showMessageDialog(null, \"销售单据号码不存在或已经退货,请重新输入\系统提示\ jTdjh.requestFocus(); return; }

System.out.println(list.size()); Object obj[] = null;

selldetaile = new SellDetaile[list.size()];

for (int i = 0; i < list.size(); i++) { obj = (Object[]) list.get(i);

selldetaile[i] = (SellDetaile) obj[0];// 获得关联中的对象 Medicine objmed = (Medicine) obj[1];

Vector vdata = new Vector(); vdata.addElement(objmed.getYpbh()); vdata.addElement(objmed.getYpmc()); vdata.addElement(objmed.getPh()); vdata.addElement(objmed.getGg()); vdata.addElement(objmed.getCd()); vdata.addElement(objmed.getDw()); vdata.addElement(objmed.getJx()); vdata.addElement(objmed.getYxq()); tableModel.addRow(vdata); }

jTable1.setModel(tableModel); jTable1.setRowHeight(20); }

public void jBexit_actionPerformed(ActionEvent e) {

javax.swing.DefaultDesktopManager manger = new DefaultDesktopManager();

int result = JOptionPane.showOptionDialog(null, \"是否真的退出药品销售退货情况?\\"系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.YES_OPTION) { manger.closeFrame(this);

39

基于Java的医药销售管理系统的设计与实现

}

}

public void jBth_actionPerformed(ActionEvent e) { if (jTable2.getRowCount() <= 0) return;

int result = JOptionPane.showOptionDialog(null, \"是否存盘药品销售退货情况?\系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.NO_OPTION) return;

Calendar calendar = null;

Locale loc = new Locale(\"CN\"); calendar = Calendar.getInstance(loc);

calendar.setTimeInMillis(System.currentTimeMillis()); int year = calendar.get(Calendar.YEAR);

int month = calendar.get(Calendar.MONTH) + 1; int day = calendar.get(Calendar.DAY_OF_MONTH); String rqStr = year + \"-\" + month + \"-\" + day; java.sql.Date thrq = java.sql.Date.valueOf(rqStr);

// \"销售价格\销售数量\销售金额\销售日期\退库金额\退库日期\经办人\" for (int i = 0; i < jTable2.getRowCount(); i++) { if (jTable1.getValueAt(i, 6) == null) {

JOptionPane.showMessageDialog(null, \"退库金额不允许为空,请录入\\"系统提示\ return; }

// \"销售流水号\药品编号\销售价格\销售数量\销售金额\销售日期\退库数量\退库金额\退库日期\经办人\" float xsje, thje;

xsje = Float.parseFloat(String.valueOf(jTable2.getValueAt(i, 4))); thje = Float.parseFloat(String.valueOf(jTable2.getValueAt(i, 7))); if (thje != xsje) {

JOptionPane.showMessageDialog(null, \"退还金额【\" + thje + \"】必须等于销售金额【\" + xsje + \"】,请修改!!!\系统提示\ return; }

5.3.7 入库明细查询模块设计

这个模块主要是对前面药品采购进行查询,用户可以根据各种参数进行有效的查询,按照不能的参数进行组合查询。入库明细查询模块用到的主要技术是为控件绘制边框。BorderFactory这个类可以获取到Border这个类型对象。这个类型对象主要是用来绘制边框。这个模块使用到的是线性边框,可以调用

40

基于Java的医药销售管理系统的设计与实现

createLineBorder()方法。这个方法的声明如下:

Public static Border createLineBorder(Color color, int thickness);

在获得Border对象后, 要为这个控件设置边框,可以用setBorder()方法来设置。这个方法的声明: public void setBorder(Border border); 用户点击业务查询下的入库明细,可以进入这个查询模块。这个模块的运行结果图,如图5-18所示。

图5-18 入库明细查询模块

具体重要代码如下:

public void jByes_actionPerformed(ActionEvent e) {

if (jCheckBox1.isSelected()) {

if (jTvalue.getText().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"请输入查询数值!!\\"提示\JOptionPane.ERROR_MESSAGE);

jTvalue.requestFocus(); return; } }

String[] tname = { \"销售单据号\药品编号\销售单价\销售数量\销售金额\销售日期\" };

java.util.Vector vname = new java.util.Vector(); for (int i = 0; i < tname.length; i++) {

41

基于Java的医药销售管理系统的设计与实现

vname.addElement(tname[i]);

}

DefaultTableModel tModel = null;

tModel = new DefaultTableModel(vname, 0); jTable1.setModel(tModel);

String whereStr = null, queryStr = null;

if (jCheckBox1.isSelected() && !jCheckBox2.isSelected()) { if (_ysfIndex == 0) {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '%\" + jTvalue.getText().trim() + \"%'\"; } else {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '\" + jTvalue.getText().trim() + \"'\"; }

} else if (jCheckBox1.isSelected() && jCheckBox2.isSelected()) { java.sql.Date date1, date2; try {

date1 = java.sql.Date.valueOf(jFormattedTextField1.getText().trim()); date2 = java.sql.Date.valueOf(jFormattedTextField2.getText().trim()); System.out.println(\"date1 = \" + date1 + \"; date2 = \" + date2); jFormattedTextField1.setText(String.valueOf(date1)); jFormattedTextField2.setText(String.valueOf(date2)); if (date1.after(date2)) {

JOptionPane.showMessageDialog(null, \"输入的起始日期不能小于终止日期\系统提示\ return; }

} catch (NumberFormatException formate) {

JOptionPane.showMessageDialog(null, \"输入的日期有误\\n\" + formate.getMessage(), \"系统提示\ return; }

if (_ysfIndex == 0) {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '%\" + jTvalue.getText().trim() + \"%' and xsrq >= '\" + date1 + \"' and xsrq <= '\" + date2 + \"'\"; } else {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '\" + jTvalue.getText().trim() + \"' and xsrq >= '\" + date1 + \"' and xsrq <= '\" + date2 + \"'\"; }

} else if (!jCheckBox1.isSelected() && jCheckBox2.isSelected()) {

42

基于Java的医药销售管理系统的设计与实现

java.sql.Date date1, date2;

try {

date1 = java.sql.Date.valueOf(jFormattedTextField1.getText().trim()); date2 = java.sql.Date.valueOf(jFormattedTextField2.getText().trim()); System.out.println(\"date1 = \" + date1 + \"; date2 = \" + date2); jFormattedTextField1.setText(String.valueOf(date1)); jFormattedTextField2.setText(String.valueOf(date2)); if (date1.after(date2)) {

JOptionPane.showMessageDialog(null, \"输入的起始日期不能小于终止日期\系统提示\ return; }

} catch (NumberFormatException formate) {

JOptionPane.showMessageDialog(null, \"输入的日期有误\\n\" + formate.getMessage(), \"系统提示\ return; }

whereStr = \" xsrq >= '\" + date1 + \"' and xsrq <= '\" + date2 + \"'\" } else if (!jCheckBox1.isSelected() && !jCheckBox2.isSelected()) { return; }

queryStr = \" from SellDetaile where \" + whereStr + \"and thsts='F'\";

List list = com.zhangxiang.dao.AdapterDao.QueryObject(queryStr); if (list.size() <= 0) {

JOptionPane.showMessageDialog(null, \"没有找到满足条件的数据!!\系统提示\ return; }

public void jByes_actionPerformed(ActionEvent e) { if (jCheckBox1.isSelected()) {

if (jTvalue.getText().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"请输入查询数值!!\\"提示\JOptionPane.ERROR_MESSAGE);

jTvalue.requestFocus(); return; } }

String[] tname = { \"销售单据号\药品编号\销售单价\销售数量\销售金额\销售日期\" };

java.util.Vector vname = new java.util.Vector(); for (int i = 0; i < tname.length; i++) { vname.addElement(tname[i]); }

43

基于Java的医药销售管理系统的设计与实现

DefaultTableModel tModel = null;

tModel = new DefaultTableModel(vname, 0); jTable1.setModel(tModel);

String whereStr = null, queryStr = null;

if (jCheckBox1.isSelected() && !jCheckBox2.isSelected()) { if (_ysfIndex == 0) {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '%\" + jTvalue.getText().trim() + \"%'\"; } else {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '\" + jTvalue.getText().trim() + \"'\"; }

} else if (jCheckBox1.isSelected() && jCheckBox2.isSelected()) { java.sql.Date date1, date2; try {

date1 = java.sql.Date.valueOf(jFormattedTextField1.getText().trim()); date2 = java.sql.Date.valueOf(jFormattedTextField2.getText().trim()); System.out.println(\"date1 = \" + date1 + \"; date2 = \" + date2); jFormattedTextField1.setText(String.valueOf(date1)); jFormattedTextField2.setText(String.valueOf(date2)); if (date1.after(date2)) {

JOptionPane.showMessageDialog(null, \"输入的起始日期不能小于终止日期\系统提示\ return; }

} catch (NumberFormatException formate) {

JOptionPane.showMessageDialog(null, \"输入的日期有误\\n\" + formate.getMessage(), \"系统提示\ return; }

if (_ysfIndex == 0) {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '%\" + jTvalue.getText().trim() + \"%' and xsrq >= '\" + date1 + \"' and xsrq <= '\" + date2 + \"'\"; } else {

whereStr = name[_idIndex] + \" \" + jCysf.getSelectedItem() + \" '\" + jTvalue.getText().trim() + \"' and xsrq >= '\" + date1 + \"' and xsrq <= '\" + date2 + \"'\"; }

} else if (!jCheckBox1.isSelected() && jCheckBox2.isSelected()) { java.sql.Date date1, date2; try{

date1=java.sql.Date.valueOf(jFormattedTextField1.getText().trim()); date2=java.sql.Date.valueOf(jFormattedTextField2.getText().trim());

44

基于Java的医药销售管理系统的设计与实现

System.out.println(\"date1 = \" + date1 + \"; date2 = \" + date2);

jFormattedTextField1.setText(String.valueOf(date1)); jFormattedTextField2.setText(String.valueOf(date2)); if (date1.after(date2)) {

JOptionPane.showMessageDialog(null, \"输入的起始日期不能小于终止日期\系统提示\ return; }

} catch (NumberFormatException formate) {

JOptionPane.showMessageDialog(null, \"输入的日期有误\\n\" + formate.getMessage(), \"系统提示\ return; }

whereStr = \" xsrq >= '\" + date1 + \"' and xsrq <= '\" + date2 + \"'\"; } else if (!jCheckBox1.isSelected() && !jCheckBox2.isSelected()) { return; }

queryStr = \" from SellDetaile where \" + whereStr + \"and thsts='F'\"; List list = com.zhangxiang.dao.AdapterDao.QueryObject(queryStr); if (list.size() <= 0) {

JOptionPane.showMessageDialog(null, \"没有找到满足条件的数据!!\系统提示\ return; }

5.3.8 用户模块设计

这个模块主要功能包括添加用户信息,和修改用户信息。这个模块使用的主要技术是比较char类型数组。由于密码框控件,要保证安全性,可以使用char类型的数组。getPassword()这个方法就提供了char类型数组,char类型数组遍历的话,有很麻烦。所以先将char类型的数组转换成String类型。这样可以通过Sting中的equal方法来比较,这样就可以判定密码是否相同。这个模块的程序运行结果图,如图5-19所示。

45

基于Java的医药销售管理系统的设计与实现

图5-19 用户模块

具体重要代码如下:

public void jBsave_actionPerformed(ActionEvent actionEvent) {

int result = JOptionPane.showOptionDialog(null, \"是否增加新的用户信息?\系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.NO_OPTION) return;

if (jTid.getText().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"用户ID不允许为空,请录入\系统提示\ jTid.requestFocus(); return; }

if (jTname.getText().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"用户姓名不允许为空,请录入\\"系统提示\ jTname.requestFocus(); return; }

if (jPass.getPassword().toString().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"用户口令不允许为空,请录入\\"系统提示\

46

基于Java的医药销售管理系统的设计与实现

jPass.requestFocus();

return; }

if (jPassconf.getPassword().toString().trim().length() <= 0) {

JOptionPane.showMessageDialog(null, \"重复口令不允许为空,请录入\\"系统提示\ jPassconf.requestFocus(); return; }

String password, password1;

password = new String(jPass.getPassword());

password1 = new String(jPassconf.getPassword());

if (!(password.equals(password1))) {

JOptionPane.showMessageDialog(null, \"输入的两次口令不一致,请重新录入\\"系统提示\ jPassconf.requestFocus(); return; }

String id, user, pass, passconf; id = jTid.getText().trim();

user = jTname.getText().trim();

pass = String.valueOf(jPass.getPassword());

passconf = String.valueOf(jPassconf.getPassword());

com.zhangxiang.model.UserName objuser = new com.zhangxiang.model.UserName(); objuser.setUserid(id);

objuser.setUsername(user); objuser.setPassword(pass);

objuser.setRepassword(passconf);

com.zhangxiang.dao.AdapterDao.InsertUserName(objuser);

JOptionPane.showMessageDialog(null, \"该用户添加成功\\"系统提示\JOptionPane.INFORMATION_MESSAGE); }

public void jBexit_actionPerformed(ActionEvent actionEvent) {

javax.swing.DefaultDesktopManager manger = new DefaultDesktopManager();

int result = JOptionPane.showOptionDialog(null, \"是否退出用户增加模块?\系统提示\JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {

\"是\否\" }, \"否\");

if (result == JOptionPane.YES_OPTION) { manger.closeFrame(this); }

47

基于Java的医药销售管理系统的设计与实现

}

public void jTid_keyPressed(KeyEvent keyEvent) {

if (keyEvent.getKeyCode() == KeyEvent.VK_ENTER) { String userid = jTid.getText().trim();

String queryStr = \" from UserName where userid = '\" + userid + \"'\";

java.util.List list = com.zhangxiang.dao.AdapterDao.QueryObject(queryStr); java.util.Iterator iterator = list.iterator(); if (iterator.hasNext()) {

JOptionPane.showMessageDialog(null, \"用户ID已经存在请重新输入!!\\"系统提示\ jTid.requestFocus(); return; }

jTname.requestFocus(); } } }

class JF_user_add_jTid_keyAdapter extends KeyAdapter { private JF_user_add adaptee;

JF_user_add_jTid_keyAdapter(JF_user_add adaptee) { this.adaptee = adaptee; }

@Override

public void keyPressed(KeyEvent keyEvent) { adaptee.jTid_keyPressed(keyEvent); } }

5.4 本章总结

本章详细的介绍了系统各个模块的实现过程,首先确定系统共分为六大模块。其次,根据系统功能要求,进行了数据库的设计。最后对如何实现进行了描述。

48

基于Java的医药销售管理系统的设计与实现

第6章 系统测试

6.1 测试目的

在系统完成后,还没应用于实战前,进行系统的测试时非常重要的,也是系统开发的最后一个重要的环节。系统测试的主要目的是对此开发系统的体验和检查,以免在应用时造成不必要的麻烦以及带来经济上的损失。因此,在系统应用前,进行系统的测试是不可缺少的一环。具体是要对系统的登录和各个功能的实现要一一认真地进行测试。

6.2 测试结果

6.2.1操作员登录测试

输入账户admin,密码admin。如图6-1所示。

图6-1 系统登录界面

登录成功,显示如图6-2所示。

49

基于Java的医药销售管理系统的设计与实现

图6-2 进入系统界面

如果输入错误的账户和密码,如图6-3所示。

图6-3 错误登录的提示

6.2.2 药品采购测试

打开药品采购的窗口,点登记,再填写经办人,选择药品编号,再填写购买数量,最后点存盘。结果如图6-4所示。

50

基于Java的医药销售管理系统的设计与实现

图6-4 药品采购录入成功

6.2.3 药品销售测试

打开药品销售的窗口,点登记,再填写经办人,选择药品编号,再填写销售数量,最后点存盘。结果如图6-5所示。

图6-5 药品销售登记成功

51

基于Java的医药销售管理系统的设计与实现

6.2.4 库存盘点测试

打开库存盘点窗口,点查询库存如图6-6所示。

图6-6 库存盘点测试

6.3 本章总结

本章先是说明了系统测试的重要性和目的,接着采用黑盒测试法对系统进行全面的测试,以上只是列举了一些主要功能测试的结果,其他的测试也是正常的。

52

基于Java的医药销售管理系统的设计与实现

第7章 系统总结与展望

7.1 总结

医药管理系统是针对医药的进、存、销的需要进行开发的。本系统已基本实现了药品采购、药品销售及库存盘点等功能,还提供了对客户、药品、供应商的录入和查询,基本满足的用户的需。但是,系统还是处于一种不断改善的状态,可以参考和借鉴别的更好的系统进行进一步的完善,达到一种更方便、更实用的系统。

7.2 展望

本系统是这半年以来的努力的成果,这期间通过不断的查阅各种资料和借鉴别人的作品。系统已经实现了基本信息录入、业务管理、业务查询、药品采购和销售等功能,基本上能满足用户的需求。系统还存在一些不足和缺陷,比如不能扫条形码、不能进行联网远程管理等。希望本系统能得到各个大、中、小型的医药机构的认可和使用,不枉我这半年努力的汗水。如果还有那些不足的地方,希望大家能够提出您们宝贵的意见。我将进一步完善它,供您们更好的使用。

53

基于Java的医药销售管理系统的设计与实现

参考文献

[1] 于鹏.网页设计语言教程[M].北京:电子工业出版社,2011.6. [2] 朱平.Java程序设计教学[J].湖北教育学院学报,2010.7(2):18-32. [3] 于阁.基于JSP技术的网上书店系统设计与实现[D].大连:大连理工学,2009:15-24.

[4] 牛杰.基于Web的数据库访问技术研究及应用[J].东南学,2007.2(3):56-59 [5] 靳红霞.JSP应用的安全问题的探讨[J].电脑知识与技术,2010.14(5): 13-14 [6] 李长海.浅析数据库设计[J].数字技术与应用,2010.08(8):45-49

[7] 刘晓华,,周慧贞.JSP应用开发详解[M].北京:电子工业出社,2007:100-103 [8] 向润.黑盒测试方法探讨[J].教育技术导刊,2009.8(1):23-26. [9] 陈骏.软件测试技术研究.民营科技,2009.14(1):16-19.

[10] 王炎.浅析JSP技术在动态网页技术中的应用[J].商场现代化, 2009.9(7):120-140.

[11] 张桂珠 刘丽 陈爱国 Java面向对象程序设计[M](第2版)北京邮电大学出版社

[12] 毕广吉.Java程序设计实例教程[M]. 北京:冶金工业出版社,2007年 [13] 温谦.HTML+CSS网页设计与布局从入门到精通[M]. 北京:人民邮电出版社, 2008.08

[14] 李巧君.浅析数据库设计的一般流程和原则[J].技术与市场,2010.15(9):10-11 [15] Juan Lipson Vuong.A semantics-based routing scheme for grid resource discovery[M]. First International Conference on E-Science,2005:58.70

[16]James w.Cooper Pattens In Java[M] Published by Tom Wesley Professional 2007. [17] Evelina Lamma,Paola Mello,Fabrizio Riguzzi. A System for Measuring Function Points from an ER-DFD Specification[J]. The Computer Journal. 2004.Vol.3(12):36-38.

[18] James Goodwill.Mastering Jakarta Struts[M]. New York, NY USA:John Wiley & Sons, Inc.,2003:528

[19] 金玉明.精通SQL Server 2005完全自学手册[M]. 北京:中国铁道出版社,2011.10.

54

基于Java的医药销售管理系统的设计与实现

[20] 王哲.浅析Ajax技术[J].吉林省经济管理干部学院报,2010,8(4):56-58 [21] 孙更新,宾晟,宫生文。Java程序开发大全[M]。北京:中国铁道出版社,2010.08.

[22] 戴 著,付勇. 网络体系结构[M].北京:清华大学出版社,2009.06.

55

基于Java的医药销售管理系统的设计与实现

56

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务