网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

Delphi进销存系统的设计与实现

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
进销存系统的设计与实现
 
 
摘  要:企业进销存系统是一个典型的管理信息系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求应用程序功能完备、易使用等特点。
经过分析,由于Delphi 在开发数据库前端对数据库的强大支持能力及其具有的简洁明快的编程语言、功能强大的组件、灵活方便的编程环境和提供的窗体对快速原型开发的支持,我们以Borland公司的BORLAND DELPHI 6.0作为前端开发工具,以 Microsoft SQL Server 2000作为后台数据库开发工具,系统采用C/S结构。本文以一个企业进销存系统的分析、设计和开发的全过程为主线,给出了企业进销存系统的设计和技术实现过程。
关键词:企业进销存系统   数据库   组件   窗体   C/S结构
Design and Implementation of Stock Sale System
Ding Yang
(Dept. of Computer and Information Science, Southwest Forestry College, Kunming, Yunnan, 650224, China)
Abstract: Enterprise stock sale system is a typical management information system. Its development mainly includes supporter foundation and maintains of the backstage database, and the development of application program of the forestage .As to the former one, it’s required to set up a consistency and integrality strong, security kind database, and as well as the completed application program function and easy characteristic of usage to the later one.
   As a result of analyzing, because of Delphi’s strong support ability to the database while developing the forestage and succinct and lucid programming language, powerful component, flexible and convenient programming environment and the offered support of window body that develops the fast prototype, We decide to use Borland Delphi 6.0 of Borland Company as the developing instrument of forestage together with Microsoft SQL Server 2000 as backstage supporter. The system adopts C/S structure. This text takes a main shaft of analyzing and designing the stock sale system of the enterprise, provides a design and technological procedure of the stock sale system.
Keywords: Enterprise Stock-Sale System    Database   Component   Form    C/S Architecture
 


目    录
 
1引言. 1
2 任务的提出与需求分析. 1
2.1市场背景. 1
2.2中小企业“进、销、存”运作的模式. 1
2.3系统需求. 2
3 系统的技术支持. 2
3.1系统的运行环境. 2
3.2系统的硬件支撑平台. 2
3.2系统的开发技术. 3
3.3.1 SQL Server后台数据库管理系统. 3
3.3.2 Delphi6.0 VCL组件的体系结构. 4
3.3.3 数据库组件介绍. 5
3.3.4 SQL语言在Delphi中的应用. 6
4  总体概要设计. 9
4.1 系统流程图. 10
4.2系统功能分析. 10
4.3总体功能模块图. 11
4.4 总体数据流程图. 11
5 详细设计. 12
5.1 功能模块图. 12
5.2 数据流程图. 13
6 程序设计. 13
6.1执行查询的程序说明. 14
6.2清屏的程序说明. 14
7 调试与测试. 17
7.1 调试计划. 17
 
 
7.2 程序调试内容. 17
7.3 调试中应用的方法. 18
8 总结与测试. 19
8.1 完成情况. 19
8.2 主要实现功能. 19
8.3 待完善的功能. 19
8.4 经验与教训. 19
参考文献. 20
致谢. 21
 

1引言
随着国内经济的高速发展,商品流通企业的数量与日具增。市场上的流通商品琳琅满目、种类繁多。中国加入WTO后,跨国公司纷纷开始抢占市场。如何面对来自全球跨国公司及国内同行之间的激烈竟争。商品流通企业的竟争已不单单是企业规模的竟争,管理及营销观念的竟争,更是一场现代信息技术的竟争,如果不能掌握先进的信息技术管理工具来应对瞬息万变的市场,企业终将在这场竟争中被淘汰出局。
本文开发的进销存系统主要是指用来解决企业商务活动中的商品进货管理、销售管理、库存管理和其它相关业务的软件系统。我们根据市场需求的变化,既考虑了技术上的现实性,又考虑了先进性。
2 任务的提出与需求分析
2.1市场背景
当今的中小企业,一般应具有产品开发、生产、销售、服务的能力,为此企业都设有相应的机构,以管理各个环节的业务。在市场经济中,销售是企业运作的重要环节,一般采用分公司或代理制,通过分公司或代理把产品推向最终用户。销售情况是公司“进、销、存”系统的重要数据来源,以往的办法是通过手工方式把销售单据录入到“进、销、存”系统中(如果公司已经有单机或局域网的“进、销、存”系统)。纵观当前国内大多数中小企业的销售运作现状,不难看出存在着信息传输效率低,可靠、安全、保密性差,缺少全系统统一的数据资源和规范的商务文件运行手段许多信息分散随意存放,缺少一致性、易于丢失、不易重复使用。现在由于 Internet网的发展,这就要求相应开发软件应该从企业自身的实际情况出发,利用Internet 网技术,改善最需改善的商务活动条件,以此作为突破口,带动企业向现代化管理迈进。
2.2中小企业“进、销、存”运作的模式
现代企业一般采用“产、供、销”一体化。在有生产功能的企业中,生产和销售有合一的也有分开的。一些企业不生产产品,但供和销总是有的。中小企业的机
 

