商场进销存管理系统开发二
第4章 系统设计
4.1 概要设计
系统的功能框架与交互界面设计,核心在于搭建起用户习惯与系统功能间的桥梁。将系统研究、用户目标及需求进行无缝集成,并转化为具体的界面设计,是系统设计过程中的关键阶段。
概要设计旨在依据需求分析,对系统的整体功能架构以及各模块间的关联进行规划。明确软件的整体结构,不仅有助于系统框架功能的开发,还能在项目前期向客户直观展示系统所涵盖的功能范围。同时,数据结构设计涵盖数据的共享机制,精心设计数据结构,实现数据库的生成与优化。
商场进销存管理系统主要包含销售管理、采购管理、库存管理、商品管理、基础数据管理六大核心模块。各模块紧密协作,共同完成商场的核心业务流程,系统框架如图4-1所示。

图4-1系统框架图
各个模块功能介绍:
(1) 销售管理模块:主要是允许不同的用户协同完成销售开单、销售审核、销售执行等一系列操作。在销售开单环节,销售人员可根据客户需求快速录入销售订单信息,包括商品名称、规格、数量、价格等;销售审核环节则由具备相应权限的人员对订单进行审核,确保订单信息的准确性与合规性;销售执行环节涵盖销售出库操作,实时更新库存数据。此外,该模块还支持销售退货处理,包括退货申请、审核及退货入库等流程,同时负责客户信息维护,可对客户的基本资料、购买记录、信用等级等信息进行增删改查操作,以及销售收款管理,记录客户的付款情况,方便财务对账与资金回笼。
(2) 采购管理模块:主要是允许不同的用户协调完成采购开单、采购批准、采购执行等操作。采购人员依据库存预警信息或销售需求生成采购订单,详细填写采购商品信息、供应商信息、采购数量、价格等内容;采购批准环节由上级领导或相关负责人对采购订单进行审核,确保采购计划的合理性与预算的合规性;采购执行环节包括与供应商的沟通协调、货物运输跟踪等,确保采购商品按时、按质、按量到货。同时,该模块还支持采购退货处理,当采购商品出现质量问题或不符合要求时,可发起退货申请并跟踪退货流程,以及商品信息和供应商信息维护,可对商品的基本资料、规格参数、价格变动等信息,以及供应商的联系方式、信用评级、合作历史等信息进行更新与管理。
(3) 商品管理模块:主要是维护商品的基本信息,涵盖商品分类、商品单位、商品价格、商品规格、商品图片等信息的设置与管理。通过商品分类管理,可构建清晰的商品分类体系,方便用户快速查找与定位商品;商品单位管理可统一商品的计量单位,确保数据的一致性;商品价格管理支持对商品的进价、售价、促销价等进行灵活调整与记录;商品规格管理可详细描述商品的尺寸、重量、颜色等规格参数;商品图片管理则可上传与展示商品的实物图片,提升商品展示效果。此外,该模块还支持对商品信息的批量导入导出操作,提高数据录入与维护效率。
(4) 库存管理模块:主要是协调采购、销售环节完成商品数量的维护和库存信息的设置与维护。在商品入库环节,根据采购订单或销售退货情况,及时更新库存数量与库存位置信息;商品出库环节则根据销售订单或调拨申请,减少相应商品的库存数量。同时,该模块提供实时库存查询功能,用户可随时了解商品的库存数量、库存位置、库存状态等信息;定期进行库存盘点,生成盘点报表,对比实际库存与系统库存的差异,并进行调整处理,确保账实相符;设置库存预警功能,当商品库存低于下限或高于上限时,自动发出预警信息,提醒相关人员及时采取补货或调整库存措施;支持商品调拨管理,处理商品在不同仓库或不同门店之间的调拨业务,实现库存的合理调配与优化。
(5) 基础数据模块:用来维护部门、角色、职务、仓库、员工等基础信息,为其他模块提供基础数据支持,确保系统数据的一致性和完整性。部门管理可对商场内部的各个部门进行设置与管理,包括部门名称、部门职责、上级部门等信息;角色管理可定义系统内的不同角色,如管理员、采购员、销售员、财务人员等,并为每个角色分配相应的操作权限;职务管理可记录员工的职务信息,如经理、主管、员工等,方便进行人员管理与绩效考核;仓库管理可对商场的各个仓库进行设置与管理,包括仓库名称、仓库位置、仓库容量等信息;员工管理可维护员工的基本信息,如姓名、性别、联系方式、入职日期等,同时可将员工与部门、角色、职务等信息进行关联,实现人员信息的全面管理。
4.2 详细设计
详细设计主要是对算法和数据结构和特定的计算机语言实现各模块的实现初步描述。定义各个模块直接通信的接口,与数据库连接的统一接口和实现,为正式开发制定规范。
更改详细设计方案,不能对概要设计方案造成影响;详细设计阶段要出几篇文档,包括详细设计文档和模块设计方案。每个模块的详细设计文档都应该形成规范并以文档的形式公布。
详细设计的任务包括:
(1) 确定每个模块的算法的使用,一个合适的工具来表达算法的过程中选择,掌握每个算法的优缺点;
(2) 为模块内的数据结构进行设计。将需求分析、概要设计阶段确定的概念性的数据类型进行确切的定义;
(3)这个阶段我们将设计出系统开发中使用的大量的接口,接口的规范有助于开发人员程序书写的条理性和一致性的约束。采用接口还有助于我们本套系统与其他遗留系统的整合与集成。对于后期的维护和功能修改,采用统一的接口的方式将会使后期的开发方便快捷。
4.2.1销售管理详细设计
销售人员依据客户需求创建销售订单,录入客户、商品、数量、单价等信息,系统生成订单号并验证数据合法性(如客户是否存在、库存是否充足)。未审核前,销售人员可修改订单信息,修改后系统重新验证。之后提交上级审核,审核无误后批准,订单状态变为“已审核”并锁定信息。已审核订单进入执行阶段,库管人员按订单出库,系统自动减库存、生成出库记录,订单状态更新为“已完成”。若客户退货,销售人员创建退货订单,审核后库管人员退货入库,系统增库存、更新退货订单状态。系统还能按客户、商品统计销售数据,分析销售趋势,自动生成日报、周报、月报,支持用户自定义报表。
4.2.2 采购管理详细设计
采购部门内勤根据库存量、销售预测或上级通知创建采购订单,录入供应商、商品、采购数量、单价等信息,系统生成订单号并验证数据合法性(如供应商是否存在、商品是否有效)。未审核前,内勤可修改订单信息,修改后系统重新验证。之后提交上级审核,审核无误后批准,订单状态变为“已审核”并锁定信息。已审核订单进入执行阶段,采购人员联系供应商采购,商品到货后库管人员入库,系统自动增库存、生成入库记录,订单状态更新为“已完成”。若采购商品有问题,采购人员创建退货订单,审核后库管人员退货出库,系统减库存、更新退货订单状态。同时,系统提供供应商信息录入、修改删除功能,记录交易情况供用户评价供应商。
4.2.3 商品管理详细设计
这部分是我重点负责的部分,下面进行详细的介绍:
商品管理模块作为商场进销存管理系统的核心基础数据模块,承担着维护商品分类和商品信息的重要职责,为采购、销售和库存管理等其他业务模块提供不可或缺的数据支撑。该模块采用分层架构设计,涵盖UI层、BLL层和DAL层,具备完整的增删改查功能以及高级数据管理能力,以下将从多个方面进行详细阐述。
商品管理模块采用经典的三层架构,各层分工明确,协同工作。UI层负责与用户进行交互,提供直观、便捷的操作界面,接收用户输入并展示数据结果;BLL层作为业务逻辑层,处理核心业务规则和逻辑,对UI层传递的数据进行验证和处理,并调用DAL层完成数据操作;DAL层则专注于与数据库进行交互,执行数据的增删改查等操作,为BLL层提供数据支持。这种分层架构设计使得模块具有较高的可维护性、可扩展性和可复用性。
商品分类管理:
商品分类管理支持多层级树形结构,这种结构能够清晰地展示商品分类的层级关系,方便用户进行管理和操作。用户可通过该功能实现商品分类的完整生命周期管理,包括添加、修改、删除等操作。
商品分类采用树形结构存储,支持无限层级嵌套,以适应不同商场复杂的商品分类体系。商品分类管理通过商品列表页面的树形控件实现,为用户提供直观、便捷的操作体验。具体功能如下:
以树形结构展示所有商品分类,清晰地呈现分类的层级关系,方便用户查看和管理。支持用户展开或折叠分类节点,以便快速定位到所需的分类。点击分类节点可筛选该分类下的商品,方便用户查看特定分类下的商品信息。提供分类管理入口(通过FrmGoodsTypeList.cs实现),用户可通过该入口进入分类管理页面,进行添加、修改、删除等操作。
商品信息管理:
商品信息管理是商品管理模块的核心功能,支持商品全生命周期的完整管理,包括添加、修改、删除、查询、状态管理等操作。使用商品信息模型,用数据结构详细定义了商品信息的各个字段,涵盖了商品的基本信息、价格信息、状态信息等,为商品信息的管理和展示提供了全面的数据支持。商品信息视图模型在商品信息模型的基础上,添加了一些用于界面展示的额外字段,如格式化的创建时间、停用状态文本和删除状态文本等,提高了界面展示的友好性和可读性。
总结:用户可在系统中添加商品分类,录入名称、编码等信息,系统验证名称避免重复;可修改分类名称、编码等,修改后更新相关商品信息;可删除未使用分类,确保分类下无商品信息。还能添加商品信息,录入名称、编号、分类、规格、单位、价格等,系统验证编号避免重复;可修改商品名称、价格、规格等,修改后更新相关业务数据;可逻辑或物理删除商品信息,逻辑删除标记状态,物理删除需谨慎;可分页、条件查询商品列表,支持导出报表;可启用或停用商品,停用商品不在业务中显示但保留历史数据。
4.2.4 库存管理详细设计
库管人员根据采购订单、退货订单等添加入库单,录入入库商品、数量、仓库等信息,系统生成入库单号并验证数据合法性(如商品、仓库是否存在);未审核前可修改入库单信息,修改后重新验证;审核无误后批准入库,系统更新库存、生成变动记录,入库单状态变为“已审核”;若入库单有误可作废,系统不更新库存。库管人员根据销售订单、退货订单等添加出库单,录入出库商品、数量、仓库等信息,系统生成出库单号并验证数据合法性(如库存是否充足、仓库是否有效);未审核前可修改出库单信息,修改后重新验证;审核无误后批准出库,系统减库存、生成变动记录,出库单状态变为“已审核”;若出库单有误可作废,系统不减库存。系统提供按商品查询库存分布、库存变动明细功能,根据库存上下限设置预警提醒,按仓库、商品类别统计库存数据生成报表。用户可为单个或批量商品设置库存上下限。
4.2.5 基础数据管理详细设计
用户可在系统中添加商品单位,录入名称、编码等信息,系统验证名称避免重复;可修改单位名称、编码等,修改后更新相关商品信息;可删除未使用单位,确保单位无关联商品信息。可添加仓库记录,录入名称、编号、地址、联系方式等信息,系统验证编号避免重复;可修改仓库名称、地址等,修改后更新相关业务数据;可删除未使用仓库,确保仓库无库存商品或未完成业务单据。可添加角色,录入名称、描述等信息,系统分配默认权限,用户可调整;可修改角色名称、描述等,修改后更新相关用户信息;可删除未使用角色,确保角色无关联用户,还能为角色分配或撤销系统功能模块访问权限。可添加部门,录入名称、编码、上级部门等信息,系统验证编码避免重复;可修改部门名称、上级部门等,修改后更新相关用户信息;可删除未使用部门,确保部门无关联用户。可添加职务,录入名称、描述等信息;可修改职务名称、描述等,修改后更新相关用户信息;可删除未使用职务,确保职务无关联用户。
4.3 数据库设计
商品表记录商品的基本信息,包括商品ID、商品编码、商品名称、价格、属性、单位、数量、创建人、备注等。商品信息会在采购、销售、库存等环节中被使用到,采购人员在开采购单的时候需要通过点击查询按钮找到相应的商品而不是手动输入商品信息,这样就方便了用户的操作,同时也保证了输入信息的准确无误。如表4-1所示。
表4-1 商品表(GoodsInfos)
字段名 中文含义 数据类型 允许空 约束条件
GoodsId 商品ID int N 主键,自增长
GoodsNo 商品编码 varchar(50) Y 无
GoodsName 商品名称 nvarchar(100) N 无
GoodsPYNo 商品拼音码 varchar(50) Y 无
GoodsSName 商品简称 nvarchar(50) Y 无
GoodsTXNo 商品条形码 varchar(50) Y 无
GUnit 单位 nvarchar(5) N 无
GTypeId 商品类型ID int N 外键
GProperties 商品属性 nvarchar(50) N 无
IsStopped 是否停用 int N 无
RetailPrice 零售价 decimal(18,2) Y 无
LowPrice 最低价 decimal(18,2) Y 无
PrePrice 预设价 decimal(18,2) Y 无
Discount 折扣 int N 无
BidPrice 进价 decimal(18,2) Y 无
Remark 备注 nvarchar(500) Y 无
IsDeleted 是否删除 int N 无
Creator 创建人 nvarchar(20) N 无
CreateTime 创建时间 datetime N 无
GoodsPic 商品图片 varchar(200) Y 无
供应商表记录供应商的基本信息,包括供应商ID、供应商名称、单位类型、地址、联系人、电话、传真、地址、备注。如表4-2所示。
表4-2 供应商表(UnitInfos)
字段名 中文含义 数据类型 允许空 约束条件
UnitId 供应商ID int N 主键,自增长
UnitName 供应商名称 nvarchar(50) N 无
UnitPYNo 供应商拼音码 varchar(50) Y 无
UTypeId 单位类型ID int N 外键
UnitProperties 单位属性 nvarchar(50) N 无
RegionId 地区ID int Y 外键
Address 地址 nvarchar(100) Y 无
FullAddress 详细地址 nvarchar(200) Y 无
UnitNo 供应商编号 varchar(50) Y 无
ContactPerson 联系人 nvarchar(50) Y 无
PhoneNumber 手机号 varchar(50) Y 无
Telephone 电话 varchar(50) Y 无
Fax 传真 varchar(50) Y 无
Email 邮箱 varchar(100) Y 无
PostalCode 邮编 varchar(50) Y 无
Remark 备注 nvarchar(1000) Y 无
IsNoVail 是否有效 int N 无
IsDeleted 是否删除 int N 无
Creator 创建人 nvarchar(50) N 无
CreateTime 创建时间 datetime N 无
商品单位表用于维护商品的单位信息,包括单位ID、单位名称。如表4-3所示。
表4-3 商品单位表(GoodsUnitInfos)
字段名 中文含义 数据类型 允许空 约束条件
GUnitId 单位ID int N 主键,自增长
GUnitName 单位名称 nvarchar(5) N 无
GUnitPYNo 单位拼音码 varchar(10) Y 无
GUnitOrder 单位顺序 int N 无
IsDeleted 是否删除 int N 无
Creator 创建人 nvarchar(50) N 无
CreateTime 创建时间 datetime N 无
商品类型表用于维护商品的分类信息,包括类型ID、类型名称。如表4-4所示。
表4-4 商品类型表(GoodsTypeInfos)
字段名 中文含义 数据类型 允许空 约束条件
GTypeId 类型ID int N 主键,自增长
GTypeName 类型名称 nvarchar(50) N 无
ParentId 父类型ID int Y 外键
ParentName 父类型名称 nvarchar(50) Y 无
GTypeNo 类型编号 varchar(50) Y 无
GTPYNo 类型拼音码 varchar(50) Y 无
GTOrder 类型顺序 int N 无
Creator 创建人 nvarchar(50) N 无
CreateTime 创建时间 datetime N 无
IsDeleted 是否删除 int N 无
采购入库单表用于记录采购入库的基本信息,包括采购单号、ID、供应商ID、仓库ID、采购金额、经手人、创建时间、创建人、审核人、批准时间、入库时间等。如表4-5所示。
表4-5 采购入库单表(PerchaseInStoreInfos)
字段名 中文含义 数据类型 允许空 约束条件
PerId 采购单ID int N 主键,自增长
PerchaseNo 采购单号 varchar(50) N 无
UnitId 供应商ID int N 外键
StoreId 仓库ID int N 外键
DealPerson 经手人 nvarchar(50) N 无
PayDesp 付款方式 nvarchar(200) Y 无
ThisAmount 本次金额 decimal(18,2) N 无
Remark 备注 nvarchar(500) Y 无
TotalAmount 总金额 decimal(18,2) N 无
YHAmount 优惠金额 decimal(18,2) N 无
Creator 创建人 nvarchar(50) N 无
CreateTime 创建时间 datetime N 无
IsChecked 是否审核 int N 无
IsPayed 是否付款 int N 无
IsPayFull 是否全额付款 int N 无
CheckTime 审核时间 datetime Y 无
CheckPerson 审核人 nvarchar(50) Y 无
PayTime 付款时间 datetime Y 无
IsDeleted 是否删除 int N 无
采购商品表用于记录采购入库的商品明细信息,包括采购单ID、采购商品ID、数量、单价、金额、备注等。如表4-6所示。
表4-6 采购商品表(PerchaseGoodsInfos)
字段名 中文含义 数据类型 允许空 约束条件
PerGoodsId 采购商品ID int N 主键,自增长
PerId 采购单ID int N 外键
GoodsId 商品ID int N 外键
GUnit 单位 nvarchar(5) N 无
Count 数量 int N 无
PerPrice 单价 decimal(18,2) N 无
Amount 金额 decimal(18,2) N 无
Remark 备注 nvarchar(500) Y 无
IsDeleted 是否删除 int N 无
库存表用于记录商品的库存信息,包括库存ID、仓库ID、商品ID、当前数量、库存金额、库存上限、库存下限等。如表4-7所示。
表4-7 库存表(StoreGoodsStockInfos)
字段名 中文含义 数据类型 允许空 约束条件
StoreGoodsId 库存ID int N 主键,自增长
StoreId 仓库ID int N 外键
GoodsId 商品ID int N 外键
StCount 初始数量 int N 无
StAmount 初始金额 decimal(18,2) N 无
StPrice 初始单价 decimal(18,2) N 无
CurCount 当前数量 int N 无
StockAmount 库存金额 decimal(18,2) N 无
StockUp 库存上限 int Y 无
StockDown 库存下限 int N 无
Creator 创建人 nvarchar(20) N 无
Createtime 创建时间 datetime N 无
IsDeleted 是否删除 int Y 无
库存变动表用于记录商品库存的变动情况,包括变动类型、商品ID、仓库ID、入库数量、出库数量、当前数量等。如表4-8所示。
表4-8 库存变动表(StockChangeInfos)
字段名 中文含义 数据类型 允许空 约束条件
StockChangeId 变动ID int N 主键,自增长
CheckShId 单据ID int N 外键
ShType 单据类型 int N 无
StoreId 仓库ID int N 外键
GoodsId 商品ID int N 外键
InCount 入库数量 int N 无
OutCount 出库数量 int N 无
CurCount 当前数量 int N 无
仓库表用于维护仓库的基本信息,包括仓库编号、仓库名称、仓库类型、备注等。如表4-9所示。
表4-9 仓库表(StoreInfos)
字段名 中文含义 数据类型 允许空 约束条件
StoreId 仓库ID int N 主键,自增长
StoreNo 仓库编号 varchar(50) Y 无
StoreName 仓库名称 nvarchar(50) N 无
STypeId 仓库类型ID int N 外键
StorePYNo 仓库拼音码 varchar(50) Y 无
StoreOrder 仓库顺序 int N 无
StoreRemark 仓库备注 nvarchar(500) Y 无
IsDeleted 是否删除 int N 无
Creator 创建人 nvarchar(50) N 无
CreateTime 创建时间 datetime N 无
4.4 界面设计
4.4.1 界面设计采用WinForm
WinForm自身包含了大量的窗体控件,当然,设计者也可以通过给定的接口来设计自己的窗体控件。本着简洁方便的原则,通过使用微软提供的窗体控件使得程序风格统一并且与用户日常接触的习惯一致。通过为按钮等控件赋予一些声音和颜色特性,给用户更好的反馈效果。
4.4.2 主页面设计
系统主页面分为三个部分,最上面是菜单栏(MenuStrip),菜单栏有系统管理、基础资料、业务管理、查询中心、退出系统等菜单选项。每个菜单都有下拉框(显示具体的功能)菜单栏下方是工具栏(SideBar),用户登录进来后所拥有的功能(如商品信息、仓库信息等)都在这里显示。中间最大的区域是业务操作区,单击左侧和上方的功能项之后弹出的窗口(如商品信息列表)都将在此显示。系统主页面如图4-1所示。

