1、摘 要药品管理系统是现代化在线医药管理必不可少的基础设施与技术支撑环境。本系统前台采用MyEclipse开发,后台采用MySql 作为数据库开发工具,这些技术目前相对比较成熟,方便产品的维护。本系统可以实现用户在线注册、登录、修改密码,用户进行药品添加和管理、供应商的添加和管理,还可查询供应商提供的药品清单。JSP(Java Server Pages)是由Sun Micrososystems公司倡导的、许多公司参与的一起建立的一种动态网页技术标准,JSP技术是在Servlet技术基础上发展起来的,它在飞速发展过程中,现在已经成为Java服务器编程的重要组成部分。虽然它未成型,但是它必然将和J2
2、EE一起发展。 MySql是一种高效的关系数据库系统,它与Windows NT/2000及Windows 9x等操作系统紧密集成。这种安排使MySql能充分利用操作系统所提供的特性。对于今天复杂的客户/服务器系统来说,MySql是一个很好的选择。关键字:药品管理系统;Java;MySql;AbstractThe medical administrative system is the modernized online medicine management system, which is the essential infrastructure and technological back
3、-up environment. This systematic front desk adopts DreamWeaver development, and the backstage supporter adopts MySql as the database developing instrument. These technologies are relative mature at present, facilitate the maintenance of the products. This system can realize users online registration
4、 , log-in , revision of personal information , selection and order of medicines, examination of the detailed information of medicines , submittal of the order information, maintenance and management of medicines, classification of the medicines ,users information and order information online.JSP (Ja
5、va Server Pages ) is advocated by Sun Micrososystems Company, a kind of dynamic webpage technical standard of setting-up together which a lot of companies participate in. JSP technology is developed on Servlet technological foundation. In the course of developing at full speed, it have already becom
6、e the important component of server programming of Java now. Though it doest shape, it must develop with J2EE.MySql is an efficient relation database system. It is close integrated with Windows 2000/NT and Windows 9X OS. MySql can utilize fully the characteristics provided by OS .MySql is a good cho
7、ice for the complicated Cilent/Server systems nowaday. Key Word: Medical Administrative System;JSP;MySql目 录摘 要1ABSTRACT2目 录3第1章 开发的目的和意义4第2章 需求分析4 2.1 系统工作流程分析4 2.2 系统实现目标4第3章 总体设计5 3.1 系统设计的总体思想5 3.2 系统设计的体系和结构5 3.2.1 系统的设计体系5 3.2.2 系统的结构架构6 3.3 系统的功能和结构框图6 3.3.1 系统功能模块6 3.3.2 系统结构框图:7 3.4 开发平台和开发工
8、具7第4章 开发平台和工具的简介7 4.1 JSP的简要说明7 4.2 MySql的简要说明8 4.3 系统配置过程8 4.4 配置关键性问题的解决9 4.4.1 Servlet和JSP 性能调整10 4.4.2 Mysql与JSP网页中文乱码问题10第5章 系统的详细设计10 5.1 数据库的实现11 5.1.1 数据库关系模式的设计11 5.1.2 数据库的具体实现(表结构)11 5.2 数据库的连接12 5.3 功能模块的详细设计13 5.3.1 注册功能模块13 5.3.2 登录功能模块145.3.3 添加药品功能模块155.3.4 药品管理功能模块165.3.5 添加供应商功能模块1
9、75.3.6 供应商管理功能模块185.3.7 修改密码功能模块205.3.8 查询供应商提供的药品功能模块215.3.9 主界面23第6章 总 结24致 谢25参考文献26第1章 开发的目的和意义 开发软件的一个目的是针对目前普遍的药品管理系统存在的功能不全,操作复杂,系统要求高等一系列问题。该管理系统采用电子商务设计模式,可靠,方便,并且功能齐全。当然对该软件的态度是渴望获得显著的社会效益。开发软件的另一个目的是使其具有强大的实用价值,即它可以满足中小型医药公司的管理需要。随着小型医药企业规模的扩大,手工工作已经不能满足业务上的需求。而该药品管理系统的实施,能集中处理药品的进销存业务,管理
10、好企业的应收应付账目,为企业的调整发展创造一个新的条件。随着我国市场经济的蓬勃发展和人们对医药产品需求的迅速增加,医药行业正处于一个高速发展的时期。行业的快速发展必然导致竞争的加剧,要想在激烈的市场竞争中谋求发展,客观上要求企业必须加强内部管理,提高运营效率。另外,由于医药产品种类繁多、销售模式特殊、业务最大,单凭手工记帐已很难适应工作的需要。医药作为一个关系到人们健康的特殊行业,国家对此又有一些不同于其他行业的管理政策,这些都加大了管理的难度。如何尽快建立和完善现代企业的信息化管理机制问题,已成为医药企业发展的关键所在。而方便、安全、快捷的医药管理软件系统正是在这样的背景下发展起来的。 这种
11、管理软件对硬件的要求很低,一般有一个比较简单的服务器与PC机组成的网络即可,再加上使用比较廉价、性能不错的软件,这样就可以以较低的成本来实现一个足够使用的功能,而这种模式也正满足了那种中小型医药公司的要求。但是目前对这种管理软件的开发还处于一种比较原始的阶段。开发者往往都是出于资金和时间的顾虑使用比较陈旧的技术,而且各为己见,并且很少涉及网络。可是当今是一个网络化的社会,单机版的管理软件多如牛毛,去开发一个类似的软件无疑是一种在时间上、精神上和资源上的极大浪费。所以为这种有需要的中小型企业开发一种基于网络的医药管理软件是非常有实用价值的。第2章 需求分析2.1 系统工作流程分析 传统的医药管理
12、模式是手工记帐的,但由于目前医药产品种类繁多、销售模式特殊、业务量大,单凭手工记帐已经很难适应工作的需要。根据目前医药企业的实际需求,系统应实现的具体功能如下:首先是客户界面,客户可以通过网络进行注册认证,然后可以通过身份登录后进行药品添加和管理,供应商的添加和管理,查询供应商提供的药品。其次是管理界面,管理员登录后可以对药品信息进行增加和删除操作,可以对供应商信息进行添加、删除操作,可以对客户信息进行相关维护等等。2.2 系统实现目标(1) 系统界面友好,操作简单(2) 可随时掌握药品的进销存信息(3) 查询灵活方便,数据安全可靠(4) 从用户需求到售后服务,形成一套严密、科学、完善的管理体
13、系(5) 功能全面,实用性强第3章 总体设计3.1 系统设计的总体思想 页面模块化:把页面中一些常用的部分集成为模块,例如页面的头和尾部,这样设计新的页面时如果重复出现的部分只需要拿现成的模块来组装就可以了。 数据存取技术: 数据库是管理信息系统的核心内容。目前,Web与数据库接口技术有很多,其中JDBC是Java程序连接和存取数据库的应用程序接口,由一组用Java语言编写的类与接口组成,是执行SQL语句的Java API。在本管理信息系统中,采用了 JSP/Servlet+JDBC的技术,即客户端不产生数据库查询命令,客户端上的浏览器通过URL和中间层的Web服务器建立连接。Web服务器主要
14、负责接收本地或远程浏览器的HTTP数据请求,然后中间层的Servlet收到请求后,通过执行程序中的SQL语句,利用JDBC提供的标准API对数据库进行访问和相应的操作处理。Servlet再将查询的数据传给JSP,最后生成标准的JSP页面将结果返回给提出请求的浏览器。这样,不仅将客户端与数据库服务器端分开,同时提高了数据库的访问效率。3.2 系统设计的体系和结构3.2.1 系统的设计体系 目前,在大多数Browser/Server结构的Web应用中,浏览器直接通过HTML或者JSP的形式与用户交互,响应用户的请求。虽然很直观,但是大多数管理信息系统操作的数据量都是惊人的,随着代码的增多会使JSP
15、页面臃肿不堪,Web服务器的负荷过重。因此,在中间层上采用基于模型视图控制器(MVC.Model-View-Controller)的设计模式。Model层用来实现业务逻辑,View层用来显示用户界面,Controller层主要负责View层和Model层之间的控制关系。具体实现时,把Servlet用作应用程序的控制器,把JSP文档作为视图,JavaBeans被用来表示模型。在这种设计模式下,各层次之间的数据传递如下图:Controller (Servlet)View(JSP)Model(JavaBeans)DataBase HTTP请求 获取数据转交 请求 文档输出 更新模型图3-1: 各层次
16、之间的数据传递示意图3.2.2 系统的结构架构 管理信息系统(MIS)是一个由人、计算机等组成的能进行信息的收集、传递、存储、加工和使用的系统。随着科技的发展,信息的膨胀,企业信息化成了企业在竞争中处于不败地位的有效手段之一。而MIS不仅能够及时全面地提供信息和数据,简化统计工作,对不同的管理层次提出不同的报告之外,还能根据过去的数据预测未来的情况。因此,采用何种方法开发出一种兼顾开发效率和运行效率,同时满足分布式事件处理功能的管理信息系统就显得尤为重要。采用三层架构设计,它的工作原理如图:客户机 浏览器http服务器应用程序服务器Servlet容器数据库JDBCservletjsp图3-2:
17、 采用三层架构设计的工作原理示意图 整个管理信息系统采用Browser/Web/DataBase的三层体系结构。Web服务器接受请求,通过应用程序服务器执行一个Java服务器端小程序Servlet并返回其输出,从而实现与客户机进行信息资源的交互。数据库服务器用来存储管理信息系统中所用到的各种数据,数据由数据库管理程序直接录入。系统的客户端只需要一个浏览器即可。相关人员通过浏览器来查询、增加、修改、删除数据,对信息进行管理。3.3 系统的功能和结构框图3.3.1 系统功能模块客户端:l 用户注册、登录l 修改密码管理端:l 药品管理:新增、修改、删除、查看l 供应商管理:新增、查看、修改、删除l
18、 查询供应商提供的药品3.3.2 系统结构框图:药品管理系统客户端管理端数据库用户注册登录修改密码查询供应商提供的药品供应商管理药品管理图3-3: 全局结构示意图3.4 开发平台和开发工具 由于采用JSP架构,系统的功能加强,但其开发平台和开发工具的选择也是非常复杂。如上所述,系统结构采用Jsp/servlet + Javabeans + MySql;具体开发工具:前台页面使用MyEclipse开发,这种工具对JSP的支持比FrontPage好;对于组件Bean的编写和编译用JCreator,方便的提示符和小巧的内存占用是我的首先;Jsp服务器选用TomCat6.0,后台数据库MySql4.0
19、,为了更好地操作数据库,使用EMS Sql Manager 3.0进行windows图形化界面的数据库操作。第4章 开发平台和工具的简介4.1 JSP的简要说明 JSP即Java Server Pages,在电子商务开发上,还可以选择ASP平台。但比较过两者优劣后才决定选择JSP。JSP和ASP技术明显的不同点:开发人员在对两者各自软件体系设计的深入了解的方式不同。JSP技术基于平台和服务器的互相独立,输入支持来自广泛的,专门的,各种工具包,服务器的组件和数据库产品开发商所提供。相比之下,ASP技术主要依赖微软的技术支持。JSP技术依附于一次写入,之后,可以运行在任何具有符合JavaTM语法结
20、构的环境。取而代之过去依附于单一平台或开发商,JSP技术能够运行在任何WEB服务器上并且支持来自多家开发商提供的各种各样工具包。这种基于组件的模式很有效提高应用程序的开发效率,因为这种模式能够使开发人员利用快捷的子组件快速创建模板应用程序,然后再整合一些附加功能以后便可使用。像这样有效的方法在JSP中无处不在,并可将其打包成一个Javabean或一个工业标准化的Javabean组件。 终上所述,JSP继承JAVA一贯的跨平台、易维护的特性,是我开发的首选。4.2 MySql的简要说明 选择一个好的数据库是开发一个系统的前提,当然用MySql也是与其它数据库比较过的。下面列出MySql与其它数据
21、库的全方位对比: 安全性: SQL server 没有获得任何安全证书。 Oracle Server 获得最高认证级别的ISO标准认证。 DB2 获得最高认证级别的ISO标准认证。 MySql 获得最高认证级别的ISO标准认证。 多线程: MySQL是完全多线程化的,每个连接有它自己的线程,这意味着没有线程必须等待另一个线程(除非一个线程正在修改一张表,另外的线程想要存取);而在SQL server中,一旦一个连接被建立了,所有其它线程必须等到第一个线程完成,不管连接正在运行的查询是短的或是长的。 联结: 如果改变一个SELECT中的表的顺序,SQL Server可能变得异常地慢。在基准套件中
22、,比MySQL要慢超过15000倍的时间。这是由于SQL Server缺乏一个联结优化器以便用最佳的顺序排定表。 Perl接口:MySql和SQL Server有基本相同Perl接口,有一些增加的功能。 价格: MySql的免费成为不可取代的优势。 终上所述,MySQL以其极高的性价比成为中小型数据建库的首选,本系统也选用MySql。4.3 系统配置过程 由于JSP架构采用不同公司的软件产品,所以配置的复杂性是肯定的。下面列出其配置详细过程:所需软件:(1) j2sdk-1_4_2-windows-i586.exe (2) jakarta-tomcat-5.0.28.exe(3) mysql-
23、4.0.24-win.zip(mysql有5.0的bate版,不过对其NullPointException出错一直是不能被广泛接受的原因,在本系统下也只能用较为稳定的4.0版本。)(4) MyEclipse_6.5M1.exe(mysql的驱动程序,其中connector采用mysql-connector-java-3.0.8-stable-bin.jar可以正常运行;而在后面一个较新的版本会出现StringOutOfRange错误,用最新的版本又会因为本数据库设计的时间格式已经不支持而不能正常读取,所以版本的选择是非常重要的。)一、 安装j2sdk在Windows下,直接运行下载的j2sdk
24、-1_4_1_01-windows-i586.exe文件,根据安装向导安装到一个目录,例如安装到d:serverj2sdk。1. 配置环境变量:添加CLASSPATH变量./;%CLASSPATH%;D:serverj2sdk1.4.0libdt.jar;d:serverj2sdk1.4.0libtools.jar;2. 添加JAVA_HOME变量,变量值为d:serverj2sdk1.4.03. 在原来的path变量中,添加d:serverj2sdk1.4.0bin,重新启动二、 Tomcat的安装jakarta-tomcat-5.0.28.exe安装文件,设安装目录为d:servertom
25、cat。下面设置环境变量:同jdk的环境变量,添加变量TOMCAT_HOME,值为d:servertomcat;增加变量CATALINA_HOME,值为d:tomcatserver,在path变量中加入d:servertomcatbin。下面启动tomcat,运行tomcat目录下的bin/startup.bat文件就出现tomcat运行控制台,则tomcat安装成功。三、 安装MySQL第一步:解压mysql-4.0.24-win.zip,运行mysql安装文件,把mysql安装到d:servermysql第二步:在环境变量path中加入 d:servermysqlbin第三步:进入d:se
26、rvermysqlbin目录,运行winmysqladmin,刚会出现对话框,设置mysql用户密码。第四步:进入dos,进入mysql/bin下,运行以下命令打开mysqlmysqld-nt standalone,则mysql开启四、 安装MySQL的驱动类jdbc解开jdbc驱动包,把里面的com文件夹复制到jsp相应的位置,可以是tomcat的根目录common/classes文件夹下,也可以是jsp网站class类WEB-INF/class/下。当加载驱动程序时,以便能找到相关的类,或者把jdbc包的路径加入到classpath变量中。4.4 配置关键性问题的解决 上述配置正确后,只是
27、可以成功连接,但还有一些需要解决的问题才能正常运行JSP程序。4.4.1 Servlet和JSP 性能调整1、调整方法1:禁止servlet和jsp的自动重载为了节约开发时间,在开发阶段Servlet/JSP容器提供自动重载功能,方便在修改Servlet/JSP后不用重新启动服务。可是,在生产环境下面,却是占用大量开销,因为进行了没有必要的重新载入的操作,所以带来了很怀的性能影响。同时,在部分类载入,部分为载入的时候也可能带来各种奇怪的冲突。因此在J2EE的生产环境下关闭自动载入功能可以得到更好的性能。2、 调整方法2:控制HttpSession在默认情况下,不要在jsp页面中创建HttpSe
28、ssions对象,jsp页面默认会自动创建HttpSessions,如果jsp页面中不需要HttpSessions,为了节省一些性能,使用下面的页面指令避免自动创建HttpSessions对象: 。 3、调整方法3:选择正确的包含机制 在jsp中有两种方法使用包含文件:包含指令()和包含动作()。包含指令在转换的过程中包含文件内容;也就是说,在一个页面转换成一个servlet的时候。包含动作在请求处理的阶段包含文件内容;也就是说,在一个用户请求页面的时候。包含指令快于包含动作。因此,除非被包含的内容经常变化,应该使用包含指令提升性能。 4、调整方法4:选择正确的范围在使用useBean动作 J
29、sp页面的一个强大功能就是在jsp中交互使用JavaBeans组件。通过使用动作标签,JavaBeans可以被直接的嵌入jsp页面中。语法如下: 范围属性指定了bean的作用范围。它的默认值是page。可以根据系统要求选择正确的范围。否则它会影响到应用系统的性能。 4.4.2 Mysql与JSP网页中文乱码问题 以GBK字符集建库建表: 用EMS来建mysql的数据库及表,建库时,从EMS菜单中选create Database.新建一个数据库,CharacterSet选gbk_bin;后面建表时,也要选择同样的字符集。 连接数据库的URL后加参数: 假设新建的数据库是testdb,那么连接数据
30、库的url应该为: jdbc:mysql:/localhost:3306/testdb?useUnicode=true&characterEncoding=gbk 每个JSP页面都要声明该中文字符集: 在每个JSP页面的最上面都加上一句: ,这样才能保证JSP页面中的中文显示正常。 上述都是在实际进行JSP页面配置时遇到的问题,JSP配置的复杂性是由于各个版本开发的不一致造成的,在调试页面的同时也是对自己各方面知识水平的极大挑战。第5章 系统的详细设计5.1 数据库的实现5.1.1 数据库关系模式的设计l 药品信息(药品编号,药品数量,药品名称,药品单价,供应商编号)l 供应商信息(供应商编号
31、,供应商名字,联系电话)l 供应商_药品信息(药品编号,供应商编号)l 用户信息(用户编号,用户名,密码)5.1.2 数据库的具体实现(表结构)药品信息列表:表5-1:药品信息列表SQL语句:CREATE TABLE medicine ( id int(11) NOT NULL, num varchar(32) default NULL, name varchar(64) default NULL, price double default NULL, supplier_id int(11) default NULL, PRIMARY KEY (id) ENGINE=MyISAM DEFAUL
32、T CHARSET=utf8供应商信息列表:表5-2:药品信息列表SQL语句:CREATE TABLE supplier ( id int(11) NOT NULL, name varchar(64) default NULL, phone varchar(32) default NULL, PRIMARY KEY (id) ENGINE=MyISAM DEFAULT CHARSET=utf8药品_供应商信息表:表5-3:药品_供应商信息列表SQL语句:CREATE TABLE medicine_supplier ( medicine_id int(11) NOT NULL, supplier
33、_id int(11) NOT NULL, PRIMARY KEY (medicine_id,supplier_id) ENGINE=MyISAM DEFAULT CHARSET=utf8用户信息表:表5-4:用户信息表SQL语句: CREATE TABLE admin ( id int(11) NOT NULL, name varchar(64) default NULL, pwd varchar(64) default NULL, PRIMARY KEY (id) ENGINE=MyISAM DEFAULT CHARSET=utf85.2 数据库的连接 下面首先介绍数据库连接Bean的编写
34、,即util.DataBase类,这是一个公共类,其它类如果要连接数据库,只要构造这个类的对象就可以了。附主要代码和注释如下:package mms.util;/*注释 *数据库连接专用包 *Company: med shop online * by :zhourong * version 1.0 */import java.sql.*;public class DataBase public Connection conn; public Statement stmt; public ResultSet rs=null; public String sqlStr=; public DataB
35、ase() this.connect(); public boolean connect() try/注册驱动程序 Class.forName(org.gjt.mm.mysql.Driver).newInstance();/连接字符串,有连接数据库的IP,用户名,密码以及编码格式等 String url =jdbc:mysql:/127.0.0.1/MedStore?user=root&useUnicode=true&characterEncoding=gbk; conn=DriverManager.getConnection(url); stmt = conn.createStatement
36、 (); catch(Exception ee) System.out.println(connect db error:+ee.getMessage(); return false; return true; public static void main(String args) try DataBase db = new DataBase(); db.connect(); catch(Exception e) e.printStackTrace(); 5.3 功能模块的详细设计5.3.1 注册功能模块用于实现用户注册功能。 function sub() var u = validateU
37、serInfo(); if(u = false) return false; document.forms0.submit(); function validateUserInfo() var name = document.getElementById(name); if(name.value = ) alert(用户帐号不能为空!); name.focus(); return false; var pwd1 = document.getElementById(pwd1);if(pwd1.value=)alert(输入密码不能为空!)pwd1.focus();return false; va
38、r pwd2 = document.getElementById(pwd2);if(pwd2.value=)alert(确认密码不能为空!)pwd2.focus();return false;if(pwd1.value!=pwd2.value) alert(两次密码输入不一致!); return false; 5.3.2 登录功能模块 function sub() var u = validateUserInfo(); if(u = false) return false; document.forms0.submit(); function validateUserInfo() var na
39、me = document.getElementById(name); if(name.value = ) alert(用户帐号不能为空!); name.focus(); return false; var pwd = document.getElementById(pwd);if(pwd.value=)alert(输入密码不能为空!)pwd.focus();return false; 5.3.3 添加药品功能模块用于完成对药品的添加。 function sub() var u = validate(); if(u = false) return false; document.forms0.
40、submit(); function validate()var num = document.getElementById(num);if(num.value=)alert(药品编号不能为空!)num.focus();return false; var name = document.getElementById(name); if(name.value = ) alert(药品名称不能为空!); name.focus(); return false; var price = document.getElementById(price); if(price.value=) alert(药品价
41、格不能为空!); price.focus(); return false; 5.3.4 药品管理功能模块用于实现对药品的管理。 function sub() var u = validate(); if(u = false) return false; document.forms1.submit(); function validate()var num = document.getElementById(num);if(num.value=)alert(药品编号不能为空!)num.focus();return false; var name = document.getElementById(name); if(name.value = ) alert(药品名称不能为空!); name.focus(); return false; var price = document.getElementById(price); if(price.value=) alert(药品价格不能为空!); price.focus(); return false;