摘 要:此设计首先分析了进销存管理系统在信息时代中的重要作用,随后针对经济和科技等诸多因素进行分析。对实现此系统的技术、经济和管理可行性做了深入分析。最后总体介绍了超市进销存管理所包括的基本功能模块,并详细阐述了其主要功能、设计思路及实现方法。
超市进销存管理系统主要包括入库、出库、退货、订货、超市统计查询等等。这六部分,分别实现了搜索任意商品;对商品设定价格、库存量、报警数量、进货计划数、是否允许打折。还可以进行打印报表,包括计划进货表、本月本季本年的销售报表等功能。
关键词:Visual Basic;Access数据库;管理系统
引言
目前,无论是公司还是企业对于货物都实行了信息化管理,以提高管理水平和工作效率,同时也可以最大限度地减少手工操作带来的错误。于是,进销存管理信息系统便应运而生。在工厂中,产品的进销存涉及产品原料的采购、库存、投入生产、报损,甚至有时涉及到销售,同时,对于产品也有相应的生产、库存、销售、和报损等环节。在其他非生产性单位,如超市、商店等,则主要涉及到进货、库存、销售和报损4个方面。
超市进销存管理的对象是很多的,广而言之,它可以包括:商业、企业超市的商品,图书馆超市的图书,博物馆超市的展品等等。在这里本文仅涉及工业企业的产品超市。
超市进销存管理系统按分类、分级的模式对仓库进行全面的管理和监控,缩短了超市信息流转时间,使企业的物资管理层次分明、井然有序,为采购、销售提供依据;智能化的预警功能可自动提示存货的短缺、超储等异常状况;系统还可进行材料超市ABC分类汇总,减少资金积压。完善的超市管理功能,可对企业的存货进行全面的控制和管理,降低超市成本,增强企业的市场竞争力。
在设计一个系统时,首先要做好需求分析。合理地运用好Visual Basic的基本方法,建立一个适合企业或公司的进销存管理系统。
1系统概述
超市进销存管理系统按分类、分级的模式对仓库进行全面的管理和监控,缩短了超市信息流转时间,使企业的物资管理层次分明、井然有序,为采购、销售提供依据;智能化的预警功能可自动提示存货的短缺、超储等异常状况;系统还可进行材料超市ABC分类汇总,减少资金积压。完善的超市管理功能,可对企业的存货进行全面的控制和管理,降低超市成本,增强企业的市场竞争力。
超市进销存管理系统研究的内容涉及超市进销存管理的全过程,包括入库、出库、退货、订货、超市统计查询等等。
根据工作流程,超市进销存管理系统将包含以下内容:
(1)能对企业内的各类货物进行ABC分类管理,并提供最低超市量、最高超市量、安全超市量的预警功能。
(2)可以存储各类信息档案包括物资、产品基本信息、供货单位信息、使用单位信息等。
(3)可以方便快捷的进行物资入库管理\物资出库管理等等,安全、高效;支持各种类型的出/入库业务:生产入库、委外加工入库、采购入库、其他入库、生产领料出库、委外领料出库、销售出库和其他出库等
(4)提供退货管理功能
(5)通过查询超市,及时了解超市余额信息,便于订货下单,以免由于缺货,影响生产。另外,还提供经济订货量计算功能和打印订货采购单功能。
(6)支持超市盘点功能,可按仓库、物料进行盘点,自动汇总盘点数据,及时生成盘赢亏调整单
(7)可及时打印超市余额,方便领导决策或安排及时定货.
开发环境:
VB是微软公司出品的一个快速可视化程序开发工具软件,借助微软在操作系统和办公软件的垄断地位,VB在短短的几年内风靡全球。VB是极有特色和功能强大的软件,主要表现在:所见即所得的界面设计,基于对象的设计方法,极短的软件开发周期,较易维护的生成代码。
美国微软公司在1991年推出VB1.0至今已经经历了6个版本,VB6.0运行在Win9x或Winme,Win2000,Winxp,WindowsNT等操作系统下,是一个32位的应用程序开发工具。
Access2000 就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。如上所述,Access 作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。
2需求分析
2.1系统功能分析
(1)基本信息的维护
商品类型的建立与维护,包括商品类型的新建、修改和删除等。商品基本信息管理:包括商品基本信息的新建、修改和删除等。供货商信息管理:包括供货商信息的新建、修改和删除等。管理员信息管理:系统管理员的添加、删除和修改密码等。
(2)进货管理
商品进货信息管理:商品进货信息包括商品进货数量、单价、供货商等。商品进货管理功能完成进货信息登记、修改和删除等。分类查看:可以根据商品类型来查看某种商品的进货情况。更新库存:进货信息的变动直接关系到库存的变化。进货分析:列出当前进货量最多的前几项商品和进货量最少的前几项商品。库存分析:列出当前库存量最多的前几项商品和库存量最少的前几项商品。
(3)销售管理
商品销售信息管理:商品销售信息包括商品销售数量、单价、统计日期等。商品销售管理功能完成销售信息登记、修改和删除等。分类查看:可以根据商品类型来查看某种商品的销售情况。更新库存:销售信息的变动直接关系到库存的变化。销售分析:列出当前销售量最多的前几项商品和销售量最少的前几项商品。
(4)报损管理
商品报损信息管理:商品报损信息包括商品报损数量、报损原因等。商品报损管理功能完成报损信息登记、修改和删除等。分类查看:可以根据商品类型来查看某种商品的报损情况。更新库存:报损信息的变动同样直接关系到库存的变化。报损分析:列出当前报损量最多的前几项商品和报损量最少的前几项商品。
2.2 系统性能分析
(1)多层结构设计
严格意义上的三层结构设计,其程序逻辑结构分为用户界面层、业务逻辑处理层和数据存储层。本系统采用的上有三层结构进一步扩展而成的多层结构。
(2)面向对象设计
在系统中将商品类型、商品等都封装成相应的类,同时每个类都有自己对应的集合类和操作类,从而再次提高了对数据库操作的安全性和程序的可扩展性。
(3)指导经营的功能
进销存管理系统并不仅仅能代替传统的书面操作,更重要的是它提供了信息分析的功能,只要单击一个按钮就可以查到目前销售最好的商品或是库存最多的商品,从而起到指导经营的作用。
2.3 系统功能模块设计
按结构化程序设计思想,分析得本系统有以下几大部分
如下系统功能模块图:有管理员登录,商品管理模块,供货商,商品进货,销售管理,报损管理,销售分析等。
图2.1系统功能模块图
2.4技术可行性分析
本系统是一个典型的数据库应用程序。现有的数据库应用程序开发技术已非常成熟,利用现有技术完全可以实现预定的功能。Visual Basic语言简单、功能强大并容易掌握,而Access是一个非常优秀的小型数据库管理软件,方便使用,性能稳定。于是,采用 Visual Basic+Acess技术完全能够实现本系统的开发。
本系统在使用上比较方便、简单;界面设计上美观大方;后期维护上比较容易,如要对功能模块方面作修改,则无需进行整个系统的重新架构
2.5系统流程图
超市管理系统的基本流程
入库:供货单位发货---运输---货物到达后测试检验---送货单---库管人员查收入库---入库单处理各种入库业务,如:工业企业的生产入库、委外加工入库、其他入库等入库业务;按入库类型可以分别在不同模块录入入库单据信息。
出库:超市统计表---各使用单位---领料单----库管人员出库---出库单
处理各种出库业务,如:工业企业的生产领料、委外领料、其他出库等出库业务;按出库类型可以分别在不同模块录入出库单据信息。
退货:产品不合格通知书---各使用单位----领料单存根---库管人员退货---退货单
订货:超市进销存管理部门向采购部门发出采购单---采购部门向供应单位传递订货单---供应单位组织发货---运输----货物到达后测试检验---入库
盘点:备份超市数据,打印盘点表,可按仓库、批次进行盘点,并根据盘点表生成盘盈、盘亏表,调整超市账。
盘点的功能是检查仓库现有超市量与帐面数量是否一致。若盘点结果是仓库现有超市量大于帐面数量,则盘盈;若盘点结果是仓库现有超市量小于帐面数量,则盘亏。无论是盘盈还是盘亏,它们的差异量都记录在盘点调整单。
如图2.2
图2.2 系统流程图
3 设计
超市进销存管理系统研究的内容涉及超市进销存管理的全过程,包括入库、出库、退货、订货、超市统计查询等等。
超市进销存管理系统将包含以下内容:
(1)能对企业内的各类货物进行ABC分类管理,并提供最低超市量、最高超市量、安全超市量的预警功能。
(2)可以存储各类信息档案包括物资、产品基本信息、供货单位信息、使用单位信息等。
(3)可以方便快捷的进行物资入库管理\物资出库管理等等,安全、高效;支持各种类型的出/入库业务:生产入库、委外加工入库、采购入库、其他入库、生产领料出库、委外领料出库、销售出库和其他出库等
(4)提供退货管理功能
(5)通过查询超市,及时了解超市余额信息,便于订货下单,以免由于缺货,影响生产。另外,还提供经济订货量计算功能和打印订货采购单功能。
(6)支持超市盘点功能,可按仓库、物料进行盘点,自动汇总盘点数据,及时生成盘赢亏调整单。
(7) 可及时打印超市余额,方便领导决策或安排及时定货看。
如下图3.1
图3.1 系统功能模块图
4数据库设计
4.1 数据库需求分析
(1)针对超市进销存管理系统,分别对采购部门、销售部门和库存保管部门进行详细的调研和分析,总结出如下的需求信息:商品按类管理,所以需要有一商品类型信息。商品必须属于一个商品类型。如果一个商品类型存在商品,或存在下级商品类型,则该类型不可删除。需要记录供应商品信息。在涉及商品数量的地方,要给出相应的单位。商品销售信息单中要包含登记商品销售数量、单价等信息。在进货信息中要包含商品供应商等信息。商品报损要有报损原因。进货、销售、报损操作要有相应操作员信息。只有管理员登录之后才可以使用系统。默认的管理员不可以删除。进货、销售、库存、报损信息都要可以添加、修改、删除、分类查找。当进行进货、销售和报损操作后,能相应更新库存。需要对进货、销售、库存、报损进行分析,总结热门商品。
(2)经上述系统功能分析和需求总结,考虑到将来功能的扩展,设计如下的数据项和数据结构:商品类型信息,包括数据项有:商品类型编号、商品类型名称等。商品信息,包括的数据项有:商品编号、商品名称、商品介绍、库存量等。商品单位信息,包括单位编号、单位名称等。供应商信息,包括供应商名称、介绍等。进货信息,包括进货商品、数量、单位、单价、进货时间经手人等。
销售信息,包括销售商品、数量、单位、单价、登记时间等。报损信息,包括报损商品、数量、单位、原因、登记时间等。管理员信息,包括管理员账号、密码、是否是默认账号等。
4.2 数据库概念结构设计
本系统根据以上的设计规划出的实体有:商品类型信息实体、商品信息实体、商品单位信息实体、供应商信息实体、进货信息实体、销售信息实体、报损信息实体和管理员信息实体。
4.3 数据库逻辑结构设计
首先将罪犯管理信息系统的数据库概念结构转化为Access数据库或SQL Server 2000数据库系统所支持的实际数据模型,即:数据库的逻辑结构。其各个表格的设计
表4.1商品类型信息表(MerchandiseType)
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
MT_ID_N | 自动编号 | 长整型 | 是 | 商品类型号,递增,主键 | |
MT_Name_S | 文本 | 15 | 是 | 商品类型名 | |
MT_RemarkR | 备注 | 是 | 备注 |
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
M_Id_N | 自动编号 | 长整型 | 是 | 商品编号,递增,主键 | |
M_Name_S | 文本 | 80 | 是 | 商品名称 | |
M_Introduce_S | 文本 | 255 | 是 | 商品介绍 | |
M_TypeId_N | 数字 | 长整型 | 是 | 1 | 商品类型ID |
M_Storage_N | 数字 | 长整型 | 是 | 0 | 库存量 |
M_UnitId_N | 数字 | 长整型 | 是 | 1 | 单位编号 |
M_Remark_R | 备注 | 是 | 备注 |
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
U_ID_N | 自动编号 | 长整型 | 是 | 单位编号,递增,主健 | |
U_NAME_S | 文本 | 10 | 是 | 单位名称 |
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
P_Id_N | 自动编号 | 长整型 | 是 | 供货商编号,主健 | |
P_Name_S | 文本 | 50 | 是 | 供货商名称 | |
P_Introduce_S | 文本 | 255 | 是 | 供货商简介 | |
P_Remark_R | 备注 | 是 | 备注 |
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
B_ID_N | 自动编号 | 长整型 | 是 | 进货ID,递增,主健 | |
B_ProviderId_N | 文本 | 长整型 | 是 | 供应商ID | |
B_MerchandiseId_N | 数学 | 长整型 | 是 | 商品ID | |
B_StockDate_D | 日期 | 短日期 | 是 | Dare() | 进货时间 |
B_Deliver_S | 文本 | 20 | 是 | 送货人姓名 | |
B_Consignee_S | 文本 | 20 | 是 | 经手人姓名 | |
B_Count_N | 数字 | 长整型 | 是 | 0 | 购入量 |
B_StockPrice_N | 数字 | 单精度型 | 是 | 0 | 进货单价 |
B_OperatorId_S | 文本 | 20 | 是 | 操作员ID | |
B_Remark_R | 备注 | 是 | 备注 |
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
S_ID_N | 自动编号 | 长整型 | 是 | 销售编号,递增,主键 | |
S_MerchandiseID_D | 数字 | 长整型 | 是 | 商品ID | |
S_RegDate_D | 日期 | 短日期 | 是 | Date() | 登记日期 |
S_Count_N | 数字 | 长整型 | 是 | 0 | 售出数量 |
S_SellPrice_N | 数字 | 单精度型 | 是 | 0 | 卖出单价 |
S_OperatorId_S | 文本 | 20 | 是 | 操作员ID | |
S_Remark_R | 备注 | 是 | 备注 |
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
D_ID_N | 自动编号 | 长整型 | 是 | 报损编号,递增,主键 | |
D_MerchandiseID_N | 数字 | 长整型 | 是 | 商品ID | |
D_RegDate_D | 日期 | 短日期 | 是 | Date() | 登记日期 |
D_Count_N | 数字 | 长整型 | 是 | 0 | 报损数量 |
D_Reason_S | 文本 | 255 | 是 | 报损原因 | |
D_Operatorld_S | 文本 | 20 | 是 | 操作员ID | |
D_Remark_R | 备注 | 是 | 备注 |
列名 | 数据类型 | 字段大小 | 必填字段 | 默认值 | 说明 |
A_Account_S | 文本 | 20 | 是 | 账号,主键 | |
A_Pwd_S | 文本 | 20 | 是 | 密码 | |
A_IsDefault_B | 是/否 | 是 | False | 是否是默认用户 |
经过以上的需求分析和概念结构设计以后,得到数据库的逻辑结构。现在就可以在Access数据库中创建表了。
4.5 创建应用程序结构
(1)创建用户界面端程序
VB中选择文件-新建工程,打开,选择VB应用程序向导。设置后将向导生成的模块命名mdlMain保存与文件夹Merchandise中。
(2)创建业务逻辑处理组件
新建ActiveX DLL工程-设置工程属性-加入对ADO的引用。
(3)创建基本界面组件
新建ActiveX DLL工程-设置工程属性-加入对业务逻辑组件的引用。
(4)在界面端程序中使用组件
在工程资源管理器中选中工程Merchandise,选择菜单工程-引用命令。打开引用对话框,在可用的引用列表中选择BuySellStorageUI和BuySellStorageDB。
5详细设计
5.1开发业务逻辑处理组件
进销存业务处理组件用来处理进销存管理系统中的业务逻辑,既负责与界面进行数据传递,同时也要将界面端的请求应用业务逻辑之后对数据库进行操作。它包含以下功能:商品类型信息管理,对应clsMType类和clsMTypes类。商品信息管理,对应clsMerchandise类和clsMerchandises类。供应商信息管理,对应ClsProvider类和ClsProviders类。进货信息管理,对应clsBuy类和clsBuys类. 销售信息管理,对应clsSell类和clsSells类。报损信息管理,对应clsDispose类和clsDisposes类。管理员信息管理,对应clsAdmini类和clsAdminis类。
5.1.1 信息管理类加集合类的设计思想
在本组件中,每一个模块的设计都是由这个模块的信息管理类加与之对应的集合类求实现的。具体完成的功能如下:在信息管理类:实现与单个信息相关的操作,包括添加、修改和删除。在信息管理集合类:实现与多个信息先观的操作,主要是根据不用的条件查找。
因此,每个模块在设计上都是的,除非它在逻辑上有不可分割的关系,如进货信息的操作,与商品库存直接挂钩,将进货信息表的操作与商品表的操作放入到一个事务中,这样来确保数据的安全性与一致性。
5.1.2 商品类型信息管理模块
商品类型信息管理模块的功能需要由clsMType和clsMTypes两个类来实现,它的主要功能是:添加商品类型信息。修改商品类型信息。删除商品类型信息。查找商品类型信息。其他与商品类型相关的常用操作。
(1)商品类型信息管理类clsMType创建clsMType类并添加属性
商品类型信息类clsMType用来处理单个商品类型的信息,实现商品类型操作的基本功能,如添加、修改、删除等。
选择菜单[工程]—[添加类模块]命令,打开“添加类模块”对话框,选择“VB类生成器”,使用类生成器向工程中添加clsMType类,基于下拉列表框中选择clsDBbase。如下表所示。
表5.1
属性名称 | 数据类型 | 属性声明 |
ID | Long | Get/Let |
SuperID | Long | Get/Let |
TypeName | String | Get/Let |
(2)AddNew方法功能:添加耽搁商品类型。参数设计:无。返回值:gxcAddNew类型请参考clsPublic类中gxcAddNew枚举类型的定义。
(3)Update方法功能:修改商品类型。返回值:gxcUpdate类型,请参考clsPublic类中gxcUpdate枚举类型的定义。
(4)Delete方法功能:删除商品类型。参数设计:可选参数lngID表示商品类型ID,默认为-1。返回值:gxcDelete类型,请参考clsPublic类中gxcDelete枚举类型的定义。
商品类型信息管理集合类clsMTypes
商品类型信息集合类clsMTypes用来处理多个商品类型的信息,其最小的单元是clsMType,它完成与一组商品类型信息相关的操作,比如查找功能。
选择菜单[工程]—[添加类模块]命令,打开“添加类模块”对话框,选择“VB类生成器”,使用类生成器在工程中添加一个集合类,命名为clsMTypes类,在“基于”下拉列表框中选择clsDBbases,在“集合组成”栏中选择clsMType类。应用设置后系统会自动生成一个标准集合类所具有的最基本属性与方法,另外也加入了clsDBbases中方法的定义。添加AddEx方法添加Find方法
功能:根据给定参数查找商品类型,结果以clsMTypes类型返回。参数设计:一个可选的类型ID,默认值为-1。返回值:clsMTypes类型,一个clsMType的集合。省略参数时,返回全部商品类型。
5.1.3商品信息管理模块
商品信息管理模块的功能需要有clsMerch和clsMerchs两个类来实现,它的主要功能是:添加商品信息修改商品,信息删除商品信息查找商品信息,其他与商品信息相关的常用操作
(1)商品信息管理类clsMerch
创建clsMerch类并添加属性
属性名称 | 数据类型 | 说明 |
ID | Long | 商品编号 |
MerchName | String | 商品名称 |
Introduce | Integer | 商品介绍 |
TypeId | gxcSex | 商品类型ID |
Storage | Long | 库存量 |
UnitID | String | 单位编号 |
Remark | String | 备注 |
TypeName | String | 商品类型名称 |
Update方法,功能:修改商品信息。参数设计:无。返回值:gxcUpdate类型,请参考clsPublic类中gxcUpdate枚举类型的定义。
Delete方法功能:删除商品信息。参数设计:可选参数lngID表示商品ID,默认为-1。返回值:gxcUpdate类型,请参考clsPublic类中gxcUpdate枚举类型的定义。商品信息管理集合类clsMerchs
商品信息集合类clsMerchs用来具体处理多个商品的信息,其最小的单元是clsMerch,它完成与一组商品信息相关的操作,比如查找等。
选择菜单[工程]—[添加类模块]命令,打开“添加类模块”对话框,选择“VB类生成器”,使用类生成器在工程中添加一个集合类,命名为clsMerchs类,在“基于”下拉列表框中选择clsDBbases,在“集合组成”栏中选择clsMerch类。应用设置后系统会自动生成一个标准集合类所具有的最基本属性与方法,下面,为clsMerchs添加必要的方法。
添加AddEx方法,添加Find方法功能:根据给定参数查找商品信息,结果以clsMerchs类型返回。参数设计:如下表5.2。返回值:clsMerchs类型,一个clsMerch的集合。显然当上面两个参数都不指定时,返回全部商品。
表5.2 Find参数设计
参数名 | 参数类型 | 功能 | 是否可选及默认值 | 说明 |
lngID | Long | 传入商品ID | 可选,默认值=0 | 如果取默认值,表示不商品ID |
lngTypeId | Long | 传入商品类型ID | 可选,默认值=0 | 如果取默认值,表示不商品类型 |
表5.3 FindStorage方法参数设计
参数名 | 参数类型 | 功能 | 是否可选及默认值 | 说明 |
IsDesc | Boolean | 表示是否采用降序 | 可选,默认值=true | 无 |
nCount | Integer | 最多显示多少条记录 | 可选,默认值=10 | 无 |
供货商信息管理模块的功能需要由clsProvider和clsProviders两个类来实现,它的主要功能是:添加供货商信息。修改供货商信息,删除供货商信息,查找供货商信息,其他与供货商信息相关的常用操作。
供货商信息管理类clsProvider创建clsProvider类并添加属性
供货商信息类clsProvider用来具体处理单条供货商信息,完成供货商信息的基本操作功能,如添加、修改、删除等。
表5.4 clsProvider类的属性设置
属性名称 | 数据类型 | 说明 |
ID | Long | 供货商编号 |
ProviderName | String | 供货商名称 |
Introduce | String | 供货商简介 |
Remark | String | 备注 |
pdate方法,功能:修改供货商信息。参数设计:无。返回值:gxcUpdate类型,参考clsPublic类中的gxUpdate枚举类型的定义。
Delete方法功能:删除供货商信息。参数设计:可选参数lngID表示供货商信息ID,默认为-1。返回值:gxcDelete类型,参考clsPublic类中gxcDelete枚举类型的定义。
在删除供货商的同时,必须先删除与这个供货商相关的进货信息,而且要把这两个操作放在一个事务里面。供货商信息管理集合类ClsProviders
供货商信息集合类clsProviders用来处理多条供货商信息,其最小的单元是clsProvider,它完成与一组供货商信息相关的操作,比如查找等。
选择菜单[工程]—[添加类模块]命令,打开“添加类模块”对话框,选择“VB类生成器”,使用类生成器在工程中添加一个集合类,命名为clsProviders类,在“集合组成”栏中选择clsProvider类。应用设置后系统会自动生成一个标准集合类所具有的最基本属性与方法,下面,为clsProviders添加必要的方法。添加AddEx方法,添加Find方法功能:根据给定参数查找供货商信息,结果以clsProviders类型返回。参数设计:一个可选的类型ID,默认值为-1。
返回值:clsProviders类型,一个clsProvider的集合。省略参数是,返回全部供货商。
5.1.5 进货信息管理模块
进货信息管理模块的功能需要由clsBuy和clsBuys两个类实现,它的主要功能是:添加进货信息。修改进货信息。删除进货信息。查找进货信息。按商品统计分析进货信息。其他与进货信息相关的常用操作。进货信息管理类clsBuy
表5.5 创建clsBuy类并添加属性
属性名称 | 数据类型 | 说明 |
ID | Long | 进货ID |
ProviderId | String | 供应商ID |
ProviderName | String | 供应商名称 |
MerchandiseID | Long | 商品ID |
MerchName | String | 商品名称 |
StockDate | Date | 进货时间 |
Deliver | String | 送货人姓名 |
Consignee | String | 经手人姓名 |
Count | Long | 购入量 |
StockPrice | Single | 进货单价 |
OperatorId | String | 操作员ID |
Remark | String | 备注 |
TypeName | String | 商品类型名称 |
StockTimes | Long | 进货次数 |
TotalPrice | Single | 总进货支出 |
返回值:gxcAddNew类型,请参考clsPublic类中的gxcAddNew枚举定义。
Update方法,功能:修改进货信息。参数设计:无。返回值:gxcUpdate类型,请参考clsPublic类中gxcUpdate枚举类型的定义。Delete方法,功能:删除进货信息。参数设计:可选参数lngID表示供货商信息ID,默认值为-1。
返回值:gxcDelete类型,请参考clsPublic类中gxcDelete枚举类型的定义。
进货信息管理集合类clsBuys,添加AddEx方法,添加Find方法功能:根据给定参数查找进货信息,结果以clsBuys类型返回。参数设计:两个可选参数,一个是进货编号,另一个是商品类型编号。 返回值:clsBuys类型,一个clsBuy的集合,省略参数时,返回全部进货。
添加FindStorage方法功能:统计各种商品的进货次数和累计进货总支出,最后按进货总支出来排序,结果以clsBuys类型返回,最多返回前nCount条记录。
表5.6 参数设计
参数名 | 参数类型 | 功能 | 是否可选及默认值 | 说明 |
IsDesc | Boolean | 表示是否采用降序 | 可选,默认值=True | 无 |
nCount | Integer | 最多显示多少条记录 | 可选,默认值=10 | 无 |
5.1.6 销售信息管理模块
销售信息管理模块的功能需要由clsSell和clsSells两个类实现,它的主要功能是:添加销售信息。修改销售信息。删除销售信息。查找销售信息。按商品统计分析销售信息。其他与销售信息相关的常用操作。
销售信息类clsSell用来具体处理单条销售信息,完成销售信息的基本操作功能,如添加、修改、删除等。
选择菜单[工程]—[添加类模块]命令,打开“添加类模块”框,选择“VB类生成器”,使用类生成器在工程中添加clsSell类,
表5.1.7 销售信息类clsSell
属性名称 | 数据类型 | 说明 |
ID | Long | 销售编号 |
MerchandiseID | Long | 商品ID |
MerchName | String | 商品名称 |
RegDate | Date | 登记日期 |
Count | Long | 售出数量 |
SellPrice | Single | 售出单价 |
OperatorId | String | 操作员ID |
Remark | String | 备注 |
TypeName | String | 商品类型名称 |
RegTime | Long | 登记次数 |
TotalPrice | Single | 售出总价 |
5.1.7 报损信息管理模块
报损信息管理模块的功能需要由clsDispose和clsDisposes两个类来实现,它的主要功能是:添加报损信息。修改报损信息。删除报损信息。查找报损信息,按商品统计分析报损信息。其他与报损信息相关的常用操作。
报损信息类clsDispose用来具体处理单条报损信息,完成报损信息的基本操作功能,如添加、修改、删除等。
选择菜单[工程]— [添加类模块]命令,打开“添加类模块”对话框,选择“VB类生成器”,使用类生成器在工程中添加clsDispose类,
表5.7 报损信息类clsDispose
属性名称 | 数据类型 | 说明 |
ID | Long | 报损编号 |
MerchandiseID | Long | 商品ID |
MerchName | String | 商品名称 |
RegDate | Date | 登记日期 |
Count | Long | 报损数量 |
Reason | Single | 报损原因 |
OperatorId | String | 操作员ID |
Remark | String | 备注 |
RegTimes | Long | 登记次数 |
TotalCount | Long | 报损总数量 |
TypeName | String | 商品类型名 |
5.1.8 管理员信息管理模块
管理员信息管理模块的功能需要由clsAdmin和clsAdmins两个类来实现,它的主要功能是:添加管理员信息。修改管理员信息。删除管理员信息。查找管理员信息。验证管理员密码。其他与管理员信息相关的常用操作。
管理员信息类clsAdmin用来具体处理单条管理员信息,完成管理员信息的基本操作功能,如添加、修改、删除和验证密码等。
选择菜单[工程]—[添加类模块]命令,打开“添加类模块”对话框,选择“VB类生成器”,使用类生成器在工程中添加clsAdmin类,如下图所示。
表5.8管理员信息类clsAdmin表
属性名称 | 数据类型 | 说明 |
Account | String | 管理员账号 |
Pwd | String | 密码 |
IsDefault | Boolean | 是否是默认用户 |
5.2 开发基本界面组件
进销存管理系统基本界面组件用来处理进销存管理系统中与界面相关的操作,既负责与用户界面层进行数据传递,同时也要将界面端的请求传递给业务处理层,进一步转化为数据库操作。它包括以下功能:
商品类型操作管理,对应frmMType窗体和clsOpMType类。商品操作管理,对应frmMerch窗体和clsOpMerch类。供货商操作管理,对应frmProvider窗体和clsOpProvider类。进货操作管理,对应frmBuy窗体和clsOpBuy类。销售操作管理,对应frmSell窗体和clsOpSell类。报损操作管理,对应clsDispose窗体和clsOpDispose类。管理员操作管理,对应frmUser窗体和clsOpAdmin类。
5.2.1信息输入界面加操作类的设计思想
(1)每个模块的组成
在本组件中,每一个模块都是由信息输入界面与相应的操作类来实现的,具体完成的功能如下:
信息输入界面:可供添加或修改时调用,用来获取用户输入,将用户输入封装到对应的信息管理类中。操作类:可供界面端程序调用,实现了两个功能:其一是用来调出信息输入界面,接收用户输入,将输入存入数据库,并给出数据库操作的结果;其二是通过传引用的方式,向用户界面端传入的控件添加数据,从而在用户截面端显示。
(2)输入界面的代码结构
为了方便维护和快速开发,每个界面的实现代码结构都很相似,大多都包括如下的方法:ShowDlg:用来显示对话框,内部调用Me.Show vbModal,程序停止在这里。SetStatus:设计对话框控件的默认状态。SetDefaultValue:设计对话框的默认值。OKButton_Click:[确定]按钮单击处理事件。CheckValid:检查用户输入有效性。SaveValue:保存用户输入。CancelButton_Click:[取消]按钮单击处理事件。当用户单击[确定]或[取消]按钮后,程序继续执行ShowDlg函数后面的语句,用来保存或放弃用户输入。
(3)操作类的代码结构
同样为了方便维护和快速开发,每个操作类的代码结构也都很相似,大多包括如下方法:Add:管理增加操作。Modify:管理修改操作。Delete:管理删除操作。AddToLvw:将单个对象加入列表,或在列表中更新。InitListview:设置ListView的显示样式。ObjsToListView:将对象集合显示到ListView中。FillListView:显示指定类型对象到列表控件。GetObjFromControl:从列表或树形图中得到一个对象。ObjsToCornbo:传入参数为对象的单向类与组合框。FillCombo:将全部对象加入到组合框中。
(4)创建组件的公共模块
为了将来扩展方便,这里加入一个公共模块,命名为mdlMain ,现在只添加一个空的Sub Main作为组件的初始化函数。
(5)商品类型操作管理模块
商品类型管理模块实现以下功能:处理添加商品类型的操作,处理修改商品类型的操作,处理删除商品类型的操作,处理列举或查找商品类型的操作。
(6)商品操作管理模块
商品操作管理模块实现以下的功能:处理添加商品的操作。处理修改商品的操作。处理删除商品的操作。处理分析商品库存量的操作。处理列举或查找商品的操作。
(7)供货商操作管理模块
供货商操作管理模块实现以下的功能:处理添加供货商的操作,处理修改供货商的操作,处理删除供货商的操作,处理列举或查找供货商的操作。
(8)进货操作管理模块
进货操作管理模块实现以下的功能:处理添加进货的操作,处理修改进货的操作,处理删除进货的操作,处理分析进货总支出的操作,处理列举或查找进货的操作。
(9)销售操作管理模块
销售操作管理模块实现以下的功能:处理添加销售的操作。处理修改销售的操作。处理删除销售的操作。处理分析销售总收入的操作。处理列举或查找销售的操作。
(10)报损操作管理模块
报损操作管理模块实现以下的功能:处理添加报损的操作。处理修改报损的操作。处理删除报损的操作。处理分析报损总数量的操作。处理列举或查找报损的操作。
(11)管理员信息操作管理模块
管理员信息操作管理模块实现以下的功能:处理添加管理员信息的操作。处理修改管理员信息的操作。处理删除管理员信息的操作。处理列举或查找管理员信息的操作。
5.3界面端应用程序设计
5.3.1 公共模块的设计
在创建用户界面端应用程序时,向导已经为我们生成了一个名为mdlMain的模块,我们对这个模块稍微修改即可使用。添加成员变量,修改Main过程.
5.3.2用户登入模块的设计
用户登入对话框设计:当用户输入正确的用户名和密码,才可以登陆到系统
密码错误就弹出提示,不能进入系统。
图5.1 用户登入界面设计图
修改[确定]按钮的处理代码
Private Sub cmdOK_Click()
'ToDo: 创建测试密码是否正确
'检查正确密码
Dim Account As String
Dim Pwd As String
Account = RealString(txtUserName.Text)
Pwd = RealString(txtPassword.Text)
'判断密码是否正确
If Not m_Admin.CheckPwd(Account, Pwd) Then
m_nErrCount = m_nErrCount + 1
If m_nErrCount >= 3 Then
MsgBox "输入密码错误次数太多,请稍后重试", vbExclamation
End
End If
MsgBox "密码错误,再试一次!还有 " & 3 - m_nErrCount & " 次机会,注意密码区分大小写", vbCritical, "登录"
txtPassword.SetFocus
txtPassword.SelStart = 0
txtPassword.SelLength = Len(txtPassword.Text)
Else
OK = True
g_Account = Account
Me.Hide
End If
End Sub
5.3.3系统主界面的设计
表5.9设计主窗体控件布局
控件名称 | 属性 | 属性取消 | 功能 |
frmMain | Caption | 进销存管理系统 | 系统主窗体 |
inlViewSIcon(ListView) | ImageHeight | 16 | 树形控件和列表框小图标所使用的图片 |
ImageWidth | 16 | ||
inlViewBIcon(ImageList) | ImageHeigh | 32 | 列表框大图标所使用的图片(未用:待扩展) |
ImageWidth | 32 | ||
tvTreeView(TreeView) | LineStyle | TvwRootLines | 显示商品类型树 |
ImageList | inlViewSIcon | ||
sstabView(ListView) | Style | O-ssStyleTabbedDialog | 右侧选项卡,做容器用 |
TabOrientation | O-ssTabOricntationTop | ||
lvMerch(ListView) lvBuy(ListView) lvSell(ListView) lvDispose(ListView) lvProvider(ListView) | FullRowSelect | True | 分别用来显示商品商品信息列表 进货信息列表 销售信息列表 报损信息列表 供货商信息列表 |
GridLines | True | ||
View | lvwRiport | ||
Icon | imlViewBIcon | ||
SmallIcon | imlViewSIion |
给sstabView控件添加5个选项卡,选项卡标题分别设置为“商品库存”、“进货记录”、“销售记录”、“报损记录”和“供应商”,分别对应5个ListView。添加菜单
5.3.4 添加主界面模块
主界面设计:包括系统,视图,商品类型管理,进货管理,销售管理,报损管理,供货商管理,销售分析,帮助等等如图5.2
图5.2 主界面效果图
其他代码
Private Sub Form_Load()
LoadResStrings Me
Me.Left = GetSetting(App.Title, "Settings", "MainLeft", 1000)
Me.Top = GetSetting(App.Title, "Settings", "MainTop", 1000)
Me.Width = GetSetting(App.Title, "Settings", "MainWidth", 6500)
Me.Height = GetSetting(App.Title, "Settings", "MainHeight", 6500)
lvMerch.View = Val(GetSetting(App.Title, "Settings", "ViewMode", "0"))
'初始化数据
Call InitMain
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
'close all sub forms
For i = Forms.Count - 1 To 1 Step -1
Unload Forms(i)
Next
If Me.WindowState <> vbMinimized Then
SaveSetting App.Title, "Settings", "MainLeft", Me.Left
SaveSetting App.Title, "Settings", "MainTop", Me.Top
SaveSetting App.Title, "Settings", "MainWidth", Me.Width
SaveSetting App.Title, "Settings", "MainHeight", Me.Height
End If
SaveSetting App.Title, "Settings", "ViewMode", lvMerch.View
End Sub
Private Sub Form_Resize()
On Error Resume Next
If Me.Width < 3000 Then Me.Width = 3000
SizeControls imgSplitter.Left
End Sub
5.3.5 用户管理模块
图5.3用户管理对话框界面设计图
用户管理对话框代码设计
Option Explicit
Dim opAdmin As New clsOpAdmin
Private Sub CancelButton_Click()
Unload Me
End Sub
Private Sub cmdAdd_Click()
opAdmin.Add lvAdmin
End Sub
Private Sub cmdDel_Click()
opAdmin.Delete lvAdmin
End Sub
Private Sub cmdModify_Click()
opAdmin.Modify lvAdmin
End Sub
Private Sub Form_Load()
opAdmin.FillListView lvAdmin
End Sub
5.3.6经营分析模块
经营分析模块用来对超市的运作情况进行分析,具有以下功能:库存量排行。进货总量与登记次数排行。销售总量与登记次数排行。报损总量与登记次数排行。
表5.10经营分析对话框界面设计
控件名称 | 属性 | 属性取消 | 功能 |
FrmAnalysis(Form) | Caption | 经营分析 | 经营分析对话框 |
List | 库存分析 进货分析 销售分析 报损分析 | ||
CboOrder(ComboBox) | Style | 2-DropDownList | 前↓:降序排列,取前若干项;↑后:降序排列,取后若干项。然后再按由小到大显示 |
List | 前↓ ↑后 | ||
TxtCount(TextBox) | MaxLength | 3 | 显示数量 |
CmdSearch(CommandButtom) | Caption | 查看 | [查看]按钮 |
CmdClose(CommandButtom) | Caption | 关闭 | [关闭]按钮 |
LvAna(ListView) | GridLines | True | 显示数据容器 |
View | lvwRiport |
图5.4 界面设计图
代码分析
Option Explicit
Private Sub cmdClose_Click()
Me.Hide
End Sub
Private Sub cmdSearch_Click()
Dim nCount As Integer
Dim IsDesc As Boolean
Dim opMerch As New clsOpMerch
Dim opBuy As New clsOpBuy
Dim opSell As New clsOpSell
Dim opDispose As New clsOpDispose
nCount = Val(txtCount.Text)
If nCount = 0 Then nCount = 10
IsDesc = IIf(cboOrder.ListIndex = 0, True, False)
Select Case cboAnaType.ListIndex
Case 0 '库存分析
opMerch.FindStorage lvAna, IsDesc, nCount
Case 1 '进货分析
opBuy.FindStorage lvAna, IsDesc, nCount
Case 2: '销售分析
opSell.FindStorage lvAna, IsDesc, nCount
Case 3 '报损分析
opDispose.FindStorage lvAna, IsDesc, nCount
Case Else
End Select
End Sub
Private Sub Form_Load()
cboAnaType.ListIndex = 0
cboOrder.ListIndex = 0
txtCount.Text = 10
End Sub
6 测试分析
6.1 强制变量声明
选择菜单[工具]—[选项]命令,打开“选项“对话框”,在“编辑器”属性页中,把“要求变量声明”复选框选上,或者手工在每个文件的开头加上关键字:
option Explicit
这样在编译时会对没有声明的变量报错,从而减少很多不必要的调试。
6.2 常见错误的避免
1、数据类型不匹配
数据类型的判断错误,比如一个功能模块,接受传入的数据为id,要求其值必须是正数。如果写程序时传入的是小数,或者是非数字的字符串,那么程序将会出现错误。又如查询数据表时,使用了WHERE子句,但是数据类型不匹配,数据库中字段类型为数字的值,却使用了字符串去查询,就会出现错误。
2、数据与数据库相冲突
数据与数据库相冲突,可能是其值超过了数据库的上限和下限。比如在数据库中,用户名称字符数量上限是20个字符,而在程序中没有对此进行判别,如果一个添加新商品时名字有21个字符,那么在使用SQL语句插入数据与记录的时候就会出错。
3、变量声明错误
最后是一些常识性错误,比如在If…Else…End If过程中,认为判断只会执行其中的一段代码,于是在两段中都使用了Dim obj as clsMerch,事实上,编译器在语法分析阶段,是首先将一个函数内声明的全部变量都放符号表中,而不管这个变量的声明是在这个函数的什么位置。
又如在Select Case中,Case的条件是字符串,但是没有加引号,就变成了Case一个空变量。
4、资源的建立与释放
在将类实例化时,必须使用New关键字,未实例化类无法使用,例:
误:
Dim obj as clsMerch
ClsMerch.AddNew
正:
Dim obj as clsMerch
Set obj=New clsMerch
ClsMerch.AddNew
同理,在调用Set obj=Nothing后,资源已经释放,无法再调用类内的方法。
5、系统的编译和发行
3个工程的项目属性在前面创建项目时均已设置完毕,由于在本系统中生成了名为
BuySellstorageDB.dll和BuySellstorageUI.dll的组件,当移植到其他机器使用时,需要先注册此组件。另外系统中默认的数据库的路径是与BuySellstorageDB.dll同目录下的DB文件夹,因此当移植到其他机器时,这个路径关系依然不能改变。
总结
本系统是针对超市进行供销管理而设计的,在这个系统中,超市进销存管理系统研究的内容涉及超市进销存管理的全过程,包括入库、出库、退货、订货、超市统计查询等等。虽然,此系统还有许多方面还不够完善,还存在一些不足,还需改进,但设计界面简洁,美观大方,基本功能比较完善.
通过本系统的开发,我对软件开发过程有了更清晰的了解,首先是问题定义、需求分析,然后是功能设计、详细设计等,并对软件测试的方法、手段有了较深的理解,同时对超市进销存管理系统的流程有了一个系统的认识。在开发过程还认真学习了与系统相关的知识,极大地拓宽了我的知识面,我感到收获不小。
在系统的开发初期,必须要熟悉超市进销存管理系统的整个流程,初步了解了超市进销存管理系统的相关知识,这样才能进入到设计的过程中去。从开始熟悉这些知识到对整体设计有了解,再从概要设计、详细设计到开始编码,以及最后的测试,整个过程感觉很充实,虽然遇到了不少困难,但当我通过自己查资料、或是向指导老师请教以及向同学请教,而设计出解决方案并成功实现时,那种成就感和满足感足以鼓励自己加班加点的辛苦。
因为以前有过使用vb设计管理软件的经验,在这次设计的过程中,我遇到专业知识方面的困难不是非常多,主要困难集中在管理知识、业务流程上等方面的不足。在实际的开发中我深刻的体会到了自己做课程设计和实际客户的要求之间的距离,不能凭空想象来开发软件,而是需要与客户不断的沟通交流,把客户真正的需求反映到你的软件当中。
经过以上详细的设计与构架,终于完成了毕业论文选题系统的开发。在本次开发过程中,遇到了很多的困难。也有指导老师李迎辉的细心帮助,包括数据库设计方面,技术实现方面以及系统测试方面。同时,我也受到了很大的启发,希望通过今后的学习,能够对本系统在安全性方面进行进一步的完善。
参考文献
[1] 陆惠恩;陆陪恩,软件工程[M],电子工业出版社,2002年1月.
[2] 王春森,程序员教程[M],清华大学出版社,2001年5月.
[3] 蒋加伏;峰,Visual Basic程序设计教程[M],北京邮电大学出版社, 2003年.
[4] 赵玮,Visual Basic中文版快捷编程实战训练[M],人民邮电出版社,2003年9月.
[5] 孟小峰,WEB数据管理研究综述[M],清华大学出版社,2001年.
[6] 黄吻,现代远程教育结教育发展启示[N],浙江大学学报,1995年5月.
[7] 吴竞华;陈根才,基于三层模式的档案管理系统的设计与实现[M],北京,机械工业出版社,2000年.
[8] 金汉均,数据库实现的方法[N],华中师范大学学报,1999专辑.
[9] 杨汉平;王小蕾等,数据库中间件技术在三层操作系统模型中的实现[N],华中师范大学学报,2001年 4月.
[10]廖信彦,Visual Basic应用大全[M],清华大学出版社,2002年.
[11]康博,Visual Basic应用程序开发新技术[M],人民邮电出版社,2003年.
[12]陈子侠,基于B/S结构的在线商店技术开发[N],浙江大学学报,2002.
[13]清源计算机工作室,Visual Basic设计与制作[M],机械工业出版社,2004年.
[14]周佩德,数据库原理及应用[M],电子工业出版社,2005年.
[15]刘炳文等,VISUAL BASIC程序设计--数据库篇[M],人民邮电出版社,1999年3月.
[16]李光明,Visual Basic 6.0编程实例大制作[M],冶金工业出版社,2002年8月.
[17]刘炳文,精通VISUAL BASIC 6.0入门与提高[M],人民邮电出版社,2001年.
[18]黄淼云,VB6.0办公自动化编程[M],国防工业出版社,2003年.
[19]王要武,信息管理系统[M],电子工业出版社,2003年.
[20]李红等编著,管理信息系统开发与应用[M],电子工业出版社,2003年.