最新图书系统数据库实现精品课件.ppt
讲解和分析需求讲解和分析需求(20分钟)学员首先阅读项目案例需求和实现步骤老师讲解需求,学生理解需求并分析问题分析-2表名 LendInfo(借阅信息表)字段名称说 明LID借阅编号自动编号(标识列),从1开始,主键MID会员编号非空, MemberInfo表外键BID图书编号非空,BookInfo表外键LStartDate借阅时间非空LEndDate归还时间非空,归还时间必须晚于借阅时间LFlag是否归还非空EID员工编号非空, EmployeesInfo表外键LMark备注模拟添加新书类别、新书入库、新员工入职模拟添加新书类别、新书入库、新员工入职添加新书类别,即向图书类型表中插入数据添加新书类别,即向图书类型表中插入数据新书入库即向图书表中插入数据新书入库即向图书表中插入数据新员工入职即向员工表中插入数据新员工入职即向员工表中插入数据问题分析-3问题分析-4创建存储过程完成自动生成卡号创建存储过程完成自动生成卡号创建存储过程自动生成随机会员号,并返回创建存储过程自动生成随机会员号,并返回会员号规则年四位会员号规则年四位, ,月二位,日二位月二位,日二位, ,随机数四位随机数四位(YYYYMMDDXXXXYYYYMMDDXXXX)问题分析-5模拟办理会员、借书模拟办理会员、借书分析:分析:调用存储过程生成随机卡号调用存储过程生成随机卡号, ,需要判断生成的随机卡号是否已经存需要判断生成的随机卡号是否已经存在如果存使用在如果存使用whilewhile重新生成重新生成办理会员,即向办理会员,即向MemberInfoMemberInfo表中插入一行记录,会员号通过上面的表中插入一行记录,会员号通过上面的存储过程生成存储过程生成问题分析-6创建视图完成查询借阅信息创建视图完成查询借阅信息图书馆的管理人员和用户经常查询借阅信息图书馆的管理人员和用户经常查询借阅信息, ,因此需要创建视因此需要创建视图图, ,要求按借阅时间降序要求按借阅时间降序查询视图,显示所有的借阅信息查询视图,显示所有的借阅信息( (查询结果如下图查询结果如下图) )问题分析-7图书馆的接待室有一个触摸查询屏,用户可以通过会员编图书馆的接待室有一个触摸查询屏,用户可以通过会员编号查询本人的借阅信息。号查询本人的借阅信息。创建存储过程完成上述功能,要求在存储过程中使用上题中创建创建存储过程完成上述功能,要求在存储过程中使用上题中创建的视图的视图当用户输入借阅时间时按该借阅时间查询当用户输入借阅时间时按该借阅时间查询1.如果用户没有输入借阅时间时则该会员的所有部信息查询如果用户没有输入借阅时间时则该会员的所有部信息查询问题分析-8创建触发器完成借阅时自动更新图书数量创建触发器完成借阅时自动更新图书数量分析:分析:在图书借阅表中插入一条记录在图书借阅表中插入一条记录同时应该更新库存数量同时应该更新库存数量= =库存数量库存数量-1-1该过程可以通过该过程可以通过INSERTINSERT触发器来完成触发器来完成问题分析-9创建触发器完成还书时自动更新图书数量创建触发器完成还书时自动更新图书数量分析:在更新图书借阅表还书时间及是否归还字段同时应该更新库存数量=库存数量+1该过程可以通过UPDATE触发器来完成问题分析-10模拟借书、还书模拟借书、还书分析:借书:向LendInfo表中插入数据1.还书:更新LendInfo归还时间和是否归还字段难点分析-1创建数据库表创建数据库表(图书信息表,图书类型表,雇员信息表,图书信息表,图书类型表,雇员信息表,会员信息表会员信息表,借阅信息表)借阅信息表)INSERT INTO dbo.BookType(BTName) SELECT 计算机类计算机类 UNIONSELECT 小说小说INSERT INTO dbo.BookInfo(BName,BAuthor,BTypeID,BPubsName,BLastNumbers)SELECT ASP.NET AJAX,陈黎夫陈黎夫,1,人民邮电出版社人民邮电出版社,5 UNIONSELECT CSS禅意花园禅意花园,陈黎夫陈黎夫,1,人民邮电出版社人民邮电出版社,2INSERT INTO dbo.EmployeesInfo(EName,EAge,ESex,EAddress,EDate,EPhone)SELECT 张丽娜张丽娜,23,女女,新海花园新海花园-2-3,2007-9-1,0335-3564768 UNIONSELECT 李奇李奇,21,男男,迎宾路号迎宾路号5-5-5,2009-12-10,0335-7865456 难点分析-2创建存储过程完成自动生成卡号创建存储过程完成自动生成卡号 SET year=DATEPART(yy, GETDATE()SET year=DATEPART(yy, GETDATE() SET month=DATEPART(mm, GETDATE() SET month=DATEPART(mm, GETDATE() SET day=DATEPART(dd, GETDATE() SET day=DATEPART(dd, GETDATE() SELECT r=RAND(DATEPART(s, GETDATE() SELECT r=RAND(DATEPART(s, GETDATE() * * 100000+ 100000+ DATEPART(m, GETDATE() DATEPART(m, GETDATE() * * 1000+ DATEPART(ms, GETDATE() 1000+ DATEPART(ms, GETDATE()-产生产生.xxxx.xxxx的数字的数字, ,我们需要小数点后的四位数字我们需要小数点后的四位数字 SET tempStr=convert(NVARCHAR(10),r) SET tempStr=convert(NVARCHAR(10),r) SET randCardID=CONVERT(NVARCHAR(4),year)+ SET randCardID=CONVERT(NVARCHAR(4),year)+CONVERT(NVARCHAR(2),month)+CONVERT(NVARCHAR(2),month)+CONVERT(NVARCHAR(2),day)+CONVERT(NVARCHAR(2),day)+SUBSTRING(tempStr,3,4) -SUBSTRING(tempStr,3,4) -组合为规定格式的卡号组合为规定格式的卡号GOGO难点分析-3模拟办理会员、借书模拟办理会员、借书EXEC Proc_RandCardID CardID OUTPUT-生成会员卡号SELECT MyCount=COUNT(*) FROM WHERE WHILE (MyCount0)BEGIN EXEC -重新生成会员卡号 SELECT MyCount=COUNT(*) FROM WHERE END INSERT INTO dbo.MemberInfo(MID,MName,MPID,MAge,MSex,MAddress,MPhone)VALUES()难点分析-4创建视图完成查询借阅信息创建视图完成查询借阅信息CREATE VIEW View_BMLASGOSELECT * FROM View_BML难点分析-5 图书馆的接待室有一个触摸查询屏,用户可以通过图书馆的接待室有一个触摸查询屏,用户可以通过会员编号查询本人的借阅信息。会员编号查询本人的借阅信息。CREATE PROC Proc_SelectByMIDMID NVARCHAR(12),LStartDate DATETIME=NULLASIF LStartDate IS NULLELSE . GO难点分析-6创建触发器完成借阅时自动更新图书数量CREATE TRIGGER trig_LendInfo_Insert ON LendInfo FOR INSERT AS UPDATE BookInfo SET BLastNumbers=BLastNumbers-1 WHERE GO 难点分析-7创建触发器完成还书时自动更新图书数量CREATE TRIGGER trig_LendInfo_Update ON LendInfo FOR Update AS UPDATE BLastNumbers=BLastNumbers+1 WHERE GO难点分析-8模拟借书、还书模拟借书、还书-借书借书INSERT INTO LendInfo() VALUES()-还书Update LendInfo SET LEndDate=getdate(),LFlag=1 WHERE MID= AND BID=