构比较单一即便有分支机构或有合作伙伴,也多是独立经营、独立核算,各企业(或机构)多建立独立的、单一的“进、,销、存”系统。企业的“进、销、存”运作一般在总裁(总经理)领导下,涉及商务、采购、库房和财务等部门,这些部门分工明确,紧密配合,支撑着公司“进、销、存”业务的正常运转。这是一种典型的物流管理模式其管理的复杂程度与公司的规模和产品性质有关。
2.3系统需求
本方案将把企业传统的“进、销、存”从静态扩展到动态。所谓静态其实是一种账目管理,通过构造模型,取得账目上“进、销、存”的平衡。而采购或销售的过程该系统并不关心。当系统统计告诉领导“进、销、存”出现了问题,就已经远离了问题出现的间和地点,无法及时挽回损失。如果把整个过程通过系统在网上展现给公司各级领导,实现信息管理自动化,这不仅仅使公司运转效率提高,还由于业务行为的规范化,起码可以挽回一些操作上的失误;还能及时获得(或称动态获得)有关信息,及早发现决策中的问题。本方案正是基于这种思想,提出一个以面向中小企业,具有购销网络系统的“进、销、存”电子商务解决方案。
3 系统的技术支持
3.1系统的运行环境
硬件环境的要求为:
    要求586以上的微型机,内存为64MB,服务器是SQL的网络数据库。
软件环境的要求为:
安装WINDOWS 98或更高的版本,安装SQL 5.0以上的版本。
3.2系统的硬件支撑平台
    该系统采用C/S结构,即客户机/服务器模式。在客户机/服务器应用框架中,客户机负责管理用户界面、接受用户数据,处理应用逻辑,生成数据库服务请求,然后把这些请求发送给服务器,并且接受服务器返回的结果,最后再将这些结果按照一定的格式返回给用户。服务器接受客户机的请求,处理这些请求,返回处理结果给客户机,这些处理结果包括访问数据库的结果数据和执行状态,例如失败或成功。
 

3.2系统的开发技术
3.3.1 SQL Server后台数据库管理系统
本系统的开发选择了SQL数据库。SQL是MS SQL Server简述世界上及国内比较流行的关系数据库管理系统。它适用于中小型事物处理及客户端/服务端结构的应用系统。,它功能强大操作简便,日益为广大数据库用户所喜爱。越来越多的开发工具提供了与SQL Server的接口。SQL Server 是一个关系数据库管理系统,它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的。于1988 年推出了第一个OS/2 版本,在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。
SQL Server 2000 是Microsoft 公司推出的SQL Server 数据库管理系统的最新版本,该版本继承了SQL Server 7.0 版本的优点,同时又比它增加了许多更先进的功能、具有使用方便、可伸缩性好与相关软件集成程度高等优点。可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。MSSQL Server不但可以应用于大中型数据库管理中,建立分布式关系数据库,并且也可以开发桌面数据库。事实上,SQL Server数据库处理的基本结构,采取关系型数据库模式,尽管如此,相信大家都可以轻易的发现,在SQL Server的数据库处理方式,则是使用面向对象的操作方式与精神,也就是说,SQL Server的所有功能,都可以基于系统已经建立好的一些对象来达成,是相当OO(面向对象)的一个系统结构。
SQL Server 企业管理器是 SQL Server 的主要管理工具,它提供了一个遵从 MMC 标准的用户界面,使用户得以:
· 定义 SQL Server 实例组。
· 将个别服务器注册到组中。
· 为每个已注册的服务器配置所有 SQL Server 选项。
· 在每个已注册的服务器中创建并管理所有 SQL Server 数据库、对象、登录、用户和权限。
· 在每个已注册的服务器上定义并执行所有 SQL Server 管理任务。
· 通过唤醒调用 SQL 查询分析器,交互地设计并测试 SQL 语句、批处理和
 

