1、1、系统的功能模块图2、系统 E-R 图登录开始身份认证管理员 读者读者信息管理图书信息管理读者信息管理借阅信息管理预约信息管理系统维护图书信息查询借还图书预约图书3、数据库逻辑结构设计关系模式表(红色表示主码,蓝色表示外码)读者类型表(读者类型,可借阅天数,可借阅数量, 续借次数) 1读者(姓名,借阅证号,系别,读者类型,密码) 2管理员(姓名,工号,密码) 3书籍类型(书籍类型编号,书籍类型) 4某类书籍(ISBN,书名,作者,出版社编号,价格,出版时间,库存量,在馆数量, 5书籍类型编号)书籍(图书编号,ISBN,书名,书架编号,书籍状态,损坏程度) (ISBN 相当于 6书籍类型编号)
2、 阅览室(阅览室编号,阅览室名称,阅览室位置) 7书架(书架编号,阅览室编号) 8预约(借阅证号,ISBN,预约时间,预约到期时间) 9借阅表(读者帐号,图书编号,借出日期,实际归还日期,到期时间,超出10还书天数,续借次数,罚款金额,实缴金额)出版社(出版社编号,名称,联系人,地址,联系电话)11管理员表管理员表(Administrator)名称 别名 数据类型 取值范围默认值 说明 是否为空工号 ANo Char(15) 主键 不为空姓名 AName varChar(8)密码 APwd Char(6) 000000读者身份表读者身份(ReaderType )名称 别名 数据类型 取值范围
3、默认值说明 是否为空读者类型 ReaderType Char(4) “学生”,”老师” 主码借书上限 MaxBorNumTinyint 0-10 6 不为空最大续借次数MaxBorcountTinyInt 0-2 2最长借书时间MaxBorTimeTinyint 2 单位是月不为空读者信息表读者信息(Reader )名称 别名 数据类型 取值范围默认值 说明 是否为空借阅证号ReaderAccount Char(8) 主码读者类型ReaderType Char(4) “学生”,”老师”外码,外键参考读者身份表Readertype不为空读者姓名ReaderName varChar(8)读者密码R
4、eaderPwd Char(6) 000000读者系别ReaderSdept varChar(20)书籍类型表书籍类型(BookType)名称 别名 数据类型 取值范围 默认值 说明 是否为空书籍类型编号BookTypeIdvarChar(10) 主键 不为空书籍类型 BookType text出版社表出版社(Press)名称 别名 数据类型 取值范围 默认值 说明 是否为空出版社编号 PressNo Char(10)名称 PressName Text联系人 contact Text联系电话 Tele Char(12)地址 addr text某类书籍表(BookSeries)某类书籍表(Boo
5、kSeries)列名 数据类型 空/非空 约束条件 表示含义ISBN char(20) 非空 主键 ISBNBookName text 可以为空 无 书名Author varchar(20) 可以为空 无 作者PressNo varchar(20) 可以为空 外键,参考出版社表的 PressNo 字段出版社编号Price smallmoney 可以为空 无 价格PublishTimedatetime 可以为空 无 出版日期BookNum int 可以为空 无 库存量BookIn int 可以为空 无 在馆数量SeriesId varchar(10) 可以为空 外键,参考书籍类型表 Series
6、Id 字段书籍类型编号阅览室表阅览室表(ReadingRoom)名称 别名 数据类型 取值范围 默认值 说明 是否为空阅览室编号 RoomNum Char(20) 主键 不为空阅览室名称 RoomName Text阅览室位置 RoomLocal text书架表书架表(Shelf)名称 别名 数据类型 取值范围 默认值 说明 是否为空书架编号 Shelfnum Char(20) 主键 不为空阅览室编号 roomnum Char(20) 外键,参考阅览室表的RoomNum 字段图书信息表图书信息(Book)名称 别名 数据类型 取值范围默认值说明 是否为空图书编号 BookId varChar(2
7、0) 主键 不为空ISBN ISBN Char(20) 外键,参考某类书籍表书名 BookName text书架编号 Shelfnum varChar(20) 外键,参考书架表损坏程度 BookState varchar(20)书籍状态 BookDamage smallint读者借阅表读者借阅表(BorrowReturn )名称 别名 数据类型取值范围默认值 说明 是否为空借阅证号 ReaderAcount Char(15) 主键,外码,参考读者表不为空ISBN ISBN Char(20) 主码,外码,参考某类书籍表不为空续借次数 BorCount Char(1) 0-2借出日期 Borrow
8、Time DateTime不为空实际归还日期 ReturnTime DateTim 不为空e到期时间 Deadline datetime超出还书天数 ExceedingDays罚款金额 Fine实缴金额 PaidAmount预约表预约表(Appointment)名称 别名 数据类型取值范围 默认值说明 是否为空借阅证号 ReaderAccountChar(15) 主键、外键参考读者表ReaderAccount 字段ISBN ISBN Char(20) 主键、外键参考图书表ISBN 字段预约时间 AppTime Datetime截止时间 ExpirationTimedatetime4、SQL 语
9、句建库与建表创建图书管理系统数据库CREATE DATABASE LibarySystemON(NAME=library_Data,FILENAME=d:sqldatalibrary.mdf,SIZE=5MB,MAXSIZE=50MB,FILEGROWTH=10%)LOG ON(NAME=library_Log,FILENAME=d:sqldatalibrary_Log.ldf,SIZE=2MB,MAXSIZE=5MB,FILEGROWTH=1MB)GO创建读者身份表use LibarySystemGOcreate table ReaderType(ReaderType char(4)chec
10、k (ReaderType in (教师 ,学生 ) primary key,MaxBorNum tinyint ,MaxBorTime tinyint ,MaxBorCount tinyint )GO创建读者表use LibarySystemGOcreate table Reader(ReaderAccount char(8) primary key,ReaderName varchar(8) ,ReaderPwd char(6) ,ReaderSdept varchar(20) ,ReaderType char(4)foreign key references ReaderType(Rea
11、derType)GO创建管理员表USE LibarySystemGOCREATE TABLE Administrator(ANo CHAR(8) PRIMARY KEY,AName varCHAR(8),APwd CHAR(6),);GO创建书籍类型表USE LibarySystemGOCREATE TABLE BookType(BookTypeId varCHAR(10) PRIMARY KEY,BookType TEXT);GO创建阅览室表USE LibarySystemGOCREATE Table ReadingRoom(RoomNum CHAR(20),RoomName TEXT,Ro
12、omLocal TEXT,PRIMARY KEY (RoomNum);GO创建书架表USE LibrarySystemGOCREATE TABLE Shelf(ShelfNum CHAR(20),RoomNum CHAR(20),PRIMARY KEY (ShelfNum),FOREIGN KEY (RoomNum) REFERENCES ReadingRoom(RoomNum);GO创建出版社表use LibarySystemGOcreate table Press(PressNo Char(10),PressName Text,Contact Text,Tele Char(12),Addr
13、 text,primary key(PressNo),)GO创建某类书籍表USE LibarySystemGOCREATE Table BookSeries(ISBN CHAR(20),BookName TEXT,Author VARCHAR(20),PressNo VARCHAR(20),PageNum SMALLINT,Price SMALLint,PublishTime DATETIME,BookNum INT,BookIn INT,SeriesId VARCHAR(10),PRIMARY KEY (ISBN),FOREIGN KEY (SeriesId) REFERENCES Book
14、Type(BookTypeId);GO创建图书表USE LibarySystemGOCREATE Table Book(BookId VARCHAR(20),ISBN CHAR(20),BookName TEXT,ShelfNum CHAR(20),BookState VARCHAR(20),BookDamage SMALLINT,PRIMARY KEY (BookId),FOREIGN KEY (ISBN) REFERENCES BookSeries(ISBN),FOREIGN KEY (ShelfNum) REFERENCES Shelf(ShelfNum);GO创建预约表USE Liba
15、rySystemGOCREATE Table Appointment(ReaderAccount CHAR(8),ISBN CHAR(20),AppTime DATETIME,ExpirationTime DATETIME,PRIMARY KEY (ReaderAccount,ISBN),FOREIGN KEY (ReaderAccount) REFERENCES Reader(ReaderAccount),FOREIGN KEY (ISBN) REFERENCES BookSeries(ISBN);GO创建借阅表USE LibarySystemCREATE Table BorrowRetur
16、n(ReaderAccount CHAR(8),ISBN CHAR(20),BorrowTime DATETIME,Deadline DATETIME,ReturnTime DATETIME,ExceedingDays INT,BorCount INT,Fine SMALLMONEY,PaidAmount SMALLINT, PRIMARY KEY (ReaderAccount,ISBN,BorrowTime),FOREIGN KEY (ISBN) REFERENCES BookSeries(ISBN),FOREIGN KEY (ReaderAccount) REFERENCES Reader
17、(ReaderAccount);GO5、对数据库记录进行操作insert(举一些例子,其他的则用交互式 SQL 语句添加记录) 1;往 ReaderType 表中添加记录use LibarySystem;goinsert into ReaderType(ReaderType,MaxBorNum,MaxBorTime,MaxBorCount)values(学生,8 ,1,1);goinsert intoReaderTypevalues(教师,10,2,2 );go;往 Reader 表中添加记录use LibarySystem;goinsert into Reader(ReaderAccount
18、,ReaderName,ReaderPwd,ReaderSdept,ReaderType)values(19120123,杨扬 ,888888,计算机科学与技术 ,学生);goinsert intoReadervalues(20120101,刘一 ,888888,计算机科学与技术 ,教师);goinsert intoReadervalues(20120102,刘二 ,888888,生物科学技术 ,教师);goinsert intoReadervalues(20120103,刘三 ,888888,教育科学学院 ,教师);goupdate 2;将帐号为 20120101 的读者系别更新为数学系us
19、e LibarySystem;goupdate Readerset ReaderSdept=数学where ReaderAccount=20120101;godelete 3;删除帐号为20120102 的读者use LibarySystem;godelete fromReaderwhere ReaderAccount=20120102;goselect 4(单表查询);查找帐号为20120103的读者信息use LibarySystem;goselect*from Readerwhere ReaderAccount=20120103;go;查询所有学生的信息use LibarySystem;
20、goselect*from Readerwhere ReaderType=学生;go;查询书架 1 上的所有图书use LibarySystem;goselect*from Bookwhere ShelfNum=1;go(连接查询);查找读者预约信息select Reader.ReaderAccount,ReaderName,ReaderSdept,ReaderType,ISBN,AppTime,ExpirationTimefrom Reader,Appointmentwhere Reader.ReaderAccount=Appointment.ReaderAccount;;查询读者的借阅信息
21、select Reader.ReaderAccount,ReaderName,ReaderSdept,ReaderType,ISBN,BorrowTime,Deadlinefrom Reader,BorrowReturnwhere Reader.ReaderAccount=BorrowReturn.ReaderAccount;(嵌套查询);查找 1 号阅览室的所有书架上的书籍select BookId,ISBN,BookNamefrom Bookwhere ShelfNum IN(select ShelfNumfrom Shelfwhere RoomNum=1);;查询书名为数据库的书籍详细信
22、息select *from BookSerieswhere ISBN IN(select ISBNFROM Bookwhere BookName like %数据库% );;根据输入的学号,列出该同学当前所借图书的详细信息select *from BookSerieswhere ISBN in(select ISBNfrom BorrowReturnwhere ReaderAccount=19120123);(集合查询);查询计算机专业的教师信息select *from Readerwhere ReaderType=教师 intersectselect *from Readerwhere ReaderSdept=计算机科学与技术 ;;查阅读者身份为教师或系别为计算机系的读者select *from Readerwhere ReaderType=教师 unionselect *from Readerwhere ReaderSdept=计算机科学与技术 ;;查询在馆数量大于2 或价格低于 30的书籍信息select *from BookSerieswhere BookIn=2unionselect *from BookSerieswhere price=30;