药品进销存管理软件设计报告_第1页
药品进销存管理软件设计报告_第2页
药品进销存管理软件设计报告_第3页
药品进销存管理软件设计报告_第4页
药品进销存管理软件设计报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、药品进销存管理软件设计报告 孔丹药品进销存管理软件设计报告学校: 院系:学号:姓名:指导教师:摘要:本文介绍了用myeclipse 6.5开发软件开发药品进销存管理系统的过程。设计主要针对药品厂家对产品进行销售管理使用,能够实现药品进货、销售、库存查询、出单记录、进销存明细表、用户操作等。提高代理商的管理和服务水平,将业务从纯人工操作转换成人工与计算机共同处理,从而降低了人工劳动并增加了信息的准确性。 关键词:药品 进销存 myeclipse 6.5一、 系统需求1、 功能需求系统至少应具有以下功能:(1) 用户添加和删除:系统能够根据软件使用用户的变动,进行用户管理,包括用户的添加和删除,提

2、高系统的安全性。(2) 修改密码:系统能够根据用户的需要修改密码,防止他人恶意篡改,引起重大损失,提高系统的安全性。(3) 库存浏览:系统能根据需要显示库存,方便用户根据库存进行药品的进销。防止库存的不足以及根据实际情况酌情销售等。(4) 修改药品信息:系统能够修改药品属性,如药品剂型,产地,单位,数量,备注等。(5) 添加货物:系统可以根据客户需要进货,将货物存入库存数据库中。(6) 出货售出:系统能根据客户需求进行药品的销售,并能做好相关的记录。(7) 统计信息:系统能够根据进货、销售操作,查询相关进货、销售记录信息,根据用户的条件输入,查询出相应条件下的金额统计。(8) 帮助文件:系统能

3、够提供用户帮助文件信息。2、 非功能需求(1) 时间特性要求系统应具有比较快的响应速度,保证用户能快速进行各种操作。(2) 灵活性系统应具有较高的灵活性,当用户的需求发生变化时,通过较小的代价即可使系统快速适应这些变化。(3) 故障处理要求系统应详细考虑各种可能出现的错误,包括用户的操作错误,数据处理的错误,界面更新错误等,对于每一种错误给出详细原因。并且保证不出现任何导致用户数据丢失的错误,如强行关机,强行退出系统,系统当机,死机等。(4) 通用性系统能够在所有流行的技术环境下运行,支持不同平台系统,具有较强的可扩展性,可补充性。(5) 安全性库存信息的存储需要设计一种好的策略,以保证系统的

4、安全性,例如数据库存储的安全性比文件方式要好一些,密码的设置及修改等也对安全性提出较高的要求。二、 系统功能介绍及使用说明在使用系统之前应确保oracle数据库服务已打开。1. 登陆系统输入正确的用户名和密码即可,同时要求密码的位数不得少于6位。初始用户名和密码是admin和123456。用户信息存储在数据库中。2. 修改密码:进入系统后,可点击界面右上角的“修改密码”进行密码的修改,在修改密码页面要保证新密码和确认密码一致。点击“确定”之后,弹出密码修改成功对话框。3. 导航条的使用界面上方的导航条显示了基本功能模块,鼠标移动至菜单项(无需点击),则会自动弹出子模块菜单项。点击子模块菜单项即

5、可进行相应功能的操作。(1) 进货管理点击“库存浏览”子菜单项,显示库存列表,每一条记录之后显示相应可进行的操作修改和添加,即修改库存药品的属性信息以及添加相应药品。点击“添加新品种”菜单项,显示进货页面,用户根据实际情况进行药品信息的填写。信息填写无误后,点击“添加”按钮,弹出添加成功对话框(编号是自动生成的)。(2) 销售管理点击“库存浏览”菜单项,显示库存列表,每一条记录之后显示操作售出。点击“售出”链接,显示售出页面,根据已显示信息,确认无误后,填写售出数量以及销售额,点击“售出”按钮后,弹出成功售出的对话框。(3) 统计该功能主要根据用户的条件选择、填写,显示相应的进货和销售记录,并