脚本。它支持中小型数据库,多用户的高性能和事物处理,支持分布式数据库和分布处理,能够实现安全性和完整性控制,具有可移植性、可兼容性和可联结性,它具有良好的数据管理能力和良好的开发性。
3.3.2 Delphi6.0 VCL组件的体系结构
Delphi类可以粗略地分成两部分:一部分是组件类,这些组件类通常以某种方式出现在组件面板上,当用户从组件面板上点取一个类的图标后,在程序中就自动生成了该类的对象(非可视组件除外);另一部分是功能类,这此功能类的对象通常出现在程序代码中,起着不可代替的作用,但是这些功能类在组件面板上是找不到的。在Delphi中,每一个类的祖先都是Tobject类,整个类的层次结构就像一棵倒挂的树,在最顶层的树根即为Tobject类。这样,按照面向对象编程的基本思想,就使得用户可用Tobject类这个类型代替任何其它类的数据类型。实际上在Delphi的类库中,Tobject类派生出了为数相当众多的子类,它们形成了一个庞大的体系,通常情况下,如果不自行开发组件,就不必了解整个类的体系结构,只用到类层次树的叶结点就足够了。
这一小节简略介绍一下Delphi 6.0中VCL(可视化组件库)组件的体系结构。凡是做过程序开发的人都知道从来没有单纯的数据应用程序,也就是说,数据库应用程序必须和用户界面(可以是图形界面,也可以是命令接口)元素相结合,只讲界面或只讲数据库本身都构不成数据库应用程序,因而用Delphi 6.0开发数据库应用程序就隐含着界面开发。Delphi6中的VCL组件可用图3-1来说明。
组件在Delphi程序的开发中是最显眼的角色。大家知道,在编写程序时一般都开始于在组件面板上选择组件并定义组件间的相互作用。但也有一些组件不在组件面板上,例如Tform和Tapplication(典型的非可视组件)。组件是Tcomponents派生出来的子类,可以流的形式存放在DFM文件中,具有事件和Publish属性。
窗口组件类是窗口化的可视化组件类,在Delphi的类库中占有最大的份额。在实际编程中,窗口组件类的对象都有句柄,可以接受输入焦点和包含其它组件。图形组件与窗口组件并列,是另一大类组件。图形组件不是基于窗口的,因而不能有窗口句柄,不能接受输入焦点和包含其它组件。从图8-43中可以看出,图形组件的基类是TgraphicControl,在实际编程中,它们必须寄生于它们的宿主——窗口组件类的对象,由它们的拥有者负责其显示,而且它们还能触发一些和鼠标活动相关的
 

事件。图形控件最典型的例子是Tlabel和TspeedButton。由此可以看出图形组件的功能很弱,图形组件的用处何在呢?其实使用图形组件的最大好处在于节省资源,正是因为它们的功能较弱,所以使用的系统资源就要少。在一个应用程序中,如果能在不影响其功能的前提下合理大量地使用图形组件,将会大减少程序对系统资源的消耗。
非可视组件是与可视组件相并列的另一类组件,非可视组件在程序运行中是不可见的(除各种对话框组件之外,事实上有人认为对话框组件不能归入非可视组件,应该是另一种介于可视与非可视之间的组件)。
最后要说明一下,常说的控件实际上是一种组件。也就是说组件这个概念要大于控件,控件在内涵上包含于组件中。控件由Windows系列操作系统提出并使用,而组件是Borland和其它厂商在对Windows控件做了必要的扩展之后提出来的概念,它们是在不同时期由不同的厂商提出的概念。
3.3.3 数据库组件介绍
用Delphi6开发数据库应用,重点是和各种数据库组件打交道,能和数据库挂钩的组件对象有5种,它们是:Session(数据库会话)、Database(数据库)、Dataset(数据集)、DataSource(数据源)、Data control(数据控制组件,也叫data-controls即数据感知组件)。其中前面4种统称为数据访问(Data Access)组件。
ADO组件  Delphi6.0包含了可以用来访问Microsoft公司的ActiveX Data Objects(ADO)格式数据库的组件。ADO是Micrsoft公司关于各种类型数据的高等界面,后来逐渐演变成满足所有数据访问需要的完整解决办法。ADO的对象模型是所有数据访问接口对象模型中最简单的一种。Microsoft公司用来访问ADO数据的应用程序界面技术是OLE DB。OLE DB是一种底层编程接口,用来访问许多不同类型的数据源,其中包括消息、文件系统以及其他一些非传统的数据源。OLE DB是一个由Component Object Model(COM)接口组成的集合,用来隐藏创建数据访问服务过程中的细节。OLEDB提供了访问任何数据资源的方法,包括相互关联的数据库和相互不关联的数据库、Email和文件系统、文本和图形以及用户定义的数据对象。
Delphi的ADO组件无需依靠BDE而是使用ADO技术,提供了可以通过数据控制组件访问数据的新方法。唯一的要求是在使用ADO组件时必须运行ADO/OLE
 

