欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

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

    • 资源ID:3291718       资源大小:7.52MB        全文页数:28页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    药品进销存管理软件设计报告 孔丹药品进销存管理软件设计报告学校: 院系:学号:姓名:指导教师:摘要:本文介绍了用MyEclipse 6.5开发软件开发药品进销存管理系统的过程。设计主要针对药品厂家对产品进行销售管理使用,能够实现药品进货、销售、库存查询、出单记录、进销存明细表、用户操作等。提高代理商的管理和服务水平,将业务从纯人工操作转换成人工与计算机共同处理,从而降低了人工劳动并增加了信息的准确性。 关键词:药品 进销存 MyEclipse 6.5一、 系统需求1、 功能需求系统至少应具有以下功能:(1) 用户添加和删除:系统能够根据软件使用用户的变动,进行用户管理,包括用户的添加和删除,提高系统的安全性。(2) 修改密码:系统能够根据用户的需要修改密码,防止他人恶意篡改,引起重大损失,提高系统的安全性。(3) 库存浏览:系统能根据需要显示库存,方便用户根据库存进行药品的进销。防止库存的不足以及根据实际情况酌情销售等。(4) 修改药品信息:系统能够修改药品属性,如药品剂型,产地,单位,数量,备注等。(5) 添加货物:系统可以根据客户需要进货,将货物存入库存数据库中。(6) 出货售出:系统能根据客户需求进行药品的销售,并能做好相关的记录。(7) 统计信息:系统能够根据进货、销售操作,查询相关进货、销售记录信息,根据用户的条件输入,查询出相应条件下的金额统计。(8) 帮助文件:系统能够提供用户帮助文件信息。2、 非功能需求(1) 时间特性要求系统应具有比较快的响应速度,保证用户能快速进行各种操作。(2) 灵活性系统应具有较高的灵活性,当用户的需求发生变化时,通过较小的代价即可使系统快速适应这些变化。(3) 故障处理要求系统应详细考虑各种可能出现的错误,包括用户的操作错误,数据处理的错误,界面更新错误等,对于每一种错误给出详细原因。并且保证不出现任何导致用户数据丢失的错误,如强行关机,强行退出系统,系统当机,死机等。(4) 通用性系统能够在所有流行的技术环境下运行,支持不同平台系统,具有较强的可扩展性,可补充性。(5) 安全性库存信息的存储需要设计一种好的策略,以保证系统的安全性,例如数据库存储的安全性比文件方式要好一些,密码的设置及修改等也对安全性提出较高的要求。二、 系统功能介绍及使用说明在使用系统之前应确保oracle数据库服务已打开。1. 登陆系统输入正确的用户名和密码即可,同时要求密码的位数不得少于6位。初始用户名和密码是admin和123456。用户信息存储在数据库中。2. 修改密码:进入系统后,可点击界面右上角的“修改密码”进行密码的修改,在修改密码页面要保证新密码和确认密码一致。点击“确定”之后,弹出密码修改成功对话框。3. 导航条的使用界面上方的导航条显示了基本功能模块,鼠标移动至菜单项(无需点击),则会自动弹出子模块菜单项。点击子模块菜单项即可进行相应功能的操作。(1) 进货管理点击“库存浏览”子菜单项,显示库存列表,每一条记录之后显示相应可进行的操作修改和添加,即修改库存药品的属性信息以及添加相应药品。点击“添加新品种”菜单项,显示进货页面,用户根据实际情况进行药品信息的填写。信息填写无误后,点击“添加”按钮,弹出添加成功对话框(编号是自动生成的)。(2) 销售管理点击“库存浏览”菜单项,显示库存列表,每一条记录之后显示操作售出。点击“售出”链接,显示售出页面,根据已显示信息,确认无误后,填写售出数量以及销售额,点击“售出”按钮后,弹出成功售出的对话框。(3) 统计该功能主要根据用户的条件选择、填写,显示相应的进货和销售记录,并进行金额统计。销售统计与进货统计类似,在此不进行赘述。(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)软件设备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完成进货模块,除了打印模块,基本完成(六)910继续完善进货模块(日)911完成销售模块,除了打印功能,基本实现(一)912继续完善销售模块(二)913设计帮助模块(三)914学习打印模块的设计以及分页功能的设计(四)915完成打印模块以及分页功能表1:系统开发日程五、 系统开发 下面详细介绍系统开发的技术与方法。1. 系统总体设计图1.1 具体功能模块系统采用面向对象分析,面向对象设计,面向对象开发的思想,采用支持面向对象的开发工具。(1) 页面原型设计根据系统功能需求设计页面。采用JSP技术进行界面的设计。 css、images、js、My97DatePicker文件夹主要用于页面框架、格式等的设计以及相关引用控件的设计,部分页面采用JQuery验证方式。My97DatePiicker是日历控件,利用网上资源,学习调用方式,直接在程序中调用,方便快捷。(2) 架构设计根据页面以及功能需要,搭建系统框架。采用Servlet+JSP的设计,故建立所需要的包。Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。biz包主要用于servlet包和dao包的接口,同时也可担任验证功能实现模块的接口。service层是面向功能的,一个个功能模块比如说银行登记并完成一次存款,UI要把请求给service层,然后service曾将这一个case分解成许多步骤调用底层的实现完成这次存款,dao就是下面那层。Entity实体类包主要帮助将数据库中记录的属性与servlet中存储的页面相挂钩,方便调用,保证数据库的独立性。一般而言,一张表对应着一个entity实体类。Dao包主要用于与数据库打交道。dao完成连接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的。Util工具包主要用于通用功能的实现,移植性好,譬如汉字拼音的转换,自动获取编号等功能的实现。Filter过滤器包对用户权限、用户页面输入等的限制。提高系统安全性。(3) 数据库设计注意虚拟主键的创建,方便历史纪录的保存和查看。Users表 Stock表StockIn表Sell表以上是整个系统的基本设计思想,接下来讨论具体的实现方法。2. 页面设计中涉及的部分技术(1)采用javascript脚本技术进行数据的验证<script language="javascript">function yanzheng()var id=document.form.logid.value;/获得页面上输入的登录名var pwd=document.form.pwd.value; /获得页面上输入的密码 if(id=' ')/判断登录名是否为空 alert("请输入用户名!");/若登录名为空,则弹出提示对话框return false; if(pwd=' '|pwd.length<6)/判断密码是否为空且密码长度是否大于6位alert("请输入密码(至少六位)!");若密码为空或密码长度小于6位,则弹出对话框return false; </script> (2) Post方式提交表单<form onsubmit="return yanzheng();" action="login" method="post" name="form">onsubmit="return yanzheng()"表示在提交前进行数据验证<input type="hidden" name="action" value="login" />用于在servlet中获取action的值,采取相应的操作。(3) 在页面的head部分动态显示时间,并能实现传递登录用户名<div id="adminop"><marquee width="98%" scrollamount="3">/实现字幕滚动<h1>$sessionScope.logid欢迎您!</h1>/el表达式显示登录用户名</marquee></div><script type="text/javascript" language="javascript">var timer0 = null;var week = new Array( "日", "一", "二", "三", "四", "五", "六" );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 = setTimeout(showTime,1000); </script><div id="time"><span id="timePlace"></span></div>(4) 导航条的设计采用get方式进行传递,即能够实现在搜索栏里显示get传递的内容<li><a class="parent"><span>进货管理</span> </a><ul><li> <a href="stock?action=inview" target="main"><span>库存浏览</span></a></li><li><a href="stock?action=addnew" target="main"><span>添加新品种</span> </a></li></ul></li>总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。<form action="login.jsp" method="post" target="_parent">/退出系统后跳到登陆页面(5) 功能模块页面设计在查询显示页面采用EL表达式显示数据库数据。<% taglib prefix="c" uri="http:/java.sun.com/jsp/jstl/core"%><c:forEach items="$ requestScope.als " var="stock">/在servlet中定义als<tr><td width="4%"><div align="center">$ stock.id </div></td><td width="8%"><div align="center">$ stock.name </div></td><td width="4%"><div align="center">$ stock.pinyin </div></td><td width="4%"><div align="center">$ stock.norms </div></td></tr></c:forEach>Get方式传递参数id,针对id进行操作<a href="stock?action=mod&id=$ stock.id "> 修改 </a>采用JQuery方式进行数据验证,注意:要引入<script type="text/javascript"> $.validator.setDefaults(submitHandler: function() form.submit(); ); jQuery.validator.addMethod("byteRangeLength", function(value, element, param) var length = value.length; for(var i = 0; i < value.length; i+) if(value.charCodeAt(i) > 127) length+; 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,incorp:required: true,byteRangeLength: 2,15,messages: amount:required: "请输入进货数量",incorp:required: "请输入进货单位",byteRangeLength: "进货单位必须在2-15个字符之间(一个中文算2个字符)" , ); ); </script>Input相乘,自动获得积<script> <!- function checkFills() var s1 = document.getElementById("cost").value; var s2 = document.getElementById("amount").value; if(s1=null|s1.length=0) return; if(s2=null|s2.length=0) return; if(isNaN(s1)|isNaN(s2) alert("输入的字符非数字!"); return ; document.getElementById("money").value = Math.round(s1*s2*100)/100;/保证计算的精确度 /-> </script>日历控件的调用<script language="javascript" type="text/javascript"src="My97DatePicker/WdatePicker.js"></script>.<div align="center"><label><input name="indate" type="text" id="indate" size="10"maxlength="10"onfocus="WdatePicker(dateFmt:'yyyy-MM-dd')"readonly="readonly" /></label></div> 脚本验证,至少输入一种查询方式,同时,保证查询的开始日期与结束日期相同。<script language="javascript">function yanzheng() var bh=document.form1.name.value; var xm=document.form1.pinyin.value; 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!=' '&&endDate!=' ') 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; </script>3. 包的设计 (1)Servlet是很重要的类,必须设计好。因为页面主要通过servlet与后台打交道。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".equals(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); 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();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 即在这里进行定义req.getRequestDispatcher("/stock/sell.jsp").forward(req, resp); /将获得的数据信息转发到页面sell.jsp中,方便在sell.jsp中调用stockprivate void doGetSellView(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException ArrayList<Stock> als = ss.getStockList();req.setAttribute("als", als);/在页面中调用的$ requestScope.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/addstock.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 StockService();/创建service,用于辅助servlet和dao打交道private void doInView(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException ArrayList<Stock> als = ss.getStockList();request.setAttribute("als", als);request.getRequestDispatcher("/stock/stocklist.jsp").forward(request,response); Post方式下的功能实现 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 ("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, 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, name, 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("sum", sum);ArrayList<Stock> 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,String edate) throws ServletException, IOException String sum = ss.getInSum(name, pinyin, incorp, sdate, edate);req.setAttribute("sum", sum);ArrayList<Stock> als = ss.searchStockIn(name, pinyin, incorp, sdate,edate);req.setAttribute("als", als);req.getRequestDispatcher("/stock/stockinlist.jsp").forward(req, resp);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");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) PrintWriter out = resp.getWriter();out.write("<script>alert('出售成功!');window.location=('main.jsp')</script>"); else PrintWriter out = resp.getWriter();out.write("<script>alert('出售失败!请重试!');window.history.go(-1)</script>");private void doAddNew(HttpServletRequest req, HttpServ

    注意事项

    本文(药品进销存管理软件设计报告.doc)为本站会员(韩长文)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开