6、进行金额统计。销售统计与进货统计类似,在此不进行赘述。(4) 用户管理当系统使用者发生变更时,可以通过用户管理修改用户信息,提高系统的安全性,并且设计了页面验证功能,保证数据的完整性。4. 退出系统点击界面右上角“退出系统”,即返回登陆页面。三、 系统环境1 系统开发环境系统在windowsxp sp2系统上用myeclipse 6.5开发。2 系统运行环境(1)硬件设备l 处理器:intel pentium 166 mx或更高l 内存:32mb以上l 硬盘:200mb以上l 显示设备:支持256色、640*480以上分辨率的显示卡和显示器l 输入设备:鼠标、键盘l 输出设备:打印机(2)软件

7、设备l 操作系统:windows 98/me/2x/xp/vista/7l myeclipse 6.0l oracle11g 数据库 plsql连接数据库四、 系统开发日程及顺序系统开发时间为2011年9月1日至9月15日。具体见表1。星期日期任务(四)91看综合课程设计要求,明确选题,针对选题进行需求分析(五)92根据选题继续进行需求分析(六)93根据需求进行页面原型设计,看书和笔记(日)94继续进行页面原型设计,看书和笔记(一)95针对需求设计数据库(二)96搭建程序架构(三)97完成用户管理模块,包括页面设计以及包的设计(四)98完善用户管理模块,提高安全性能(五)99完成进货模块,除了

8、打印模块,基本完成(六)910继续完善进货模块(日)911完成销售模块,除了打印功能,基本实现(一)912继续完善销售模块(二)913设计帮助模块(三)914学习打印模块的设计以及分页功能的设计(四)915完成打印模块以及分页功能表1:系统开发日程五、 系统开发 下面详细介绍系统开发的技术与方法。1. 系统总体设计图1.1 具体功能模块系统采用面向对象分析,面向对象设计,面向对象开发的思想,采用支持面向对象的开发工具。(1) 页面原型设计根据系统功能需求设计页面。采用jsp技术进行界面的设计。 css、images、js、my97datepicker文件夹主要用于页面框架、格式等的设计以及相关

9、引用控件的设计,部分页面采用jquery验证方式。my97datepiicker是日历控件,利用网上资源,学习调用方式,直接在程序中调用,方便快捷。(2) 架构设计根据页面以及功能需要,搭建系统框架。采用servlet+jsp的设计,故建立所需要的包。servlet是一种服务器端的java应用程序,具有独立于平台和协议的特性,可以生成动态的web页面。 它担当客户请求(web浏览器或其他http客户程序)与服务器响应(http服务器上的数据库或应用程序)的中间层。biz包主要用于servlet包和dao包的接口,同时也可担任验证功能实现模块的接口。service层是面向功能的,一个个功能模块比

10、如说银行登记并完成一次存款,ui要把请求给service层,然后service曾将这一个case分解成许多步骤调用底层的实现完成这次存款,dao就是下面那层。entity实体类包主要帮助将数据库中记录的属性与servlet中存储的页面相挂钩,方便调用,保证数据库的独立性。一般而言,一张表对应着一个entity实体类。dao包主要用于与数据库打交道。dao完成连接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的。util工具包主要用于通用功能的实现,移植性好,譬如汉字拼音的转换,自动获取编号等功能的实现。filter过滤器包对用户权限、用户页面输入等的限制。提高系

11、统安全性。(3) 数据库设计注意虚拟主键的创建,方便历史纪录的保存和查看。users表 stock表stockin表sell表以上是整个系统的基本设计思想,接下来讨论具体的实现方法。2. 页面设计中涉及的部分技术(1)采用javascript脚本技术进行数据的验证function yanzheng()var id=document.form.logid.value;/获得页面上输入的登录名var pwd=document.form.pwd.value; /获得页面上输入的密码 if(id= )/判断登录名是否为空 alert(请输入用户名!);/若登录名为空,则弹出提示对话框return fa

