1、 管理信息系统课程设计 ——选题:微型超市仓库管理系统 班级:10级电子商务 成员:张云力 姜学磊 100105070012 师书品 100105070011 2013—6-5 目录 前言……………………………
2、…………………………………………..2 一、系统分析………………………………………………………………2 1. 可行性分析 2. 业务流程图 3. 数据流程图 4. 数据字典 二、系统设计 (一)1、功能结构图设计 2、功能模块介绍 (二)数据库设计 三、系统功能模块的设计 四、代码设计 五、参考文献 前言: 随着企业管理信息化的发展,网络及计算机的引入管理跃上了一个新的发展平台。企业的各项管理都将向信息化方向发展,仓库管理对于超市管理来说越来越重要,也是基于这个原因我们把课程设计方向定在了超市仓
3、库管理系统 分析仓库系统的功能与构思,仓库管理系统是一个超市不可缺少的部分,它的功能对于超市管理来说至关重要,所以仓库管理提供能够为用户提供充足的信息和快捷的查询手段。系统主要设计了仓库出入库的管理与商品查询、预警功能。团队三人分工合作其中张云力、姜学磊负责主要功能代码开发,师书品准备资料与简单功能模块的开发。 由于时间紧迫,加之水平有限,设计中的缺点和不足之处在所难免希望老师批评指正。下面就开发系统的具体设计与实施撰写系统报告 一、系统分析 1、可行性分析 目前,有很多小型超市在库存方面仍然是以人为主的管理方式,这种仓库管理方式处理过程繁琐并且处理效率、准确度低;另一方面,超市
4、长时间的经营活动会产生大量的经营数据,对商品信息、出入库的信息进行分类管理,并提供一种便捷的方式存储、查询这些数据能够帮助超市决策者分析经营状况,有利于超市的长期经营与发展。于是我们便选择设计一个小型超市仓库管理系统。 仓库管理员可以直接在计算机上实现仓库的信息管理,实现各类信息查询方便,提高了库存信息保密性、降低纸张成本,并且能够在商品库存不足时进行预警,提醒管理人员应该向供应商进行订货保证商品的及时供应与超市的正常运营;在库存数量大于商品的最高库存限度的时候,即商品积压的时候,系统也会发出警报,提醒管理人员应该停止商品的进货活动。也就是说超市库存管理信息系统既能防止商品供应滞后于车间对它
5、们的需求,也能防止商品过早地生产和进货,以免增加库存。对企业的生产起了保障作用,同时节省了企业的流动资金。 系统开发的总体任务是实现仓库各种信息的系统化、规范化和自动化。本仓库管理系统主要完成功能有: 商品的入库,包括:仓库内已有商品的采购入库以及新增商品的添加入库;商品的出库,包括:仓库内又有商品的销售出库以及部分商品的退货处理;商品信息的修改:可对仓库内商品的详细信息进行修改;商品盘点:可查询商品出库信息、入库信息以及商品库存状况;缺货预警;对库存量不足的商品进行缺货预警,保证商品的正常供应;仓库的清空:查询某类商品,超市可将此类不再经营的商品在仓库内清除,保证仓库信息查询的准确性。
6、 2、业务流程图 不足、缺货预警单信息 电脑记账 出库单 出库单信息 入库单信息 入库单 电脑审单 超市 生产厂家 仓库 电脑账单 统计员 库存查询表表 货物入出表 库存预警表 超市库存管理系统业务流程图 3、数据流程图 仓库 入库单 P-01 电脑入库单 入库单 P-02 电脑记账 货物统计表 入库数据 商品统计 超市 出库单 电脑出库单 出库处理 出库单 出库数据 货物预警表 出库信息 入库信息 库存预警 库存数据 库存数据 4、数据字典 (1)数据项
7、的定义 数据项编号:I-01 数据项名称:number 别 名:商品编号 简 述:某种商品的编号 类 型:字符型 长 度:11字节 是否为空 :no 数据项编号:I-02 数据项名称:name 别 名:商品名称 简 述:某种商品名称 类 型:字符型 长 度:11 是否为空 :yes 数据项编号:I-03 数据项名称:cun 别 名:商品数量 简 述:某种商品的库存数量 类 型:整数型 长 度:11 是否为空 :yes 数据项编号:I-04 数据项名称:gy
8、shang 别 名:供应商 简 述:输入供应商 类 型:字符型 长 度:11 是否为空 :yes 数据项编号:I-05 数据项名称:pname 别 名:存货人 简 述:某种商品的存货人 类 型:字符型 长 度:11 是否为空 :yes 数据项编号:I-06 数据项名称:riqi 别 名:存货日期 简 述:某种商品的库存日期 类 型:日期型 长 度:12 是否为空 :yes (2)数据流的定义(以入库单为例) 数据流名称:货物存库单 编 号:D-01 简 述:
9、仓库开出的商品入库单 数据流来源:仓库 数据流去向:仓库系统 数据流组成:商品编号 + 商品名称 + 商品数量 + 存储人+ 供应商 + 存储日期 数据流名称:超市提货单 编 号:D-02 简 述:商品提货单 数据流来源:超市 数据流去向:仓库系统 数据流组成:商品编号 + 商品名称 + 提货人姓名 +提货日期 + 提货数量 (3) 数据存储的定义(以存货统计表为例) 数据存储的名称:库存统计表 数据存储编号:F-01 简 述:记录商品出入库数据 数据存储组成:商品编号 + 商品名称 + 存货数量 + 存储人 + 供应商 + 存储
10、日期 关键字: 商品编号 相关联的处理:P-01,P-02 (4)外部实体的定义 外部实体名称:仓库 外部实体编号:S-01 简 述:生产产品入库 输入的数据流:入库单据 输出的数据流:存货单 外部实体名称:超市 外部实体编号:S-02 简 述:销售产品出库 输入的数据流:出库单据 输出的数据流:出库单 二、系统设计 (一)系统功能设计 1、系统功能结构图 登陆 仓库管理系统 缺货预警 货物出入库 不足预警 货物查询 预警 入库查询 出库查询 货物入库 货物出库
11、 出库单 入库 单 出入库 单据 个人信息 货物更改 货物信息更改 货物 删除 信息查询 修改密码 2、功能模块介绍 (1)个人信息 用户登录后,可自行修改个人密码。 (2)出入库单据 可以查看需入库的商品的单据,管理员或者入库员根据入库单据进行商品入库及相关信息的管理; 可以查看出库商品的单据,管理员或者出库员根据出库单进行商品的出库以及出库信息的管理。 (3)商品出入库 商品入库:管理员或者入库员根据入库单填写需要入库的新商品的商品编号、数量、入库人、日期等详细信息,对新商品进行入库的管理; 商品出库:管
12、理员或者出库员根据出库单填写需要出库的商品的商品编号、数量、入库人、日期等详细信息,对商品进行入库的管理; 仓库盘点:对仓库内剩余的各类商品库存量进行盘点统计,对已提出的货物进行盘点统计。与出入库单进行比较,保证信息的准确性。 (4)货物更改 商品信息更改:如果已入库的商品存在信息错误,在此,可以根据商品编号进行商品定位,进而对已入库商品的商品名称、商品数量、商品存储人、商品供应商以及商品存储日期进行修改。 商品删除:当超市不再经营某种商品或者某种商品退货时,可以通过查询商品编号、商品名称等,对已入库的商品进行删除。 (5)信息查询 货物查询:可根据商品编号、商品名
13、称,查询进行特定商品的库存的状况;可根据商品存储人,查询指定存储人进行入库处理的的所有商品的库存状况;可根据商品供应商,查询特定供应商所供应的所有商品的库存状况;可根据商品存储日期,查询特定日期存入的所有商品的库存状况; 入库查询:可根据商品编号、商品名称,查询特定商品的入库详细信息;可根据存储人,查询指定存储人进行入库处理的所有商品的详细信息;可根据供应商,查询特定供应商所供应的所有商品的入库详细信息;可根据日期,查询特定日期商品入库的详细信息; 提货查询:可根据商品编号、商品名称,查询特定商品的出库详细信息;可根据出库人,查询指定出库人进行出库处理的所有商品的详细信息;可根据供应商,查
14、询特定供应商所供应的所有商品的出库详细信息;可根据日期,查询特定日期商品出库的详细信息; (6)预警 不足预警:当某种商品的库存量不足50时,系统会提出预警,提醒管理人员应该向供应商进行订货保证商品的及时供应与超市的正常运营; 缺货预警:当某种商品缺货时,系统会提出预警,提醒管理人员应该向供应商进行订货保证商品的及时供应与超市的正常运营。 (7)退出系统 点击可退出登录,切换用户登录。 (二)数据库设计 数据库名:kucun 数据库内包括4个表:商品信息表(ruku),出库表(th),用户表(yonghu),新增商品表(xinzeng)。 1、入库表
15、 表名:xinzeng 包括字段:商品编号(number),商品名称(tname),商品数量(cun),存储人(pname),供应商(gyshang),存储日期(riqi)。 2、出库表 表名:th 包括的字段:商品编号(number),提货人姓名(tname),提货日期(riqi),出库商品的数量(cun)。 3、商品信息表 表名:ruku 包括的字段:商品编号(number),商品名称(name),商品数量(cun),存储人(pname),供应商(gyshang),存储日期(riqi)。 4、管理员表 表名:yonghu 包括
16、的字段:用户名(name),密码(password)。 5、出库员 表名:yonghu1 6、入库员 表名:yonghu2 7、留言信息表 表名:liuyan 三、系统功能模块的设计 1、系统登录模块 本模块主要提供三种身份的人员登录:管理员、出库员以及入库员,用户通过表单输入其用户名以及密码信息,并选择其身份进行登录,系统根据管理员提供的登录信息对其进行身份查询鉴别。 用户在页面提供的表单中输入用户名和密码,连接数据库检验用户信息,与输入数据“用户名”为查询条件创建数据集查看输入的“用户名”是否存在,如果存在再检验密码是否正确,
17、都正确则进入仓库管理系统主页面;如果“用户名”或密码不正确,则会返回登陆页面,重新输入登录信息。 登陆页面: 2、个人信息模块 用户登录后,可对其密码进行修改。 3、出入库单据模块 管理员登陆后查看收到的出库单据以及入库单据,并根据单据要求进行出库、入库的信息操作;出库员可查看出库单据,并进行相关的出库商品信息处理;入库员登陆后可查看入库单据,并进行相关入库商品的信息处理。 4、商品出入库模块 商品出入库包括仓库存货、超市提货以及仓库盘点。 仓库存货: 进行商品入库操作:新商品的添加或者已有商品的入库操作。提交添加后,可在页面下方查看已入库的商品
18、信息,与入库单进行对照,确保信息的准确性,如发生信息录入错误,可在货物更改模块进行商品信息的相关修改。 超市提货: 进行商品的出库操作,在处理出库单时,可在此页面清楚的看到商品的库存量,对于完成出库后,库存量不足的商品,系统会有不足或者缺货预警,提醒及时进货,保证商品的正常供应以及超市的正常运营;对于现有库存量无法满足出库的商品,首先将仓库内已有的商品进行出库,并记录未完全满足的出库单,带库存补充后,及时供应。 仓库盘点: 可查看仓库商品的剩余库存量,查看日、月提货信息,了解各种商品的销售状况,便于管理者了解顾客的偏好以及商品的受欢迎程度,为其决定添加或者停止某类商
19、品以及商品促销决策等方面提供参考。 (图) 5、货物更改 货物信息修改: 当入库或者出库信息录入发生错误时,可以根据商品编号进行商品定位,进而对已入库商品的商品名称、商品数量、商品存储人、商品供应商以及商品存储日期进行修改。 商品删除:当超市不再经营某种商品或者某种商品退货时,可以通过查询商品编号、商品名称等,对已入库的商品进行删除。 6、信息查询 货物查询: 可根据商品编号、商品名称,查询进行特定商品的库存的状况,对于热销的商品,即使没有达到需要预警的库存量,但也需要及时补充库存,保证超市利润的持续增加;可根据商品存储人,查询指定存储人进行入库
20、处理的的所有商品的库存状况;可根据商品供应商,查询特定供应商所供应的所有商品的库存状况,了解特定供应商所供应的商品的销售状况,为商品的订货以及数量提供参考;可根据商品存储日期,查询特定日期存入的所有商品的库存状况,了解商品的销售状况。 入库查询: 可根据商品编号、商品名称,查询特定商品的入库详细信息,了解其订货状况;可根据存储人,查询指定存储人进行入库处理的所有商品的详细信息;可根据供应商,查询特定供应商所供应的所有商品的入库详细信息;可根据日期,查询特定日期商品入库的详细信息。了解商品的订货状况,为决策提供给参考。 提货查询: 可根据商品编号、商
21、品名称,查询特定商品的出库详细信息,了解商品的销售状况,为商品选择以及商品订货量提供参考;可根据出库人,查询指定出库人进行出库处理的所有商品的详细信息;可根据供应商,查询特定供应商所供应的所有商品的出库详细信息,了解特定供应商产品的销售状况,为供应商的选择提供参考;可根据日期,查询特定日期商品出库的详细信息,了解商品的销售状况。 7、预警 不足预警: 当商品库存量不足50时,会有预警,提醒及时采购,保证商品的正常供应与销售,保证超市的正常运营及利润。 (图) 缺货预警: 当某种商品出库后库存为零时,系统会有预警,提醒及时采购。 8、工具
22、 四、代码设计 (一)登陆模块代码 1、登录页面代码: <%@page contentType="text/html;Charset=gb2312"%>
微型超市仓库管理系统
The supermarket warehouse management system
2、判断用户名、密码是否正确:
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="java.sql.*" %>
<%! public String codetostring(String str)
{
25、 String s=str; try{ byte tempB[]=s.getBytes("ISO-8859-1"); s=new String(tempB); return s; } catch(Exception e){ return s; } } %> <% String name2 = codetostring(request.getParameter("name1")); String password2 = request.getParameter("password1");
26、 if(name2!=null||name2!="") { try{Class.forName("com.mysql.jdbc.Driver");}catch(Exception e){out.print(e);} try{ String uri="jdbc:mysql://localhost/kucun"; Connection con=DriverManager.getConnection(uri,"root","123456"); Statement sql=con.createStatement();
27、ResultSet rs = sql.executeQuery("SELECT * FROM yonghu where name='"+name2+"' and password='"+password2+"'"); //out.print("SELECT * FROM yonghu where name='"+name2+"' and password='"+password2+"'"); if (rs.next()){ out.print("" ); } else{
28、 out.print(""); } con.close(); }catch(SQLException e1){out.print(e1);} } %>
29、html;charset=GB2312" %> <%@ page import="java.sql.*" %> <%! public String codetostring(String str) { String s=str; try{ byte tempB[]=s.getBytes("ISO-8859-1"); s=new String(tempB); return s; } catch(Exception e){ return s; } } %> <% String number=c
30、odetostring(request.getParameter("number")); if(number==null) {number="";} String name=codetostring(request.getParameter("name")); if(name==null) {name="";} String cun=codetostring(request.getParameter("cun")); if(cun==null) {cun="";} String pname=codetostring(request.getPar
31、ameter("pname")); if(pname==null) {pname="";} String gyshang=codetostring(request.getParameter("gyshang")); if(gyshang==null) {gyshang="";} String riqi=codetostring(request.getParameter("riqi")); if(riqi==null) {riqi="";} String sqlstring1="select * from ruku where number
32、'"+number+"'"; String sqlstring2="insert into ruku values ('"+number+"','" +name+"','"+cun+"',' "+pname+"','"+gyshang+"','"+riqi+"')"; String sqlstring3="update ruku set number=number+'"+cun+"' where number = '"+ number +"'"; try {Class.forName( "com.mysql.jdbc.Driver");}catch(Exce
33、ption e){out.print(e);} try{ String uri="jdbc:mysql://localhost/kucun"; Connection con=DriverManager.getConnection(uri,"root","123456"); Statement sql=con.createStatement(); ResultSet rs=sql.executeQuery(sqlstring1); if(rs.next()) { sql.ex
34、ecuteUpdate(sqlstring3); } else{ sql.executeUpdate(sqlstring2); } con.close();}catch(SQLException e1){out.print(e1);} %>
已提交 2、商品出
35、库: <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.sql.*" %>
剩余产品 <% try{
39、 Class.forName( "com.mysql.jdbc.Driver"); } catch(ClassNotFoundException e) {} try { String uri="jdbc:mysql://localhost/kucun"; Connection con=DriverManager.getConnection(uri,"root","123456"); Statement sql=con.createStatement(); Res
40、ultSet rs=sql.executeQuery("SELECT * FROM ruku"); out.print("
| "+"商品编号"); out.print(" | "+"商品名称"); out.print(" | "+"商品数量"); out.print(" | "+"存储人"); 41、 out.print(" | "+"供应商"); out.print(" | "+"存货日期"); out.print(" |
|---|---|---|---|---|---|
| "+rs.getString(1)+" | "); out.print(""+rs.getString(2)+" 42、 | ");
out.print(""+rs.getInt(3)+" | "); out.print(""+rs.getString(4)+" | "); out.print(""+rs.getString(5)+" | "); out.print(""+rs.getString(6)+" | "); out.print("
46、ody> genggai1.jsp: <%@ page contentType="text/html;charset=GB2312" %> <%@ page import="java.sql.*" %> <%! public String codetostring(String str) { String s=str; try{ byte tempB[]=s.getBytes("ISO-8859-1"); s=new String(tempB); return s;
47、 } catch(Exception e){ return s; } } %> <% String number1 = request.getParameter("number"); String a= request.getParameter("leibie"); String b= request.getParameter("xinxi"); String updateString=""; if(a.equals("1")){String c =codeto
48、string(b); updateString="UPDATE ruku SET name='"+c+"' where number='"+number1+"'"; } else if(a.equals("2")){ int d=Integer.parseInt(b); updateString="UPDATE ruku SET cun="+d+" where number='"+number1+"'"; } else if(a.equals("3")){String e=codetostring(b); updateString="UPDATE
49、ruku SET pname='"+ e+"' where number='"+number1+"'";} else if(a.equals("4")){ String f=codetostring(b); updateString="UPDATE ruku SET gname='"+f+"' where number='"+number1+"'";} else if(a.equals("5")){updateString="UPDATE ruku SET riqi='"+b+"'where number='"+number1+"'";} try {Class
50、forName( "com.mysql.jdbc.Driver");}catch(Exception e){out.print(e);} try{ String uri="jdbc:mysql://localhost/kucun"; Connection con=DriverManager.getConnection(uri,"root","123456"); Statement sql=con.createStatement(); int rs=sql.executeUpdate(updateString);