-DB。ADO组件的使用使得DELPHI在访问数据的类型和采用的技术方面都有了很大的突破。
数据模块设计窗口  数据模块设计窗口是用来设计和维护数据模块的。数据模块设计窗口中包含了所有以.DTI作为文件扩展名的Data Diagram文件的信息。DTI文件在编译时不起任何作用。
3.3.4 SQL语言在Delphi中的应用
在Delphi中使用SQL语言非常方便,一般来说,都是通过Tquery或TADOquery组件来使用SQL语言的。可以在Tquery或TADOquery组件的SQL属性中设置SQL语句。设计程序时,在该组件的属性对话框中选择SQL属性,单击带省略号的按钮,就可以打开String List Editor对话框,然后我们就可以在对话框中添加SQL语句。还可以使用Delphi的SQL Builder来自动生成SQL语句,这样可以避免手工编写SQL而可能造成的语法错误。
静态SQL语句在程序设计时便已固定下来,它不包含任何参数和变量。
动态SQL语句,也被称作参数化的语句,在其中间包含着表示字段名或表名的参数,在使用动态SQL语句编程时,常常用到一个很重要的方法Prepare,调用Prepare 方法之后,Delphi会将带参数的SQL语句传送给与其对应的数据库引擎,对动态SQL语句进行语法分析和优化。虽然在用动态SQL语句编程时,调用Prepare方法并不是必须的,但是调用Prepare方法后,会极大地提高动态SQL 语句的执行性能,特别是当要反复多次执行同一条动态SQL语句时,其优越性会更加明显。 如果在应用程序中执行一条SQL语句之前并没有显式地调用Prepare方法,每次在执行   SQL 语句时,Delphi会隐含地调用Prepare方法以准备这个查询。
TadoQuery部件还有一个Prepare属性,这是一个布尔型属性,当其属性值为True时, 表明该查询已被准备好了( SQL 语句已被传送到数据库引擎中 ) , 当我们使用参数编辑器Parameters Editor来为动态SQL语句中的参数赋值时,当设置完相应的参数值并退出参数编辑器时,Delphi会隐含地调用Prepare方法以准备好查询。
当SQL语句执行完之后,要想准备下一个查询,首先必须调用Close方法,然后才能调用Prepare方法准备下一个查询。一般来说,在一个应用程序中应该调用一次Prepare方法,常常在窗体的OnCreate事件处理过程中调用Prepare方法, 然
 

