文档库 最新最全的文档下载
当前位置:文档库 › vb企业进销存管理系统

vb企业进销存管理系统

vb企业进销存管理系统
vb企业进销存管理系统

【摘要】

进入二十一世纪以来,随着社会的不断进步和科学技术的飞速发展,信息技术进入了爆炸式的年代,信息技术与人们的生活工作已息息相关、密不可分。计算机局域网、办公自动化已成为各大小企事业单位提高工作效率、简化工作流程、创造更大经济效益的重要手段。

随着计算机在企业管理中应用的普及,利用计算机实现企业的各种管理工作势在必行。而企业生产制造的关键在于如何规划和计划各种资源在时间、地点、产品之间的合理配备,如何按计划监督责任方对资源的使用情况,如何根据预测和历史情况为决策者提供更有效地利用资源的分析数据。本系统结合工业企业的生产中的特点经过实际的需求分析,采用功能强大的Visual Basic6.0 和SQL Server 2000 作为开发工具而开发出来的企业进销存管理系统。

本系统是典型的信息管理系统(MIS), 其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备, 易使用等特点。

该系统的数据库使用了SQL Server 2000。程序的设计使用了具有一系列崭新功能的传统数据库开发工具Visual Basic 6.0 。系统的主要功能是制定采购计划、物料需求计算、材料供求分析。并设计了几个小模块,以实现数据的处理、查询、统计及维护等功能。

Visual Basic 的强大功能中数据窗口技术由于其简单、直观、功能强大等特点成为本系统使用最多的技术。由于Visual Basic 采用的是Client/Server 的体系结构,所以本系统可以在局域网上运行以适应需求。

因时间关系以及自身水平的限制,本系统的制作并不完善,所以难免有错误之处,请老师批评指正。

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

关键词:SQL Server 2000 数据库,Visual Basic6.0 ,基本信息管理

、八、,

前言

进入二十一世纪以来,随着社会的不断进步和科学技术的飞速发展,信息技术进入了爆炸式的年代,信息技术与人们的生活工作已息息相关、密不可分。计算机局域网、办公自动化已成为各大小企事业单位提高工作效率、简化工作流程、创造更大经济效益的重要手段。

随着计算机在企业管理中应用的普及,利用计算机实现企业的各种管理工作势在必行。而企业生产制造的关键在于如何规划和计划各种资源在时间、地点、产品之间的合理配备,如何按计划监督责任方对资源的使用情况,如何根据预测和历史情况为决策者提供更有效地利用资源的分析数据。

我们经过分析研究,为了能使本系统能够与现有系统更好地接轨,采用了目前使用率最高、保密性好的数据库系统—SQL Server 2000 数据库,并选择了Visual Basic 6.0 作为前台数据库开发工具。

SQL Server是数据库技术的倡导者和先驱,是标准SQL数据库语言的产品。自从推出以来,它受到社会的广泛注意。近二十年来,SQL不断将先进的数据库技数融入其中,并极有预见性地领导着全球数据库技术的发展。SQL Server

2000 在数据库管理、数据完整性检查、数据库查询功能、数据库安全性方面都具有强大的功能,而且它还在保密机制、备份与恢复、空间管理、开放式联接以及开发工具方面提供了不同的手段和方法。

Visual Basic 是目前广泛流行的一种面向对象的、具有可视化图形界面的快速交互式数据库前台开发工具,它支持客户/ 服务器机制、分布式组件开发与因特网应用。利用它既可以开发功能强大的、运行在多个平台的、能够操作多个数据库的应用系统,还可以开发客户/ 服务器、分布式、因特网应用系统。

本系统中,我们利用SQL Server 数据库创建应用数据库,建立表空间和表,利用Visual Basic 前台开发工具,由于本系统是要应用于局域网上,所以建立与SQL数据库的连接是本系统的第一个重要环节,我们发现直接使用ADC对象要比工具容易多,因此我们使用

ADO对象模型进行数据库的连接。建立与SQL Server 数据库的连接后,利用各类管理画笔窗口和Visual Basic 语言,开发一系列功能模块,实现了对数据库数据进行生成、处理、查询、统计及字典维护等一系列功能,并能将新生成的数据制作成报表,以实现我们的设计思想。

通过我们大家的共同努力和指导老师的帮助,我们完成了整个系统的设计开发,基本实

由于时间关系和自身的水平,我们的设计并不完善,其中也难免有错误之处,也请各位老师给予批评和指导。

第一章绪论

随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业的生产管理势在必行。对于大中型企业来说,利用计算机支持企业高效率完成生产管理的日常事务,是适应现代企业制度要求、推动企业生产走向科学化、规范化的必要条件;而企业生产制造的关键在于如何规划和计划各种资源在时间、地点、产品之间的合理配备,如何按计划监督责任方对资源的使用情况,如何根据预测和历史情况为决策者提供更有效地利用资源的分析数据。而生产管理是一项琐碎、复杂而又十分细致的工作,产品的供应、销售、统计、发放的工作量很大,一般不允许出错,如果实行手工操作,每月须手工填制大量的表格,这就会耗费工作人员大量的时间和精力,计算机进行生产管理工作,不仅能够保证产品各种信息准确无误、快速输出,而且还可以利用计算机对有关产品的各种信息进行统计,服务于财务部门其他方面的核算和财务处理,同时计算机具有着手工管理所无法比拟的优点. 例如: 检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高生产管理的效率, 也是企业的科学化、正规化管理, 与世界接轨的重要条件。

