数据库图书馆管理系统(共14页).doc
精选优质文档-倾情为你奉上一课程设计目的数据库课程设计是为数据库原理及应用课程而独立开设的实践性课程,对于巩固数据库知识,加强学生的实际动手能力和提高学生综合素质十分必要。通过本实验达到以下目的:(1) 熟练掌握一种数据库系统(如SQL SERVER)的使用。(2) 熟练掌握一种数据库应用软件开发工具的使用。(3) 通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力。二课程设计任务与要求:1、任务:图书管理系统问题描述:1) 学校图书室有各种图书几十万余册。2) 每种图书都有书名、书号(ISBN)、一名或多名作者(译者)、出版社等。3) 借书证记录有借阅者的借书证编号,读者姓名,读者性别,读者种类,登记时期等。4) 凭借书证借书,学生每次最多能借5本书,借书期限最长为30天,老师每次最多能借10本,借书期限最长为60天。2、设计要求:1) 实现新进图书的数据录入和下架图书的数据删除。2) 实现借阅者图书证信息的录入和删除。3) 实现对所有购进图书的分类查询和分类统计。4) 能够按书名、作者等分类查询现有图书的数量。5) 能够记录借阅者的个人资料和所借图书的书名、书号、借书时间等6) 能够进行借书还书处理。7) 能够进行借书逾期罚款处理。8) 能够进行用户管理。9)设计一完整的数据库。要求掌握数据库的设计的每个步骤;掌握数据设计各阶段的输入、输出、设计环境、目标和方法;熟练的使用SQL语言实现数据库以及数据库重要对象的建立、应用和维护。三课程设计说明书1 需求分析(1)数据需求图书馆管理信息系统需要完成功能主要有:读者基本信息的输入,包括借书证编号、读者姓名、读者性别等。读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。书籍类别信息的查询、修改,包括类别编号、类别名称。书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、登记日期。书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期,登记日期等。借书信息的输入,包括读者借书证编号、书籍编号、借书日期。借书信息的查询、修改,包括借书证编号,读者姓名、书籍编号、书籍名称、借书日期等。还书信息的输入,包括借书证编号、书籍编号、还书日期。 还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等。超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额。超期还书罚款查询,删除,包括读者借书证编号、读者姓名、书籍编号、书籍名称,罚款金额等管理员管理:包括创建读者用户信息、删除读者用户信息、添加图书信息、删除图书信息。超级管理员管理:包括创建管理员用户信息、删除管理员用户信息、创建读者用户信息、删除读者用户信息、添加图书信息、删除图书信息。(2)事物需求在读者信息管理部分,要求:a.可以查询读者信息。b.可以对读者信息进行添加及删除的操作。在书籍信息管理部分,要求:a.可以浏览书籍信息b.可以对书籍信息进行维护,包括添加及删除的操作。在借阅信息管理部分,要求:。a.可以浏览借阅信息。b.可以对借阅信息进行维护操作。在归还信息管理部分,要求:a.可以浏览归还信息b.对归还信息可修改维护操作在管理者信息管理部分,要求:a.显示当前数据库中管理者情况。b.对管理者信息维护操作。在罚款信息管理部分,要求:a.可以浏览罚款信息b.对罚款信息可以更新(3)关系模式(1)书籍类别(类别编号,类别名)(2)读者(借书证编号,读者姓名,读者性别,读者种类,登记时期,可借书数 , 已借书数,逾期未还书数)(3) 管理员(管理员编号,管理员姓名,管理员密码,管理员权限)(4) 超级管理员(管理员编号,管理员姓名,管理员密码,管理员权限)(5)书籍(书籍编号,书籍名称,书籍类别,书籍作者,出版社名称,出版日期,登记日期)(6)借阅(借书证编号,书籍编号,读者借书时间)(7)还书(借书证编号,书籍编号,读者还书时间)(8)罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书时间)2 概要设计(1)实体图及E-R图根据1)所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实体、借阅记录信息实体,归还记录信息实体。用E-R图一一描述这些实体。a.读者信息实体图:可借书数已借书数逾期未还书数读者读者姓名读者性别读者种类e登记时间读者借书证编号图2-1读者实体及其属性图b.管理员实体图管理员管理员姓名管理员编号管理员密码管理员权限图2-2管理员实体及其属性图书籍书籍编号书籍名称书籍类别编号书籍作者出版时间收录时间是否被借出版社c.书籍实体图:图2-3书籍实体及其属性图d.借阅记录信息实体图:读者借书证编号书籍类别编号借阅时间隔借阅记录信息图2-4借阅记录信息实体及其属性图归还记录信息读者借书证编号书籍类别编号归还时间隔e.归还记录信息实体图:图2-5记录信息实体及其属性图f.罚款信息实体图:书籍类别编号罚款信息实体实体罚款金额读者姓名读者借书证编号书籍名称借阅时间隔图2-6罚款信息实体及其属性图11n信息登记读者书籍书类别归还借阅罚款罚款信息还书信息借阅信息实体mnmnmnn1m创建1管理nnn管理m管理员超级管理员创建1mn出具罚款单g.总的信息实体E-R图图2-7总的信息实体E-R图3逻辑设计表3-1 book_sytle 书籍类别信息表表中列名数据类型可否为空说明类别编号varcharnot null(主键)种类编号类别名称Varcharnot null种类名称表3-2system_readers读者信息表格表中列名数据类型可否为空说明读者借书证号varcharnot null(主键)读者借书证号读者姓名varcharnot null读者姓名读者性别varcharnot null读者性别读者种类varcharnot null读者种类可借书数datetimenull登记日期书名intnull可借书数已借书数intnull已借书数逾期未还书数intnull逾期未还书数表3-3system_book书籍信息表表中列名数据类型可否为空说明书籍编号VarcharNot null(主键)书籍编号书籍名称VarcharNot null书籍名称续表3-3书籍类别VarcharNot null书籍类别书籍作者VarcharNot null书籍作者书籍出版社VarcharNull出版社名称出版时间DatetimeNull出版日期收录时间 DatetimeNull登记日期是否被借BitNot Null是否被借出 表3-4borrow_record 借阅记录信息表表中列名数据类型可否为空说明读者借书证号VarcharNot null(外主键)读者借阅证编号书籍类别编号VarcharNot null(外主键)书籍编号借阅时间DatetimeNot null读者借书时间表3-5return_record 借阅记录信息表表中列名数据类型可否为空说明读者姓名VarcharNot null(外主键)读者借阅证编号读者借书证号VarcharNot null(外主键)书籍编号归还时间datetimeNot null读者还书时间表3-6reader_fee 罚款记录信息表表中列名数据类型可否为空说明读者借书证号varcharNot null读者借书证编号读者姓名varcharNot null读者姓名书籍类别编号varcharNot null(外主键)书籍编号书籍名称varcharNot null书籍名称罚款金额SmallmoneyNot Null罚款金额借阅时间datetimeNot Null借阅时间表3-7system_Administrator管理员信息表表中列名数据类型可否为空说明管理员编号varcharnot null(主键)管理员编号管理员姓名varcharnot null管理员姓名管理员密码varcharnot null管理员密码管理员权限varcharnot null管理员权限表3-8 system_Super_Administrator管理员信息表表中列名数据类型可否为空说明管理员编号varcharnot null(主键)管理员编号超级管理员姓名varcharnot null管理员姓名超级管理员密码varcharnot null管理员密码超级管理员varcharnot null管理员权限4 关系图:图-数据库存表关系图5 物理设计数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法。所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。主要体现在后者。(1)建立索引:对book_style表在bookstyleno属性列上建立聚集索引,在bookstyle属性列上建立非聚集索引。对System_book表在bookid上建立聚集索引,在bookname、bookstyleno、boookauther、bookpub上建立非聚集索引。对return_record表在bookid上建立聚集索引,在readerid上建立非聚集索引对reader_fee表在bookid上建立聚集索引,在readerid上建立非聚集索引。对system_reader表在readerid列上建立聚集索引对boorow_record表在bookid上建立聚集所以,在readerid上建立非聚集索引对system_Administrator表在administratorid列上建立聚集索引。对system_Super_Administrator表在superadministratorid 上建立聚集索引。(2)存储结构确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置。 将日志文件和数据库对象(表、索引等)分别放在不同的磁盘可以改进系统的性能。所以系统将日志文件和数据文件存放在不同磁盘上。6数据库建立(1)创建数据库USE masterGOCREATE DATABASE librarysystemON ( NAME = librarysystem, FILENAME = 'd:librarysystem.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )LOG ON( NAME = 'library', FILENAME = 'e:librarysystem.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )GO-(2)书本类别表建立create table book_style( 类别编号 varchar(30) primary key, 类别名称 varchar(30)go-(3)创建书库表create table system_books( 书籍编号 varchar(20) primary key, 书籍名称 varchar(30) Not null, 书籍类别编号 varchar(30) Not null, 书籍作者varchar(30), 书籍出版社 varchar(30) , 出版时间 datetime, 书籍收录时间datetime , 是否被借 bit,foreign key (书籍类别编号) references book_style (书籍类别编号),)go-(4)读者信息表建立create table system_readers ( 读者借书证号 varchar(9)primary key, 读者姓名 varchar(9)not null , 读者性别varchar(2) not null, 读者种类 varchar(10), 登记时间 datetime,可借书数 int,已借书数 int,逾期未还书数 int )go-(5)借书记录表建立create table borrow_record(书籍编号 varchar(20) primary key, 读者借书证号 varchar(9), 借阅时间datetime, foreign key (书籍编号) references system_books(书籍编号), foreign key (读者借书证号) references system_readers(读者借书证号),)go-(6)还书记录表建立create table return_record( 书籍编号 varchar(20) primary key, 读者借书证号 varchar(9), 归还时间datetime, foreign key (书籍编号) references system_books(书籍编号), foreign key (读者借书证号) references system_readers(读者借书证号) go-(7)罚款单表建立*/create table reader_fee(读者借书证号varchar(9)not null, 读者姓名varchar(9)not null , 书籍编号varchar(20) primary key, 书籍名称 varchar(30) Not null, 罚款金额smallmoney, 借书时间 datetime, foreign key (书籍编号) references system_books(书籍编号), foreign key (读者借书证号) references system_readers(读者借书证号)go-(8) 管理员表建立create table system_Administrator (管理员编号 varchar(9)primary key, 管理员姓名 varchar(9)not null , 管理员密码 varchar(2) not null, 管理权限varchar(10) )go-(9)超级管理员表建立create table system_super_Administrator (超级管理员编号 varchar(9) primary key, 超级管理员姓名varchar(9) not null , 超级管理员密码varchar(2) not null, 超级管理员权限 varchar(10) )go (10)索引的创建use librarysystemgocreate index bookstyle_index_style on book_style(书籍类别)create index borrow_record_index_readerid on borrow_record(读者借书证号)create index reader_fee_index_readerid on reader_fee (读者借书证号)create index return_record_index_readerid on return_record(读者借书证号)create index system_books_index_bookname on system_books(书籍名称)create index system_books_index_styleno on system_books(书籍类别编号)create index system_books_index_bookauthor on system_books(书籍作者)7 数据初始化(1)将书籍类别加入表book_style中insert into book_style(书籍类别编号,书籍类别)values('1','人文艺术类') insert into book_style(书籍类别编号,书籍类别)values('2','自然科学类')insert into book_style(书籍类别编号,书籍类别)values('3','社会科学类')insert into book_style(书籍类别编号,书籍类别)values('4','图片艺术类')insert into book_style(书籍类别编号,书籍类别)values('5','政治经济类')insert into book_style(书籍类别编号,书籍类别)values('6','工程技术类')insert into book_style(书籍类别编号,书籍类别)values('7','语言技能类')(2)将已有的图书加入system_books表中(定义相同的作者出版社的书本编号不一样)insert into system_books(书籍编号 ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )values('','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )values('','计算机组成原理','6','王爱英','清华大学出版社','2001-01-03','2003-11-15','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('','数据库原理','6','萨师煊','高等教育出版社','2007-07-02','2007-09-15','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub,bookpubdate, bookindate, isborrowed )values('','C程序设计','6','谭浩强','清华大学出版社','2002-04-02','2004-03-14','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('58','计算机体系结构','6','石教英','浙江大学出版社','2004-10-03','2006-11-15','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('','数据结构(C语言版)','6','吴伟民,严蔚敏','清华大学出版社','2002-06-28','2004-01-21','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('','中华历史5000年','1','吴强','北京大学出版社','2005-04-03','2006-05-15','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('','古代埃及','3','赵文华','北京大学出版社','2001-02-02','2002-09-15','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('','日本文化','1','吴小鹏','北京大学出版社','2002-04-02','2004-03-14','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('','微观经济学','5','李小刚','北京大学出版社','2000-10-03','2001-11-15','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('5658','影视文学','4','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1');insert into system_books(bookid ,bookname, bookstyleno,bookauthor,bookpub, bookpubdate,bookindate, isborrowed )values('','探索宇宙奥秘','2','苏庆东','北京大学出版社','1999-02-28','2000-01-21','1');8 数据库用户权限管理该系统设置四种类型的用户(1) 超级管理员(superadministrator) 即系统管理员拥有所有的权限。(2) 管理员(administrator) 可以进行借还书处理;(3) 教师(teacher) :只能浏览图书信息,可借书数为10本,借书时间长为2个月。(4) 学生(student):只能浏览图书信息,可借书5本,借书时间长为1个月。9、建立触发器,存储过程-建立借书记录存贮过程CREATE PROCEDURE SP_BORROWBOOK 书籍编号 CHAR(20), 读者借书证号CHAR(9) ASINSERT INTO BORROW_RECORD (书籍编号,读者借书证号,借书日期)VALUES(书籍编号,读者借书证号,GETDATE()GO-建立还书记录存贮过程CREATE PROCEDURE SP_RETURNBOOK 书籍编号 CHAR(20),读者借书证号 CHAR(9)ASDELETE FROM RETURN_RECORDWHERE 书籍编号=书籍编号 AND 读者借书证号=读者借书证号GO-建立罚款单存贮过程CREATE PROCEDURE SP_ READERFEE 读者借书证号, 借书日期 ASUPDATE 读者罚款信息SET 罚款金额=0.1*(day(getdate()-day(borrowdate)Where 读者=读者借书证号And 借书日期=借书日期-建立借书记录表增加触发器CREATE TRIGGER TR_ADDLEND ON dbo. BORROW_RECORD FOR INSERTASupdate system_booksset 是否被借=1WHERE BOOKID IN (SELECT BOOKID FROM inserted)UPDATE READERSET borrowednum = borrowednum +1WHERE READERID IN (SELECT READERID FROM inserted)-建立还书记录删除触发器CREATE TRIGGER TR_DELLEND ON dbo. return_record FOR DELETEASupdate system_booksset isborrowed =0WHERE BOOKID IN (SELECT BOOKID FROM deleted)UPDATE system_readersSET borrowednum = borrowednum -1WHERE READERID IN (SELECT READERID FROM deleted)-建立删除图书触发器CREATE TRIGGER TR_DELLENDBOOK ON dbo.system_books FOR DELETEASDelete reader_feeWHERE BOOKID IN (SELECT BOOKID FROM deleted)Delete return _recordWHERE bookID IN (SELECT bookID FROM deleted)11课程设计心得体会在本次课程设计的软件开发的过程中,我全面实践一个面向数据库的应用系统的开发过程,学习了很多有关的知识。这样的项目对我学过的数据结构,程序设计,数据库,软件工程等课程是一个综合性很高的实践。一些以前没有学得很杂实的课程的内容,由于需要在实践中运用,刚开始我也感到很头痛。但回过头再去看有关的教科书,经过一段时间的钻研,对与这些知识点的相关的背景,概念和解决方案理解得更透彻了,学习起来也越来越有兴趣,越来越轻松。熟悉了数据库设计的每一个过程。另外我还充分体会了从事软件开发工作需要特别严谨认真的态度和作风,一点都马虎不得。每一个细微的细节都必须十分的注意,如果不认真思考决策,就会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时要推倒很多前面做的工作重来。有时候,我自己觉得我写的程序非常的正确,但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,往往几天的时间还没有一点进展。这时候,我一般是先自己通过书本,手册和资料找解决办法,实在没辙了才向专家请教。尽管向专家请教解决问题比较快,自己钻研花的时间较多,但我强迫自己独立的思考对我的学习提高帮助非常大。在开始编写程序的时候,我看到别人的软件功能非常的详细,而且界面非常的漂亮,总希望自己的软件也非常的完善,但是,经过二个月的学习,发现编一个优秀的软件决不是一蹴而就的事情,需要长时间的积累和经验。我认清自己的能力后,我就特别注意在工作的过程中不贪图大而全,而是根据自己的能力,制定适当的目标。在反反复复的学习及不耻下问之下,我的辛勤努力有了回报,终于做出了一个简单的软件,虽然这个软件的功能非常的简单,而且我想,在实际的运用中,还有些不足。因为图书管理牵涉的内容非常很多,我涉及到的仅仅是图书管理的一部分简单内容,离实际的客户需求肯定还有一定的差距。例如用户管理和借还书处理等考虑得还不完善。最好是这几部分之间的数据可以相互利用转化,不需要重复的输入有关的数据。针对图书管理,还应该建立一个有普遍意义的模型,这样对用户来说,就比较容易通过修改有关管理制度来适应我们开发的软件。由于我的知识浅薄,经验不足及阅历颇浅,因此,在该系统的设计方面还有很多不足,比如功能过少,界面不够醒目等问题,我会在工作的使用过程中,根据工作的具体要求不断的修改,完善,争取使该系统慢慢趋向完美。在本系统的设计过程和课程设计报告的编写过程中,老师和同学都给予了我许多无私的帮助,在这里,我向这些无私帮助我的人表示衷心的感谢。 专心-专注-专业