后用上述介绍的方法为参数赋值,最后调用Open方法或ExecSQL方法执行SQL语句,以完成查询。
当然在调用Prepare方法准备好一个查询时,会消耗一些数据库资源, 因而每当一个查询执行完毕之后,要养成调用UnPrepare方法以撤消查询的好习惯。在运行程序过程中,通过程序改变TQuery或TADOquery部件的SQL属性值时,Delphi会自动地调用Close方法和UnPrepare 方法,以撤消查询。
在程序运行过程中,要想设置Tquery或TADOquery部件的SQL属性,必须首先调用Close方法,关闭TQuery或TADOquery部件,然后再调用Clear方法清除SQL属性中现存的SQL命令语句, 最后再调用Add方法为SQL属性设置新的SQL命令语句。
在为TQuery或TADOquery部件设置SQL属性时调用Close方法总是很安全的,如果TQuery或TADOquery部件已经被关闭了,调用Close方法时不会产生任何影响。在应用程序中为SQL属性设置新的SQL 命令语句时,必须要调用Clear方法以清除SQL属性中现存的SQL命令语句,如果不调用Clear方法,便调用Add方法向SQL属性中设置SQL命令语句,那么新设置的SQL命令语句会追加在现存SQL命令语句后面, 在程序运行时常常会出现出乎意料的查询结果甚至程序无法运行下去。
在这里要特别注意的,一般情况下TQuery或TADOquery部件的SQL属性只能包含一条完整的SQL语句,它不允许被设置成多条SQL语句。当然有些数据库服务器也支持在TQuery或TADOquery部件的SQL属性中设置多条SQL语句,只要数据库服务器允许这样,我们在编程时可以为 SQL 属性设置多条SQL语句。在为TQuery或TADOquery部件设置完SQL属性的属性值之后,也即编写好适当的SQL程序之后,可以有多种方式来执行SQL程序。
在设计过程中,设置完TQuery或TADOquery部件的SQL属性之后将其Active属性的值置为True, 这样便可以执行SQL属性中的SQL程序,如果应用中有与TQuery或TADOquery部件相连的数据浏览部件( 如TDDGrid TDBEdit等)那么在这些数据浏览部件中会显示SQL程序的执行结果。
在应用程序运行过程中,通过程序调用TQuery或TADOquery组件的Open方法或ExecSQL 方法可以执行其SQL属性中的SQL程序。Open方法和ExecSQL方
 

法是不一样的。Open方法只能用来执行SQL语言的查询语句(Select命令), 并返回一个查询结果集,而ExecSQL方法还可以用来执行其它常用的SQL语句(如INSERT, UPDATE, DELETE等命令),例如:
 Query1.Open (这样会返回一个查询结果集)
如果调用Open方法,而没有查询结果时,会出错。此时应该调用ExecSQL 方法来代替Open方法。如:
 Query1.ExecSQL (没有返回结果)
当然在设计应用程序时,程序设计人员是无法确定TQuery或TADOquery组件中的SQL 语句是否会返回一个查询结果的。对于这种情况应当用Try…Except模块来设计程序。在 Try 部分调用Open方法,而在Except部分调用ExceSQL方法,这样才能保证程序的正确运行。
例如: 
Try
Query1.Open
Except
Query1.ExecSQL
End
通过Tquery或TADOquery组件可以获得两种类型的数据:
“活动”的数据:这种数据就跟通过TTable部件获得的数据一样,用户可以通过数据浏览部件来编辑修改这些数据,并且当调用Post方法或当焦点离开当前的数据浏览部件时,用户对数据的修改自动地被写回到数据库中。
   非活动的数据(只读数据):用户通过数据浏览部件是不能修改其中的数据。在缺省情况下,通过TQuery部件获得的查询结果数据是只读数据,要想获得“活动”的数据,在应用程序中必须要设置Tquery或TADOquery组件的RequestLive属性值为True,然而并不是在任何情况下(通过设置RequestLive的属值True)都可以获得“活动”的数据的,要想获得“活动”的数据,除了将TQuery部件的RequestLive属性设置为True外,相应的SQL命令还要满足以下条件。
本地SQL语句查询情况下,要得到可更新的数据集,SQL语句的限制为: 若 查询只能涉及到一个单独的表,则有如下条件:
 

1)SQL语句中不能包含ORDER BY命令
2) SQL语句中不能含聚集运算符SUM或AVG
3)在Select后的字段列表中不能有计算字段
4) 在Select语句WHERE部分只能包含字段值与常量的比较运算,这些比较运算符是:Like, >, <, >=, <=。各比较运算之间可以有并和交运算:AND和OR    另外,如果是查询Sybase数据库中的表,那么被查询的表中只能有一个索引。
如果在应用程序中要求TQuery或TADOquery组件返回一个“活动”的查询结果数据集,但是SQL 命令语句不满足上述约束条件时,对于本地数据库的SQL查询,BDE只能返回只读的数据集。对于数据库服务器中的SQL查询,只能返回错误的代码。当Tquery或TADOquery组件返回一个“活动”的查询结果数据集时,它的CanModIfy属性的值会被设置成True。
     
4  总体概要设计
根据用户的具体要求和我们的研究分析,从而决定了整个软件所要实现的功能。
“进销存管理系统”实现的功能实现对客户和供应商的信息管理;货品的进购、库存管理;货单制定与货款交纳的管理;营业额与利润的统计。本系统是一个综合的管理系统,它包括客户管理、供应商管理、物品编码、库存管理、货单录入、货款交纳,成本费用管理、统计。各个部分又包括一些比较具体的东西,比如增加,删除,修改,查询。
 