经过我们一段时间的调查研究,资料搜集分析并结合工业企业现在的生产管理状况,我们发现现有软件虽然具有传递功能,但是在数据处理、数据统计、数据汇总上存在一定的缺陷,于是我们决定尝试开发一个系统来弥补这些缺陷。结合我们目前的现有条件设备,我们采用了SLQ Server 2000 数据库系统和

Visual Basic 6.0 数据库开发工具,设计开发了《企业进销存管理系统》,开发了数据生成、数据汇总、数据查询、数据统计和维护等几个小模块,可以从现有数据中提取企业生产制造的专用数据,进行分类汇总,生成每日报表和每月报表。

1.2 开发工具的选择

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

Microsoft 公司的Visual Basic

Microsoft 公司的SQL Server 2000

Microsoft 公司的ActiveX Data Objects

Visual Basic 是一种可视化的、面向对象和条用事件驱动方式的结构化高级程序设计,可用于开发Windows环境下的各类应用程序。它简单易学、效率高,且功能强大。在Visual Basic 环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部

总的来说,Visual Basic 具有以下特点:

可视化编程:用传统程序设计语言设计程序时,都是通过编写程序代码来设计用户界面,在设计过程中看不到界面的实际显示效果,必须编译后运行程序才能观察。如果对界面的效果不满意,还要回到程序中修改。有时候,这种编程-编译-修改的操作可能要反复多次,大大影响了软件开发效率。Visual Basic 提供了可视化设计工具,把Windows界面设计的复杂性“圭寸装”起来,开发人员不必为界面设计而编写大量程序代码。只需要按设计要求的屏幕布局,用系统提供的工具,在屏幕上画出各种“部件”,即图形对象,并设置这些图形对象的属性。Visual Basic 自动产生界面设计代码,程序设计人员只需要编写实现程序功能的那部分代码,从而可以大大提高程序设计的效率。

面向对象的程序设计

4.0 版以后的Visual Basic 支持面向对象的程序设计,但它与一般的面向对象的程序设计语言(C++)不完全相同。在一般的面向对象程序设计语言中,对象由程序代码和数据组成,是抽象的概念;而Visual Basic 则是应用面向对象的程序设计方法,把程序和数据圭装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西。在设计对象时,

不必编写建立和描述每个对象的程序代码,而是用工具画在界面上,Visual Basic 自动生成对象的程序代码并圭装起来。每个对象以图形方式显示在界面上,都是可视的。

结构化程序设计语言

Visual Basic 是解释型语言,在输入代码的同时,解释系统将高级语言分解翻译成计算机可以识别的机器指令,并判断每个语句的语法错误。在设计Visual Basic 程序的过程中,随时可以运行程序,而在整个程序设计好之后,可以编译生成可执行文件(.EXE),脱离Visual Basic环境,直接在Windows环境下运行。

事件驱动编程机制

在用Visual Basic 设计大型应用软件时,不必建立具有明显开始和结束的程序,而是编写若干个微小的子程序,即过程。这些过程分别面向不同的对象,由用户操作引发某个事件来驱动完成某种特定的功能,或者由事件驱动程序调用通用过程来执行指定的操作,这样可以方便编程人员,提高效率。

访问数据库

Visual Basic 具有强大的数据库管理功能,利用数据控件和数据库管理窗口,可以直接建立或处理Microsoft Access 格式的数据库,并提供了强大的数据存储和检索功能。同时,Visual Basic 还能直接编辑和访问其他外部数据库,如dBASE,FoxPro,Paradox 等,这些数据库格式都可以用Visual Basic 编辑和处理。

Visual Basic 提供开放式数据连接,即ODBCS能,可通过直接访问或建立连接的方式使用并操作后台大型网络数据库,如SQL Server ,Oracle 等。在应用程序中,可以使用结构化查询语言SQL数据标准,直接访问服务器上的数据库,并提供了简单的面向对象的库操作指令和多用户数据库访问的加锁机制和网络数据库的SQL的编程技术,为单机上运行的数据库提供了SQL网络接口,以便在分布式环境中快速而有效地实现客户/ 服务器

(client/server) 方案。

对象的链接与嵌入(OLE)

对象的链接与嵌入(OLE)将每个应用程序都看做是一个对象(object),将不同的对象链接(link)起来,再嵌入(embed)某个应用程序中,从而可以得到具有声音、影像、图像、动画、文字等各种信息的集合式的文件。OLE技术是Microsoft 公司对象技术的战略,它把多个应用程序合为一体,将每个应用程序看做是一个对象进行链接和嵌入,是一种应用程序一体化的技术。利用OLE技术,可以方便地建立复合式文档(compound document),这种文档由来自多个不同应用程序的对象组成,文档中的每个对象都与原来的应用程序相联系,并可执行与原来应用程序完全相同的操作。

