范文 仓库管理系统

2022-08-04 来源:其他范文收藏下载本文

推荐第1篇:企业仓库管理系统

企业仓库管理系统

企业仓库管理系统是一个稳定的、可扩展的、易于使用的实时仓储管理系统,它全面提升了传统物流仓储企业的货物管理和处理模式。系统分为存货、出库、产品分类、区域管理、物流查询、发货对比、仓库管理、统计查询等几个功能模块。通过这个系统,可以实现仓储作业流程的电子化。系统同时支持多种类型的出库、多个公司或仓库运做、多种类型的计费方式。系统同时配备模拟仓位图,可以对货物存储和出货等进行安排计划。系统同时可与客户建立数据接口,可以根据客户的要求,实现客户的远程货物管理。仓储管理系统可应用于各种行业的公共型仓储企业。

仓库管理系统的主要功能

·基础资料管理更加完善文档利用率高

·库存准确

·操作效率高

·库存低,物料资产使用率高

·现有的操作规程执行难度小

·易于制定合理的维护计划

·数据及时, 成本降低

·提供历史的记录分析

·规程文件变更后的及时传递和正确使用

·仓库与财务的对帐工作量见效效率提高

·预算控制严格、退库业务减少

企业仓库管理现状中的难题

很多企业仓库管理还是停留在手工操作的基础上,所有的出入仓数据都得由仓管员逐个录入数据,这种仓库管理作业方式严重影响工作效率,许多出入库数据不能在系统中及时得到更新,在系统管理上也没有实现有效的库位管理,系统中无法了解到物料在仓库中的分布状态及仓库的仓储能力,工人在摆放和领取物料时,没有系统对其进行指导,可能会发生物料摆错位置或者物料领取错误的现象。以上种种弊端严重影响了仓库管理的效率,降低了企业仓库的仓储能力,提高了仓库管理成本,制约了企业的发展。仓库管理系统解决方案

条码系统采用条形码作为标识,以条形码为数据源,使用数据采集终端扫描条码标识,进行数据采集。系统从级别、类别、货位、批次、单件等不同角度来管理库存物品的数量,以便企业可以及时了解和控制库存业务各方面的准确情况和数据,助您有效的进行仓库管理。

仓库管理系统功能介绍

1、条码管理——货位管理 针对物料仓储的特点,实施对物料货位进行合理的管理,以便企业能了解到物料在仓库中的分布状态,并能够体现出物料的先进先出原则。对相应的车间配有对应的仓库,每个仓库都存储有上述三大类物料,针对车间的生产,采用小批量多频次和配套送料相结合的配送方式。

2、条码管理——出入仓操作 通过无线终端对条码实施扫描,高效的办理出入仓工作,并对仓库数据实施实时更新。

3、条码管理——循环盘点通过无线终端对货位条码、物资条码实施扫描,实时查询物资库存情况,在系统里可以分仓库、区域、货位随机抽查,也可针对特定类抽查,同时还可定期对整个系统进行全面的盘点,产生差异表,便于分析和追踪哪些物资属于库存准度低的物资,同时对一些长时间不用的物资(如:从进仓日期算起还没有出过仓)进行动态分析并发出注意警告。

4、条码管理-质量追溯能够追溯各关键零部件的采购时间,及相应的供应商。

出自易通信息技术网站—

推荐第2篇:仓库管理系统毕业论文

仓库管理系统是为了实现企业产品管理的系统化、规范化和自动化从而提高企业管理效率而设计的。它完全取代了原来一直用人工管理的工作方式避免了由于管理人员的工作疏忽以及管理质量问题所造成的各种错误为及时、准确、高效的完成仓库管理提供了强有力的工具和管理手段。仓库管理系统是一个中小型数据库管理系统它界面美观、操作简单、安全性高基本满足了仓库管理的要求。整个系统由基本信息、单据中心、查询统计、报表打印、维护设置、帮助等模块组成。 本系统是在以sqlserver2005作为后台数据库以vs2005为编程语言来开发的。仓库管理系统在运行阶段效果好数据准确性高提高了工作效率同时也实现了仓库管理计算机化。

关键词仓库;管理系统;数据

Abstract The administrative system of the warehouse is designed for realizing the systematization , standardization and automization of enterprise\'s products management and improving efficiency of enterprises management.It completely replaces the working way of artificial management originally , prevents from various kinds of mistakes because of administrative staff neglect and the quality problem of management and offeres powerful tool and management way to complet storehouse management for prompt , accurate , high-efficient .The administrative system of the warehouse is a medium and small-scale database management system,it has not only beautiful interface, but also the high security and the simply operation , and meet the demand for storehouse management basically.Whole system is made up by basic information, document in the center, inquire statistics , report form type ,set up to maintain and module of helping etc.The Warehouse administrative system is designed with regarding sql server2005 as the backstage database and regarding vs2005 as programming language .The administrative system is effectual, the high data accuracy during the course of operating , improves working efficiency and realizes computerization for storehouse management at the same time .

Key words: The Warehouse Administrative SystemThe Database

II

目 录

要 ................................................................................................................................................I ABSTRACT ..........................................................................................................................................II 1前

言 ............................................................................................................................................5 2系统开发工具 .................................................................................................................................6 2.1 VISUAL STUDIO 2005 ..........................................................................................................................6 2.2 SQL SERVER 2005 ..............................................................................................................................6 2.3 IIS ...................................................................................................................................................6 2.4 ASP.NET............................................................................................................................................7 3需求分析 ........................................................................................................................................8 3.1系统目标设计 ...............................................................................................................................8 3.2.仓库管理系统的需求分析 ...........................................................................................................8 4 系统总体设计 ................................................................................................................................9 4.1.设计目的: ...................................................................................................................................9 4.2.设计目标: ....................................................................................................................................9 4.3.设计过程: ...................................................................................................................................9 4.4.系统设计的一些原则 .................................................................................................................10 4.5.系统数据流程图 .........................................................................................................................10 4.6.模块功能简介 .............................................................................................................................11 4.6.1报表管理: 报表管理模块详细流程如图所示 ................................................................11 4.6.2系统管理: .........................................................................................................................11 4.6.3仓库管理: .........................................................................................................................12 5 数据库设计 ..................................................................................................................................13 5.1.创建数据库 .................................................................................................................................13 5.2.数据表结构 .................................................................................................................................13

III 5.2.1 UserInfo表 ...........................................................................................................................13 5.2.2 Composition表 ....................................................................................................................13 5.2.3 unit表 ..................................................................................................................................14 5.2.4 DaySell表 .............................................................................................................................14 5.2.5 Inventory表 .........................................................................................................................14 5.2.6 Library 表 ............................................................................................................................15 5.2.7 Menu表 ...............................................................................................................................15 5.2.12Storage 表 ..........................................................................................................................15 5.2.8 LogBook表 ...........................................................................................................................16 5.2.9 Material表 ...........................................................................................................................17 5.2.10 shop表 ...............................................................................................................................17 5.2.11 Stock表 ..............................................................................................................................17 6 设计与实现 ..................................................................................................................................18 6.1.用户登录 .....................................................................................................................................18 6.2 仓库管理 .....................................................................................................................................19 7 小结和展望 ..................................................................................................................................20 7.1.优点和不足 .................................................................................................................................20 7.2.展望 .............................................................................................................................................20 结束语 .............................................................................................................................................21 参 考 文 献....................................................................................................................................22 附 录 ...............................................................................................................................................23

IV

1前

随着我国经济的飞速发展,各种类型规模的公司企业迅速崛起,许多从事生产和经营管理的企业都有自己生产和销售的产品,而这些产品都需要储存在仓库中,对于每个企业来说,随着企业规模的不断扩大,产品数量的急剧增加,所生产产品的种类也会不断地更新与发展,有关产品的各种信息量也会成倍增长。面对庞大的产品信息量,如何有效地管理库存产品,对这些企业来说是非常重要的,库存管理的重点是销售信息能否及时反馈,从而确保企业运行效益。而库存管理又涉及入库、出库的产品、经办人员及客户等方方面面的因素,如何管理这些信息数据,是一项复杂的系统工程,充分考验着仓库管理员的工作能力,工作量的繁重是可想而知的,所以这就需要由库存管理系统来提高库存管理工作的效率,这对信息的规范管理、科学统计和快速查询,减少管理方面的工作量,同时对于调动广大员工的工作积极性,提高企业的生产效率,都具有十分重要的现实意义。

仓库管理部门是企业中的一个重要部门,每天都有大量的业务在这里产生。对于一个现代化的企业来说,信息化管理是必须的,而仓库管理部门作为企业的一个重点部门,同样需要加强信息化管理。如何把仓库管理部门每天发生的业务如实地记录下来,保证仓库工作有调理地进行,同时确保相关数据的安全,信息处理的高效,并保证系统的实用性强,真是本系统设计的目的。

随着现代工业的发展,计算机信息管理系统越来越受到企业的重视。本文主要介绍了库存管理系统的一些基本功能和组成部分,包括系统的结构、需求分析、功能模块划分等,介绍了Visual Studio 2005编程环境和sqlserver2005数据库管理系统的功能特点,仓库管理系统是企业物流管理中不可或缺的一部分。

2系统开发工具

本仓库管理系统是在以vs2005为编程语言以sqlserver2005作为后台数据库而开发的一个数据库管理系统。下面简要介绍一下中文vs2005和sqlserver2005。

2.1 Visual Studio 2005

Visual Studio 2005是基于.NET2.0框架的。它同时也能开发跨平台的应用程序,如开发使用微软操作系统的手机的程序等。总体来说是一个非常庞大的软件,甚至包含代码测试功能。这个版本的Visual Studio 包含有众多版本,分别面向不同的开发角色。同时还永久提供免费的Visual Studio Expre 版本。

2.2 SQL Server 2005

SQL Server是Microsoft公司开发的大型关系数据库管理系统,具有强大的关系数据库创建、开发、设计和管理功能。其SQL Server 2005版本已将数据库与Internet紧密连接,可以通过Web浏览器显示对数据库操作的结果数据,具有客户机/服务器体系结构。SQL Server 2005提供了对分布式事务处理的支持,并对开发工具具有良好的支持,为大型数据库项目提供了企业解决方案。SQL是关系数据库的标准语言。操作数据库有多种途径:使用企业管理器、使用查询分析器、编程中使用T-SQL语句或使用交互命令形式等。

2.3 IIS

IIS(Internet Information Server)是微软公司主推的服务器,包容了World Wide Web Gopher server和FTP server,IIS是随Windows XP一起提供的文件和应用程序服务器,是在Windows XP2上建立Internet服务器的基本组件。它能与Windows XP2集成,因而能通过Windows XP2内置的安全性以及自身的安全性建立强大,灵活而安全的Internet和Intranet站点。IIS支持HTTP(Hypertext Transfer Protocol,超文本传输协议),FTP(File Transfer Protocol,文件传输协议)以及SMTP协议,通过使用CGI和ISAPI,IIS可以得到高度的扩展。IIS支持与语言无关的脚

6 本编写和组件,通过IIS,开发人员就可以开发新一代动态的,富有魅力的Web站点。IIS不需要开发人员学习新的脚本语言或者编译应用程序,IIS完全支持VBScript,JavaScript脚本语言以及C#等编语言。

2.4 ASP.net

ASP.net 是一种建立在通用语言上的程序构架,能被用于一台Web服务器来建立强大的Web应用程序。ASP.net提供许多比现在的Web开发模式强大的优势,使执行效率大幅提高。ASP.net是把基于通用语言的程序在服务器上运行。不像以前的ASP即时解释程序,而是将程序在服务器端首次运行时进行编译,这样的执行效果,当然比一条一条的解释强很多。

3需求分析

3.1系统目标设计

系统开发的总体任务是实现企业产品管理的系统化、规范化和自动化从而达到提高企业管理效率的目的。

3.2.仓库管理系统的需求分析

仓库管理系统主要用于仓库货品信息的管理,系统包括仓库管理、入库、一些统计查询和报表等几部分组成。

库存管理系统满足仓库管理员及工作人员的需求,他们具有登陆系统的权限,所以需要对工作人员的登陆模块进行更多的考虑,设计不同用户的操作权限和登陆方法。

对于一个仓库来说最大的功能就是仓储货品,所以仓库管理就是对货品信息,仓库信息,短线货品及仓储货品的管理,用户可以根据实际情况对各种货品信息进行分类管理,包括添加,删除更新数据库等。

入库管理操作就是对于货品入库情况的管理,用户可以方便输入货品的信息。

有货品的入库,自然就有货品的出库,这部分提供的功能与入库流程差不多,有区别的只有对一些基本的信息生成报表形式,并打印输出功能。

报表是一个数据库最重要的功能之一,有了报表才能清楚地知道货品的出入情况,在数据报表功能中包括出库报表,库存报表及经办人等一些基本信息的打印,方便简洁。

4 系统总体设计

4.1.设计目的:

总体设计的基本目的就是回答了“概括地说,系统一个如何实现?”这个问题。总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。

4.2.设计目标: 1.操作简单方便,界面简洁美观 2.能完成仓库的各种日常操作

3.能很好的预防各自人为因素产生的错误操作

4.能够为用户提供多种条件的查询操作,为物料管理提供准确及时的数据

5.具有很好的安全性,一保证数据的正确性 6.可追溯数据的历史信息,为系统完善提供依据

4.3.设计过程:

总体设计过程首先寻找实现目标系统的各种不同的方案需求分析阶段得到的数据流图是设想各种可能方案的基础。然后分析员从这些供选择的方案中选取若干个合理的方案,然后为每个合理的方案准备一份系统流程图,列出组成系统的所有物理元素。在进行软件结构设计时一个遵循的主要原理是模块独立性原理,也就是说,软件应该由一组完成相对独立的子功能的模块组成。总体设计中的模块的划分根据软件工程的原则要符合高内聚和低耦合。模块可以小到函数、事件,大到窗口、程序模块划分完后,就可以开始设计了。

9 4.4.系统设计的一些原则

1.统一各种原始的单据的格式,统一账目和报表的格式。2.删除不必要的管理多余,实现管理规范化、科学化。

3.程序代码标准化,软件统一化,确认软件的可维护性和实用性。4.界面尽量简单化,做到实用、方便,尽量满足企业中不同层次员工的需要。

5.建立操作日志,系统自动记录所进行的各种操作。

4.5.系统数据流程图

仓库管理系统:仓库管理、报表管理、系统管理三大模块组成,详细流程图如下所示

10 4.6.模块功能简介

4.6.1报表管理:

报表管理模块详细流程如图所示

4.6.2系统管理:

系统管理模块详细流程如图所示

11 4.6.3仓库管理:

仓库管理模块详细流程如图所示

5 数据库设计

大多数应用系统都需要后台数据库的支持,在本系统中采用sqlserver2005数据库。

5.1.创建数据库

本系统采用了sqlserver2005作为数据库管理系统。先启动sqlserver2005程序,然后创建名为“sobajian”的数据库。并为此数据库设置密码。

5.2.数据表结构

5.2.1 UserInfo表

存储登录用户信息,主要字段有uid、userName、pwd、trueName等。

5.2.2 Composition表

存储材料合成,主要字段有cid、mid、mcomp等。

13 5.2.3 unit表

存储单位表,主要字段有uid、uName、uDesc等。

5.2.4 DaySell表

存储日销售,主要字段有did、sid、mid、mcount、sDate等。

5.2.5 Inventory表

存储盘点表,主要字段有Iid、sid、mid、mcount、IDate等。

14 5.2.6 Library 表

存储出库,主要字段有lid、sid、menuid、mid、lcount、loutDate等。

5.2.7 Menu表

存储菜单,主要字段有mid、mName、mUprice、mParentId等。

5.2.12Storage

存储入库,主要字段有stoid、sid、mid、scount、sprice等。

15 5.2.8 LogBook表

存储工作日报,主要字段有lid、sid、sname、lmzg、lmgzry、cfzg等。

16 5.2.9 Material表

存储材料信息,主要字段有mid、mName、mSpecification、mUprice等。

5.2.10 shop表

存储店铺,主要字段有sid、sName、sAddre、Smanager等。

5.2.11 Stock表

存储库存,主要字段有sid、shid、mid、sincount、soutcount、stotalcount等。

6 设计与实现

6.1.用户登录

在进入系统之前用户需要进行身份验证在验证的时候,会从数据库调出普通用户信息表,登录的用户信息要与表中的相验证,完全正确的才可以进入系统。

用户登录主界面

系统主界面

18 6.2 仓库管理

仓库管理模块,用户可以操作货品的出库入库管理等。

出库管理:菜单列表、查询、新增菜单、菜单合成、日销售、月销售合计、材料入库录入、材料出库记录以及相对应货品的修改、删除。

入库管理:材料类型、查询、新增、入库、清空库存、查看入库记录以及相对应货品的修改、删除。

出库管理主界面

入库管理主界面

7 小结和展望

7.1.优点和不足

A.能够比较好的进行需求分析,可行性分析以及系统设计。 B.完成了仓库管理中日常使用最多的最主要的功能。 C.对数据的处理有很大的联系,可减少人为因素带来的影响 D.系统只提供了键盘和鼠标的输入,没有提供条码扫描的输入。 E.系统知识提供了一个简单的功能,与现代化的公司仓库定理还有不小的差距。

7.2.展望

对于一个公司的仓库管理来说,该系统还只是一个雏形,没有完成的事情还有很多。有了现有的系统原型,还要与用户沟通,将他们实际操作中的一些问题考虑进去,逐步改进上面谈到的一些不足,完善整个系统。

结束语

通过紧张忙碌的毕业设计,我的个人能力得到了很大的提高。获益匪浅,专业知识上也上了一个新台阶,对整个软件设计开发的流程也有了更深刻的理解。

在我以前的工作中,总是先考虑编码,然后再考虑其他的问题,导致在工作过程中经常需调整用户需求和进度上的安排不尽如人意,经常需要加班来赶进度。而在这次毕业设计中,我按照软件工程的要求进行,先进行编码前的工作,并按照老师为我们指定的进度进行,顺利地完成了制定的任务。在整个工作过程中,感觉没有像以前那么匆忙,整个过程也很轻松。通过这次毕业设计,将使我的工作习惯有一个很大的改进。这些提高是终身受益的。 总之,通过这次毕业设计是使我各个方面的知识得以融会贯通,为我将来的各种开了一个好头。我认为这种改变是质的飞跃。

21

参 考 文 献

[1] 邵鹏明.C#面向对象程序设计.清华大学出版社,2008年4月

[2] 孟宪会 张慧研.ASP.NET 2.0应用开发技术.人民邮电出版社,2007年8月 [3] 金旭亮..NET 2.0面向对象编程揭秘.电子工业出版社,2007年6月 [4] 周奇.SQL Server2005数据库基础及应用技术.北京大学出版社,2009年2月

[5] 陈元春 张亮 王勇.实用数据结构基础.2007年8月第2版.中国铁道出版社,2008年8月

[6] 王养廷 李磊 宋汉珍.UML基础与应用.清华大学出版社,2009年6月 [7] 杜文洁.软件测试教程.清华大学出版社,2009年7月 [8] 韩陵宜.网页制作.中国科学技术大学出版社,2008年1月 [9] 曾光 马军.JavaScript入门与提高.科学出版社,2008年11月 [10]朱晔.ASP.NET第一步.2007年7月第一版.清华大学出版社, 2008,01

22

附 录

