1、软件设计书仓库管理系统系别:应用数学系专业:信息与计算科学班级:1204学号:2012060437姓名:闫丹爱第一章 可行性研究报告1.1 引言1.1.1 目的本软件是用来有效的管理超市仓库货物数量及种类,以方便超市工作人员可以全面的了解超市仓库库存货物数量和种类来方便高效的管理超市仓库。该项目可行性研究报告也是对超市仓库管理系统的全面考虑,是项目分析员进行进一步工作的前提,是软件开发人员成功的开发项目的前提.此分析研究报告可以使软件开发团体尽可能早的估计研制课题的可行性,可以在定义阶段较早的认识到系统方案的缺陷,可以节省时间、财力和精力,并且避免了专业方面的困难.及早地预测项目的可行性,在可
2、行的前提下获得最好的实施方案。1.1.2 背景随着社会的不断发展,物质的不断丰富,为了满足人们的需求,超市的货物也是越来越丰富。为了方便超市管理人员及时有效的了解仓库情况,更好的管理超市货物,提高管理效率,从而提出本软件。1.2.要求和目标1.2.1 基本要求功能:具有一定权限的管理人员可以对货物的售出和补充,以及新增加的商品和种类及时的进行修改,同时还具有缺货提示功能。性能:详实有效的罗列出商品货物的数量和种类,来方便超市管理人员。输入:具有一定权限的管理人员对货物数量种类进行修改。输出:查询结果。系统功能模块图 1-1,仓库管理系统货物列表添加货物修改货物货物信息删除货物缺货提示进出货物显
3、示管理员添加管理员删除管理员管理员列表图 1-1 系统功能模块图仓库管理人员仓库管理录入货物信息、更新货查看管理人员功能模块及流图的简要描述:首先超市管理人员需要登录系统,如果登陆成功则以进入系统进行操作,否则会提示错误,要求重新登录。登录成功后,管理人员可以根据自己的需要进行操作。当添加货物种类,更改货物数量,都需要管理人员登录系统后才能操作。当货物数量较少时,系统会自动提示管理人员要进货了。本系统还可以管理管理人员的登录,即可以对有权限操作该系统的人员进行增、删、改功能。在安全与保密方面的要求:对于有权限的人员才可以进行对系统的操作。1.2.2 开发目标方便使用者对仓库货物的查询、删除、更
4、新,减少人力和设备的需求。方便了解进出仓库货物情况。及时为用户发出缺货提示。提高工作的效率。降低仓库管理及维护费用。1.2.3 具备条件开发条件:计算机实验室所提供的环境即可。开发时间:开发的全过程必须在 3 个月内完成。开发所需的经费:无。运行的系统:Window 7 以上版本即可 数据库:sqlserver 2000 或者 sqlsever 20051.3.社会因素方面的可行性1.3.1 法律方面的可行性该系统的开发和研制,将不会侵犯他人、集体和国家的利益,不会违犯国家政策和法律。1.3.2 使用方面的可行性该系统操做简单,不需要专业培训,一般人员即可胜任。1.4.结论综上所述,该项目应立
5、即开始进行研发。从人力资源优化角度来说,可以充分利用人力资源。从经济利益的角度来看,即时开发完成即可用,可以立即赢利。但系统仍旧有些不足,例如修改方面还需人工手动修改数量等。在系统的交付使用中如有不足还望指出,以便改进。第二章 仓库管理系统需求分析本系统的主要需求者是超市后台管理员。2.1.本项目概述本项目所开发的超市仓库管理系统完成超市管理员对货物的管理,减少数据漏掉的情况,更方便管理人员的浏览和操作,节省了人力物力。 2.2.系统一般性描述由于本系统的数据还算不上大型的。所以数据库服务器与 web 服务器共用同一台计算机。系统中的货物信息和管理员信息都存放在 sqlserver 数据库中。
6、2.2.1 系统的用例图图 2-1 系统用例图 ,用例图说明:System信 信 信 信 信信 信 信 信 信 信信 信 信信 信信 信信 信信 信信 信 信 信信 信信 信信 信 信 信图 2-1 系统用例图本系统主要只针对具有权限的理员进行操作,首先管理员必须具有正确的账号和密码才能进入系统进行操作。进入系统后的主要功能模块如下:添加功能:可以添加货物的具体信息同时还可以增加管理员。修改功能:可以对货物的所有信息进行修改。删除功能:删除超市已经不存在的货物的信息同时还可以删除不存在的管理员。查询功能:可根据货物的品牌或者名称对货物进行查询,也可以根据管理员账号或者管理员用户名对用户进行查询
7、。进货出货功能:可以对货物的数量进行修改。缺货提示:当货物的数量小于 50 件时在主页面会为管理员进行提示已缺货。更改密码功能:当某个管理员登录系统后可以更改自己的密码。2.2.2 系统的用类图 2-2 类图 ,类图说明:信 信 (shop)-人 人 人 (Sid)-人 人 人 人 (Ssign)-人 人 人 人 (Sname)-人 人 (Sinprice)-人 人 (Soutprice)-人 人 人 人 (Snum)+人 人 人 人 ()+人 人 人 人 ()+人 人 人 人 人 人 ()+人 人 人 人 人 人 ()+人 人 人 人 人 人 ()+人 人 人 人 人 人 ()+人 人 人
8、人 ()信 信 信 (User)-人 人 人 人 ID(Uid)-人 人 人 人 人 (Uname)-人 人 人 人 人 (Upassword)+人 人 人 人 人 ()+人 人 人 人 人 人 人 ()+人 人 人 人 人 人 人 ()人 人*1DBConnection-url-username-password+getConnection()+closeConnection()+closeStatement()+closeResultSet()PageUtil-pageSize-recordCount-currentPage+PageUtil()+getRecordCount()+getC
9、urrentPage()+setCurrentPage()+getNextPage()+getPrePage()+getPageSize()+getPageCount()+getFromIndex()+getToIndex()ShopDAO+get()+update()+delete()+save()+quickSeach()+upNumIn()UserDAO+queryAll()+delete()+save()+quickSeach()+login()+updatePassword()+UserModel()图 2-2 类图类的详细说明:商品类 :属性:商品编号:商品编号是用来确定商品唯一性
10、的。商品数量:说明商品的库存量。商品名称:说明商品的名称。方法:登录系统:用于验证管理身份。增加商品:用于增加系统内没有的商品信息。删除商品:仓库没有的商品信息。修改商品:用于修改商品的具体信息。进 货:用于只对要增加货物量的商品进行操作。出 货:用于只对要减少货物量的商品进行操作。缺货提示:当商品数量低于 10 后会在主页上提示缺货。管理员类:属性:管理员 ID:该属性是自动增长型,具有唯一性。管理员账号:用于登录时的账号。管理员名称:该属性和账号一起可以识别唯一的管理员。管理员密码:用于登录时和账号一起用于身份验证。方法:增加管理员:可以赋予没有权限的人管理权限。删除管理员:可以删除不存在
11、的管理员。2.2.数据流图对用户需求进行分析,画出系统的数据流图,如图 3.1图 3.2 所示。图 3.1 系统的顶层数据流图图 3.2 系统的 0 层数据流图图 3.3 仓库管理系统的 1 层 DFD“货物入库管理”加工的分解图2.2.5 仓库管理系统的 E-R 图根据系统数据流程图,我们可以列出以下系统所需的数据项:员工(员工号,姓名,密码,证件号,员工类型,是否员工)商品(商品编号,商品名称,商品数量)仓库(商品编号,商品名称,库存量)入库(入库编号,商品编号,商品名称,入库数量,入库人,入库时间) 出库(出库编号,商品编号,商品名称,出库数量,出库人,出库时间) 仓库管理系统的 E-R
12、 模型如图 3.3-图所示。通过对系统结构化的分析得到本系统有四大模块:一、 系统管理:对用户的一些添加,删除,修改。二、 信息管理:对一些基本信息(商品,往来单位,仓库)的管理。三、 出入库管理:对出库入库的管理。四、 查询管理:对出库、入库单、库存信息的查询。图 3.3 实体之间关系-图第三章 设计说明书3.1 引言3.1.1 系统概要及其运行环境软件详细设计阶段是软件设计的重要阶段,本阶段的工作就是要对系统中的每个模块给出足够详细的过程性描述,因此也称为“过程设计” 。详细设计的根本目的就是确定应该怎样具体实现所需求的系统,也就是说经过这一阶段的设计,会得出对学生选课系统的精确描述。其根
13、本任务就是设计出程序的“蓝图”3.1.2 系统的组成部分及其结构本系统分为四大模块,即用户管理模块、出库模块、入库模块、库存管理模块。管理员模块可分为普通用户模块和管理员模块,库存管理模块包括查询模块和修改模块。详细操作请见类图3.2 软件设计约束本系统采用 Java 技术,基本上没有什么平台约束。在数据库方面,需要创建本地数据源。3.2.1 设计目标和原则本设计欲达到的目标:能够使用户简单快捷的完成商品出库和入库的功能及库存管理功能。系统的性能达到高效,实用,易于维护。3.2.2 设计约束(1)无论是普通用户还是管理员,都可以在本地访问该系统。完成各自授权的活动和工作。(2)该系统考虑性能、
14、安全、可靠性、易用、可扩展和可维护。(3)整个开发过程应满足软件需求分析的进度要求所规定的时间。3.3 软件设计描述3.3.1 总体结构设计 本系统由以下几个功能模块组成:用户管理模块汇总:(1) 添加普通用户信息(仅管理员可以使用,可以添加用户到数据库中)(2) 管理普通用户信息(仅管理员可以使用,可以对普通用户进行修改删除等操作)库存管理模块汇总 (1) 查询入库信息(普通用户使用,对自己入库的商品进行查询操作)(2) 查询出库信息(普通用户使用,对所出库的商品进行相关操作)(3) 所有库存信息(对所有商品信息进行查询)3.3.2 详细结构设计用户 主界面用户管理商品出入库库存管理退出系统
15、图 3-1 仓库管理系统顺序图3.4 系统界面设计描述当用户启动程序后真接显示主界面,在主界面中有用户管理 , 商品入库 , 商品出库 , 库存管理以及退出系统。当用户在未登录的状态下执行任何操作时系统会自动判断是否已经登录,若用户还没有登录则显示登录界面,让用户进行登录。若登录的帐号不存在则表示该用户还不是员工,故需要用户重新申请新的用户,新用户的类型为普通员工,当普通用户已经通过管理员审核,并且分配了相关的权限后就可以登录系统。若用户是管理员则该用户可以对普通用户进行相关的修改和删除,而且还可以修改、查询、删除库存表及商品出入库表中的相关信息。若用户是普通员工则只能进行商品的出入库及查询。
16、3.4.1 登录界面设计用户通过输入登录的账号和密码及类型系统进行验证图 3-2 用户登录界面3.4.2 商品出入库界面设计图 3-3 商品出入库界面设计3.4.3 库存界面设计图 3-4 库存界面设计3.5 数据库设计 数据库名:StoreHouseDB用户表:Users 主键:员工号商品入库表:InStore 主键:入库编号商品出库表:OutStore 主键:出库编号库存表:StoreManage 主键:商品编号商品表:goods 主键: 商品编号3.5.1 建表下面具体给出各个表表 3-1 Users列名 属性员工号 Varchar(13)员工姓名 Varcahar(20)密码 Varc
17、har(16)证件号 Varchar(18)员工类型 Varchar(8)是否员工 Varchar(2)表 3-2 InStore列名 属性入库编号 int商品编号 Varchar(20)商品名称 Varchar(50)入库数量 Int 入库人 Varchar(13)入库时间 Datetime()表 3-3 OutStrore列名 属性出库编号 Int 商品编号 Varchar(20)商品名称 Varcahr(50)出库数量 Int 出库人 Varchar(13)出库时间 Datetime()表 3-4 StoreManage列名 属性商品编号 Varchar(20)商品名称 Varchar(
18、50)库存量 Int 表 3-5 goods列名 属性商品编号 Varchar(20)商品名称 Varchar(50)商品数量 Int 第四章 系统相关代码4.1 登录界面(主要代码)public boolean isExistsEmply(String id)boolean flags=false;tryint count=0;String sql1=“select 员工号 from Users where 员工号=?“;PreparedStatement ps=conn.prepareStatement(sql1);ps.setString(1, (String)id);ResultSet
19、 result=ps.executeQuery();while(result.next()count=result.getRow();result.close();ps.close();if (count0)this.UID=id;flags=true;getInfo(id);return flags;elseerror.errorDialog(String)id);catch(Exception e)e.printStackTrace();return flags;/根据工号分别获取对应的的信息public void getInfo(String uid)tryString sql2=“se
20、lect 员工姓名,密码,员工类型,是否员工 from Users where 员工号=?“;PreparedStatement pps=conn.prepareStatement(sql2);pps.setString(1,uid);ResultSet result=pps.executeQuery();while(result.next()name=result.getString(1).toString().trim();password=result.getString(2).trim();employtype=result.getString(3).toString().trim()
21、;emplooy=result.getString(4).toString().trim();result.close();pps.close();catch(Exception e)e.printStackTrace();/对登录的工号进行密码验证public boolean login(String id,String pwd,String type)boolean isEmploy=false;tryif (id.equals(UID) return isEmploy;elsereturn isEmploy;catch(Exception e)e.printStackTrace();re
22、turn isEmploy;/判断用户是否已经通过管理员的审核public boolean Y_NEmply()boolean isE=false;if (this.emplooy.equals(“是“)System.out.println(“员工号:“+UID+“已经通过了审核.“);main.showMainFarme();isE=true;return isE;else if (this.emplooy.equals(“否“)error.noEmplo0y(UID);return isE;return isE;4.2 出库界面(主要代码)public Object setSdata2()
23、tryString sql2=“select * from OutStore“;Statement st=conn.createStatement();ResultSet result=st.executeQuery(sql2);Sdata2=new ObjectRow2Column2;int n=0;while(result.next()Sdata2n0=result.getString(1).toString().trim();Sdata2n1=result.getString(2).toString().trim();Sdata2n2=result.getString(3).toStri
24、ng().trim();Sdata2n3=result.getString(4).toString().trim();Sdata2n4=result.getString(5).toString().trim();Sdata2n5=result.getString(6).toString().trim();n+;result.close();st.close();return Sdata2;catch(Exception e)e.printStackTrace();return Sdata2;/先判断库存表中是否存在要出库的商品编号public boolean isExistsGid(Strin
25、g gid)boolean flags=false;tryint count=0;String sql3=“select count(商品编号 ) from StoreManage where 商品编号=?“;PreparedStatement ps=conn.prepareStatement(sql3);ps.setString(1, gid);ResultSet result=ps.executeQuery();while(result.next()count+;result.close();ps.close();if (count0)flags=true;return flags;els
26、ereturn flags;catch(Exception e)e.printStackTrace();return flags;/判断库存表中的库存量是否满足出库的笨条件public boolean lookNumber(String gid,int number)boolean flags=false;tryint num=0;String sql4=“select 库存量 from StoreManage where 商品编号=?“;PreparedStatement ps=conn.prepareStatement(sql4);ps.setString(1, gid);ResultSe
27、t result=ps.executeQuery();while(result.next()num=result.getInt(1);result.close();ps.close();if (number0)/如果库存表中存在该商品的商品编号,则调用修改函数flags=true;return flags;else/若库存表中不存在则调用插入函数新插入一条数据return flags;catch(Exception e)e.printStackTrace();return flags;/若库存表中不存在则新建一条信息public void insertStoreManage(String gi
28、d,String gname,int gnum)tryString sql5=“insert into StoreManage (商品编号,商品名称,库存量) values(?,?,?)“;PreparedStatement ps=conn.prepareStatement(sql5);ps.setString(1, gid);ps.setString(2, gname);ps.setInt(3, gnum);ps.executeUpdate();ps.close();catch(Exception e)e.printStackTrace();/如果存在直接修改原有的数量/1、先获取原有的库存
29、量public int getStoreNumber(String gid)int num=0;tryString sql6=“select 入库数据 from StoreManage where 商品编号=?“;PreparedStatement ps=conn.prepareStatement(sql6);ps.setString(1,gid);/ps.executeQuery();ResultSet result=ps.executeQuery();while(result.next()num=result.getInt(1);result.close();ps.close();retu
30、rn num;catch(Exception e)e.printStackTrace();return num;/2、再修改库存量public void updateStoreManage(int count,String gid)tryint NUM=getStoreNumber(gid)+count;String sql7=“update StoreManage set 库存量=NUM where 商品编号=?“;PreparedStatement ps=conn.prepareStatement(sql7);ps.setString(1,gid);/ps.setInt(1, count)
31、;/ps.setString(2, gid);ps.executeUpdate();ps.close();catch(Exception e)e.printStackTrace();/error!没有注意到出库表会存在多条相同的记录/向入库表模型中添加一条入库记录public void addStoreOnInStore(String gid)Object newRow=new Object6;tryString sql8=“select * from InStore where 商品编号=? and 入库编号=(select count(*) from InStore)“;PreparedS
32、tatement ps=conn.prepareStatement(sql8);ps.setString(1,gid);ResultSet result=ps.executeQuery();while(result.next()newRow0= new Integer(result.getInt(1);newRow1=result.getString(2).toString().trim();newRow2=result.getString(3).toString().trim();newRow3=new Integer(result.getInt(4);newRow4=result.getS
33、tring(5).toString().trim();newRow5=result.getString(6).toString().trim();result.close();ps.close();/向表模式中添加一行新数据dtm1.addRow(newRow);catch(Exception e)e.printStackTrace();4.4 库存管理界面public Object setSData()tryString sql2=“select * from StoreManage“;Statement st=conn.createStatement();ResultSet result2
34、=st.executeQuery(sql2);Sdata=new ObjectRowColumn;int n=0;while(result2.next()Sdatan0=result2.getString(1).toString().trim();Sdatan1=result2.getString(2).toString().trim();Sdatan2=result2.getInt(3);n+;result2.close();st.close();return Sdata;catch(Exception e)System.out.println(e.getMessage();return S
35、data;public void init()/先调用方法获得表头和二维表的表数据/this.setSData();/this.setHeader();this.setTitle(“天涯仓库管理“);this.setSize(700,300);this.setLocation(300, 150);this.setLayout(new GridLayout(2,1);dtm1=new DefaultTableModel(Sdata,Sheader);jtable=new JTable(dtm1);pane1=new JScrollPane(jtable);jtable.setRowHeight(
36、30);jtable.setGridColor(Color.blue);jp1.add(jlbl1);jp1.add(jtxt1);jp1.add(jlbl2);jp1.add(jtxt2);jp1.add(jlbl3);jp1.add(jtxt3);jp1.add(btnupdate);jp1.add(btndel);btnupdate.addActionListener(this);btndel.addActionListener(this);jtable.addMouseListener(this);/dtm1.addTableModelListener(jtable);this.add
37、(pane1);this.add(jp1);this.show();public boolean UpdateStoreDate1(String goodid,String goodname,int goodnum)boolean flags=false;tryString Sql3=“update StoreManage set 商品名称=?,库存量=? where 商品名称=goodid“;PreparedStatement ps=conn.prepareStatement(Sql3);ps.setString(1, goodname);ps.setInt(2, goodnum);ps.e
38、xecuteUpdate();flags=true;catch(Exception e)System.out.println(e.getMessage();return flags;/更新数据public boolean UpdateStoreDate(String goodid,String goodname,int goodnum)boolean flags=false;tryString Sql3=“update StoreManage set 商品名称=?,库存量=? where 商品名称=?“;PreparedStatement ps=conn.prepareStatement(Sq
39、l3);ps.setString(1, goodname);ps.setInt(2, goodnum);ps.setString(3, goodid);ps.executeUpdate();ps.close();flags=true;catch(Exception e)System.out.println(e.getMessage();return flags;/删除选中的数据public boolean DelStoreDate(String goodid)boolean flags=false;tryString sql4=“delete from StoreManage where 商品
40、编号=?“;PreparedStatement ps=conn.prepareStatement(sql4);ps.setString(1, goodid);ps.executeUpdate();ps.close();flags=true;catch(Exception e)System.out.println(e.getMessage();return flags;/判断是否缺货public boolean IsDeletio()boolean flags=false;tryString sql5=“select count(商品编号 ) from StoreManage where 库存量
41、0)flags=true;catch(Exception e)System.out.println(e.getMessage();return flags;第五章 测试计划报告5.1.引言5.1.1 目的本软件是用来有效的管理超市仓库货物数量及种类,以方便超市工作人员可以全面的了解超市仓库库存货物数量和种类来方便高效的管理超市仓库。该项目可行性研究报告也是对超市仓库管理系统的全面考虑,是项目分析员进行进一步工作的前提,是软件开发人员成功的开发项目的前提.此分析研究报告可以使软件开发团体尽可能早的估计研制课题的可行性,可以在定义阶段较早的认识到系统方案的缺陷,可以节省时间、财力和精力,并且避免了
42、专业方面的困难.及早地预测项目的可行性,在可行的前提下获得最好的实施方案。5.1.2 背景随着社会的不断发展,物质的不断丰富,为了满足人们的需求,超市的货物也是越来越丰富。为了方便超市管理人员及时有效的了解仓库情况,更好的管理超市货物,提高管理效率,从而提出本软件。系统名称:超市仓库管理系统。5.1.3 测试环境测试的重点是选课管理系统的选课功能和登录界面的功能。5.1.4 测试过程及结果根据需求分析文档,设计测试用例,填写预期结果,在测试时,填写实际结果。5.1.5 参考资料1李东生、崔冬华等编著的软件工程原理、方法和工具5.1.6 术语 C/.S:客户端/服务器。5.2 测试内容5.2.1
43、 测试名称给出第 N 项测试的名称(N 为测试序号)5.2.2 测试进度给出测试的日期和工作内容的详细安排5.2.3 测试人员给出测试负责人和所有参加测试的单位及负责人5.2.4 测试用例重点给出输入数据,输出结果,及测试步骤5.2.5 评价说明所选择的测试用例能够检查的范围和局限性5.2.6 附录列出测试用例清单,分别标志每个测试用例并给出驱动程序清单等5.3.实验过程5.3.1 登录界面的测试测试 1: 名称: 系统登录操作测试目的:测试系统登录界面的稳定性内容:账号,密码的合法性检查数据库数据 表 3-1 管理员表 3-2 普通员工表 3-3 是否员工(是)表 3-4 是否员工(否)登录
44、失败的结果试图如下:图 3-1 登录失败试图测试 1.1:测试用例输入 输出账号 密码 身份 测试结果 asdsf 普通员工 用户名或密码错误12345 asds 普通员工 用户名或密码错误 普通员工 用户名或密码错误TCT01 000000 普通员工 用户名或密码错误admin admin 普通员工 用户名或密码错误0001 123456 普通员工 登录成功,进入 sadas 管理员 用户名或密码错误46464 asdda 管理员 用户名或密码错误 管理员 用户名或密码错误TCT01 123456 管理员 用户名或密码错误0001 123456 管理员 用户名或密码错误admin admin
45、 管理员 登录成功,进入用户管理界面的测试测试 1:名称: 用户管理操作测试目的:测试系统用户管理的功能内容:使用不同数据,对用户管理功能进行合理性测试数据库信息:表 3-5 用户管理用户管理界面图 3-2 用户管理试图用户管理失败界面图 3-3 用户管理失败测试图总结本次仓库管理系统从开始的可行性研究到需求分析再到设计开发直至测试完成,期间出现了不少的问题和漏洞,最主要的就是设计的时候考虑不周全导致系统功能不完善,不过经过多次的测试检查以后,逐渐达到了预期的目标,可能其中还有不完善的,不过我们很乐意接受用户的建议进行修改完善,争取达到预期效果,使老师满意,用户放心。仓库管理系统虽然规模不大,但是对于我们初次独自做系统来说还是有点困难的,这对我来说是个挑战也是个机会,从中我知道了做系统最不可少的是耐心和对全局观的把握,只有这样才能做的更好。当然如果没有老师和同学的帮助也不可能如此顺利完成,谢谢老师和同学!