1、1数据库原理课程设计某书店图书进货、销售管理系统学校:广西大学学院:计算机与电子信息学院班级:网络 131 班组长:何鑫(1307300313)组员:方焕(1307300304)指导老师:叶进2目录一需求分析.21.1 编写目的.21.2 背景.21.3 可行性分析31.4 系统总体的功能需求3二概念结构设计32.1 概念结构设计步骤42.2 局部 E-R 图.42.3 整体 E-R 图. 82.4 物理结构设计.9三数据库的实施和维护. .113.1 建立数据库.113.2 根据结构设计建表123.3 载入数据.153.4 创建存储过程.163.5 查询与统计功能.183.6 触发器脚本18
2、3.7 视图脚本193.8 约束.20四测试.21五总结.233数据库开发与设计一.需求分析1.1 编写目的在科学飞速发展的今天,人们的视野越来越广,数据量急剧增加。过去人们把数据存放在文件柜内,现在人们借助计算机和数据库技术科学的保管和管理大量的复杂数据,以便方便而充分的利用这些宝贵的信息资源。本系统的设计目的就是为中小型书店提供一套运行稳定、安全可靠、操作方便的管理系统。帮助书店销售业务处理日常工作业务,规范管理各项工作和操作流程。从根本上改变以前那种旧的管理模式,真正提高管理和服务水平。1.2 背景随着社会信息量的迅速增长,计算机处理的数据量不断增加,在我国,管理信息系统是计算机应用最广
3、泛的领域之一。随着我国经济建设突飞猛进,管理科学化与管理手段的现代化已经提到非常重要的地位,企、事业单位为了提高自身的管理水平和竞争能力,纷纷投入人力物力,开发适合本单位需求的管理信息系统。中国的信息化沿着企业信息化和政府信息化这两根链条正在飞速的发展,在全国的各级教育单位中,都在进行管理方式的改革 ,由以前的人工管理方式在向现在的人工加计算机技术的过渡中,在现在的这种模式中可以很大的提高工作人员的工作效率,提高了正确性。在传统模式下利用人工进行图书销售信息管理,存在着较多的缺点,如:效率底,保密性差,时间一长将产生大量的文件和数据,更不便于查找,更新,维护等。诸如这些情况,令书店管理者对图书
4、的信息管理带来了很大困难,严重影响了书店的经营效率。随着科学技术的不断提高, 计算机科学日渐成熟, 使用先进的计算机技术来代替传统的人工模式,来实现信息的现代化管理,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对图书销售信息进行管理 ,具有着手工管理所无法比拟的优点.例如:检索迅速、查找方便、易修改、可靠性高、存储量大、数据处理快捷、保密性好、寿命长、成本低、便于打印等。这些优点能够极大地提高图书销售信息管理的效率,也是书店的科学化、正规化管理 ,与世界接轨的重要条件。因此,开发这样一套管理软件成为很有必要的事情。1.3
5、可行性分析可行性分析的任务是明确开发应用项目的必要性和可行性。必要性来自实现开发任务的迫切性,而可行性则取决于实现应用系统的资源和条件。但如果领导或管理人员对信息系统的需求很不迫切,或者条件尚不具备,就是不可行。下面从系统的经济可行性、管理可行性、技术可行性等对本系统开发进行可行性分析,看可行与否。4(1) 经济上的可行性科学技术的发展和人们生活水平的不断提高,计算机的价格越来越能被很多人所接受,不管是在企业还是家庭,计算机的使用已经成为普遍现象,所以从用户经济方面考虑,本系统的开发不会有很大的困难和风险,且系统本身成本较低,不需要很多的开发费用和以后的维护费用。(2) 管理上的可行性该书店图
6、书销售管理系统是鉴于目前书店图书信息的剧增,读者市场对图书的呈爆炸性增长的前提下,书店对图书销售管理的自动化与准确化的要求日益强烈的背景下构思出来的,操作简单、方便,便于管理,并且书店有关管理者均同意该系统的开发、使用,相应的管理制度改革的时机也已成熟,规章制度齐全,提供的原始数据也很准确,所以,从管理上来说,是可行的。14 系统总体的功能需求某书店需要一套信息管理系统辅助完成图书销售业务,该图书销售系统业务主要实现:(1)图书类别、出版社、图书、仓库信息的管理; (2)实现进货、入库管理; 实现销售、出库管理; (3)创建存储过程查询某段时间内各种图书的进货和销售情况;(4)创建视图查询各类
7、图书的库存总数; (5)创建触发器当图书入库时自动修改相应图书的总量和存放仓库中该图书 的数量; (6)要求一单可以处理多种图书(比如销售设置销售单及其明细两个表);建立数据库相关表之间的参照完整性约束。 二.概念结构设计一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。将 E-R 模型转换为关系模型转换原则:一个 1:1 联系可以转换为一个独立的关系,也可以与任意一段对应的关系模式合并。如果转化为一个独立的关系模式,则与该联系相连的各个实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一个实体对应的关系合并,则需要在该关系模式的
8、属性中加入另一个关系的主码和联系本身的属性。一个 m:n 的联系可以转化为一个单独的关系模式,这个单独的关系模式的主码是两端实体的码,再加上联系的属性。5一个 1:n 联系可以转化为一个独立的关系模式,也可以与 n 端的关系模式合并作如果与 n 端的关系模式合并,在 n 端的关系模式中加上另一端关系的码和联系属性。2.1 概念结构设计步骤第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。因此我们们先逐一的设计分 E-R 图。 第二步是进行视图的集成:各子系统的 E-R 图设计好之后,下一步就是要将所有的分 E-R 图合成一个系
9、统的总 E-R 图,得到全局概念模型。 2.2 局部 E-R 图1.图书销售系统 E-R 图2. 书店-库内图书“处理”联系细化 E-R 图出版社进货书店处理库内图书书店 书店 书店63. 库内图书实体属性图4. 供应商实体属性图处理库内图书销售库内图书退书库内图书库内图书图书种类图书ISBN 码图书名出版社 库存量作者 图书信息出版社75. 供应图书报价-书店-供应商“进货”联系的属性图6. 书店-库内图书 “销售”联系的属性图出版社名称出版社地址电话 联系人出版社进货书店进货编号进货价格进货日期图书 ISBN 编码进货数量书店销售库内图书销售编号图书 ISBN编码销售时间销售数量销售价格8
10、7. 书店-库内图书 “退书”联系的属性图8.“管理员”属性图2.3 整体 E-R 图书店退书库内图书退书编号图书 ISBN编码退书时间退书数量退书信息管理员姓名 账户 密码9书 籍出版社退书管理销售进货图书 I S B N 编号图书分类图书名出版社作者库内图书量图书信息姓名帐号密码电话出版社地址出版社名称联系人进货价格进货日期进货编号进货数量销售编号销售价格 销售数量 销售时间退书数量退书信息退书编号退书时间顾客顾客管理员2.4 物理结构设计10出版社信息表字段名 数据类型 字段大小 是否允许空 备注出版社 char 20 N 主键出版社地址 char 20 N电话 Char 12 N联系人
11、 Char 10 N库内图书信息表字段名 数据类型 字段大小 是否允许空 备注图书 ISBN编码 int N 主键图书种类 Char 10 N图书名 Char 20 N出版社 Char 20 N 外键库内图书量 int Y作者 Char 20 N图书信息 char 200 Y11销售信息表字段名 数据类型 字段大小 是否允许空 备注销售编号 int N 主键图书 ISBN 编码 int Y 外键销售时间 datatime N销售数量 int N销售价格 money N进货信息表字段名 数据类型 字段大小 是否允许空 备注进货编号 int N 主键出版社 int Y 外键图书 ISBN 编码 i
12、nt N 外键进货日期 datatime N进货价格 money N进货数量 int N退书信息表12字段名 数据类型 字段大小 是否允许空 备注退书编号 Char 20 N 主键图书 ISBN 编码 Char 14 N 外键退书时间 Data N退书数量 Money N退书信息 Integer N管理员信息表字段名 数据类型 字段大小 是否允许空 备注姓名 Char 20 N编号 Char 10 N 主键密码 char 10 N三数据库的实施和维护3.1 建立数据库根据以下代码建立数据库:CREATE DATABASE 书店进货销售管理系统ON(NAME = order_dat,FILENA
13、ME = F:mssqldata orderdat.mdf,SIZE = 10,MAXSIZE = 50,FILEGROWTH = 5)13LOG ON (NAME = order_log,FILENAME = F: mssql log orderlog.ldf,SIZE = 10MB,MAXSIZE =30MB,FILEGROWTH = 5MB)3.2 根据结构设计建表CREATE TABLE 出版社信息表(出版社 char(20) primary key,出版社地址 char(20),电话 char(20 ),联系人 char(20)CREATE TABLE 图书类别表(类别号 char(
14、20) primary key,类别 char(20 ),类别信息 char(20),备注 char(20 )14CREATE TABLE 图书信息表(图书号 char(20) primary key,图书名 char(20),出版社 char(20) CONSTRAINT FK_1 foreign key references 出版社信息表(出版社),类别号 char(20) CONSTRAINT FK_2 foreign key references 图书类别表(类别号),作者 char(20 ),备注 char(20 ) )CREATE TABLE 进货订单(进货单号 char(20)p
15、rimary key,进货者 char(20),备注 char(20 )CREATE TABLE 销售订单(销售单号 char(20) primary key,购买者 char(20),备注 char(20 )15CREATE TABLE 进货详情表(进货项号 char(20) primary key,进货单号 char(20) CONSTRAINT FK_3 foreign key references 进货订单(进货单号),图书号 char(20) CONSTRAINT FK_4 foreign key references 图书信息表(图书号) ,图书数量 char(20),进货日期 d
16、ate ,进货价格 char(20),备注 char(20 )CREATE TABLE 销售详情表(销售项号 char(20) primary key,销售单号 char(20) CONSTRAINT FK_5 foreign key references 销售订单(销售单号),图书号 char(20) CONSTRAINT FK_6 foreign key references 图书信息表(图书号),图书数量 char(20),销售日期 date ,销售价格 char(20),16备注 char(20 )CREATE TABLE 库存信息表(图书号 char(20) CONSTRAINT F
17、K_7 foreign key references 图书信息表(图书号),图书数量 char(20),入库信息 char(20),出库信息 char(20),备注 char(20 ),)3.3 载入数据(1)图书类型17(2)出版社(3)图书信息表(4)仓库(5)进货、入库18(6)销售、出库(7)图书类别视图3.4 创建存储过程(1)某段时间内进货查询CREATE procedure buysearch 起始时间 date,结束时间 date19as begin SELECT * from 进货详情表 where 进货日期 =起始时间 and 进货日期 =起始时间 and 销售日期 = 终
18、止时间 end;3.5查询与统计功能-每月的销售总额和销售总量Create Proc QueryBookdate CHAR(10)AsSelect Sum(SellNum) as TotalNuns,Sum(Sprice) as TotalSalesFrom SellOutWhere DateDiff(mm,date,SDate)=0-每月销售的排行榜Create Proc BookBackdate smalldatetimeAsSelect top 10 b.Bname,s.SellNumFrom Book binner join SellOut son b.BookID=s.BookID-
19、按月查卖了多少本书Create Proc QueryMonthdate smalldatetimeAsBegin20Select b.Bname,Sum(b.Bnum)From Book as binner join SellOut as son b.BookID=s.BookIDWhere Datediff(mm,date,s.SDate)=0Group by b.BnameEnd3.6 触发器脚本-使用触发器,实现新书在书库中的插入工作和图书数量修改Create Trigger 进货 On 进货详情表 FOR Insert As declare n int Select n=图书号 fro
20、m inserted declare num int Select num=图书数量 From inserted Update 库存信息表 set 图书数量=图书数量+ num Where 图书号=nCreate Trigger 销售 On 销售详情表 FOR Insert As declare n int Select n=图书号 from inserted declare num int Select num=图书数量 From inserted Update 库存信息表 set 图书数量=图书数量- num Where 图书号=n3.7 视图脚本Create View SBookAsSe
21、lect Publisher,BookID, Bname,20-Bnum as NumFrom Book where Bnum5 -小于本时就定本书Group by Publisher, BookID, Bname, 20-BnumCreate Proc SelectBookAsBeginSelect* From SBookInsert Into BuyInSelect v.BookID,GetDate(),v.Price,v.NumFrom SBook as v21End-建立查询供应商信息的视图create view Provider_viewasselect ProviderID,Pad
22、dress,Pphone,Pcontacter,Pnamefrom Provider-建立查询书籍信息视图create view Book_viewasselect BookID,ProviderID,Bkind,Bname,Bpublish,Bnumfrom Book四测试4.1 测试的目的1、软件测试是为了发现缺陷而执行的过程。 2、测试是为了证明程序中的错误,而不是证明程序中无错误。 3、一个好的测试用例指的是它可能发现至今尚未被发现的缺陷 。 4、一次成功的测试指的是发现了新的软件缺陷的测试。这种观点主要目的:测试要以查找缺陷为中心,而不是为了演示软件能够正确运行。但是发现缺陷并不是软
23、件测试的唯一目的。通过分析缺陷产生的原因和缺陷的分布特征,可以帮助程序员发现软件开发过程的不足,以便及时改进。项目名称:某书店图书进货、销售管理系统(1)程序运行环境已经正确设定。 是程序代码检查: (1)程序单位首部有程序说明和修改备注。 是(2)变量、过程、函数命令符合规则。 是(3)程序中有足够的说明信息。 是(4)修改注释符合要求。 是(5)类库的使用符合要求。 是画面及报表格式检查: 22(1)画面和报表格式符合规定需求。 是(2)程序命名符合格式需求。 是(3)画面和报表的字段位置和宽度与设计文档一致。 是功能测试: (1)多画面之间切换正确。 是(2)功能键、触发键、按钮、菜单、
24、选择项功能正确。 是(3)数据项关联及限制功能正确。 是正确性测试: (1)读/写/删除操作结果正确。 是(2)各种组合条件之查询或报表正确。 是(3)设计文档规定的其它操作。 是 可靠性测试: (1)非法键容错测试。 是(2)异常字符容错测试。 是(3)程序负作用检查。 是五总结通过这次的数据库验证体系课,学到了很多实际应用的东西。平时只是一味的学习理论知识,很少能有亲手实践做系统的时间,这次的课教会了我们怎样去着手做一个系统,怎样团队合作,怎样去一步一步构建一个系统等等。在开始做这个图书销售管理系统的时候我们对其用处都不清楚,流程图都画不出来,最后经过讨论分析重复的去尝试,最终把数据流图花
25、了出来,也有了一些成就感。接下来的 E-R 图,关系逻辑模型都慢慢摸索了出来,并且把平时学的理论知识和上机实践结合在了一起。从做整个系统开始,我们发现原来做一个系统是多么的不容易,首先是对整个系统的理解和分析,然后把这个系统的构架想象出来,再把这个构架去填充完整,使其成为一个能够运行的完整的系统。通过这次做书店管理销售系统,我们也发现了很多问题,很多是我们眼高手低,总以为会了,但是实际行动时才知道欠缺了许多东西。当然这次做系统学会了很多,相信对我们以后的学习甚至是工作都有用处。希望今后能有更多的机会去做系统,去亲手实践。当然了,我们还要继续努力学习,毕竟学习是没有终点的,更加期待下学期的学习。