药品进销存管理软件设计报告.doc

上传人:韩长文 文档编号:3291718 上传时间:2019-08-08 格式:DOC 页数:28 大小:7.52MB
返回 下载 相关 举报
药品进销存管理软件设计报告.doc_第1页
第1页 / 共28页
药品进销存管理软件设计报告.doc_第2页
第2页 / 共28页
药品进销存管理软件设计报告.doc_第3页
第3页 / 共28页
药品进销存管理软件设计报告.doc_第4页
第4页 / 共28页
药品进销存管理软件设计报告.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《药品进销存管理软件设计报告.doc》由会员分享,可在线阅读,更多相关《药品进销存管理软件设计报告.doc(28页珍藏版)》请在三一文库上搜索。

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表达式显示数据库数据。/在servlet中定义als$ stock.id $ stock.nam

15、e $ 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+; return this.optiona

16、l(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,incorp:required: true,by

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

18、rm1.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!= &endDate!= ) startDate=s

19、tartDate.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与后台打交道。StockServlet包Get方式下

20、的功能实现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.equals(action) /若action

21、动作为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); else if (sellview.equa

22、ls(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();req.setAttribute(id,

23、 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 即在这里进行定义req.getRequestD

24、ispatcher(/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);/在页面中调用的$ requestScope.als 即在这里进行定义r

25、eq.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/addstock.jsp).forward(req,

26、 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 StockService();/创建service,用于

27、辅助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); Post方式下的功能实现 public void

28、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 (sell.equals(action) d

29、oSell(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, pinyin, incorp, sdat

30、e, 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, name, pinyin, buycorp,

31、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(sum, sum);ArrayList al

32、s = 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,String edate) throws Se

33、rvletException, 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);private void doSell(H

34、ttpServletRequest 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);sl.setBuycorp(req.ge

35、tParameter(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) 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, HttpServ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1