Visual Basic 应用程序中,可以像调用内部函数一样调用其他语言编写的函数。此外,通过动态链接库,还可以调用Windows应用程序接口(API) 函数。

SQLServer 2000是在SQLServer 7.0 的基础上扩展升级的产品。SQLServer 7.0 是Microsoft 公司在数据库领域中非常重要的产品,它具有非常好的再造和重写特性。SQL Server 7.0 以良好的性能、稳定性、便于管理和易于开发的优势。

SQL Server 2000 继承了数据软件设计和引擎方面的优势,已经成为新一代网络应用程序的最佳数据库和分析解决方案之一。作为https://www.wendangku.net/doc/0d4215246.html, Enterprise Server 的核心组件,它将减少电子商务、在线商务和数据仓储应用程序推向市场的时间,并对需要的环境提供可靠的支持。SQLServer 2000对XML 和HTTP提供充分的支持;提供分割装载和确保时间的特性;提供先进的管理和协调机制,可以自动管理线程任务,降低总体开销。除此而外SQL Server 2000 充分的利用了Windows 2000的功能。

ActiveX Data Objects 是Microsoft 公司应用Universal data Access 的一种方式。Universal data Access 允许用户为相关和非相关数据使用同一高速界面,同时还可以提供一个使用简单、语言独立的界面。

在我们的此次设计中我们应用了ADC中的对象有:Comma nd(运行SQL语句或存储过程)、Conn ection (用于管理连接数据库或其他OLEDB数据提供者所需要的信息)、Error (包含特定错误的有关信息)、Errors (包含一个Error 对象集合)、Field (包含数据库中特定字段的信息)、Fields (包含一个Field对象的集合)、Record (说明Recordset对象、文件或电子邮件信息中的一个数据行)、Recordset (用于管理询问操作产生的行组)。

在ADO对象模型中,主要有三个用于数据库访问的对象:Connection对象

提供了一个通向数据源的途径,Comman对象包含了执行SQL语句或存储过程所需要的信息,Record对象包含了询问的结果。如果需要,Comman和Rrcordest 对象能够创建一个绝对的Connection 对象,所以仅通过创建一个单一的对象就可以访问一系列的记录或运行数据库函数。

Record 和Steram 对象主要被用来支持访问非数据露资源。Record 对象代表记录集中的一个数据行,也代表一个文件或一条电子邮件信息中的数据行;Stream 对象为控制文件或电子邮件信息中的数据提供了便利的条件。

Record 对象用于说明诸如此类的信息:文件系统中的子目录和文件、电子邮件系统中的文件夹或信息。Record 对象也可以用来说明Recordset 对象中的数据行。

Steram 对象用于对Record 对象相关信息和文件的二进制信息进行读写。

具,数据库技术的比较。

第二章结合软件工程方法, 对系统进行需求分析、功能划分、数据流图设计,并结合数据库原理和功能划分进行ER图的绘制、数据库结构设计,

第三章根据需求分析的结果,用户概念数据模型表示数据及其相互间的联系。

第四章根据需求分析的结果,对系统进行详细设计,主要介绍用Visual Basic6.0 实现每一个模块的具体功能。

第五章毕业设计小结,总结部分介绍了设计体会和编程体会,并指出了系统设计中的不足和改进的方向。

第二章需求分析

2.1总体需求调查

2.1.1组织结构图

2.1.2系统目标

本系统是根据工业企业的生产过程,控制生产过程中的材料消耗,产品销售, 销售成本等数据,具体管理范围包括材料采购,材料库存,生产计划,生产控制, 物料需求,产品购进,产品销售,产品产出等。

2.1.3核心任务

本系统的主要功能是制定生产/采购计划,物料需求计算,材料供求分析,其核心任务是:降低材料成本,降低库存成本,缩短生产/采购周期,如何获得

更咼的利润。

2.1.4业务总体流程调

产品类别信息,包括的数据项有:类别编号,类别名称。

产品信息,包括的数据项有:产品编号,产品名称,计量单位,类别,入库价格,分销价格,零售价格,生产厂家,更新日期,备注信息等。

客户信息,包括的数据项有:客户编号,客户名称,地址,由E政编码,电话号码,公司主页,电子邮件地址,税号,银行账户,开户银行,联系人,备注信息等。

供应商信息,包括的数据项有:供应商编号,供应商名称,地址,邮政编码, 电话号码,公司主页,电子邮件地址,税号,开户银行,联系人,备注信息等。

业务员类别信息,包括的数据页有:类别编号,类别名称等。

业务员信息,包括的有数据项:业务员员编号,业务员姓名,类别,电话号码,家庭住址,身份证号码,备注信息等。

仓库信息,包括的数据项有:仓库编号,仓库名称。