4.1 系统流程图

图1 系统流程图
4.2系统功能分析
系统开发的总任务是实现各种信息的系统化、规范化、自动化。系统功能分析是在系统开发的总体任务的基础上完成。本进销存管理系统需要完成那个的功能主要有:
1)用户登录模块:为了系统的安全,用户登录必须使用管理员分配的用户名及密码才能进入。
2)客户管理模块:客户管理模块包括增加客户与客户管理两部分。客户管理主要是根据客户的编号、姓名、电话等多种条件组合查询,可选择所需的记录进行删除和修改。删除时将弹出提示对话框,使用者可以根据需要是删除符合条件的一条或全部。
3)供应商管理模块:供应商管理模块具体功能与客户管理模块相似。
4)物品编码模块:同上。
5)库存管理模块:库存管理模块包括物品入库与物品管理两部分。物品管理主
 

要是根据物品的编号、名称、产地、规格、进价等多种条件组合查询,可选择所需的记录进行删除和修改。删除时将弹出提示对话框,使用者可以根据需要是删除符合条件的一条或全部。
6)货单录入模块:货单录入模块包括货单管理与查询两部分。主要是根据货单的编号、客户名称、客户编号、日期等多种条件组合查询,可选择所需的记录进行删除和修改。删除时将弹出提示对话框,使用者可以根据需要是删除符合条件的一条或全部。
7)货款交纳模块:货款交纳模块包括货款的交纳与管理两部分。货款管理是根据发货单号查询,查询了之后可以根据需要对货单的已交货款、所欠货款、本次实付金额等进行修改。也可以删除这条信息。
8)成本费用管理模块:包括业务员管理和公司成本管理。业务员管理包括成本录入,成本查询,成本更改,成本删除四部分。主要用来对业务员进行信息管理。公司成本管理也包括这几个部分,主要用来对公司成本进行管理。
9).统计模块:主要用来统计一些信息。
4.3总体功能模块图






进销存管理系统





管理员登录 
 
 
 
 
 






货单录入





客户管理





供应商管理





物品编码





库存管理





货款交纳





成本费用管理





利润统计 
 
 
 
 
 
图2 总体功能模块图
 

4.4 总体数据流程图






客户名单





客户管理





客户





供应商名单





供应商管理





供应商





物品名单





物品管理





物品编码





库存管理





物品库存





货单管理





货单





货款管理





货款管理





货款交纳





业务员费用





业务员成本管理





业务员成本





公司成本费用





公司成本管理





公司成本





利润统计
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
图3 总体数据流图
5 详细设计
下面具体介绍我所负责的几个模块,我所负责的模块是客户管理模块,供应商管理模块,物品编码模块。
5.1 功能模块图
 


 






进销存系统





管理员登录





客户管理





供应商管理





物品编码管理





增加客户





查询客户





删除客户





修改客户





增加供应商





查询供应商





删除供应商





修改供应商





增加物品编码





查询物品编码





删除物品编码





修改物品编码 
 
 
 
 
 
 
 
 
 
 
5.2 数据流程图
 







客户清单





客户管理





客户基本信息





客户信息统计





供应商清单





供应商管理





供应商信息





供应商信息统计





物品清单





物品编码管理





物品编码信息





物品编码信息统计 
6 程序设计
 

6.1执行查询的程序说明
在管理程序中,查询就需要明确查询条件。该程序的逻辑表达式是根据用户查询条件随机组成,根据问题的需要预先规定若干个供用户选择的条件,允许用户随意输入这些条件或它们的信息组合。用户在查询窗口中输入条件,然后执行检索,程序将实现对用户输入的条件组成逻辑表达式并用于SQL查询语句的WHERE查询条件语句中。
    以客户查询为例,为了方便用户查询,把有关客户信息属性设为各个查询的条件,用户可根据任何一个条件查询,也可选择多个条件组合查询。如按客户信息的某一属性,如姓名、编号、联系人或电话等等,当然也可将这些属性进行组合索检,检索结果将在数据表中显示。
有些属性是可以进行模糊检索的,类似于汉字输入法。例如对姓名检索时,当输入名字的姓氏,结果所有以此姓的记录显示在结果表中,当输入姓名的前两个字,则所有以前两个字开始的记录显示在结果表中。
 