12、lse; if(pwd= |pwd.length6)/判断密码是否为空且密码长度是否大于6位alert(请输入密码(至少六位)!);若密码为空或密码长度小于6位,则弹出对话框return false; (2) post方式提交表单onsubmit=return yanzheng()表示在提交前进行数据验证用于在servlet中获取action的值,采取相应的操作。(3) 在页面的head部分动态显示时间,并能实现传递登录用户名/实现字幕滚动$sessionscope.logid欢迎您!/el表达式显示登录用户名var timer0 = null;var week = new array( 日,

13、 一, 二, 三, 四, 五, 六 );timer0 = settimeout(showtime,100);function showtime() cleartimeout(timer0); var dt = new date(); var weekday = weekdt.getday(); var tp = document.getelementbyid(timeplace); var result = dt.tolocaledatestring()+ 星期+weekday+ +dt.tolocaletimestring(); tp.innerhtml = result; timer0 =

14、 settimeout(showtime,1000); (4) 导航条的设计采用get方式进行传递,即能够实现在搜索栏里显示get传递的内容进货管理 库存浏览添加新品种 总结一下,get是向服务器发索取数据的一种请求,而post是向服务器提交数据的一种请求,在form(表单)中,method默认为get,实质上,get和post只是发送机制不同,并不是一个取一个发,get一般用于获取/查询资源信息,而post一般用于更新资源信息。/退出系统后跳到登陆页面(5) 功能模块页面设计在查询显示页面采用el表达式显示数据库数据。% taglib prefix=c uri=/在servlet中定义als

15、$ stock.id $ $ stock.pinyin $ stock.norms get方式传递参数id,针对id进行操作 修改 采用jquery方式进行数据验证,注意:要引入 $.validator.setdefaults(submithandler: function() form.submit(); ); jquery.validator.addmethod(byterangelength, function(value, element, param) var length = value.length; for(var i = 0; i 127) length

16、+; return this.optional(element) | ( length = param0 & length = param1 ); , 请确保输入的值在3-15个字节之间(一个中文字算2个字节); $().ready(function() / validate the comment form when it is submitted$(#commentform).validate();/ validate signup form on keyup and submit$(#signupform).validate(rules: amount:required: true,in

17、corp:required: true,byterangelength: 2,15,messages: amount:required: 请输入进货数量,incorp:required: 请输入进货单位,byterangelength: 进货单位必须在2-15个字符之间(一个中文算2个字符) , ); ); input相乘,自动获得积 日历控件的调用. 脚本验证,至少输入一种查询方式,同时,保证查询的开始日期与结束日期相同。function yanzheng() var bh=.value; var xm=document.form1.pinyin.val

18、ue; var jd=document.form1.incorp.value; var ks=document.form1.startdate.value; var js=document.form1.enddate.value; if(bh= &xm= &ks= &js= &jd= ) alert(请填写查询条件); return false; var startdate=document.getelementbyid(startdate).value; var enddate=document.getelementbyid(enddate).value; if(startdate!= &e

19、nddate!= ) startdate=startdate.replace(new regexp(-, g),/); enddate=enddate.replace(new regexp(-, g),/); var starttime=new date(startdate).gettime(); var endtime=new date(enddate).gettime(); if(endtime-starttime)0) alert(结束日期必须大于开始日期); return false; 3. 包的设计 (1)servlet是很重要的类,必须设计好。因为页面主要通过servlet与后台打