进货订单信息,包括的数据项有:订货日期,编号,业务员,供应商编号,产品编号,数量,单价,折扣比例,总金额,备注信息等。

入库单信息,包括的数据项前:入库日期,编号,业务员,供应商编号,产品编号,数量,单价,折扣比例,总金额,是否是即时付款,是否记账,预付比例,备注信息等。

销售出货单信息,包括的数据项有:销售日期,编号,业务员,客户编号,产品编号,数量,单价,折扣比例,总金额,是否即时付款,是否记帐,预付比例,备注信息等。

库存信息,包括的数据项有:更新日期,编号,仓库编号,产品编号,数量, 单价,总金额,备注信息等。

转仓信息,包括的数据项有:转仓日期,编号,业务员,转出仓库的编号,转入仓库的

编号,产品编号,数量,总金额,备注信息等。

2.2系统功能调查

系统开发的总体任务是实现各种住处的系统化,规范化和自动化

系统功能分析是在系统开发的总体任务的基础上完成。工业企业进销存系统需要完成的功能主要有:

2.2.1基本信息管理

2.2.2进货信息管理

包括订货单的管理,入库单的管理以及进货信息的查询等。

2.2.3销售信息的管理

包括销售单的管理以及销售信息的查询等。

2.2.4库存信息的管理

包括转仓单的管理,产品盘点和转仓信息的查询等。

2.3系统功能模块图

第三章数据库的设计

3.1 数据库设计概述

数据库设计是建立数据库及其应用系统的技术,是信息系统开发和建设中的核心技术,是指对于一个给定的环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求。

骤:

(一)需求分析;(二)数据库的逻辑结构设计

3.2 需求分析

上章我们已经做了详细的分析在此不在进行说明了。

3.3 数据库的逻辑结构设计

概念结构设计就是将需求分析得到的用户需求抽象为信息结构即概念模型的过程。它是整个数据库设计的关键。本系统采用自底向上方法,即自顶向下进行需求分析,然后在自底向上底设计概念结构。

逻辑结构设计的任务就是把设计好的基本E-R图转换为与选用DBM产品所支持的数据模型相符合的逻辑结构。在这一阶段我们上一阶段所设计的各实体及属性就转换为新数据库中各个表中的记录的数据项。由于我们使用的关系型数据库SQL Server 2000 ,所以概念结构转化关系模型,再进行特定的转换成为SQL 所支持的数据模型,再进行优化。

我们根据数据库的需求分析和概念结构设计,设计了我们所需的数据库。数据库由下面多个表格组成,各个表格的设计结果如下面表格所示。每个表格表示在数据库的一个表。

3.4 数据库的实现

创建数据库和存储过程如下:

1. 创建进货定单表

