商品仓库管理系统(数据库设计)(共32页).doc
精选优质文档-倾情为你奉上 数据库原理课程设计仓库管理系统 第一章 绪论1.1课题背景介绍1.1.1课题开发背景商品库存管理系统是一个企业不可缺少的部分,它的内容对于企业的决策者和管理者来说都至关重要,所以商品库存管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理仓库中的各种物资设备,这种管理方式存在着许多缺点,如:效率低、另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对物资信息进行管理,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高人事劳资管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。 因此,开发这样一套商品库存管理软件成为很有必要的事情。1.1.2课题开发意义大多数库存管理理论认为,库存是物理上和逻辑上库房库位的所有有形和无形物料极其价值的总和,具体包括成品、原材料、在制品、在途品、生产前物料、备品备件等。虽然持有一些库存是必要的,过量的库存却非但没有用处而且占用了资金。占用的资金对于公司发展、新产品开发等都是非常需要的;减少资金占用还可以大大减少来自银行贷款的利息和风险。对那些采购量特别大、采购件市场价格有波动的物料库存,加强库存管理效果更为明显。因此,平衡公司库存投资与其它资金需求至关重要。 随着我国经济的飞速发展,各种类型规模的公司企业迅速崛起,许多从事生产和经营管理的企业都有自己生产和销售的产品,而这些产品都需要储存在仓库中,对于每个企业来说,随着企业规模的不断扩大,产品数量的急剧增加,所生产产品的种类也会不断地更新与发展,有关产品的各种信息量也会成倍增长。面对庞大的产品信息量,如何有效地管理库存产品,对这些企业来说是非常重要的,库存管理的重点是销售信息能否及时反馈,从而确保企业运行效益。而库存管理又涉及入库、出库的产品、操作人员及客户等方方面面的因素,如何管理这些信息数据,是一项复杂的系统工程,充分考验着仓库管理员的工作能力,工作量的繁重是可想而知的,所以这就需要由库存管理系统来提高库存管理工作的效率,这对信息的规范管理、科学统计和快速查询,减少管理方面的工作量,同时对于调动广大员工的工作积极性,提高企业的生产效率,都具有十分重要的现实意义。 1.2课题开发目标设计和实现商品库存管理系统,使库存管理的工作系统化、 规范化和自动化,从而达到提高管理效率的目的。 (1) 利用计算机系统实现商品库存管理 ;(2) 流程符合商品库存要求 ;(3) 查询方便 , 无论是按商品编号、名称、类别其中任一项都可以进行有效查询 ;(4) 系统扩充容易 , 有很多地方还需要更好地完善 ;(5) 友好的用户界面 , 既面向系统开发者 , 又面向用户 。第二章 需求分析2.1 调查用户需求 本系统的最终用户为商场管理员,商场的客户。根据我们日常生活中的经验,结合对商场管理员及商场的客户的调查,得出用户的下列实际要求:2.1.1商场的基本情况商场管理员管理商场中客户、供应商、商品及仓库的信息。(1)客户的基本信息客户可以自己进行注册,也可以由管理员分配。商场中的每个客户都分配有唯一的编号、名字、地址、电话号码,每个用户可以进行信息查询,但不可以进行修改。(2)供应商的基本信息每个供应商拥有唯一的编号、名字、地址、供应货物及电号码。(3)货物的基本信息每种货物有一个编号,会存放在一个仓库中,货物有唯一的名称,属于一个类型,拥有一定货物存储量,管理员可以对其信息进行修改。(4)仓库的基本信息每个仓库有一个编号,同样有一个名字,一个地址,也拥有一定的容量,可以扩充容量,管理员可以对其信息进行修改。(5)货物查询的基本信息管理员和客户都拥有对货物、仓库查询的权力,而货物查询又分为三种:所有货物、货号查询、货名查询,给出相对应的条件,就可以查询到相关的货物编号、仓库编号、货物名称、类型名称、货物存储量,仓库查询只有所有仓库,给出相应的条件则可以查询到相关仓库编号、仓库名字、仓库地址、仓库容量。(6)出入库的基本信息供应商和客户的每次提供、购买货物都会造成仓库相关货物信息的改变,货物入库时更新货物编号、货物名称、入库时间、货物类型、供应商编号、收购单价、入库总量、仓库编号、客户编号,货物出库时更新货物编号、货物名称、出库时间、货物类型、供应商编号、收购单价、出库总量、仓库编号、客户编号信息。2.1.2 用户对系统的要求通过需求分析,对商品库存进行有效的管理,使之形成完善的应用系统。数据库设计中要合理设置商品信息和库存信息等,用来实现商品信息的新增,修改、删除等功能,使得商家有较详细的数据统计与分析。 下面就介绍一些此商品库存信息管理系统的基本功能:(1) 登录认证作为一个企业实际应用项目,登录认证是必不可少的。本项目的用户登录管理比较简单,分为管理员和客户登录,管理员和客户有不同的权限。(2) 统计报表统计报表模块包括客户统计、供货商统计、货物统计、仓库统计。各个统计都可以按照各个关键字进行统计查询。(3) 入库管理入库管理主要是管理员对仓库进行进货入库的操作,管理人员通过改功能模块把每天的入库商品明细输入数据库并对商品信息进行修改和删除。该模块支持按货物编号和货物名称、所有货物等关键字查询货物编号、仓库编号、货物名称、类型名称、货物存储量。(4) 出库管理出库管理模块与入货管理模块相似,主要是对货物出库信息进行管理。管理员员通过该功能模块对出库商品进行出库操作。(5) 库存管理库存管理模块主要是对已库存的商品进行操作,包括对商品的仓库信息进行修改。另外,可以按货物编号和货物名称、所有货物对所有货物进行盘点。2.2 系统可行性分析可行性分析研究的目的就是用最小的代价在尽可能短的时间里确定问题是否能解决,通过复杂系统的规模与目标,研究与此类似的系统后,我们具体从下面三方面考虑。2.2.1经济可行性在各个企业中用计算机管理企业信息已经越来越普遍了,可以说计算机已成为一个企业不可缺少的“管理者”了,它的方便、安全、可靠性也越来越受青睐,所以未来必定是计算机的天下。商品库存管理系统是一个小型的管理系统,但它给企业带来的利润是不可估量的,节省了许多人力,物力上的开支,使库存管理工作变繁为简,使其更加合理化、规范化。工作效率的提高就意为着整体水平的提高,是非常值得投资的。2.2.2操作可行性系统是在JDK 环境下基于MyEclipse平台开发的,易于操作。而且系统还采用了可视化面向对象的工具开发,其窗口、界面简洁易懂,所以系统在操作上是可行的。2.2.3技术可行性系统采用Java语言作为开发工具。Java是一种简单的,面象对象的,分布式的,解释的,键壮的安全的,结构的中立的,可移植的,性能很优异的多线程的动态的语言。它具有理论严密、使用方便、易学易用等特点,利用它设计的系统具有界面友好、工具丰富速度较快的特点。再结合SQL Server 2000数据库技术,编写SQL语言访问数据库,实现强大的查询、修改、入库、出库操作。2.3系统功能的设计和划分根据如上得到的用户需求,我们将本系统按照所完成的功能分成以下几部分:第一部分:管理员管理部分第二部分:用户管理部分各部分完成的功能如下:1、管理员管理部分 1、处理管理员登录 2、管理员可以注册、查询、注销、修改用户信息。3、管理员可以注册、查询、注销、修改提供商信息。 4、管理员可以查看、修改货物信息。5、管理员可以查看、修改仓库信息。 6、管理员可以插入货物入库信息。7、管理员可以插入货物出库信息。2、用户管理部分 1、处理用户注册 2、处理用户登录 3、用户可以查询货物信息。 4、用户可以查询仓库信息。2.4数据流图管理员供应商分数据流图:管理员客户分数据流图:总数据流图;2.5 数据字典1.数据项 1. 客户数据字典属性名存储代码类型长度备注编号Cnochar5客户编号姓名Cnamechar20客户姓名地址Caddrchar40客户地址电话Ctelchar11客户照片照片Ciconimage16客户密码密码Cpwchar10 2. 货物数据字典属性名存储代码类型长度备注货物编号Gnochar5货物名称Gnamechar20仓库编号Tnochar5 3. 管理员数据字典属性名存储代码类型长度备注编号M01char5管理员编号姓名Mnamechar20管理员姓名密码PWchar10管理员密码 4. 供应商数据字典属性名存储代码类型长度备注编号Pnochar5供应商编号姓名Pnamechar20供应商姓名地址Paddrchar40供应商地址货物Pgoodschar6供应商供应货物电话Ptelchar11供应商电话照片Piconimage16供应商照片 5. 仓库存储数据字典属性名存储代码类型长度备注货物编号Gno char5仓库编号Snochar5货物名称Gnamechar10类型名称Tnamechar20货物存储量Gnumint4仓库货物存储量 6. 货物入库数据字典属性名存储代码类型长度备注货物编号Gnochar5供应商编号Pnochar5货物名称Gnamechar10货物类型Tnamechar20仓库编号Snoreal4入库总量Innumint4货物入库总量收购单价Inpricereal4货物收购单价入库时间Indatachar20货物入库时间 7. 货物出库数据字典属性名存储代码类型长度备注货物编号Gnochar5客户编号Cnochar5货物名称Gnamechar10货物类型Tnamechar20出库编号Snoreal4货物出库编号出库总量Outnumint4货物仓库总量售出单价Outpricereal4货物出库单价出库时间Outdatachar20货物出库时间 8. 仓库数据字典属性名存储代码类型长度备注仓库编号Snochar5仓库名称Snamechar20仓库地址Saddrchar40仓库容量Ssizeint4 9. 货物类型数据字典属性名存储代码类型长度备注类型编号Tnochar5类型名称Tnamechar20类型描述Tdescriptionchar502.数据结构数据结构名组成管理员管理员编号,管理员姓名,密码客 户客户编号,客户名称,地址,联系电话供 应 商供应商编号,供应商名称,供应商地址,货物,联系方式货 物物品编号,物品编号,类型编号仓库仓库编号,仓库名称,仓库地址,仓库面积货物类型类型编号,类型名称,类型描述入 库货物编号,供应商编,货物名称,货物类型,入库总量,收购单价,仓库编号,入库时间出 库货物编号,客户编号,货物名称,货物类型,出库总量,售出单价,仓库编号,出库时间库 存货物编号,仓库编号,货物名称,货物类型,货物总量3. 数据流数据流名数据流来源数据流去向组成注册管理员信息管理员管理员信息表管理员注册信息注册客户信息客户客户信息表客户注册信息注册提供商信息提供商提供商信息表提供商注册信息查询客户信息客户管理员客户注册信息查询提供商信息提供商管理员提供商注册信息注销客户信息客户信息表管理员客户注销信息注销提供商信息提供商信息表管理员提供商注销信息修改客户信息客户信息表管理员客户修改信息修改提供商信息提供商信息表管理员提供商修改信息查询货物信息货物信息表管理员货物查询信息货物入库信息客户货物信息表货物入库信息货物出库信息货物信息表客户货物出库信息扩建仓库信息管理员仓库信息表仓库扩建信息修改货物信息货物信息表管理员货物修改信息4.数据存储数据存储名输入的数据流输出的数据流组成客户信息表客户注册信息客户修改信息客户注册信息客户注册信息客户修改信息货物信息表货物入库信息货物出库信息货物入库信息货物出库信息提供商信息表提供商注册信息提供商修改信息提供商注册信息提供商注册信息提供商修改信息管理员信息表管理员注册信息管理员注册信息管理员注册信息库存信息表入库信息出库信息入库信息出库信息入库信息表入库信息货物修改信息入库信息货物修改信息仓库信息表仓库扩建信息仓库删除信息仓库扩建信息仓库删除信息5.处理过程处理过程名输入数据流输出数据流注册客户客户注册信息客户注册信息注册提供商提供商注册信息提供商注册信息注销客户信息客户注册信息客户注册信息注销提供商信息提供商注册信息提供商注册信息修改客户信息客户注册信息客户注册信息修改提供商信息提供商注册信息提供商注册信息查询客户信息客户注册信息客户注册信息查询提供商信息提供商注册信息提供商注册信息货物查询货物信息货物信息货物入库货物信息货物信息货物出库货物信息货物信息仓库扩建仓库信息仓库信息货物修改货物信息货物信息第三章 系统概要设计本部分的总目标是根据需求分析说明书设计E-R图管理员实体E-R图:管理员管理员编号管理员姓名密码客户实体E-R图:客 户客户名称地址客户编号联系电话供应商实体E-R图:供 应 商供应商名称供应商编号供应商地址联系方式货物货物实体E-R图:货 物物品名称类型编号物品编号仓库实体E-R图: 仓库仓库名称仓库编号仓库面积仓库地址货物类型实体E-R图:货物类型类型名称类型描述类型编号入库实体E-R图:入 库供应商编号货物名称货物类型货物编号入库总量收购单价仓库编号入库时间出库实体E-R图:出 库客户编号货物名称货物类型货物编号出库总量售出单价仓库编号出库时间库存实体E-R图: 库 存仓库编号货物名称货物类型货物编号货物总量整体E-R图: 第四章 逻辑及物理设计本章的核心内容是将ER图转换为关系模式和创建数据库关系模式客户(编号,姓名,地址,电话,照片,密码)货物(货物编号,货物名称,仓库编号)管理者(编号,名称,密码)供应商(编号,姓名,地址,货物,电话,照片)仓库存储(货物编号,仓库编号,货物名称,类型名称,货物存储量)货物入库(货物编号,供应商编号,货物名称,货物类型,仓库编号,入库总量,收购单价,入库时间)货物出库(货物编号,客户编号,货物名称,货物类型,仓库编号,出库总量,售出单价,出库时间)仓库(仓库编号,仓库名字,仓库地址,仓库容量)货物类型(类型编号,类型名称,类型描述)(下划线标注的属性为主码)以上关系模式均为BCNF。物理设计:1. 安装或者解压,取得sqljdbc.jar文件,该文件即为JDBC驱动。将sqljdbc.jar放到classpath。2.设置 Classpath:JDBC驱动程序并未包含在 Java SDK中,必须将 classpath设置为包含 sqljdbc.jar文件。sqljdbc.jar文件的安装位置如下:<安装目录>sqljdbc_<版本><语言>sqljdbc.jarCLASSPATH =.;%ProgramFiles%sqljdbc_1.1chssqljdbc.jar3、打开MyEclipse,“文件”“新建”“项目”“Java项目”,项目名为Test4、在MyEclipse中,选择“窗口”“首选项.”“Java”“已安装的 JRE”,选择已安装的 JRE,点击“编辑”“添加外部”,选择%ProgramFiles%sqljdbc_1.1chssqljdbc.jar5、在Test项目的“JRE系统库”中可以看见sqljdbc.jar,如果没有可以右键单击项目Test“构建路径”“配置构建路径.”“Java构建路径”“库”“添加外部 JAR.”,选择%ProgramFiles%sqljdbc_1.1chssqljdbc.jar6、SQL Server 2000中加载驱动和URL的语句为:String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"String dbURL = "jdbc:sqlserver:/localhost:1433; DatabaseName=sample"第五章 系统实现及测试5.1用户登陆实现 在该商品库存信息管理系统中,用户登陆设计如下图5-1所示: 图5-1 登陆界面用户登陆可分为管理员和客户两种,在输入对应的用户名和密码后,点击确认就可以进入,否则将会出现如下图5-2所示: 图5-2错误提示5.2系统主界面实现主界面设计形式:程序运行后,主界面将打开。主界面带有标题栏和菜单栏,标题栏显示商品库存管理系统,而菜单栏上面有五个菜单项,分别是用户管理,信息查询,货物管理和帮助。在用户管理菜单项下面有客户管理和提供商管理两个Item,在这两个Item下面又各自有四个Item,它们分别是:注册、查询、注销和修改。信息查询下有所有货物、所有仓库、货号查询、货名查询、仓库查询五个Items。在货物管理下又分为货物入库、货物出库、仓库扩建、货物修改四个子菜单项。最后的帮助则是一个关于,显示相关的软件信息。将这些菜单项都添加到菜单中实现后的效果如下图5-3所示: 图5-3系统主界面 为每一个Item添加事件监听程序。在点击菜单项的时候弹出各自对应的窗体,供用户进行操作。/监听处理public void actionPerformed(ActionEvent e) /关 于 系 统if(e.getSource()=jmenuitem13)aboutsystem sa=new aboutsystem();sa.setVisible(true); /入库信息录入if(e.getSource()=jmenuitem9)input_info ii=new input_info();ii.setVisible(true); /出库信息录入if(e.getSource()=jmenuitem10)import_outfo io=new import_outfo();io.setVisible(true);/货物修改if(e.getSource()=jmenuitem16)int i = 0;String str=JOptionPane.showInputDialog(this,"请输入编号","提示",JOptionPane.INFORMATION_MESSAGE);if(str.length()=0)JOptionPane.showMessageDialog(this,"您你没有输入任何信息","提示",JOptionPane.INFORMATION_MESSAGE);return;Vector<String> vector=new Vector<String>();vector=Function.select6_Ggno(str);if(vector.size()=0)JOptionPane.showMessageDialog(this,"没有您要找的货物","提示",JOptionPane.INFORMATION_MESSAGE);return;UpdateGoods ri=new UpdateGoods();ri.jtextfield1.setText(vector.get(0).toString();ri.jtextfield3.setText(vector.get(1).toString();ri.jtextfield2.setText(vector.get(2).toString();ri.jcombobox.setSelectedItem(ri.jcombobox.getItemAt(i);ri.setVisible(true);/仓库扩建if(e.getSource()=jmenuitem14) StorageKuo sk=new StorageKuo(); sk.setVisible(true); /所有仓库if(e.getSource()=jmenuitem15)Vector<Vector<String>> vector=new Vector<Vector<String>>();Vector<String> tablehead=new Vector<String>();tablehead=Function.gettablehead4();vector=Function.select15_Storage();jtable=mytable.maketable(vector, tablehead);jscrollpane2.getViewport().add(jtable); /所有货物if(e.getSource()=jmenuitem12)Vector<Vector<String>> vector=new Vector<Vector<String>>();Vector<String> tablehead=new Vector<String>();tablehead=Function.gettablehead1();vector=Function.select1_Stock();jtable=mytable.maketable(vector, tablehead);jscrollpane2.getViewport().add(jtable);/供应商管理/供应商注册if(e.getSource()=jmenuitema3)AddProvide ap=new AddProvide();ap.setVisible(true);/供应商查询if(e.getSource()=jmenuitema5)Vector<Vector<String>> vector=new Vector<Vector<String>>();Vector<String> tablehead=new Vector<String>();tablehead=Function.gettablehead2();vector=Function.select1_Provide();jtable=mytable.maketable(vector, tablehead);jscrollpane2.getViewport().add(jtable);/供应商修改if(e.getSource()=jmenuitema4)/int i = 0;String str=JOptionPane.showInputDialog(this,"请输入编号","提示",JOptionPane.INFORMATION_MESSAGE);if(str.length()=0)JOptionPane.showMessageDialog(this,"您你没有输入任何信息","提示",JOptionPane.INFORMATION_MESSAGE);return;Vector<String> vector=new Vector<String>();vector=Function.select13_Pno(str);if(vector.size()=0)JOptionPane.showMessageDialog(this,"没有您要找的供应商","提示",JOptionPane.INFORMATION_MESSAGE);return;UpdateProvide ri=new UpdateProvide(); ri.jtextfield2.setText(vector.get(1).toString();ri.jtextfield3.setText(vector.get(2).toString();ri.jtextfield4.setText(vector.get(3).toString();ri.jtextfield5.setText(vector.get(4).toString();ri.jtextfield1.setText(vector.get(0).toString();/图片放在显示框中间ri.setVisible(true); /供应商注销if(e.getSource()=jmenuitema1)String str1=JOptionPane.showInputDialog(this, "请输入供应商编号","提示",JOptionPane.INFORMATION_MESSAGE); if(str1.length()=0) JOptionPane.showMessageDialog(this, "您没有输入任何信息","错误", JOptionPane.ERROR_MESSAGE); return; Delete.delete1_Pno(str1);JOptionPane.showMessageDialog(this,"已经成功注销", "提示", JOptionPane.INFORMATION_MESSAGE);/客户管理/管理员替客户注册if(e.getSource()=jmenuitema12)ClienRegistl ap=new ClienRegistl();ap.setVisible(true);/客户查询if(e.getSource()=jmenuitema9)Vector<Vector<String>> vector=new Vector<Vector<String>>();Vector<String> tablehead=new Vector<String>();tablehead=Function.gettablehead3();vector=Function.select1_Client();jtable=mytable.maketable(vector, tablehead);jscrollpane2.getViewport().add(jtable);/客户修改if(e.getSource()=jmenuitema11)String str=JOptionPane.showInputDialog(this,"请输入编号","提示",JOptionPane.INFORMATION_MESSAGE);if(str.length()=0)JOptionPane.showMessageDialog(this,"您你没有输入任何信息","提示",JOptionPane.INFORMATION_MESSAGE);return;try Vector<String> vector=new Vector<String>();vector=Function.select14_Cno(str);if(vector.size()=0)JOptionPane.showMessageDialog(this,"没有您要找的客户","提示",JOptionPane.INFORMATION_MESSAGE);return;UpdateClient ri=new UpdateClient();ri.jtextfield1.setText(vector.get(0).toString().trim();ri.jtextfield2.setText(vector.get(1).toString().trim();ri.jtextfield3.setText(vector.get(2).toString().trim();ri.jtextfield4.setText(vector.get(3).toString().trim();/ImageIcon icon=new ImageIcon(vector.get(4).getBytes();/ri.jlabel1.setIcon(icon);/ri.jlabel1.setHorizontalAlignment(SwingConstants.CENTER); /图片放在显示框中间ri.setVisible(true); catch (Exception e2) System.out.println("yichang:vector.size()");System.out.println("nstr="+str);/客户注销if(e.getSource()=jmenuitema10)String str1=JOptionPane.showInputDialog(this, "请输入客户编号","提示",JOptionPane.INFORMATION_MESSAGE); if(str1.length()=0) JOptionPane.showMessageDialog(this, "您没有输入任何信息","错误", JOptionPane.ERROR_MESSAGE); return; Delete.delete2_Cno(str1);JOptionPane.showMessageDialog(this,"已经成功注销", "提示", JOptionPane.INFORMATION_MESSAGE); /按货物编号查询if(e.getSource()=jmenuitem5)String str1=JOptionPane.showInputDialog(this, "请输入货物编号","提示",JOptionPane.INFORMATION_MESSAGE); if(str1.length()=0) JOptionPane.showMessageDialog(this, "您没有输入任何信息","错误", JOptionPane.ERROR_MESSAGE); return; Vector<Vector<String>> vector=new Ve