1引言
1.1编写目的
本说明书是对超市销售管理系统的进行详细地设计分析,对系统的功能和性能进行了整体的规划。为系统的实现和系统的测试提供一个具体的参考。
1.2背景
说明:
a.待开发软件系统的名称;
b.本项目的任务提出者、开发者、用户和运行该程序系统的计算中心。
1.3定义
(1)商品条形码:每种商品具有唯一的条形码,对于某些价格一样的商品,可以使用自定义条形码;
(2)交易清单:包括交易的流水账号、每类商品的商品名、数量、该类商品的总金额、交易的时间、负责本次收银的员工号;
1.4参考资料
《软件工程》 齐治昌 谭庆平 宁洪 第二版 2007 高等教育出版社
《数据库系统概论》 王珊 萨师煊 第四版 2007 高等教育出版社
《数据结构(C语言版)》 严蔚敏 吴伟民 2008 清华大学出版社
2程序系统的结构
3程序1(标识符)设计说明
从本章开始,逐个地给出各个层次中的每个程序的设计考虑。以下给出的提纲是针对一般情况的。对于一个具体的模块,尤其是层次比较低的模块或子程序,其很多条目的内容往往与它所隶属的上一层模块的对应条目的内容相同,在这种情况下,只要简单地说明这一点即可。
3.1程序描述
该程序是超市销售管理系统软件的第四个子部分——商品库存管理系统,设计这个系统是为了方便的管理商品的信息,包括商品的查询,修改,删除等操作。本程序设计的特点就是要简洁,高效,方便。为使用者提供一个方便的使用环境。
3.2功能
该程序具有增加,查询和修改商品信息的功能,具体处理流程如下:
3.3性能
在录入的时候保证数据的正确性与记录的唯一性,根据编号的唯一性确保记录的准确查询的时候保证查全性,所有相应域包含查询关键字的记录都应能查到。查询的时候保证查准性,查到的记录应与给定的单项或组合查询条件完全匹配。该程序的最长响应时间:1s;更新处理时间: 5s;数据的转换和传送时间:5s;解题时间; 3s。当外部硬件软件发生变化时,要做出及时的改变相适应,有较强的灵活性。
3.4输人项
商品清单(MerchBill)
中文字段名 | 英文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
商品编号 | merchID | char | 6 | P | NOT NULL |
供货商号 | profferID | char | 6 | F | NOT NULL |
名称 | fullName | varchar | 80 | NOT NULL | |
条形码 | barCode | char | 15 | NOT NULL | |
计量单位 | metricUnit | varchar | 4 | NOT NULL | |
类别 | kind | varchar | 8 | NULL | |
产地 | birthPlace | varchar | 50 | NULL | |
单价 | unitCost | money | 4 | NOT NULL | |
备注 | others | text | 50 | NULL |
3.5输出项
商品清单(MerchBill)
中文字段名 | 英文字段名 | 字段类型 | 长度 | 主键/外键 | 字段值约束 |
商品编号 | merchID | char | 6 | P | NOT NULL |
供货商号 | profferID | char | 6 | F | NOT NULL |
名称 | fullName | varchar | 80 | NOT NULL | |
条形码 | barCode | char | 15 | NOT NULL | |
计量单位 | metricUnit | varchar | 4 | NOT NULL | |
类别 | kind | varchar | 8 | NULL | |
产地 | birthPlace | varchar | 50 | NULL | |
单价 | unitCost | money | 4 | NOT NULL | |
备注 | others | text | 50 | NULL |
3.6算法
详细说明商品信息管理的算法:
添加一条商品信息
/*添加一条商品信息,输出商品编号和执行结果*/
CREATE PROC dbo.GoodsAddNew
(
@ merchID varchar(100), --商品编号
@ fullName varchar(100), --名称
@ barCode varchar(15), --条形码
@Amount decimal(18, 2), --库存数量
@ kind int, --类型编号
@ birthPlace varchar(100), --产地
@ profferID int, --供货商编号
@Introduce varchar(1000), --商品名称
@ others varchar(1000), --备注
@ profferID nt OUTPUT, --商品编号
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
DECLARE @ErrNo int --保存错误号
BEGIN TRANSACTION --开始事务
/*手动维护数据唯一性的代码。*/
DECLARE @ExistName bit
EXEC ExistByName 'Goods', 'GoodsName', @GoodsName, @ExistName OUTPUT
IF @ExistName = 1 --当前商品名称已存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 3 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
/*添加记录*/
INSERT INTO Goods Values(@GoodsName, @Amount, @UnitName, @TypeID, @SupplierID, @Introduce, @Remark)
--记录当前的错误号
SELECT @ErrNo = @@ERROR
/*输出参数*/
IF @ErrNo = 0 --没有发生错误
BEGIN
SELECT @ID = (SELECT MAX(GoodsID) FROM Goods)
SELECT @ReturnValue = 0
END
ELSE IF @ErrNo = 2627 --违反唯一约束
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 3
RETURN
END
ELSE --其他未知错误
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
删除一条商品信息
/*删除一条商品信息,输出执行结果*/
CREATE PROC dbo.GoodsDelete
(
@GoodsID int, --商品编号
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
DECLARE @ErrNo int --保存错误号
BEGIN TRANSACTION --开始事务
/*验证是否存在当前商品编号,若否则不能删除*/
DECLARE @ExistID bit
EXEC ExistByID 'Goods', 'GoodsID', @GoodsID, @ExistID OUTPUT
IF @ExistID = 0 --当前商品编号不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
/*手动维护数据完整性的代码*/
EXEC ExistByID 'Buy', 'BuyID', @GoodsID, @ExistID OUTPUT
IF @ExistID = 1
BEGIN
ROLLBACK TRANSACTION
SELECT @ReturnValue = 3
RETURN
END
/*验证销售信息是否包含当前商品,若是则不能删除*/
EXEC ExistByID 'Sale', 'SaleID', @GoodsID, @ExistID OUTPUT
IF @ExistID = 1
BEGIN
ROLLBACK TRANSACTION
SELECT @ReturnValue = 3
RETURN
END
/*删除记录*/
DELETE FROM Goods WHERE GoodsID = @GoodsID
--记录当前的错误号
SELECT @ErrNo = @@ERROR
/*输出参数*/
IF @ErrNo = 0 --没有发生错误
SELECT @ReturnValue = 0
ELSE IF @ErrNo = 547 --发生外键冲突
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 3
RETURN
END
ELSE --其他未知错误
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
返回所有供货商
CREATE VIEW dbo.view_Supplier
AS
/*返回所有供货商*/
SELECT SupplierID, SupplierName, Contact, Introduce, Remark FROM Supplier
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE VIEW dbo.view_Buy
AS
SELECT B.BuyID, B.GoodsID, G.GoodsName,
B.UnitPrice, B.Amount, G.UnitName,
B.UnitPrice * B.Amount AS TotalPrice,
B.Deliverer, B.Transactor, B.RegistrarID,
B.RegDate, G.TypeID, G.SupplierID, B.Remark
FROM Buy AS B LEFT OUTER JOIN Goods AS G
ON B.GoodsID = G.GoodsID
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
3.7流程逻辑
3.8接口
3.9存储分配
本程序采用的是malloc/free动态管理内存,在程序需要的时候想系统申请空间,适当的时候释放不使用的空间。由于程序中某些地方可能不通过malloc调用申请空间,因此,malloc管理的空间不一下是连续的。这样,空闲存储空间以空闲链表的方式组织,每个块包含一个长度、一个指向下一块的指针以及一个指向自身的存储空间的指针。这些块按照存储地址的升序组织,最后一块指向第一块。
3.10注释设计
说明准备在本程序中安排的注释,如:
a.加在模块首部的注释;
b.加在各分枝点处的注释;
c.对各变量的功能、范围、缺省条件等所加的注释;
d.对使用的逻辑所加的注释等等。
3.11条件
1.运行本软件程序首先要有员工信息密码等信息确认;
2.本程序受到机器本身硬件设备的影响,在速度上可能会出现一定的差异;
3.本程序的输入值要按照预定的输入,不然会报错;
4.如果需要新的功能这要在程序中增加代码。
3.12测试计划
这计划将在下一个测试报告中详细的说明。
3.13尚未解决的问题
说明在本程序的设计中尚未解决而设计者认为在软件完成之前应解决的问题。
4程序2(标识符)设计说明
用类似F.3的方式,说明第2个程序乃至第N个程序的设计考虑。
......