6.2清屏的程序说明
要清屏首先得找到屏幕显示程序的句柄,可调用API函数FINDWINDOW()实现,然后将其设为隐藏,可调用API函数SHOWWINDOW()实现,具体如下:
  h1:= FindWindow('Progman', nil);
  ShowWindow(h1, SW_HIDE);
退出后或将其设为显示: ShowWindow(h1, SW_SHOW);
1)隐藏状态栏的程序说明
  与清屏类似,调用API函数STRPCOPY()实现。
  StrPCopy(@wndClass[0], 'Shell_TrayWnd');
  h1:= FindWindow(@wndClass[0], nil);
  ShowWindow(h1, SW_HIDE);
2)对鼠标的控制,即使其在一定范围内移动。
 PwdFrm.Left:=round(screen.Width/2)-round(PwdFrm.Width/2);
 PwdFrm.Top:=round(Screen.Height/2)-round(PwdFrm.Height/2);
 

theRect:=Rect(label1.left,label1.Top,edit1.Left+edit1.Width,button1.Top+button1.Height);
 //座标换算
 MapWindowPoints(handle,0,theRect,2);
 ClipCursor(@theRect);
 
3)充分利用SQL SERVER提供的存储过程,提高数据的处理能力。
  ①利用存储过程产生获取数据库任意表中的编号
CREATE proc getIdent
 @tableName char(20),
 @tableMaxId int output
as
 select @tableMaxId=ident_current(@tableName)+1
GO
以产生客户编号为例:
 select @Code='C'+Cast(@Mid As char)
②利用存储过程产生添加客户数据,其存储过程如下:
 CREATE proc AddCustomer
 @Name varchar(20),
 @Addr varchar(100),
 @Area_Code char(10),
 @Contact1 varchar(20),
 @Tel char(10)
As
 declare @Code char(10)
 declare @Mid int
 exec getIdent 'TCustomer',
 @Mid Output
 

select @Code='C'+Cast(@Mid As char)
 begin transaction
  insert into TCustomer(C_Code,C_Name,C_Addr,Area_Code,Contact1,C_tel,C_Date)values(@Code,@Name,@Addr,@Area_Code,@Contact1,@Tel,GetDate());
 commit
GO
③操作时,利用回车实现在界面中不同控件中进行切换
可将Form中的KeyPreview的属性设为True,然后在FormKeyPress事件中添加如下代码:
begin
if key=#13 then
    begin
      key:=#0;
      perform(WM_NEXTDLGCTL,0,0);
    end;
end;
④实现在文本框中只能输入数值型数据:
var p:integer;
begin
if key in['0'..'9','.'] then
begin
  if key='.' then
  begin
   p:=Pos('.',edit5.Text);
   if p>0 then key:=#0;
  end;
 end
 else if  key>#31 then key:=#0;
 

end;
 
7 调试与测试
当模块设计完成并经过编译没有错误之后,便要进行调试和测试,这是一个非常重要的环节,只有通过反复调试和测试,才能确保其功能的实现和可靠性,实用性的提高。
7.1 调试计划
本系统的调试工作并不是在所有模块设计完成之后才进行的,当某个模块编译完成之后都要进行调试,这样做的好处是可以及时的发现问题并及时的对其进行解决,避免了当某个模块都设计好后才进行调试,从而出现问题不易解决且做大量的重复性工作。
当所有的功能模块定义完成之后,将它们连于主菜单。这样使得各模块必须经过相互协调,使得系统整个界面更为直观,方便用户的使用。对于运行的个模块,不仅要注意局部,而且要照顾全局进行总体调试。如果调试过程中发现局部影响了全局,则需在最小限度修改的原则上做合理的调整。如果是某个模块的问题,则单独进行修改,是其适应全局的需要。这样多次的反复调试,不断改进,整个系统才可确定为初步正确。
 
7.2 程序调试内容
1)代码测试:调试过程中通常要编写测试数据。测试数据除采用正常数据外,还应包括一些异常数据和错误数据,用来考验程序逻辑上的正确性。测试数据是经过精心挑选的,使用权程序和模块中的每一条语句都有能得到执行,即能够测试程序中的任一逻辑通路。常用的测试数据有以下几种:
    A、用异常数据调试。例如用窭和据文件参加测试,检查程序能否正常运行。
    B、用错误数据调试。试验程序对错误和处理能力,包括显示出信息以及容许修改错误的可能性。具体检查内容有:
