从该阶段开发正式进入软件的实际开发阶段,本阶段完成系统的大致设计并明确系统的数据结构与软件结构。
在软件设计阶段主要是把一个软件需求转化为软件表示的过程,这种表示只是描绘出软件的总的概貌。
本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件总体概貌,把它加工成在程序细节上非常接近于源程序的软件表示。
1.2背景a. 待开发软件系统的名称:小型超市后台管理系统b. 任务的提出者:梁永霖老师c. 开发者:马文勇李耀初郑伟清1.3参考资料陶宏才.《数据库原理及设计》.第1版.北京.清华大学出版社.2004年范立南《SQL Server 2000 实用教程》第2版.北京.清华大学出版社.2005年李香敏《SQL Server 2000 编程员指南》第1版.北京.希望电子出版社Rebecca M.Riordan《轻松搞定SQL Server 2000程序设计》第2版.北京工业出版社.2003年Watts S.Humphrey《软件工程规范》第1版.清华大学出版社.2004年2. 总体设计2.1需求规定A 硬件支持此软件没有进行远程访问的功能,也就是说软件和数据库服务器均运行与一台及其上面,因此,建议机器至少能顺畅运行SQL服务器。
本程序将在以下硬件系统进行测试:a. 处理器芯片为:Intel Celeron 2.66GHz,内存为:512MB,硬盘为:80GB。
b. 处理器芯片为:Intel P 4,主频1.8GHz,内存为:256MB,硬盘为:40GBc. 处理器芯片为:AMD Sempron 2500+,内存为:512MB,硬盘为:80GBB 软件支持本软件将在以下环境下编写完成:操作系统:Windows XP professional编程软件:Microsoft Visual Basic 6.0 中文版SQL服务器:Microsoft® SQL Server? 2000数据库查询器::SQL查询分析器操作系统:Windows 98以上系统测试系统:Windows XP Sp23.接口设计3.2外部接口本系统设有人机操作界面,考虑到操作简单,易于管理方面,主要硬件接口设备为PC,鼠标,键盘。
而软件接口主要以Windows平台为基本平台。
系统业务逻辑的独步一时几乎完全封闭在数据存储层实现,中间组件层主要通过调用远程数据库存储过程或用户自定交函数的方式来实现对数据库的访问。
数据库设计时,在sql server 2000大型数据库提供的技术下,充分利用约束,视图,存储过程,用户自定义函数及触发器等技术约束业务规则、维护数据完整性和唯一性,并实现市郊的数据存储与访问。
3.3内部接口程序利用VB下的构造ADO的连接对象的ConnectionString的配置,各cls模块之间相互独立又彼此关联,主要通过函数调用实现各部分的连接。
4.系统数据结构设计4.1 逻辑结构设计要点针对一般小型超市后台信息管理系统的需求,通过对商品进出过程的内容和数据流程分析,设计如下面所示的数据项和数据结构,各模块标示符说明如下:系统数据库表结构数据库表索引@strFieldName varchar(255), --字符型字段名@strFieldValue varchar(50), --字符型字段值@bitResult bit OUTPUT --输出值,0为不存在,1为存在)ASSET NOCOUNT ONDECLARE @strSQL varchar(3000) --主语句DECLARE @nCount int --返回记录行数/*创建存储符合条件的记录数的临时表*/IF OBJECT_ID('dbo.#tmpTable') IS NULLCREATE TABLE #tmpTable(tmpField int) --创建临时表ELSETRUNCATE TABLE #tmpTable --清空临时表/*在数据库表中检索符合条件的记录数并存储在临时表中*/SELECT @strSQL = 'SELECT COUNT([' + @strFieldName + ']) FROM [' + @strTableName + '] WHERE [' + @strFieldName + '] = ''' + @strFieldValue + '''' + ' AND ' + @strIDName + ' <> ' +CONVERT(varchar(50),@intIDValue)SELECT @strSQl = 'INSERT #tmpTable ' + @strSQLEXEC(@strSQL)/*在临时表中返回存储的记录数*/SELECT TOP 1 @nCount = tmpField FROM #tmpTable ORDER BY tmpField/*删除临时表*/DROP TABLE #tmpTable/*输出参数*/IF @nCount > 0SELECT @bitResult = 1ELSESELECT @bitResult = 0GOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ONGO添加一条商品信息/*添加一条商品信息,输出商品编号和执行结果*/CREATE PROC dbo.GoodsAddNew(@GoodsName varchar(100), --商品名称@Amount decimal(18, 2), --库存数量@TypeID int, --类型编号@UnitName varchar(100), --单位@SupplierID int, --供货商编号@Introduce varchar(1000), --商品介绍@Remark varchar(1000), --备注@ID int OUTPUT, --商品编号@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值))ASDECLARE @ErrNo int --保存错误号BEGIN TRANSACTION --开始事务/*手动维护数据唯一性的代码。
*/DECLARE @ExistName bitEXEC ExistByName 'Goods', 'GoodsName', @GoodsName, @ExistName OUTPUT IF @ExistName = 1 --当前商品名称已存在BEGINROLLBACK TRANSACTION --回滚事务SELECT @ReturnValue = 3 --返回VB组件的自定义枚举值RETURN --结束存储过程END/*添加记录*/INSERT INTO Goods Values(@GoodsName, @Amount, @UnitName, @TypeID, @SupplierID,@Introduce, @Remark)--记录当前的错误号SELECT @ErrNo = @@ERROR/*输出参数*/IF @ErrNo = 0 --没有发生错误BEGINSELECT @ID = (SELECT MAX(GoodsID) FROM Goods)SELECT @ReturnValue = 0ENDELSE IF @ErrNo = 2627 --违反唯一约束BEGINROLLBACK TRANSACTION --遇到错误则回滚事务SELECT @ReturnValue = 3RETURNENDELSE --其他未知错误BEGINROLLBACK TRANSACTION --遇到错误则回滚事务SELECT @ReturnValue = 1RETURNENDCOMMIT TRANSACTION --提交事务GOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ONGO删除一条商品信息/*删除一条商品信息,输出执行结果*/CREATE PROC dbo.GoodsDelete(@GoodsID int, --商品编号@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值))ASDECLARE @ErrNo int --保存错误号BEGIN TRANSACTION --开始事务/*验证是否存在当前商品编号,若否则不能删除*/DECLARE @ExistID bitEXEC ExistByID 'Goods', 'GoodsID', @GoodsID, @ExistID OUTPUTIF @ExistID = 0 --当前商品编号不存在BEGINROLLBACK TRANSACTION --回滚事务SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值RETURN --结束存储过程END/*手动维护数据完整性的代码*/EXEC ExistByID 'Buy', 'BuyID', @GoodsID, @ExistID OUTPUTIF @ExistID = 1BEGINROLLBACK TRANSACTIONSELECT @ReturnValue = 3RETURNEND/*验证销售信息是否包含当前商品,若是则不能删除*/ EXEC ExistByID 'Sale', 'SaleID', @GoodsID, @ExistID OUTPUTIF @ExistID = 1BEGINROLLBACK TRANSACTIONSELECT @ReturnValue = 3RETURNEND/*删除记录*/DELETE FROM Goods WHERE GoodsID = @GoodsID--记录当前的错误号SELECT @ErrNo = @@ERROR/*输出参数*/IF @ErrNo = 0 --没有发生错误SELECT @ReturnValue = 0ELSE IF @ErrNo = 547 --发生外键冲突BEGINROLLBACK TRANSACTION --遇到错误则回滚事务SELECT @ReturnValue = 3RETURNENDELSE --其他未知错误BEGINROLLBACK TRANSACTION --遇到错误则回滚事务SELECT @ReturnValue = 1RETURNENDCOMMIT TRANSACTION --提交事务GOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ONGO返回所有供货商CREATE VIEW dbo.view_SupplierAS/*返回所有供货商*/SELECT SupplierID, SupplierName, Contact, Introduce, Remark FROM SupplierGOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ONGOCREATE VIEW dbo.view_BuyASSELECT 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.RemarkFROM Buy AS B LEFT OUTER JOIN Goods AS GON B.GoodsID = G.GoodsIDGOSET QUOTED_IDENTIFIER OFFGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_NULLS ONGO5.运行测试5.1.运行模块的组合具体软件的运行模块组合为程序多窗口的运行环境,各个模块在软件运行过程中能较好的交换信息,并能够独立的处理各自的数据。