小型超市后面管理系统数据库设计模块.docx
- 文档编号:9037557
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:18
- 大小:77.02KB
小型超市后面管理系统数据库设计模块.docx
《小型超市后面管理系统数据库设计模块.docx》由会员分享,可在线阅读,更多相关《小型超市后面管理系统数据库设计模块.docx(18页珍藏版)》请在冰豆网上搜索。
小型超市后面管理系统数据库设计模块
超市管理系统概要设计说明书
―数据库设计模块
所属项目:
超市管理系统
编写者:
审核者:
1.引言
1.1编写目的
从该阶段开发正式进入软件的实际开发阶段,本阶段完成系统的大致设计并明确系统的数据结构与软件结构。
在软件设计阶段主要是把一个软件需求转化为软件表示的过程,这种表示只是描绘出软件的总的概貌。
本概要设计说明书的目的就是进一步细化软件设计阶段得出的软件总体概貌,把它加工成在程序细节上非常接近于源程序的软件表示。
1.2背景
a.待开发软件系统的名称:
小型超市后台管理系统
b.任务的提出者:
梁永霖老师
c.开发者:
马文勇李耀初郑伟清
1.3参考资料
陶宏才.《数据库原理及设计》.第1版.北京.清华大学出版社.2004年
范立南《SQLServer2000实用教程》第2版.北京.清华大学出版社.2005年
李香敏《SQLServer2000编程员指南》第1版.北京.希望电子出版社
RebeccaM.Riordan《轻松搞定SQLServer2000程序设计》第2版.北京工业出版社.2003年
WattsS.Humphrey《软件工程规范》第1版.清华大学出版社.2004年
2.总体设计
2.1需求规定
A硬件支持
此软件没有进行远程访问的功能,也就是说软件和数据库服务器均运行与一台及其上面,因此,建议机器至少能顺畅运行SQL服务器。
本程序将在以下硬件系统进行测试:
a.处理器芯片为:
IntelCeleron2.66GHz,内存为:
512MB,硬盘为:
80GB。
b.处理器芯片为:
IntelP4,主频1.8GHz,内存为:
256MB,硬盘为:
40GB
c.处理器芯片为:
AMDSempron2500+,内存为:
512MB,硬盘为:
80GB
B软件支持
本软件将在以下环境下编写完成:
操作系统:
WindowsXPprofessional
编程软件:
MicrosoftVisualBasic6.0中文版
SQL服务器:
Microsoft®SQLServer™2000
数据库查询器:
:
SQL查询分析器
2.2运行环境
操作系统:
Windows98以上系统
测试系统:
WindowsXPSp2
3.接口设计
3.2外部接口
本系统设有人机操作界面,考虑到操作简单,易于管理方面,主要硬件接口设备为PC,鼠标,键盘。
而软件接口主要以Windows平台为基本平台。
系统业务逻辑的独步一时几乎完全封闭在数据存储层实现,中间组件层主要通过调用远程数据库存储过程或用户自定交函数的方式来实现对数据库的访问。
数据库设计时,在sql server2000大型数据库提供的技术下,充分利用约束,视图,存储过程,用户自定义函数及触发器等技术约束业务规则、维护数据完整性和唯一性,并实现市郊的数据存储与访问。
3.3内部接口
程序利用VB下的构造ADO的连接对象的ConnectionString的配置,各cls模块之间相互独立又彼此关联,主要通过函数调用实现各部分的连接。
4.系统数据结构设计
4.1逻辑结构设计要点
针对一般小型超市后台信息管理系统的需求,通过对商品进出过程的内容和数据流程分析,设计如下面所示的数据项和数据结构,各模块标示符说明如下:
系统数据库表结构
数据库表索引
表名
中文名
Userifo
系统用户表
Supplier
供货商信息表
GoodsType
商品类型表
Goods
商品信息表
Buy
进货表
Sale
销售表
Spoilage
损坏商品表
自定义数据类型(custem)
字段名
数据类型
长度
主/外键
字段值约束
对应中文名
gcxCaption
Varchar
100
Notnull
实体名称
gxcID
Int
4
P
Notnull
实体号
gxcMoney
Smallmoney
4
Notnull
进货\销售金额
gxcRemark
Varchar
1000
Null
备注说明
gxcTrueName
Varchar
10
Notnull
真实姓名
商品信息表(Goods)
字段名
数据类型
长度
主/外键
字段值约束
对应中文名
GoodsID
gxcID
4
P
Notnull
商品号码
GoodsName
gxcCaption
100
Notnull
商品名称
Amount
Decimal1
9
Notnull
库存数量
UnitName
gxcCaption
100
Notnull
单位名称
TypeID
gxcID
4
Notnull
商品类型号
SupplierID
gxcID
4
Notnull
商品供货商号
Introduce
gxcRemark
1000
Null
商品介绍
Remark
gxcRemark
1000
Null
备注
用户表(UserInfo)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
UserID
gcxID
4
P
Notnull
用户号
UserName
gxcCaption
100
Notnull
用户名称
Password
gxcCaption
100
Notnull
用户密码
TrueName
gxcTrueName
10
Null
真实姓名
LastLoginTime
Datetime
8
Notnull
最近登录时间
UserType
Bit
1
NotNull
用户类型
销售表(Sale)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
SaleID
gxcID
4
P
Notnull
销售号
GoodsID
gxcID
1
F
Notnull
商品号
Amount
Decimal
9
Notnull
销售数量
UnitPrice
gxcMoney
4
Notnull
单价
registrarID
gxcID
4
Notnull
录入人员号
regDate
Datetime
8
Null
登记时间
Remark
gxcRemark
1000
1
Null
备注
进货信息表(Buy)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
BuyID
gxcID
4
P
Notnull
进货编号
GoodsID
gxcID
4
Notnull
商品编号
Amount
Decimal
9
Notnull
数量
UnitPrice
gxcMoney
4
Notnull
进货单价
Deliverer
gxcTrueName
10
Null
送货员
Transactor
gxcTrueName
10
Null
办理员
RegistrarID
gxcID
4
F
Notnull
录入人员号
Regdate
Datetime
8
Notnull
登记时间
Remark
gxcRemark
1000
Null
备注
损坏商品表(Spoilage)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
SpoilageID
gxcID
4
P
Notnull
损坏事件号
BuyID
gxcID
4
F
Notnull
商品编号
Amout
Decimal
9
Notnull
数量
Reportor
gxcTrueName
10
Notnull
报损人
Reason
gxcRemark
1000
null
损坏原因
RegistrarID
gxcID
4
NotNull
录入人员号
Regdate
datetime
8
Datetime
登记时间
供货商表(Supplier)
字段名
字段类型
长度
主/外键
字段值约束
对应中文名
SupplierID
gxcID
4
P
Notnull
供货商编号
SupplierName
gxcCaption
100
Notnull
供货商名称
Contact
gxcRemark
1000
Null
联系方式
Introduce
gxcRemark
1000
Null
简要介绍
Remakr
gxcRemark
1000
Null
备注
4.2关系图约束设计
数据库关系图如下:
4.3.物理结构设计
系统的存储物理结构由数据库来生成。
以下为几个例子
查看存在ID字段不为某个值但某个字符型字段等于某个值
/*查看某个数据表中*/
CREATEPROCdbo.ExistNameWithoutID
(
@strTableNamevarchar(255),--表名
@strIDNamevarchar(255),--ID字段名
@intIDValueint,--ID字段值
@strFieldNamevarchar(255),--字符型字段名
@strFieldValuevarchar(50),--字符型字段值
@bitResultbitOUTPUT--输出值,0为不存在,1为存在
)
AS
SETNOCOUNTON
DECLARE@strSQLvarchar(3000)--主语句
DECLARE@nCountint--返回记录行数
/*创建存储符合条件的记录数的临时表*/
IFOBJECT_ID('dbo.#tmpTable')ISNULL
CREATETABLE#tmpTable(tmpFieldint)--创建临时表
ELSE
TRUNCATETABLE#tmpTable--清空临时表
/*在数据库表中检索符合条件的记录数并存储在临时表中*/
SELECT@strSQL='SELECTCOUNT(['+@strFieldName+'])FROM['+@strTableName+']WHERE['+@strFieldName+']='''+@strFieldValue+''''+'AND'+@strIDName+'<>'+CONVERT(varchar(50),@intIDValue)
SELECT@strSQl='INSERT#tmpTable'+@strSQL
EXEC(@strSQL)
/*在临时表中返回存储的记录数*/
SELECTTOP1@nCount=tmpFieldFROM#tmpTableORDERBYtmpField
/*删除临时表*/
DROPTABLE#tmpTable
/*输出参数*/
IF@nCount>0
SELECT@bitResult=1
ELSE
SELECT@bitResult=0
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO
添加一条商品信息
/*添加一条商品信息,输出商品编号和执行结果*/
CREATEPROCdbo.GoodsAddNew
(
@GoodsNamevarchar(100),--商品名称
@Amountdecimal(18,2),--库存数量
@TypeIDint,--类型编号
@UnitNamevarchar(100),--单位
@SupplierIDint,--供货商编号
@Introducevarchar(1000),--商品介绍
@Remarkvarchar(1000),--备注
@IDintOUTPUT,--商品编号
@ReturnValueintOUTPUT--执行结果(VB组件的自定义枚举值)
)
AS
DECLARE@ErrNoint--保存错误号
BEGINTRANSACTION--开始事务
/*手动维护数据唯一性的代码。
*/
DECLARE@ExistNamebit
EXECExistByName'Goods','GoodsName',@GoodsName,@ExistNameOUTPUT
IF@ExistName=1--当前商品名称已存在
BEGIN
ROLLBACKTRANSACTION--回滚事务
SELECT@ReturnValue=3--返回VB组件的自定义枚举值
RETURN--结束存储过程
END
/*添加记录*/
INSERTINTOGoodsValues(@GoodsName,@Amount,@UnitName,@TypeID,@SupplierID,@Introduce,@Remark)
--记录当前的错误号
SELECT@ErrNo=@@ERROR
/*输出参数*/
IF@ErrNo=0--没有发生错误
BEGIN
SELECT@ID=(SELECTMAX(GoodsID)FROMGoods)
SELECT@ReturnValue=0
END
ELSEIF@ErrNo=2627--违反唯一约束
BEGIN
ROLLBACKTRANSACTION--遇到错误则回滚事务
SELECT@ReturnValue=3
RETURN
END
ELSE--其他未知错误
BEGIN
ROLLBACKTRANSACTION--遇到错误则回滚事务
SELECT@ReturnValue=1
RETURN
END
COMMITTRANSACTION--提交事务
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO
删除一条商品信息
/*删除一条商品信息,输出执行结果*/
CREATEPROCdbo.GoodsDelete
(
@GoodsIDint,--商品编号
@ReturnValueintOUTPUT--执行结果(VB组件的自定义枚举值)
)
AS
DECLARE@ErrNoint--保存错误号
BEGINTRANSACTION--开始事务
/*验证是否存在当前商品编号,若否则不能删除*/
DECLARE@ExistIDbit
EXECExistByID'Goods','GoodsID',@GoodsID,@ExistIDOUTPUT
IF@ExistID=0--当前商品编号不存在
BEGIN
ROLLBACKTRANSACTION--回滚事务
SELECT@ReturnValue=2--返回VB组件的自定义枚举值
RETURN--结束存储过程
END
/*手动维护数据完整性的代码*/
EXECExistByID'Buy','BuyID',@GoodsID,@ExistIDOUTPUT
IF@ExistID=1
BEGIN
ROLLBACKTRANSACTION
SELECT@ReturnValue=3
RETURN
END
/*验证销售信息是否包含当前商品,若是则不能删除*/
EXECExistByID'Sale','SaleID',@GoodsID,@ExistIDOUTPUT
IF@ExistID=1
BEGIN
ROLLBACKTRANSACTION
SELECT@ReturnValue=3
RETURN
END
/*删除记录*/
DELETEFROMGoodsWHEREGoodsID=@GoodsID
--记录当前的错误号
SELECT@ErrNo=@@ERROR
/*输出参数*/
IF@ErrNo=0--没有发生错误
SELECT@ReturnValue=0
ELSEIF@ErrNo=547--发生外键冲突
BEGIN
ROLLBACKTRANSACTION--遇到错误则回滚事务
SELECT@ReturnValue=3
RETURN
END
ELSE--其他未知错误
BEGIN
ROLLBACKTRANSACTION--遇到错误则回滚事务
SELECT@ReturnValue=1
RETURN
END
COMMITTRANSACTION--提交事务
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO
返回所有供货商
CREATEVIEWdbo.view_Supplier
AS
/*返回所有供货商*/
SELECTSupplierID,SupplierName,Contact,Introduce,RemarkFROMSupplier
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
CREATEVIEWdbo.view_Buy
AS
SELECTB.BuyID,B.GoodsID,G.GoodsName,
B.UnitPrice,B.Amount,G.UnitName,
B.UnitPrice*B.AmountASTotalPrice,
B.Deliverer,B.Transactor,B.RegistrarID,
B.RegDate,G.TypeID,G.SupplierID,B.Remark
FROMBuyASBLEFTOUTERJOINGoodsASG
ONB.GoodsID=G.GoodsID
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
SETANSI_NULLSON
GO
5.运行测试
5.1.运行模块的组合
具体软件的运行模块组合为程序多窗口的运行环境,各个模块在软件运行过程中能较好的交换信息,并能够独立的处理各自的数据。
5.2.测试及问题提出
软件运行时有较友好的界面,基本能够实现用户的数据处理要求。
问题1:
无法进入数据库
问题2:
字段名称与SQL关键字冲突
添加字符型数据的时候,如果该数据饮食了单引号,则会造成字符的意外截断而产生错误。
问题3:
个别触发器无作用
在Buy表上的delete触发器中,不能完成删除商品信息的时候同步更新商品库存的功能。
5.3.问题解决
系统的运行时间基本可以达到用户所提出的要求。
问题解决如下
解决问题1:
'设置服务器名称,数据库名称,登录名(此时假设密码为空)
PublicFunctionConnectToDatabase()AsBoolean
OnErrorGoToErrHandler
Setg_Conn=NewConnection
DimServerNameAsString,DBNameAsString,UserNameAsString,strPasswordAsString
'连接SqlServer的连接字符串设置
ServerName="(local)"
DBName="BuySaleStorage"
UserName="sa"
strPassword=""
'连接到SQLServer数据库
根据DB文件夹中的内容,创建数据库,推荐用MDF文件附加数据库;
\DB\MDF\BuySaleStorage_Data.MDF
\DB\MDF\BuySaleStorage_LOG.LDF
连接参数:
数据库名:
BuySaleStorage
登录名:
sa
密码:
无
解决问题2:
当添加字符型数据的时候,如果该数据饮食了单引号,则会造成字符的意外截断而产生错误。
解决方法是把字符数据中的单引号替换为两个单引号,使用了RealString函数来过滤单引号。
按照意义对字段命名,很可能使字段名称与SQL的关键字冲突而产生错误,比如名称为User的字段。
解决方法是给字段名称加上中括号“[]”,使字段名称为“[User]”。
解决问题3:
在SQLServer事务中的操作是作为一个整体来执行的。
如果手工约束业务规则和强制数据完整性,心谤腹非把相应的代码与核心操作代码放在一个事务中,这样的才能保持数据的完整性。
对触发器而言,由于它和激活触发器的语句一起被作为单一的事务来对待,所以即使没有显式地BeginTransaction语句,在触发器的定义中也可以RollBackTransaction语句。
6.小结
由于系统较小没有外加维护模块,因为维护工作比较简单,仅靠数据库的一些基本维护措施即可。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小型 超市 后面 管理 系统 数据库 设计 模块