输入键号错误时(包括错的键号和不应有的键号)能否及时验出和发出出错
 

l        信息,并允许修改。
l        输入数据错误时(包括错误数据、不合理数据和负数)能否及时验出和发出出错信息,并允许修改。
l        操作错误时(包括磁盘错误、操作步骤或方法错误)能否及时检出并发出警告信息,并允许改正。
2)程序功能测试
经代码测试正确的程序只是基本上验证了程序逻辑上的正确性,但并不能验证是否满足程序说明中定义的功能,也不能验证测试数据本身是否完务。程序功能测试则面向程序应用面向程序应用环境,把程序看做一个“黑盒子”,认为程序只要满足应用功能上的需求,就是可行的。系统的应用软件通常由多个功能模块组成,每个模块由一个或几个程序构成。在单个程序调试完成以后,尚需进行分调,即将一个功能内所有程序按次序串联起来进行调试。这种高度的目的是要保证模块内各程序间具有正确的控制关系,同时可以测试模块的运行效率。最后是对程序进行总调,也就是将主控制和高度程序与各功能模块联接起来进行总体高度。对系统各种可能的使用权用形态及其组合在软件中的流通情况进行能行性测试。这一阶段查出的往往是模块间相互关系方面的错误和缺陷。
 
7.3 调试中应用的方法
在程序调试中,主要采用了三种调试方法。
1) 利用系统的编译器进行调试,编译时如果有错误,则根据错误的提示信息有针对性的修改。
2)用MESSAGEBOX()函数进行调试,在可能出现错误或有疑问的地方,用MESSAGEBOX()输出信息,从而来测试它后面的语句是否可以执行。如果没有显示出消息框,则说明它下面的语句没有执行。
3)用设置断点的方法进行调试,通过设置断点可以查看变量的值是否变化,由此来判断程序是否执行。
 

8 总结与测试
8.1 完成情况
    经过比较短暂的时间进行系统测试,基本上实现了“进销存管理系统”的说明书中所规定的各项功能。当然,由于时间和自身水平的原因,软件还有许多有待完善的地方,还存在很多问题与缺陷。
8.2 主要实现功能
    (1)实现了对客户员的信息进行统一管理;
    (2)实现了对供应商的信息进行统一管理;
    (3)实现了物品编码的管理;
    (4)具备了友好的人机界面和易操作性。
8.3 待完善的功能
    1)对输入的数据校验深度不够,如不合理的数据、数据字长超过限定等等;
    2)金额的统计只是单纯的录入,没有充分利用计算机自行处理,造成这样的问题是对软件说明的不够了解,对业务上流程不够明确的金额的统计表达式不够明确等等。
3)缺少利润统计、报表的打印、数据的还原与备份。
8.4 经验与教训
通过这套软件的开发设计,使我在理论和实践上都增长了很多经验。不但在理论上提高了我的软件设计能力和丰富了我的思维方法,而且在实践上我也深刻地认识到“没有调查就没有发言权”这句话的深刻含义,并且认识到了大量的切磋协商都是设计好这一套软件的保障。同时,我也总结出了一些教训,例如在设计过程考虑问题不全面、专业知水平不足、对数据库设计理论还没有达到深刻理解等,以至在系统设计过程中出现了不少问题。
 

参考文献
[1] 伍俊良.C++Builder和Delphi课程设计与系统开发案例[M].北京:清华大学出版社.
[2] 刘艺.Delphi6企业级解决方案及应用剖析[M].北京:机械工业出版社.
[3] 汤庸.Delphi6程序设计基础教程[M].治金工业出版社.
[4] 同志工作室.Delphi5数据库开发实例[M].人民邮电出版社.
[5] 李小喆.SQL Server2000管理及应用系统开发[M].人民邮电出版社.
[6] 孙慧.数据库设计技术SQL Server [M].北京希望出版社.
[7] 东方人华.SQL Server 2000与Visual Basic.NET数据库入门与提高[M].清华大学出版社.
[8] 李香敏,徐进.SQL Server 2000 Programmer’s Guide编程员指南[M].北京:北京希望电子出版社,2000,12.
[9] Craig Eddy,Timothy Buchanan.中文Access 2000 24学时教程[M].北京:机械工业出版社,2002.
[10] 魏志强,王忠华等.Delphi5.0程序设计——数据库应用实务篇[M].北京:中国铁道出版社,2000,1
 
 
 
 
 
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师