
1.1、可行性分析
21世纪,超市的竞争也进入到了一个全新的领域,竞争已不再是规模的竞争,而是技术的竞争、管理的竞争、人才的竞争。技术的提升和管理的升级是超市业的竞争核心。零售领域目前呈多元发展趋势,多种业态:超市、仓储店、便利店、特许加盟店、专卖店、货仓等相互并存。如何在激烈的竞争中扩大销售额、降低经营成本、扩大经营规模,成为超市营业者努力追求的目标。
针对超市的特点,为了帮助超市解决现在面临的问题,提高小型超市的竞争力,我们将开发以下系统:前台POS销售系统、后台管理系统,其中这两个子系统又包含其它一些子功能。
为了大大提高超市的运作效率;通过全面的信息采集和处理,辅助提高超市的决策水平;使用本系统,可以迅速提升超市的管理水平,为降低经营成本, 提高效益,增强超市扩张力, 提供有效的技术保障。提出要开发超市管理系统。
该系统主要有以下这些功能,商品录入、收银业务、作业、进货管理、销售管理、库存管理、人员管理等功能,在技术上实现这功能基本都可以实现,技术可行性上可行。在操作可行性方面,这些功能在操作上比较简单,分有几个级别的权限,分别对比较敏感的操作进行安全性保护。这个系统,对于小型的超市来说,可以用比较少的成本来简化平时的一些手工操作。在经济可行性上是可行的。
1.2、系统基本需求分析
1.2.1、UML设计
(1)系统UML模型
(2)子系统UML模型
A、零售前台(POS)管理系统用例视图
B、后台管理系统用例视图
1.2.2、系统实现图
1.2.3、系统需求分析
(1)、系统功能
A、零售前台(POS)管理系统,本系统必须具有以下功能:
商品录入:根据超巿业务特点制定相关功能,可以通过输入唯一编号、扫描条形码、商品名称等来实现精确或模糊的商品扫描录入。该扫描录入方法可以充分保证各种电脑操作水平层次的人员均能准确快速地进行商品扫描录入。
收银业务:通过扫描条形码或者直接输入商品名称(对于同类多件商品采用一次录入加数量的方式)自动计算本次交易的总金额。在顾客付款后,自动计算找零,同时打印交易清单(包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号)。如果顾客是本店会员并持有本人会员卡,则在交易前先扫描会员卡,并对所购物品全部实行95折优惠,并将所购物品的总金额累计到该会员的总消费金额中。 会员卡的有效期限为一年,满一年未续卡者,该会员卡将被注销。
安全性:OS登陆、退出、换班与操作锁定等权限验证保护;断电自动保护最大限度防止意外及恶意非法操作。
作业:有的断网收银即在网络服务器断开或网络不通的情况下,收银机仍能正常作业
B、后台管理系统,本系统必须具备以下功能
进货管理: 根据销售情况及库存情况,自动制定进货计划(亦可手工制定修改),可以避免盲目进货造成商品积压。 按计划单有选择性地进行自动入库登记。 综合查询打印计划进货与入库记录及金额。
销售管理: 商品正常销售、促销与限量、限期及禁止销售控制。 综合查询各种销售明细记录、各地收银员收银记录以及交结账情况等。 按多种方式统计生成销售排行榜,灵活察看和打印商品销售日、月、年报表。
库存管理: 综合查询库存明细记录。 库存状态自动告警提示。如库存过剩、少货、缺货等。软件为您预警,避免库存商品积压损失和缺货。 库存自动盘点计算。
人员管理: 员工、会员、供货商、厂商等基本信息登记管理。 员工操作权限管理。 客户销售权限管理。
(2)、系统结构
系统总体结构
模块子系统结构
功能描述:商品录入子系统要求能快速录入商品,因此必须支持条形码扫描。
功能描述:收银业务子系统能计算交易总额,打印交易清单,并根据会员卡打折。
功能描述:进货管理子系统可以根据库存自动指定进货计划,进货时自动等级,以及提供查询和打印计划进货与入库记录的功能。
功能描述:销售管理子系统可以控制某商品是否允许销售,查询每种商品的销售情况并产生年、月、日报表,同时可以生成销售排行榜。
功能描述:库存管理子系统提供查询库存明细记录的基本功能,并根据库存的状态报警,以及自动盘点计算。
功能描述:人员管理子系统提供基本信息登记管理,员工操作权限管理,客户销售权限管理的功能。
二、关键实施技术
2.1、系统环境需求
系统模式
本系统采用C/S模式作为开发模式
硬件环境
服务器端:
高性能的计算机一台,
普通的双绞线作为连接。
客户端: 普通的计算机或者工作站,
普通的双绞线作为连接。
软件环境
服务器端:安装SQL Server 2000的服务器版本,
安装windows 2000服务器版本,
配置了诺顿等必须的防毒软件。
客户端: 安装SQL Server2000的服务器版本,
安装了VB等可视化开发工具软件,
安装windows2000服务器版本。
2.2、系统安全问题
信息系统尽管功能强大,技术先进,但由于受到自身体系结构,设计思路以及运行机制等,也隐含许多不安全因素。常见因素有:数据的输入,输出,存取与备份,源程序以及应用软件,数据库,操作系统等漏洞或缺陷,硬件,通信部分的漏洞,企业内部人员的因素,病毒,“黑客”等因素。因此,为使本系统能够真正安全,可靠,稳定地工作,必须考虑如下问题:为保证安全,不致使系统遭到意外事故的损害,系统因该能防止火,盗或其他形式的人为破坏。
系统要能重建
系统应该是可审查的
系统应能进行有效控制,抗干扰能力强
系统使用者的使用权限是可识别的
三、概要设计
3.1、系统流程图
前台管理系统
顶层DFD图
第0层DFD图
第1层DFD图
3.2、用户类型与职能
(1)、员工(营业员):
通过商品条形码扫描输入商品到购买清单
操作软件计算交易总金额
操作软件输出交易清单
对会员进行会员卡扫描以便打折
(2)、超市经理:
操作软件录入商品,供货商,厂商
操作软件制定进货计划
查询打印计划进货与入库记录
操作软件控制商品销售与否
查询打印销售情况
操作软件生成销售排行榜
查询库存明细记录
根据软件发出的库存告警进行入货
操作软件进行盘点计算
(3)、总经理:
基本信息登记管理
员工操作权限管理
客户销售权限管理
3.3、统开发步骤
确定参与者和相关的用况
为每个用况设计过程
建立顺序图,确定每个脚本中对象的协作
创建类,确定脚本中的对象
设计, 编码, 测试, 集成类
为过程编写系统测试案例
运行测试案例,检验系统
3.4、系统ER图
系统ER图说明
1) 商店中的所有用户(员工)可以销售多种商品,每种商品可由不同用户(员工)销售;
2) 每个顾客可以购买多种商品,不同商品可由不同顾客购买;
3) 每个供货商可以供应多种不同商品,每种商品可由多个供应商供应。
四、详细设计
4.1、系统关系模型
a) 商品信息表(商品编号,商品名称,价格,条形码,促销价格,促销起日期,促销止日期,允许打折,库存数量,库存报警数量,计划进货数,允许销售,厂商编号,供货商编号)
b) 用户表(用户编号,用户名称,用户密码,用户类型)
c) 会员表(会员编号,会员卡号,累积消费金额,注册日期)
d) 销售表(销售编号,商品编号,销售数量,销售金额,销售日期)
e) 交易表(交易编号,用户名称,交易金额,会员卡号,交易日期)
f) 进货入库表(入库编号,入库商品编号,入库数量,单额,总额,入库日期,计划进货日期,入库状态)
g) 供货商表(供货商编号,供货商名称,供货商地址,供货商电话)
h) 厂商表(厂商编号,厂商名称,厂商地址,厂商电话)
4.2、系统数据库表结构
数据库表索引
| 表名 | 中文名 |
| MerchInfo | 商品信息表 |
| User | 用户表 |
| Menber | 会员表 |
| Sale | 销售表 |
| Dealing | 交易表 |
| Stock | 进货入库表 |
| Provide | 供货商表 |
| Factory | 厂商表 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| MerchID | int | 4 | P | Not null | 商品编号 |
| MerchName | Varchar | 50 | Not null | 商品名称 | |
| MerchPrice | Money | 4 | Not null | 价格 | |
| MerchNum | Int | 4 | Not null | 库存数量 | |
| CautionNum | Int | 4 | Not null | 库存报警数量 | |
| PlanNum | Int | 4 | null | 计划进货数 | |
| BarCode | Varchar | 50 | Not null | 条形码 | |
| SalesProPrice | Money | 4 | 促销价格 | ||
| SalesProDateS | Datetime | 8 | 促销起日期 | ||
| SalesProDateE | Datetime | 8 | 促销止日期 | ||
| AllowAbate | Int | 4 | Not null | 允许打折 | |
| AllowSale | Int | 4 | Not null | 允许销售 | |
| FactoryID | Varchar | 10 | F | Not null | 厂商编号 |
| ProvideID | Varchar | 10 | F | Not null | 供货商编号 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| UserID | varchar | 10 | P | Not null | 用户编号 |
| UserName | Varchar | 25 | Not null | 用户名称 | |
| UserPW | Varchar | 50 | Not null | 用户密码 | |
| UserStyle | Int | 4 | Not null | 用户类型 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| MemberID | Varchar | 10 | P | Not null | 会员编号 |
| MemberCard | Varchar | 20 | Not null | 会员卡号 | |
| TotalCost | Money | 4 | Not null | 累积消费金额 | |
| RegDate | Datetime | 8 | Not null | 注册日期 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| SaleID | Varchar | 10 | P | Not null | 销售编号 |
| MerChID | Varchar | 10 | F | Not null | 商品编号 |
| SaleDate | Datetime | 8 | Not null | 销售日期 | |
| SaleNum | Int | 4 | Not null | 销售数量 | |
| SalePrice | Money | 4 | Not null | 销售单额 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| DealingID | Varchar | 10 | P | Not null | 交易编号 |
| DealingPrice | Money | 4 | Not null | 交易金额 | |
| DealingDate | Money | 4 | Not null | 交易日期 | |
| MemberID | Varchar | 10 | 会员卡号 | ||
| UserName | Varchar | 10 | F | Not null | 用户名称 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| StockID | Varchar | 10 | P | Not null | 入库编号 |
| MerchID | Varchar | 10 | F | Not null | 入库商品编号 |
| MerchNum | Int | 4 | Not null | 入库数量 | |
| MerchPrice | Money | 4 | Not null | 单额 | |
| TotalPrice | Money | 4 | Not null | 总额 | |
| StockDate | Datetime | 8 | Datetime | 入库日期 | |
| PlanDate | Datetime | 8 | Datetime | 计划进货日期 | |
| StockState | Int | 4 | Not null | 入库状态 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| ProvideID | varchar | 10 | P | Not null | 供货商编号 |
| ProvideName | Varchar | 50 | Not null | 供货商名称 | |
| ProvideAddress | Varchar | 250 | 供货商地址 | ||
| ProvidePhone | Varchar | 25 | 供货商电话 |
| 字段名 | 字段类型 | 长度 | 主/外键 | 字段值约束 | 对应中文名 |
| FactoryID | varchar | 10 | P | Not null | 厂商编号 |
| FactoryName | Varchar | 50 | Not null | 厂商名称 | |
| FactoryAddress | Varchar | 250 | 厂商地址 | ||
| FactoryPhone | Varchar | 25 | 厂商电话 |
/*----------创建数据库----------*/
create database SuperMarketdb
on primary
(
name=SuperMarketdb,
filename='C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\SuperMarketdb.mdf',
size=100MB,
maxsize=200MB,
filegrowth=20MB
)
log on
(
name=SuperMarketlog,
filename='C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\SuperMarketdb.ldf',
size=60MB,
maxsize=200MB,
filegrowth=20MB
)
go
/*----------创建基本表----------*/
use [SuperMarketdb]
go
/*创建交易表*/
CREATE TABLE Dealing (
)
GO
/*创建厂商表*/
CREATE TABLE Factory (
)
GO
/*创建会员表*/
CREATE TABLE Member (
)
GO
/*创建商品信息表*/
CREATE TABLE MerchInfo (
)
GO
/*创建供应商表*/
CREATE TABLE Provide (
)
GO
/*创建销售表*/
CREATE TABLE Sale (
)
GO
/*创建入库表*/
CREATE TABLE Stock (
)
GO
/*创建用户表*/
CREATE TABLE User (
)
GO
/*----------创建表间约束----------*/
/*商品信息表中厂商编号、供应商编号分别与厂商表、供应商表之间的外键约束*/
ALTER TABLE MerchInfo ADD
[FactoryID]
[FactoryID]
[ProvideID]
[ProvideID]
GO
/*销售表中商品编号与商品信息表之间的外键约束*/
ALTER TABLE Sale ADD
[MerChID]
[MerchID]
GO
/*入库表中商品编号与商品信息表之间的外键约束*/
ALTER TABLE Stock ADD
[MerchID]
[MerchID]
GO
/*----------创建索引----------*/
/*在交易表上建立一个以交易编号、交易日期为索引项的非聚集索引*/
CREATE nonclustered INDEX IX_Dealing ON Dealing(DealingID, DealingDate)
GO
/*在商品信息表上建立一个以商品编号为索引项的非聚集索引*/
CREATE nonclustered INDEX IX_MerchInfo ON MerchInfo(MerchID)
GO
/*在销售表上建立一个以销售编号、销售日期为索引项的非聚集索引*/
CREATE nonclustered INDEX IX_Sale ON Sale(SaleID, SaleDate)
GO
/*在入库表上建立一个以入库编号、入库日期、商品编号为索引项的非聚集索引*/
CREATE nonclustered INDEX IX_Stock ON Stock(StockID, StockDate, MerchID)
GO
/*----------创建视图----------*/
/*创建用于查询交易情况的视图*/
CREATE VIEW v_Dealing
AS
SELECT DealingDate as 交易日期,
员工名称,
会员卡号,
交易金额
FROM Dealing
GO
/*创建用于查询进货计划的视图*/
CREATE VIEW v_PlanStock
AS
SELECT Stock.StockID as SID,
商品名称,
条形码,
厂商,
供货商,
计划进货数量,
计划进货日期
FROM Stock,MerchInfo,Provide,Factory
Where Stock.MerchID = MerchInfo.MerchID
GO
/*创建用于查询销售明细记录的视图*/
CREATE VIEW v_Sale
AS
SELECT MerchInfo.MerchName as 商品名称,
条形码,
商品价格,
销售价格,
销售数量,
销售日期
FROM Sale INNER JOIN
GO
/*创建用于查询入库情况的视图*/
CREATE VIEW v_Stock
AS
SELECT MerchInfo.MerchName as 商品名称,
条形码,
厂商,
供货商,
入库价格,
入库数量,
入库总额,
入库日期
FROM Stock,MerchInfo,Provide,Factory
Where Stock.MerchID = MerchInfo.MerchID
GO
4.4、系统模块
4.4.1、系统功能模块图
4.4.2、系统用例图
4.4.3、系统活动图
4.5、前台销售模块
4.5.1、用例图
4.5.2、活动图
4.5.3、时序图
4.5.3.1、商品销售——登录时序图:
4.5.3.2、商品销售——录入时序图:
4.5.3.3、商品销售——录入时序图
4.5.3.4、商品销售——打印时序图
4.6、后台进货管理模块
4.6.1、用例图
4.6.2、活动图
4.6.3、时序图
4.6.3.1、指定进货计划时序图
4.6.3.2、进货计划查询时序图
4.7、后台销售管理模块
4.7.1、用例图
4.7.2、活动图
4.7.3、时序图
4.7.3.1、销售管理——查询时序图
4.7.3.2、销售管理——排行时序图
4.7.3.3、销售管理——打印时序图
4.8、后台库存管理模块
4.8.1、用例图
4.8.2、活动图
4.8.3、时序图
4.8.3.1、库存管理——查询时序图
4.8.3.2、库存管理——添加时序图
4.8.3.3、库存管理——修改时序图
4.8.3.4、库存管理——删除时序图
4.9、后台人员管理模块
4.9.1、用例图
4.9.1.1、会员管理功能用例图
4.9.1.2、员工销售管理功能用例图
4.9.2、活动图
4.9.3、时序图
4.9.3.1、会员信息管理——查询时序图:
4.9.3.2、会员信息管理——添加时序图:
4.9.3.3、会员信息管理——修改时序图:
4.9.3.4、会员信息管理——删除时序图:
4.9.3.5、用户管理——添加时序图:
4.9.3.6、用户管理——修改时序图:
五、系统测试用例
5.1、测试概要
5.1.1、子功能分解
管理员权限:
销售员权限: 售货、收银
5.1.2、测试内容
功能测试:按照功能表对系统的信息修改、查询、浏览、新增功能进行一步一步地测试,测试的主要目的是发现实现和预期出现不符合的部分。在发现不符的情况下,按照序号记录发生的问题,问题的概要,发生的条件和推断导致问题的原因。最后,将子系统统和在一起进行测设,同样记录问题。在整合完毕后将所得的信息生成报告书,存留备份。
时间测试:测试每步操作及实现其功能所需要的时间。需要重复进行,确保由于时间延误导致的失败尽可能少。假如时间延误达到一定阀值,将其作为一个错误记录下来。
数据库安全测试:测试对数据库删除,写入,修改的操作,并根据客户对数据库权限的要求,测试操作人员的权限度,进一步测试系统安全性与稳定性。确保系统的安全机制不出现问题。
错误测试:由于错误输入发生的不可避免性质,需要特别强化错误信息的输入。在此,可以将两个子系统作为互相的部分来进行,具体测试举例在下文将会有所提及。
在此还要思考的问题是如果错误输入导致的破坏是不可避免的,应该如何去改进或者怎么去尽量提醒用户不要出现错误的输入。
5.2、测试用例
浏览功能测试:选择浏览库存信息(在表中信息所有商品库存信息)。
查询功能测试:输入正确的商品号1001(信息对应的商品信息)。
输入错误的商品编号:10100(对不起!没有您要查找的商 品编号)。
修改功能测试:在库存表中修改商品编号为1001的售价为12(下次销售此 商品时,显示的售价为12)。
新增功能测试:添加商品编号为10028的商品信息(库存表中能查到改商品 的信息)。
添加商品编号为1001的商品信息(对不起!该商品信息已经存在,无需再添加!)。
管理员身份: 输入正确的用户名和密码,如:用户名123,密码123(进入 系统主菜单界面)。
输入错误的用户名或密码,如:用户名1001,密码:123456 (用户名或密码输入错误)。
连续三次错误输入(对不起!您无权登录本系统!自动退出)。
输入正确的销售员的用户名和密码,如:用户名1001,密码 123123(用户名或密码错误)。
销售员身份:验证同上。
六、总结
和传统管理模式相比较,使用本系统,毫无疑问会大大提高超市的运作效率,辅助提高超市的决策水平,管理水平,为降低经营成本, 提高效益,减少差错,节省人力,减少顾客购物时间,增加客流量,提高顾客满意度,增强超市扩张能力, 提供有效的技术保障。
由于开发者能力有限,加上时间仓促,本系统难免会出现一些不足之处,例如:
本系统只适合小型超市使用,不能适合中大型超市使用;
超市管理系统涉及范围宽,要解决的问题多,功能复杂,实现困难,但由于限于时间,本系统只能做出其中的一部分功能;
对于以上出现的问题,我们深表歉意,如发现还有其它问题,希望老师批评指正。
