仓库管理系统的分析与设计.docx
《仓库管理系统的分析与设计.docx》由会员分享,可在线阅读,更多相关《仓库管理系统的分析与设计.docx(17页珍藏版)》请在冰豆网上搜索。
仓库管理系统的分析与设计
《仓库管理系统的分析与设计》
一、开发背景
随着科学技术的发展,社会进步,计算机迅速的发展,仓库管理的方法也日新月异,以前全是由人管理的方法现存在很多的缺点:
管理效率低,劳动强度大,信息处理速度低而且准确率也不够令人满意。
为了提高仓库管理效率,减轻劳动强度提高,信息处理速度和准确性;为仓库管理员提供更方便、科学的服务项目。
为仓库管理员提供的一种更先进、科学的服务系统。
于是我们便选择了由计算机来设计一个仓库管理系统的方案。
让计算机对仓库进行自动管理,仓库管理员可以直接在计算机上实现仓库的信息管理,并能在一定程度上实现自动化。
我们在现行系统初步调查的基础上提出了新系统目标,即新系统建立后所要求达到的运行指标,这是系统开发和评价的依据。
可行性分析:
(1)技术可行性
根据客户提出的系统功能、性能及实现系统的各项约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术以较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。
同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发。
(2)经济可行性
估算新系统的成本效益分析,其中包括估计项目开发的成本,开发费用和今后的运行、维护费用,估计新系统将获得的效益,估算开发成本是否回高于项目预期的全部经费。
并且,分析系统开发是否会对其它产品或利润带来一定影响。
①支出:
基础投资:
硬件设备:
PC机
软件设备:
WINDOWS98/2000、POWERBUILDE8.0、WORD2000
其它一次性支出:
软件设计和开发费用
经常性支出:
软件维护费用、软件使用费用。
②效益:
系统的效益可以从经济效益和社会效益两方面考虑。
对于仓库管理系统则应着重分析其社会效益。
例如,系统投入运行后可以使仓库管理实现科学化、规范化。
曾强了工作人员对仓库管理能力、提高了工作效率。
(3)运行可行性
新系统的研制和开发是充分得考虑工作人员对仓库的易于管理,管理者方便查询设备信息效率。
从而能完全满足使用者的要求。
(4)法律可行性
新系统的研制和开发,将不会侵犯他人、集体和国家的利益,不会违反国家政策和法律。
二、需求分析
本报告的编写目的是为了用最小的代价、在尽可能短的时间内确定问题是否能够解决,以及是否值得解决,并对软件的前景进行分析。
为了适应日趋激烈的市场竞争,企业需要对自身的经营状况有充分的了解,并通过有效的管理不断提高效率。
因此,对仓库的管理也成为提高生产经营效率的一个重要途径。
本仓库管理系统是针对企业仓库材料的出入库登记和查询统计等方面工作而开发的管理软件,是一个实用的管理信息系统,针对企业的实际需要,分析了企业仓库管理系统的功能,描述了两子系统的模块结构设计及实施过程中的技术要点。
(1)设备管理系统:
设备入库出库的服务,在新设备入库前,需输入设备的基本信息,并记录。
(2)人员管理系统:
包括添加仓库的用户,建立用户时需选定用户的权限等级。
仓库管理员可修改其他用户的密码和权限等级等信息。
(3)查询服务系统:
库存信息查询,使仓库的用户可以随时知道设备的储存量。
查询设备出入库的信息,了解仓库里设备的进出情况。
三、业务流程图
四、数据流图与数据字典
根据系统功能描述,采用面向数据流的分析方法,绘制出系统的数据流图。
1、数据流图
(1)顶层图
(2)0层图
2、数据字典
(1)数据流的描述
数据流编号:
D001
数据流名称:
设备入/还库信息
简述:
设备入/还库数量、日期
数据流来源:
采购员/经办人员
数据流去向:
仓库管理系统
数据流组成:
设备编号+设备名+入库日期+入库数量
数据流量:
1000/天
高峰流量:
3000/天
数据流编号:
D002
数据流名称:
设备出库信息
简述:
设备出库数量、日期
数据流来源:
库存信息查询
数据流去向:
经办人员
数据流组成:
设备编号+设备名+入库日期+入库数量
数据流量:
1000/天
高峰流量:
3000/天
数据流编号:
D003
数据流名称:
设备余额
简述:
设备数量能不能借出
数据流来源:
出库时库存检查
数据流去向:
经办人员
数据流组成:
设备编号+设备名+设备数量
数据流量:
100/天
高峰流量:
300/天
数据流编号:
D004
数据流名称:
人员的权限信息
简述:
人员的权限
数据流来源:
查询时对人员权限的检查
数据流去向:
经办人员
数据流组成:
人员权限等级
数据流量:
100/天
高峰流量:
300/天
数据流编号:
D005
数据流名称:
修改人员信息
简述:
修改人员的基本信息
数据流来源:
对人员权限的检查
数据流去向:
经办人员,管理人员,采购员
数据流组成:
人员账号
数据流量:
100/天
高峰流量:
300/天
(2)数据存储的描述
数据存储编号:
F001
数据存储名称:
人员信息
简述:
人员的基本信息
数据存储组成:
人员账号+人员密码+人员权限等级
关键字:
人员账号
相关联的处理:
P001
数据存储编号:
F002
数据存储名称:
库存信息
简述:
设备库存数量
数据存储组成:
设备编号+设备名+设备数量
关键字:
设备编号
相关联的处理:
P002
(3)处理逻辑的描述
处理逻辑编号:
P001
处理逻辑名称:
人员信息判断
简述:
人员的权限等级
输入的数据流:
D005
处理描述:
根据人员权限等级判断能否查询修改
输出的数据流:
D004
处理频率:
100次/天
处理逻辑编号:
P002
处理逻辑名称:
库存查询
简述:
查询需要借出的设备数量是否足够
输入的数据流:
D002
处理描述:
根据经办人员提供借出设备的设备号,查询需要借出设备的数量。
输出的数据流:
D003
处理频率:
100次/天
五、系统功能设计
根据数据流图,绘制出系统功能的层次图
各功能模块的功能描述:
用户信息维护:
包括修改密码、修改账号
设备入/出库服务:
记录入/出库的设备编号、数量、日期
六、数据库设计
1、E-R图
根据系统数据流图和数据字典,得出系统的各局部概念模型(E-R)和总体概念模型(E-R)如下图所示。
采购员采购设备E-R图:
管理员管理人员E-R图:
经办人借出归还设备E-R图:
全局E-R图:
各E-R图各实体的属性如下所示:
设备:
(设备号,设备名称)
采购员:
(账号,密码,权限等级)
经办人:
(账号,密码,权限等级)
管理员:
(账号,密码,权限等级)
仓库:
(仓库编号,仓库名称,仓库地址)
各E-R图中联系的属性如下所示:
入库信息:
(设备号,入库日期,供应商,供应商电话,数量,价格,采购员)
出库信息:
(设备号,出库日期,使用部门,数量,经办人,备注)
还库信息:
(设备号,还库日期,数量,经办人,归还部门)
2、关系模式的3NF设计
根据系统的总体概念设计模型、E-R图向关系模式的转化规则和数据库的范式理论,得到系统优化后的逻辑模型。
人员信息表:
(账号,密码,权限等级)
库存信息表:
(设备号,现有库存量)
设备信息表:
(设备号,设备名称)
入库信息表:
(设备号,入库日期,供应商,供应商电话,数量,价格,采购员)
出库信息表:
(设备号,出库日期,使用部门,数量,经办人,备注)
还库信息表:
(设备号,还库日期,数量,经办人,归还部门)
七、系统实施
1、系统界面
遵循人-机界面的设计原则设计应用系统界面。
本系统主要界面运行实时截图如下:
【登陆窗口】
【仓库管理系统主界面】
【设备信息查询】
2、系统的主要源代码:
privatevoidInStorage_Load(objectsender,System.EventArgse)
{
MyConn.Open();//打开连接
InStgAdapter.SelectCommand.CommandText="SELECT*FROMstorage_In";
InStgAdapter.SelectCommand.Connection=MyConn;
InStgAdapter.Fill(InStgInfo);//填充数据集
this.dataGrid1.DataSource=InStgInfo.DefaultView;
ISReport=(CurrencyManager)BindingContext[InStgInfo];
this.DataBindingsFunction();
DataGridTableStylets=newDataGridTableStyle();
ts.AlternatingBackColor=Color.Blue;//颜色设置
ts.MappingName=InStgInfo.TableName;
this.dataGrid1.Select(0);//选定第一列
this.textNum2.Enabled=false;
}
privatevoidDataBindingsFunction()//绑定
{
this.textNum2.DataBindings.Add("Text",InStgInfo,"设备号");
this.textDate.DataBindings.Add("Text",InStgInfo,"入库日期");
this.textSupply.DataBindings.Add("Text",InStgInfo,"供应商");
this.textPho.DataBindings.Add("Text",InStgInfo,"供应商电话");
this.textAmount.DataBindings.Add("Text",InStgInfo,"数量");
this.textCost.DataBindings.Add("Text",InStgInfo,"价格");
this.textMan.DataBindings.Add("Text",InStgInfo,"采购员");
}
privatevoidadd_button_Click(objectsender,System.EventArgse)//增加记录
{
try
{
ISReport=(CurrencyManager)this.BindingContext[InStgInfo];
ISReport.AddNew();//增加新记录
this.textNum2.Enabled=true;
this.textDate.Text=DateTime.Now.ToString();
this.change=true;//还库数量更改
this.oldtxtAmount="0";
this.textNum2.Focus();//焦点在第一个字段上
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
privatevoidsend_button_Click(objectsender,System.EventArgse)//提交信息
{
try
{
if(MyConn.State!
=ConnectionState.Open)
{
MyConn.Open();
}
if(this.textNum2.Enabled==true)
{
this.textNum2.Enabled=false;
}
ISReport=(CurrencyManager)this.BindingContext[InStgInfo];
if(this.textNum2.Text.Trim()==""||this.textAmount.Text.Trim()=="")//检查不能为空的字段
{
MessageBox.Show("设备号,数量不能为空!
");
return;
}
ISReport.EndCurrentEdit();
if(InStgInfo.GetChanges()!
=null)//信息是否被重新编辑
{
if(!
change)
{
if(this.oldtxtAmount==this.textAmount.Text.Trim())
change=false;
else
change=true;
}
InStgAdapter.UpdateCommand.Connection=MyConn;//更新到数据库
InStgAdapter.InsertCommand.Connection=MyConn;
InStgTran=MyConn.BeginTransaction();
InStgAdapter.UpdateCommand.Transaction=InStgTran;
InStgAdapter.InsertCommand.Transaction=InStgTran;
this.InStgAdapter.Update(InStgInfo);
if(change)//还库数量字段有新值了
{
stringnumber=this.textAmount.Text.Trim();
intchangeAmt=int.Parse(number)-int.Parse(oldtxtAmount);
stringdriveID=this.textNum2.Text.Trim();
SqlCommanddriveStorageUpdateCommand=newSqlCommand();//更新库存表的现有库存
driveStorageUpdateCommand.Connection=MyConn;//调用存储过程
driveStorageUpdateCommand.Transaction=InStgTran;
driveStorageUpdateCommand.CommandType=CommandType.StoredProcedure;
driveStorageUpdateCommand.CommandText="UpdateStorage";
driveStorageUpdateCommand.Parameters.Add("@i_Drive_ID",SqlDbType.Char,10);
driveStorageUpdateCommand.Parameters["@i_Drive_ID"].Value=driveID;
driveStorageUpdateCommand.Parameters.Add("@i_InOutNumber",SqlDbType.Int);
driveStorageUpdateCommand.Parameters["@i_InOutNumber"].Value=changeAmt;
driveStorageUpdateCommand.Parameters.Add("@o_ErrMessage",SqlDbType.VarChar,256);
driveStorageUpdateCommand.Parameters["@o_ErrMessage"].Direction=ParameterDirection.Output;
driveStorageUpdateCommand.ExecuteNonQuery();
InStgTran.Commit();
MessageBox.Show("OK");
}
}
else
{
MessageBox.Show("您没有修改任何信息");
return;
}
}
catch(Exceptionex)
{
MessageBox.Show("对不起,您输入的设备号错误!
!
具体信息:
"+ex.ToString());
if(InStgTran!
=null)
{
InStgTran.Rollback();
}
if(MyConn.State!
=ConnectionState.Closed)
{
MyConn.Close();
}
return;
}
}
privatevoidcancel_button_Click(objectsender,System.EventArgse)
{
try
{
ISReport=(CurrencyManager)this.BindingContext[InStgInfo];
ISReport.CancelCurrentEdit();//取消编辑
MessageBox.Show("已经取消!
");
}
catch(Exceptionex)
{
MessageBox.Show(ex.ToString());
}
return;
}
privatevoiddataGrid1_Select(objectsender,System.EventArgse)//在数据集中选定记录
{
if(this.InStgInfo.Rows.Count>0)
{
intcurrentRow=this.dataGrid1.CurrentCell.RowNumber;
if(currentRow>=0&¤tRowISReport.Position=currentRow;
this.oldtxtAmount=this.textAmount.Text.Trim();
this.textNum2.Enabled=false;
}
}
3、开发过程中遇到的技术问题以及解决方法
在程序完善过程中,我们也遇到了许多问题,但经过自己的不懈努力及查阅大量的资料,最终都得到了基本满意的答案。
同时,同学也给了我许多有益的启示,促动和帮助,使我能够顺利的完成课题。
例如MicrosoftVisualStudio2005中的案例与MicrosoftSQLSever2000中设计好的数据库连接问题;设计好的软件不能正常关闭,导致数据不能保存。
这些问题的答案都能从网络上找到。
八、系统开发总结
本次设计使用了MicrosoftVisualStudio2005结合MicrosoftSQLSever2000来开发一个仓库管理系统。
结合网络获取的资料及个人生活经验,分析了作为仓库管理系统所需要实现的基本的管理功能,在此基础上确定了本次课程设计所开发的系统的预期功能。
这次我们所面对的是我们以前所不成面对的软件开发报告的撰写,在报告的撰写中,我们遇到了很多的困难。
由于我们缺乏对项目的开发经验,我们走了许多的弯路,不过在指导老师的辅导下,我们还是克服了重重困难,在预定的时间内完成了老师所分配的任务。
我觉得只有自己真正的在实践中得到的才是你所需要的。
这个课程设计要自己做,尽管它是否有结果,别人的思想可以借鉴过来,但不能照抄照搬。
你所学的知识,将是一种解决问题的方法、思想。
这是我们所需要的,如何将我们的系统知识串成串,按照我们的思想,运用知识去解决它,我们将得到很大的收获。
此外,课题在现今社会中要有一定的生命力,以便我们更深入的研究。
九、主要参考文献
著作:
[1]王珊萨师煊.数据库系统概论[M].北京:
高等教育出版社,2006.5
[2]耿骞韩圣龙傅湘玲.信息系统分析与设计[M].北京:
高等教育出版社,2008.1
[3]李志刚.决策支持系统原理与应用[M].北京:
高等教育出版社,2009.1