Login public partial cla login :System.Web.UI.Page { protected void Page_Load(object sender ,EventArgs e) { if(!IsPostBack) { pageInit(); bindDtShop();

} }

public void pageInit() { if(Request.QueryString[\"out\"] != null) { Seion.Remove(\"currUser\"); } }

public void bindDtShop() { shop shop = new shop(); DataTable dtshop = shop.getShopInfoByContent(\"\"); this.dtshop.DataSource = dtshop; this.dtshop.DataTextField = \"sname\"; this.dtshop.DataValueField = \"sid\"; this.dtshop.DataBind(); this.dtshop.Items.Insert(0 ,new ListItem(\"--选择店铺--\" ,\"0\")); }

public void UserLogin() { if(this.txtUsername.Text.Trim().Length == 0) { Page.ClientScript.RegisterStartupScript(this.GetType() ,\"\" ,\"<script>alert(\'请输入用户名!\')</script>\"); return; }

23 if(this.pwd.Text.Length == 0) { Page.ClientScript.RegisterStartupScript(this.GetType() ,\"\" ,\"<script>alert(\'请输入密码!\')</script>\"); return; } userinfo user = new userinfo(); DataTable dtuser = user.Login(this.txtUsername.Text); if(dtuser.Rows.Count >0) { string flogurl = \"Index.aspx\"; if(Request.QueryString[\"flogurl\"] != null) { flogurl = Request.QueryString[\"flogurl\"]; } if(dtuser.Rows[0][2].Equals(this.pwd.Text)) { Seion[\"currUser\"] = this.txtUsername.Text; Seion[\"truename\"] = dtuser.Rows[0][3].ToString(); Seion[\"shop\"] = this.dtshop.SelectedItem.Value; Response.Redirect(flogurl); //登录 } else { Page.ClientScript.RegisterStartupScript(this.GetType() ,\"\" ,\"<script>alert(\'密码错误!\')</script>\"); } } else { Page.ClientScript.RegisterStartupScript(this.GetType() ,\"\" ,\"<script>alert(\'该用户不存在!\')</script>\"); } } protected void ImageButton1_Click(object sender ,ImageClickEventArgs e) { if(Request.Headers[\"Accept\"] != \"*/*\") { UserLogin(); } } } ShopInfo public partial cla ShopInfo : MyPage

24 { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Request.QueryString[\"sid\"] != null) { this.hfsid.Value = Request.QueryString[\"sid\"]; getShopInfoBySid(Convert.ToInt32(hfsid.Value)); } } } protected void Button1_Click(object sender, EventArgs e) { // if (Request.Headers[\"Accept\"] != \"*/*\") // { if (this.hfsid.Value.Equals(\"0\")) { addShop(); } else { updShopInfo(); } // } }

public bool formvalidate() { if (this.txtshopname.Text.Trim().Length == 0) { Page.ClientScript.RegisterStartupScript(this.GetType(), \"\", \"<script>alert(\'请输入店铺名称!\');</script>\"); return false; } return true; }

public void addShop() { if (formvalidate()) { shop shop = new shop(); shop.addShop(this.txtshopname.Text, this.txtaddre.Text, this.txtzg.Text,

25 this.txtzc.Text, this.txtyg.Text, this.txtremark.Text); Page.ClientScript.RegisterStartupScript(this.GetType(), \"\", \"<script>window.close();</script>\"); } }

public void getShopInfoBySid(int sid) { shop shop = new shop(); string content = \"where sid = \"+sid; DataTable dt = shop.getShopInfoByContent(content); if (dt.Rows.Count >0) { DataRow dr = dt.Rows[0]; this.txtshopname.Text = dr[1].ToString(); this.txtaddre.Text = dr[2].ToString(); this.txtzg.Text = dr[3].ToString(); this.txtzc.Text = dr[4].ToString(); this.txtyg.Text = dr[5].ToString(); this.txtremark.Text = dr[6].ToString(); } }

public void updShopInfo() { if (formvalidate()) { shop shop = new shop(); shop.updShop(int.Parse(this.hfsid.Value), this.txtshopname.Text, this.txtaddre.Text, this.txtzg.Text, this.txtzc.Text, this.txtyg.Text, this.txtremark.Text); Page.ClientScript.RegisterStartupScript(this.GetType(), \"\", \"<script>window.close();</script>\"); } } } InStorrage public partial cla InStorrage : MyPage {

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { pageInit();

26 } } public void pageInit() { this.txttime.Text = Request.Form[\"txttime\"] != null ? Convert.ToDateTime(Request.Form[\"txttime\"].ToString()).ToString(\"yyyy-MM-dd\") : DateTime.Now.ToShortDateString(); if (Request.QueryString[\"typeid\"] != null) { this.hfmid.Value = Request.QueryString[\"typeid\"]; } getStroageInfoByType(int.Parse(this.hfmid.Value)); }

public void getStroageInfoByType(int typeid) { string content = \"where mParentid=\" + typeid; getStorageInfo(content); }

public void getStorageInfo(string content) { StorageManage storage = new StorageManage(); Tools.GridViewDataBind(this.gvMaterial, storage.getMaterialInfoByContent(content)); // this.gvMaterial.DataSource = ; //this.gvMaterial.DataBind(); }

protected void gvMaterial_RowCreated(object sender, GridViewRowEventArgs e) { string shortDate = Request.Form[\"txttime\"] != null ? Convert.ToDateTime(Request.Form[\"txttime\"].ToString()).ToString(\"yyyy-MM-dd\") : DateTime.Now.ToShortDateString(); string datetimenow = Convert.ToDateTime(shortDate).ToString(\"yyyy年MM月dd日\"); StorageManage storage = new StorageManage(); string sid = Seion[\"shop\"].ToString(); if (e.Row.RowType == DataControlRowType.Header) { GridViewRow rowHeader = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal); string HeaderBackColor = \"#FFFFFF\"; //rowHeader.BackColor = System.Drawing.ColorTranslator.FromHtml(HeaderBackColor);

//实现确定要显示的表头样式,也可以通过计算生成

27 Literal newCells = new Literal(); newCells.Text = @\"编号 品名 规格 购买金额(元)\";

newCells.Text += @\"\" + datetimenow + \"\"; newCells.Text += @\"\"; newCells.Text += @\"单价数量付款\";

TableCellCollection cells = e.Row.Cells; TableHeaderCell headerCell = new TableHeaderCell(); //下面的属性设置与 关键单元格 要一致 headerCell.RowSpan = 2; headerCell.Controls.Add(newCells); rowHeader.Cells.Add(headerCell); rowHeader.CCla = \"scrollRowTheadgv scrollCRgv scrollColTheadgv\"; rowHeader.Visible = true; //添加到 GridView1 this.gvMaterial.Controls[0].Controls.AddAt(0, rowHeader); } if (e.Row.RowType == DataControlRowType.DataRow && e.Row.Visible) { try { string ismoney = \"1\"; for (int i = 0; i

txt.CCla = \"0\"; if (dt.Rows.Count >0) { DataRow dr = dt.Rows[0]; txt.Text = i == 0 ? dr[4].ToString() : dr[3].ToString();

28 txt.CCla = dr[0].ToString(); ismoney = dr[6].ToString(); } txt.Width = new Unit(100); txt.Style.Add(\"text-align\", \"center\"); txt.BorderStyle = BorderStyle.None; txt.Attributes.Add(\"onkeyup\", \"checkInputFloat(this)\"); cell.Controls.Add(txt); e.Row.Cells.Add(cell); }

///是否付款

TableCell cellmoney = new TableCell(); cellmoney.HorizontalAlign = HorizontalAlign.Center; RadioButtonList rmoneylist = new RadioButtonList(); rmoneylist.RepeatColumns = 2; rmoneylist.ID = \"rdo\" + e.Row.RowIndex; rmoneylist.CCla = \"rdolist\"; rmoneylist.Items.Add(new ListItem(\"已付\", \"1\")); rmoneylist.Items.Add(new ListItem(\"未付\", \"0\"));

rmoneylist.SelectedValue = ismoney; rmoneylist.BorderStyle = BorderStyle.None; //cellmoney.Wrap = true; cellmoney.Controls.Add(rmoneylist); e.Row.Cells.Add(cellmoney);

} catch (Exception ex) { Log.Error.Log(ex.Meage); } } }

protected void Button1_Click(object sender, EventArgs e) { try { StorageManage storage = new StorageManage(); string sid = Seion[\"shop\"].ToString(); for (int i = 0; i

29 { TextBox txtprice = ((TextBox)this.gvMaterial.Rows[i].Cells[4].FindControl(\"txt\" + i + \"0\")); TextBox txtcount = ((TextBox)this.gvMaterial.Rows[i].Cells[4].FindControl(\"txt\" + i + \"1\")); RadioButtonList rdolist = ((RadioButtonList)this.gvMaterial.Rows[i].Cells[4].FindControl(\"rdo\" + i)); storage.innerStor(int.Parse(txtprice.CCla), sid, int.Parse(txtprice.ToolTip), txtcount.Text, txtprice.Text, this.txttime.Text, Convert.ToInt32(rdolist.SelectedValue)); } } getStroageInfoByType(int.Parse(this.hfmid.Value));

ClientScript.RegisterStartupScript(this.GetType(), \"\", \"<script>window.returnValue=true;window.close();</script>\"); } catch (Exception) {

} }

protected void Button2_Click(object sender, EventArgs e) { getStroageInfoByType(int.Parse(this.hfmid.Value)); } protected void txttime_TextChanged(object sender, EventArgs e) { getStroageInfoByType(int.Parse(this.hfmid.Value)); } } InStorrage public partial cla InStorrage :MyPage { protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { pageInit(); } } public void pageInit()

30 { if(Request.QueryString[\"typeid\"]!=null) { this.hfid.Value = Request.QueryString[\"typeid\"]; StorageManage storage = new StorageManage(); DataTable dt = storage.getMaterialInfoByContent(\"where mid=\"+this.hfid.Value); this.lbltype.Text = dt.Rows.Count>0?dt.Rows[0][1].ToString():\"\"; } string content = \"where mParentid=\"+this.hfid.Value; getStorageInfo(content); this.txttime.Text = DateTime.Now.ToString(\"yyyy-MM\"); this.lbltitle.Text = this.txttime.Text + \"购入合计\"; }

public void getStorageInfo(string content) { StorageManage storage = new StorageManage(); Tools.GridViewDataBind(this.gvMaterial ,storage.getMaterialInfoByContent(content)); // this.gvMaterial.DataSource = storage.getMaterialInfoByContent(content); // this.gvMaterial.DataBind(); } public override void VerifyRenderingInServerForm(Control control) { } protected void export_Click(object sender ,CommandEventArgs e) {

Tools.ExcelCap(e ,this.gvMaterial ,Page,HttpUtility.UrlEncode(this.lbltype.Text+\"_\"+this.lbltitle.Text),\"\"); } protected void gvMaterial_RowCreated(object sender ,GridViewRowEventArgs e) { string currentDate = Request.Form[\"txttime\"]!=null?Request.Form[\"txttime\"]:DateTime.Now.ToString(\"yyyy-MM\"); int days = Tools.getDays(Convert.ToDateTime(currentDate + \"-1\").Year ,Convert.ToDateTime(currentDate + \"-1\").Month); string sid = Seion[\"shop\"].ToString(); if(e.Row.RowType == DataControlRowType.Header) { GridViewRow rowHeader = new

GridViewRow(0 ,0 ,DataControlRowType.Header ,DataControlRowState.Normal); string HeaderBackColor = \"#FFFFFF\"; // rowHeader.BackColor = System.Drawing.ColorTranslator.FromHtml(HeaderBackColor);

31

//实现确定要显示的表头样式,也可以通过计算生成

Literal newCells = new Literal(); newCells.Text = @\"编号

推荐第3篇:仓库管理系统简介

仓库管理系统简介

仓库管理系统(warehouse management system)以下简称WMS 本仓库管理系统是深圳市中海资讯科技有限公司自主开发的。仓储管理系统WMS关注的核心理念是高效的任务执行和流程规划策略,是建立在成熟的物流理念的基础之上的,高性能的WMS,高效的管理流程,先进的设备共同铸造成功的仓储管理。WMS通过不同的功能模块支持企业仓储配送的执行并适应不断变化着的商务策略、电子商务、客户需求、现代化设备、订单的大小和结构环境,提高作业效率与资源利用率来降低物流成本和增强客户服务水平,并提供了电子拣货标签系统和条码打印系统的接口,实现对一个大型仓库或配送中心的所有执行过程的有效管理,从而使仓储管理策略长期处于领先地位,帮助企业打造物流管理的核心竞争力,诠释现代化物流管理理念。

WMS的特点

WMS管理仓库作业的结果记录、核对和管理外最大的功能是对仓库作业过程的指导和规范:即不但对结果进行处理,更是通过对作业动作的指导和规范保证作业的准确性、速度和相关记录数据的自动登记(入计算机系统),增加仓库的效率、管理透明度、真实度降低成本比如通过无线终端指导操作员给某定单发货,处理好库存管理与不确定性关系的唯一办法是加强企业之间信息的交流和共享,增加库存决策信息的透明性、可靠性和实时性。

WMS的作用

由计算机控制的仓库管理系统的目的是独立实现仓储管理各种功能:收货、在正确的地点存货、存货管理、定单处理和分拣。WMS将关注的焦点集中于对仓储执行的优化和有效管理,同时延伸到运输配送计划、和上下游供应商客户的信息交互,从而有效提高仓储企业、配送中心和生产企业的仓库的执行效率和生产率,降低成本,提高企业客户的满意度,从而提升企业的核心竞争力。

WMS的使用 软件在服务器安装完毕后,客户端采用浏览器(Browse)登陆系统,即可使用。

推荐第4篇:图书仓库管理系统论文

前 言

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期.随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高.书籍做为人类的精神食粮,在现代社会中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择.与此同时,为了管理大量的图书,图书仓库也大量的出现,仓库的管理问题也就提上了日程.随着图书的大量增加,其管理难度也越来越大,如何优化仓库的日常管理也就成为了一个大众化的课题.

在计算机飞速发展的今天,将计算机这一信息处理利器应用于仓库的日常管理已是势必所然,而且这也将为仓库管理带来前所未有的改变,它可以带来意想不到的效益,同时也会为企业的飞速发展提供无限潜力.采用计算机管理信息系统已成为仓库管理科学化和现代化的重要标志,它给企业管理来了明显的经济效益和社会效益.主要体现在:

极大提高了仓库工作人员的工作效率,大大减少了以往入出存流程繁琐,杂乱,周期长的弊端.

基于仓库管理的全面自动化,可以减少入库管理,出库管理及库存管理中的漏洞,可以节约不少管理开支,增加企业收入.

仓库的管理的操作自动化和信息的电子化,全面提高了仓库的管理水平.

随着我国改革开放的不断深入,经济飞速的发展,企业要想生存,发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化,信息化则是其中极其重要的部分.为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统已变得十分心要.

入库,库存,出库还是现在企业图书仓库管理的常规基本模式,虽然,最近又出现了很多新的管理模式,如:基于零库存思想的沃尔玛特管理方式,但这些新的思想在中国大部分企业的管理中还是难以实现的.所以如何设计好仓库管理系统,尽可能地减少仓库管理的重复性和低效性就成为当前最为重要的问题.图书仓库管理的核心是入库,库存和出库之间的联系,如何处理好三者之间的关系是系统最为关键的部分.另外,员工信息和供应商信息管理也是仓库管理中一个必不可少的部分,它提供着与入库和出库相关的一些信息,使得整个系统更加完整,更加实用.

通过对仓库管理日常工作的详细调查,搜集了大量的资料,从系统结构的组织,功能的实现,技术的要求以及可行性等多方面进行考虑,认为本课题是一个适应现今图书仓库管理需求的计算机信息管理系统,具有一定的实际开发价值和使用价值.

推荐第5篇:仓库管理系统vf 毕业论文

甘肃机电职业技术学院

GanSu Institute of Mechanical & Electrical Engineering

毕业设计题目:系 别:专 业:班 级:制 作 小 组 :指 导 教 师 :

21

毕业设计

仓库管理信息系统

经济与信息管理系

计算机信息管理 G113504 第四组 陈 海 峰

2014 年 06月 3 日

计算机信息管理专业 专科论文

21 页

第 2

论文题目:仓库管理系统

论文题目:Warehouse management system

论文作者:第四组 论文作者:Disizu

目录

摘要 ................................................................................................................错误!未定义书签。

一、课题设计背景 ...........................................................................................................................4

二、绪论...........................................................................................................................................4

三、仓库管理系统的概述 ...............................................................................................................5

(一)数据库应用系统开发简介 ...................................................................................................5

(二)仓库管理系统 .......................................................................................................................5

(三)仓库管理系统研究背景与意义 ...........................................................................................6

四、系统分析 ...................................................................................................................................6

五、系统需求 ...................................................................................................................................7

六、系统总体设计 ...........................................................................................................................7

(一)系统目标设计 .......................................................................................................................8

(二)详细设计结构图 ...................................................................................................................8

(三)系统功能说明 .......................................................................................................................8

七、系统数据表设计 .......................................................................................................................9 (一)建立管理员数据表(gly) ...................................................................................................10 (二) 建立密码数据表(mm) ....................................................................................................10 (三) 建立入库详细数据表(rkxx) ...........................................................................................10 (四)建立物品详细表(wpxx) ...................................................................................................10

八、详细设计 .................................................................................................................................10 (一)建立详细浏览表单(xxll) ..................................................................................................10 (二)建立入库浏览表(rkll) ......................................................................错误!未定义书签。 (三)建立品名查询表(pmcx) ...................................................................错误!未定义书签。 (四)建立库房号查询表单(kfcx) .............................................................错误!未定义书签。 (五)建立编号查询表单(bhcx) ................................................................................................13 (六)建立添加表单(tjwp) .........................................................................................................13 (七)建立统计表单(tj) ..............................................................................................................14 (八)建立报表 ................................................................................................................................15 (九)建立打印表单(dy) ............................................................................................................15 (十)建立程序1 .............................................................................................................................16 (十一)建立功能界面(gnjm) ....................................................................................................16 (十二)建立管理员登陆表单(glydl) ........................................................................................16 (十三)建立普通用户登陆表单(ptyhdl) ..................................................................................17 (十四)建立权限选择表单(qxxz) ............................................................................................18 (十五)建立欢迎界面表单(hyjm) ............................................................................................18 (十六)、调用菜单界面表单(表单1) .....................................................................................19

九、心得.........................................................................................................................................20

十、致谢.........................................................................................................................................21

一、参考文献 .............................................................................................................................21

21

第页

摘要

仓库管理系统是为了实现企业产品管理的系统化、规范化和自动化,从而提高企业管理效率而设计的。它完全取代了原来一直用人工管理的工作方式,避免了由于管理人员的工作疏忽以及管理质量问题所造成的各种错误,为及时、准确、高效的完成仓库管理提供了强有力的工具和管理手段。仓库管理系统是一个中小型数据库管理系统,它界面美观、操作简单、安全性高,基本满足了仓库管理的要求。整个系统由基本信息、单据中心、查询统计、报表打印、维护设置、帮助等模块组成。

本文主要分析了仓库管理系统的一些基本功能和组成情况,包括系统的需求分析、系统结构,功能模块划分以及数据库模式分析等,重点对应用程序的实际开发实现作了介绍。达到了数据的一致性和安全性,且应用程序功能完备,符合了仓库管理系统作为典型的信息管理系统(MIS)的要求。同时简单介绍了VisualFoxpr6.0数据库程序设计编程环境功能特点,仓库管理系统是企业物流管理中不可或缺的一部分。

关键字:仓库管理 数据库 信息管理 VisualFoxpr6.0数据库程序设计

一、课题设计背景

仓库管理是与我们日常生活息息相关的问题,随着改革开放的不断深入经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。仓库管理信息系统正是基于这样的需求背景下研制开发的。

二、绪论

仓库管理系统是一个企事业单位不可缺少的一部分,它的内容对于企业的决策者和管理者来说都是至关重要的,因此,仓库管理系统应该能够为用户提供充足的信息和快捷的查询手段,但一直以来人们使用传统的人工方式管理仓库,这种管理方式存在着许多缺点,诸如效率低,保密性差等,而且时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。随着科学技术的不断提高,计算机科学不断发展,其强大的功能已经被人们深刻认识,它已经进入了人类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的共

21

第页 一部分,使用计算机对产品仓库信息进行管理,具有着人工管理无法比拟的优点,它检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,可减少更多的人力物力,这些都能够极大地提高货品仓库的管理效率,也是企业仓库管理科学化、正规化,与世界接轨的重要条件。因此,开发一个仓库管理系统是很有必要的,具有其特有的技术意义和管理意义。

三、仓库管理系统的概述

仓库管理系统是通过系统管理、信息录入、信息查询、信息打印、信息统计等功能,浏览、查询、添加、统计、打印等功能综合运用的管理系统,有效控制并跟踪仓库业务的物流和成本管理全过程,实现完善的仓储信息管理。该系统可以独立执行库存操作,与其他系统的单据和凭证等结合使用,可提供更为完整全面的企业业务流程和财务管理信息。

本文按照软件工程思想和管理信息系统的开发步骤,设计并实现了一个仓库管理信息系统。以系统开发过程为主线,介绍了系统从需求分析,逻辑设计,总体设计,详细设计以及系统测试、实施各阶段的主要内容和成果,包括系统结构图、业务流程图、数据流程图、E-R模型、物理表实现及其关系、功能模块、界面设计等等。最后对实现系统的优缺点进行了分析,提出了今后进一步完善系统的方向和方法。

设计实现的管理系统能够正确有效地完成仓库管理的日常入库出库等工作,极大提高了管理工作的效率和正确性,并能够根据需求进行灵活的查询,完成数据查询等功能;系统与数据库管理系统结合,提供了功能较为强大的数据查询功能,防止了越权操作、误操作,;系统界面友好,操作简单,效率高易掌握。最后,该系统是典型的管理信息系统(MIS),其设计开发过程具有通用性,对类似工作的开展具有借鉴意义。

(一)数据库应用系统开发简介:在数据库应用系统开发之前,对开发数据库的基本概念应当了解,对数据库的结构、开发数据库应用程序的步骤、开发体系及方法都应当有相当清晰的了解和认识。数据库应用系统开发的目标是建立一个满足用户长期需求的产品。开发的主要过程为:理解用户的需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。

(二)仓库管理系统:仓库作为一总货品资源的集散地,货品的种类繁多,包含很多的息数据的管理。据调查得知,以前仓库进行信息管理的方式主要是基共

21

第页 于文本、表格等纸介质的手工处理,对于货品的出入库情况的统计和核实等往往采用对账本的人工检查,对管理者的管理权限等不受约束,任何人都可查看,这样容易引起资料外泄。另外,数据信息处理工作量大,容易出错,由于数据繁多,容易丢失,且不易查找。总的来说,缺乏系统、规范的信息管理手段。而且,一般的存储情况是记录在账本上的,仓库的工作人员和管理员也只是当时记得比较清楚,时间一长,如果再要进行查询,就得在众多的资料中翻阅查找了,这样造成费时、费力,如要对很长时间以前的货品进行更改就更加困难了。因此,很有必要建立一个仓库管理系统,使货品管理工作规范化,系统化,程序化。提高信息处理的速度和准确性。

(三)仓库管理系统研究背景与意义: 随着我国经济的飞速发展,各种类型规模的公司企业迅速崛起,许多从事生产和经营管理的企业都有自己生产和销售的产品,而这些产品都需要储存在仓库中,对于每个企业来说,随着企业规模的不断扩大,产品数量的急剧增加,所生产产品的种类也会不断地更新与发展,有关产品的各种信息量也会成倍增长。面对庞大的产品信息量,如何有效地管理仓库产品,对这些企业来说是非常重要的,仓库管理的重点是销售信息能否及时反馈,从而确保企业运行效益。而仓库管理又涉及入库、出库的产品、经办人员及客户等方方面面的因素,如何管理这些信息数据,是一项复杂的系统工程,充分考验着仓库管理员的工作能力,工作量的繁重是可想而知的,所以这就需要由仓库管理系统来提高仓库管理工作的效率,这对信息的规范管理、科学统计和快速查询,减少管理方面的工作量,同时对于调动广大员工的工作积极性,提高企业的生产效率,都具有十分重要的现实意义。

四、系统分析

在设计软件系统之前,首先必须确定用户究竟要求软件系统完成什么任务,所以分析阶段的基本任务是了解用户的需求,并将用户的需求用书面形式表达出来。这个阶段还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。系统分析的结果是系统开发的基础,关系到工程的成败和软件产品的质量。在全面客观的系统分析的基础上,根据用户提出的系统功能进行相应的功能设计。

下面是我们根据仓库管理系统的现状结合自身的设计需求来进行的可行性分析:

21

第页 可行性分析的任务,并不是所有问题都有简单明显的解决办法,事实上,许多问题不可能在预定的系统规模之内解决。如果问题没有可行的解,那么花费这项开发工程上的任何时间、资源、人力和经费都是无谓的浪费。

可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。所以从以上的分析原则来看,所设计的仓库信息管理系统是一个规模不太大的系统,但是目标明确,清晰的描述了对目标系统的一切限制和约束。在使用过程中,要看它能不能带来效益,毕竟在现今社会效率是第一位的。21世纪是计算机的时代,它必然取代一部分人的工作,高科技的信息系统进入社会生活的方方面面是发展的趋势。

五、系统需求

在设计软件系统之前,首先必须确定用户究竟要求软件系统完成什么任务,所以分析阶段的基本任务是了解用户的需求,并将用户的需求用书面形式表达出来。这个阶段还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。系统分析的结果是系统开发的基础,关系到工程的成败和软件产品的质量。在全面客观的系统分析的基础上,根据用户提出的系统功能进行相应的功能设计。仓库管理系统应分成以下几个阶段开发:

第一阶段建立的仓库管理系统由以下8个子系统组成: 1.满足仓库物品查询功能以及分类查询的功能 2.满足仓库物品出入库统计的功能 3.满足仓库物品各种信息记录的功能 4.满足统计物品信息的功能 5.可制作报表 6.出入库数据记录 7.管理员及普通用户的权限 8.满足保密功能

第二阶段建立的仓库管理系统主要在上次基础上对其功能进行修改以及扩充。在功能扩充上应该使系统更具实用性。

六、系统总体设计

21

第页

(一)系统目标设计

系统开发的总体任务是实现企业产品管理的系统化、规范化和自动化,从而达到提高企业管理效率的目的。

(二)详细设计结构图

(三)系统功能说明 该系统管理分为三大功能 1.普通用户功能 2.管理员功能

3.信息安全(密码)功能

(1)普通用户功能:输入正确用户名、密码后进入详细浏览界面,在此界面普通用户享有查看库存物品编号、品名、产地、进口否、库房号、照片的权限,且此界面含有功能按钮进行帮助快速浏览。此界面可以退出,即退出本界面。 (2)管理员功能:输入正确账户名和密码后,进入主要功能界面,此功能界面比较清楚简洁地展示了管理员享有的各个功能,对功能进行细分。主要有:详细浏览、入库浏览、按物品名查询、按库房号查询、按编号查询、添加、统计、打印等功能。此界面可以退出,即退出本系统。 (3)信息安全(密码)功能:人员权限区分

(4)打开仓库管理系统,首先展示的是欢迎界面,此界面显示 当前日期,并且含有说明文字等。此界面可以退出,即退出系统。 共

21

第页 (5)权限选择中对管理员与普通用户的权限进行分类,其中普通用户只拥有浏览的权限,而管理员拥有查看、统计、打印,浏览等权限。此界面可以退出,即退出本界面。

(6)登陆界面包括普通用户登陆界面和管理员登陆界面,两者都需要键入账户名和密码,密码错误不得进入。此界面可以退出,即退出本界面。

(7)a、管理员进入详细浏览界面,在此界面普通用户享有查看库存物品编号、品名、产地、进口否、库房号、照片的权限,且此界面含有功能按钮进行帮助快速浏览。此界面可以退出,即退出本界面。

b、管理员进入入库浏览界面,在此界面里管理员可以查看物品的编号、库房号、品名、类别,且此界面含有功能按钮进行帮助快速浏览。此界面可以退出,即退出本界面。

c、管理员进入按编号查询界面,在此界面管理员可以输入物品编号进行快速查询物品的信息,而且可以使用用清除键快速清除输入编号。此界面可以退出,即退出本界面。

d、管理员进入按品名查询界面。在此界面管理员可以输入物品名进行快速查询,进而查看物品的信息,而且可以使用清除键快速清除输入的品名。此界面可以退出,即退出本界面。

e、管理员进入按库房号查询界面。在此界面管理员可以在组合框里选择需要查询的库房进行快速查询,进而查看物品的信息。此界面可以退出,即退出本界面。

f、管理员进入添加物品界面。在此界面管理员可以在物品信息框里键入物品的各种信息,点击添加按钮,把入库的新物品追加的数据库的物品详细表中。此界面可以退出,即退出本界面。

g、管理员进入统计界面。在此界面管理员可以在选项按钮组中选择需要统计的依据,可以按类别、进口否及库房号进行统计,进而查看各种统计信息。此界面可以退出,即退出本界面。

h、管理员进入打印界面,在此界面管理员享有打印、预览报表的功能。此界面可以退出,即退出本界面。 (8)系统功能模块设计。

七、系统数据表设计

经过分析,所开发的仓库管理系统应有四个数据表,分别是: 共

21

第页 (一)建立管理员数据表(gly):使用仓库管理系统的身份数据,包含的数据项有管理员编号、登录口令、权限代码。

(二) 建立密码数据表(mm):进入仓库管理系统设置的权限,普通用户及管理员输入正确的密码才能进入查询仓库管理系统信息。

(三) 建立入库详细数据表(rkxx):采购物品入库的详细情况,包含的数据项:编号、品名、类别、库房号。

(四)建立物品详细表(wpxx):物品的基本数据,包含的数据项:编号、类别、库房号、出口否、产地。

八、详细设计

在进行详细设计之前需要建立如下表单:

(一)建立详细浏览表单(xxll)

21

第页

按上图建立标签,文本框,命令按钮。 右键添加数据环境,添加wpxx 设置controlsource,字符数等属性 第一个的代码是: go top thisform.refresh 上一个的代码是: if .not.bof() skip -1 thisform.refresh else meagebox(\"已经是第一个了\") endif

(二)建立入库浏览表(rkll)

下一个的代码是: if .not.eof() skip 1

thisform.refresh else

meagebox(\"已经是最后一个了\") endif

末一个的代码时: go bottom thisform.refresh 退出的代码是: thisform.release

按上图建立标签,命令按钮,文本框 右键添加数据环境,添加rkxx表 设置controlsource,字符数等属性 共

21

第一个的代码是: go top

thisform.refresh 上一个的代码是: if .not.bof() skip -1 thisform.refresh else meagebox(\"已经是第一个了\") endif 下一个的代码是: if .not.eof() skip 1

(三)建立品名查询表(pmcx)

thisform.refresh else

meagebox(\"已经是最后一个了\") endif

末一个的代码时: go bottom thisform.refresh 退出的代码是: thisform.release

按上图新建三个按钮,一个文本框,一个标签,一个表格,设置属性

查询的代码是:

select * from wpxx where 品名==alltrim(thisform.text1.value) into cursor aa

(四)建立库房查询表(kfcx)

thisform.grid1.recordsource=\"aa\" thisform.refresh 清除的代码是:

thisform.text1.value=\"\" 退出的代码是: thisform.release

21

页 按图建立组合框,按钮及表格,设置属性。

右键,把rkxx和wpxx添加入,设置属性,右键组合框在组合框生成器里添加库房字段,设置属性。

其中查询的代码是:

select * from rkxx where 库房号(五)建立编号查询表单(bhcx)

=thisform.combo1.value cursor hh

into

thisform.grid1.recordsource=\"hh\" thisform.refresh 退出的代码是: thisform.release

按上图建立一个标签,一个文本框,三个按钮,一个表格,设置属性。 其中查询的命令为:

select * from wpxx where 编号==alltrim(thisform.text1.value) into cursor aa (六)建立添加表单(tjwp)

thisform.grid1.recordsource=\"aa\" thisform.refresh 清除的命令是:

thisform.text1.value=\"\" 退出的命令是: thisform.release

右键添加wpxx到数据环境,设置属性,将编号、类别、库房号、规格、品名、产地拖到表单上,设置属性。 共

21

第页

添加的代码是:

m=meagebox(\"是否保存?\",4+48,\"信息窗口\") if m=6 meagebox(\"信息已保存\",48,\"信息窗口\") else delete pack endif append blank (七)建立统计表单(tj)

thisform.txt编号.setfocus thisform.refresh 退出的代码是: delete pack

thisform.release use

按上图建立选项按钮组,数量为3,建立两个按钮及一个表格,设置属性。 统计的代码是: do case case thisform.optiongroup1.value=1 select 类别,count(*) as 物品数 from wpxx group by 类别 into cursor aa

thisform.grid1.recordsource=\"aa\" thisform.refresh case thisform.optiongroup1.value=2 共

21

select 进口否,count(*) as 物品数 from wpxx group by 进口否 into cursor bb

thisform.grid1.recordsource=\"bb\" thisform.refresh case

thisform.optiongroup1.value=3 select 库房号,count(*) as 物品数 from wpxx group by 库房号 into cursor cc

thisform.grid1.recordsource=\"cc\" thisform.refresh endcase 退出的代码是: (八)建立报表

Thisform.release

按上图建立报表。添加数据环境rkxx,将字段拖进报表设置属性.预览效果如下图:

(九)建立打印表单(dy)

按上图建立一个选项按钮组,数量为2共

21

及两个按钮,设置属性。 统计的代码是: do case case thisform.optiongroup1.value=2 report form 报表 environment to printer thisform.refresh case (十)建立程序1

thisform.optiongroup1.value=1 report form 报表 environment preview

thisform.refresh endcase 退出的代码是: thisform.release 内容为:do form hyjm read events (十一)建立功能界面(gnjm)

建立lable1 及10个命令按钮如下图:

详细浏览的命令为: do form xxll 入库浏览的命令为: do form rkll 按物品名的命令为: do form pmcx 按库房名的命令为: do form kfcx 按编号的命令为: do form bhcx (十二)建立管理员登陆表单(glydl)

添加的命令为: do form tjwp 统计的命令为: do form tj 打印的命令为: do form dy 退出的命令为: quit 共

21

按上图建立两个标签,两个按钮,一个组合框,一个文本狂,设置属性。 右键添加mm和gly表,设置属性。 登录的代码是: go top locate for

i=i+1 if i

meagebox(\"密码错,重新输入!\")

thisform.text1.value=\"\" else

meagebox(\"信息错,禁止进入!\") quit endif endif

退出的代码是: =alltrim(thisform.combo1.value) if密

码=alltrim(thisform.text1.value) meagebox(\"可以进入!\") do form gnjm thisform.release else thisform.release (十三)建立普通用户登陆表单(ptyhdl)

按上图建立两个标签,两个按钮,两个文本狂,设置属性。 共

21

登录的代码是:

IF THISFORM.Text1.Value=\"黄丽丽\" and THISFORM.Text2.Value=\"123\" MESSAGEBOX(\"密码正确!可以进入系统!\") do form pmxx THISFORM.Release

THISFORM.Text2.value=\"\" THISFORM.Text1.Setfocus

ELSE

MESSAGEBOX(\"密码或帐

户错!禁止进入系统!\")

quit ELSE IF i

ENDIF

ENDIF

退出的代码是:thisform.release 户错!请重新输入!\") THISFORM.Text1.value=\"\" (十四)建立权限选择表单(qxxz)

新建opiongroup1,buttoncount设置为2 新建两个命令按钮,caption分别为“进入”“退出”

设置picture,及命令按钮组的属性backstyle ,fontsize,对其进行单独属性设置。 进入的代码是: do case case (十五)建立欢迎界面表单(hyjm)

thisform.optiongroup1.value=1 do form glydl thisform.release case

thisform.optiongroup1.value=2 do form ptyhdl thisform.release endcase 退出的代码是: Thisform.release 共

21

点击界面,设置picture,新建lable1,lable3 ,label2 caption为“现在是”“欢迎使用仓库管理系统”“” 新建两个命令按钮,caption为“进入”“退出” 进入代码是: do form qxxz Thisform.release 退出代码是: quit 点击属性backstyle,fontsize,

本界面的init代码是:

thisform.label3.caption=alltrim(str(year(date())))+\"

\"+alltrim(str(month(date())))+\"月\"+alltrim(str(day(date())))+\"日\"

新建计时器。计时器代码是: thisform.label3.caption=alltrim(str(year(date())))+\"

\"+alltrim(str(month(date())))+\"月\"+alltrim(str(day(date())))+\"forecolor,fontbold等进行细节设置 日\" (十六)、调用菜单界面表单(表单1)

21

第页 进入按钮代码: do form 菜单1.mpr Thisform.release 新建日期计时器。计时器代码是: thisform.label4.caption=alltrim(str(year(date())))+\"年 \"+alltrim(str(month(date())))+\"月\"+alltrim(str(day(date())))+\"日\" 新建滚动字幕计时器。计时器代码是:

if thisform.Label1.left+ thisform.Label1.width

thisform.Label1.left=thisform.Label1.left-10 endif

退出按钮代码: thisform.releas

九、心得

经过一个多月的毕业设计,一个完整的仓库管理系统终于设计完成了,但也正在这时我真正意识到所学知识的不足,可以说关于这方面的接触才刚刚开始,深有感触,无以言表。

关于本系统,虽然对仓库管理进行了系统的创建,但我们不可忽略的是这个系统并不完美,我们也不能高枕无忧。我们要在以后的实践中去检验它的可用性,特别要考虑它的实时性和安全性,这才是我们最值得考虑的问题。一个系统好不好,要经过反复的使用才能知道,不光光是理论中分析和设计得出来的。由此我就想到了在做这个系统时,有的同学用了ACCESS ,有的同学用了SQL 等来建不同的数据库,这样就导致有的是系统自带的代码,而有的则是我们写进去的纯代码,当然也就出现了各种各样的问题。特别是关于系统的可移植性,有许多不足之处,这样我们就应该多查阅相关资料,在实际操作中结合所学知识点解决问题,反复地熟练应用,才能把系统设计的巧,设计的好。同学们之间的交流也十分重要,交流就是进步,有时进会带你走入一种柳暗花明的欣喜境界。 经过这次毕业设计,引发了我们的很多思考和兴趣,首先是做程序要勤,手勤,眼勤,心勤;其次要有韧性,不怕麻烦,不怕失败,反复调试,反复练习,这样才能找到最佳的程序设计。使我们懂得遇到问题自己先思考,想办法去解决,从而提高自己的实际操作能力和培养独立思考能力,同时督促自己在学习过程中不断完善自我。也懂得了一个道理:做事应该考虑周到,不管做什么事情要努力去做细心理会认真对待每一件事情,尽自己最大的努力去完成。一份耕耘,一份收获,付出就有回报。 共

21

第页

十、致谢

非常感谢我的导师给我们组的悉心关怀,让我们组顺利地完成了毕业论文,当然,也感谢母校辛勤培育之恩,各位领导、老师和同学的大力帮助之情,使我学到了许多新的知识,同是也更懂得了一些做学问的道理,这是一笔宝贵的财富。

从选择毕业设计题目,到毕业设计规划,查找相关资料,设计模型,具体实施,结束论文,整个大致的流程中,指导老师都给予了我耐心的指导和默默的关心,设计为期之长,其间遇到了不少问题,也承蒙了老师的照顾,真的想对老师说一声:老师,辛苦了,谢谢您。除此之外,我还要致谢同学的得力相助,我希望我能向他们学习,发扬那种百折不挠、孜孜不倦的对知识求索精神,那种至高无上的敬业精神,马上我就要走向工作单位了,我相信我会时刻用他们的平凡而不简单来鞭策自已。

最后,祝愿我的老师和学友们永远幸福,快乐

十一、参考文献

[1]王利.全国计算机等级考试二级教程VisualFoxpr6.0数据库程序设计.高等教育出版社.2013.5 ISBN 978-7-04-37231-1 [2]尹涛.管理信息系统.高等教育出版社.2005.01 ISBN 978-7-04-014625-7

21

21

推荐第6篇:仓库管理系统开题报告

论文开题报告

学位论文题目: 工程领域名称: 软件工程 学

号:

名:

校内导师姓名:

填表日期:

年 月 日

0

一、开发背景(300-500字左右)

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。如何通过计算机为我们完成更多的事情,进而达到办公自动化和优化日常工作的目的,也就成了一个大众化的课题。作为计算机应用的一部分,使用计算机对信息进行管理,具有与手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高仓库管理的效率,也是企业的科学化、正规化的管理与世界接轨的重要条件。

仓库管理是与我们日常生活息息相关的问题。大到公司、超市的仓库管理,小到图书馆的藏书管理,都可以认为是各种各样的仓库管理需求。随着我国改革开放的不断深入,经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统,尽可能地减少仓库管理的重复性和低效性,已变得十分必要。

数据库技术产生于60年代,40多年来数据库技术得到了迅速发展,并已形成较为完整的理论体系和一大批实用系统。近年来,随着 World Wide Web(WWW)的猛增及Internet 技术的迅速发展,数据库技术成为最热门技术之一。面向对象软件的开发技术, 也大大保障了软件开发的速度和效果。信息技术的日新月异,给仓库管理带来巨大的影响。为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统,尽可能地减少仓库管理的重复性和低效性,已变得十分必要。随着计算机的普及,计算机硬件价格也已经不再是什么天文数字。计算机应用技术的发展,计算机硬件性能的不断改进,为仓库管理系统的开发提供了技术支持和经济可行性。管理系统的应用,可以将工作者从烦杂的劳动中解脱出来,极大提高工作效率。因此,不管是从技术上,还是经济上,设计和开发一个仓库管理系统都已经具有较好的可行性。

二、选题的意义和价值(200字左右)

1.理论研究方面的意义和价值

仓库管理系统主要是对通过研究当前仓库系统的管理现状、存在问题以及 1

现实需求, 设计一个针对仓库管理工作的管理信息系统。该系统能够提供较为完备的功能,对于提高 工作效率、加快仓库管理的自动化具有较为重要的意义。 2.实际应用方面的意义和价值

 信息信息化,实现信息快速传递提高工作效率。方便管理者及时从平台 查询物品相关信息。

 能做到管理系统化、规范化、自动化和人性化管理,通过系统提供的业务 数据查询功能即查找到所有仓库中你想要的物品有没有、有多少、进货的价格,以便及时了对仓库中的所有物品及时归纳总结并做出科学的进出货目标,以期达到公司利益最大化。

三、论文研究的目标与主要内容(1000-1500字左右) 1.课题研究目标

仓库信息管理平台根据企业各个部门的需要来发放物资设备,并随时按期进行库存盘点,作台帐,根据企业领导和自身管理的需要 按月,季度,年来进行统计分析,产生相应报表。为了加强关键物资,设备的管理,要定期掌握其储备,消耗情况,根据计划定额和实际消耗定额的比较,进行定额的管理,使得 资金使用合理,物资设备的储备最佳。

2.课题主要研究内容

仓库管理平台开发主要包括以下内容:  可行性研究

可行性研究的任务是来确定仓库管理系统否有必要开发,可行性研究从下几个方面:

 技术可行性 使用现有的技术能否实现该系统。

 经济可行性 这个系统的经济效益是否能超过它的开发成本。  操作可行性 系统的操作方式是否简单方便,在实际使用过程中是否能够满

足实际的应用。 3.课题拟解决的关键问题

仓库管理系统解决的关键问题是:

 对系统本身:面向大多数公司的,实现对货物统一化管理。

 对管理者:实现对本公司所有物品查询功能,譬如查询存放仓库。

 对物品:实现对所有物品在仓库中的保管,譬如查询物品所剩的数量和所存放的仓库及入库前的该物品的进货价格。

4.功能模块及设计思路

功能模块:

2

 基本资料:这里录入物品基本资料,包括物品的编号、名称、材料、型号。  入库管理:这里主要有入库物品的资料,包括物品编号、入库日期、存放仓库编号和入库的数量。

 出库管理:这里主要有出库物品的资料,包括物品编号、出库日期、存放仓库编号和出库的数量。

 库存管理:对所有仓库中查询,包括物品编号、名称、存放仓库编号、该物品的总数量。

 仓库管理:对所有仓库进行统计,包括仓库编号、名称、存储能力、剩余存储空间。

 报损管理:对仓库中的物品质量进行检查,包括物品的编号、名称、材料、存放仓库编号、损坏数量。

 库存调拨:两个仓库之间的货物相互调配:包括调库编号、出库编号、物品编号和物品数量。

 系统管理:用户登录、修改密码、添加用户。 设计思路见如下功能模块结构图:

功能模块基本资料入库管理出库管理仓库管理报损管理库存调拨系统管理 图 B/S 功能模块结构图

四、研究工作拟采取的主要理论、技术路线和实施方案(1000字左右)

3

1.研究方法与理论

本课题主要采用文献研究、需求调研与分析、系统设计与测试等方法,软件开发理论、信息系统开发理论、进行分析,满足信息管理平台的应用需要。

在文献研究阶段,将收集仓库信息管理方面相关资料、著作及开发技术资料; 需求调研与分析阶段将深入到公司做市场调研,并让仓库管理员给出意见和建议,了解他们的需求,并做好记录;

系统设计,拟采用快速原型法构建系统,通过回朔法,不断完善系统开发与设计。

2.研究工具或开发工具 (1)系统环境要求:

平台:基于Windows平台,用户访问采用B/S结构。

 Web服务器:TOMCAT6.0。  数据库:Orcal。

 浏览器:IE要求支持IE6.0。  系统: Windows NT/2000/XP。  服务器硬件要求:普通PC。  客户端硬件要求:普通PC。

(2)开发工具或技术

本系统采用Java和Qrcal进行B/S模式下的B端的界面的开发,以及的S端的业务处理逻辑程序的实现和Plsql作为后台数据库的开发。在开发的过程中使用了Eclipse6.5、Tomcat 6.0等开发工具。

(3)选用依据

Java是一种简单易用、完全面向对象、具有平台无关性且安全可靠的主要面向Internet的开发工具,同时Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。自从1995年正式问世以来,Java的快速发展已经让整个Web世界发生了翻天覆地的变化。在早期,Java比较多的用在浏览器上,插入到网页中(即是Java Applet程序),成为最灵活、最强大的网页多媒体的载体,但由于Java虚拟机相对于个人电脑而言,有占用资源大,安全性相对较差等缺点,Applet逐渐的被后起之秀Flash所替代,但随着Java Servlet的推出,Java在电子商务方面开始崭露头角,最新的JSP(Java Server Page)技术的推出,更是让Java成为基于Web的应用程序的首选开发工具,目前的Java技术已成为所有大型web项目的必然选择。

4

3.技术路线与方案

由于采用B/S设计模式分层思想,同时根据软件工程的管理思想及系统分析的设计与分析的思想进行系统的开发,利用Java语言开发Web应用程序,提供MVC框架对系统的程序代码结构进行分层。分层的策略如下:

图 B/S示意图

五、论文最终目标和研究成果形式(100字以下) 1.论文最终目标

仓库信息管理平台,是为了方便公司管理而制作的基于B/S 结构的软件。 本系统的最终目标是:

 能对公司中所有库存的物品信息进行统计,以此为依据,让公司了解到需要哪些物品,以最少的投入获得最大的产出。实现一个完整的可运行的仓库管理系统。

2.最终成果形式

(即开发出软件,并形成学位论文)

开发出 ……软件系统,并形成学位论文《……》。

推荐第7篇:仓库管理系统课程设计报告

《软件工程》课程设计报告

仓库信息管理系统

专业班级: 学生学号: 学生姓名: 指导教师姓名:

2016年

6 月

一、系统可行性研究 .......................................2

二、系统的需求分析 .......................................5

三、系统概要设计 ........................................14

四、系统的详细设计 ......................................17

五、系统的实现和测试 ....................................20

六、实验总结 ............................................26

仓库信息管理系统

一、系统可行性研究

1.1引言 1.1.1编写目的

为了以最小的代价在最短的时间内确定仓库管理系统项目是否值得去开发,其中的关键和技术难点是什么,问题能否得到解决,怎样达到目的?我们编写了可行性报告以对这些问题进行分析。

除此之外,经过对此项目进行详细调查研究,我们初步拟定了系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。以便于中小规模工厂的仓库管理人员阅读及理解整个项目。 1.1.2项目背景

开发的软件系统的名称:仓库信息管理系统 项目提出者: 项目开发者:

项目使用者:仓库管理人员 1.2可行性研究的前提 1.2.1要求

A.功能:极大提高仓库工作人员的工作效率,大大减少以往入货、出库流程繁琐,杂乱, 周期长的弊端;基于仓库管理的全面自动化,减少入库管理、出库管理及库存管理中的漏洞,节约不少管理开支,增加企业收入;实现仓库的管理操作自动化和信息的电子化,全面提高仓库的管理水平。

B.性能:系统的存货信息必须保持更新状态,客户的产品出入库信息必须无差错,及时的 保存到仓库管理系统的服务器上,对服务器上的数据必须定时的检查并与仓库中存放的货物进行核对。

C.本系统要求输出的数据有:数据完整,详实,及时。

- 2在此方面,若此项目投入使用,将给企业带来丰厚的经济效益社会效益。并且,此项目开发成本低,占用资源少,在经济方面可行。 1.5操作可行性分析

本系统设计思路清晰,操作简捷,具有良好的用户界面,和较为完善的异常处理机制及信息处理机制,一般仓库管理者稍加培训即可使用。在操作方面可行。

二、系统的需求分析

2.1功能描述

本软件主要有以下几方面的功能:

(1)信息管理:可对商品进行查询,删除,修改操作,完成对商品信息管理的功能;

(2)库存管理:对商品入库,出库的管理。 2.2数据流图 2.2.1数据流分析

数据流图是组织中信息运动的抽象,是管理信息系统逻辑模型的主要形式。它可以综合的反映出信息在系统中的流动、处理和存储情况,具有良好的抽象性

- 4商品入库请求商品入库管理入库商品信息更新商品信息出库商品信息商品出库请求商品出库管理库存商品信息更新后的商品信息修改商品请求删除商品请求商品信息管理商品信息库存商品信息表商品清单查询商品请求图2-2 二层数据流图

对每一个功能模块的分解图

(1)对第一个模块“商品入库管理”的细分图

商品入库管理子系统包含两个功能模块:“商品入库”、“处理商品”; 一个文件存储:“入库商品信息表”

入库请求1商品入库商品编号1.11.21.31.4商品名称商品数量商品价格输入商品编输入商品名输入商品数输入商品价号称量格商品信息入库商品信息表入库商品信息

图2-3 “商品入库管理”分解图

(2)对“商品出库管理”的细分图

商品出库管理子系统包含两个功能模块:“商品出库”、“处理商品”;

一个文件存储:“出库商品信息表”

- 6入库请求1商品入库商品编号1.1输入商品编号商品名称商品价格1.21.31.4商品数量输入商品名输入商品数输入商品价称量格商品信息商品商品出库信息出库商品信息表入库商品信息表出库商品信息出库请求2商品出库商品名称2.1输入商品名称商品数量2.2输入出库数量入库商品信息6更新商品信息3删除商品输入商品编号3.1输入商品编号输入商品名称3.2输入商品名称商更新后的商品品信息信息输入编号4.1.1输入商品编号输入名称4.1.2输入商品名称商品信息库存商品信息删除商品请求管理员查询商品信息请求44.1请求分类查询商品信按条件查询息商品信息请求分类4.2查询所有商品信息库存商品信息表查询所有商品信息请求库存商品信息5.2输入新的编号修改后的商品信息输出信息修改商品信息请求修改编号商品名称5修改商品信息5.1输入商品名称管理员修改数量修改后的商品信息5.3输入新的数量

图2-6 底层数据流图

2.3 数据字典

数据字典是各类数据描述的集合,它是进行详细的数据收集和数据分析后所获得的主要成果。该系统的数据字典如下: 2.3.1 数据流

数据字典是各类数据描述的集合,它是进行详细的数据收集和数据分析后所获得的主要成果。该系统的数据字典如下:

1.数据源点和终点描述 (1)名称:商品

- 8

加工编号:1.4 输入数据流:商品数量

输出数据流:商品信息

加工逻辑:输入商品价格,输出商品信息 (6)加工名:商品出库

加工编号:2 输入数据流:出库请求

输出数据流:商品名称

加工逻辑:接收出库请求 (7)加工名:输入商品名称

加工编号:1.2 输入数据流:商品名称

输出数据流:商品数量

加工逻辑:输入商品名称 (8)加工名:输入出库数量

加工编号:2.2 输入数据流:商品数量

输出数据流:商品出库信息

加工逻辑:输入出库数量 (9)加工名:更新商品信息

加工编号:6 输入数据流:出库商品信息,入库商品信息,库存商品信息

输出数据流:更新后的商品信息

加工逻辑:接收修改的商品信息进行修改 (10)加工名:删除商品

加工编号:3 输入数据流:删除商品请求

输出数据流:输入商品编号

加工逻辑:接收删除请求

- 10 加工逻辑:修改商品信息

3.文件存储

(1)文件名称:入库商品信息表

简述:存放入库的商品信息

输入数据:商品信息

输出数据:入库商品信息

文件组成:商品的编号、名称、数量、价格 (2)文件名称:出库商品信息表

简述:存放出库的商品信息

输入数据:商品的出库信息

输出数据:出库商品信息

文件组成:出库商品数量 (3)文件名称:库存商品信息表

简述:存放所有商品信息

输入数据:更新后的商品信息,修改后的商品信息,删除后的商品信息

输出数据:库存商品信息

文件组成:商品的编号、名称、数量、价格

4.数据流

(1)数据流名字:入库请求 描述:对商品进行入库 组成:入库命令

(2)数据流名字:入库商品信息 描述:对入库商品信息处理

组成:入库商品信息=商品编号+名称+数量+价格 (3)数据流名字:商品编号 描述:输入商品编号 组成:商品编号

- 12

三、系统概要设计

3.1总体结构和模块设计 3.1.1总体结构设计

模块是软件结构的基础,软件结构的好坏完全由模块的属性体现出来,把软件模块化的目的是为了降低软件复杂性,使软件设计,测试,调试,维护等工作变得简易,但随着模块数目的增加,通过接口连接这些模块的工作量也随之增加。 1.总体结构框图

仓库信息管理系统库存管理信息管理商品入库商品出库删除商品修改商品查询商品信息按条件查询商品信息查询所有商品信息

图3-1系统总体结构图

2.模块说明

- 14

信息管理系统删除请求修改请求输入名称输入商品名称输入标号输入新编号商品信息查询请求删除商品信息删除商品信息接收信息查询商品信息反馈信息请求分类请求分类修改商品信息输入编号反馈输入名称反馈接收信息按条件查询商查询所有商品品信息接商收品信信息息输入商品编号及名称输入商品编号输入商品名称反馈输入数量反馈输入新数量

图3-3信息管理子系统结构图

(3)库存管理子系统结构图如图3-4所示

库存管理系统入库请求出库请求入库商品信息商品入库出库商品信息商品出库输入编号反馈输入名称输入反数馈量反馈反馈输入价格输入商品价格输入名称反馈信息输入商品名称输入数量反馈信息输入商品编号输入商品名称输入商品数量输入商品数量

图3-4 库存管理子系统结构图

四、系统的详细设计

4.1总体结构和模块设计

- 16储在入库商品信息表中。

商品出库模块模块:输入出库商品的编号以及出库的数量,把出库后的商品信息保存在出库商品信息表中。

删除商品模块:先输入商品的编号及名称,再删除该商品在库存商品信息表中的信息。

修改商品信息模块:先输入商品的编号及名称,在库存商品信息表中查询到该商品信息,再修改其对应信息。

查询商品信息模块:输入编号查询商品在库存商品信息表中的信息或查询库存商品信息表中的所有商品的信息。 4.1.2各个模块设计

(1)根据数据画出的结构图如图3-2所示

仓库信息管理系统商品信息商品信息请求处理库存管理系统请求处理信息管理系统

图4-2 仓库信息管理系统结构图

(2)信息管理子系统结构图如图3-3所示

- 18商品入库操作

商品出库操作

出库后的商品信息

出库数量多余商品数量时

- 20

当删除的商品不存在是

修改商品操作

修改商品界面

- 22

商品信息查询界面

所有商品信息

- 24

六、实验总结

包括实验问题中遇到问题,解决过程的分析;实验心得体会等,不得抄袭!

- 26 -

推荐第8篇:仓库管理系统课程设计报告

仓库管理系统课程设计报告

一、概述

项目背景:

仓库管理在企业的整个供应链中起着至关重要的作用,如果不能保证正确的进货和库存控制及发货,将会导致管理费用的增加,服务质量难以得到保证,从而影响企业的竞争力。传统简单、静态的仓库管理已无法保证企业各种资源的高效利用。如今的仓库作业和库存控制作业已十分复杂化多样化,仅靠人工记忆和手工录入,不但费时费力,而且容易出错,给企业带来巨大损失。使用仓库管理系统 , 对仓库各环节实施全过程控制管理,并可对货物进行货位、批次、保质期、配送等实现系统列号管理,对整个收货、发货、补货、集货、送货等各个环节的规范化作业 , 还可以根据客户的需求制作多种合理的统计报表。仓库管理系统能帮助企业合理有效地利用仓库空间,以快速、准确、低成本的方式为客户提供最好的服务。

系统特点: 本系统是采用面向对象的设计思想进行编制,整个系统由若干个表单、报表及一个主菜单组成,由项目管理器统一管理全部程序的编写和调试.用户在操作中可以通过主菜单调用系统的各个功能.在表单设计方面尽量考虑方便用户,简化操作,绝大部分操作只需点击鼠标即可完成,力求突出系统的便利性、实用性.设计环境与工具: 在现有的DBMS(Visual FoxPro)支持下进行。

二、需求分析

问题陈述:

需完成的功能: 产品入库管理,可以填写入库单,确认产品入库;

产品出库管理,可以填写出库单,确认出库;

借出管理,凭借条借出,然后能够还库;

初始库存设置,设置库存的初始值,库存的上下警戒限;

可以进行盘库,反映每月、年的库存情况;

可以查询产品入库情况、出库情况、当前库存情况,可以按出库单、入库单,产品、时间进行查询;

三、系统结构设计

(1) 系统功能结构设计(包括主要功能模块及功能模块的细化。)

本系统应能够方便的实现仓库货物存储信息的录入、修改、编辑和浏览等功能,高效地完成企业的各种产品信息的统计功能,打印出各种产品入库出库和盘库查询的信息表格,系统的各主要功能的要求如下: 信息录入功能: 仓库产品基本信息、产品入库信息、产品出库信息、产品清单资料等.浏览功能: 浏览仓库产品基本信息,浏览产品入库情况、出库情况、当前库存情况.查询功能: 产品标号,或者按验收时间查询库存设置等.报表打印功能: 打印仓库产品货单表,空白产品登记表和各种统计表. (2)数据库设计

一个数据库中包含许多表,表之间又有关联,所以设计数据库的步骤为:第一步,确定所需要的表;第二步,确定每个表所需要的字段;第三,确定各个表之间的关联关系;最后形成表的结构.定义表(包括表中的字段)、视图、索引、主关键字、确定表间的联系。

数据库要求:在数据库中至少应该包含下列数据表:

出库单表(chjy): 记录产品出库状况。

入库单表(cgdd):记录产品入库状况。

产品供应商表(gys):记录产品提供者。

公司雇员表(gy):记录来仓库存取产品的人员名单。 产品表(cp):记录仓库现存状况。

库存情况表;出库台帐; 入库台帐;

借条信息表(反映借出人,借出时间,借出产品,借出数量,还库时间等)。

(3)系统流程结构图

数据流图的基本目的是利用它作为交流信息的工具,利用它将对现有系统的认识或对目标系统的设想用数据流图描绘出来,供有关人员审查确认: 数据流图的另一个主要用途是作为分析和设计的工具,帮助分析员实现总结现有系统的目标,对更详细的设计步骤提供帮助.数据流图是描绘系统的逻辑模型,以图形的形式表示出来,以下是仓库管理系统的数据流图.

四、系统详细设计

(1) 描述每一个功能所完成的任务,指明实现该功能的表单、菜单、报表等。

系统的功能模块设计

图1-1

系统功能模块

(2) 说明主要功能的设计思想和方法(包括涉及到的数据源、关键的属性和代码等。)

设计思想分析:

将管理系统分为进库操作、出库操作、损耗操作、查询操作、报表操作、维护操作六部分。

1、入库时根据商品的具体情况进行处理,如果库中已存在此商品,就在原来的数量基础上加上进货数量,如果没有则自动新增此产品,并提醒管理员在最新报价表中加上此商品的最新报价(为了出库的正确性,某商品的最新报价的存在是其出库的前提)。如果商品已以入库,则自动在商品进出表中加上相关记录,以便于以后的核对。

2、为了达到出库价格的正确性,出库时系统自动将此商品的售价和最新报价里的价格进行比较,如果不相等则出现提示信息。另外,程序还有其他服务功能,比如如果商品数量不足或没有相关商品则出现提示信息。

3、商品的查询专门提供给广大客户使用,客户可以按商品编号和商品名称、数量、单价、进库出库信息、对库中的具体商品进行查询,查询有商品代号和商品名称两种方法,这样,客户可以轻松掌握仓库的库存情况,便于交易。

4、核对措施也是此系统中必备的,为了便于以后核对,出库的记录也将存储起来。出库单打印默认为2份,其一用交给交易对方,另一份管理员自己保存。便于核对。同样,本系统还会自动对入库情况进行记录,这样,用户能轻松掌握仓库的变化,可以随时对库存进行分析核对。

5、保密性是作为一个企业或者机构所十分重视的,给用户一个安全的环境是优秀的管理软件所必须做到做好的,本软件也做到了安全性,就是说登录时要有正确的密码,这样一来,只有系统管理员才有权更改系统里面的数据了。

6、本系统还带有自动清除测试记录功能(课本是本系统的测试数据),如果用户要正式使用仓库,只要选择操作菜单下的正式使用命令。这样就不需要用记一条条去删记录了。

(3)界面设计要合理、简明。

五、实施及测试 指出已实现的每个功能,附上运行、测试结果。

六、结束语

心得体会:

经过了这次仓库管理系统的课程设计我从中学到了很多,同时明白了做一个小型软件的步骤和流程.如何让自己设计的软件运用到具体的实际工作中,这是一个关键的环节.还有就是程序设计和运行测试中遇到的问题该如何解决,从解决问题中我也学到了许多平时课本上所没有的知识.当然,能够完成这个仓库管理系统我自己也感觉很有成就感.运用到的开发工具和软件技术: 此系统结合货物仓库管理的要求,对Visual FoxPro (VFP)数据库管理系统、SQL语言的学习和应用,主要完成货物仓库管理系统的需求分析,系统的数据库设计和实现,系统的表单设计,主控程序设计,并由此设计了数据库结构和应用程序。系统运行结果证明,本人设计的货物仓库管理系统可以满足仓库管理者完成仓库管理的日常工作,包括材料的入库,出库以及库存材料信息的管理维护等

软件还需要哪些改进:

在编写源程序代码的过程中对语言的运用还需要提高,应使写出来的程序更加简洁,易读懂,更加满足实际工作的需要.要想使做出来的程序更好的利用还需根据实际需要在今后的运用中不断的改进和完善.

七、参考资料

1.Visual FoxPro 程序设计及其应用系统开发

李作纬 等

中国水利水电出版社 2.数据库应用系统开发技术

刘军

机械工业出版社 3.其它资料若干

推荐第9篇:仓库管理系统课程设计 UML

无锡职业技术学院实践环节材料撰写用纸

二、仓库信息管理系统分析与设计

(一)《仓库信息管理系统》的需求建模

1、需求分析

仓库信息管理系统要能完成以下功能:

仓库存放的货物品种繁多,堆存方式以及处理方式也非常复杂,随着业务量的增加,仓库管理者需要处理的信息量会大幅上升,因此往往很难及时准确的掌握整个仓库的运作状态。针对这一情况,为了减轻仓库管理员和操作员的工作负担,此系统在满足仓库的基本管理功能基础上发挥信息系统的智能化。

根据要求可将系统分为四个模块 (1)用户登录模块

普通操作员和管理人员登录此系统,执行仓库管理的一些操作,但是普通操作员和管理人员所能执行的功能不一样。 (2)仓库管理模块

管理员工作需要登陆系统,才能够进行操作,系统中的各项数据都不允许外人随便查看和更改,所以设置登陆模块是必须的。可以执行仓库进货,退货,领料,退料;商品调拨,仓库盘点等功能。 (3)业务查询模块

在用户登录系统后,可以执行库存查询,销售查询,仓库历史记录查询。

(4)系统设置模块

显示当前仓库系统中的信息,在系统中可以执行供应商设置,仓库设置。

2、功能模块分析 (1)登录模块

 普通操作员:显示当天仓库中的所有库存的信息。  管理员:修改仓库中的库存信息。

 用户注销:在用户执行完仓库功能时,注销。  用户退出。 (2)管理模块

 仓库库存的进货与退货;

 仓库中的库存需要领料和退料功能;

 仓库也可以完成不同地区的商品在此仓库的商品调拨任务;  用户人员也可以在当天之后对仓库中的库存进行盘点。 (3)查询模块

 显示当前仓库商品信息,并执行库存查询;  显示仓库信息,对商品的销售量进行查询;  此系统还可以对仓库历史记录进行查询。 (4)设置模块

 供应商设置  仓库设置

3、工作内容及要求

 进一步细化需求分析的内容,识别出系统的参与者,并完成用例图;

3 无锡职业技术学院实践环节材料撰写用纸

将用例图中的每个用例都写成相应的事件流文档;

进一步使用活动图来描述每个用例,为后续的系统设计做好准备;

按照系统的功能分析,从用例的描述中提取出系统的对象类和界面类,建立类图;

分析类图中的实体类和实体类之间的关系,画出数据库的逻辑模型图(只包含实体类,且注明角色和阶元)。

 对数据库的逻辑模型进行优化,取消多对多的联系,完成最终的逻辑模型设计;  使用交互作用图或状态机图完成系统动态行为的建模。(建议使用顺序图按功能分别描述)

4、创建SRS文档:

 引言

 仓库管理系统将24小时为用户服务。  用途

 SRS文档将作为SDLC设计和编码阶段的输入。  作用域

 管理员直接对系统进行管理。  功能性需求

 操作员需要取得管理员的认可才可以登录此系统。  操作员可以查询库存的信息。

 系统管理员可以管理登录系统以后对仓库进行管理

 因为不是每个人都可以随便修改系统的,所以系统管理员可以登录进系统以后对用户的权限信息进行管理。

 界面需求

 界面应该清晰易懂。  运行环境

 此系统可以在网络上进行运行。

4     无锡职业技术学院实践环节材料撰写用纸

用例图如下:

分析:操作员在进行验证后登陆系统,可以执行商品的进退货的记录信息的查询与管理等操作。

用户登录**仓库领料仓库进货**退出系统****商品调拨**操作员****用户注销*仓库退料*仓库退货c

图1 操作员用例图

分析:此用户是管理员,可以对仓库信息进行维护,仓库商品进行盘点,业务分析,历史记录查询,供应商信息维护和仓库查询操作。

5 无锡职业技术学院实践环节材料撰写用纸

仓库信息维护用户登录****用户注销******管理员***退出系统仓库盘点*仓库查询**供应商信息维护*业务分析历史记录查询*

图2 管理员用例图

分析:该用户为供应商,可以对执行仓库进货和退货的查询与管理操作。

仓库进货***商品供应商*仓库退货

图3 供应商用例图

(二)《仓库管理系统》的静态建模

静态建模用于描述软件的静态成分,又叫结构建模。它包含类关系图和对象关系图。用于描述软件系统的成分之间的关系和依赖性。 1)类的分析与设计

 确定初始类图  提取类的属性  提取类的操作

6 无锡职业技术学院实践环节材料撰写用纸

 类之间的关系

去除不必要的类和不正确的类:

1.冗余类:若两个类表述同一信息,保留最具有描述能力的类;2.不相干的类:去掉与问题没有多少关系和根本不相关的类;

3.模糊类:类必须是确定的,有些临时类边界定义不对,或范围太广,应排除;4.属性:如果有些名词是用来描述某个类的,那么它一定是这个类的属性。 5.操作:如果所描述的操作并不适用于对象并且被自身所操作,那么这一定不是类。 这样可以得到相关的三种类关系:  人员信息包类图  接口信息包类图  系统事务信息包类图 2)确定类之间的关系

两个类之间的相互依赖就是关联,关联常用描述性动词或动词组来表示,其中有物理位置的表示、传导的动作、通信、所有者关系及条件的满足等等。 通过以上方法可以确定类图:

① 人员信息包类图里包含:操作员类、管理员类、供应商类、商品进货模块类、商品退换模块类、商品打印模块类、库存查询模块类、商品盘点模块类、历史信息查询模块类和商品调拨模块类。

7 无锡职业技术学院实践环节材料撰写用纸

**操作员-姓名-id号-权限+仓库进货()*+仓库退货()+仓库领料()+仓库退料()+商品调拨()*+用户登录()+用户注销()+退出系统()+盘点信息打印报表()+进货商品打印报表()*+退换商品打印报表()+商品库存信息()**商品进货模块+商品清单()+退货清单()+查询信息()库存查询模块**商品打印模块*

图4 人员信息包类图

供应商-供应商姓名-供应商id号-联系方法+进货()+退货()*1管理员-姓名-id号-权限+供应商信息维护()+仓库信息维护()+盘点信息()+仓库查询()+业务分析()+用户注销()+退出系统()+历史记录查询()+用户登录()+查询结果()*历史信息查询模块*+查询条件()+进货记录()+商品调拨记录()+商品盘点信息()*********商品退换模块*商品盘点模块*+审核后盘点信息()+查询信息()**商品调拨模块+查询信息()+查询条件()*+盘点信息列表() 8 无锡职业技术学院实践环节材料撰写用纸

② 接口信息包类图里包含:用户登录类、仓库管理类、系统管理类和业务查询类。

仓库管理+仓库进货()+仓库退货()+仓库领料()+仓库退料()+仓库调拨()+仓库盘点()用户登录+用户登录()+用户注销()+退出系统()系统设置-供应商设置-仓库信息维护业务查询+库存查询()+业务分析()+历史记录查询()

图5 接口信息包类图

③系统事务信息包类图包含:用户登录类、供应商管理类、业务分析类、查询历史信息类、仓库信息维护类、领料类、退料类、退换类、盘点类、调拨类和仓库查询类。

9 无锡职业技术学院实践环节材料撰写用纸

调拨供应商管理-该操作id号-日期-管理员id号+增加供应商()仓库信息维护-该操作id号-日期退料用户登录-该操作id号-登录日期-登录人id-name+用户登录()+用户注销()+退出系统()退货-交易id-日期-操作员-交易id-日期-退料人-操作员仓库查询-该操作id-日期领料-交易id-日期-领料员-操作员查询历史信息-该操作id-日期业务分析-操作id号-日期-管理员id+opname()盘点-交易id-日期-管理员id-仓库id

图6 系统事务信息包类图

(三)《仓库管理系统》的动态建模

在完成静态建模后,需要对系统实现动态建模。需要创建

 活动关系图:表示系统的静态成分为了完成过程需要执行的活动的顺序;

 交互关系图:表示软件系统静态成分之间的交互,常用序列关系图和通信关系图。 (1)活动关系图

活动关系图是用来对特定过程的控制流进行建模。

分析:管理员在登录系统后,查看销售记录和查看商品库存情况,如果缺货就通知操作员缺货商品清单,操作员即可联系供应商按缺货清单提供货物,然后管理员更新数据库结束,如果不缺货直接结束。

10 无锡职业技术学院实践环节材料撰写用纸

通知操作员缺货商品清单查看销售记录联系供应商按缺货清单提供货物查看商品库存情况[ 缺货] 接受货物更新库存数据库[ 不缺货 ]

图7 仓库系统的活动图

(2)交互关系图:通信关系图、序列关系图

①通信关系图以消息的形式表示对象之间的交互。通信图集中在活动着的对象上,表现的是相互通信的对象之间的消息传递,不参照时间。通信图通过在消息上加序号表示消息传递的次序。序列号放在消息之前作为消息的前缀。

注:通信关系图不描绘对象的生命线。 A.管理员盘点过程协助图

分析:操作员把盘点信息发送给管理员,管理员审查后盘点信息,在仓库商品盘点模块中盘点信息列表,然后交由信息打印模块打印盘点信息列表,给操作员。

11 无锡职业技术学院实践环节材料撰写用纸

操作员盘点信息管理员盘点信息打印列表审查后盘点信息商品信息打印模块盘点信息列表商品盘点模块

图8 管理员盘点过程协作图

B.商品管理协作图

分析:操作员通知供应商进货,供应商打印出进货清单,操作员也可以对进货退货进行管理,供应商打印出退货清单。

商品进货进货商印品打报表进货清单操作员退货商品供应商表库存查询商品退换退货清单库存信息进货商品打印报

图9 商品管理协作图

12 无锡职业技术学院实践环节材料撰写用纸

C.仓库历史记录查询协作图

分析:管理员应该先登录系统。当管理员登录系统以后,可以查询历史信息,看到商品进货、商品盘点、商品调拨的历史记录。

商品进货管理员查询条件历史信息查询进货、退货记录查询条件商品调拨商品盘点图10 仓库历史记录查询协作图

②序列关系图

序列关系图以按时间排序的消息形式来表示对象之间的交互。序列关系图和通信关系图的区别在于通信关系图情调对象的组织结构,而序列关系图则按时间顺序显示对象之间交互的消息。在序列关系图中,可以沿x轴方向排列对象。将启动交互的对象放在最左边。消息序列中后来的对象则放在交互启动对象的右边。在交互中,对象发送和接收的消息按时间升序沿y轴防止。

注:和通信关系图不同,序列关系图描述对象生命线。

A.仓库盘点过程序列图 分析:操作员将盘点信息发送给管理员,管理员审查盘点信息,然后盘点信息列表交给商品打印模块打印后发给操作员执行相关商品操作。

商品盘点信息

13 无锡职业技术学院实践环节材料撰写用纸

操作员管理员商品盘点模块商品打印模块盘点信息盘点信息列表()审核后盘点信息盘点信息打印报表()

图11 仓库盘点过程序列图

B.商品管理序列图

分析:操作通知商品供应商进货、退货,商品供应商将商品清单和退货商品清单发送给商品进货模块,商品进货模块将进货商品打印报表给操作员,商品退货模块将商品退换报表打印发给操作员,操作员也可以查询库存,库存库存模块将库存查询信息发送给操作员。

14 无锡职业技术学院实践环节材料撰写用纸

操作员商品供应商商品进货模块商品退换模块进货()商品清单()进货商品打印报表()退货清单()退货()退换商品打印报表()查询条件()商品库存信息

图12 商品管理序列图

C.仓库历史记录序列图

分析:管理员登录系统查询历史信息模块,历史信息则查询商品进货退货模块、商品调拨模块、商品盘点模块,之后各模块将查询得到的信息发送给历史信息模块,最后由历史信息模块统一将信息发给管理员。

15 无锡职业技术学院实践环节材料撰写用纸

管理员历史信息查询模块商品进货退货模块商品调拨模块商品盘点模块查询信息()查询条件()进货记录()查询信息()商品调拨记录()查询信息()商品盘点信息()查询结果()

图13 仓库历史记录序列图

16 无锡职业技术学院实践环节材料撰写用纸

(四)《仓库管理系统》的架构建模

架构建模使您能够了解组件在组织网络中的物理分布。您需要对软件系统的架构进行建模以确定组件的设计是否符合软件系统的需要。软件架构描述软件按系统的所有组件以及这些组件之间的关系。要对系统软件的架构进行建模,您需要创建以下关系图:

 包关系图:描述根据特定条件分组在一起的软件系统构成。  组件关系图:描述软件系统的可执行构成。

 部署关系图:描述软件系统组件的各种处理设备。

a)组件关系图:组件可实现一组接口并构成软件系统的可执行部分。

分析:该图是系统的各个组件图,由系统登录、仓库管理管理、信息查询、系统设置。

仓库管理信息查询系统登录系统设置

图14 组件关系图

b)部署关系图:显示需要在其中部署软件组件的硬件。

分析:下图表明系统采用数据库系统作为后台数据提供者,然后客户登录使用系统,也可以对系统中的信息进行打印操作。

17 无锡职业技术学院实践环节材料撰写用纸

数据服务器客户机1客户机n打印机

图15 部署关系图

推荐第10篇:仓库管理系统开题报告

本 科 毕 业 设 计(论文)开 题 报 告

题 目:基于C#仓库管理系统 本课题来源及研究现状:

随着电子计算机技术和信息网络技术的发明和应用,使着人类社会从工业经济时代向知识经济时代发展。在这个知识经济时代里,仓库管理信息系统MIS(Management Information System)将会成为企业生产以及运作不可缺少的管理工具。这个仓库管理系统是由:一个由人和计算机之间能而且够进行信息一些管理。例如数据的收集、存储、加工以及维护。 它是一种新的学科,跨越了许多个领域,例如管理科学、信息工程学、运筹学、会计学和计算机科学等。它在企业当中起到了越来越重要的作用,例如对企业的基础数据进行采集并保管,对企业的物料流、资金流、信息流进行综合并且为企业决策的提供服务等。

我国的中小型企业非常多,它在我国经济发展当中占有非常重要地位。在目前中国的很多的中小企业有着数量较多以及地区分布广阔和行业分布跨度很大的特点。它将面临着许多国内大型生产企业及国外的商品和服务的严峻挑战。一方面,我国内大型企业以及许多外资企业具有更加雄厚的资金实力、更丰富的管理经验和更加先进的技术手段。但是国内的中小型企业不具备以上那些条件。为此,许多中小企业必须借助更先进的管理思想、并且转变经营理念、加上使用信息化手段来提高中小企业的管理水平以及工作效率。在另一方面,我国内外的很多大型企业并且包括国有企业、私营企业以及大多数外资合资企业中,管理信息系统已经被广泛的应用。比如很大型的ERP管理系统、财务管理软件、MRPⅡ系统及其它的很多的先进的系统,这些都给大型的企业带来了很多的信息化的好处。为此中小型企业在竞争当中处于不利的地位。要想改变这种状况,对于很多中小型企业来说就要找到摆脱传统的管理方式的现代管理方法。而应用一种比较符合该企业实际情况的仓库管理系统就是一个很不错的选择。

课题研究目标、内容、方法和手段:

本次课题的研究目标和内容:

系统开发的任务为了是实现各种信息的系统化、规范化以及自动化。系统功能的分析就是在软件开发系统的总体任务的基础上加以完成的。这个仓库管理系统系统功能需要完成功能模块主要有:

(1)仓库管理人员的管理模块 这项功能模块是为了方便对人员的管理以及数据安全性,例如修改密码。 (2)货物信息管理模块

这个货物信息管理模块提供了货物数据的信息输入以及货物的信息的查询等功能,更加方便得了解库存的一些信息。

(3)入库功能模块

入库功能是仓库管理系统中的基本功能之一。入库功能主要是为了实现登记入库货物记录的功能。这些信息应该包括入库的单据信息、入库的数量以及入库时间信息加上执行入库的操作的信息以及货物存放仓库的信息等等。商品的入库的登会产生货物的入库登记记录,这是为了以后进行入库的货物的查询,以及生成报表以及出库操作产生的操作数据增加可观性,为管理人员提供熟悉掌握仓库内存储的货物情况更加方便快捷。

(4)出库功能模块

出库功能是仓库管理系统的系统的基本功能之二。出库的功能主要是为了实现登记出库的货物信息的功能。这些出库的记录包括出库申请单据的信息以及出库数量和出库时间信息还有执行出库的操作的库管信息以及货物剩余信息等等。出库的功能是依据入库的登记功能来显示的,其中会产生的入库的记录,以及会产生货物的出库的记录,和将出库的记录存入系统的数据,为以后的出库记录查询,以及掌握仓库货物存储情况作基础。

(5)交易记录功能模块

这个交易记录功能模块,就是是通过定期的对仓库信息做清点功能。这样就能很有效的了解了企业的货物的流通情况,以及仓库的货物的交易情况。更加方便公司,以及对货物信息的管理。

(6)库存功能模块

这个模块是针对货物在仓库里的剩余情况,从而做的对库存的信息达到更方便的管理。并且提醒用户对商品进行管理以及尽快出货。

本次课题研究方法和手段:本课题的开发采用ASP.NET+SQL Sever实现,前期主要运用所学相关知识、查询资料,学习其他优秀管理系统的开发方法,结合相关要求写出需求分析;后期,进行对本课题的设计与开发。课题的页面主要采用ASP.NET语言对数据库进行操作,通过对数据库的查询搜索来实现,控制页面的正确显示和对用户类型的权限设计。采用SQL数据库,包含6张表,实现整个系统的操作。在整个设计过程中以需求分析为基础,写出系统实现流程及相关问题的实现方法;系统开发完成后,进行调试和运行,做好调试和试运行的相关记录。

设计(论文)提纲及进度安排:

毕业设计(论文)提纲:

第一章 绪论。主要是研究的是选题的目的和意义,以及国内外研究的现状。 第二章 第二章系统开发环境以及技术简介。主要是对开发工具vs2010的介绍,和对数据库SQL server简介,和它们的安装配置。还有介绍了B/S的体系结构,以及开发框架asp.net以及开发语言C#的介绍

第三章 第三章 系统总体设计。对系统进行分析,介绍总体功能模块,对系统业务进行描述,还有就是系统的流程图。

第四章 系统详细功能设计。主要包括系统各个功能模块的概念模型设计和数据库的逻辑设计以及相应的数据库的表结构设计。

第五章 系统功能的实现。主要包括用户登录、系统主界面、供应商管理、商品管理、入库管理、以及出库管理的设计还有它们对应的一些主代码。

第六章 系统的调试与测试。主要是对系统的主要功能模块进行测试,测试功能是否能实现。还可以进行白盒子和黑盒子检测。

毕业设计(论文)进度安排:

2015年3月1日至2015年3月31日,学生向指导老师提交论文设计开题报告和初纲;由指导老师检查论文与设计的前期准备情况,审阅论文设计开题报告和初纲、并向学生反馈,完成开题工作;

2015年4月1日至2015年4月30日,完成设计初步工作;学生拟定论文写作提纲,提交指导老师审阅。

2015年5月1日至2015年5月15日,完成设计原型,提交指导老师审阅。 2015年5月16日至2015年5月31日,基本完成设计,完成论文初稿一,提交指导老师审阅。

2015年6月1日至2015年6月6日,根据指导老师审阅意见进行论文修改后,完成论文初稿二,提交指导老师审阅;

2015年6月7日至2015年6月13日,修改并定稿,按要求装订成册、装袋上交指导老师,并提交论文电子文档; 2015年6月14日至2015年6月15日,论文评阅人评阅论文,毕业论文答辩;

2015年6月16日至2015年6月19日,毕业论文工作总结,有关材料归档。

主要参考文献和书目:

[1] (美)佩特科维奇|译者:冯飞,薛莹.Microsoft SQL Server2005初学者指南[M].北京,清华大学出版社,2007.

[2] 邓文渊.挑战,互动网站百宝箱[M].北京:中国铁道出版社,2004年.[3] (美)维埃拉|译者:叶寒,管贤平.SQL Server2005编程入门经典(第2版)[M].北京:清华大学出版社,2007.[4] (美)奥蒂|译者:高猛.Microsoft SQL Server2005开发指南[M].北京:清华大学出版社 ,2007.[5] 马骏,陈志国,晋玉星.ASP.NET网页设计与网站开发上机实践和实例解析[M].北京:人民邮电出版社,2007.[6] 张海藩.软件工程导论[M].北京:清华大学出版社,2003.[7] 魏善沛编著.Web数据库技术实用教程[M].北京: 清华大学出版社.1998.[8] [美] Jeffrey D.Ullman.Fundamental Course of Database System[M].TsingHua Pre,2001.[9] [美]Jeffer R.Shapiro著,SQL Server 2005参考大全[M].北京:清华大学出版社,2006.[10] 隆华软件工作室 编著,SQL Server 2005程序设计[M].北京:清华大学出版社,2007.

指导教师审核意见:

指导教师(签字): 年 月 日

注:本表可自主延伸

第11篇:仓库管理系统调研报告

仓库管理系统调研报告

前言

仓库管理是与我们日常生活息息相关的问题,随着改革开放的不断深入,经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。以超级市场为例,走进超级市场,琳琅满目,各式各样的商品应有尽有,顾客大都满载而归,买到称心如意的商品。顾客得到极大方便的同时,商家在管理这些商品上却花费了大量的心血。

在本系统的设计过程中,为了克服这些困难,满足计算机管理工作的需要,我们采取了下面的一些原则

●统一各种原始单据的格式,统一报表的格式。

●删除不必要的管理冗余,实现管理规范化、科学化。

●程序代码标准化,软件统一化,确保软件的可维护性和实用性。

●界面尽量简单化,做到实用、方便,尽量满足企业中不同层次员工的需要。 ●尽量做到物资分类和管理明确,使供应商、客户和用户之间往来更方便、快捷。 在具体设计中,主要实现入库、出库、采购、销售、基本信息、单据几大功能。 解决思路:利用便利的网络资源和查看相关书籍等办法解决各模块实现的具体功能分配等操作。

出租仓库:主要针对客户的关系,实现预定仓库的基本操作。 入库/出库:主要针对企业物资进出,实现采购和销售等操作。 基本信息:介绍产品、供应商及客户的相应资料。 单据:实现业务上各种单据的对应操作。

本系统主要步骤有功能需求分析,系统设计,数据库设计,程序实现等。

1.系统范围

系统开发的总体任务是实现企业物资管理的系统化、规范化和自动化,从而达到提高企业管理效率的目的。

第一个版本的范围

◇业务处理

|- 出库登记 |- 入库登记 |- 其他库存变动 |- 库存盘点 |- 仓库调货 |- 货品拆分与组装

◇基本资料

|- 货品类别 |- 货品资料

|- 库存变动类型 |- 领用人资料 |- 供货单资料 |- 仓库资料

◇系统维护

|- 系统设置 |- 密码修改 |- 操作员管理 |- 数据备份与恢复 |- 打印单修改 |- 数据清理

◇统计报表

|- 当前库存报表 |- 货物入库报表

|- 货物出库报表

2.功能简介

基础数据:商品信息,供应商,客户,商品分类,仓库,银行等基本信息的设置。

入库管理:进行货品采购入库,采购退货,生产入库,生产退料,进货单据和退货单据查询,供应商往来帐务,供应商付款。

出库管理:销售出货,客户退货,生产领料,销售单据和客户退货查询,客户往来帐务,客户付款。

库存管理:包括库存之间货品调拔,库存报损、报溢,库存盘点功能。

拆分组装:整进散出,或是整出散进等可以自由的拆分组合产品。

统计报表:完整的统计查询功能,每张单据每次业务金额都可以清楚的反映。

权限管理:可添加删除系统操作员帐号,强大的权限控制,可以设置某用户对某窗口某个按钮的权限。

打印设计:可对系统内每个单据进行打印的格式设计,可以导出,导入,每个操作员可设计自己的打印格式。

界面设计:系统窗口界面名称可以自定义设计,表格的显示顺序,宽度,是否显示等,每个操作员可以设计自己的界面。

系统设置:可以灵活设置系统小数位数,可选0-6位,让帐务更精确,可对以往数据进行选择性的清除,以便系统初始化。

3.数据识别 3.1人员基本情况数据说明

3.1.1系统管理员数据说明

使用者:系统管理员

来源:系统管理员在本系统中注册

去向:保存在数据库中

数据属性:编号、姓名、性别、出生日期、固定电话、移动电话、其他

3.1.2仓库管理员数据说明

使用者:仓库管理员

来源:仓库管理员职工档案

去向:保存在数据库的仓库管理员表中中

数据属性:编号、姓名、性别、出生日期、所在部门编号、固定电话、移动电话、其他。

3.1.3验收员数据说明

使用者:验收员

来源:采购员职工档案

去向:保存在数据库的验收员表中

数据属性:编号、姓名、性别、出生日期、所在部门编号、所属小组编号、固定电话、移动电话、其他。

3.1.4经理数据说明

使用者:经理

来源:经理职工档案

去向:保存在数据库的经理表中

数据属性:编号、姓名、性别、出生日期、固定电话、移动电话、其他

3.1.5 领料员数据说明

使用者:仓库管理员、经理 来源:领料员职工档案

去向:保存在数据库的领料员表中

数据属性:编号、姓名、性别、出生日期、固定电话、移动电话、其他

3.2商品数据说明

使用者:仓库管理员、经理 来源:仓库管理员输入

去向:保存在数据库中

数据属性:商品编号、名称、价格、储存位置、数量、其他

3.3 基本业务数据说明

3.3.1 验收商品数据说明

使用者:仓库管理员、经理

来源:采购计划、数据库中仓库管理员表、商品表和经理表 去向:入库单或直拨单、保存在数据库的验收商品表和商品表中 数据属性:商品编号、仓库管理员编号、经理编号

3.3.2 商品入库数据说明

使用者:仓库管理员、经理 来源:运货单、检验合格单

去向:收料单、保存在数据库的商品入库表中

数据属性:商品编号、仓库管理员、经理编号、是否合格

3.3.3 保管商品数据说明

使用者:仓库管理员、经理 来源:商品保管表

去向:保存在数据库中的保管商品表中 数据属性:商品编号、仓库管理员编号、堆放是否整齐、堆放是否美观、是否按类堆放、进货日期

3.3.4 商品出库数据说明

使用者:仓库管理员、经理 来源:领料单

去向:发货单、保存在数据库的商品出库表中

数据属性:商品编号、仓库管理员、领料员编号、出库日期 附录

由于我们只是网上搜索调查的形式,所以没有统计初详细的数据,该报告只是反映了调查中出现的显著问题,故不能作为有力的论据。

组员:冉明轩,万朋鑫,陈强,周梦秋,王冰,江志华

第12篇:图书仓库管理系统(doc 61)

管理资源吧(www.daodoc.com),海量企业管理资料免费下载!

图书仓库管理系统

摘 要

本系统主要完成对图书仓库的库存管理,包括图书入库、出库、库存,员工信息,供应商信息以及密码管理等六个方面。系统可以完成对各类信息的浏览、查询、添加、删除、修改、报表等功能。

系统的核心是入库、库存和出库三者之间的联系,每一个表的修改都将联动的影响其它的表,当完成入库或出库操作时系统会自动地完成库存的修改。查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的都是为了方便用户使用。系统有完整的用户添加、删除和密码修改功能,并具备报表打印功能。

系统采用Microsoft Office中的Acce 2000来设计数据库,并使用当前优秀的开发工具—Delphi 6.0 ,它有着最为灵活的数据库结构,对数据库应用有着良好的支持。

论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。

关键字:数据库,SQL语言,Delph 6,数据库组件,仓库管理

目 录

更多免费下载,敬请登陆:www.daodoc.com 第一章 引言 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1 课题来源 „„„„„„„„„„„„„„„„„„„„„„„„„„1 1.2 开发工具的选择 „„„„„„„„„„„„„„„„„„„„„„„2 1.3 所做的主要工作 „„„„„„„„„„„„„„„„„„„„„„„3 第二章 数据库概论 „„„„„„„„„„„„„„„„„„„„„„„„„„4

2.1 数据库的发展 „„„„„„„„„„„„„„„„„„„„„„„„4 2.1.1 数据库的发展 „„„„„„„„„„„„„„„„„„„„„„4 2.1.2 数据库阶段的特点 „„„„„„„„„„„„„„„„„„„„5 2.1.3 数据库技术 „„„„„„„„„„„„„„„„„„„„„„„6 2.2 数据库理论基础 „„„„„„„„„„„„„„„„„„„„„„„7 2.2.1 数据库模型 „„„„„„„„„„„„„„„„„„„„„„„7 2.2.2 数据库体系结构 „„„„„„„„„„„„„„„„„„„„10

2.2.3 数据的独立性 „„„„„„„„„„„„„„„„„„„„„11 2.2.4 范式 „„„„„„„„„„„„„„„„„„„„„„„„„11 2.3 SQL语言基础 „„„„„„„„„„„„„„„„„„„„„„„13 2.3.1 SQL简介 „„„„„„„„„„„„„„„„„„„„„„„13 2.3.2 SQL查询 „„„„„„„„„„„„„„„„„„„„„„„13 2.3.3 SQL数据更新 „„„„„„„„„„„„„„„„„„„„„14 第三章数据库开发工具 „„„„„„„„„„„„„„„„„„„„„„„16 3.1 Delphi 6.0 简介 „„„„„„„„„„„„„„„„„„„„„„„16

3.2 Delphi 6.0 控件 „„„„„„„„„„„„„„„„„„„„„„„17 3.2.1 ADO数据访问组件 „„„„„„„„„„„„„„„„„„„17 3.2.2 数据控制类DataControl „„„„„„„„„„„„„„„„„18 3.2.3 数据访问类DataAcce „„„„„„„„„„„„„„„„„18 3.2.4 SQL语言在Delphi中的应用 „„„„„„„„„„„„„„„19 3.3 Acce 简介 „„„„„„„„„„„„„„„„„„„„„„„„21 第四章 系统总体设计 „„„„„„„„„„„„„„„„„„„„„„„„23

4.1 系统需求分析 „„„„„„„„„„„„„„„„„„„„„„„23 4.2 系统概要设计 „„„„„„„„„„„„„„„„„„„„„„„25 4.2.1 系统结构设计 „„„„„„„„„„„„„„„„„„„„„25 4.2.2 数据库设计 „„„„„„„„„„„„„„„„„„„„„„27

4.2.2.1 ER图设计 „„„„„„„„„„„„„„„„„„„„27 4.2.2.2 数据库表格设计„„„„„„„„„„„„„„„„„„29 4.3系统详细设计„„„„„„„„„„„„„„„„„„„„„„„„34 第五章 系统应用程序设计 „„„„„„„„„„„„„„„„„„„„„„37

5.1 系统窗体模块组成„„„„„„„„„„„„„„„„„„„„„„37 5.2 数据模块窗体设置„„„„„„„„„„„„„„„„„„„„„„38 5.3 主窗体功能模块的实现„„„„„„„„„„„„„„„„„„„„39 5.4 入库、出库窗体模块的实现„„„„„„„„„„„„„„„„„„43 5.5 查询功能的实现„„„„„„„„„„„„„„„„„„„„„„„51 5.6 系统登陆窗体模块的实现„„„„„„„„„„„„„„„„„„„52 5.7 用户管理功能的实现„„„„„„„„„„„„„„„„„„„„„54 5.7.1 用户管理主窗体 „„„„„„„„„„„„„„„„„„„„54 5.7.2 密码修改窗体模块的实现 „„„„„„„„„„„„„„„„54 5.7.3 用户注册窗体模块的实现 „„„„„„„„„„„„„„„„55 5.7.4 用户注销窗体模块的实现 „„„„„„„„„„„„„„„„57 结束语 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„59 致谢 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„60 参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„61 第一章 引 言 §1.1 课题来源

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。书籍做为人类的精神食粮,在现代社会中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择。与此同时,为了管理大量的图书,图书仓库也大量的出现,仓库的管理问题也就提上了日程。随着图书的大量增加,其管理难度也越来越大,如何优化仓库的日常管理也就成为了一个大众化的课题。

在计算机飞速发展的今天,将计算机这一信息处理利器应用于仓库的日常管理已是势必所然,而且这也将为仓库管理带来前所未有的改变,它可以带来意想不到的效益,同时也会为企业的飞速发展提供无限潜力。采用计算机管理信息系统已成为仓库管理科学化和现代化的重要标志,它给企业管理来了明显的经济效益和社会效益。主要体现在:

极大提高了仓库工作人员的工作效率,大大减少了以往入出存流程繁琐,杂乱,周期长的弊端。

基于仓库管理的全面自动化,可以减少入库管理、出库管理及库存管理中的漏洞,可以节约不少管理开支,增加企业收入。

仓库的管理的操作自动化和信息的电子化,全面提高了仓库的管理水平。 随着我国改革开放的不断深入,经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统已变得十分心要。 入库、库存、出库还是现在企业图书仓库管理的常规基本模式,虽然,最近又出现了很多新的管理模式,如:基于零库存思想的沃尔玛特管理方式,但这些新的思想在中国大部分企业的管理中还是难以实现的。所以如何设计好仓库管理系统,尽可能地减少仓库管理的重复性和低效性就成为当前最为重要的问题。图书仓库管理的核心是入库、库存和出库之间的联系,如何处理好三者之间的关系是系统最为关键的部分。另外,员工信息和供应商信息管理也是仓库管理中一个必不可少的部分,它提供着与入库和出库相关的地一些信息,使得整个系统更加完整,更加实用。

通过对仓库管理日常工作的详细调查,搜集了大量的资料,从系统结构的组织,功能的实现,技术的要求以及可行性等多方面进行考虑,认为本课题是一个适应现今图书仓库管理需求的计算机信息管理系统,具有一定的实际开发价值和使用价值。

§1.2 开发工具的选择 自Java诞生以来,随着Internet技术的普及和应用需求的变化,以第四代语言为主的应用开发产品发生了较大的变化,它们不仅已成为人们开发应用的开发工具,而且很多产品已发展成为一种强有力的应用开发环境。这些新型的开发工具通常以一种集成软件包的形式提供给开发人员,被称为Studio(工作室)或Suite(程序组)。例如,微软的Visual Studio 6.0,Borland公司的Delphi 6.0等数据库辅助开发工具。

现在,市场上可以选购的应用开发产品很多,流行的也有数十种。目前在我国市场上最为流行、使用最多、最为先进的可用作企业级开发工具的产品有: Microsoft公司的Visual Basic 6.0版 Microsoft公司的Visual C++6.0版 Borland公司的Delphi 6.0版

在目前市场上这些众多的程序开发工具中,有些强调程语言的弹性与执行效率;有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。然而,语言的弹性和工具的便利性是密不可分的,只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率提高的优点失去了作用;相反,如果只强调程语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间。

而Delphi是一个非常理想选择。Delphi 6 是操作系统中快速应用开发环境的最新版本。它也是当前Windows平台上第一个全面支持最新Web服务的快速开发工具。无论是企业级用户,还是个人开发者,都能够利用Delphi 6 轻松、快捷地构建新一代电子商务应用。Delphi 6 是惟一支持所有新出现的工业标准的RAD环境,包括XML(扩展标记语言)/XSL(可扩展样式语言),SOAP(简单对象存取协议)和WSDL(Web服务器描述语言)等。

Delphi 6 是可视化的快速应用程序开发语言,它提供了可视化的集成开发环境,这一环境为应用程序设计人员提供了一系列灵活而先进的工具,可以广泛地用于种类应用程序设计。在Delphi 6 的集成开发环境中,用户可以设计程序代码、运行程序、进行程序错误的调试等,可视化的开发方法降低了应用程序开发的难度。Delphi的基础编程语言是具有面向对象特性的Pascal语言,即Object Pascal 。Object Pascal具有代码稳定、可读性好、编译速度快等优点,并将面向对象的概念移植到了Pascal语言中,使这种基础语言有了新的发展空间。 使用Delphi 6.0 ,我们几乎可以作任何事情,还可以撰写种各种类型的应用程序,动态链接库(DLL)、CON、或CORBA对象,CGI/ISAPI程序,Microsoft Back Office应用程序。程序的规模小到简单的个人数据库应用,大到复杂的企业的多层次分布式系统,都可以使用Delphi进行开发,其友好的集成开发界面,可视化的双向开发模式,良好的数据库应用支持高效的程序开发和程序运行,备受广大程序开发人员的好评。尤其是Delphi对数据库应用的强大支持,大大提高了数据库应用软件开发的效率,缩短了开发周期,深受广大数据库应用程序设计人员的喜爱。Delphi为数据库应用开发人员提供了丰富的数据库开发组件,使数据库应用开发功能更强大,控制更灵活,编译后的程序运行速度更快。 §1.3 本文所做工作

引言部分介绍了本系统的课题来源以及对数据库开发工具的选择。

第二章介绍了数据库的发展,关系数据库,数据库体系结构,并系统介绍了SQL语言,为设计和理解应用程序做了铺垫。

第三章系统介绍了Delphi 6.0及其部分控件,SQL语言在Delphi 6.0中的应用,以及Acce等。

第四章是本文的主体,按照软件工程的要求,从需求分析开始,经过概要设计最后到详细设计,完成对整个系统的设计。

第五章根据第四章的设计结果利用Acce 2000和Delphi 6.0进行了具体的窗体和应用程序设计。

总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向 第二章 数据库概论 §2.1 数据库的发展

数据库处理在信息系统的研究中一直是非常重要的主题,然而,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术之时成为最热门技术之一。数据库技术能使Internet应用超越具有早期应用特点的简单的发布。同时,Internet技术提供了一种向用户发布数据库内容的标准化的访问方法。这些技术没有脱离经典数据库技术的要求。它们只是加重了数据库技术的重要性。

数据库的设计和开发及包括艺术有包括工程。理解用户的需求,然后,把它们转变为有效的数据库设计是一个艺术过程。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用,是一个工程过程。

数据库的目的是帮助人们跟踪事务。经典的数据库应用涉及诸如订单、顾客、工作、员工、学生、电话之类的项,或其它数据量较大、需要密起关注的事务。最近,由于数据库的普及,数据库技术已经被应用到了新的领域,诸如用于Internet的数据库或用于公司内联网的数据库。数据库也被越来越多地应用于生成和维护多媒体应用程序上。

计算机的数据处理应用,首先要把大量的信息以数据形式存放在存储器中。存储器的容量、存储速率直接影响到数据管理技术的发展。从1956年生产出第一台计算机到现在,存储器的发展,为数据库技术提供了良好的物质基础。 使用计算机以后,数据处理的速度和规模,无论是相对于手工方式,还是机械方式,都有无可比拟的优势。通常在数据处理中,计算是比较简单的而数据的管理却比较复杂。数据管理是指数据的收集、整理、组织、存储、维护、检索、传送等操作,这部分操作是数据处理业务的基本环节,而且是任何数据处理业务中必不可少的共有部分。数据管理技术的优劣,将直接影响数据处理的效率。 2.1.1 数据库的发展

数据管理技术的发展,与硬件(主要是外存)、软件、计算机应用的范围有密切的联系。数据管理技术的发展经过三个阶段:人工管理阶段、文件系统阶段和数据库阶段。

人工管理阶段和文件系统阶段都有着相当多的缺陷,诸如数据冗余性 ,数据不一致性以及数据联系弱等等。也正是由于这些原因,促使人们研究新的数据管理技术,从而产生了数据库技术。

20世纪60年代末发生的三件大事,层次模型IMS系统的推出、关于网状模型DBTG报告的发表以及关于关系模型论文的连续发表标志着数据管理技术进入数据库阶段。进入70年代以后,数据库技术得到迅速发展,开发了许多有效的产品并投入运行。数据库系统克服了文件系统的缺陷,提供了对数据更高级更有效的管理。

当进入数据库阶段后,随着数据管理规模一再扩大,数据量急剧增加,为了提高效率,开始时,人们只是对文件系统加以扩充,在应用文件中建立了许多辅助索引,形成倒排文件系统。但这并不能最终解决问题。在20世纪60年代末,磁盘技术取得重要进展,具有数百兆容量和快速存取的磁盘陆续进入市场,成本也不高,为数据库技术的产生提供了良好的物质条件。 2.1.2 数据库阶段的特点

(1)减少数据的重复(Redundancy can be reduced)

当在一个非数据库系统当中,每一个应用程序都有属于他们自己的文件,由于无法有系统建立的数据,因此常常会造成存储数据的重复与浪费。例如:在一家公司当中,人事管理程序与工资管理程序或许都会使用到职员与部门的信息或文件,而我们可以运用数据库的方法,把这两个文件整理起来,以减少多余的数据,过度地占用存储空间。

(2)避免数据的不一致(Inconsistency can avoid)

本项的特色,可以说是延伸前项的一个特点,要说明这样的一个现象,我们可以从下面这个实例来看:若是在同一家公司当中,职员甲在策划部门工作,且职员甲的记录同时被存放在数据库的两个地方,而数据库管理系统却没有对这样重要的情况加以控制,当其中一条数据库被修改时,便会造成数据的不一致,但是,对于一个健全的数据库管理系统而言,将会对这样的情况加以控制,但有时并不需要刻意消除这种情形,应当视该数据库的需求与效率来决定。 (3)数据共享(Data shared)

对于数据共享的意义,并不是只有针对数据库设计的应用程序,可以使用数据库中的数据,对于其他撰写好的应用程序,同样可以对相同数据库当中的数据进行处理,进而达到数据共享的目的。

(4)强化数据的标准化(Standard can be enforced)

由数据库管理系统,对数据做出统筹性的管理,对于数据的格式与一些存储上的标准进行控制,如此一来,对于不同的环境的数据交换(Data Interchange)上将有很大的帮助,也能提高数据处理的效率。

(5)实践安全性的管理(Security restriction can be applied)

通过对数据库完整的权限控制,数据库管理者可以确认所有可供用户存取数据的合法途径渠道,并且可以事先对一些较重要或关键性的数据进行安全检查,以确保数据存取时,能够将任何不当损毁的情形降至最低。 (6)完整性的维护(Integrity can be maintained)

所谓完整性的问题,就是要确认某条数据在数据库当中,是正确无误的。正如(2)所述,若是无法控制数据的不一致性,便会产生完整性不足的问题,所以,我们会发现,当数据重复性高的时候,数据不完整的情形也会增加,当然,若是数据库的功能完整,将会大大地提高数据完整性,也会增加数据库的维护能力与维护简便性。

(7)需求冲突会获得平衡(Conflicting requirements can be balance) 在一个较大型的企业当中,用户不同的需求,往往会造成系统或数据库在设计上的困扰,但是一个合适的数据库系统,可以通过数据库管理员的管理,将会有效地整理各方面的信息,对于一些较重要的应用程序,可以适时地提供较快速的数据存取方法与格式,以平衡多个用户在需求上的冲突。 上述七个方面构成了数据库系统的主要特征。这个阶段的程序和数据间的联系可用下图表示: 2.1.3 数据库技术

从文件系统发展到数据库系统是信息处理领域的一个重大变化。在文件系统阶段,人们关注的中心问题是系统功能的设计,因而程序设计处于主导地位,数据只起着服从程序需要的作用。在数据库方式下,信息处理观念已为新体系所取代,数据占据了中心位置。数据结构的设计成为信息系统首先关心的问题,而利用这些数据的应用程序设计则退居到以既定的数据结构为基础的外围地位。 目前世界上已有数百万个数据库系统在运行,其应用已经深入到人类社会生活的各个领域,从企业管理、银行业务、资源分配、经济预测一直到信息检索、档案管理、普查统计等。并在通信网络基础上,建立了许多国际性的联机检索系统。我国20世纪90年代初在全国范围内装备了12个以数据库技术为基础的大型计算机系统,这些系分布在邮电、计委、银行、电力、铁路、气象、民航、情报、公安、军事、航天和财税等行业。

数据库技术还在不断的发展,并且不断地与其它计算机技术相互渗透。数据库技术与网络通信技术相结合,产生了分布式数据库系统。数据库技术与面向对象技术相结合,产生了面向对象数据库系统。 在数据库技术中有四个名词,其概念应该分清。

(1)数据库(database,DB):DB是统一管理的相关数据的集合。DB能为各种用户共享,具有最小冗余度,数据间联系密切,而又有较高的数据独立性。 (2)数据库管理系统(Database Management System,DBMS):DBMS是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型和面向对象型DBMS。

(3)数据库系统(Database System,DBS):DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源组成的系统,即采用了数据库技术的计算机系统。

(4)数据库技术:这是一门研究数据库的结构、存储、管理和使用的软件学科。数据库技术是操作系统的文件系统基础上发展起来的。而DBMS本身要在操作系统的支持下才能工作。数据库不仅用到数据结构的知识,而且丰富了数据结构的内容。在关系数据库中要用到集合论、数理逻辑的理论。因此,数据库技术是一门综合性较强的学科。 §2.2数据库理论基础 2.2.1 数据库模型

从20世纪50年代中期开始,计算机的应用由科学研究部门逐步扩展到企业、行政部门。至60年代,数据处理成为计算机的主要应用。数据库技术作为数据管理技术,是计算机软件领域的一个重要分支,产生于60年代末。现已形成相当规模的理论体系和实用技术。

模型是对现实世界的抽象。在数据库技术中,我们用模型的概念描述数据库的结构与语义,对现实世界进行抽象,表示实体类型及实体间联系的模型称为“数据模型” 。

目前广泛作用的数据模型可分为两种类型。

一种是独立于计算机系统的模型,完全不涉及信息在系统中的表示,只是用来描述某个特定组织所关心的信息结构,这类模型称为“概念数据模型” 。要领模型用于建立信息世界的数据模型,强调其语义表达功能,应该概念简单、清晰,易于用户理解,它是现实世界的第一层抽象,是用户和数据库设计人员之间进行交流的工具。这一其中著名的模型是“实体联系模型” 。

另一种数据模型是直接面向数据库的逻辑结构,它是现实世界的第二层抽象。 这类模型涉及到计算机系统和数据库管理系统,又称为“结构数据模型” 。例如,层次、网状、关系、面向对象等模型。这类模型有严格的形式化定义,以便于在计算机系统中实现。

(1)层次模型。用树型结构表示实体类型及实体间联系的数据模型。树的结点是记录类型,每个非根结点有且只有一个父结点。上一层记录类型和下一层记录类型间联系是1∶N联系。

层次模型的特点是记录之间的联系通过指针实现,查询效率较高。但层次模型有两个缺点:一是只能表示1∶N联系,虽然有多种辅助手段实现了M∶N联系,但都较复杂,用户不易掌握,二是由于树型结构层次顺序的严格和复杂,引起数据的查询和更新操作也很复杂,因此,编写应用程序也很复杂。

(2)网状模型。用有向图结构表示实体类型及实体间联系的数据模型。。1969年DBTG报告提出的数据模型是网状模型的主要代表。有向图中的结点是记录类型,有向边表示从箭尾一端的记录类型到箭头一端的记录类型间联系是1∶N联系。

网状模型的特点:记录之间联系通过指针实现,M∶N联系也容易实现(每个M∶N联系可拆成两个1∶N联系),查询效率较高。网状模型的缺点是编写应用程序比较复杂,程序员必须熟悉数据库的逻辑结构。由于层次系统和网状系统的应用程序编制比较复杂,因此,从20世纪80年代中期起,其市场已被关系系统所取代。但是使用这两种模型建立起的许多数据库仍然在正常运转,只是在外层加了个关系数据库语言的接口。网状模型有许多成功的产品,20世纪70年代的产品大部分网状系统,例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等

(3)关系模型。关系模型的主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格。

关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。关系模型是数学化模型。SQL语言是关系数据库的标准化语言,已得到了广泛的应用。20世纪70年代对关系数据库的研究主要集中在理论和实验系统的开发方面。80年代初才形成产品,但很快得到广泛的应用和普及,并最终取代了层次、网状数据库产品。现在市场上典型的关系DBMS产品有DB

2、ORACLE、SYBASE、INFORMIX和微机型产品Foxpro、Acce等。

关系模型和网状、层次模型的最大区别是:关系模型用表格数据而不是通过指针链来表示和实现实体间联系。关系模型的数据结构简单、易懂。只需用简单的查询语句就可对数据库进行操作。

关系模型是数学化的模型,可把表格看成一个集合,因此集合论、数理逻辑等知识可引入到关系模型中来。关系模型已是一个成熟的有前途的模型,已得到广泛应用。

(4)面向对象模型。目前,关系数据库的使用已相当普遍,但是,现实世界中仍然存在着许多含有复杂数据结构的应用领域,例如,CAD数据、图形数据等,而关系模型在这方面的处理能力就显得力不从心。因此,人们需要更高级的数据库技术来表达这类信息。面向对象的概念最早出现在程序设计语言中,随后迅速渗透到计算机领域的每一个分支。面向对象数据库是面向对象概念与数据库技术相结合的产物。

面向对象模型能完整地描述现实世界的数据结构,具有丰富的表达能力,但模型相对较复杂,涉及的知识面也广,因此面向对象数据库尚未达到关系数据库那样的普及程度。

2.2.2 数据库体系结构

数据库的体系结构分三级:内部级(internal),概念级(conceptual)和外部级(external)。这个三级结构有时也称为“三级模式结构”,或“数据抽象的三个级别”,最早是在1971年通过的DBTG报告中提出,后来收入在1975年的美国ANSI/SPARC报告中。虽然现在DBMS的产品多种多样,在不同的操作系统支持下工作,但是大多数系统在总的体系结构上都具有三级模式的结构特征。从某个角度看到的数据特性称为“数据视图”(data view)。 外部级最接近用户,是单个用户所能看到的数据特性。单个用户使用的数据视图的描述称为“外模式”。

概念级涉及到所有用户的数据定义,是全局的数据视图。全局数据视图的描述称为“概念模式”。

内部级最接近于物理存储设备,涉及到实际数据存储的结构。物理存储数据视图的描述称为“内模式”。

数据库的三级模式结构是数据的三个抽象级别。它把数据的具体组织留给DBMS去做,用户只要抽象地处理数据,而不必关心数据在计算机中的表示和存储,这样就减轻了用户使用系统的负担。

三级结构之间往往差别很大,为了实现这三个抽象级别的联系和转换,DBMS在三级结构之间提供两个层次的映象(mappings):外模式/模式映象,模式/内模式映象。此处模式是概念模式的简称。 2.2.3 数据的独立性

由于数据库系统采用三级模式结构,因此系统具有数据独立性的特点。在数据库技术中,数据独立性是指应用程序和数据之间相互独立,不受影响。数据独立性分成物理数据独立性和逻辑数据独立性两级。 (1)物理数据独立性

如果数据库的内模式要进行修改,即数据库的存储设备和存储方法有所变化,那么模式/内模式映象也要进行相当的修改,使概念模式尽可能保持不变。也就是对内模式的修改尽量不影响概念模式,当然,对于外模式和应用程序的影响更小,这样,我们称数据库达到了物理数据独立性。 (2)逻辑数据独立性

如果数据库的概念模式要进行修改,譬如增加记录类型或增加数据项,那么外模式/模式映象也要进行相应的修改,使外模式尽可能保持不变。也就是对概念模式的修改尽量不影响外模式和应用程序,这样,我们称数据库达到了逻辑数据独立性。 现有关系系统产品均提供了较高的物理独立性,而对逻辑独立性的支持尚有欠缺,例如,对外模式的数据更新受到限制等。 2.2.4 范式

建立起一个良好的数据指标体系,是建立数据结构和数据库的最重要的一环。一个良好的数据指标体系是建立DB的必要条件,但不是充分条件。我们完全可以认为所建指标体系中的一个指标类就是关系数据库中的一个基本表,而这个指标类下面的一个个具体指标就是这个基本表中的一个字段。但如果直接按照这种方式建库显然还不能算最佳。对于指标体系中数据的结构在建库前还必须进行规范化的重新组织。

在数据的规范化表达中,一般将一组相互关联的数据称为一个关系(relation),而在这个关系下的每个数据指标项则被称为数据元素(data element),这种关系落实到具体数据库上就是基本表,而数据元素就是基本表中的一个字段(field)。规范化表达还规定在每一个基本表中必须定义一个数据元素为关键字(key),它可以唯一地标识出该表中其它相关的数据元素。在规范化理论中表是二维的,它有如下四个性质:

在表中的任意一列上,数据项应属于同一个属性(如图中每一列都存放着不同合同记录的同一属性数据)。

表中所有行都是不相同的,不允许有重复组项出现(如图中每一行都是一个不同的合同记录)。

在表中,行的顺序无关紧要(如图中每行存的都是合同记录,至于先放哪一个合同都没关系)。

在表中,列的顺序无关紧要,但不能重复(如图中合同号和合同名谁先谁后都没关系,但二者不可重复或同名)。

在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式。在这五种范式中,一般只用前三种,对于常用系统就足够了。而且这五种范式是“向上兼容”的,即满足第五范式的数据结构自动满足

一、

二、

三、四范式,满足第四范式的数据结构自动满足第

一、

二、三范式,„„,依此类推。

第一范式(first normal form,简称1st NF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉。这个去掉重复项的过程就称之为规范化处理。在本文所讨论的开发方法里,1st NF实际上是没有什么意义的。因为我们按规范化建立的指标体系和表的过程都自动保证了所有表都满足1st NF。

第二范式(second normal form,简称 2nd NF)是指每个表必须有一个(而且仅一个)数据元素为主关键字(primary key),其它数据元素与主关键字一一对应。例如,在图l9.7中如果我们将合同号定义为主关键字(其它数据元素中的记录数据都有可能重名,故不能作为主关键字),故只要知道了一个合同记录的合同号,就可以唯一地在同一行中找到该合同的任何一项具体信息。通常我们称这种关系为函数依赖(functional depEndence)关系。即表中其它数据元素都依赖于主关键字,或称该数据元素唯一地被主关键字所标识。

第三范式(third normal form,简称 3rd NF)就是指表中的所有数据元素不但要能够唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其它的函数关系。也就是说对于一个满足了 2nd NF的数据结构来说,表中有可能存在某些数据元素依赖于其它非关键宇数据元素的现象,必须加以消除。

为防止数据库出现更新异常、插入异常、删除异常、数据冗余太大等现象,关系型数据库要尽量按关系规范化要求进行数据库设计。

§2.3 SQL语言基础 2.3.1 SQL简介

用户对数据库的使用,是通过数据库管理系统提供的语言来实现的。不同的数据库管理系统提供不同的数据库语言。关系数据库管理系统几乎都提供关系数据库标准语言——SQL。 SQL 的全称是Structured Query Language,即结构化查询语言。SQL语句可以从关系数据库中获得数据,也可以建立数据库、增加数据、修改数据。1986年ANSI采用SQL语言作为关系数据库系统的标准语言,后被国际化标准组织(ISO)采纳为国际标准。SQL语言使用方便、功能丰富、简洁易学,是操作数据库的工业标准语言,得到广泛地应用。例如关系数据库产品DB

2、ORACLE等都实现了SQL语言。同时,其它数据库产品厂家也纷纷推出各自的支持SQL的软件或者与SQL的接口软件。这样SQL语言很快被整个计算机界认可。

SQL语言是一种非过程化语言,它一次处理一个记录集合,对数据提供自动导航。SQL语言允许用户在高层的数据结构上工作,而不对单个记录进行操作。SQL语言不要求用户指定数据的存取方法,而是使用查询优化器,由系统决定对指定数据存取的最快速手段。当设计者在关系表上定义了索引时,系统会自动利用索引进行快速检索,用户不需知道表上是否有索引或者有什么类型的索引等细节。 SQL语言可以完成许多功能,例如: ● 查询数据

● 在数据库表格中插入、修改和删除记录 ● 建立、修改和删除数据对象 ● 控制对数据和数据对象的存取 ● 确保数据库的一致性和完整性等 2.3.2 SQL查询

数据查询是关系运算理论在SQL语言中的主要体现,SELECT 语句是SQL查询的基本语句,当我们在对一个数据库进各种各样的操作时,使用的最多的就是数据查询,在以SQL为基础的关系数据库中,使用的最多的就是SELECT查询语句。 SELECT语句的完整句法如下: SELECT 目标表的列名或列表达式序列 FROM 基本表和(或)视图序列 [WHERE 行条件表达式] [GROUP BY 列名序列] [HAVING 组条件表达式] [ORDER BY列名 [ASC│DEAC]„] 我在SELECT语句中还使用了大量的保留字和通配符以进行各种各样的条件查询。在系统中有大量的查询按钮,其使用了大量的查询语句,而且这些查询语句大部分使用的是模糊查询,所以大量的使用了模式匹配符LIKE(判断值是否与指定的字符通配格式相符)。在包含LIKE的查询语句中可以使用两个通配符:%(百分号):与零个或多个字符组成的字符串匹配;_(下划线):与单个字符匹配。系统中的条件判断往往包含多个条件,这时就需要使用逻辑运算符NOT、AND、OR(用于多条件的逻辑连接),谓词ALL以及保留字DISTINCT等等。做为SELECT语句还有很多的使用方法,这里就不再叙述。 2.3.3 SQL数据更新

使用数据库的目的是为了有效地管理数据,而数据的插入、删除和修改则是必不可少的一个功能。在本系统中就大量地使用了数据插入、删除和修改这三种操作,现做一个简单地介绍。 ●数据插入

往数据库的基本表中插入数据使用的是INSERT语句,其方式有两种:一种是元组值的插入,另一种是查询结果的插入。在本系统中使用的是前一种方式,其句法如下:

INSERT INTO 基本表名(列表名)VALUES(元组值) ●数据删除

往数据库的基本表中删除数据使用的是DELETE语句,其句法如下: DELETE FROM 基本表名 [WHERE 条件表达式] 在些作一点说明,删除语句实际上是“SELECT * FROM 基本表名 [WHERE 条件表达式]”和DELETE操作的结合,每找到一个元组,就把它删除。此外,DELETE语句只能从一个基本表中删除元组,WHERE子句中条件可以嵌套,也可以是来自几个基本表的复合条件。 ●数据修改

当需要修改基本表中元组的某些列值时,可以用UPDATE语句实现,其句法如下: UPDATE基本表名

SET列名=值表达式[,列名=值表达式„] [WHERE条件表达式] 在Delphi中使用SQL语句是很方便的,一般来说,都是通过TQuery组件来使用SQL语言的。有一点要进行说明,虽然通过TQuery组件来使用SQL语言很方便,但考虑到自己对不同组件的理解程度、个人习惯以及其它各个方面,在本系统中我采用的是ADO组件来对数据库进行操作。最简单的方法比如在TADOQuery组件的SQL属性中就可以键入SQL语句,至于详细的使用方法在后面进行介绍。 第三章 数据库开发工具 §3.1 Delphi 6.0 简介

Delphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了。

凡是做过程序开发的人都知道从来没有单纯的数据应用程序,也就是说,数据库应用程序必须和用户界面(可以是图形界面,也可以是命令接口)元素相结合,只讲界面或只讲数据库本身都构不成数据库应用程序,因而用Delphi 6.0开发数据库应用程序就隐含着界面开发。Delphi6中的VCL组件可用图3-1来说明。组件在Delphi程序的开发中是最显眼的角色。大家知道,在编写程序时一般都开始于在组件面板上选择组件并定义组件间的相互作用。但也有一些组件不在组件面板上,例如Tform和Tapplication(典型的非可视组件)。组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事件和Publish属性。 窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额。在实际编程中,窗口组件类的对象都有句柄,可以接受输入焦点和包含其它组件。 图形组件与窗口组件并列,是另一大类组件。图形组件不是基于窗口的,因而不能有窗口句柄,不能接受输入焦点和包含其它组件。从图8-43中可以看出,图形组件的基类是TgraphicControl,在实际编程中,它们必须寄生于它们的宿主——窗口组件类的对象,由它们的拥有者负责其显示,而且它们还能触发一些和鼠标活动相关的事件。图形控件最典型的例子是Tlabel和TspeedButton。由此可以看出图形组件的功能很弱,有读者会问图形组件的用处何在呢?其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少。在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗。

非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件)。 §3.2 Delphi 6.0 控件

用Delphi6开发数据库应用,重点是和各种数据库组件打交道,当然也要使用其它的一些组件,现在就我在系统设计中所使用的重要组件给与简单介绍。 3.2.1 ADO数据访问组件

ADO数据对象(Active Data Objects)实际是一种提供访问各种数据类型的链接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口中,可以使用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Acce等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。ADO使您的客户端应用程序能够通过OLE DB提供访问和操作在数据库服务器中的数据。ADO支持用于建立C/S和Web的应用程序的主要功能。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO同时具有远程数据服务(RDS)功能,通过RDS可以在一次往返过程中实现将数据从服务器移动到客户端应用程序和Web页、在客户端对数据进行处然后将更新结果返回服务器的操作。

Delphi 6.0继续对Microsoft的ADO访问能力的支持。这种能力是通过一组新组件实现的,这些组件是在企业版的ADO组件页中,在组件面版的ADO页上可以找到这些组件。利用在前面章节提到的TdataSet抽象类,ADO组件可以不通过BDE而直接实现ADO连接。这意味着只需要很少的代码就可以实现该连接并且性能得到提高。

利用ADO数据访问组件,可以只使用ADO结构与数据库取得联系并对其中的数据进行操作,而在这些过程中完全不需要使用BDE。大多数的ADO连接和数据集组件都是与基于BDE的连接和数据集组件相类似的。TADOConnection组件与基于BDE的应用程序中的Tdatabase组件类似。TADOTable与Ttable,TADOQuery与Tquery,以及TADOStoreProc和TstoredProc之间都具有这种类似的对应关系。使用这些ADO组件的方式与我们常使用的数据访问组件(基于BDE)都有许多相同之处。TTADODataSet没有直接的BDE对应组件,但它提供了许多与Ttable和Tquery相同的功能。同样,TADOCommand也没有相对应的BDE组件,它是在Delphi/ADO环境中完成特定功能的组件。Delphi 6.0通过ADO数据集访问组件,可以不借助BDE数据引擎而是通过微软的OLEDB来访问更为广泛的数据库中的数据。ADO数据集访问组件与常用的数据访问组件是并列的关系。 在系统中我主要使用的是ADOTablet和ADOQuery两个组件。 3.2.2 数据控制类DataControl 数据控制类负责数据库数据的显示,并把用户对数据的修改传回。这里的绝大多数组件,如DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid的功能和对应的非数据感知组件相同,如TEdit框,TRadioGroups单选按钮组等,只不过在显示数据库数据时要用而已。

在系统中主要使用数据网格控件DBGrid和数据库导航器控件DBNavigator。 3.2.3 数据访问类DataAcce 数据库应用系统中数据访问是一个首要问题,包括单用户和 C/S系统,都必须联系一些数据库和数据表文件。Delphi 6 提供了专门用于数据访问的基类控件。主要包括数据源控件DataSource、客户数据集控件ClientDataSet、数据集提供器控件DataSetProvider等等。

Tdatabase:当一个基于BDE的数据库应用程序需要一个永久数据库连接时,需要定制向一个数据库服务器的连接时,需要事务控制和特殊的数据库别名时就得用到Tdatabase对象。特别是当连接到一个远程的SQL数据库服务器时,如果要利用BDE进行数据库事务处理,那么,TDatabase对象的威力就体现出来了。在一个应用程序中为每一个数据库连接显示的声明Tdatabase对象要根据需要而定,不是必需的。对一个数据库连接,如果没有显示的声明并实例化TDatabase对象,系统就会产生一个带有默认属性的TDatabase对象。

TdataSource对象用于在DataSet对象(包括Tquery,TstoredProc,Ttable等)和数据感知组件之间提供一个连接的纽带,以便在窗体上显示数据库中的数据,在数据库中导航定位与编辑数据集中的数据。如果一个DataSet对象中的数据想在数据感知组件中显示和修改,它就必须和TdataSource对象相联系。同样,一个数据感知组件如果想和数据源相联系以便显示和操纵数据,就必须以TDataSource对象为中介。

用Delphi6作数据库应用开发概括来说如下:先利用数据存取组件和实际的数据库建立连接,并用Tseion对象和Tdatabase对象管理这些连接。然后以Tdatasource对象为中介,用数据感知组件向用户显示数据库的内容并接受用户的查询和修改等操作。

3.2.4 SQL语言在Delphi中的应用

在Delphi中使用SQL语言非常方便,一般来说,都是通过Tquery组件来使用SQL语言的。可以在TQuery组件的SQL属性中设置SQL语句。设计程序时,在该组件的属性对话框中选择SQL属性,单击带省略号的按钮,就可以打开String List Editor对话框,然后我们就可以在对话框中添加SQL语句。还可以使用Delphi的SQL Builder来自动生成SQL语句,这样可以避免手工编写SQL而可能造成的语法错误。

静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量。 动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,例如下面的语句是一条动态SQL语句:

Select * From Students Where StudentCode =: StudentCode; 其中的变量StudentCode便是一个参数变量,它由一个冒号引导,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值。为参数赋值有三种方法:

①根据参数在SQL语句中出现的顺序,设置TQuery部件的Params属性值为参数赋值。

②直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值。 ③将TQuery部件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TQuery部件的SQL语句中的参数名相匹配的字段值赋给其对应的参数。利用这种方法也能实现所谓的连接查询,创建主要—明细型数据库应用。 在程序运行过程中,要想设置TQuery部件的SQL属性,必须首先调用Close方法,关闭TQuery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句, 最后再调用Add方法为SQL属性设置新的SQL命令语句。例如: Query1.Close {关闭Query1) Query1.SQL.Clear {清除SQL属性中的SQL命令语句} Query1.SQL.Add(‘Select * From Students‘); Query1.SQL.Add(‘ Where Name =\"Lucy\" ‘);

在为TQuery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面, 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。

在这里要特别注意的,一般情况下TQuery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。

在为TQuery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。

在设计过程中,设置完TQuery部件的SQL属性之后将其Active属性的值置为True, 这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。

在应用程序运行过程中,通过程序调用TQuery部件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方法是不一样的。Open方法只能用来执行SQL语言的查询语句(Select命令), 并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT, UPDATE, DELETE等命令),例如:

Query1.Open (这样会返回一个查询结果集) 如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL 方法来代替Open方法。如: Query1.ExecSQL (没有返回结果) 当然在设计应用程序时,程序设计人员是无法确定TQuery部件中的SQL 语句是否会返回一个查询结果的。对于这种情况应当用Try„Except模块来设计程序。在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。

Delphi中用ADOQuery来使用SQL语句同样十分方便。在ADOQuery组件中首先通过ConnectionString属性值来联接数据源,然后就通过双击SQL„属性值来写入SQL语句。在Delphi中调用数据库,就可以调用ADOQuery组件,通过修改其中的SQL„属性中的SQL语句来实现对数据库的各项操作。

值得注意的是,ADOQuery组件只有在激活的情况下才可以被正确地使用,这样就提出了一个问题,也就是说,在每次修改ADOQuery组件的SQL„属性时都必须先行进行关闭,待清除掉SQL„中所有的SQL语句后才可以添加新的SQL语句。而且,在每一次修改完成以后,还应该记得重新将ADOQuery激活。其它的使用方法与TTQuery有许多的相似之处。 §3.3 Acce 简介

建立一个数据库我们有多种选择,现在市场上有各种各样的数据库,而且每一种数据库都有其自身的特点,不能说哪一种更好,只能在其中寻找一种能更好地适应系统需求、更好地满足用户的要求以及适应开发人员的习惯。在本系统中,做为图书仓库管理系统是一个比较小的应用系统,它所产生和处理的数据量也比较小。因此,没有必要使用像SQL Server和Oracle这样的大型数据库。我首先想到的数据库是Borland公司的Paradox数据库。另外,Microsoft Office中的Acce数据库在计算机上的应用比较普及,是开发小型数据库系统的比较理想的选择,所以,在本系统中我选择了Acce数据库。

Acce做为一个数据库管理系统,它被集成在Microsoft Office中。Acce数据库处理的基本结构,采取关系型数据库模式。与其他的数据库系统相比,Acce更加简单易学,一个普通的计算机用户可以很快地掌握它。Acce 2000的功能十分强大,利用它可以方便地实现对信息保存、维护、查询、统计、打印、交流、发布,而且它可以十分方便地与Office其他组件交流数据,这些功能对一个一般用户而言已经足够了 第四章 系统总体设计

软件系统的总体设计大约要经历可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试以及维护等七个阶段。可行性分析和项目开发计划在前面已经叙述,下面所要做的是进行软件需求分析,概要设计和详细设计。编码过程将在下一节论述,而测试和维护过程不在本文叙及。 §4.1 系统需求分析

在经过前一阶段的分析之后,我确定了我的开发课题为图书仓库管理。现在所要做的是要准确定义系统必须做什么以及系统必须具备的功能。

软件需求分析中我采用结构化分析方法(Structured Analysis,简称SA),SA是面向数据流进行需求分析的方法,像所有的软件分析方法(如面向对象分析方法、IDEF方法等等)一样,SA也是一种建模活动,它使用简单易读的符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘满足功能要求的软件模型。

在系统中我采用数据流图(DFD)这种半形式化的描述方式表达需求。它是一种功能模型,以图形的方式描绘数据在系统中流动和处理的过程,只反映系统必须完成的逻辑功能。它有四种基本图形符号: ◆ →:箭头,表示数据流; ◆ 〇:圆或椭圆,表示加工; ◆ ═:双杠,表示数据存储;

◆ □:方框,表示数据的源点或终点。

为了表达较为复杂问题的数据处理过程,用一张数据流图是不够的,要按照问题的层次结构进行逐步分解,并以一套分层的数据流图反映这种结构关系。在这里我一共使用了三层数据流图,即顶层图,0层图和1层图(也是底层图)。 在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统,它的输入流是该系统的输入数据了,输出流是该系统的输出数据;底层流图是指其加工不需要再做分解的数据流图,中间层流图表示对其上层父图的细化,它的每一步加工可能继续细化成子图。

经过对系统的分析首先得到系统的顶层DFD,如下: 一步细化得到系统的0层DFD,如下:

再进一步细化每一个数据加工功能,得到系统的1层DFD图。

在这里只给出有关入库管理和出库管理的1层数据流图,它们是系统的关鍵部分,也是主要的部分。通过以上对数据流图的分析之后,我们已大体地了解了系统的功能和目标,接下来所要做的就是系统功能模块的划分和数据库的设计,也就是系统的概要设计。 §4.2 系统概要设计

在软件需求分析阶段,搞清楚了软件“做什么”的问题,形成了目标系统的逻辑模型。现在我们所要做的就是要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求。首先,我们需要描述的是系统的总的体系结构。

4.2.1 系统结构设计

系统的概要设计中最重要的就是系统的模块化。模块化是指解决一个复杂问题时自项向下逐层把软件系统划分成若干个模块的过程。每个模块完成一个特定的功能,所有的模块按某种方法组织起来,成为一个整体,完成整个系统所要求的功能。

将系统划分为多个模块是为了降低软件系统的复杂性,提高可读性、可维护性,但模块的划分不能是任意的,应尽量保持其独立性。也就是说,每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单,即尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。 在系统的概要设计中我采用结构化设计(Structure Design,简称SD),SD以需求分析阶段产生的数据流图DFD为基础,按一定的步骤映射成软件结构。我首先将整个系统化分为几个小问题,小模块,在系统中,我设计了用户管理、库存管理、入库管理、出库管理、员工管理和供应商管理6个小模块。然后,进一步细分模块,添加细节。比如,用户管理我又将其分为用户注册、用户注销、密码修改;库存管理分为库存记录查询、库存记录修改、库存记录打印等等。 以下就是系统的结构图:(在这里为了表达方便我将结构图分开来表达。)

在得到系统的第一层功能模块图后,经过进一步地细化,得一系统的子功能模块图:

4.2.2 数据库设计

在信息世界中,信息从客观事物出发流经数据库,通过决策机构最后又回到客观世界,信息的这一循环经历了三个领域:信息世界,数据世界,现实世界。现实世界的事物反映到人的头脑中,人的大脑对它有个认识过程,经过分析(选择、命名、分类等)进入信息世界。这些信息再进一步加工、编码,然后进数据世界,而软件系统的开发工作需要考虑这两个方面的问题,也就是要考虑系统开发所需要的数据,以及如何对这些数据进行操作。这两个问题贯穿了整个软件系统的开发过程,这也就是数据库的设计问题,软件设计的一个核心。 4.2.2.1 ER图设计

在系统设计的开始,我首先考虑的是如何用数据模型来数据库的结构与语义,以对现实世界进行抽象。目前广泛使用的数据模型可分为两种类型,一种是独立于计算机系统的“概念数据模型”,如“实体联系模型”;另一种是直接面向数据库逻辑结构的“结构数据模型”。在本系统中我采用“实体联系模型”(ER模型)来描述数据库的结构与语义,以对现实世界进行第一次抽象。ER模型直接从现实世界抽象出实体类型及实体间联系,然后用ER图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。但ER模型只能说明实体间语义的联系,不能进一步说明详细的数据结构,它只是数据库设计的第一步。

ER图是直观表示概念模型的工具,它有四个基本成分: ◆ 矩形框,表示实体类型(考虑问题的对象)。 ◆ 菱形框,表示联系类型(实体间的联系)。

◆ 椭圆形框,表示实体类型和联系类型的属性。对于关键码的属性,在属性名下划一横线。

◆直线,联系类型与其涉及的实体类型之间以直线连接。

本系统为图书仓库管理,主要管理图书的入库、出库以及库存等事项。仓库根据需要可以查询图书供应商的信息,同时还需要了解在入库和出库中员工的参与情况。依据仓库管理的实际情况,考虑了多方面的因素以后,确定系统的ER图如下:

(为了表达的方便,在这里我没有在一张图上表达出所有的关系,而是用一张总体ER图,和几张实体属性关系图来表达数据库的结构。)

在该数据库中,我设计了三个实体,分别是库存、员工和供应商以及两个联系类型入库和出库。在本系统中库存是核心,也是基本,没有了库存其它的也就没有什么意义了。员工记录的添加是考虑到责任问题,也就是说,在仓库管理的实际运用中,出现了责任不清的现象,特别是由于仓库的进出图书数量都比较大时产生了一系列问题,所以在设计数据库时,我特别考虑到这一点,加入了员工记录这一实体。供应商信息的添加主要出于对图书来源问题的思考。通过添加供应商信息可以比较清楚地了解图书的进货渠道,从图书的质量到供应商的信誉都可以进行了解,同时可以为以后的图书进购提供一定有用的信息。

入库联系类型将库存信息、供应商信息和员工信息联系在一起,可以方便地实现三个实体之间的联接,而出库联系类型则将库存信息和员工信息较好地联接起,同时这两个联系类型又都具有各自特有的属性。 下面就是各实体及联系类型的属性图:(带#号的属性为关键字段)4.2.2.2 数据库表格设计

在完成系统的ER图之后,需要将ER模型转化为关系模型,也就是说,要设计出数据库所需要的表格。在这里,我选用的是关系数据库。因为关系数据库中的二维表格可以很清楚地描述数据之间的联系。

在这里不得不提到一个概念——范式。其实在上一节的ER图设计中,已经运用了范式的思想,不仅如此,在数据库的表格设计中更离不开范式的思想,它是数据库设计的基础,如果不注意这个问题将会导致一系列问题的出现。

我在系统中定义的表格都严格地按照范式的思想和要求去完成,数据库中的所有表格都达到了三范式的要求。根据系统ER图,针对本系统的特点,在对所搜集的数据进行规范化之后,定义了如下六张表格,分别是库存信息表,入库信息表,出库信息表,员工信息表,供应商信息表和密码信息表。通过对这六张表格的操作可以较好地完成系统设计的各项功能,六张表格之间有着不同程度的联系。(说明:在以下数据表中,K代表主键,#代表外键,字段值不为空。) BookRecord 表(库存信息表)

字段名称 数据类型 说明 K BookID 数字 图书编号 BookName 文本 图书名 Author 文本 作者 Publisher 文本 出版社 PubDate 日期/时间 出版日期 Price 货币 价格 BookType 文本 图书类型 Number1 数字 库存数量 Addation 文本 备注 图4.13 库存信息表 库存信息表主要用于记录仓库中现存放的所有图书的详细信息,包括图书编号、书名、作者、出版社、图书类型等有关图书的各类信息,它即是该数据库的主表,也是系统主界面的主要内容。

在该表中图书编号是主键,它按图书入库的先后次序来编写,每当有图书入库,系统自动给出图书编号,这样我们按图书编号来查找图书是比较方便的。考虑到编号比较难于记忆,所以使用了出版社和图书类型两个字段,在系统中我提供了出版社和图书类型的分类查找,而且全部采用自动生成,每当系统中有新的出版社类型和图书类型,弹出菜单会自动添中新类型,这样就可以比较方便地实现按出版社和按图书类型查找。此外,库存数量也是一个比较关键的字段,该字段是在系统初始化时就给定的,每当有图书入库或出库操作,系统就会自动修改图书的库存数量,以保持数据的一致性。做为备注有一点说明,我的数据库中备注的数据类型是文本,而不是备注类型,主要考虑到该字段的长度并不大,而且在Delphi中文本数据类型的处理也比较方便一点。 Employee 表(员工信息表)

字段名称 数据类型 说明 K EmployeeID 数字 员工编号 EmployeeName 文本 员工姓名 Sex 文本 性别

BornDate 日期/时间 出生日期 Grade 文本 职称

WorkDate 日期/时间 工作日期 Telephone 文本 联系电话 Addre 文本 联系地址

图4.14 员工信息表

员工信息表主要用于记录有关员工的各类信息,包括姓名、职称、出生日期、联系电话、联系地址等。它主要用来为系统提供员工的有关信息,因为在系统中,入库和出库操作均与员工有着一定的联系,在查询入库信息和出库信息时,有时需要查找有关此项记录有关的员工信息,在系统中我是通过入库记录与员工记录(出库记录和员工记录)之间的联接查询来完成的。另外,作为一个仓库也有必要了解其所属员工的一些基本情况,以便查询。 Shopkeeper 表(供应商信息表)

字段名称 数据类型 说明 K ShopkeeperID 数字 供应商编号 ShopkeeperName 文本 供应商姓名 Addre 文本 地址 PostNo 数字 邮编

OfficePhone 文本 办公电话 HomePhone 文本 住宅电话 Email 文本 E-mail PayType 文本 付款方式

图4.15 供应商信息表

供应商信息表主要用于记录有关供应商的各类信息,包括姓名、地址、电话、付款方式等。它主要用来为系统提供供应商的有关信息,在系统中入库记录是与供应商记录相联系的,通过入库记录可以查找相关的供应商信息。在供应商信息中,考虑当实际情况,我特别加入了Email和付款方式这两个字段,因为在当今信息世界中,多种多样的通讯方式和多种多样的付款方式是必然的,是数据库中必须与以记录。

InRecord 表(入库信息表)

字段名称 数据类型 说明 K InID 数字 入库编号 # BookID 数字 图书编号 # EmployeeID 数字 员工编号 # ShopkeeperID 数字 供应商编号 Number 数字 入库数量 BuyDate 日期/时间 入库日期

图4.16 入库信息表

OutRecord 表(出库信息表)

字段名称 数据类型 说明 K OutID 数字 出库编号 # BookID 数字 图书编号 # EmployeeID 数字 员工编号 Number2 数字 出库数量 OutDate 日期/时间 出库日期

图4.17 出库信息表

入库信息表主要用于记录有关入库的详细信息,包括入库数量、入库日期以及图书、员工、供应商三方的编号,以便查询。出库信息表主要用于记录有关出库的详细信息,包括出库数量、出库日期以及图书、员工的编号。出库信息表和入库信息表一样,其实它们都属于联系类型,系统通过这两个表可以联接上其它的表为用户提供多种条件的联接查询。值得提出的一点是入库记录和出库记录的添加不仅仅是单表操作,由于它们都与库存记录相联系,所以,无论您是添中入库记录还是添加出库记录,都必须同时修改库存记录,以保持数据的一致性,否则将引发系统出错而这些我都让其在系统中自动完成。无论您是添加入库记录,还是添加出库记录,系统都将自动修改库存中图书的数量,而且,在您出库的数量大于库存数量时,系统还会自动提示错误,这样就可以防止一定错误的发生。 在入库信息表和出库信息表中我还定义了几个外键,它提供了一种表示几个关系联系的方法。比如,系统中通过在入库信息表中定义的外键 BookID、EmployeeID和ShopkeeperID可以将库存信息表、员工信息表和供应商信息表联系在一起,从而方便地实现联接查询,而且,引入外键的定义是实体完整性约束的一个主要方面。

Key 表(密码信息表)

字段名称 数据类型 说明 K KeyName 文本 用户姓名 KeyNo 文本 用户密码 图4.18 密码信息表

密码信息表主要用于记录所有的用户名和用户密码。它是在用户登陆时用来确定用户和密码的正确性,以防止非法用户登陆。

通过以上设计已经完成了系统的概要设计,当我们有了系统的功能模块图和数据库之后,就需要着手去实现每一个模块,为每一个功能设计程序流程图,这也就是系统的详细设计。 §4.3 系统详细设计

在前面的概要设计中,已将系统划分为多个模块,并将它们按照一定的原则组装起来,同时确定了每个功能及模块之间的外部接口。现在所要做的就是确定每个模块具体执行过程,也可以说是“过程设计”。

在处理过程设计时我采用的是结构化程序设计(简称SP)方法。需要指出的是系统的详细设计并不是指具体的编程序,而是将概要设计阶段产生的系统功能模块图细化成很容易产生程序的图纸。因此详细设计的结果基本决定了最终程序的质量。为软件的质量,延长软件的生存期,软件的可测试性、可维护性提供重要的保障。详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易读。

由前一阶段产生的系统功能模块图,我为系统的主要部分设计了如下程序流程图:通过以上步骤,基本上完成了对整个系统的总体设计,接下来所要做的就是软件的编码工作。系统总体设计的好坏直接影响着下一步工作,只有在这一阶段设计出好的模块图和程序流程图,才能更有利于编码,产生好的软件系统。

第五章 系统应用程序设计 §5.1 系统窗体模块组成 §5.2 数据模块窗体的设置

在编写数据库应用程序时,经常要遇到这样的情况,即好多组件、窗体同时访问相同的数据源,如果为每一个组件或者窗体都设置一个数据源将是十分耗时的工件,而且要保证这些数据源的确是相同的也需花一番功夫。那么,能不能将这些数据源集中管理,最好是做成一个统一的模块,需要时就将该模块引入而不必直接操作数据源本身呢?数据模块(DataModule)是解决这个问题最好的答案。简单说来,数据模块是用来集中管理数据源的一个窗体,该窗体可被需要的地方随时引入。

图5.2给出了本程序的数据模块(datamoduleform)窗体图,除报表窗体外所有的数据存取组件和数据源组件都在此数据模块中进行了定义。值得一提的是,设置了数据库Database组件,该组件引入了系统所需的唯一的数据库tsxs,Database组件的DatabaseName属性设置为tsckgl。tsxs数据库已在ODBC配置程序中进行了设置。其他的数据存取组件都是基于此数据库组件创建的,这样做的好处是,当数据库的别名或者其他信息改变之后,只需修改Tdatabase组件的AliasName属性即可。

另外,在本系统的数据模块窗体图中,我大多采用的AODQuery组件而没有采用BDE组,这主要是基于对ADO组件的了解。在Delphi的学习中我对ADO组件了解的更加清楚,使用也较BDE更为熟练,而且,ADO组件的功能也较BDE更为强大,所以在这里大多采用ADO组件来进行数据库联接。同时我也使用了BDE组件中的Table,因为在某些时候BDE有着其自身特有的优越性。 主窗体功能模块的实现 file://主窗体程序代码

public file://在程序的起始部分,定义快捷按钮点击事件 Procedure Popup1Handler(Sender:Tobject); Procedure Popup2Handler(Sender:TObject); ********************************************************************** procedure Tmainform.Popup1Handler(Sender: TObject); begin file://快捷按钮1(点“按出版社分类”按钮产生)的点击事件 with datamoduleform.MainQuery do begin file://打开数据模块窗体的MainQuery,对BookRecord表进行操作 close; file://关闭MainQuery SQL.Clear; file://清除SQL属性中的SQL命令语句

SQL.Add(‘select * from BookRecord where Publisher=:Pub‘); file://添加新的SQL语句

Parameters.ParamByName(‘Pub‘).Value:=(Sender as TMenuItem).Caption; open; file://重新打开MainQuery end; end; ********************************************************************** procedure Tmainform.SpeedButton1Click(Sender: TObject); Var s1,s2,s3,s4,s5 :String; file://设立5个变量以方便实现模糊查询 begin file://主窗口库存查询按钮事件 with datamoduleform.MainQuery do begin close; SQL.Clear; SQL.Add(‘select * from BookRecord‘);

SQL.Add(‘where BookID Like :BookID and BookName Like :Name and Author Like :Author and Publisher Like :pub and BookType Like :BookType‘); file://使用Like语句来实现模糊查询

if Edit1.Text‘‘ then s1:=‘%‘+Edit1.Text+‘%‘ else s1:=‘%‘;

Parameters.ParamByName(‘BookID‘).Value:=s1; file://给变量s1赋值

if Edit2.Text‘‘ then s2:=‘%‘+Edit2.Text+‘%‘ else s2:=‘%‘;

Parameters.ParamByName(‘Name‘).Value:=s2; file://给变量s2赋值

if Edit3.Text‘‘ then s3:=‘%‘+Edit3.Text+‘%‘ else s3:=‘%‘;

Parameters.ParamByName(‘Author‘).Value:=s3; file://给变量s2赋值

if Edit4.Text‘‘ then s4:=‘%‘+Edit4.Text+‘%‘ else s4:=‘%‘;

Parameters.ParamByName(‘Pub‘).Value:=s4; file://给变量s2赋值

if Edit5.Text ‘‘ then s5:=‘%‘+Edit5.Text+‘%‘ else s5:=‘%‘;

Parameters.ParamByName(‘BookType‘).Value:=s5; file://给变量s2赋值 open; if FieldValues[‘BookID‘]=NULL file://判断是否找到记录 then begin Meagedlg(‘没有找到你所需要的记录!‘,mtInformation,[mbOK],0); Edit1.Text:=‘‘;Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘; close; SQL.Clear; SQL.Add(‘select * from BookRecord‘); file://这里相当于一个刷新功能 open; end;end; end; ********************************************************************** procedure Tmainform.SpeedButton3Click(Sender: TObject); begin file://库存表刷新按钮事件 with datamoduleform.MainQuery do begin close; SQL.Clear; SQL.Add(‘select * from BookRecord‘); open; end; end; ********************************************************************** procedure Tmainform.SpeedButton11Click(Sender: TObject); var PopupItem:TMenuItem; begin file://自动生成快捷按钮1的内容 with datamoduleform.BookQuery do begin file://从数据库中选择出版社类型 close; SQL.Clear; SQL.Add(‘select distinct Publisher from BookRecord‘); open; PopupMenu1:=TPopupMenu.Create(Self); file://自动生成快捷菜单 PopupMenu1.AutoHotkeys:=maManual; file://自定义热键 while Not Eof do begin file://根据出版社内容生成菜单子项 PopupItem:=TMenuItem.Create(Self); PopupItem.Caption:=FieldByName(‘Publisher‘).AsString; PopupMenu1.Items.Add(PopupItem); PopupItem.onClick:=Popup1Handler; file://确定菜单子项的点击事件 Next; end; end; PopupMenu1.Popup(384,67); file://在指定位置显示快捷菜单1 end; ********************************************************************** procedure Tmainform.FormActivate(Sender: TObject); begin file://系统初始化,在进入mainform时自动添加数据源 mainform.DBGrid1.DataSource:=datamoduleform.MainSource; mainform.DBNavigator1.DataSource:=datamoduleform.MainSource; mainform.DBGrid2.DataSource:=datamoduleform.EmpSource; mainform.DBNavigator2.DataSource:=datamoduleform.EmpSource; mainform.DBGrid3.DataSource:=datamoduleform.ShopSource; mainform.DBNavigator3.DataSource:=datamoduleform.ShopSource; mainform.DBGrid4.DataSource:=datamoduleform.InSource; mainform.DBNavigator4.DataSource:=datamoduleform.InSource; mainform.DBGrid5.DataSource:=datamoduleform.OutSource; mainform.DBNavigator5.DataSource:=datamoduleform.OutSource; end; ********************************************************************** procedure Tmainform.FormCreate(Sender: TObject); begin file://系统初始化,定义界面大小,以适应不同分辩率 Width:=800;Height:=600; end; ********************************************************************** procedure Tmainform.Timer1Timer(Sender: TObject); begin file://在状态栏显示时间 StatusBar1.Panels[2].Text:=DateToStr(Date); StatusBar1.Panels[4].Text:=TimeToStr(Time); end; §5.4 入库、出库窗体模块的实现

图5.4 系统入库管理窗体

图5.5 系统出库管理窗体 procedure Tinoutform.SpeedButton4Click(Sender: TObject); begin file://入库管理查找按钮事件

with datamoduleform.BookQuery do file://入库查询处理 begin close; SQL.Clear; SQL.Add(‘select * from BookRecord where BookID=:BookID‘);

Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text; open; if FieldValues[‘BookID‘]NULL then begin Edit1.Text:=‘‘;

Edit1.ReadOnly:=true;Edit1.Color:=clMenu; Edit6.Text:=FieldValues[‘BookName‘]; file://显示图书名 Edit6.ReadOnly:=true;Edit6.Color:=clMenu; file://设置显示框不可更改属性

Edit7.Text:=FieldValues[‘Author‘]; Edit7.ReadOnly:=true;Edit7.Color:=clMenu; Edit8.Text:=FieldValues[‘Publisher‘]; Edit8.ReadOnly:=true;Edit8.Color:=clMenu; Edit9.Text:=FieldValues[‘PubDate‘]; Edit9.ReadOnly:=true;Edit9.Color:=clMenu; Edit10.Text:=FieldValues[‘Price‘]; Edit10.ReadOnly:=true;Edit10.Color:=clMenu; Edit11.Text:=FieldValues[‘BookType‘]; Edit11.ReadOnly:=true;Edit11.Color:=clMenu; Edit12.Text:=FieldValues[‘Number1‘]; Edit12.ReadOnly:=true;Edit12.Color:=clMenu; If FieldValues[‘Addation‘]NULL then Edit25.Text:=FieldValues[‘Addation‘]

else Edit25.Text:=‘‘;

Edit25.ReadOnly:=true;Edit25.Color:=clMenu; end else begin file://在没有查找到的情况下,清空所有显示框 Edit1.ReadOnly:=false;Edit1.Text:=‘‘;Edit1.Color:=clMenu;

Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clMenu;

Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clMenu;

Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clMenu; Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clMenu;

Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clMenu;

Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clMenu;

Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu; Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clMenu;

MeageDlg(‘没有找到你所需要的记录!‘,mtInformation,[mbOK],0); Edit13.Text:=‘‘;Edit13.SetFocus; end; end; with datamoduleform.InQuery do file://自动入库编号的获取 begin close; SQL.Clear; SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘);

open; file://找到入库编号中最大的一个 Edit26.ReadOnly:=false; Edit26.Text:=FieldValues[‘InID‘]+1; file://最大的入库编号加1形成新的入库编号

Edit26.ReadOnly:=true;Edit26.Color:=clMenu; file://设置编号的不可更改性 end; end; ********************************************************************** procedure Tinoutform.SpeedButton1Click(Sender: TObject); var s:integer; begin file://入库管理添加按钮事件 if Edit1.TextNULL then MeageDlg(‘请输入完整的入库信息和图书信息,然后单击确定按钮。‘, mtInformation,[mbok],0) else begin if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘) then begin MeageDlg(‘请输入完整的入库信息!‘,mtInformation,[mbok],0); Edit2.SetFocus; end else begin with datamoduleform.InQuery do file://将找到的图书信息显示 begin close; SQL.Clear; SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID, :Number,:InDate)‘); file://向入库信息表中插入记录

Parameters.ParamByName(‘InID‘).Value:=Edit26.Text; file://向Edit框取值

Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text;

Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;

Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;

Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;

Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text; execSQL; end; Edit12.ReadOnly:=False; S:=StrToInt(Edit12.Text)+StrToInt(Edit4.Text); file://计算入库后库存图书数量

Edit12.Text:=IntToStr(s); file://将修改后的库存图书数量显示 Edit12.ReadOnly:=true; with datamoduleform.BookQuery do file://修改库存记录中图书数量

begin close; SQL.Clear; SQL.Add(‘update BookRecord set Number1=:Number where BookID=:BookID‘);

Parameters.ParamByName(‘Number‘).Value:=s;

Parameters.ParamByName(‘BookID‘).Value:=Edit13.Text; execSQL; file://提交SQL语句

MeageDlg(‘记录已成功添加!‘,mtInformation,[mbOK],0); Edit13.SetFocus; end; end; end; end; ********************************************************************** procedure Tinoutform.SpeedButton2Click(Sender: TObject); begin file://入库管理确定按钮事件

if (Edit2.Text=‘‘) or (Edit3.Text=‘‘) or (Edit4.Text=‘‘) or (Edit5.Text=‘‘)

or (Edit6.Text=‘‘) or (Edit7.Text=‘‘) or (Edit8.Text=‘‘) or (Edit9.Text=‘‘)

or (Edit10.Text=‘‘) or (Edit11.Text=‘‘) or (Edit25.Text=‘‘) then begin file://判断输入信息的完整性

MeageDlg(‘请输入所需的全部入库信息!‘,mtInformation,[mbok],0); Edit2.SetFocus; end else begin with datamoduleform.InQuery do file://入库信息添加 begin close; SQL.Clear; SQL.Add(‘insert into InRecord values(:InID,:BookID,:EmpID,:ShopID, :Number,:InDate)‘); file://向入库信息表中插入记录

Parameters.ParamByName(‘InID‘).Value:=Edit26.Text;

Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text; Parameters.ParamByName(‘EmpID‘).Value:=Edit2.Text;

Parameters.ParamByName(‘ShopID‘).Value:=Edit3.Text;

Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;

Parameters.ParamByName(‘InDate‘).Value:=Edit5.Text; execSQL; end; with datamoduleform.BookQuery do begin close; SQL.Clear; file://在完成入库信息的添加后,修改库存记录 SQL.Add(‘insert into BookRecord values(:BookID,:BookName,:Author, :Publisher,:PubDate,:Price,:BookType,:Number,:Addration)‘);

Parameters.ParamByName(‘BookID‘).Value:=Edit1.Text; Parameters.ParamByName(‘BookName‘).Value:=Edit6.Text; Parameters.ParamByName(‘Author‘).Value:=Edit7.Text;

Parameters.ParamByName(‘Publisher‘).Value:=Edit8.Text;

Parameters.ParamByName(‘PubDate‘).Value:=Edit9.Text; Parameters.ParamByName(‘Price‘).Value:=Edit10.Text;

Parameters.ParamByName(‘BookType‘).Value:=Edit11.Text;

Parameters.ParamByName(‘Number‘).Value:=Edit4.Text;

Parameters.ParamByName(‘Addration‘).Value:=Edit25.Text; execSQL; end; MeageDlg(‘记录添加成功!‘,mtInformation,[mbok],0); end; end; ********************************************************************** procedure Tinoutform.SpeedButton11Click(Sender: TObject); begin file://新书入库按钮事件

Edit13.Text:=‘‘;Edit13.Color:=clMenu; with datamoduleform.InQuery do file://自动入库编号的获取 begin close; SQL.Clear; SQL.Add(‘select * from InRecord where InID>=All(select InID from InRecord)‘); open; Edit26.Text:=FieldValues[‘InID‘]+1; Edit26.ReadOnly:=true;Edit26.Color:=clMenu; end; with datamoduleform.BookQuery do file://自动图书编号的获取 begin close; SQL.Clear; SQL.Add(‘select * from BookRecord where BookID>=All(select BookID from BookRecord)‘); file://找到库存图书编号中最大的一个 open; Edit1.ReadOnly:=false; Edit1.Text:=FieldValues[‘BookID‘]+1; file://显示自动生成的图书编号

Edit1.ReadOnly:=true;Edit1.Color:=clMenu; end;

Edit2.Text:=‘‘;Edit3.Text:=‘‘;Edit4.Text:=‘‘;Edit5.Text:=‘‘;

Edit6.ReadOnly:=false;Edit6.Text:=‘‘;Edit6.Color:=clWindow; Edit7.ReadOnly:=false;Edit7.Text:=‘‘;Edit7.Color:=clWindow;

Edit8.ReadOnly:=false;Edit8.Text:=‘‘;Edit8.Color:=clWindow;

Edit9.ReadOnly:=false;Edit9.Text:=‘‘;Edit9.Color:=clWindow;

Edit10.ReadOnly:=false;Edit10.Text:=‘‘;Edit10.Color:=clWindow; Edit11.ReadOnly:=false;Edit11.Text:=‘‘;Edit11.Color:=clWindow;

Edit12.ReadOnly:=false;Edit12.Text:=‘‘;Edit12.Color:=clMenu;

Edit25.ReadOnly:=false;Edit25.Text:=‘‘;Edit25.Color:=clWindow; end; procedure Tinoutform.SpeedButton22Click(Sender: TObject); var s:integer; begin file://出库管理确定按钮事件

if (Edit24.Text=‘‘) or (Edit27.Text=‘‘) or (Edit28.Text=‘‘) then begin MeageDlg(‘请输入完整的出库信息!‘,mtInformation,[mbok],0); Edit24.SetFocus; end else begin if Edit27.Text>Edit21.Text file://检查出库数量是否小于库存数量 then begin MeageDlg(‘库存中的图书数量不够!‘,mtInformation,[mbok],0); Edit27.Text:=‘‘;Edit27.SetFocus; end else begin with datamoduleform.OutQuery do begin close; SQL.Clear; SQL.Add(‘insert into OutRecord values(:OutID,:BookID,:EmpID, :Number,:OutTime)‘); file://添加出库记录

Parameters.ParamByName(‘OutID‘).Value:=Edit23.Text; Parameters.ParamByName(‘BookID‘).Value:=Edit14.Text; Parameters.ParamByName(‘EmpID‘).Value:=Edit24.Text; Parameters.ParamByName(‘Number‘).Value:=Edit27.Text; Parameters.ParamByName(‘OutTime‘).Value:=Edit28.Text; execSQL; end;

第13篇:图书仓库管理系统的设计

图书仓库管理系统的设计

摘 要

本系统主要完成对图书仓库的库存管理,包括图书入库、出库、库存,员工信息,供应商信息以及密码管理等六个方面。系统可以完成对各类信息的浏览、查询、添加、删除、修改、报表等功能。

系统的核心是入库、库存和出库三者之间的联系,每一个表的修改都将联动的影响其它的表,当完成入库或出库操作时系统会自动地完成库存的修改。查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的都是为了方便用户使用。系统有完整的用户添加、删除和密码修改功能,并具备报表打印功能。

系统采用Microsoft Office中的Acce 2000来设计数据库,并使用当前优秀的开发工具—Delphi 6.0 ,它有着最为灵活的数据库结构,对数据库应用有着良好的支持。

论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。

关键字:数据库,SQL语言,Delph 6,数据库组件,仓库管理 目 录

第一章 引言 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1 课题来源 „„„„„„„„„„„„„„„„„„„„„„„„„„1 1.2 开发工具的选择 „„„„„„„„„„„„„„„„„„„„„„„2 1.3 所做的主要工作 „„„„„„„„„„„„„„„„„„„„„„„3 第二章 数据库概论 „„„„„„„„„„„„„„„„„„„„„„„„„„4 2.1 数据库的发展 „„„„„„„„„„„„„„„„„„„„„„„„4 2.1.1 数据库的发展 „„„„„„„„„„„„„„„„„„„„„„4 2.1.2 数据库阶段的特点 „„„„„„„„„„„„„„„„„„„„5 2.1.3 数据库技术 „„„„„„„„„„„„„„„„„„„„„„„6 2.2 数据库理论基础 „„„„„„„„„„„„„„„„„„„„„„„7 2.2.1 数据库模型 „„„„„„„„„„„„„„„„„„„„„„„7 2.2.2 数据库体系结构 „„„„„„„„„„„„„„„„„„„„10 2.2.3 数据的独立性 „„„„„„„„„„„„„„„„„„„„„11 2.2.4 范式 „„„„„„„„„„„„„„„„„„„„„„„„„11 2.3 SQL语言基础 „„„„„„„„„„„„„„„„„„„„„„„13 2.3.1 SQL简介 „„„„„„„„„„„„„„„„„„„„„„„13 2.3.2 SQL查询 „„„„„„„„„„„„„„„„„„„„„„„13 2.3.3 SQL数据更新 „„„„„„„„„„„„„„„„„„„„„14 第三章数据库开发工具 „„„„„„„„„„„„„„„„„„„„„„„16 3.1 Delphi 6.0 简介 „„„„„„„„„„„„„„„„„„„„„„„16 3.2 Delphi 6.0 控件 „„„„„„„„„„„„„„„„„„„„„„„17 3.2.1 ADO数据访问组件 „„„„„„„„„„„„„„„„„„„17 3.2.2 数据控制类DataControl „„„„„„„„„„„„„„„„„18 3.2.3 数据访问类DataAcce „„„„„„„„„„„„„„„„„18 3.2.4 SQL语言在Delphi中的应用 „„„„„„„„„„„„„„„19 3.3 Acce 简介 „„„„„„„„„„„„„„„„„„„„„„„„21 第四章 系统总体设计 „„„„„„„„„„„„„„„„„„„„„„„„23 4.1 系统需求分析 „„„„„„„„„„„„„„„„„„„„„„„23 4.2 系统概要设计 „„„„„„„„„„„„„„„„„„„„„„„25 4.2.1 系统结构设计 „„„„„„„„„„„„„„„„„„„„„25 4.2.2 数据库设计 „„„„„„„„„„„„„„„„„„„„„„27 4.2.2.1 ER图设计 „„„„„„„„„„„„„„„„„„„„27 4.2.2.2 数据库表格设计„„„„„„„„„„„„„„„„„„29 4.3系统详细设计„„„„„„„„„„„„„„„„„„„„„„„„34 第五章 系统应用程序设计 „„„„„„„„„„„„„„„„„„„„„„37 5.1 系统窗体模块组成„„„„„„„„„„„„„„„„„„„„„„37 5.2 数据模块窗体设置„„„„„„„„„„„„„„„„„„„„„„38 5.3 主窗体功能模块的实现„„„„„„„„„„„„„„„„„„„„39 5.4 入库、出库窗体模块的实现„„„„„„„„„„„„„„„„„„43 5.5 查询功能的实现„„„„„„„„„„„„„„„„„„„„„„„51 5.6 系统登陆窗体模块的实现„„„„„„„„„„„„„„„„„„„52 5.7 用户管理功能的实现„„„„„„„„„„„„„„„„„„„„„54 5.7.1 用户管理主窗体 „„„„„„„„„„„„„„„„„„„„54 5.7.2 密码修改窗体模块的实现 „„„„„„„„„„„„„„„„54 5.7.3 用户注册窗体模块的实现 „„„„„„„„„„„„„„„„55 5.7.4 用户注销窗体模块的实现 „„„„„„„„„„„„„„„„57 结束语 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„59 致谢 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„60 参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„61 第一章 引 言 §1.1 课题来源

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高。书籍做为人类的精神食粮,在现代社会中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择。与此同时,为了管理大量的图书,图书仓库也大量的出现,仓库的管理问题也就提上了日程。随着图书的大量增加,其管理难度也越来越大,如何优化仓库的日常管理也就成为了一个大众化的课题。

在计算机飞速发展的今天,将计算机这一信息处理利器应用于仓库的日常管理已是势必所然,而且这也将为仓库管理带来前所未有的改变,它可以带来意想不到的效益,同时也会为企业的飞速发展提供无限潜力。采用计算机管理信息系统已成为仓库管理科学化和现代化的重要标志,它给企业管理来了明显的经济效益和社会效益。主要体现在:

极大提高了仓库工作人员的工作效率,大大减少了以往入出存流程繁琐,杂乱,周期长的弊端。 基于仓库管理的全面自动化,可以减少入库管理、出库管理及库存管理中的漏洞,可以节约不少管理开支,增加企业收入。

仓库的管理的操作自动化和信息的电子化,全面提高了仓库的管理水平。

随着我国改革开放的不断深入,经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统已变得十分心要。

入库、库存、出库还是现在企业图书仓库管理的常规基本模式,虽然,最近又出现了很多新的管理模式,如:基于零库存思想的沃尔玛特管理方式,但这些新的思想在中国大部分企业的管理中还是难以实现的。所以如何设计好仓库管理系统,尽可能地减少仓库管理的重复性和低效性就成为当前最为重要的问题。图书仓库管理的核心是入库、库存和出库之间的联系,如何处理好三者之间的关系是系统最为关键的部分。另外,员工信息和供应商信息管理也是仓库管理中一个必不可少的部分,它提供着与入库和出库相关的地一些信息,使得整个系统更加完整,更加实用。 通过对仓库管理日常工作的详细调查,搜集了大量的资料,从系统结构的组织,功能的实现,技术的要求以及可行性等多方面进行考虑,认为本课题是一个适应现今图书仓库管理需求的计算机信息管理系统,具有一定的实际开发价值和使用价值。 §1.2 开发工具的选择

自Java诞生以来,随着Internet技术的普及和应用需求的变化,以第四代语言为主的应用开发产品发生了较大的变化,它们不仅已成为人们开发应用的开发工具,而且很多产品已发展成为一种强有力的应用开发环境。这些新型的开发工具通常以一种集成软件包的形式提供给开发人员,被称为Studio(工作室)或Suite(程序组)。例如,微软的Visual Studio 6.0,Borland公司的Delphi 6.0等数据库辅助开发工具。

现在,市场上可以选购的应用开发产品很多,流行的也有数十种。目前在我国市场上最为流行、使用最多、最为先进的可用作企业级开发工具的产品有: Microsoft公司的Visual Basic 6.0版 Microsoft公司的Visual C++6.0版 Borland公司的Delphi 6.0版

在目前市场上这些众多的程序开发工具中,有些强调程语言的弹性与执行效率;有些则偏重于可视化程序开发工具所带来的便利性与效率的得高,各有各的优点和特色,也满足了不同用户的需求。然而,语言的弹性和工具的便利性是密不可分的,只有便利的工具,却没有弹性的语言作支持,许多特殊化的处理动作必需要耗费数倍的工夫来处理,使得原来所标榜的效率提高的优点失去了作用;相反,如果只强调程语言的弹性,却没有便利的工具作配合,会使一些即使非常简单的界面处理动作,也会严重地浪费程序设计师的宝贵时间。

而Delphi是一个非常理想选择。Delphi 6 是操作系统中快速应用开发环境的最新版本。它也是当前Windows平台上第一个全面支持最新Web服务的快速开发工具。无论是企业级用户,还是个人开发者,都能够利用Delphi 6 轻松、快捷地构建新一代电子商务应用。Delphi 6 是惟一支持所有新出现的工业标准的RAD环境,包括XML(扩展标记语言)/XSL(可扩展样式语言),SOAP(简单对象存取协议)和WSDL(Web服务器描述语言)等。 Delphi 6 是可视化的快速应用程序开发语言,它提供了可视化的集成开发环境,这一环境为应用程序设计人员提供了一系列灵活而先进的工具,可以广泛地用于种类应用程序设计。在Delphi 6 的集成开发环境中,用户可以设计程序代码、运行程序、进行程序错误的调试等,可视化的开发方法降低了应用程序开发的难度。Delphi的基础编程语言是具有面向对象特性的Pascal语言,即Object Pascal 。Object Pascal具有代码稳定、可读性好、编译速度快等优点,并将面向对象的概念移植到了Pascal语言中,使这种基础语言有了新的发展空间。

使用Delphi 6.0 ,我们几乎可以作任何事情,还可以撰写种各种类型的应用程序,动态链接库(DLL)、CON、或CORBA对象,CGI/ISAPI程序,Microsoft Back Office应用程序。程序的规模小到简单的个人数据库应用,大到复杂的企业的多层次分布式系统,都可以使用Delphi进行开发,其友好的集成开发界面,可视化的双向开发模式,良好的数据库应用支持高效的程序开发和程序运行,备受广大程序开发人员的好评。尤其是Delphi对数据库应用的强大支持,大大提高了数据库应用软件开发的效率,缩短了开发周期,深受广大数据库应用程序设计人员的喜爱。Delphi为数据库应用开发人员提供了丰富的数据库开发组件,使数据库应用开发功能更强大,控制更灵活,编译后的程序运行速度更快。 §1.3 本文所做工作

引言部分介绍了本系统的课题来源以及对数据库开发工具的选择。

第二章介绍了数据库的发展,关系数据库,数据库体系结构,并系统介绍了SQL语言,为设计和理解应用程序做了铺垫。

第三章系统介绍了Delphi 6.0及其部分控件,SQL语言在Delphi 6.0中的应用,以及Acce等。

第四章是本文的主体,按照软件工程的要求,从需求分析开始,经过概要设计最后到详细设计,完成对整个系统的设计。

第五章根据第四章的设计结果利用Acce 2000和Delphi 6.0进行了具体的窗体和应用程序设计。

总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向 第二章 数据库概论 §2.1 数据库的发展

数据库处理在信息系统的研究中一直是非常重要的主题,然而,近年来,随着World Wide Web(WWW)的猛增及Internet技术的迅速发展,使得数据库技术之时成为最热门技术之一。数据库技术能使Internet应用超越具有早期应用特点的简单的发布。同时,Internet技术提供了一种向用户发布数据库内容的标准化的访问方法。这些技术没有脱离经典数据库技术的要求。它们只是加重了数据库技术的重要性。

数据库的设计和开发及包括艺术有包括工程。理解用户的需求,然后,把它们转变为有效的数据库设计是一个艺术过程。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用,是一个工程过程。

数据库的目的是帮助人们跟踪事务。经典的数据库应用涉及诸如订单、顾客、工作、员工、学生、电话之类的项,或其它数据量较大、需要密起关注的事务。最近,由于数据库的普及,数据库技术已经被应用到了新的领域,诸如用于Internet的数据库或用于公司内联网的数据库。数据库也被越来越多地应用于生成和维护多媒体应用程序上。 计算机的数据处理应用,首先要把大量的信息以数据形式存放在存储器中。存储器的容量、存储速率直接影响到数据管理技术的发展。从1956年生产出第一台计算机到现在,存储器的发展,为数据库技术提供了良好的物质基础。

使用计算机以后,数据处理的速度和规模,无论是相对于手工方式,还是机械方式,都有无可比拟的优势。通常在数据处理中,计算是比较简单的而数据的管理却比较复杂。数据管理是指数据的收集、整理、组织、存储、维护、检索、传送等操作,这部分操作是数据处理业务的基本环节,而且是任何数据处理业务中必不可少的共有部分。数据管理技术的优劣,将直接影响数据处理的效率。

2.1.1 数据库的发展

数据管理技术的发展,与硬件(主要是外存)、软件、计算机应用的范围有密切的联系。数据管理技术的发展经过三个阶段:人工管理阶段、文件系统阶段和数据库阶段。

人工管理阶段和文件系统阶段都有着相当多的缺陷,诸如数据冗余性 ,数据不一致性以及数据联系弱等等。也正是由于这些原因,促使人们研究新的数据管理技术,从而产生了数据库技术。 20世纪60年代末发生的三件大事,层次模型IMS系统的推出、关于网状模型DBTG报告的发表以及关于关系模型论文的连续发表标志着数据管理技术进入数据库阶段。进入70年代以后,数据库技术得到迅速发展,开发了许多有效的产品并投入运行。数据库系统克服了文件系统的缺陷,提供了对数据更高级更有效的管理。

当进入数据库阶段后,随着数据管理规模一再扩大,数据量急剧增加,为了提高效率,开始时,人们只是对文件系统加以扩充,在应用文件中建立了许多辅助索引,形成倒排文件系统。但这并不能最终解决问题。在20世纪60年代末,磁盘技术取得重要进展,具有数百兆容量和快速存取的磁盘陆续进入市场,成本也不高,为数据库技术的产生提供了良好的物质条件。 2.1.2 数据库阶段的特点

(1)减少数据的重复(Redundancy can be reduced)

当在一个非数据库系统当中,每一个应用程序都有属于他们自己的文件,由于无法有系统建立的数据,因此常常会造成存储数据的重复与浪费。例如:在一家公司当中,人事管理程序与工资管理程序或许都会使用到职员与部门的信息或文件,而我们可以运用数据库的方法,把这两个文件整理起来,以减少多余的数据,过度地占用存储空间。 (2)避免数据的不一致(Inconsistency can avoid)

本项的特色,可以说是延伸前项的一个特点,要说明这样的一个现象,我们可以从下面这个实例来看:若是在同一家公司当中,职员甲在策划部门工作,且职员甲的记录同时被存放在数据库的两个地方,而数据库管理系统却没有对这样重要的情况加以控制,当其中一条数据库被修改时,便会造成数据的不一致,但是,对于一个健全的数据库管理系统而言,将会对这样的情况加以控制,但有时并不需要刻意消除这种情形,应当视该数据库的需求与效率来决定。 (3)数据共享(Data shared)

对于数据共享的意义,并不是只有针对数据库设计的应用程序,可以使用数据库中的数据,对于其他撰写好的应用程序,同样可以对相同数据库当中的数据进行处理,进而达到数据共享的目的。 (4)强化数据的标准化(Standard can be enforced)

由数据库管理系统,对数据做出统筹性的管理,对于数据的格式与一些存储上的标准进行控制,如此一来,对于不同的环境的数据交换(Data Interchange)上将有很大的帮助,也能提高数据处理的效率。

(5)实践安全性的管理(Security restriction can be applied)

通过对数据库完整的权限控制,数据库管理者可以确认所有可供用户存取数据的合法途径渠道,并且可以事先对一些较重要或关键性的数据进行安全检查,以确保数据存取时,能够将任何不当损毁的情形降至最低。

(6)完整性的维护(Integrity can be maintained)

所谓完整性的问题,就是要确认某条数据在数据库当中,是正确无误的。正如(2)所述,若是无法控制数据的不一致性,便会产生完整性不足的问题,所以,我们会发现,当数据重复性高的时候,数据不完整的情形也会增加,当然,若是数据库的功能完整,将会大大地提高数据完整性,也会增加数据库的维护能力与维护简便性。

(7)需求冲突会获得平衡(Conflicting requirements can be balance)

在一个较大型的企业当中,用户不同的需求,往往会造成系统或数据库在设计上的困扰,但是一个合适的数据库系统,可以通过数据库管理员的管理,将会有效地整理各方面的信息,对于一些较重要的应用程序,可以适时地提供较快速的数据存取方法与格式,以平衡多个用户在需求上的冲突。

上述七个方面构成了数据库系统的主要特征。这个阶段的程序和数据间的联系可用下图表示: 2.1.3 数据库技术

从文件系统发展到数据库系统是信息处理领域的一个重大变化。在文件系统阶段,人们关注的中心问题是系统功能的设计,因而程序设计处于主导地位,数据只起着服从程序需要的作用。在数据库方式下,信息处理观念已为新体系所取代,数据占据了中心位置。数据结构的设计成为信息系统首先关心的问题,而利用这些数据的应用程序设计则退居到以既定的数据结构为基础的外围地位。

目前世界上已有数百万个数据库系统在运行,其应用已经深入到人类社会生活的各个领域,从企业管理、银行业务、资源分配、经济预测一直到信息检索、档案管理、普查统计等。并在通信网络基础上,建立了许多国际性的联机检索系统。我国20世纪90年代初在全国范围内装备了12个以数据库技术为基础的大型计算机系统,这些系分布在邮电、计委、银行、电力、铁路、气象、民航、情报、公安、军事、航天和财税等行业。

数据库技术还在不断的发展,并且不断地与其它计算机技术相互渗透。数据库技术与网络通信技术相结合,产生了分布式数据库系统。数据库技术与面向对象技术相结合,产生了面向对象数据库系统。

在数据库技术中有四个名词,其概念应该分清。

(1)数据库(database,DB):DB是统一管理的相关数据的集合。DB能为各种用户共享,具有最小冗余度,数据间联系密切,而又有较高的数据独立性。

(2)数据库管理系统(Database Management System,DBMS):DBMS是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型和面向对象型DBMS。

(3)数据库系统(Database System,DBS):DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源组成的系统,即采用了数据库技术的计算机系统。 (4)数据库技术:这是一门研究数据库的结构、存储、管理和使用的软件学科。数据库技术是操作系统的文件系统基础上发展起来的。而DBMS本身要在操作系统的支持下才能工作。数据库不仅用到数据结构的知识,而且丰富了数据结构的内容。在关系数据库中要用到集合论、数理逻辑的理论。因此,数据库技术是一门综合性较强的学科。 §2.2数据库理论基础 2.2.1 数据库模型

从20世纪50年代中期开始,计算机的应用由科学研究部门逐步扩展到企业、行政部门。至60年代,数据处理成为计算机的主要应用。数据库技术作为数据管理技术,是计算机软件领域的一个重要分支,产生于60年代末。现已形成相当规模的理论体系和实用技术。

模型是对现实世界的抽象。在数据库技术中,我们用模型的概念描述数据库的结构与语义,对现实世界进行抽象,表示实体类型及实体间联系的模型称为“数据模型” 。 目前广泛作用的数据模型可分为两种类型。

一种是独立于计算机系统的模型,完全不涉及信息在系统中的表示,只是用来描述某个特定组织所关心的信息结构,这类模型称为“概念数据模型” 。要领模型用于建立信息世界的数据模型,强调其语义表达功能,应该概念简单、清晰,易于用户理解,它是现实世界的第一层抽象,是用户和数据库设计人员之间进行交流的工具。这一其中著名的模型是“实体联系模型” 。 另一种数据模型是直接面向数据库的逻辑结构,它是现实世界的第二层抽象。 这类模型涉及到计算机系统和数据库管理系统,又称为“结构数据模型” 。例如,层次、网状、关系、面向对象等模型。这类模型有严格的形式化定义,以便于在计算机系统中实现。

(1)层次模型。用树型结构表示实体类型及实体间联系的数据模型。树的结点是记录类型,每个非根结点有且只有一个父结点。上一层记录类型和下一层记录类型间联系是1∶N联系。 层次模型的特点是记录之间的联系通过指针实现,查询效率较高。但层次模型有两个缺点:一是只能表示1∶N联系,虽然有多种辅助手段实现了M∶N联系,但都较复杂,用户不易掌握,二是由于树型结构层次顺序的严格和复杂,引起数据的查询和更新操作也很复杂,因此,编写应用程序也很复杂。

(2)网状模型。用有向图结构表示实体类型及实体间联系的数据模型。。1969年DBTG报告提出的数据模型是网状模型的主要代表。有向图中的结点是记录类型,有向边表示从箭尾一端的记录类型到箭头一端的记录类型间联系是1∶N联系。

网状模型的特点:记录之间联系通过指针实现,M∶N联系也容易实现(每个M∶N联系可拆成两个1∶N联系),查询效率较高。网状模型的缺点是编写应用程序比较复杂,程序员必须熟悉数据库的逻辑结构。由于层次系统和网状系统的应用程序编制比较复杂,因此,从20世纪80年代中期起,其市场已被关系系统所取代。但是使用这两种模型建立起的许多数据库仍然在正常运转,只是在外层加了个关系数据库语言的接口。网状模型有许多成功的产品,20世纪70年代的产品大部分网状系统,例如,Honeywell公司的IDS/Ⅱ、HP公司的IMAGE/3000、Burroughs公司的DMSⅡ、Umivac公司的DMS1100、Cullinet公司的IDMS、Cimcom公司的TOTAL等

(3)关系模型。关系模型的主要是用二维表格结构表达实体集,用外键表示实体间联系。关系模型是由若干个关系模式组成的集合。关系模式相当于前面提到的记录类型,它的实例称为关系,每个关系实际上是一张二维表格。

关系模型和层次、网状模型的最大判别是用关键码而不是用指针导航数据,表格简单用户易懂,编程时并不涉及存储结构,访问技术等细节。关系模型是数学化模型。SQL语言是关系数据库的标准化语言,已得到了广泛的应用。20世纪70年代对关系数据库的研究主要集中在理论和实验系统的开发方面。80年代初才形成产品,但很快得到广泛的应用和普及,并最终取代了层次、网状数据库产品。现在市场上典型的关系DBMS产品有DB

2、ORACLE、SYBASE、INFORMIX和微机型产品Foxpro、Acce等。

关系模型和网状、层次模型的最大区别是:关系模型用表格数据而不是通过指针链来表示和实现实体间联系。关系模型的数据结构简单、易懂。只需用简单的查询语句就可对数据库进行操作。 关系模型是数学化的模型,可把表格看成一个集合,因此集合论、数理逻辑等知识可引入到关系模型中来。关系模型已是一个成熟的有前途的模型,已得到广泛应用。

(4)面向对象模型。目前,关系数据库的使用已相当普遍,但是,现实世界中仍然存在着许多含有复杂数据结构的应用领域,例如,CAD数据、图形数据等,而关系模型在这方面的处理能力就显得力不从心。因此,人们需要更高级的数据库技术来表达这类信息。面向对象的概念最早出现在程序设计语言中,随后迅速渗透到计算机领域的每一个分支。面向对象数据库是面向对象概念与数据库技术相结合的产物。

面向对象模型能完整地描述现实世界的数据结构,具有丰富的表达能力,但模型相对较复杂,涉及的知识面也广,因此面向对象数据库尚未达到关系数据库那样的普及程度。

2.2.2 数据库体系结构

数据库的体系结构分三级:内部级(internal),概念级(conceptual)和外部级(external)。这个三级结构有时也称为“三级模式结构”,或“数据抽象的三个级别”,最早是在1971年通过的DBTG报告中提出,后来收入在1975年的美国ANSI/SPARC报告中。虽然现在DBMS的产品多种多样,在不同的操作系统支持下工作,但是大多数系统在总的体系结构上都具有三级模式的结构特征。从某个角度看到的数据特性称为“数据视图”(data view)。

外部级最接近用户,是单个用户所能看到的数据特性。单个用户使用的数据视图的描述称为“外模式”。

概念级涉及到所有用户的数据定义,是全局的数据视图。全局数据视图的描述称为“概念模式”。 内部级最接近于物理存储设备,涉及到实际数据存储的结构。物理存储数据视图的描述称为“内模式”。

数据库的三级模式结构是数据的三个抽象级别。它把数据的具体组织留给DBMS去做,用户只要抽象地处理数据,而不必关心数据在计算机中的表示和存储,这样就减轻了用户使用系统的负担。 三级结构之间往往差别很大,为了实现这三个抽象级别的联系和转换,DBMS在三级结构之间提供两个层次的映象(mappings):外模式/模式映象,模式/内模式映象。此处模式是概念模式的简称。

2.2.3 数据的独立性

由于数据库系统采用三级模式结构,因此系统具有数据独立性的特点。在数据库技术中,数据独立性是指应用程序和数据之间相互独立,不受影响。数据独立性分成物理数据独立性和逻辑数据独立性两级。 (1)物理数据独立性

如果数据库的内模式要进行修改,即数据库的存储设备和存储方法有所变化,那么模式/内模式映象也要进行相当的修改,使概念模式尽可能保持不变。也就是对内模式的修改尽量不影响概念模式,当然,对于外模式和应用程序的影响更小,这样,我们称数据库达到了物理数据独立性。 (2)逻辑数据独立性

如果数据库的概念模式要进行修改,譬如增加记录类型或增加数据项,那么外模式/模式映象也要进行相应的修改,使外模式尽可能保持不变。也就是对概念模式的修改尽量不影响外模式和应用程序,这样,我们称数据库达到了逻辑数据独立性。

现有关系系统产品均提供了较高的物理独立性,而对逻辑独立性的支持尚有欠缺,例如,对外模式的数据更新受到限制等。 2.2.4 范式

建立起一个良好的数据指标体系,是建立数据结构和数据库的最重要的一环。一个良好的数据指标体系是建立DB的必要条件,但不是充分条件。我们完全可以认为所建指标体系中的一个指标类就是关系数据库中的一个基本表,而这个指标类下面的一个个具体指标就是这个基本表中的一个字段。但如果直接按照这种方式建库显然还不能算最佳。对于指标体系中数据的结构在建库前还必须进行规范化的重新组织。

在数据的规范化表达中,一般将一组相互关联的数据称为一个关系(relation),而在这个关系下的每个数据指标项则被称为数据元素(data element),这种关系落实到具体数据库上就是基本表,而数据元素就是基本表中的一个字段(field)。规范化表达还规定在每一个基本表中必须定义一个数据元素为关键字(key),它可以唯一地标识出该表中其它相关的数据元素。在规范化理论中表是二维的,它有如下四个性质:

在表中的任意一列上,数据项应属于同一个属性(如图中每一列都存放着不同合同记录的同一属性数据)。

表中所有行都是不相同的,不允许有重复组项出现(如图中每一行都是一个不同的合同记录)。 在表中,行的顺序无关紧要(如图中每行存的都是合同记录,至于先放哪一个合同都没关系)。 在表中,列的顺序无关紧要,但不能重复(如图中合同号和合同名谁先谁后都没关系,但二者不可重复或同名)。

在对表的形式进行了规范化定义后,数据结构还有五种规范化定义,定名为规范化模式,称为范式。在这五种范式中,一般只用前三种,对于常用系统就足够了。而且这五种范式是“向上兼容”的,即满足第五范式的数据结构自动满足

一、

二、

三、四范式,满足第四范式的数据结构自动满足第

一、

二、三范式,„„,依此类推。

第一范式(first normal form,简称1st NF)就是指在同一表中没有重复项出现,如果有则应将重复项去掉。这个去掉重复项的过程就称之为规范化处理。在本文所讨论的开发方法里,1st NF实际上是没有什么意义的。因为我们按规范化建立的指标体系和表的过程都自动保证了所有表都满足1st NF。

第二范式(second normal form,简称 2nd NF)是指每个表必须有一个(而且仅一个)数据元素为主关键字(primary key),其它数据元素与主关键字一一对应。例如,在图l9.7中如果我们将合同号定义为主关键字(其它数据元素中的记录数据都有可能重名,故不能作为主关键字),故只要知道了一个合同记录的合同号,就可以唯一地在同一行中找到该合同的任何一项具体信息。通常我们称这种关系为函数依赖(functional depEndence)关系。即表中其它数据元素都依赖于主关键字,或称该数据元素唯一地被主关键字所标识。

第三范式(third normal form,简称 3rd NF)就是指表中的所有数据元素不但要能够唯一地被主关键字所标识,而且它们之间还必须相互独立,不存在其它的函数关系。也就是说对于一个满足了 2nd NF的数据结构来说,表中有可能存在某些数据元素依赖于其它非关键宇数据元素的现象,必须加以消除。

为防止数据库出现更新异常、插入异常、删除异常、数据冗余太大等现象,关系型数据库要尽量按关系规范化要求进行数据库设计。

§2.3 SQL语言基础 2.3.1 SQL简介

用户对数据库的使用,是通过数据库管理系统提供的语言来实现的。不同的数据库管理系统提供不同的数据库语言。关系数据库管理系统几乎都提供关系数据库标准语言——SQL。

SQL 的全称是Structured Query Language,即结构化查询语言。SQL语句可以从关系数据库中获得数据,也可以建立数据库、增加数据、修改数据。1986年ANSI采用SQL语言作为关系数据库系统的标准语言,后被国际化标准组织(ISO)采纳为国际标准。SQL语言使用方便、功能丰富、简洁易学,是操作数据库的工业标准语言,得到广泛地应用。例如关系数据库产品DB

2、ORACLE等都实现了SQL语言。同时,其它数据库产品厂家也纷纷推出各自的支持SQL的软件或者与SQL的接口软件。这样SQL语言很快被整个计算机界认可。

SQL语言是一种非过程化语言,它一次处理一个记录集合,对数据提供自动导航。SQL语言允许用户在高层的数据结构上工作,而不对单个记录进行操作。SQL语言不要求用户指定数据的存取方法,而是使用查询优化器,由系统决定对指定数据存取的最快速手段。当设计者在关系表上定义了索引时,系统会自动利用索引进行快速检索,用户不需知道表上是否有索引或者有什么类型的索引等细节。

SQL语言可以完成许多功能,例如: ● 查询数据

● 在数据库表格中插入、修改和删除记录 ● 建立、修改和删除数据对象 ● 控制对数据和数据对象的存取 ● 确保数据库的一致性和完整性等 2.3.2 SQL查询

数据查询是关系运算理论在SQL语言中的主要体现,SELECT 语句是SQL查询的基本语句,当我们在对一个数据库进各种各样的操作时,使用的最多的就是数据查询,在以SQL为基础的关系数据库中,使用的最多的就是SELECT查询语句。 SELECT语句的完整句法如下: SELECT 目标表的列名或列表达式序列 FROM 基本表和(或)视图序列 [WHERE 行条件表达式] [GROUP BY 列名序列] [HAVING 组条件表达式] [ORDER BY列名 [ASC│DEAC]„]

我在SELECT语句中还使用了大量的保留字和通配符以进行各种各样的条件查询。在系统中有大量的查询按钮,其使用了大量的查询语句,而且这些查询语句大部分使用的是模糊查询,所以大量的使用了模式匹配符LIKE(判断值是否与指定的字符通配格式相符)。在包含LIKE的查询语句中可以使用两个通配符:%(百分号):与零个或多个字符组成的字符串匹配;_(下划线):与单个字符匹配。系统中的条件判断往往包含多个条件,这时就需要使用逻辑运算符NOT、AND、OR(用于多条件的逻辑连接),谓词ALL以及保留字DISTINCT等等。做为SELECT语句还有很多的使用方法,这里就不再叙述。 2.3.3 SQL数据更新

使用数据库的目的是为了有效地管理数据,而数据的插入、删除和修改则是必不可少的一个功能。在本系统中就大量地使用了数据插入、删除和修改这三种操作,现做一个简单地介绍。 ●数据插入

往数据库的基本表中插入数据使用的是INSERT语句,其方式有两种:一种是元组值的插入,另一种是查询结果的插入。在本系统中使用的是前一种方式,其句法如下: INSERT INTO 基本表名(列表名)VALUES(元组值) ●数据删除

往数据库的基本表中删除数据使用的是DELETE语句,其句法如下: DELETE FROM 基本表名 [WHERE 条件表达式] 在些作一点说明,删除语句实际上是“SELECT * FROM 基本表名 [WHERE 条件表达式]”和DELETE操作的结合,每找到一个元组,就把它删除。此外,DELETE语句只能从一个基本表中删除元组,WHERE子句中条件可以嵌套,也可以是来自几个基本表的复合条件。 ●数据修改

当需要修改基本表中元组的某些列值时,可以用UPDATE语句实现,其句法如下: UPDATE基本表名

SET列名=值表达式[,列名=值表达式„] [WHERE条件表达式] 在Delphi中使用SQL语句是很方便的,一般来说,都是通过TQuery组件来使用SQL语言的。有一点要进行说明,虽然通过TQuery组件来使用SQL语言很方便,但考虑到自己对不同组件的理解程度、个人习惯以及其它各个方面,在本系统中我采用的是ADO组件来对数据库进行操作。最简单的方法比如在TADOQuery组件的SQL属性中就可以键入SQL语句,至于详细的使用方法在后面进行介绍。

第三章 数据库开发工具 §3.1 Delphi 6.0 简介

Delphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了。 凡是做过程序开发的人都知道从来没有单纯的数据应用程序,也就是说,数据库应用程序必须和用户界面(可以是图形界面,也可以是命令接口)元素相结合,只讲界面或只讲数据库本身都构不成数据库应用程序,因而用Delphi 6.0开发数据库应用程序就隐含着界面开发。Delphi6中的VCL组件可用图3-1来说明。组件在Delphi程序的开发中是最显眼的角色。大家知道,在编写程序时一般都开始于在组件面板上选择组件并定义组件间的相互作用。但也有一些组件不在组件面板上,例如Tform和Tapplication(典型的非可视组件)。组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事件和Publish属性。

窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额。在实际编程中,窗口组件类的对象都有句柄,可以接受输入焦点和包含其它组件。

图形组件与窗口组件并列,是另一大类组件。图形组件不是基于窗口的,因而不能有窗口句柄,不能接受输入焦点和包含其它组件。从图8-43中可以看出,图形组件的基类是TgraphicControl,在实际编程中,它们必须寄生于它们的宿主——窗口组件类的对象,由它们的拥有者负责其显示,而且它们还能触发一些和鼠标活动相关的事件。图形控件最典型的例子是Tlabel和TspeedButton。由此可以看出图形组件的功能很弱,有读者会问图形组件的用处何在呢?其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少。在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗。

非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件)。 §3.2 Delphi 6.0 控件

用Delphi6开发数据库应用,重点是和各种数据库组件打交道,当然也要使用其它的一些组件,现在就我在系统设计中所使用的重要组件给与简单介绍。 3.2.1 ADO数据访问组件

ADO数据对象(Active Data Objects)实际是一种提供访问各种数据类型的链接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口中,可以使用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Acce等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。ADO使您的客户端应用程序能够通过OLE DB提供访问和操作在数据库服务器中的数据。ADO支持用于建立C/S和Web的应用程序的主要功能。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO同时具有远程数据服务(RDS)功能,通过RDS可以在一次往返过程中实现将数据从服务器移动到客户端应用程序和Web页、在客户端对数据进行处然后将更新结果返回服务器的操作。

Delphi 6.0继续对Microsoft的ADO访问能力的支持。这种能力是通过一组新组件实现的,这些组件是在企业版的ADO组件页中,在组件面版的ADO页上可以找到这些组件。利用在前面章节提到的TdataSet抽象类,ADO组件可以不通过BDE而直接实现ADO连接。这意味着只需要很少的代码就可以实现该连接并且性能得到提高。

利用ADO数据访问组件,可以只使用ADO结构与数据库取得联系并对其中的数据进行操作,而在这些过程中完全不需要使用BDE。大多数的ADO连接和数据集组件都是与基于BDE的连接和数据集组件相类似的。TADOConnection组件与基于BDE的应用程序中的Tdatabase组件类似。TADOTable与Ttable,TADOQuery与Tquery,以及TADOStoreProc和TstoredProc之间都具有这种类似的对应关系。使用这些ADO组件的方式与我们常使用的数据访问组件(基于BDE)都有许多相同之处。TTADODataSet没有直接的BDE对应组件,但它提供了许多与Ttable和Tquery相同的功能。同样,TADOCommand也没有相对应的BDE组件,它是在Delphi/ADO环境中完成特定功能的组件。Delphi 6.0通过ADO数据集访问组件,可以不借助BDE数据引擎而是通过微软的OLEDB来访问更为广泛的数据库中的数据。ADO数据集访问组件与常用的数据访问组件是并列的关系。

在系统中我主要使用的是ADOTablet和ADOQuery两个组件。 3.2.2 数据控制类DataControl 数据控制类负责数据库数据的显示,并把用户对数据的修改传回。这里的绝大多数组件,如DBText, DBEdit, DBMemo, DBImage, DBListBox, DBComboBox, DBCheckBox, DBRadioGroup, DBLookupListBox, DBLookupCombox, DBCtrGrid的功能和对应的非数据感知组件相同,如TEdit框,TRadioGroups单选按钮组等,只不过在显示数据库数据时要用而已。 在系统中主要使用数据网格控件DBGrid和数据库导航器控件DBNavigator。 3.2.3 数据访问类DataAcce 数据库应用系统中数据访问是一个首要问题,包括单用户和 C/S系统,都必须联系一些数据库和数据表文件。Delphi 6 提供了专门用于数据访问的基类控件。主要包括数据源控件DataSource、客户数据集控件ClientDataSet、数据集提供器控件DataSetProvider等等。

Tdatabase:当一个基于BDE的数据库应用程序需要一个永久数据库连接时,需要定制向一个数据库服务器的连接时,需要事务控制和特殊的数据库别名时就得用到Tdatabase对象。特别是当连接到一个远程的SQL数据库服务器时,如果要利用BDE进行数据库事务处理,那么,TDatabase对象的威力就体现出来了。在一个应用程序中为每一个数据库连接显示的声明Tdatabase对象要根据需要而定,不是必需的。对一个数据库连接,如果没有显示的声明并实例化TDatabase对象,系统就会产生一个带有默认属性的TDatabase对象。

TdataSource对象用于在DataSet对象(包括Tquery,TstoredProc,Ttable等)和数据感知组件之间提供一个连接的纽带,以便在窗体上显示数据库中的数据,在数据库中导航定位与编辑数据集中的数据。如果一个DataSet对象中的数据想在数据感知组件中显示和修改,它就必须和TdataSource对象相联系。同样,一个数据感知组件如果想和数据源相联系以便显示和操纵数据,就必须以TDataSource对象为中介。

用Delphi6作数据库应用开发概括来说如下:先利用数据存取组件和实际的数据库建立连接,并用Tseion对象和Tdatabase对象管理这些连接。然后以Tdatasource对象为中介,用数据感知组件向用户显示数据库的内容并接受用户的查询和修改等操作。 3.2.4 SQL语言在Delphi中的应用

在Delphi中使用SQL语言非常方便,一般来说,都是通过Tquery组件来使用SQL语言的。可以在TQuery组件的SQL属性中设置SQL语句。设计程序时,在该组件的属性对话框中选择SQL属性,单击带省略号的按钮,就可以打开String List Editor对话框,然后我们就可以在对话框中添加SQL语句。还可以使用Delphi的SQL Builder来自动生成SQL语句,这样可以避免手工编写SQL而可能造成的语法错误。

静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量。

动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,例如下面的语句是一条动态SQL语句:

Select * From Students Where StudentCode =: StudentCode; 其中的变量StudentCode便是一个参数变量,它由一个冒号引导,在程序运行过程中,必须要为该参数赋值,该条SQL语句才能正确执行,每次运行应用程序时可以为该参数变量赋予不同的值。为参数赋值有三种方法:

①根据参数在SQL语句中出现的顺序,设置TQuery部件的Params属性值为参数赋值。 ②直接根据SQL语句中各参数的名字,调用ParamByName方法来为各参数赋值。

③将TQuery部件的DataSource属性设置为另一个数据源,这样将另一个数据源中与当前TQuery部件的SQL语句中的参数名相匹配的字段值赋给其对应的参数。利用这种方法也能实现所谓的连接查询,创建主要—明细型数据库应用。

在程序运行过程中,要想设置TQuery部件的SQL属性,必须首先调用Close方法,关闭TQuery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句, 最后再调用Add方法为SQL属性设置新的SQL命令语句。例如: Query1.Close {关闭Query1) Query1.SQL.Clear {清除SQL属性中的SQL命令语句} Query1.SQL.Add(„Select * From Students„); Query1.SQL.Add(„ Where Name =\"Lucy\" „);

在为TQuery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面, 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。 在这里要特别注意的,一般情况下TQuery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。

在为TQuery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。

在设计过程中,设置完TQuery部件的SQL属性之后将其Active属性的值置为True, 这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。

在应用程序运行过程中,通过程序调用TQuery部件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方法是不一样的。Open方法只能用来执行SQL语言的查询语句(Select命令), 并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT, UPDATE, DELETE等命令),例如: Query1.Open (这样会返回一个查询结果集) 如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL 方法来代替Open方法。如:

Query1.ExecSQL (没有返回结果) 当然在设计应用程序时,程序设计人员是无法确定TQuery部件中的SQL 语句是否会返回一个查询结果的。对于这种情况应当用Try…Except模块来设计程序。在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。

Delphi中用ADOQuery来使用SQL语句同样十分方便。在ADOQuery组件中首先通过ConnectionString属性值来联接数据源,然后就通过双击SQL…属性值来写入SQL语句。在Delphi中调用数据库,就可以调用ADOQuery组件,通过修改其中的SQL…属性中的SQL语句来实现对数据库的各项操作。

值得注意的是,ADOQuery组件只有在激活的情况下才可以被正确地使用,这样就提出了一个问题,也就是说,在每次修改ADOQuery组件的SQL…属性时都必须先行进行关闭,待清除掉SQL…中所有的SQL语句后才可以添加新的SQL语句。而且,在每一次修改完成以后,还应该记得重新将ADOQuery激活。其它的使用方法与TTQuery有许多的相似之处。 §3.3 Acce 简介

建立一个数据库我们有多种选择,现在市场上有各种各样的数据库,而且每一种数据库都有其自身的特点,不能说哪一种更好,只能在其中寻找一种能更好地适应系统需求、更好地满足用户的要求以及适应开发人员的习惯。在本系统中,做为图书仓库管理系统是一个比较小的应用系统,它所产生和处理的数据量也比较小。因此,没有必要使用像SQL Server和Oracle这样的大型数据库。我首先想到的数据库是Borland公司的Paradox数据库。另外,Microsoft Office中的Acce数据库在计算机上的应用比较普及,是开发小型数据库系统的比较理想的选择,所以,在本系统中我选择了Acce数据库。

Acce做为一个数据库管理系统,它被集成在Microsoft Office中。Acce数据库处理的基本结构,采取关系型数据库模式。与其他的数据库系统相比,Acce更加简单易学,一个普通的计算机用户可以很快地掌握它。Acce 2000的功能十分强大,利用它可以方便地实现对信息保存、维护、查询、统计、打印、交流、发布,而且它可以十分方便地与Office其他组件交流数据,这些功能对一个一般用户而言已经足够了。 第四章 系统总体设计

软件系统的总体设计大约要经历可行性分析和项目开发计划,需求分析,概要设计,详细设计,编码,测试以及维护等七个阶段。可行性分析和项目开发计划在前面已经叙述,下面所要做的是进行软件需求分析,概要设计和详细设计。编码过程将在下一节论述,而测试和维护过程不在本文叙及。

§4.1 系统需求分析

在经过前一阶段的分析之后,我确定了我的开发课题为图书仓库管理。现在所要做的是要准确定义系统必须做什么以及系统必须具备的功能。

软件需求分析中我采用结构化分析方法(Structured Analysis,简称SA),SA是面向数据流进行需求分析的方法,像所有的软件分析方法(如面向对象分析方法、IDEF方法等等)一样,SA也是一种建模活动,它使用简单易读的符号,根据软件内部数据传递、变换的关系,自顶向下逐层分解,描绘满足功能要求的软件模型。

在系统中我采用数据流图(DFD)这种半形式化的描述方式表达需求。它是一种功能模型,以图形的方式描绘数据在系统中流动和处理的过程,只反映系统必须完成的逻辑功能。它有四种基本图形符号:

◆ →:箭头,表示数据流; ◆ 〇:圆或椭圆,表示加工; ◆ ═:双杠,表示数据存储;

◆ □:方框,表示数据的源点或终点。

为了表达较为复杂问题的数据处理过程,用一张数据流图是不够的,要按照问题的层次结构进行逐步分解,并以一套分层的数据流图反映这种结构关系。在这里我一共使用了三层数据流图,即顶层图,0层图和1层图(也是底层图)。

在多层数据流图中,顶层流图仅包含一个加工,它代表被开发系统,它的输入流是该系统的输入数据了,输出流是该系统的输出数据;底层流图是指其加工不需要再做分解的数据流图,中间层流图表示对其上层父图的细化,它的每一步加工可能继续细化成子图。 经过对系统的分析首先得到系统的顶层DFD,如下: 一步细化得到系统的0层DFD,如下:

再进一步细化每一个数据加工功能,得到系统的1层DFD图。

在这里只给出有关入库管理和出库管理的1层数据流图,它们是系统的关鍵部分,也是主要的部分。通过以上对数据流图的分析之后,我们已大体地了解了系统的功能和目标,接下来所要做的就是系统功能模块的划分和数据库的设计,也就是系统的概要设计。 §4.2 系统概要设计 在软件需求分析阶段,搞清楚了软件“做什么”的问题,形成了目标系统的逻辑模型。现在我们所要做的就是要把软件“做什么”的逻辑模型变换为“怎么做”的物理模型,即着手实现软件的需求。首先,我们需要描述的是系统的总的体系结构。 4.2.1 系统结构设计

系统的概要设计中最重要的就是系统的模块化。模块化是指解决一个复杂问题时自项向下逐层把软件系统划分成若干个模块的过程。每个模块完成一个特定的功能,所有的模块按某种方法组织起来,成为一个整体,完成整个系统所要求的功能。

将系统划分为多个模块是为了降低软件系统的复杂性,提高可读性、可维护性,但模块的划分不能是任意的,应尽量保持其独立性。也就是说,每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单,即尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。

在系统的概要设计中我采用结构化设计(Structure Design,简称SD),SD以需求分析阶段产生的数据流图DFD为基础,按一定的步骤映射成软件结构。我首先将整个系统化分为几个小问题,小模块,在系统中,我设计了用户管理、库存管理、入库管理、出库管理、员工管理和供应商管理6个小模块。然后,进一步细分模块,添加细节。比如,用户管理我又将其分为用户注册、用户注销、密码修改;库存管理分为库存记录查询、库存记录修改、库存记录打印等等。 以下就是系统的结构图:(在这里为了表达方便我将结构图分开来表达。)

在得到系统的第一层功能模块图后,经过进一步地细化,得一系统的子功能模块图: 4.2.2 数据库设计

在信息世界中,信息从客观事物出发流经数据库,通过决策机构最后又回到客观世界,信息的这一循环经历了三个领域:信息世界,数据世界,现实世界。现实世界的事物反映到人的头脑中,人的大脑对它有个认识过程,经过分析(选择、命名、分类等)进入信息世界。这些信息再进一步加工、编码,然后进数据世界,而软件系统的开发工作需要考虑这两个方面的问题,也就是要考虑系统开发所需要的数据,以及如何对这些数据进行操作。这两个问题贯穿了整个软件系统的开发过程,这也就是数据库的设计问题,软件设计的一个核心。 4.2.2.1 ER图设计

在系统设计的开始,我首先考虑的是如何用数据模型来数据库的结构与语义,以对现实世界进行抽象。目前广泛使用的数据模型可分为两种类型,一种是独立于计算机系统的“概念数据模型”,如“实体联系模型”;另一种是直接面向数据库逻辑结构的“结构数据模型”。在本系统中我采用“实体联系模型”(ER模型)来描述数据库的结构与语义,以对现实世界进行第一次抽象。ER模型直接从现实世界抽象出实体类型及实体间联系,然后用ER图来表示数据模型。它有两个明显的优点:接近于人的思维,容易理解;与计算机无关,用户容易接受。但ER模型只能说明实体间语义的联系,不能进一步说明详细的数据结构,它只是数据库设计的第一步。 ER图是直观表示概念模型的工具,它有四个基本成分: ◆ 矩形框,表示实体类型(考虑问题的对象)。 ◆ 菱形框,表示联系类型(实体间的联系)。

◆ 椭圆形框,表示实体类型和联系类型的属性。对于关键码的属性,在属性名下划一横线。 ◆直线,联系类型与其涉及的实体类型之间以直线连接。

本系统为图书仓库管理,主要管理图书的入库、出库以及库存等事项。仓库根据需要可以查询图书供应商的信息,同时还需要了解在入库和出库中员工的参与情况。依据仓库管理的实际情况,考虑了多方面的因素以后,确定系统的ER图如下:

(为了表达的方便,在这里我没有在一张图上表达出所有的关系,而是用一张总体ER图,和几张实体属性关系图来表达数据库的结构。)

在该数据库中,我设计了三个实体,分别是库存、员工和供应商以及两个联系类型入库和出库。在本系统中库存是核心,也是基本,没有了库存其它的也就没有什么意义了。员工记录的添加是考虑到责任问题,也就是说,在仓库管理的实际运用中,出现了责任不清的现象,特别是由于仓库的进出图书数量都比较大时产生了一系列问题,所以在设计数据库时,我特别考虑到这一点,加入了员工记录这一实体。供应商信息的添加主要出于对图书来源问题的思考。通过添加供应商信息可以比较清楚地了解图书的进货渠道,从图书的质量到供应商的信誉都可以进行了解,同时可以为以后的图书进购提供一定有用的信息。

入库联系类型将库存信息、供应商信息和员工信息联系在一起,可以方便地实现三个实体之间的联接,而出库联系类型则将库存信息和员工信息较好地联接起,同时这两个联系类型又都具有各自特有的属性。

下面就是各实体及联系类型的属性图:(带#号的属性为关键字段)4.2.2.2 数据库表格设计 在完成系统的ER图之后,需要将ER模型转化为关系模型,也就是说,要设计出数据库所需要的表格。在这里,我选用的是关系数据库。因为关系数据库中的二维表格可以很清楚地描述数据之间的联系。

在这里不得不提到一个概念——范式。其实在上一节的ER图设计中,已经运用了范式的思想,不仅如此,在数据库的表格设计中更离不开范式的思想,它是数据库设计的基础,如果不注意这个问题将会导致一系列问题的出现。

我在系统中定义的表格都严格地按照范式的思想和要求去完成,数据库中的所有表格都达到了三范式的要求。根据系统ER图,针对本系统的特点,在对所搜集的数据进行规范化之后,定义了如下六张表格,分别是库存信息表,入库信息表,出库信息表,员工信息表,供应商信息表和密码信息表。通过对这六张表格的操作可以较好地完成系统设计的各项功能,六张表格之间有着不同程度的联系。(说明:在以下数据表中,K代表主键,#代表外键,字段值不为空。) BookRecord 表(库存信息表)

字段名称 数据类型 说明 K BookID 数字 图书编号 BookName 文本 图书名 Author 文本 作者 Publisher 文本 出版社 PubDate 日期/时间 出版日期 Price 货币 价格 BookType 文本 图书类型 Number1 数字 库存数量 Addation 文本 备注 图4.13 库存信息表

库存信息表主要用于记录仓库中现存放的所有图书的详细信息,包括图书编号、书名、作者、出版社、图书类型等有关图书的各类信息,它即是该数据库的主表,也是系统主界面的主要内容。 在该表中图书编号是主键,它按图书入库的先后次序来编写,每当有图书入库,系统自动给出图书编号,这样我们按图书编号来查找图书是比较方便的。考虑到编号比较难于记忆,所以使用了出版社和图书类型两个字段,在系统中我提供了出版社和图书类型的分类查找,而且全部采用自动生成,每当系统中有新的出版社类型和图书类型,弹出菜单会自动添中新类型,这样就可以比较方便地实现按出版社和按图书类型查找。此外,库存数量也是一个比较关键的字段,该字段是在系统初始化时就给定的,每当有图书入库或出库操作,系统就会自动修改图书的库存数量,以保持数据的一致性。做为备注有一点说明,我的数据库中备注的数据类型是文本,而不是备注类型,主要考虑到该字段的长度并不大,而且在Delphi中文本数据类型的处理也比较方便一点。 Employee 表(员工信息表)

字段名称 数据类型 说明 K EmployeeID 数字 员工编号 EmployeeName 文本 员工姓名 Sex 文本 性别

BornDate 日期/时间 出生日期 Grade 文本 职称

WorkDate 日期/时间 工作日期 Telephone 文本 联系电话 Addre 文本 联系地址

图4.14 员工信息表

员工信息表主要用于记录有关员工的各类信息,包括姓名、职称、出生日期、联系电话、联系地址等。它主要用来为系统提供员工的有关信息,因为在系统中,入库和出库操作均与员工有着一定的联系,在查询入库信息和出库信息时,有时需要查找有关此项记录有关的员工信息,在系统中我是通过入库记录与员工记录(出库记录和员工记录)之间的联接查询来完成的。另外,作为一个仓库也有必要了解其所属员工的一些基本情况,以便查询。 Shopkeeper 表(供应商信息表)

字段名称 数据类型 说明 K ShopkeeperID 数字 供应商编号 ShopkeeperName 文本 供应商姓名 Addre 文本 地址 PostNo 数字 邮编

OfficePhone 文本 办公电话 HomePhone 文本 住宅电话 Email 文本 E-mail PayType 文本 付款方式

图4.15 供应商信息表

供应商信息表主要用于记录有关供应商的各类信息,包括姓名、地址、电话、付款方式等。它主要用来为系统提供供应商的有关信息,在系统中入库记录是与供应商记录相联系的,通过入库记录可以查找相关的供应商信息。在供应商信息中,考虑当实际情况,我特别加入了Email和付款方式这两个字段,因为在当今信息世界中,多种多样的通讯方式和多种多样的付款方式是必然的,是数据库中必须与以记录。

InRecord 表(入库信息表)

字段名称 数据类型 说明 K InID 数字 入库编号 # BookID 数字 图书编号 # EmployeeID 数字 员工编号 # ShopkeeperID 数字 供应商编号 Number 数字 入库数量 BuyDate 日期/时间 入库日期

图4.16 入库信息表

OutRecord 表(出库信息表)

字段名称 数据类型 说明 K OutID 数字 出库编号 # BookID 数字 图书编号 # EmployeeID 数字 员工编号 Number2 数字 出库数量 OutDate 日期/时间 出库日期 图4.17 出库信息表

入库信息表主要用于记录有关入库的详细信息,包括入库数量、入库日期以及图书、员工、供应商三方的编号,以便查询。出库信息表主要用于记录有关出库的详细信息,包括出库数量、出库日期以及图书、员工的编号。出库信息表和入库信息表一样,其实它们都属于联系类型,系统通过这两个表可以联接上其它的表为用户提供多种条件的联接查询。值得提出的一点是入库记录和出库记录的添加不仅仅是单表操作,由于它们都与库存记录相联系,所以,无论您是添中入库记录还是添加出库记录,都必须同时修改库存记录,以保持数据的一致性,否则将引发系统出错而这些我都让其在系统中自动完成。无论您是添加入库记录,还是添加出库记录,系统都将自动修改库存中图书的数量,而且,在您出库的数量大于库存数量时,系统还会自动提示错误,这样就可以防止一定错误的发生。

在入库信息表和出库信息表中我还定义了几个外键,它提供了一种表示几个关系联系的方法。比如,系统中通过在入库信息表中定义的外键 BookID、EmployeeID和ShopkeeperID可以将库存信息表、员工信息表和供应商信息表联系在一起,从而方便地实现联接查询,而且,引入外键的定义是实体完整性约束的一个主要方面。 Key 表(密码信息表)

字段名称 数据类型 说明 K KeyName 文本 用户姓名 KeyNo 文本 用户密码 图4.18 密码信息表

密码信息表主要用于记录所有的用户名和用户密码。它是在用户登陆时用来确定用户和密码的正确性,以防止非法用户登陆。 通过以上设计已经完成了系统的概要设计,当我们有了系统的功能模块图和数据库之后,就需要着手去实现每一个模块,为每一个功能设计程序流程图,这也就是系统的详细设计。 §4.3 系统详细设计

在前面的概要设计中,已将系统划分为多个模块,并将它们按照一定的原则组装起来,同时确定了每个功能及模块之间的外部接口。现在所要做的就是确定每个模块具体执行过程,也可以说是“过程设计”。

在处理过程设计时我采用的是结构化程序设计(简称SP)方法。需要指出的是系统的详细设计并不是指具体的编程序,而是将概要设计阶段产生的系统功能模块图细化成很容易产生程序的图纸。因此详细设计的结果基本决定了最终程序的质量。为软件的质量,延长软件的生存期,软件的可测试性、可维护性提供重要的保障。详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易读。

由前一阶段产生的系统功能模块图,我为系统的主要部分设计了如下程序流程图:通过以上步骤,基本上完成了对整个系统的总体设计,接下来所要做的就是软件的编码工作。系统总体设计的好坏直接影响着下一步工作,只有在这一阶段设计出好的模块图和程序流程图,才能更有利于编码,产生好的软件系统。

第五章

系统应用程序设计 §5.1 系统窗体模块组成 §5.2 数据模块窗体的设置

在编写数据库应用程序时,经常要遇到这样的情况,即好多组件、窗体同时访问相同的数据源,如果为每一个组件或者窗体都设置一个数据源将是十分耗时的工件,而且要保证这些数据源的确是相同的也需花一番功夫。那么,能不能将这些数据源集中管理,最好是做成一个统一的模块,需要时就将该模块引入而不必直接操作数据源本身呢?数据模块(DataModule)是解决这个问题最好的答案。简单说来,数据模块是用来集中管理数据源的一个窗体,该窗体可被需要的地方随时引入。

图5.2给出了本程序的数据模块(datamoduleform)窗体图,除报表窗体外所有的数据存取组件和数据源组件都在此数据模块中进行了定义。值得一提的是,设置了数据库Database组件,该组件引入了系统所需的唯一的数据库tsxs,Database组件的DatabaseName属性设置为tsckgl。tsxs数据库已在ODBC配置程序中进行了设置。其他的数据存取组件都是基于此数据库组件创建的,这样做的好处是,当数据库的别名或者其他信息改变之后,只需修改Tdatabase组件的AliasName属性即可。

另外,在本系统的数据模块窗体图中,我大多采用的AODQuery组件而没有采用BDE组,这主要是基于对ADO组件的了解。在Delphi的学习中我对ADO组件了解的更加清楚,使用也较BDE更为熟练,而且,ADO组件的功能也较BDE更为强大,所以在这里大多采用ADO组件来进行数据库联接。同时我也使用了BDE组件中的Table,因为在某些时候BDE有着其自身特有的优越性。 主窗体功能模块的实现 file://主窗体程序代码

public

file://在程序的起始部分,定义快捷按钮点击事件 Procedure Popup1Handler(Sender:Tobject); Procedure Popup2Handler(Sender:TObject); ********************************************************************** procedure Tmainform.Popup1Handler(Sender: TObject); begin file://快捷按钮1(点“按出版社分类”按钮产生)的点击事件 with datamoduleform.MainQuery do

begin

file://打开数据模块窗体的MainQuery,对BookRecord表进行操作 close;

file://关闭MainQuery SQL.Clear;

file://清除SQL属性中的SQL命令语句

SQL.Add(„select * from BookRecord where Publisher=:Pub„); file://添加新的SQL语句 Parameters.ParamByName(„Pub„).Value:=(Sender as TMenuItem).Caption; open;

file://重新打开MainQuery end; end; ********************************************************************** procedure Tmainform.SpeedButton1Click(Sender: TObject); Var s1,s2,s3,s4,s5 :String;

file://设立5个变量以方便实现模糊查询 begin

file://主窗口库存查询按钮事件 with datamoduleform.MainQuery do begin close; SQL.Clear; SQL.Add(„select * from BookRecord„);

SQL.Add(„where BookID Like :BookID and BookName Like :Name and Author Like :Author and Publisher Like :pub and BookType Like :BookType„);

file://使用Like语句来实现模糊查询

if Edit1.Text„„ then s1:=„%„+Edit1.Text+„%„ else s1:=„%„;

Parameters.ParamByName(„BookID„).Value:=s1;

file://给变量s1赋值 if Edit2.Text„„ then s2:=„%„+Edit2.Text+„%„ else s2:=„%„;

Parameters.ParamByName(„Name„).Value:=s2;

file://给变量s2赋值 if Edit3.Text„„ then s3:=„%„+Edit3.Text+„%„ else s3:=„%„;

Parameters.ParamByName(„Author„).Value:=s3;

file://给变量s2赋值 if Edit4.Text„„ then s4:=„%„+Edit4.Text+„%„ else s4:=„%„;

Parameters.ParamByName(„Pub„).Value:=s4;

file://给变量s2赋值 if Edit5.Text „„ then s5:=„%„+Edit5.Text+„%„ else s5:=„%„;

Parameters.ParamByName(„BookType„).Value:=s5;

file://给变量s2赋值 open; if FieldValues[„BookID„]=NULL

file://判断是否找到记录 then begin Meagedlg(„没有找到你所需要的记录!„,mtInformation,[mbOK],0); Edit1.Text:=„„;Edit2.Text:=„„;Edit3.Text:=„„;Edit4.Text:=„„;Edit5.Text:=„„; close; SQL.Clear; SQL.Add(„select * from BookRecord„);

file://这里相当于一个刷新功能 open; end;end; end; ********************************************************************** procedure Tmainform.SpeedButton3Click(Sender: TObject); begin

file://库存表刷新按钮事件 with datamoduleform.MainQuery do begin close; SQL.Clear; SQL.Add(„select * from BookRecord„); open; end; end; ********************************************************************** procedure Tmainform.SpeedButton11Click(Sender: TObject); var PopupItem:TMenuItem; begin

file://自动生成快捷按钮1的内容 with datamoduleform.BookQuery do begin

file://从数据库中选择出版社类型 close; SQL.Clear; SQL.Add(„select distinct Publisher from BookRecord„); open; PopupMenu1:=TPopupMenu.Create(Self); file://自动生成快捷菜单 PopupMenu1.AutoHotkeys:=maManual; file://自定义热键 while Not Eof do begin

file://根据出版社内容生成菜单子项 PopupItem:=TMenuItem.Create(Self); PopupItem.Caption:=FieldByName(„Publisher„).AsString; PopupMenu1.Items.Add(PopupItem); PopupItem.onClick:=Popup1Handler;

file://确定菜单子项的点击事件 Next; end; end; PopupMenu1.Popup(384,67);

file://在指定位置显示快捷菜单1 end; ********************************************************************** procedure Tmainform.FormActivate(Sender: TObject); begin

file://系统初始化,在进入mainform时自动添加数据源 mainform.DBGrid1.DataSource:=datamoduleform.MainSource; mainform.DBNavigator1.DataSource:=datamoduleform.MainSource; mainform.DBGrid2.DataSource:=datamoduleform.EmpSource; mainform.DBNavigator2.DataSource:=datamoduleform.EmpSource; mainform.DBGrid3.DataSource:=datamoduleform.ShopSource; mainform.DBNavigator3.DataSource:=datamoduleform.ShopSource; mainform.DBGrid4.DataSource:=datamoduleform.InSource; mainform.DBNavigator4.DataSource:=datamoduleform.InSource; mainform.DBGrid5.DataSource:=datamoduleform.OutSource; mainform.DBNavigator5.DataSource:=datamoduleform.OutSource; end; ********************************************************************** procedure Tmainform.FormCreate(Sender: TObject); begin

file://系统初始化,定义界面大小,以适应不同分辩率 Width:=800;Height:=600; end; ********************************************************************** procedure Tmainform.Timer1Timer(Sender: TObject); begin

file://在状态栏显示时间

StatusBar1.Panels[2].Text:=DateToStr(Date); StatusBar1.Panels[4].Text:=TimeToStr(Time); end; §5.4 入库、出库窗体模块的实现

图5.4 系统入库管理窗体

图5.5 系统出库管理窗体

procedure Tinoutform.SpeedButton4Click(Sender: TObject); begin

file://入库管理查找按钮事件

with datamoduleform.BookQuery do file://入库查询处理

begin

close;

SQL.Clear;

SQL.Add(„select * from BookRecord where BookID=:BookID„);

Parameters.ParamByName(„BookID„).Value:=Edit13.Text;

open;

if FieldValues[„BookID„]NULL then begin

Edit1.Text:=„„;

Edit1.ReadOnly:=true;Edit1.Color:=clMenu;

Edit6.Text:=FieldValues[„BookName„]; file://显示图书名

Edit6.ReadOnly:=true;Edit6.Color:=clMenu; file://设置显示框不可更改属性

Edit7.Text:=FieldValues[„Author„];

Edit7.ReadOnly:=true;Edit7.Color:=clMenu;

Edit8.Text:=FieldValues[„Publisher„];

Edit8.ReadOnly:=true;Edit8.Color:=clMenu;

Edit9.Text:=FieldValues[„PubDate„];

Edit9.ReadOnly:=true;Edit9.Color:=clMenu;

Edit10.Text:=FieldValues[„Price„];

Edit10.ReadOnly:=true;Edit10.Color:=clMenu;

Edit11.Text:=FieldValues[„BookType„];

Edit11.ReadOnly:=true;Edit11.Color:=clMenu;

Edit12.Text:=FieldValues[„Number1„];

Edit12.ReadOnly:=true;Edit12.Color:=clMenu;

If FieldValues[„Addation„]NULL then Edit25.Text:=FieldValues[„Addation„]

else Edit25.Text:=„„;

Edit25.ReadOnly:=true;Edit25.Color:=clMenu;

end

else

begin file://在没有查找到的情况下,清空所有显示框

Edit1.ReadOnly:=false;Edit1.Text:=„„;Edit1.Color:=clMenu;

Edit6.ReadOnly:=false;Edit6.Text:=„„;Edit6.Color:=clMenu;

Edit7.ReadOnly:=false;Edit7.Text:=„„;Edit7.Color:=clMenu;

Edit8.ReadOnly:=false;Edit8.Text:=„„;Edit8.Color:=clMenu;

Edit9.ReadOnly:=false;Edit9.Text:=„„;Edit9.Color:=clMenu;

Edit10.ReadOnly:=false;Edit10.Text:=„„;Edit10.Color:=clMenu;

Edit11.ReadOnly:=false;Edit11.Text:=„„;Edit11.Color:=clMenu;

Edit12.ReadOnly:=false;Edit12.Text:=„„;Edit12.Color:=clMenu;

Edit25.ReadOnly:=false;Edit25.Text:=„„;Edit25.Color:=clMenu;

MeageDlg(„没有找到你所需要的记录!„,mtInformation,[mbOK],0);

Edit13.Text:=„„;Edit13.SetFocus;

end; end; with datamoduleform.InQuery do file://自动入库编号的获取

begin

close;

SQL.Clear;

SQL.Add(„select * from InRecord where InID>=All(select InID from InRecord)„);

open;

file://找到入库编号中最大的一个

Edit26.ReadOnly:=false;

Edit26.Text:=FieldValues[„InID„]+1; file://最大的入库编号加1形成新的入库编号

Edit26.ReadOnly:=true;Edit26.Color:=clMenu; file://设置编号的不可更改性

end; end; ********************************************************************** procedure Tinoutform.SpeedButton1Click(Sender: TObject); var s:integer; begin file://入库管理添加按钮事件

if Edit1.TextNULL then MeageDlg(„请输入完整的入库信息和图书信息,然后单击确定按钮。„, mtInformation,[mbok],0) else begin

if (Edit2.Text=„„) or (Edit3.Text=„„) or (Edit4.Text=„„) or (Edit5.Text=„„)

then begin

MeageDlg(„请输入完整的入库信息!„,mtInformation,[mbok],0);

Edit2.SetFocus;

end

else begin

with datamoduleform.InQuery do file://将找到的图书信息显示

begin

close;

SQL.Clear; SQL.Add(„insert into InRecord values(:InID,:BookID,:EmpID,:ShopID, :Number,:InDate)„); file://向入库信息表中插入记录

Parameters.ParamByName(„InID„).Value:=Edit26.Text; file://向Edit框取值

Parameters.ParamByName(„BookID„).Value:=Edit13.Text;

Parameters.ParamByName(„EmpID„).Value:=Edit2.Text;

Parameters.ParamByName(„ShopID„).Value:=Edit3.Text;

Parameters.ParamByName(„Number„).Value:=Edit4.Text;

Parameters.ParamByName(„InDate„).Value:=Edit5.Text;

execSQL;

end;

Edit12.ReadOnly:=False;

S:=StrToInt(Edit12.Text)+StrToInt(Edit4.Text); file://计算入库后库存图书数量

Edit12.Text:=IntToStr(s); file://将修改后的库存图书数量显示

Edit12.ReadOnly:=true;

with datamoduleform.BookQuery do

file://修改库存记录中图书数量

begin

close;

SQL.Clear;

SQL.Add(„update BookRecord set Number1=:Number where BookID=:BookID„);

Parameters.ParamByName(„Number„).Value:=s;

Parameters.ParamByName(„BookID„).Value:=Edit13.Text;

execSQL;

file://提交SQL语句

MeageDlg(„记录已成功添加!„,mtInformation,[mbOK],0);

Edit13.SetFocus;

end;

end; end; end; ********************************************************************** procedure Tinoutform.SpeedButton2Click(Sender: TObject); begin

file://入库管理确定按钮事件

if (Edit2.Text=„„) or (Edit3.Text=„„) or (Edit4.Text=„„) or (Edit5.Text=„„)

or (Edit6.Text=„„) or (Edit7.Text=„„) or (Edit8.Text=„„) or (Edit9.Text=„„)

or (Edit10.Text=„„) or (Edit11.Text=„„) or (Edit25.Text=„„)

then begin file://判断输入信息的完整性

MeageDlg(„请输入所需的全部入库信息!„,mtInformation,[mbok],0); Edit2.SetFocus; end else begin

with datamoduleform.InQuery do file://入库信息添加

begin

close;

SQL.Clear; SQL.Add(„insert into InRecord values(:InID,:BookID,:EmpID,:ShopID, :Number,:InDate)„);

file://向入库信息表中插入记录

Parameters.ParamByName(„InID„).Value:=Edit26.Text;

Parameters.ParamByName(„BookID„).Value:=Edit1.Text;

Parameters.ParamByName(„EmpID„).Value:=Edit2.Text;

Parameters.ParamByName(„ShopID„).Value:=Edit3.Text;

Parameters.ParamByName(„Number„).Value:=Edit4.Text;

Parameters.ParamByName(„InDate„).Value:=Edit5.Text;

execSQL;

end;

with datamoduleform.BookQuery do

begin

close;

SQL.Clear;

file://在完成入库信息的添加后,修改库存记录 SQL.Add(„insert into BookRecord values(:BookID,:BookName,:Author, :Publisher,:PubDate,:Price,:BookType,:Number,:Addration)„);

Parameters.ParamByName(„BookID„).Value:=Edit1.Text;

Parameters.ParamByName(„BookName„).Value:=Edit6.Text;

Parameters.ParamByName(„Author„).Value:=Edit7.Text;

Parameters.ParamByName(„Publisher„).Value:=Edit8.Text;

Parameters.ParamByName(„PubDate„).Value:=Edit9.Text;

Parameters.ParamByName(„Price„).Value:=Edit10.Text;

Parameters.ParamByName(„BookType„).Value:=Edit11.Text;

Parameters.ParamByName(„Number„).Value:=Edit4.Text;

Parameters.ParamByName(„Addration„).Value:=Edit25.Text;

execSQL;

end;

MeageDlg(„记录添加成功!„,mtInformation,[mbok],0);

end; end; ********************************************************************** procedure Tinoutform.SpeedButton11Click(Sender: TObject); begin file://新书入库按钮事件

Edit13.Text:=„„;Edit13.Color:=clMenu; with datamoduleform.InQuery do file://自动入库编号的获取

begin close; SQL.Clear; SQL.Add(„select * from InRecord where InID>=All(select InID from InRecord)„);

open; Edit26.Text:=FieldValues[„InID„]+1;

Edit26.ReadOnly:=true;Edit26.Color:=clMenu; end; with datamoduleform.BookQuery do file://自动图书编号的获取

begin close;

SQL.Clear;

SQL.Add(„select * from BookRecord where BookID>=All(select BookRecord)„);

file://找到库存图书编号中最大的一个

open;

Edit1.ReadOnly:=false;

Edit1.Text:=FieldValues[„BookID„]+1; file://显示自动生成的图书编号

Edit1.ReadOnly:=true;Edit1.Color:=clMenu; end; Edit2.Text:=„„;Edit3.Text:=„„;Edit4.Text:=„„;Edit5.Text:=„„;

Edit6.ReadOnly:=false;Edit6.Text:=„„;Edit6.Color:=clWindow;

Edit7.ReadOnly:=false;Edit7.Text:=„„;Edit7.Color:=clWindow;

Edit8.ReadOnly:=false;Edit8.Text:=„„;Edit8.Color:=clWindow;

Edit9.ReadOnly:=false;Edit9.Text:=„„;Edit9.Color:=clWindow;

Edit10.ReadOnly:=false;Edit10.Text:=„„;Edit10.Color:=clWindow;

Edit11.ReadOnly:=false;Edit11.Text:=„„;Edit11.Color:=clWindow;

Edit12.ReadOnly:=false;Edit12.Text:=„„;Edit12.Color:=clMenu;

Edit25.ReadOnly:=false;Edit25.Text:=„„;Edit25.Color:=clWindow; end; procedure Tinoutform.SpeedButton22Click(Sender: TObject); var s:integer; begin file://出库管理确定按钮事件

if (Edit24.Text=„„) or (Edit27.Text=„„) or (Edit28.Text=„„) then begin MeageDlg(„请输入完整的出库信息!„,mtInformation,[mbok],0); Edit24.SetFocus; end else begin if Edit27.Text>Edit21.Text file://检查出库数量是否小于库存数量 then begin MeageDlg(„库存中的图书数量不够!„,mtInformation,[mbok],0); Edit27.Text:=„„;Edit27.SetFocus;

end else begin with datamoduleform.OutQuery do begin

BookID from close; SQL.Clear; SQL.Add(„insert into OutRecord values(:OutID,:BookID,:EmpID, :Number,:OutTime)„); file://添加出库记录

Parameters.ParamByName(„OutID„).Value:=Edit23.Text; Parameters.ParamByName(„BookID„).Value:=Edit14.Text; Parameters.ParamByName(„EmpID„).Value:=Edit24.Text; Parameters.ParamByName(„Number„).Value:=Edit27.Text; Parameters.ParamByName(„OutTime„).Value:=Edit28.Text; execSQL; end; Edit21.ReadOnly:=False; s:=StrToInt(Edit21.Text)-StrToInt(Edit27.Text); file://计算出库后库存图书数量 Edit21.Text:=IntToStr(s); file://显示出库后库存图书数量 Edit21.ReadOnly:=True; with datamoduleform.BookQuery do begin

file://修改库存图书数量 close; SQL.Clear; SQL.Add(„update BookRecord set Number1=:Number where BookID=:BookID„); Parameters.ParamByName(„Number„).Value:=s;

Parameters.ParamByName(„BookID„).Value:=Edit14.Text; execSQL; end; MeageDlg(„出库记录添加成功!„,mtInformation,[mbok],0); Edit14.Text:=„„;Edit14.SetFocus; end; end; end;

§5.5 查询功能的实现

查询功能包括员工信息查询,供应商信息查询,入库信息查询和出库信息查询。由于每一个功能的实现都差不太多,而且其窗体也差不太多,所以在这里只给出员工信息查询窗体及其源代码。

图5.6 员工信息查询窗体

procedure Tfindempform.SpeedButton1Click(Sender: TObject); Var s1,s2,s3 :String; begin

file://员工记录查询窗体查找按钮事件 with datamoduleform.EmpQuery do begin close; SQL.Clear; SQL.Add(„select * from Employee„);

SQL.Add(„where EmployeeID Like :EmpID and EmployeeName Like :Name and Grade Like :Grade„);

file://实现模糊查询功能

if Edit1.Text„„ then s1:=„%„+Edit1.Text+„%„ else s1:=„%„; Parameters.ParamByName(„EmpID„).Value:=s1;

if Edit2.Text„„ then s2:=„%„+Edit2.Text+„%„ else s2:=„%„; Parameters.ParamByName(„Name„).Value:=s2;

if Edit3.Text„„ then s3:=„%„+Edit3.Text+„%„ else s3:=„%„; Parameters.ParamByName(„Grade„).Value:=s3; open; if FieldValues[„EmployeeID„]NULL

then findempform.Close

file://在找到记录的情况下关闭查找窗口 else begin MeageDlg(„没有找到你所需要的记录!„,mtInformation,[mbOK],0); Edit1.Text:=„„;Edit2.Text:=„„;Edit3.Text:=„„;Edit1.SetFocus; close; SQL.Clear; SQL.Add(„select * from Employee„); file://刷新员工信息窗口 open; end; end; end; §5.6 系统登陆窗体模块的实现

由于系统登陆窗体中有一幅彩图,在这里不便给出,而只给出了系统的实现。 var keyname: string; file://定义了一个全局变量,在key2中有调用 procedure Tkeyform.SpeedButton1Click(Sender: TObject); var s:string;

file://登陆窗口登陆按钮事件 begin if (Edit1.Text=„„) then begin MeageDlg(„清输入登陆姓名和密码!„,mtInformation,[mbok],0); Edit1.SetFocus; end else begin datamoduleform.KeyTable.Active:=true; if not datamoduleform.KeyTable.Locate(„KeyName„,Edit1.Text,[])

file://判断登陆名是否存在 then begin MeageDlg(„登陆名错误,请重新输入!„,mtInformation,[mbok],0); Edit1.Text:=„„; Edit1.SetFocus; end else begin with datamoduleform.KeyQuery do begin close; SQL.Clear; SQL.Add(„select * from Key where KeyName=:KeyName„); Parameters.ParamByName(„KeyName„).Value:=Edit1.Text; open; s:=FieldValues[„KeyNo„]; end; if sEdit2.Text file://判断登陆密码是否正确 then begin MeageDlg(„登陆密码错误,请重新输入!„,mtInformation,[mbok],0); Edit2.Text:=„„; Edit2.SetFocus; end else begin keyname:=Edit1.Text; keyform.Hide; mainform.Show;mainform.WindowState:=wsMaximized; end; end; end; end; §5.7 用户管理功能的实现 5.7.1 用户管理主窗体

图5.7 用户管理主窗体 5.7.2 密码修改窗体模块的实现

图5.8 密码修改窗体

procedure Tkey2form.SpeedButton1Click(Sender: TObject); begin file://密码修改窗口修改按钮事件 if (Edit1.Text=„„)or(Edit2.Text=„„)or(Edit3.Text=„„) then begin MeageDlg(„请输入完整的信息。„,mtInformation,[mbok],0); Edit1.SetFocus; end else begin if Not datamoduleform.KeyTable.Locate(„KeyNo„,Edit1.Text,[]) then begin MeageDlg(„原密码输入错误,不能修改新密码!„,mtInformation,[mbok],0); Edit1.Text:=„„;Edit2.Text:=„„;Edit3.Text:=„„;Edit1.SetFocus; end else begin if Edit2.TextEdit3.Text then begin MeageDlg(„两次密码输入不同,请重新输入新密码!„,mtInformation,[mbok],0); Edit2.Text:=„„;Edit3.Text:=„„;Edit2.SetFocus; end else begin

file://在数据库中修改密码 with datamoduleform.KeyQuery do begin close; SQL.Clear; SQL.Add(„update key set KeyNo=:KeyNo where KeyName=:KeyName„); Parameters.ParamByName(„KeyName„).Value:=keyname; Parameters.ParamByName(„KeyNo„).Value:=Edit2.Text; execSQL; MeageDlg(„密码修改成功!„,mtInformation,[mbok],0); key2form.Close; end; end; end; end; end; 5.7.3 用户注册窗体模块的实现

图5.9 用户注册窗体

procedure Tkey3form.SpeedButton1Click(Sender: TObject); begin file://用户注删窗口注删按钮事件 if (Edit1.Text=„„)or(Edit2.Text=„„)or(Edit3.Text=„„) then begin MeageDlg(„请输入完整的信息!„,mtInformation,[mbok],0); Edit1.SetFocus; end else begin if datamoduleform.KeyTable.Locate(„KeyName„,Edit1.Text,[])

file://判断用户名是否存在,系统不允许用户名重复 then begin MeageDlg(„用户名已存在,请输入新的用户名和密码!„, mtInformation,[mbok],0); Edit1.Text:=„„;Edit2.Text:=„„;Edit3.Text:=„„;Edit1.SetFocus; end else begin if Edit2.TextEdit3.Text then begin MeageDlg(„您输入的两个密码不相同,请重新输入!„,mtInformation,[mbok],0); Edit2.Text:=„„;Edit3.Text:=„„;Edit2.SetFocus; end else begin with datamoduleform.KeyQuery do

file://在数据库中添加该用户 begin close; SQL.Clear; SQL.Add(„insert into Key values(:KeyName,:KeyNo)„); Parameters.ParamByName(„KeyName„).Value:=Edit1.Text; Parameters.ParamByName(„KeyNo„).Value:=Edit2.Text; execSQL; end; MeageDlg(„新用户添加成功,您可以继续添加用户,或按“取消”退出。„,mtInformation,[mbok],0);

Edit1.Text:=„„;Edit2.Text:=„„;Edit3.Text:=„„;Edit1.SetFocus; end; end; end; end; 5.7.4 用户注销窗体模块的实现

图5.10 用户注销窗体

procedure Tkey4form.SpeedButton1Click(Sender: TObject); var s:string; begin file://用户注销窗口注销按钮事件 if (Edit1.Text=„„)or(Edit2.Text=„„)

then MeageDlg(„请输入完整的信息!„,mtInformation,[mbok],0) else begin if Not datamoduleform.KeyTable.Locate(„KeyName„,Edit1.Text,[])

file://判断用户名是否存在,用户名必须存在,才可以删除 then begin MeageDlg(„您所输入的用户名不存在,请重新输入或按“取消”退出。„, mtInformation,[mbok],0); Edit1.Text:=„„;Edit2.Text:=„„;Edit1.SetFocus; end else begin with datamoduleform.KeyQuery do begin close; SQL.Clear; SQL.Add(„select * from Key where KeyName=:KeyName„); Parameters.ParamByName(„KeyName„).Value:=Edit1.Text; open; s:=FieldValues[„KeyNo„]; end; if sEdit2.Text file://判断该用户名下的密码是否正确 then begin MeageDlg(„您所输入的密码不正确,请重新输入或按“取消”退出。„, mtInformation,[mbok],0); Edit2.Text:=„„;Edit2.SetFocus; end else begin

file://从数据库中删除该用户 with datamoduleform.KeyQuery do begin close; SQL.Clear; SQL.Add(„delete from Key where KeyName=:KeyName„); Parameters.ParamByName(„KeyName„).Value:=Edit1.Text; execSQL; end; MeageDlg(„用户已成功删除,您可以继续删除用户,或按“取消”退出。„, mtInformation,[mbok],0); Edit1.Text:=„„;Edit2.Text:=„„;Edit1.SetFocus; end; end; end; end;

结束语

本系统是一个面向小型图书企业,具有一定实用性的数据库信息管理系统。它主要完成对图书仓库的一系列管理,包括入库、出库、库存以及员工和供应商信息管理。本系统采用当前流行的面向对象的开发工具—Delphi来完成整个系统的设计,在数据库的设计上利用了Acce的便利性和实用性。

本系统具有相当的实用功能。在查询方面,系统实现了多条件任意字段的模糊查询,同时在分类查询上实现了动态生成,系统可以自动识别用户不同的输入。在图书入库、出库和库存三者之间建立了良好的链接关系,某一部分地修改均会自动引发系统对与其相关的部分进行连锁修改。在用户管理方面,系统较好地实现了用户注册,用户注销和密码修改等各项功能。 系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都是由个人设计的,有关Delphi许多细节问题都要靠自己去摸索,加之本人水平有限,并没有完全地理解Delphi的强大功能,而且还存在着许多不足之处。如:

受开发条件和开发时间的限制,本系统只利用了本地数据库Acce,它同应用程序处于同一系统中,能存储的数据量也有一定限制,并没有发挥出Delphi其数据库方面的优势; ※

报表打印功能尚不够全面完善,不能实现动态报表;

在一些数据输入时没有及时的进行数据格式校验,不能保证数据输入的绝对正确性。 ※

由于时间关系,系统功能实现不够完善,使用不是很方便,比如,没有实现多条记录的连锁删除和添加以及数据的导入功能。 这些都是需要完善的地方,该系统离实际使用也还有相当的距离,需要我进行不断地补充和完善。

通过本次毕业设计我学到了不少新的东西,也发现了大量的问题,有些在设计过程中已经解决,有些还有待今后慢慢学习。只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。

考 文 献

[1] 郑荣贵、黄平、谷会东,Delphi 6.0数据库开发与应用,中科多媒体电子出版社,2002 [2] 伍俊良,Delphi 6控件应用实例教程,北京希望电子出版社,2002 [3] 卢国俊,Delphi 6数据库开发,电子工业出版社,2002 [4] 边萌,Delphi 编程起步,机械工业出版社,2002 [5] 伍俊良,Delphi 6课程设计案例精编,中国水利水电出版社,2002 [6] 丁宝康,数据库原理,经济科学出版社,2000 [7] 陆丽娜,软件工程,经济科学出版社,2000

第14篇:仓库管理系统需求规格说明书

仓库管理系统需求规格说明书

(第十二组)

1.引言 ...........................................................................................................................1

1.1编写目的 .............................................................................................................1 1.2项目背景 .............................................................................................................1 1.3参考资料 .............................................................................................................1 2.任务概述 ....................................................................................................................2

2.1目标......................................................................................................................................2 2.2运行环境 .............................................................................................................2 2.3条件与限制 ..........................................................................................................2 3.数据描述 ....................................................................................................................3

3.1静态数据 .............................................................................................................3

3.2动态数据 .............................................................................................................3 3.3数据库介绍 ..........................................................................................................3 3.4数据词典 .............................................................................................................3 3.5 E-R图 .................................................................................................................3 3.6数据采集 .............................................................................................................3 4.功能需求 ....................................................................................................................6

4.1功能划分 .............................................................................................................6 4.2功能描述 .............................................................................................................6 5.性能需求 ....................................................................................................................7

5.1数据精确度 ..........................................................................................................7 5.2时间特性 .............................................................................................................7 5.3适应性 .................................................................................................................7 6.运行需求 ..................................................................................................................10

6.1用户界面 ...........................................................................................................10

6.2硬件接口 ...........................................................................................................10 6.3软件接口 ...........................................................................................................10 6.4故障处理 ...........................................................................................................10 7.其它需求 ..................................................................................................................12

7.1正确性 ...............................................................................................................12 7.2可维护性 ...........................................................................................................12 7.3可移植性 ...........................................................................................................12 7.4软件的完整性 ....................................................................................................12 7.5软件的安全性 ....................................................................................................12

仓储管理系统需求规格说明书

1.引言

1.1编写目的

本需求分析报告的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,同时提出了仓储管理系统的软件开发过程,便于程序员与客户之间的交流、协作,并作为工作成果的原始依据,同时也表明了本软件的共性,以期待能够获得更大范围的应用。

本文档是在调研仓库管理制度及仓库管理人员对于管理系统的需求后,为明确软件需求、安排项目规划与进度、组织软件开发与测试而撰写的。

1.2项目背景

仓储管理系统(WMS)是仓储管理信息化的具体形式,它在我国的应用还处于起步阶段。一个好的仓库管理系统将会给企业带来丰厚的经济效益和社会效益。由此,设计一个优秀的仓库管理系统就显得尤其重要。物资的储存和运输是整个物流过程中的两个关键环节,被人们称之为“物流的支柱”。在商品交换过程中,虽然物资的购、销活动决定了物资的交换关系,但若没有物资的储存和运输,物资的这种交换关系则不能最终实现。

本程序设计由计算机与信息工程学院网络工程专业09级7班第12组提出并执行。

1.3参考资料

1.张海潘

软件工程导论(第5版) 清华大学出版社.2008年2月

2.C#网络应用编程(第二版) 人民邮电出版社

马俊主编

3.C#程序设计及应用教程(第二版)

人民邮电出版社

马俊主编

4.网络资源

本小组所有成员皆可保证所用的一切资源均来自正规途径,不牵扯到任何法律

第 页

仓储管理系统需求规格说明书

方面的问题。

2.任务概述

2.1目标

仓储管理的内容应该包括三个部分:仓储系统的布局设计、库存最优控制、仓储作业操作。

设计并完成仓储物资管理系统,实现委托方要求的功能。“仓库信息管理系统”是一套功能强大而又操作简便,实用性的仓储管理软件,其主要包括有用户登录、仓库管理、业务查询和系统设置管理四大管理功能。系统主要的实现目标是监控整个仓库的运行情况,提供完善的任务管理计划功能,实时监控所有货物的在线运动情况,实时提供库存变化的信息,完善公司仓储情况的监制与有效利用,以提高仓库存效率,为企业适时的提供仓储信息,为企业创造更多收入与利润。

2.2运行环境

操作系统:Microsoft Windows 95/98/ME/NT_3.51/NT_4.0/2000/XP/ Server_2003/Vista/Server_2008/7/Server_2008_R2中的任何一种。

数据库名称:Microsoft SQL Server 2008。

2.3条件与限制

本系统在 Windows 环境中开发,故在Windows中运行无其它因素限制。

要求系统的操作人员应具有一定的计算机方面的知识或经过相应的培训经验,突发情况可进行操作以缓解损害情况,同时应做好对后台数据库的保密工作。

第 页

仓储管理系统需求规格说明书

3.数据描述

3.1静态数据

a.用户ID b.用户身份 c.用户密码 d.货物ID e.货物名称 f.货物所属仓库 g.仓库ID h.仓库状态 i.仓库备注信息 j.用户备注信息 k.货物备注信息

3.2动态数据

输入数据:菜单选项,查询关键字,新建记录项。

输出数据:由查询关键字确定的数据库记录集合或全部记录内部生成的数据,中间查询结果。

3.3数据库介绍

微软SQL Server 2005 SP1加入数据库镜像功能,为SQL Server 2005 Expre Edition提供新管理工具,并且加强了SAP NetWeaver智能商务系统的报告反馈支持功能。

仓储管理系统需求规格说明书

3.4数据词典

仓储管理系统需求规格说明书

3.5 E-R图

性别姓名联系方式备注ID用户名密码权限联系方式普通用户交互仓库管理员交互管理系统操作员使用仓库ID用户名权限密码

编号管理员ID状态图 3.1 系统E-R图

描述:该系统中包含的用户以及属性如图3.5,其中对应关系为,普通用户与系统操作员为多对一,与仓库管理员为多对一,系统操作员与仓库为多

仓储管理系统需求规格说明书

对一,仓库管理员与仓库为一对一。

另外该系统中有一个超级管理员,负责对系统进行配置管理,对数据库进行备份,增加,删除系统操作员,仓库管理员信息等操作。系统超级管理员用例图见4.2功能划分。

3.6数据采集

系统管理员与用户通过键盘输入仓库信息及反馈信息。

4.功能需求

4.1功能划分

一个功能完善的仓库信息管理系统,必须包括以下几个主要功能:用户登录、仓库管理、业务查询、系统设置。系统总体模块图如下

第 页

仓储管理系统需求规格说明书

仓储管理系统用户登录仓库管理业务查询系统设置登录注销退出进退领退调盘货货料料拨点库存销售历史记录查询用户管理供应商管理仓库进货仓库退货仓库领料仓库退料商品调拨仓库盘点库存查询 图4.1

仓储管理系统模块图

4.2功能描述

(一)用户登录

(1)用户登录

用户可以用两种身份登录本系统:普通操作员和管理人员。不同身份的用户登录被系统授予不同的使用权限,这样提高了系统的安全性,避免了无关人员获取不在他权限范围内的信息。

(2)用户注销

用户在短时间不使用该系统时,不必退出系统,选择注销后,其他用

仓储管理系统需求规格说明书

户可以登录使用本系统。

(3)退出系统

用户在完成工作后,点击退出系统按钮可以安全的退出,以免不安全退出导致数据丢失情况的发生。

(4)超级管理员管理

图4.3

超级管理员用例图

(二)仓库管理

(1)仓库进货

仓库进货模块要求操作员输入商品号、商品名称、进货数量、单位和供应商等信息,系统自动的将当前系统时间作为进货时间更新到数据库,并且统计进货金额,该操作完成后,仓库相应货物的数量为原货物数量和进货数量的总和,并更新数据库。

(2)仓库退货

仓库退货模块要求操作员输入退货商品号、退货数量、单位和供应商,系统自动的将当前系统时间作为退货时间更新到数据库,并且统计退货金额,该操作完成后,相应货物的数量为原货物数量除去退货的数量,并更新数据库。

(3)仓库领料

仓库领料模块要求操作员输入领取商品号、领取数量、领料人等,系统自动的将当前系统时间作为领料时间更新到数据库,并且统计总领料数

第 页

仓储管理系统需求规格说明书

量。该操作完成后,相应货物的数量为原货物数量减领料的数量并更新数据库。

(4)仓库退料

仓库退料模块要求操作员输入退料商品号、退料数量、退料人等,系统自动的将当前系统时间作为退料时间更新到数据库,并且统计总退料数量。该操作完成后,相应货物的数量为原货物数量加退料的数量,并更新数据库。

(5)商品调拨

商品调拨模块要求操作员输入调拨商品号、调拨数量、调拨人等,系统自动的将当前系统时间作为调拨时间更新到数据库,并且统计总调拨数量。

(6)仓库盘点

商品盘点模块要求用户(管理员)输入某商品号,该商品实际数量(增加或删除),系统会自动的将当前系统时间作为盘点时间更新到数据库,并且统计总盘点过程中修改的数量。

(三)业务查询

业务查询模块图

(1)库存查询

第 页

仓储管理系统需求规格说明书

用户可以查询所有的商品的库存,也可以输入某件商品的ID号从而得到该商品的库存量。

(2)销售查询

用户(管理员)给出某个时间段,系统就根据库中的资料给出该段时间中所有商品的销售情况。

(3)仓库历史记录查询

用户可以查询的类型包括:仓库进货、仓库退货、仓库领料、仓库退料、商品调拨、仓库盘点,用户选择查询的类型后,再输入需要查询的时间,系统返回历史操作记录。

(四)系统设置 (1)供应商管理

用户可以增加新的供应商,需要输入供应商的一些信息,包括:供应商号、名称、联系人、联系电话、传真、地址和邮政编码。用户也可以对已经存在的供应商信息进行查询和修改。

管理员可以增加、删除、修改和查询用户。

5.性能需求

5.1数据精确度

由于采用数据库技术并且用户的应用领域对数据精度的要求不是太高,所以这点在系统中表现的比较少,都是用户数据的安全性和准确性是完全保证的,所以对用户的使用没有多大的障碍。

5.2时间特性

本系统的数据库较小,所以程序在响应时间,数据更新处理时间上性能是比较突出的、而且也正由于数据量相对较少,故在数据传输时间和系统运行时间上表现的叫让用户满意。无论是客户还是管理员,当用户登录,进行任何操作的时候,系统应该及时的进行反应,反应的时间在5秒以内。系统应能检测出各种非正常情况,如与设备的通信中断,无法连接数据库服务等,避免出现长时间等待甚至无响应。

第 页

仓储管理系统需求规格说明书

5.3适应性

本系统实在Windows环境中开发的,所以只要是兼容Windows的软件或操作系统,该软件都可以正确运行,有较好的适应能力与兼容性。而且本系统简单易懂,容易上手,界面明了,便于操作。本系统是比较大众模式的仓储管理模式,便于移植到其他部门或公司,具有良好的适应性。

6.运行需求

6.1用户界面

采用Web网页的形式,具有良好的交互界面。有一个主页,可以链接其他页面。用户根据自己权限在各个页面进行操作。

要求大致如下:

1.页面内容:主题突出,站点定义、术语和行文格式同意、规范、明确,栏目、菜单设置和布局合理,传递的信息准确、意识。内容丰富,文字准确,语句通顺;专用术语规范,行文格式统一规范。

2.导航结构:页面具有明确的导航只是,且便于理解,方面用户使用。3.技术环境:页面大小合适,能用各种常用浏览器以不同的分辨率浏览;无错误链接和空链接;采用c处理,控制字体大小和面板布局。

4.艺术风格:界面、版面形象清新岳母、布局合理,字号大小十

一、字体选择合理,前后一致,美观大方,动与静搭配适当,动静效果好;色彩和谐自然,与主题内容相协调。

6.2硬件接口

数据库服务器应配备大容量硬盘,以免当大规模公司使用时反应速度减慢等问题出现。

6.3软件接口

系统保持与操作系统的接口,保持与数据库软件Microsoft SQL Server的接口,考虑到文档处理的需要有可能包括与常用办公软件接口。

第 页

仓储管理系统需求规格说明书

6.4故障处理

考虑到软件的范围不大,所以故障处理一般有操作系统完成,系统只要保持与操作系统的接口即可。只要操作系统没有大的故障程序一般是比较稳定的。

考虑到用户对数据的安全性要求,程序可以有独立于操作系统之外的数据备份功能与过程,以及系统崩溃后的数据恢复功能。

7.其它需求

7.1正确性

要求发布的软件能够满足用户需求,实现各个功能,并且在运行过程中不出现严重错误。

7.2可维护性

要求本软件拥有良好的可维护性,以满足用户不断增长的需求以及日后的BUG修复工作。

7.3可移植性

该系统采用B/S开发模式,所以可以在多种平台上很好的运行,所以该系统具有良好的移植性。

7.4软件的完整性

最终将该系统制作成部署文件以保证系统的完整行。

7.5软件的安全性

要求提供身份验证,只允许通过身份验证的用户使用本软件。并且通过验证可以确认用户身份,即确认用户是否为系统管理员,只有系统管理员才可以对软件进行数据的添加、删除和修改操作,而普通用户只能进行浏览数据等基本操作。

第15篇:Delphi图书仓库管理系统论文

Delphi图书仓库管理系统论文Delphi图书仓库管理系统论文

前 言

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期.随着经济文化水平的显著提高,人们对生活质量及工作环境的要求也越来越高.书籍做为人类的精神食粮,在现代社会中越来越受到重视,大量的书籍出现在市场上,人们有了各种各样不同的选择.与此同时,为了管理大量的图书,图书仓库也大量的出现,仓库的管理问题也就提上了日程.随着图书的大量增加,其管理难度也越来越大,如何优化仓库的日常管理也就成为了一个大众化的课题.

在计算机飞速发展的今天,将计算机这一信息处理利器应用于仓库的日常管理已是势必所然,而且这也将为仓库管理带来前所未有的改变,它可以带来意想不到的效益,同时也会为企业的飞速发展提供无限潜力.采用计算机管理信息系统已成为仓库管理科学化和现代化的重要标志,它给企业管理来了明显的经济效益和社会效益.主要体现在:

极大提高了仓库工作人员的工作效率,大大减少了以往入出存流程繁琐,杂乱,周期长的弊端.

基于仓库管理的全面自动化,可以减少入库管理,出库管理及库存管理中的漏洞,可以节约不少管理开支,增加企业收入.

仓库的管理的操作自动化和信息的电子化,全面提高了仓库的管理水平.

随着我国改革开放的不断深入,经济飞速的发展,企业要想生存,发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化,信息化则是其中极其重要的部分.为了加快仓库管理自动化的步伐,提高仓库的管理业务处理效率,建立仓库管理系统已变得十分心要.

入库,库存,出库还是现在企业图书仓库管理的常规基本模式,虽然,最近又出现了很多新的管理模式,如:基于零库存思想的沃尔玛特管理方式,但这些新的思想在中国大部分企业的管理中还是难以实现的.所以如何设计好仓库管理系统,尽可能地减少仓库管理的重复性和低效性就成为当前最为重要的问题.图书仓库管理的核心是入库,库存和出库之间的联系,如何处理好三者之间的关系是系统最为关键的部分.另外,员工信息和供应商信息管理也是仓库管理中一个必不可少的部分,它提供着与入库和出库相关的一些信息,使得整个系统更加完整,更加实用.

通过对仓库管理日常工作的详细调查,搜集了大量的资料,从系统结构的组织,功能的实现,技术的要求以及可行性等多方面进行考虑,认为本课题是一个适应现今图书仓库管理需求的计算机信息管理系统,具有一定的实际开发价值和使用价值.内 容 简 介

本系统主要完成对图书仓库的库存管理,包括图书入库,出库,库存,员工信息,供应商信息以及密码管理等六个方面.系统可以完成对各类信息的浏览,查询,添加,删除,修改,报表等功能.

系统的核心是入库,库存和出库三者之间的联系,每一个表的修改都将联动的影响其它的表,当完成入库或出库操作时系统会自动地完成库存的修改.查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的都是为了方便用户使用.系统有完整的用户添加,删除和密码修改功能,并具备报表打印功能.

系统采用MICROSOFT OFFICE中的ACCESS 2000来设计数据库,并使用当前优秀

的开发工具—DELPHI 6.0 ,它有着最为灵活的数据库结构,对数据库应用有着良好的支持.

论文主要介绍了本课题的开发背景,所要完成的功能和开发的过程.重点的说明了系统设计的重点,设计思想,难点技术和解决方案.具体安排如下:

第一章进行系统的需求分析.

第二章介绍系统的概要设计.

第三章介绍了系统详细设计.

第四章介绍了程序设计环境及选用的语言工具.

第五章根据前四章的设计结果利用ACCESS 2000和DELPHI 6.0进行了具体的窗体和应用程序设计.

总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向.关键字:图书仓库管理,数据库,DELPHI,SQL,ACCESS.

第16篇:erp系统仓库管理操作流程

设备部

ERP系统使用流程说明

采购入库单生成操作流程图:

采购入库单编写界面操作流程图:

仓库编写:

供应商编写:

部门编写:

入库类别编写:

存货品项编写

新增品项此操作流程图:

入库单保存处理:

入库单审核处理:

入库单弃审,修改,删除处理:

其他出库单生成操作流程:

其它出库单界面编写操作流程图:

其它出库单保存,审核,弃审,修改,删除处理:

采购入库单列表查询操作流程图:

采购入库单列表说明:

其它出库单列表查询操作流程图:

其它出库单列表说明:

现存量查询操作流程图:

现存量查看界面演示:

发票单据生成操作流程图:

生单带入入库单列表说明:

发票单据结束保存说明:

第17篇:仓库出库入库管理系统毕业设计

1 1概述

1.1 摘要 某供应部门管理多个仓库,仓库主要管理物资的入库、出库、库存和采购等事项。建立一个数据库,实现其先进快速的功能。 1.2 1.2 1.2 1.2 可行性分析可行性分析可行性分析可行性分析1.2.1需求需求需求需求可行性可行性可行性可行性 随着科学技术的发展,社会进步,计算机迅速的发展,仓库管理的方法也日新月异,以前全是由人管理的方法现存在很多的缺点:管理效率低,劳动强度大,信息处理速度低而且准确率也不够令人满意。为了提高仓库管理效率,减轻劳动强度提高,信息处理速度和准确性。我们为仓库管理员提供的一种更先进、科学的服务系统。本系统让计算机对仓库进行自动管理,仓库管理员可以直接在计算机上实现仓库的信息管理,并能在一定程度上实现自动化。

1.2.2技术可行性技术可行性技术可行性技术可行性根据客户提出的系统功能、性能及实现系统的各项约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术以较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。同时考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发。 1.2.3进度管理进度管理进度管理进度管理 1.2.4经济可行性经济可行性经济可行性经济可行性估算新系统的成本效益分析,其中包括估计项目开发的成本,开发费用和今后的运行、维护费用,估计新系统将获得的效益,估算开发成本是否会高于项目预期的全部经费。并且,分析系统开发是否会对其它产品或利润带来一定影响

2.1系统目标系统目标系统目标系统目标由于常规仓库的工作流程建立在手工操作之上而导致处理速度过慢,不能满足管理层和客户的要求,所以新系统开发的总目标是:适应市场经济的需要,提高企业的经济效益,加强仓库各阶段工作的科学管理,并未管理决策提供一定的支持。具体来说库存管理信息系统有如下功能: 2.1.能都对库存数据快速、准确的录入。只有对库存数据快速、准确的录入,才能为后继工作提供良好的数据交易平台。

2.1.对库存基本信息的及时处理。根据出库、入库的基础数据,形成库存的基本信息,管理信息系统运行的基础平台就是整个库存的基本信息。2.1.3决策支持和扶助功能。这体现在能利用本系统的基础信息,通过一定的决策模式,向相关决策和管理人员提供面向业务的辅助决策方案。这里的支持层次分两个,一是面向业务本身,即有关物料的进货问题,如:进货的名称、规格、型号、单价等,另一个层次是面向战略级的企业调整方案,通过对长期的企业存货与市场信息的观察分析,找出变动规律,并据此安排下一个项目部的原材料进货问题。由于时间和能力有限,战略级的决策支持暂不能实现。

第18篇:毕业实习报告仓库管理系统

毕业实习报告

一、实习目的

信息与计算科学是一门需要实践性的课程,平时大多数时间都在讲理论,所以实践的机会是十分重要的并且珍贵的。为了能更好的把理论与实践相结合,增强对JAVA语言的应用能力,增强知识运用能力,我们专业在学院的安排下于今年暑假进行了毕业实习。

二、实习时间

实习时间为2011-7-4——2011-7-23,主要有学习JAVA相关知识、分小组做项目、答辩几个阶段组成。

三、实习地点

数学实验室。

四、实验方式

重庆达内软件有限公司兼学院老师指导的校内实习。

五、实习主要内容

1 初期知识积累

实习开始于放假后的几天 在重庆炎热的夏天 在机房虽然有空调但依然很热。但是值得庆幸的是我们都学到了一些东西 ,这就是俗话说的阳光总在风雨后吧。

实习的主要内容是JAVA的运用。JAVA的主要特点是JAVA的安全性高,不能写病毒,所以适用于金融等对安全性要求较高的行业。但是病毒可以通过JAVA虚拟机写。JAVA和FLASH一起可以达到很好的页面效果,单单JAVA是做不到的。

数据库和JAVA的连接需要在程序中写好代码,外部用建好的数据库,只要设置正确就可以实现数据的调用。若某些操作可能抛出异常,则先将其选中,然后右击鼠标—包围方式—try.catch块,即可自动生成try-catch语句。建立一个类之后,定义相关的属性,右击鼠标—源代码—生成get和set语句,即可快速地生成每个属性的set与get函数,减少了工作量。这些简易高效率的操作也更加证明了JAVA作为一门语言的强大。

三层架构在写代码时起到了很重要的作用,一切的工作都需要依附于这一结构才能够真正地去构建要实现的系统。它们是组织整个系统的骨骼,支撑起整个系统的各项功能。action层是返回层,biz层是业务逻辑层,dao层是数据访问层。

Struts 框架工具是 Apache 基金会 Jakarta 项目中推出的一个子项目。 Struts 在英文中是支架、支撑的意思,这也体现出 Struts 在开发 Web 应用程序过程所起到的重要作用, Struts 为 Web 应用提供了通用的框架,让开发人员可以把主要精力集中在如何解决实际业务问题上,与此同时 Struts 框架也允许开发人员根据实际需要进行扩展和定制,从而可以更好的适应用户的需求。采用 Struts 可以简化遵循 MVC 设计模式的 Web 应用的开发工作,很好地实现代码重用,使开发人员从一些繁琐的工作中解脱出来,快速开发能够充分发挥 JSP/Servlet 优点、并具有强可扩展性的 Web 应用。总之, Struts 的出现使得 Web 应用的开发过程大大简化,从而能够缩短开发周期、提高开发效率。

Struts 架构一经推出,即受到 Java 开发群体的广泛重视,从 2004 年开始逐渐升温,并日渐成为 Java 创建 Web 应用开发的最流行的框架工具,在目前 Java Web 程序员的招聘要求中,几乎都提出了对 Struts 的要求,精通 Struts 架构已经成为 Java Web 程序员必备的技能。

2 实习中遇到的问题及解决方案

实习前期最重要的是安装软件 又由于学校的机房的电脑的配置不是很好故不是每一台电脑都可以用的,所以好多的同学都得带自己的电脑来。就在这个安装的过程中问题又是很多种的路劲的问题最多。最后在老师的帮助下这个问题算是很快的解决了。java对于某些细节的东西要求是很严格的 对于代码是不能出错的这是绝对的因为如果你出了一点点的小错误可能导致你的整个程序都跑步起来,或者是其中某些重要的功能不能实现。再有对于页面的设置页面之间的跳转传值字体的设置是关键虽然这是一个在老师看来是不为问题的问题但还是经常出错utf-8这个就是页面上的设置。是一个很小的细节问题。这里也体现了java细节重要性。

3 仓库管理系统的设计过程

实习的最后要求是做一个项目可供选择的项目有4个,我们小组做的项目是仓库管理系统。该系统又又前台和后台组成我主要的分工是做前台页面的设计,设计用户的登陆和注册。在用户表中插入一条管理员的相关信息的记录,在登陆界面上用户可以选择登录或者注册。若选择登录,即要输入用户名和密码,系统要判断输入的用户名是否存在,密码是否一致。若满足条件,则可以顺利登陆,即页面跳转至显示有用户信息的页面;若选择注册,则跳转至注册页面,用户需输入各种信息以完成注册。如果输入合法,则注册成功并能够跳转至登录页面。这一块只是外部的一个框架包括颜色的配比什么的。主要的内容还是内部的代码的运用。

物资入库,往一个表中插入物品记录。这个表中的数据记录在数据库当中这一功能的实现需要用户输入物资名、数量等信息,这样即可将相应的物资入库。

物资查询,就是将数据库中的数据把要求的在页面显示,这一功能比较容易实现。点击物资查询的链接后就可以跳至查询界面,并显示物资的各项信息。

库存系统的设计中,各种功能较多,实现的页面跳转尤其多,所以需要一个主页面,使得操作简单明了,不至于混乱。

主页面要实现把各个部分分块,即先把页面的格局分好,再分别在每一个小区块中写相应的页面。有固定的导航块,所以对各种功能的操作更加容易实现了。

主页面的外部设计用了学校的主页页面图片看上去比较气氛。我们又在主页面的最上部加了滚动条这让整个页面显得更加又生气。中间部分,左边显示用户信息,右上部分是各种操作功能的链接。在链接处都放上了按钮的图片,使这一部风看起来像是按钮图片。(其实是连接)所以有了具有按钮效果的链接,这是一个小技巧,因为直接用按钮是实现不了相应的跳转功能的,只有链接才可以做到,于是链接加上按钮的图片就是最好的解决方案了。右下部分跳转页面,即点击链接后,右下的页面跳转至相应的页面。总之,主页面的设计让一系列复杂繁琐的操作有了较强的连贯性,使用户使用该系统的舒适感倍增。

刚开始时,实现的物资出库功能没有考虑要出库的数量是否多于库存的数量,所以貌似完成的库存系统是一个可以无限出库的系统,不能满足对系统的安全性和稳定性的要求。考虑到上述因素,又对系统有了进一步的完善,即增加了出库时的数量判断。编写一个判断函数即可满足要求。输入了出库信息后,提交时即判断库存量是否满足需求:若出库量过大,则显示物品在仓库中不存在。通过这一系列的提示即可满足仓库系统的实际性要求。

六、实习总结及体会

一个项目是一个团队的工作一个人不能把一个项目搞定的几时可以那花的时间也是非常的巨大的还有很多的地方不一定能涉及到。团队的力量才是最厉害的俗话说人心其泰山移说的就是这个道理。再有一点就是我们要充分相信我们的队友,我们也要为我们的团队尽自己的最大努力。我们最终写了一个库存系统虽然在老师的眼里不是很好但是这个项目也是我们实习里的最好的一个对于我们来说这个项目是我们以团队做的第一个项目即时它很烂我们也觉得很好因为我们努力去做了以团队去做了。

对于这个JAVA项目它对代码要求很高特别是细节问题。在平时学习的知识太有限了,与实际的应用的技能有较大的差距,我们必须加强相关的训练以增强编程、网页设计等方面的技能,只有把理论运用到实践才是正真的理会。。

总的来说,实习虽然是个艰辛的过程但只有经历风雨我们才能成长经历磨难错误我们才会成功,这是这个项目教会我的。

第19篇:C语言课程设计 仓库管理系统

C语言课程设计 仓库管理系统

#include

struct cangku {

int num;

char name[20];

char introdution[50];

float square;

}; typedef struct cangku Cangku;

int Input(Cangku t[]); void List(Cangku t[],int n); void SearchOnName(Cangku t[],int n); int DeleteRecord(Cangku t[],int n); int AlterRecord(Cangku t[],int n); int AddRecord(Cangku t[],int n); void SortOnName(Cangku t[],int n); void SortOnSquare(Cangku t[],int n); void SaveRecord(Cangku t[],int n); int LoadRecord(Cangku t[]); int LoadRecord1(Cangku t[]); void Save(Cangku t[],int n); void Load(Cangku t[],int n); void Load1(Cangku t[]); int Menu_select();

void main() {

Cangku ck[50]; int i,l,length,w=1; int q[4]={5,2,1,0};

system(\"cls\"); printf(\"请输入第1个密码:\\n\"); for (i=0;i

{

scanf(\"%d\",&l);

system(\"cls\");

if(l==q[i])

printf(\"正确,继续输入第%d个密码:.\\n\",i+2);

else

{

w=0;

printf (\"输入错误!\\n\");

break;

} }

while(w)

{

switch(Menu_select())

{

case 1:

length=Input(ck);

SaveRecord(ck,length);

break;

case 2:

length=LoadRecord(ck);

SearchOnName(ck,length);

break;

case 3:

length=LoadRecord(ck);

length=DeleteRecord(ck,length);

SaveRecord(ck,length);

break;

case 4:

length=LoadRecord(ck);

length=AlterRecord(ck,length);

SaveRecord(ck,length);

break;

case 5:

length=LoadRecord(ck);

length=AddRecord(ck,length);

SaveRecord(ck,length);

break;

case 6:

length=LoadRecord(ck);

system(\"cls\");

List(ck,length);

break;

case 7:

length=LoadRecord(ck);

system(\"cls\");

SortOnName(ck,length);

SaveRecord(ck,length);

break;

case 8:

length=LoadRecord(ck);

system(\"cls\");

SortOnSquare(ck,length);

SaveRecord(ck,length);

break;

case 9:

length=LoadRecord(ck);

system(\"cls\");

Save(ck,length);

break;

case 0:

length=LoadRecord1(ck);

Load1(ck);

system(\"cls\");

Load(ck,length);

break;

case 10: exit(0);

}

} }

int Menu_select() { int c;

printf(\"按任意键进入仓库管理菜单\\n\");

getchar();

system(\"cls\");

system(\"color F0\"); printf(\"

******************************仓库管理*******************************\\n\");

printf(\"

*

1.录入仓库初始记录

*\\n\");

printf(\"

*

2.按仓库名称查找记录

*\\n\");

printf(\"

*

3.删除仓库记录

*\\n\");

printf(\"

*

4.修改仓库记录

*\\n\"); printf(\"

*

5.增加仓库信息

*\\n\");

printf(\"

*

6.显示全部记录

*\\n\");

printf(\"

*

7.按仓库名称排序

*\\n\");

printf(\"

*

8.按仓库面积排序

*\\n\");

printf(\"

*

9.备份

*\\n\"); printf(\"

*

0.恢复

*\\n\"); printf(\"

*

10.退出

*\\n\");

printf(\"

*********************************************************************\\n\"); do {

printf(\"\\n输入您想要进行的操作选项键(0-10):\");

if(scanf(\"%d\",&c)!=1)

{

while(getchar()!=\'\\n\')

continue;

} }

while(c10); return c; }

int Input(Cangku t[]) { int i,n;

system(\"cls\");

printf(\"\\n请输入要输入的仓库数目:\\n\");

scanf(\"%d\",&n);

printf(\"开始输入仓库信息:\\n\");

for(i=0;i

{

system(\"cls\");

printf(\"\\n第%d个仓库的编号:\",i+1);

scanf (\"%d\",&t[i].num);

printf(\"第%d个仓库的名称:\",i+1);

scanf (\"%s\",t[i].name);

printf(\"第%d个仓库的面积:\",i+1);

scanf (\"%f\",&t[i].square);

printf(\"第%d个仓库的说明:\",i+1);

scanf (\"%s\",t[i].introdution); }

return (n); }

void List(Cangku t[],int n) { int i;

printf(\"

*********************************************************************\\n\");

printf(\"

**

编号

名称

面积

说明\\n\");

printf(\"

-------\\n\"); for(i=0;i

printf(\"%17d%13s%20f%14s\\n\",t[i].num,t[i].name,t[i].square,t[i].introdution); }

printf(\"

*********************************************************************\\n\");

printf (\"\\n\"); getchar(); } void SearchOnName(Cangku t[],int n) { char s[20];

int i,flag=0;

system(\"cls\");

printf(\"请输入要查找的仓库名称:\\n\");

scanf(\"%s\",s);

for(i=0;i

{

if(strcmp(s,t[i].name)==0)

{

flag=1;

system(\"cls\");

printf(\"\\n\\n要查找的仓库信息如下:\\n\");

printf(\"\\n\");

printf(\"

*********************************************************************\\n\");

printf(\"

**

编号

名称

面积

说明\\n\");

printf(\"

-------\\n\"); {

printf(\"%17d%13s%20f%14s\\n\",t[i].num,t[i].name,t[i].square,t[i].introdution); }

printf(\"

*********************************************************************\\n\");

printf (\"\\n\");

} }

if(flag==0)

printf(\"要查找的仓库不存在!!\\n\"); getchar(); } int DeleteRecord(Cangku t[],int n) {

char s[20];

char ch;

int i,j,flag=0;

system(\"cls\");

printf(\"请输入要删除的仓库名称\\n\");

scanf(\"%s\",s);

for(i=0;i

if(strcmp(s,t[i].name)==0)

{

flag=1;

system(\"cls\");

printf(\"\\n\\n要删除的仓库信息如下:\\n\");

printf(\"\\n\");

printf(\"

*********************************************************************\\n\");

printf(\"

**

编号

名称

面积

说明\\n\");

printf(\"

-------\\n\"); {

printf(\"%17d%13s%20f%14s\\n\",t[i].num,t[i].name,t[i].square,t[i].introdution); }

printf(\"

*********************************************************************\\n\");

printf (\"\\n\");

printf(\"确定删除仓库信息吗?(Y/N)\\n\");

ch=getchar();

ch=getchar();

if(ch==\'Y\'||ch==\'y\')

{

for(j=i;j

t[j]=t[j+1];

n--;

i--;

printf (\"删除成功.\\n\");

}

}

}

if(flag==0)

printf(\"要删除的仓库不存在!!\\n\");

getchar();

return n; }

int AlterRecord(Cangku t[],int n) {

int i,flag=0;

char s[20],ch;

system(\"cls\");

printf(\"请输入要修改的仓库名称\\n\");

scanf(\"%s\",s);

for(i=0;i

{

if(strcmp(s,t[i].name)==0)

{

flag=1;

system(\"cls\");

printf(\"\\n\\n要修改的仓库信息如下:\\n\");

printf(\"\\n\");

printf(\"

*********************************************************************\\n\");

printf(\"

**

编号

名称

面积

说明\\n\");

printf(\"

-------\\n\");

{

printf(\"%17d%13s%20f%14s\\n\",t[i].num,t[i].name,t[i].square,t[i].introdution);

}

printf(\"

*********************************************************************\\n\");

printf (\"\\n\");

printf(\"确定修改仓库信息吗?(Y/N)\\n\");

ch=getchar();

ch=getchar();

if(ch==\'y\'||ch==\'Y\')

{

system(\"cls\");

printf(\"请输入修改后的信息:\\n\");

printf(\"请输入仓库新的名称:\");

scanf(\"%s\",t[i].name);

printf(\"请输入%s仓库新的编号:\",t[i].name);

scanf(\"%d\",&t[i].num);

printf(\"请输入%s仓库新的面积:\",t[i].name);

scanf(\"%f\",&t[i].square);

printf(\"请输入%s仓库新的说明:\",t[i].name);

scanf(\"%s\",t[i].introdution);

}

}

}

if(flag==0)

printf(\"要修改的仓库不存在!!\\n\");

getchar();

return n; }

int AddRecord(Cangku t[],int n) {

int i,m;

system(\"cls\");

printf(\"\\n请输入再增加的记录数:\\n\");

scanf(\"%d\",&m);

printf(\"开始追加记录\\n\");

for(i=n;i

{ system(\"cls\");

printf(\"\\n第%d个仓库的编号:\",i+1);

scanf(\"%d\",&t[i].num);

printf(\"第%d个仓库的名称:\",i+1);

scanf(\"%s\",t[i].name);

printf(\"第%d个仓库的面积:\",i+1);

scanf(\"%f\",&t[i].square);

printf(\"第%d个仓库的说明:\",i+1);

scanf(\"%s\",t[i].introdution);

}

return (n+m); }

void SortOnName(Cangku t[],int n) { int i,j;

struct cangku temp ;

for(j=1;j

for(i=0;i

if((strcmp(t[i].name,t[i+1].name))>0)

{

temp=t[i];

t[i]=t[i+1];

t[i+1]=temp;

}

printf(\"排序成功!!!\\n\");

printf(\"排序后仓库信息列表如下:\\n\");

List(t,n); }

void SortOnSquare(Cangku t[],int n) { int i,j;

struct cangku temp ;

for(j=1;j

for(i=0;i

if(t[i].square

{

temp=t[i];

t[i]=t[i+1];

t[i+1]=temp;

}

printf(\"排序成功!!!\\n\");

printf(\"排序后仓库信息列表如下:\\n\");

List(t,n); }

void SaveRecord(Cangku t[],int n) { int i;

FILE *fp;

if((fp=fopen(\"record.txt\",\"w\"))==NULL)

{

printf(\"不能打开文件!\\n\");

exit(1); }

for(i=0;i

{

fwrite(&t[i],sizeof(struct cangku),1,fp);

}

fclose(fp); }

int LoadRecord(Cangku t[]) {

int n=0;

FILE *fp;

if((fp=fopen(\"record.txt\",\"a+\"))==NULL)

{

printf(\"不能打开文件!\\n\");

exit(1); }

while(fread(&t[n],sizeof(struct cangku),1,fp)) n++;

fclose(fp);

printf(\"从文件中成功读出记录!!!\\n\");

return n; } int LoadRecord1(Cangku t[]) {

int n=0;

FILE *fp;

if((fp=fopen(\"bkrecord.txt\",\"a+\"))==NULL)

{

printf(\"不能打开文件!\\n\");

exit(1); }

while(fread(&t[n],sizeof(struct cangku),1,fp)) n++;

fclose(fp);

printf(\"从文件中成功读出记录!!!\\n\");

return n; } void Save(Cangku t[],int n) { int i;

FILE *fp;

if((fp=fopen(\"bkrecord.txt\",\"w\"))==NULL)

{

printf(\"不能打开文件!\\n\");

exit(1); }

for(i=0;i

{

fwrite(&t[i],sizeof(struct cangku),1,fp);

}

fclose(fp);

printf(\"备份成功.\\n\");

getchar(); }

void Load1(Cangku t[]) {

int n=0;

FILE *fp;

if((fp=fopen(\"bkrecord.txt\",\"a+\"))==NULL)

{

printf(\"不能打开文件!\\n\");

exit(1);

} while

(fread(&t[n],sizeof(struct cangku),1,fp)) n++;

fclose(fp);

getchar(); }

void Load(Cangku t[],int n) { int i;

FILE *fp;

if((fp=fopen(\"record.txt\",\"w\"))==NULL)

{

printf(\"不能打开文件!\\n\");

exit(1); }

for(i=0;i

{

fwrite(&t[i],sizeof(struct cangku),1,fp);

}

fclose(fp);

printf(\"恢复成功.\\n\"); }1

1

第20篇:毕业实习报告仓库管理系统.

毕业实习报告

一、实习目的

信息与计算科学是一门需要实践性的课程,平时大多数时间都在讲理论, 所 以实践的机会是十分重要的并且珍贵的。 为了能更好的把理论与实践相结合, 增 强对 JAVA 语言的应用能力,增强知识运用能力,我们专业在学院的安排下于今 年暑假进行了毕业实习。

二、实习时间

实习时间为 2011-7-4—— 2011-7-23, 主要有学习JAVA 相关知识、分小组做项目、答辩几个阶段组成。

三、实习地点 数学实验室。

四、实验方式

重庆达内软件有限公司兼学院老师指导的校内实习。

五、实习主要内容 1 初期知识积累

实习开始于放假后的几天 在重庆炎热的夏天 在机房虽然有空调但依然很 热。但是值得庆幸的是我们都学到了一些东西 ,这就是俗话说的阳光总在风雨 后吧。

实习的主要内容是 JAVA 的运用。 JAVA 的主要特点是 JAVA 的安全性高,不 能写病毒, 所以适用于金融等对安全性要求较高的行业。 但是病毒可以通过 JAVA 虚拟机写。 JAVA 和 FLASH 一起可以达到很好的页面效果, 单单 JAVA 是做不到的。 数据库和 JAVA 的连接需要在程序中写好代码, 外部用建好的数据库, 只要 设置正确就可以实现数据的调用。 若某些操作可能抛出异常, 则先将其选中, 然 后右

击鼠标—包围方式— try .catch 块,即可自动生成 try -catch 语句。建立 一个类之后, 定义相关的属性, 右击鼠标—源代码—生成 get 和 set 语句, 即可 快速地生成每个属性的 set 与 get 函数, 减少了工作量。 这些简易高效率的操作 也更加证明了 JAVA 作为一门语言的强大。

三层架构在写代码时起到了很重要的作用,一切的工作都需要依附于这一 结构才能够真正地去构建要实现的系统。 它们是组织整个系统的骨骼, 支撑起整 个系统的各项功能。 action 层是返回层, biz 层是业务逻辑层, dao 层是数据访 问层。

Struts 框架工具是 Apache 基金会 Jakarta 项目中推出的一个子项目。 Struts 在英文中是支架、支撑的意思, 这也体现出 Struts 在开发 Web 应用程 序过程所起到的重要作用, Struts 为 Web 应用提供了通用的框架,让开发人 员可以把主要精力集中在如何解决实际业务问题上, 与此同时 Struts 框架也允 许开发人员根据实际需要进行扩展和定制, 从而可以更好的适应用户的需求。 采 用 Struts 可以简化遵循 MVC 设计模式的 Web 应用的开发工作, 很好地实现代 码重用,使开发人员从一些繁琐的工作中解脱出来,快速开发能够充分发挥 JSP/Servlet 优点、并具有强可扩展性的 Web 应用。总之, Struts 的出现使 得 Web 应用的开发过程大大简化,从而能够缩短开发周期、提高开发效率。 Struts 架构一经推出, 即受到 Java 开发群体的广泛重视, 从 2004 年开 始逐渐升温,并日渐成为 Java 创建 Web 应用开发的最流行的框架工具,在目 前 Java Web 程序员的招聘要求中,几乎都提出了对 Struts 的要求,精通 Struts 架构已经成为 Java Web 程序员必备的技能。

2实习中遇到的问题及解决方案

实习前期最重要的是安装软件 又由于学校的机房的电脑的配置不是很好故不 是每一台电脑都可以用的, 所以好多的同学都得带自己的电脑来。 就在这个安装 的过程中问题又是很多种的路劲的问题最多。 最后在老师的帮助下这个问题算是 很快的解决了。 java 对于某些细节的东西要求是很严格的 对于代码是不能出错 的这是绝对的因为如果你出了一点点的小错误可能导致你的整个程序都跑步起 来, 或者是其中某些重要的功能不能实现。 再有对于页面的设置页面之间的跳转 传值字体

的设置是关键虽然这是一个在老师看来是不为问题的问题但还是经常 出错 utf-8这个就是页面上的设置。 是一个很小的细节问题。 这里也体现了 java 细节重要性。

3仓库管理系统的设计过程

实习的最后要求是做一个项目可供选择的项目有 4个,我们小组做的项 目是仓库管理系统。 该系统又又前台和后台组成我主要的分工是做前台页面的设 计, 设计用户的登陆和注册。 在用户表中插入一条管理员的相关信息的记录, 在 登陆界面上用户可以选择登录或者注册。若选择登录,即要输入用户名和密码, 系统要判断输入的用户名是否存在, 密码是否一致。 若满足条件, 则可以顺利登 陆,即页面跳转至显示有用户信息的页面;若选择注册,则跳转至注册页面,用 户需输入各种信息以完成注册。 如果输入合法, 则注册成功并能够跳转至登录页 面。 这一块只是外部的一个框架包括颜色的配比什么的。 主要的内容还是内部的 代码的运用。

物资入库,往一个表中插入物品记录。这个表中的数据记录在数据库当中 这一功能的实现需要用户输入物资名、数量等信息, 这样即可将相应的物资入库。 物资查询,就是将数据库中的数据把要求的在页面显示,这一功能比较容 易实现。点击物资查询的链接后就可以跳至查询界面,并显示物资的各项信息。 库存系统的设计中,各种功能较多,实现的页面跳转尤其多,所以需要一 个主页面,使得操作简单明了,不至于混乱。

主页面要实现把各个部分分块,即先把页面的格局分好,再分别在每一个 小区块中写相应的页面。 有固定的导航块, 所以对各种功能的操作更加容易实现 了。

主页面的外部设计用了学校的主页页面图片看上去比较气氛。我们又在主 页面的最上部加了滚动条这让整个页面显得更加又生气。 中间部分, 左边显示用 户信息, 右上部分是各种操作功能的链接。 在链接处都放上了按钮的图片, 使这 一部风看起来像是按钮图片。 (其实是连接所以有了具有按钮效果的链接,这 是一个小技巧, 因为直接用按钮是实现不了相应的跳转功能的, 只有链接才可以 做到, 于是链接加上按钮的图片就是最好的解决方案了。 右下部分跳转页面, 即 点击链接后, 右下

的页面跳转至相应的页面。 总之, 主页面的设计让一系列复杂 繁琐的操作有了较强的连贯性,使用户使用该系统的舒适感倍增。

刚开始时,实现的物资出库功能没有考虑要出库的数量是否多于库存的数 量, 所以貌似完成的库存系统是一个可以无限出库的系统, 不能满足对系统的安 全性和稳定性的要求。 考虑到上述因素, 又对系统有了进一步的完善, 即增加了 出库时的数量判断。 编写一个判断函数即可满足要求。 输入了出库信息后, 提交 时即判断库存量是否满足需求:若出库量过大, 则显示物品在仓库中不存在。 通 过这一系列的提示即可满足仓库系统的实际性要求。

六、实习总结及体会

一个项目是一个团队的工作一个人不能把一个项目搞定的几时可以那花的 时间也是非常的巨大的还有很多的地方不一定能涉及到。 团队的力量才是最厉害 的俗话说人心其泰山移说的就是这个道理。 再有一点就是我们要充分相信我们的 队友, 我们也要为我们的团队尽自己的最大努力。 我们最终写了一个库存系统虽 然在老师的眼里不是很好但是这个项目也是我们实习里的最好的一个对于我们 来说这个项目是我们以团队做的第一个项目即时它很烂我们也觉得很好因为我 们努力去做了以团队去做了。

对于这个 JAVA 项目它对代码要求很高特别是细节问题。在平时学习的知识 太有限了, 与实际的应用的技能有较大的差距, 我们必须加强相关的训练以增强 编程、网页设计等方面的技能,只有把理论运用到实践才是正真的理会。 。 总的来说, 实习虽然是个艰辛的过程但只有经历风雨我们才能成长经历磨难 错误我们才会成功,这是这个项目教会我的。

《范文 仓库管理系统.doc》
范文 仓库管理系统
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

相关推荐

实施方案自查报告整改措施先进事迹材料应急预案工作计划调研报告调查报告工作汇报其他范文
下载全文