资源描述
软件设计书
仓库管理系统
系别:应用数学系
专业:信息和计算科学
班级:1204
学号:060437
姓名:闫丹爱
第一章 可行性研究汇报
1.1引言
1.1.1目标
本软件是用来有效管理超市仓库货物数量及种类,以方便超市工作人员能够全方面了解超市仓库库存货物数量和种类来方便高效管理超市仓库。
该项目可行性研究汇报也是对超市仓库管理系统全方面考虑,是项目分析员进行深入工作前提,是软件开发人员成功开发项目标前提.此分析研究汇报能够使软件开发团体尽可能早估量研制课题可行性,能够在定义阶段较早认识到系统方案缺点,能够节省时间、财力和精力,而且避免了专业方面困难.及早地估计项目标可行性,在可行前提下取得最好实施方案。
1.1.2背景
伴随社会不停发展,物质不停丰富,为了满足大家需求,超市货物也是越来越丰富。为了方便超市管理人员立即有效了解仓库情况,愈加好管理超市货物,提升管理效率,从而提出本软件。
1.2.要求和目标
1.2.1基础要求
·功效:含有一定权限管理人员能够对货物售出和补充,和新增加商品和种类立即进行修改,同时还含有缺货提醒功效。
·性能:详实有效罗列出商品货物数量和种类,来方便超市管理人员。
·输入:含有一定权限管理人员对货物数量种类进行修改。
·输出:查询结果。
系统功效模块图1-1,仓库管理系统
货物列表
添加货物
修改货物
货物信息
删除货物
缺货提醒
进出货物
显示管理员
添加管理员
删除管理员
管理员列表
图1-1系统功效模块图
仓库管理人员
仓库管理
录入货物信息、更新货
查看管理人员
功效模块及流图简明描述:首先超市管理人员需要登录系统,假如登陆成功则以进入系统进行操作,不然会提醒错误,要求重新登录。登录成功后,管理人员能够依据自己需要进行操作。当添加货物种类,更改货物数量,全部需要管理人员登录系统后才能操作。当货物数量较少时,系统会自动提醒管理人员要进货了。本系统还能够管理管理人员登录,即能够对有权限操作该系统人员进行增、删、改功效。
·在安全和保密方面要求:对于有权限人员才能够进行对系统操作。
1.2.2开发目标
①方便使用者对仓库货物查询、删除、更新,降低人力和设备需求。
②方便了解进出仓库货物情况。
③立即为用户发出缺货提醒。
④提升工作效率。
⑤降低仓库管理及维护费用。
1.2.3含有条件
①开发条件:计算机试验室所提供环境即可。
②开发时间:开发全过程必需在3个月内完成。
③开发所需经费:无。
④运行系统:Window 7以上版本即可
⑤ 数据库:sqlserver 或sqlsever
1.3.社会原因方面可行性
1.3.1法律方面可行性
该系统开发和研制,将不会侵犯她人、集体和国家利益,不会违犯国家政策和法律。
1.3.2使用方面可行性
该系统操做简单,不需要专业培训,通常人员即可胜任。
1.4.结论
总而言之,该项目应立即开始进行研发。从人力资源优化角度来说,能够充足利用人力资源。从经济利益角度来看,即时开发完成即可用,能够立即赢利。但系统依旧有些不足,比如修改方面还需人工手动修改数量等。在系统交付使用中如有不足还望指出,方便改善。
第二章 仓库管理系统需求分析
本系统关键需求者是超市后台管理员。
2.1.本项目概述
本项目所开发超市仓库管理系统完成超市管理员对货物管理,降低数据遗漏情况,更方便管理人员浏览和操作,节省了人力物力。
2.2.系统通常性描述
因为本系统数据还算不上大型。所以数据库服务器和web服务器共用同一台计算机。系统中货物信息和管理员信息全部存放在sqlserver 数据库中。
2.2.1系统用例图‘图2-1系统用例图’,用例图说明:
图2-1系统用例图
本系统关键只针对含有权限理员进行操作,首先管理员必需含有正确账号和密码才能进入系统进行操作。进入系统后关键功效模块以下:
添加功效:能够添加货物具体信息同时还能够增加管理员。
修改功效:能够对货物全部信息进行修改。
删除功效:删除超市已经不存在货物信息同时还能够删除不存在管理员。
查询功效:可依据货物品牌或名称对货物进行查询,也能够依据管理员账号或管理员用户名对用户进行查询。
进货出货功效:能够对货物数量进行修改。
缺货提醒:当货物数量小于50件时在主页面会为管理员进行提醒已缺货。
更改密码功效:当某个管理员登录系统后能够更改自己密码。
2.2.2系统用类‘图2-2类图’,类图说明:
图2-2类图
类具体说明:
商品类 :
属性:
商品编号:商品编号是用来确定商品唯一性。
商品数量:说明商品库存量。
商品名称:说明商品名称。
方法:
登录系统:用于验证管理身份。
增加商品:用于增加系统内没有商品信息。
删除商品:仓库没有商品信息。
修改商品:用于修改商品具体信息。
进 货:用于只对要增加货物量商品进行操作。
出 货:用于只对要降低货物量商品进行操作。
缺货提醒:当商品数量低于10后会在主页上提醒缺货。
管理员类:
属性:
管理员ID:该属性是自动增加型,含有唯一性。
管理员账号:用于登录时账号。
管理员名称:该属性和账号一起能够识别唯一管理员。
管理员密码:用于登录时和账号一起用于身份验证。
方法:
增加管理员:能够给予没有权限人管理权限。
删除管理员:能够删除不存在管理员。
2.2.数据流图
对用户需求进行分析,画出系统数据流图,图3.1——图3.2所表示。
图 3.1 系统顶层数据流图
图 3.2 系统0层数据流图
图3.3 仓库管理系统1层DFD——“货物入库管理”加工分解图
2.2.5仓库管理系统E-R图
依据系统数据步骤图,我们能够列出以下系统所需数据项:
职员(职员号,姓名,密码,证件号,职员类型,是否职员)
商品(商品编号,商品名称,商品数量)
仓库(商品编号,商品名称,库存量)
入库(入库编号,商品编号,商品名称,入库数量,入库人,入库时间)
出库(出库编号,商品编号,商品名称,出库数量,出库人,出库时间)
仓库管理系统E-R模型图3.3-图所表示。
经过对系统结构化分析得到本系统有四大模块:
一、 系统管理:对用户部分添加,删除,修改。
二、 信息管理:对部分基础信息(商品,往来单位,仓库)管理。
三、 出入库管理:对出库入库管理。
四、 查询管理:对出库、入库单、库存信息查询。
图3.3实体之间关系E-R图
第三章 设计说明书
3.1 引言
3.1.1 系统概要及其运行环境
软件具体设计阶段是软件设计关键阶段,本阶段工作就是要对系统中每个模块给出足够具体过程性描述,所以也称为“过程设计”。具体设计根本目标就是确定应该怎样具体实现所需求系统,也就是说经过这一阶段设计,会得出对学生选课系统正确描述。其根本任务就是设计出程序“蓝图”
3.1.2 系统组成部分及其结构
本系统分为四大模块,即用户管理模块、出库模块、入库模块、库存管理模块。管理员模块可分为一般用户模块和管理员模块,库存管理模块包含查询模块和修改模块。具体操作请见类图
3.2 软件设计约束
本系统采取Java技术,基础上没有什么平台约束。在数据库方面,需要创建当地数据源。
3.2.1 设计目标和标准
本设计欲达成目标:能够使用户简单快捷完成商品出库和入库功效及库存管理功效。系统性能达成高效,实用,易于维护。
3.2.2 设计约束
(1)不管是一般用户还是管理员,全部能够在当地访问该系统。完成各自授权活动和工作。
(2)该系统考虑性能、安全、可靠性、易用、可扩展和可维护。
(3)整个开发过程应满足软件需求分析进度要求所要求时间。
3.3 软件设计描述
3.3.1 总体结构设计
本系统由以下多个功效模块组成:
用户管理模块汇总:
(1) 添加一般用户信息(仅管理员能够使用,能够添加用户到数据库中)
(2) 管理一般用户信息(仅管理员能够使用,能够对一般用户进行修改删除等操作)
库存管理模块汇总
(1) 查询入库信息(一般用户使用,对自己入库商品进行查询操作)
(2) 查询出库信息(一般用户使用,对所出库商品进行相关操作)
(3) 全部库存信息(对全部商品信息进行查询)
3.3.2 具体结构设计
用户
主界面
用户管理
商品出入库
库存管理
退出系统
图3-1仓库管理系统次序图
3.4 系统界面设计描述
当用户开启程序后真接显示主界面,在主界面中有‘用户管理’,‘商品入库’,‘商品出库’,‘库存管理’和退出系统。
当用户在未登录状态下实施任何操作时系统会自动判定是否已经登录,若用户还没有登录则显示登录界面,让用户进行登录。若登录帐号不存在则表示该用户还不是职员,故需要用户重新申请新用户,新用户类型为一般职员,当一般用户已经经过管理员审核,而且分配了相关权限后就能够登录系统。
若用户是管理员则该用户能够对一般用户进行相关修改和删除,而且还能够修改、查询、删除库存表及商品出入库表中相关信息。若用户是一般职员则只能进行商品出入库及查询。
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)
密码
Varchar(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(50)
库存量
Int
表3-5 goods
列名
属性
商品编号
Varchar(20)
商品名称
Varchar(50)
商品数量
Int
第四章 系统相关代码
4.1登录界面(关键代码)
public boolean isExistsEmply(String id){
boolean flags=false;
try
{
int count=0;
String sql1="select 职员号 from Users where 职员号=?";
PreparedStatement ps=conn.prepareStatement(sql1);
ps.setString(1, (String)id);
ResultSet result=ps.executeQuery();
while(result.next())
{
count=result.getRow();
}
result.close();
ps.close();
if (count>0)
{
this.UID=id;
flags=true;
getInfo(id);
return flags;
}
else
{
error.errorDialog((String)id);
}
}
catch(Exception e)
{
e.printStackTrace();
}
return flags;
}
//依据‘工号’分别获取对应信息
public void getInfo(String uid){
try
{
String sql2="select 职员姓名,密码,职员类型,是否职员 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();
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;
try
{
if (id.equals(UID) && pwd.equals(password) && type.equals(employtype))
{
isEmploy=true;
return isEmploy;
}
else
{
return isEmploy;
}
}
catch(Exception e)
{
e.printStackTrace();
}
return 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(){
try
{
String sql2="select * from OutStore";
Statement st=conn.createStatement();
ResultSet result=st.executeQuery(sql2);
Sdata2=new Object[Row2][Column2];
int n=0;
while(result.next())
{
Sdata2[n][0]=result.getString(1).toString().trim();
Sdata2[n][1]=result.getString(2).toString().trim();
Sdata2[n][2]=result.getString(3).toString().trim();
Sdata2[n][3]=result.getString(4).toString().trim();
Sdata2[n][4]=result.getString(5).toString().trim();
Sdata2[n][5]=result.getString(6).toString().trim();
n++;
}
result.close();
st.close();
return Sdata2;
}
catch(Exception e)
{
e.printStackTrace();
}
return Sdata2;
}
//先判定库存表中是否存在要出库商品编号
public boolean isExistsGid(String gid){
boolean flags=false;
try
{
int 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 (count>0)
{
flags=true;
return flags;
}
else
{
return flags;
}
}
catch(Exception e)
{
e.printStackTrace();
}
return flags;
}
//判定库存表中库存量是否满足出库笨条件
public boolean lookNumber(String gid,int number){
boolean flags=false;
try
{
int num=0;
String sql4="select 库存量 from StoreManage where 商品编号=?";
PreparedStatement ps=conn.prepareStatement(sql4);
ps.setString(1, gid);
ResultSet result=ps.executeQuery();
while(result.next())
{
num=result.getInt(1);
}
result.close();
ps.close();
if (number<=num)
{
flags=true;
}
else
flags=false;
return flags;
}
catch(Exception e)
{
e.printStackTrace();
}
return flags;
}
//商品出库向出库表写入一条数据出库统计
public void newStoreOuput(String outgid,String outgname,int outgnum){
try
{
String sql5="insert into OutStore (商品编号,商品名称,出库数量,出库人,出库时间) values(?,?,?,?,getdate())";
PreparedStatement ps=conn.prepareStatement(sql5);
ps.setString(1, outgid);
ps.setString(2, outgname);
ps.setInt(3, outgnum);
ps.setString(4, outpeople);
ps.executeQuery();
ps.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//这是要修改库存表中库存量
public void updateStoreManage(String outgid ,int num){
try
{
String sql6="update StoreManage set 库存量=(select 库存量 from StoreManage where 商品编号=?)-? where 商品编号=?";
PreparedStatement ps=conn.prepareStatement(sql6);
ps.setString(1,outgid);
ps.setInt(2, num);
ps.setString(3, outgid);
ps.executeQuery();
ps.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//向出库表模型中添加一条新一出库统计
public Object addOutStoreToTable(String outgid){
try
{
String sql7="select * from OutStore where 商品编号=? and 出库编号=(select count(*) from OutStore)";
PreparedStatement ps=conn.prepareStatement(sql7);
ps.setString(1, outgid);
ResultSet result=ps.executeQuery();
while(result.next())
{
newStoreOfOut[0]= new Integer(result.getInt(1));
newStoreOfOut[1]=result.getString(2).toString().trim();
newStoreOfOut[2]=result.getString(3).toString().trim();
newStoreOfOut[3]=new Integer(result.getInt(4));
newStoreOfOut[4]=result.getString(5).toString().trim();
newStoreOfOut[5]=result.getString(6).toString().trim();
}
result.close();
ps.close();
return newStoreOfOut;
}
catch(Exception e)
{
e.printStackTrace();
}
return newStoreOfOut;
}
4.3入库界面
public Object setSdata(){
try
{
String sq2="select * from InStore";
Statement st=conn.createStatement();
ResultSet result=st.executeQuery(sq2);
Sdata=new Object[Row][Column];
int n=0;
while(result.next())
{
Sdata[n][0]=result.getString(1).toString().trim();
Sdata[n][1]=result.getString(2).toString().trim();
Sdata[n][2]=result.getString(3).toString().trim();
Sdata[n][3]=result.getString(4).toString().trim();
Sdata[n][4]=result.getString(5).toString().trim();
Sdata[n][5]=result.getString(6).toString().trim();
n++;
}
result.close();
st.close();
return Sdata;
}
catch(Exception e)
{
e.printStackTrace();
}
return Sdata;
}
//向入库表中插入新数据
public void goodsInserData(String gid,String gname,int gnum){
try
{
String sql3="insert into InStore (商品编号,商品名称,入库数量,入库人,入库时间) values(?,?,?,?,getdate())";
PreparedStatement ps=conn.prepareStatement(sql3);
ps.setString(1, gid);
ps.setString(2, gname);
ps.setInt(3, gnum);
ps.setString(4, inpeople);
ps.executeUpdate();
ps.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//判定库存表中是否有相同商品编号商品存在
public boolean isExistsGood(String gid){
boolean flags=false;
try
{
String sql4="select * from StoreManage where 商品编号=?";
PreparedStatement ps=conn.prepareStatement(sql4);
ps.setString(1, gid);
ResultSet result=ps.executeQuery();
int i=0;
while(result.next())
{
i++;
}
result.close();
ps.close();
if (i>0)
{
//假如库存表中存在该商品商品编号,则调用修改函数
flags=true;
return flags;
}
else
{
//若库存表中不存在则调用插入函数新插入一条数据
return flags;
}
}
catch(Exception e)
{
e.printStackTrace();
}
return flags;
}
//若库存表中不存在则新建一条信息
public void insertStoreManage(String gid,String gname,int gnum){
try
{
String 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、先获取原有库存量
public int getStoreNumber(String gid){
int num=0;
try
{
String 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();
return num;
}
catch(Exception e)
{
e.printStackTrace();
}
return num;
}
//2、再修改库存量
public void updateStoreManage(int count,String gid){
try
{
int NUM=getStoreNumber(gid)+count;
String sql7="update StoreManage set 库存量=NUM where 商品编号=?";
PreparedStatement ps=conn.prepareStatement(sql7);
ps.setString(1,gid);
//ps.setInt(1, count);
//ps.setString(2, gid);
ps.executeUpdate();
ps.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
//error!没有注意到出库表会存在多条相同统计
//向入库表模型中添加一条入库统计
public void addStoreOnInStore(String gid){
Object[] newRow=new Object[6];
try
{
String sql8="select * from InStore where 商品编号=? and 入库编号=(select count(*) from InStore)";
PreparedStatement ps=conn.prepareStatement(sql8);
ps.setString(1,gid);
ResultSet result=ps.executeQuery();
while(result.next())
{
newRow[0]= new Integer(result.getInt(1));
newRow[1]=result.getString(2).toString().trim();
newRow[2]=result.getString(3).toString().trim();
newRow[3]=new Integer(result.getInt(4));
newRow[4]=result.getString(5).toString().trim();
newRow[5]=result.getString(6).toString().trim();
}
result.close();
ps.close();
//向表模式中添加一行新数据
dtm1.addRow(newRow);
}
catch(Exception e)
{
e.printStackTrace();
}
}
4.4库存管理界面
public Object setSData(){
try
{
String sql2="select * from StoreManage";
Statement st=conn.createStatement();
ResultSet result2=st.executeQuery(sql2);
Sdata=new Object[Row][Column];
int n=0;
while(result2.next())
{
Sdata[n][0]=result2.getString(1).toString().trim();
Sdata[n][1]=re
展开阅读全文