您好,欢迎访问三七文档
图书共享的设计一.需求分析为了能够使学生通过书本了解更多的知识,丰富自己的知识储备,我们班建立一个图书角供学生们互相交换图书进行阅览。图书角的书籍来源是学生的捐赠,捐赠的书籍需要根据内容进行分类,借阅书籍需要进行相关的记录,借阅的同学必须按时归还书籍,安排图书角管理员,保证图书角能够正常开放。该数据库的主要是实现图书捐赠,图书管理,图书借阅信息的功能。1.班级图书共享的图书为班级同学的捐赠,捐赠时管理员记录捐赠人的姓名,学号,性别,联系方式,捐书时间,捐书姓名,捐书数量,书的好坏程度的情况。2.每位同学每次只能借一本书,借阅时间为一个月,到期允许续借,期限也为一个月,每本书只有一次可以续借的机会。如果超过借书期限,每天收费0.1元,如有破损则借书者按照损坏程度进行赔偿。3.管理员需要记录下借阅学生的姓名,学号,性别,联系方式,借书时间和借阅书籍的名字。还要负责将同学们捐来的书籍进行分类,防止同名书的混淆,并给书目编号。4.统计出捐书数目最多的人,奖励一本书籍。二,概念结构设计1.书籍2.学生3.整体结构书籍编号书名类别污损程度学生姓名学号性别联系方式书籍书名类别编号污损程度学号姓名联系方式性别学生借阅捐赠捐赠时间借阅数量借阅时间捐赠数量罚款记录归还时间续借记录作者书名1111管理员姓名编号联系电话管理1n三、逻辑结构设计学生(姓名,学号,性别,联系方式)图书(书名,图书编号,作者,数量,类别,污损情况)捐赠表(捐书者的学号,捐赠图书的编号,捐书的时间)书籍借阅(图书编号,借阅者的学号,借阅时间,归还时间,续借情况,罚款记录)四、物理结构设计数据库名:classbookcorner数据库物理文件初始大小:10MB是否允许自动增长:是自动增长方式:每次增加5MB最大数据容量:不受限是否自动收缩:是是否是只读数据库:否事务日志文件位置:f:\classbookcorner事务日志文件初始大小:1MB事务日志文件最大数据容量:20MB创建如下数据表:学生表表名student作用学生信息列名数据类型长度是否允许为空字段说明snovarchar20否主键,学号snamevarchar50否学生姓名ssexchar10否性别spnumvarchar20否联系电话图书表表名book作用图书信息列名数据类型长度是否允许为空字段说明bnovarchar20否主键,图书标号bnamevarchar50否书名bauthorvarchar50否作者bslInt4否数量btypevarchar50否图书类型bsituationvarchar100否污损情况brenewbit1否续借情况,1(可续借),0(不可续借)借阅表表名borrow作用借阅信息列名数据类型长度是否允许为空字段说明bnumbervarchar20否外键,引用book表中的主键bnoBnumber与snumber共同为主键snumbervarchar20否外键,引用student表中主键snobtimedatetime8否借阅时间brtimedatetime8否归还时间bqkfloat8否超过归还时间,每天0.1元,欠款为1,不欠款为0bxjint4否续借次数bkjbit1否是否可借(1为可借。0为不可借)捐书表表名donate作用捐书信息列名数据类型长度是否允许为空字段说明dsnovarchar20否外键,引用student表中的主键snodbnovarchar20否外键,引用book表中主键bnodsno和dbno共同为主键dtimedatetime8否捐书时间查询1.查询学号为’20130105’的学生姓名和联系电话。Selectsname,spnumFromstudentWheresno=’20130105’2.查询捐了书的编号为’007’学生姓名selectsnamefromstudent,donatewherestudent.sno=donate.dsno3.查询孙菲捐书的书的编号SelectdbnoFromdonateWheredno=(selectsnoFromstudentWheresname=’孙菲’)4.查询孙菲借书的书名SelectbnameFrombookWherebno=(selectbnumberFromborrowWheresnumber=(selectsnoFromstudentWheresname=’孙菲’))5.查询捐了三本书的学生的姓名SelectsnameFromstudentWheresno=(selectdsnoFromdonateGroupbyHavingcount(‘20130101’)=3)创建视图(1)视图名称:借书信息;显示:图书编号,图书名,借书者学号,借书者姓名。Createview借书信息AsSelectbnoas'图书编号',bnameas'图书名称',snoas'借书人学号',snameas'借书人姓名'Fromborrowinnerjoinbookonbno=bnumberinnerjoinstudentonsno=snumber(2)视图名称:捐书信息,显示:图书编号,图书名,捐书人学号,捐书人姓名和捐书时间createview捐书信息asselectdsnoas'捐书人学号',dbnoas'捐书的编号',dtimeas'捐书时间',snameas'捐书人姓名',bnameas'书籍名称'fromdonateinnerjoinstudentondsno=snoinnerjoinbookondbno=bno(3)视图名称:图书污损情况,显示:损坏书籍的编号,书名,捐献者和书籍类型createview图书污损情况asselectbnoas'图书编号',bnameas'图书名称',btypeas'书籍类型'frombookwherebsituation='污损'(4)视图名称:每个学生捐书的数量显示;学生姓名,捐书总数createview每个学生捐书的数量asselectdsnoas'学生学号',count(*)as'捐书总数'fromdonategroupbydsno存储过程(1)创建存储过程‘借阅情况’,输入学号可以查询该学生借书的书名,借书时间,归还时间,是否可借。createproc借阅情况(@numberchar(50))asbeginselectbnameas'书名',btimeas'借书时间',brtimeas'还书时间',bkjas'是否可借'fromborrowinnerjoinbookonbnumber=bnoinnerjoinstudentonsnumber=snowhere@number=snumberendgoExec借阅情况‘20130101’(2)创建一个存储过程’jsxx’,输入书的名称可以查询出该书的编号,捐书人的姓名和捐书时间。createprocjsxx(@bnumberchar(50))asbeginselectbnoas'图书编号',snameas'捐书人的姓名',dtime'捐书时间'fromdonateinnerjoinbookondbno=bnoinnerjoinstudentondsno=snowhere@bnumber=bnoendExecjsxx’0001’触发器(1)创建一个触发器‘借书学生欠费通知’,若学生欠费则提示你已欠费,没有欠费则提示借书成功createtrigger借书学生欠费通知onborrowforinsertasbegindeclare@qffloat(8)select@qf=(selectbqkfrominserted)if@qf='1'print'你已经欠款!'elseprint'借书成功!!'endinsertintoborrowvalues('0004','20130102','2013-6-26','2013-7-26','1','0','0')(2)在student表上创建一个删除类型的触发器studelete,当在student表中删除某一条记录后,在borrow和donate表中删除与此学号对应的记录。createtriggerstudeleteonstudentfordeleteasbeginprint'studelete触发器开始执行……'declare@stunumchar(10)print'把在student中删除记录的学号赋值给@stunum'select@stunum=snofromdeletedprint'开始查找并删除borrow中的相关记录……'deletefromborrowwheresnumber=@stunumprint'删除了borrow中学号为'+rtrim(@stunum)+'的记录'print'studelete触发器开始执行……'declare@stunum1char(10)print'把在student中删除记录的学号赋值给@stunum'select@stunum1=snofromdeletedprint'开始查找并删除donate中的相关记录……'deletefromdonatewheredsno=@stunum1print'删除了donate中学号为'+rtrim(@stunum1)+'的记录'enddeletestudentwheresno='20130101'(3)创建一个触发器,实现捐赠一本书,剩余库存加1createtriggertsslondonateforinsertasbegindeclare@numberaschar(20)select@number=(selectdbnofrominserted)updatebooksetbxl=bxl+1wherebno=@numberendinsertintodonatevalues('20130102','0006','2013-6-26')函数(1)查询学生的读书时间createfunctionsturetime(@bnochar(20),@snochar(20))returnsintasbegindeclare@timeasintdeclare@brtimeaschar(20)declare@btimeaschar(20)select@brtime=brtime,@btime=btimefromborrowwherebnumber=@bnoandsnumber=@snoifmonth(@brtime)=month(@btime)set@time=(day(@brtime)-day(@btime))elseset@time=(day(@brtime)+30-day(@btime))return@timeendprint'该学生的读书时间为'+cast(dbo.sturetime('0001','20130101')aschar(20))(2)输入图书编号,查询该书的书名,借书时间createfunctionsj(@bnochar(10))returnstablereturn(selectbname,btimefrombookinnerjoinborrowonbno=bnumberwherebno=@bno)select*fromdbo.sj('0003')
本文标题:图书共享的设计
链接地址:https://www.777doc.com/doc-7298365 .html