图4-1系统主页面图
4.4.3 选项卡设计
为了方便用户的操作,打开新的页面时系统会以选项卡的方式在中间部分显示。系统允许用户同时打开多个选项卡且支持刷新和关闭操作。如果用户要打开的页面已经存在,那么不会打开相同的页面,而是选中选项卡。选项卡如图4-2所示。

图4-2 选项卡图
4.4.4 数据表格设计
系统为数据表格采用 Windows Forms 的 DataGridView 控件作为核心组件,设计统一表现形式。数据表格提供灵活按条件查询功能,如按商品编号、名称、类别等条件查询商品列表。用户可自定义页面显示数据数量,手动刷新数据表格确保查看最新数据,采用整行选择模式方便业务处理,支持单元格双击查看或编辑详情。列宽可自动适应表格宽度,也支持用户手动拖拽调整,数据过多时自动生成滚动条。支持多样化单元格类型,如文本框、复选框、链接列等。提供将数据导出到 Excel 的功能,方便数据备份和报表制作。当用户完成数据操作后,数据表格立即更新,保证及时看到操作结果。数据表格如图4-3所示。

图4-3 数据表格图
4.5 本章小结
本章详细阐述了商场进销存管理系统的设计过程,涵盖概要设计、详细设计、数据库设计及界面设计。概要设计明确了系统整体功能架构与模块关联,规划了软件整体结构与数据结构设计;详细设计针对各模块算法、数据结构及接口进行设计,确保开发规范与一致性;数据库设计构建了商品、供应商、库存等核心表结构,保障数据存储与交互;界面设计采用WinForm,介绍了主页面、选项卡及数据表格的设计方案,旨在提升用户体验与操作便捷性。
第5章 系统技术方案
5.1 数据导出组件选用
鉴于数据导出功能的实现需求,本商品进销存管理系统选用开源的NPOI库作为数据导出核心组件。NPOI库允许在不依赖Microsoft Office环境下创建、读取和修改Excel文件,有效避免版权问题并提升系统兼容性。系统通过NPOI的XSSFWorkbook和HSSFWorkbook类分别支持Excel 2007及以上版本(.xlsx)和Excel 2003版本(.xls)的文件生成,核心导出方法封装于工具层FormUtility.cs中,通过泛型设计实现任意数据类型的导出支持。
5.2 业务流程管理
基于公司的运营架构与业务需求,业务流程通常涵盖申请、审批、操作、反馈(针对涉及状态变更的业务)等环节。以下将分别对销售管理、采购管理、库存管理、商品管理、基础数据管理的业务流程展开详细介绍。
5.2.1 销售管理流程
销售管理流程旨在保障商品从企业顺畅流转至客户手中,确保销售业务在规范、高效的框架内开展。
销售流程步骤:
销售申请、销售审批、销售出库操作、销售结算与反馈。
5.2.2 采购管理流程
采购管理流程致力于确保企业生产经营所需物资能够及时、稳定地从供应商处获取,保障企业运营的连续性。
采购流程步骤:
采购申请、采购审批、采购执行与沟通、采购入库验收、采购结算与反馈。
5.2.3 库存管理流程
库存管理流程主要聚焦于对商品库存数量、状态、位置等信息的精准管理,确保库存数据的准确性和及时性,为企业运营决策提供可靠依据。
库存流程步骤:入库处理、出库处理、库存盘点、库存预警与调整。
5.2.4 商品管理流程
在整个软件的开发过程中,这部分是我进行编写操作的,所以这部分的介绍更加详细:
商品管理流程主要围绕商品的基本信息、价格体系、分类结构等进行全面管理,保证商品信息的准确性、完整性和一致性,提升商品管理的效率和水平。
商品流程步骤:
商品信息录入:相关人员在系统中详细录入商品的基本信息,包括商品名称、规格、型号、单位、产地、生产日期、保质期、图片等。确保信息准确无误,为后续业务操作提供基础支持。
商品价格设定:根据市场动态、成本因素以及企业的定价策略,合理设定商品的销售价格、采购价格等。价格设定可考虑不同客户群体、不同销售渠道、不同促销活动等因素,实现灵活定价,提高市场竞争力。
商品分类管理:按照商品的性质、用途、品牌、材质等维度对商品进行科学分类,构建清晰的商品分类体系。方便商品的管理、查询和统计分析,提高工作效率。
商品信息维护与更新:定期对商品信息进行全面检查和维护,及时更新商品的价格、库存状态、保质期等关键信息。确保商品信息始终与实际情况保持一致,为销售、采购等业务提供准确依据。
5.2.5 基础数据管理流程
基础数据管理流程主要针对系统运行所依赖的各类基础数据进行集中管理,如客户信息、供应商信息、员工信息、商品类别信息等,为其他业务流程提供坚实的数据支撑。
基础数据流程步骤:基础数据录入、基础数据审核、基础数据维护与更新。
5.3 重要数据加密
为了保证系统数据安全,特别是敏感信息如用户密码、客户信息、供应商信息等,系统采用了MD5加密算法进行加密存储。同时,对于一些在传输过程中需要保密的数据,也采用加密措施保证数据安全。
系统在特定命名空间下实现了MD5加密功能,代码如下:
MD5加密类实现:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace PSI.Common.Encrypt
{
///
/// 不可逆加密,限于字母和数字
///
public class MD5Encrypt
{
#region MD5
///
/// MD5加密,和动网上的16/32位MD5加密结果相同
///
/// 待加密字串
/// 16或32值之一,其它则采用.net默认MD5加密算法
///
public static string Encrypt(string source, int length = 32)
{
HashAlgorithm provider = CryptoConfig.CreateFromName("MD5") as HashAlgorithm;
if (string.IsNullOrEmpty(source)) return string.Empty;
byte[] bytes = Encoding.ASCII.GetBytes(source);
byte[] hashValue = provider.ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
switch (length)
{
case 16://16位密文是32位密文的9到24位字符
for (int i = 4; i < 12; i++)
sb.Append(hashValue[i].ToString("x2"));
break;
case 32:
for (int i = 0; i < 16; i++)
{
sb.Append(hashValue[i].ToString("x2"));
}
break;
default:
for (int i = 0; i < hashValue.Length; i++)
{
sb.Append(hashValue[i].ToString("x2"));
}
break;
}
return sb.ToString();
}
#endregion MD5
}
}
加密应用场景:
用户密码加密:用户登录时,输入的密码经过MD5加密后与数据库中存储的加密密码进行比对,验证用户身份。
敏感数据存储:系统中的客户信息、供应商信息等敏感数据在存储到数据库前,进行MD5加密处理,保证数据在数据库中的安全性。
敏感数据传输:在系统与外部系统进行数据交互或内部不同模块之间传输敏感数据时,采用加密措施保证数据在传输过程中的安全。
5.4 初始化功能列表
系统通过用户表(User)、角色表(Role)、功能表(Function)以及角色功能关联表(RoleFunction)4张表实现了精细化的权限管理。其中用户表中包含角色ID字段,一个用户可关联多个角色(通过角色表与用户表的多对多关联实现,实际存储在中间关联表或通过代码逻辑处理多角色情况);角色表与功能表通过角色功能关联表建立多对多关系,一个角色可以包含多个功能,一个功能也可被多个角色拥有。4张表关联起来可以精准得到用户的功能列表。
用户登录系统后,根据用户的角色信息,查询数据库得到用户拥有的功能项,然后利用这些功能项实例化系统界面中的功能列表,包括左侧的菜单栏和上方的工具栏。
关键代码:
///
/// 加载菜单栏和工具栏
///
private void LoadMenusAndToolBars()
{
List
List
bool isAdmin = CheckIsAdmin(); // 判断是否为超级管理员
if (isAdmin)
{
// 获取所有的菜单和工具栏菜单
menuList = menuBLL.GetAllMenuList();
toolMenuList = tmBLL.GetAllToolMenuList();
}
else
{
// 加载登录者拥有的菜单和工具栏菜单
List
menuList = menuBLL.GetMenuListByRoleIds(roleIds);
toolMenuList = tmBLL.GetToolMenuListByRoleIds(roleIds);
}
ClearMenusAndToolBars(); // 清空现有菜单和工具栏
// 添加菜单项
AddMenuItems(menuList, null, 0);
// 添加工具菜单项
AddToolMenuItems(toolMenuList);
}
///
/// 递归添加菜单项
///
/// 菜单列表
/// 父菜单项
/// 父菜单ID
private void AddMenuItems(List
{
// 获取所有子菜单列表
var childList = mList.Where(m => m.ParentId == pId);
foreach (var child in childList)
{
ToolStripMenuItem mi = new ToolStripMenuItem();
mi.Name = child.MId.ToString();
mi.Text = child.MName;
if (!string.IsNullOrEmpty(child.MKey))
{
// 设置快捷键
string sKey = child.MKey.ToString().Trim();
if (sKey.Length > 1 && sKey.Split('+')[0].ToLower() == "alt" && child.ParentId == 0)
{
mi.Text += $"(&{sKey.Split('+')[1]})";
}
mi.ShortcutKeys = SetShortKeys(sKey);
}
// 菜单项关联页面
if (!string.IsNullOrEmpty(child.MUrl))
{
mi.Tag = child;
}
// 菜单项响应事件注册
if (mList.Where(m => m.ParentId == child.MId).ToList().Count == 0)
{
mi.Click += Mi_Click;
}
if (pMenu != null)
pMenu.DropDownItems.Add(mi);
else
PSIMenus.Items.Add(mi);
AddMenuItems(mList, mi, child.MId); // 递归添加子菜单
}
}
///
/// 判断是否为超级管理员
///
///
private bool CheckIsAdmin()
{
bool isAdmin = false;
foreach (var ur in urList) // urList为存储用户角色信息的列表,在合适位置初始化赋值
{
if (ur.IsAdmin == 1) // 假设角色信息中有IsAdmin字段标识是否为超级管理员
{
isAdmin = true;
break;
}
}
return isAdmin;
}
///
/// 获取用户所属角色ID列表
///
///
private List
{
// 这里根据实际业务逻辑,从数据库或其他数据源获取用户所属角色ID列表
// 示例代码,假设urList中存储了用户角色关联信息
List
foreach (var ur in urList)
{
roleIds.Add(ur.RoleId);
}
return roleIds;
}
功能列表初始化流程:
用户登录:用户输入用户名和密码进行登录,系统验证用户身份,验证成功后将用户相关信息(如用户ID、用户名等)存储在合适位置(如Session或全局变量等,示例代码中urList可理解为存储了部分用户角色关联信息,实际可根据需求调整数据结构存储更全面的用户信息)。
权限验证:系统根据用户身份,通过查询数据库中用户角色关联表获取用户所属角色信息,将角色信息整理成合适的列表形式(如GetUserRoleIds方法返回的List )。
功能查询:根据用户角色信息,查询数据库中的角色功能关联表、功能表等,获取对应的菜单和工具菜单项数据。如果是超级管理员,则直接获取所有菜单和工具菜单项数据。
动态生成:根据查询结果,通过LoadMenusAndToolBars方法,先清空现有菜单和工具栏,然后调用AddMenuItems方法递归添加菜单项,调用AddToolMenuItems方法(示例代码中未完整展示,可参考前文完整流程中的类似方法实现)添加工具菜单项,动态生成菜单和工具栏。
功能访问控制:在整个初始化过程中,通过角色权限控制,确保用户只能看到和访问已授权的功能模块,在菜单项点击事件(如Mi_Click方法)中进一步验证用户是否有权限访问对应功能页面,确保系统操作的安全性。
5.5 本章小结
本章主要阐述了商品进销存管理系统的系统技术方案,涵盖多个关键方面:数据导出组件选用:选用开源的NPOI库作为数据导出核心组件,支持不同版本Excel文件生成,通过泛型设计实现任意数据类型导出支持,提升系统兼容性与导出功能灵活性。业务流程管理:详细介绍了销售管理、采购管理、库存管理、商品管理、基础数据管理的业务流程,明确各环节步骤,保障企业业务规范、高效、有序开展。重要数据加密:采用MD5加密算法对用户密码、客户信息、供应商信息等敏感数据在存储和传输过程中进行加密处理,确保数据安全。初始化功能列表:通过用户、角色、功能及角色功能关联4张表实现精细化权限管理,用户登录后根据角色信息动态生成菜单栏和工具栏,实现用户权限的精细化管理,并在功能访问时进一步验证权限。
这些技术方案从数据导出、业务流程、数据安全到权限管理等多维度保障了系统的安全性、可靠性和可维护性,为企业的商品进销存管理提供了坚实的技术支撑。

浙公网安备 33010602011771号