20、交道。stockservlet包get方式下的功能实现public void doget(httpservletrequest req, httpservletresponse resp)throws servletexception, ioexception string action = req.getparameter(action);/获取页面名为action的值string id = req.getparameter(id);/获取页面id值stock stock = new stock();stock.setid(id);/将id值赋给stock类的id属性if (inview.e

21、quals(action) /若action动作为inview,则进行显示操作doinview(req, resp); else if (mod.equals(action) /若action动作为mod,则进行修改操作dogetmod(req, resp, stock); else if (add.equals(action) /若action动作为add,则进行添加同类药品操作dogetadd(req, resp, stock); else if (addnew.equals(action) /若action动作为addnew,则进行添加新品种操作dogetnew(req, resp);

22、else if (sellview.equals(action) /若action动作为sellview,则进行售出浏览操作dogetsellview(req, resp); else if (sell.equals(action) /若action动作为sell,则进行售出操作dogetsell(req, resp, stock);private void dogetnew(httpservletrequest req, httpservletresponse resp)throws servletexception, ioexception string id = getid.getid(

23、);req.setattribute(id, id);req.getrequestdispatcher(/stock/addnew.jsp).forward(req, resp);private void dogetsell(httpservletrequest req, httpservletresponse resp,stock stock) throws servletexception, ioexception stock = ss.getinfo(stock);req.setattribute(stock, stock); /在页面中调用的$ requestscope.stock 即

24、在这里进行定义req.getrequestdispatcher(/stock/sell.jsp).forward(req, resp); /将获得的数据信息转发到页面sell.jsp中,方便在sell.jsp中调用stockprivate void dogetsellview(httpservletrequest req, httpservletresponse resp)throws servletexception, ioexception arraylist als = ss.getstocklist();req.setattribute(als, als);/在页面中调用的$ requ

25、estscope.als 即在这里进行定义req.getrequestdispatcher(/stock/selllist.jsp).forward(req, resp);private void dogetadd(httpservletrequest req, httpservletresponse resp,stock stock) throws servletexception, ioexception stock = ss.getinfo(stock);req.setattribute(stock, stock);req.getrequestdispatcher(/stock/adds

26、tock.jsp).forward(req, resp);private void dogetmod(httpservletrequest req, httpservletresponse resp,stock stock) throws servletexception, ioexception stock = ss.getinfo(stock);req.setattribute(stock, stock);req.getrequestdispatcher(/stock/modstock.jsp).forward(req, resp);stockservice ss = new stocks

27、ervice();/创建service,用于辅助servlet和dao打交道private void doinview(httpservletrequest request,httpservletresponse response) throws servletexception, ioexception arraylist als = ss.getstocklist();request.setattribute(als, als);request.getrequestdispatcher(/stock/stocklist.jsp).forward(request,response); pos

28、t方式下的功能实现 public void dopost(httpservletrequest req, httpservletresponse resp)throws servletexception, ioexception string action = req.getparameter(action);if (mod.equals(action) domod(req, resp); else if (add.equals(action) doadd(req, resp); else if (new.equals(action) doaddnew(req, resp); else if

29、(sell.equals(action) dosell(req, resp); else if (stockin.equals(action) string name = req.getparameter(name);string pinyin = req.getparameter(pinyin);string incorp = req.getparameter(incorp);string sdate = req.getparameter(startdate);string edate = req.getparameter(enddate);dostockin(req, resp, name

30、, pinyin, incorp, sdate, edate); else if (sellhistory.equals(action) string name = req.getparameter(name);string pinyin = req.getparameter(pinyin);string buycorp = req.getparameter(buycorp);string sdate = req.getparameter(startdate);string edate = req.getparameter(enddate);dosellhistory(req, resp, n

31、ame, pinyin, buycorp, sdate, edate);private void dosellhistory(httpservletrequest req,httpservletresponse resp, string name, string pinyin,string buycorp, string sdate, string edate)throws servletexception, ioexception string sum = ss.getsellsum(name, pinyin, buycorp, sdate, edate);req.setattribute(

32、sum, sum);arraylist als = ss.searchsell(name, pinyin, buycorp, sdate,edate);req.setattribute(als, als);req.getrequestdispatcher(/stock/sellhistory.jsp).forward(req, resp);private void dostockin(httpservletrequest req, httpservletresponse resp,string name, string pinyin, string incorp, string sdate,s

33、tring edate) throws servletexception, ioexception string sum = ss.getinsum(name, pinyin, incorp, sdate, edate);req.setattribute(sum, sum);arraylist als = ss.searchstockin(name, pinyin, incorp, sdate,edate);req.setattribute(als, als);req.getrequestdispatcher(/stock/stockinlist.jsp).forward(req, resp)

34、;private void dosell(httpservletrequest req, httpservletresponse resp)throws ioexception stock s = new stock();s.setid(req.getparameter(id);sell sl = new sell();sl.setdid(req.getparameter(id);sl.setcost(req.getparameter(cost);sl.setretail(req.getparameter(retail);sl.setamount(req.getparameter(amount

35、);sl.setbuycorp(req.getparameter(buycorp);sl.setselldate(req.getparameter(selldate);sl.setmoney(req.getparameter(money);sl.setpayee(req.getparameter(payee);/通过service与dao打交道,实现数据库信息的增删改。int i = ss.sell(sl);/ system.out.println(i);int j = ss.sell(s, sl);/ system.out.println(j);/用于测试if (i = 1 & j = 1)

36、 printwriter out = resp.getwriter();out.write(alert(出售成功!);window.location=(main.jsp); else printwriter out = resp.getwriter();out.write(alert(出售失败!请重试!);window.history.go(-1);private void doaddnew(httpservletrequest req, httpservletresponse resp)throws ioexception, servletexception stock s = new st

37、ock();s.setid(req.getparameter(id);s.setname(req.getparameter(name);string pinyin = chinese2pinyin.getfirstletter(req.getparameter(name);s.setpinyin(pinyin);s.setnorms(req.getparameter(norms);s.setdrugtype(req.getparameter(drugtype);s.setplace(req.getparameter(place);s.setunit(req.getparameter(unit)

38、;s.setmemo(req.getparameter(memo);s.setcost(req.getparameter(cost);s.setretail(req.getparameter(retail);s.setamount(req.getparameter(amount);stockin si = new stockin();si.setdid(req.getparameter(id);si.setcost(req.getparameter(cost);si.setamount(req.getparameter(amount);si.setincorp(req.getparameter

39、(incorp);si.setmoney(req.getparameter(money);si.setindate(req.getparameter(indate);int i = ss.add(si);int j = ss.add(s);if (i = 1 & j = 1) printwriter out = resp.getwriter();/跳出对话框,显示提示信息out.write(alert(添加成功!);window.location=(main.jsp); else printwriter out = resp.getwriter();out.write(alert(添加失败!请

40、重试!);window.history.go(-1);private void doadd(httpservletrequest req, httpservletresponse resp)throws ioexception stock s = new stock();s.setid(req.getparameter(id);stockin si = new stockin();si.setdid(req.getparameter(id);si.setcost(req.getparameter(cost);si.setamount(req.getparameter(amount);si.se

41、tincorp(req.getparameter(incorp);si.setmoney(req.getparameter(money);si.setindate(req.getparameter(indate);int i = ss.add(si);/ system.out.println(i);/测试是否成功int j = ss.add(s, si);/ system.out.println(j);if (i = 1 & j = 1) printwriter out = resp.getwriter();out.write(alert(添加成功!);window.location=(mai

42、n.jsp); else printwriter out = resp.getwriter();out.write(alert(添加失败!请重试!);window.history.go(-1);private void domod(httpservletrequest req, httpservletresponse resp)throws ioexception stock s = new stock();s.setid(req.getparameter(id);s.setname(req.getparameter(name);string pinyin = chinese2pinyin.g

43、etfirstletter(req.getparameter(name);s.setpinyin(pinyin);s.setnorms(req.getparameter(norms);s.setdrugtype(req.getparameter(drugtype);s.setplace(req.getparameter(place);s.setunit(req.getparameter(unit);s.setmemo(req.getparameter(memo);s.setcost(req.getparameter(cost);s.setretail(req.getparameter(reta

44、il);int i = ss.mod(s);if (i = 1) printwriter out = resp.getwriter();out.write(alert(修改成功!);window.location=(main.jsp); else printwriter out = resp.getwriter();out.write(alert(修改失败!请重试!);window.history.go(-1);(2) biz包的设计,主要负责与dao包打交道stockdao sd = new stockdao();public arraylist getstocklist() / todo auto-generated method stubreturn sd.getstocklist();public stock getinfo(stock stock) / todo auto-generated method stubreturn sd.getinfo(stock);public int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论