CREATE TABLE [dbo].[dh] (

[in_date] [datetime] NULL ,

[ywman] [char] (8) COLLATE Chinese_PRC_CI_AS NULL , [dh_no] [char] (8)

COLLATE Chinese_PRC_CI_AS NOT NULL , [gfdm] [char] (8) COLLATE

Chinese_PRC_CI_AS NULL , [wzdm] [char] (30) COLLATE

Chinese_PRC_CI_AS NOT NULL , [sl] [numeric](10, 0) NOT NULL , [in_danj]

[numeric](12, 2) NULL , [i_zk] [numeric](5, 0) NULL , [i_zke] [numeric](12, 2)

NULL ,

[bz] [char] (100) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

2. 创建仓库表

CREATE TABLE [dbo].[dm_ck] (

[dm] [char] (6) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[mc] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,

[bz] [char] (255) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO

3. 创建供应商表

CREATE TABLE [dbo].[dm_gf] (

[dm] [char] (8) COLLATE Chinese_PRC_CI_AS NOT NULL , [mc] [char] (40) COLLATE Chinese_PRC_CI_AS NULL , [addr] [char] (40) COLLATE

Chinese_PRC_CI_AS NULL , [sui_no] [char] (20) COLLATE Chinese_PRC_CI_AS NULL , [bank_no] [char] (20) COLLATE Chinese_PRC_CI_AS NULL , [bank] [char] (30) COLLATE Chinese_PRC_CI_AS NULL , [ywman] [char] (8) COLLATE Chinese_PRC_CI_AS NULL , [bz] [char] (255) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO

4. 创建客户表

CREATE TABLE [dbo].[dm_kh] (

[dm] [char] (8) COLLATE Chinese_PRC_CI_AS NOT NULL , [mc] [char] (40) COLLATE Chinese_PRC_CI_AS NULL , [addr] [char] (40) COLLATE

Chinese_PRC_CI_AS NULL , [yzbm] [char] (6) COLLATE Chinese_PRC_CI_AS NULL ,

[tel] [char] (40) COLLATE Chinese_PRC_CI_AS NULL , [itladd] [char] (50)

COLLATE Chinese_PRC_CI_AS NULL , [ywman] [char] (8) COLLATE

Chinese_PRC_CI_AS NULL , [email] [char] (50) COLLATE

Chinese_PRC_CI_AS NULL , [sui_no] [char] (20) COLLATE

Chinese_PRC_CI_AS NULL , [bank_no] [char] (30) COLLATE

Chinese_PRC_CI_AS NULL , [bank] [char] (30) COLLATE

Chinese_PRC_CI_AS NULL , [card_no] [char] (13) COLLATE

Chinese_PRC_CI_AS NULL , [mb_reb] [numeric](12, 2) NULL ,

[bz] [char] (255) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO 5.创建产品信息表

CREATE TABLE [dbo].[dm_wz] (

[dm] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL , [mc] [char] (40) COLLATE Chinese_PRC_CI_AS NULL , [jldw] [char] (8) COLLATE

Chinese_PRC_CI_AS NULL , [lb] [char] (30) COLLATE Chinese_PRC_CI_AS NULL , [rkj] [numeric](12, 2) NULL , [fxj] [numeric](12, 2) NULL , [lsj]

[numeric](12, 2) NULL ,

[cj] [char] (20) COLLATE Chinese_PRC_CI_AS NULL , [yxrq] [datetime] NULL , [bz] [char] (255) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO 6.创建产品类别表

CREATE TABLE [dbo].[dm_wzlb] ( [lbcode] [char] (30) COLLATE

Chinese_PRC_CI_AS NULL , [lb] [char] (30) COLLATE Chinese_PRC_CI_AS NULL , [bz] [char] (255) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

7.创建业务员表

CREATE TABLE [dbo].[dm_ywy] (

[dm] [char] (6) COLLATE Chinese_PRC_CI_AS NOT NULL , [mc] [char] (20) COLLATE Chinese_PRC_CI_AS NULL , [lb] [char] (30) COLLATE

Chinese_PRC_CI_AS NULL , [tel] [char] (40) COLLATE Chinese_PRC_CI_AS NULL , [addr] [char] (40) COLLATE Chinese_PRC_CI_AS NULL , [sfz] [char]

GO

8. 创建业务员类别表

CREATE TABLE [dbo].[dm_ywylb] (

[lbcode] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL , [lb] [char] (30) COLLATE Chinese_PRC_CI_AS NULL , [bz] [char] (255) COLLATE

Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

9. 创建进货单表

CREATE TABLE [dbo].[inh] (

[in_date] [datetime] NULL ,

[ywman] [char] (8) COLLATE Chinese_PRC_CI_AS NULL , [inh_no] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL , [gfdm] [char] (8) COLLATE

Chinese_PRC_CI_AS NULL , [ckdm] [char] (6) COLLATE Chinese_PRC_CI_AS NULL , [wzdm] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL , [sl] [numeric](10, 0) NOT NULL , [in_danj] [numeric](12, 2) NULL , [i_zk]

[numeric](5, 0) NULL , [i_zke] [numeric](12, 2) NULL ,

[jsfk] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ,

[jz] [char] (2) COLLATE Chinese_PRC_CI_AS NULL ,

[yf] [numeric](5, 0) NULL ,

[bz] [char] (100) COLLATE Chinese_PRC_CI_AS NULL ,

[bz1] [char] (10) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

10. 创建库存表

CREATE TABLE [dbo].[kucun] ( [update_date] [datetime] NULL , [kucun_no] [char]

(14) COLLATE Chinese_PRC_CI_AS NOT NULL , [ckdm] [char] (6) COLLATE

Chinese_PRC_CI_AS NULL , [wzdm] [char] (30) COLLATE

Chinese_PRC_CI_AS NOT NULL , [sl] [numeric](10, 0) NOT NULL , [total_je] [numeric](12, 2) NULL

) ON [PRIMARY]

GO

11. 创建销售单表

CREATE TABLE [dbo].[outh] (

[out_date] [datetime] NULL ,

[ywman] [char] (8) COLLATE Chinese_PRC_CI_AS NULL ,

[outh_no] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,

[khdm] [char] (8) COLLATE Chinese_PRC_CI_AS NULL ,

[ckdm] [char] (6) COLLATE Chinese_PRC_CI_AS NULL , [wzdm] [char] (30) COLLATE Chinese_PRC_CI_AS NOT NULL , [sl] [numeric](10, 0) NOT NULL , [out_danj] [numeric](12, 2) NULL ,

[o_zk] [numeric](5, 0) NULL ,

[o_zke] [numeric](12, 2) NULL ,

[bz] [char] (100) COLLATE Chinese_PRC_CI_AS NULL ,

[bz1] [char] (100) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

12. 创建转仓表

CREATE TABLE [dbo].[zc] (

[zc_no] [char] (8) COLLATE Chinese_PRC_CI_AS NOT NULL , [zc_date]

[datetime] NULL ,

[ywman] [char] (8) COLLATE Chinese_PRC_CI_AS NULL , [o_ckdm] [char] (6) COLLATE Chinese_PRC_CI_AS NULL , [i_ckdm] [char] (6) COLLATE

Chinese_PRC_CI_AS NULL , [wzdm] [char] (30) COLLATE

Chinese_PRC_CI_AS NOT NULL , [sl] [numeric](10, 0) NOT NULL ,

[total_je] [numeric](12, 2) NULL ,

[bz] [char] (100) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

13. 创建销售订单表

CREATE TABLE [dbo].[xsdh] (

[out_date] [datetime] NULL ,

[ywman] [char] (8) COLLATE Chinese_PRC_CI_AS NULL , [xsdh_no] [char] (8) COLLATE Chinese_PRC_CI_AS NOT NULL , [khdm] [char] (8) COLLATE

Chinese_PRC_CI_AS NULL , [wzdm] [char] (30) COLLATE

Chinese_PRC_CI_AS NOT NULL , [sl] [numeric](10, 0) NOT NULL ,

[out_danj] [numeric](12, 2) NULL ,

[o_zk] [numeric](5, 0) NULL ,

[o_zke] [numeric](12, 2) NULL ,

[bz] [char] (100) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

14. 创建使用者信息表

CREATE TABLE [dbo].[user_info] ( [user_id] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [user_pwd] [char] (10) COLLATE

Chinese_PRC_CI_AS NULL , [user_des] [char] (10) COLLATE

Chinese_PRC_CI_AS NULL

) ON [PRIMARY]

GO

15.创建仓库存储过程

CREATE PROCEDURE ck_setup

(@dmchar (6),@mc char (40),@bz char (255)) AS inserdm_ck(dm,mc,bz) values (@dm,@mc@bz)

GO

16. 创建进货设置存储过程

CREATE PROCEDURE dh_setup

(@in_date datetime, @ywmanchar (20),@dh_no char (8),@gfdm char (8),@wzdm

insert dh

(in_date,ywman,dh_no,gfdm,wzdmslin_danj,i_zk,i_zke,bz)

values

(@in_date,@ywman,@dh_no,@gfdm,@wzdm,@sl,@in_danj,@i_zk,@i_zke@bz) GO

17. 创建客户信息存储过程

CREATE PROCEDURE gf_setup

(@dm char (8),@mc char (40),@addr char (40),@yzbm char (6), @tel char (40),@itladd char (50),@email char (50),@sui_no char (20),@bank_no char (20),@bank char (30),@ywman char(8),@bz char (255))

AS

insert dm_gf

(dm,mc,addr,yzbm,tel,itladd,email,sui_no,bank_no,bank,ywman,bz)

values

(@dm,@mc,@addr,@yzbm,@tel,@itladd,@email,@sui_no,@bank_no,@bank,@ ywman,@bz)

GO

18. 创建入库单存储过程存储(按业务员)

CREATE PROCEDURE inh_inquire_ywy

(@ywman char (8),@b_date datetime,@e_date datetime)

as

select inh.in_date,inh.ywman,inh.inh_no,dm_gf.dm,dm_gf.mc,dm_ck.dm,dm_ck.mc, dm_wz.dm,dm_wz.mc,inh.sl,inh.in_danj,inh.i_zk,inh.i_zke,inh.jsfk,inh.

jz,inh.yf,inh.bz

from inh

inner join dm_gf on inh.gfdm = dm_gf.dm

inner join dm_ck on inh.ckdm = dm_ck.dm

inner join dm_wz on inh.wzdm = dm_wz.dm

where inh.ywman = @ywmaannd in_date >= @b_dateandin_date <= @e_date GO 19. 创建入库单存储过程

CREATE PROCEDURE inh_setup

(@in_date datetime,@ywman char (20),@inh_no char (8),@gfdm char (8),@ckdm char (6),@wzdmchar (30),@sl numeric (10),@in_danj numeric(12, 2),@i_zk numeric(5, 0),@i_zke numeric(12, 2),@jsfk char (2),@jz char (2) ,@yf numeric (5,0),@bz char (100))

AS

insert inh

(in_date,ywman,inh_no,gfdm,ckdm,wzdm,sl,in_danj,i_zk,i_zke,jsfk,j z,yf,bz)

values

(@in_date,@ywman,@inh_no,@gfdm,@ckdm,@wzdm,@sl,@in_danj,@i_zk,@i_ zke,@jsfk,@jz,@yf,@bz)

GO

20. 创建客户存储过程

CREATE PROCEDURE kh_setup

(@dm char (8),@mc char (40),@addr char (40),@yzbm char (6), @tel char

AS

insert dm_kh

(dm,mc,addr,yzbm,tel,itladd,ywman,email,sui_no,bank_no,bank,card_

no,mb_reb,bz)

values

(@dm,@mc,@addr,@yzbm,@tel,@itladd,@ywman,@email,@sui_no,@bank_no, @bank,@card_no,@mb_reb,@bz)

GO

21. 创建库存存储过程

CREATE PROCEDURE kucun_setup

(@update_date datetime,@kucun_no char (14),@ckdm char (6),@wzdmchar (30),@sl numeric (10),@total_je numeric(12, 2)

AS

insert kucun

(update_date,kucun_no,ckdm,wzdm,sl,total_je)

values

(@update_date,@kucun_no,@ckdm,@wzdm,@sl,@total_je)

GO

22. 创建销售单存储过程

CREATE PROCEDURE outh_setup

(@out_date datetime,@ywman char (20),@outh_no char (8),@khdm char

(8),@ckdm char (6),@wzdmchar (30),@sl numeric (10),@out_danj numeric(12,

2),@o_zk numeric(5, 0),@o_zke numeric(12, 2),@jsfk char (2), @jz char (2) ,@yf numeric (5,0),@bz char (100))

AS

insert outh (out_date,ywman,outh_no,khdm,ckdm,wzdm,sl,out_danj,o_zk,o_zke,jsf k,jz,yf,bz)

values

(@out_date,@ywman,@outh_no,@khdm,@ckdm,@wzdm,@sl,@out_danj,@o_zk,

@o_zke,@jsfk,@jz,@yf,@bz)

GO

22. 创建产品信息存储过程

CREATE PROCEDURE wz_setup

( @dm char(30),@mc char(40),@jldw char(8),@lb char(30),@rkj

numeric(12,2),@fxj numeric(12,2),@lsj numeric(12,2),@cj char(20),@yxrq datetime,@bz char(255))

AS

insert dm_wz

(dm,mc,jldw,lb,rkj,fxj,lsj,cj,yxrq,bz) values

(@dm,@mc,@jldw,@lb,@rkj,@fxj,@lsj,@cj,@yxrq,@bz) GO

23. 创建销售订单存储过程

CREATE PROCEDURE xsdh_setup

(@out_date datetime, @ywman char (20),@xsdh_no char (8),@khdm char (8),@wzdm char (30),@sl numeric (10),@out_danj numeric (12, 2),@o_zk numeric (5, 0),@o_zke numeric (12, 2),@bz char (100)

AS insert xsdh

,@bz)

GO

24 创建业务员存储过程

CREATE PROCEDURE ywy_setup

(@dm char (6),@mc char (20),@lb char (30),@tel char (40),@addr char

(40),@sfz char (18),@lbcode char (30),@bz char (255))

AS

insert dm_ywy

(dm,mc,lb,tel,addr,sfz,lbcode,bz)

values

(@dm,@mc,@lb,@tel,@addr,@sfz,@lbcode,@bz)

GO

第四章详细设计

4.1 工业企业进销存系统主窗体的创建

在这个窗体中加入状态控件,可以实时的反映系统中的各个状态的变化。状态控件需要在通常的属性窗口中设置一般的属性,还需要在其他特有的弹出式菜单中进行设置。同时在这个模块中设置公用模块来存放整个工程项目公用的函数、过程和全局变量。

由于系统中各个功能模块都将频繁使用数据库中的各种数据,因此需要一个公共数据操作函数,用以执行各种SQL语句。添加函数ExecuteSQL,代码如下:

Public Function ExecuteSQL(ByVal SQL _

As String, MsgString As String) _

As adodb.Recordset

'executes SQL and returns Recordset

Dim cnn As adodb.Connection

Dim rst As adodb.Recordset

Dim sTokens() As String

On Error GoTo ExecuteSQL_Error

sTokens = Split(SQL)

Set cnn = New adodb.Connection

cnn.Open ConnectString

If InStr("INSERT,DELETE,UPDATE,EXECUTE", _

UCase$(sTokens(0))) Then

cnn.Execute (SQL)

MsgString = sTokens(0) & _

" query successful"

Else

Set rst = New adodb.Recordset

rst.Open Trim$(SQL), cnn, _

adOpenKeyset, _

adLockOptimistic

'rst.MoveLast 'get RecordCount

Set ExecuteSQL = rst

ExecuteSQL_Exit:

Set rst = Nothing

Set cnn = Nothing

Exit Function

ExecuteSQL_Error:

MsgString = " 查询错误: " & _

Err.Description

Resume ExecuteSQL_Exit

End Function

ExecuteSQL函数有两个参数:SQL和MsgString。其中SQL用来存放需要执行的SQL语句,MsgString用来返回执行的提示信息。函数执行时,首先判SQL

语句中包含的内容:当执行查询操作时,ExecuteSQL 函数将返回一个与函数同名的对象集(Recordset),所有满足条件的记录包含在对象中;当执行如删除、更新、添加等操作时,不返回记录集。

在ExecuteSQL函数中使用了ConnectString函数,这个函数用来连接数据库。Public Function ConnectString() _

As String

'returns a DB ConnectString

ConnectString = "provider=SQLOLEDB;Persist Security Info =False;data source=d2jf-21;user id =sa;password=fwqa;initial catalog=My_Factory"

End Function

在录入有关信息时,需要回车来进入下一个框,,这样对软件的使用非常方便。所有的功能模块都需要这个函数,所以我们将它放在公用模块中,代码如下:

Public Sub EnterToTab(Keyasc As Integer)

If Keyasc = 13 Then

SendKeys "{TAB}"

End If

End Sub

Keyasc用来保存当前按键,SendKeys函数用来指定的按键。一旦按下回车键,将返回Tab 键,下一个控件自动获得输入焦点。

由于系统启动后,需要对用用户进行判断。如果登录者是授权用户,将进入系统,否则将停止程序的执行。这个判断需要在系统运行的最初的进行,因此将代码放在公用模块中。代码如下:

Sub Main()

Dim fLogin As New frmLogin

fLogin.Show vbModal

If Not fLogin.OK Then

'Login Failed so exit app

End

End If

Unload fLogin

Set fMainForm = New frmMain

fMainForm.Show

End Sub

过程Main 将在系统启动时首先执行,这就保证对用户的管理。系统需要知道登录的用

Public username As String 添加全局变量,用来记录各个功能功能的读写状态,代码如

下:

Public gintWZSmode As Integer 'for WZ setup Public gintGFSmode As Integer 'for GF setup Public gintKHSmode As Integer 'for KH setup

Public gintYWYLBSmode As Integer 'for YWYLB setup

局变量

Public gintYWYSmode As Integer 'for YWY setup 量

Public gintCKSmode As Integer 'for CK setup 量

Public gintWZLBSmode As Integer 'for WZLB setup 变量 Public gintDHmode As Integer 'for din huo 量 Public gintINHmode As Integer 'for ruku huo Public gintXSDHmode As Integer 'for xiao shou ding dan

局变量

Public gintOUTHmode As Integer 'for xiao shou ding dan

销售单全局 变量

Public gintZCmode As Integer 'for shang pin zhuan cang

产品转仓全 局变量

Public gintGETmode As Integer 'for ying shou

Public gintOFFERmode As Integer 'for YING FU 4.2 基本信息设置模块的创建

在基本信息设置中我们要实现的是:添加修改产品信息、添加修改产品类别 信息、添加修改客户信息、添加修改供应商信息、添加修改业务员类别的信息、

添加业务员信息添加修改仓库信息

4.2.1 产品设置窗体的创建

选择“基本信息设置丨产品设置”菜单,将出现下图所示窗体。

产品设置全局变量 供应商设置全局变 客户设置全局变量 业务员类别设置全

业务员设置全局变 仓库设置全局变 产品类别设置全局

订单设置全局变 入库单全局变量

销售订单全 应付全局变量

应付全局变量

这个

窗体

用来

显示

产品

设置

信息,

体将

自动

载入

所有

录,

代码

下:

Private Sub ShowTitle()

Dim i As In teger

With msgList .Cols = 11 .TextMatrix(O, 1)=" .TextMatrix(O, 2)=" .TextMatrix(0,

3)=" .TextMatrix(0, 4)=" .TextMatrix(0, 5)=" .TextMatrix(0, 6)=" .TextMatrix(0,

7)=" .TextMatrix(0,

8)=" .TextMatrix(0,

9)=" .TextMatrix(0, 10)=" '

固定表头

.FixedRows = 1

' 设置各列的对齐方式For i = 0 To 10

.ColAlig nmen t(i) = 0款号" 名称"

单位" 类别"

入库价格" 分

销价格" 零售

价格" 生产厂

家" 设置日期

"

备注信息"

并且可以对各条记录进行操作。在载入窗

Next i

' 表头项居中.FillStyle = flexFillRepeat .Col = 0 .Row = 0 .RowSel = 1 .ColSel

= .Cols - 1 .CellAlignment = 4 ' 设置单元大小.ColWidth(0) = 1000 .ColWidth(1)

= 1000 .ColWidth(2) = 2000 .ColWidth(3) = 1000 .ColWidth(4) =

1000 .ColWidth(5) = 1000 .ColWidth(6) = 1000 .ColWidth(7) =

1000 .ColWidth(8) = 1000 .ColWidth(9) = 1000 .ColWidth(10) = 1000 .Row = 1

End With

End Sub

函数ShowData把各条记录加到表格中,并显示出来,代码如下:Private Sub

ShowData()

Dim j As Integer

Dim i As Integer

Dim msgText As String

Set mrc = ExecuteSQL(txtSQL, msgText)

With msgList

.Rows = 1 Do While Not mrc.EOF

.Rows = .Rows + 1

For i = 1 To mrc.Fields.Count

If Not IsNull(Trim(mrc.Fields(i - 1))) Then Select Case mrc.Fields(i -

1).Type

Case adDBDate

.TextMatrix(.Rows - 1, i)

Format(mrc.Fields(i - 1) & "", "yyyy-mm-dd")

Case Else

.TextMatrix(.Rows - 1, i) = mrc.Fields(i -

End Select

End If

Next i

mrc.MoveNext

Loop

End With

mrc.Close

End Sub 在窗体显示时,可以控制窗体中各个控件按照要位置显示,可以在窗体的Resize 事件中加入代码,代码如下:

Private Sub Form_Resize()

If Me.WindowState <> vbMinimized And fMainForm.WindowState <> vbMinimized Then

' 边界处理

If Me.ScaleHeight < 10 * lblTitle.Height Then

Exit Sub

End If

If Me.ScaleWidth < lblTitle.Width + lblTitle.Width / 2 Then

相关文档