1 需求分析
本图书管理系统主要实现对图书馆的管理:图书、读者、管理员、借阅。由此,结构可分为:图书管理、读者管理、管理员管理、借还管理、罚单管理、还书信息。
1.1 需求定义
1.1.1 图书管理
可对图书信息进行浏览、编辑(包括对图书的修改、入库、删除)
- 浏览图书信息
- 编辑图书信息:修改、入库、删除
1.1.2 读者管理
可对读者信息进行浏览、编辑(包括对读者的修改、入库、删除)
- 浏览读者信息
- 编辑读者信息:修改、添加、删除
1.1.3 管理员管理
可对管理员信息进行浏览、编辑(包括对管理员的修改、入库、删除)
- 浏览管理员信息
- 编辑管理员信息:修改、添加、删除
1.1.4 借还管理
可对借书信息进行浏览;进行借书操作,每次只能进行一次操作,也可对新增借书进行删除;进行还书操作,如逾期欠费有提示,需要进行缴费操作,才能还书
- 浏览图书借书信息
- 借书(每次只能操作一次)-> 可对新增借书的删除
- 还书(逾期欠费需缴费才能还书)
1.1.5 罚单管理
可对罚单信息进行浏览;进行缴费操作;对已缴费的记录进行清理删除
- 浏览罚单信息
- 缴费
- 删除已缴费的记录
1.1.6 还书信息
可浏览还书信息
1.2 功能需求
- 图书的查阅、修改、删除、图书入库:编号、书名、作者、出版社、在库数、类别
- 读者的查询、修改、删除、新增读者:借书证号、姓名、班级、院系
- 管理员的查询、修改、删除、新增管理员:编号、姓名、负责书库
- 借还信息的查询、还书(逾期欠费需缴费才能还书)、新增借书:借书证号、读者名、编号、书名、借书日期、预计归还日期,可删除新增记录
- 罚单的查阅、缴费、删除(已缴费)
- 还书信息的查阅

图 1 图书管理系统功能图
2 概念结构设计
根据需求分析我们规划出实体有:读者信息实体、管理员信息实体、图书信息实体。各个实体具体的描述 E-R 实体如下。
2.1 读者信息模块
读者属性包括:借书证号、姓名、班级、院系

2.2 图书信息模块
图书属性包括:编号、书名、作者、出版社、在库数、类别

2.3 管理员信息模块
管理员属性包括:编号、姓名、负责书库

2.4 完整的 E-R 图
实体间的联系:
- 读者借书:拥有借书证号、图书编号、借出日期、应归还日期 属性
- 读者还书:拥有借书证号、图书编号、借出日期、应归还日期、归还日期、推迟天数、罚款总额 属性

3 逻辑结构设计
3.1 数据库逻辑设计
由 E-R 模型得到关系模型:借阅关系模型
3.3.1 借阅关系
属性:借书证号、图书编号、借出日期、应归还日期、归还日期、推迟天数、罚款总额
主键:借书证号、图书编号
3.2 数据库逻辑结构
- 图书信息表(属性:id(INT(11))、name(VARCHAR(20))、author(VARCHAR(20))、publisher(VARCHAR(20))、num(INT(11))、sort(VARCHAR(20)))
- 读者信息表(属性:id(INT(11))、name(VARCHAR(20))、class(VARCHAR(20))、department(VARCHAR(20)))
- 管理员信息表(属性:id(INT(11))、name(VARCHAR(20))、stackroom(VARCHAR(10)))
- 借书信息表(属性:bookId(INT(11))、readerId(INT(11))、borrow_date(DATE)、expect_rerurn_date(DATE))
- 罚单信息表(属性:bookId(INT(11))、readerId(INT(11))、over_date(INT)、ticket_fee(FLOAT)、payoff(INT))
- 还书信息表(属性:bookId(INT(11))、readerId(INT(11))、borrow_date(DATE)、rerurn_date(DATE))
3.2.1 图书信息表
4 物理设计
由上述数据库逻辑结构转换为实际数据模型,本图书管理系统的各个表如下:
4.1 建立图书馆数据库(library)
CREATE DATABASE library;
4.2 建立图书表(book)
CREATE TABLE `book` (
`id` INT(11) NOT NULL DEFAULT '0',
`name` VARCHAR(20) NOT NULL,
`author` VARCHAR(20) NOT NULL,
`publisher` VARCHAR(20) NOT NULL,
`num` INT(11) NOT NULL,
`sort` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
desc book;

4.3 建立读者表(reader)
CREATE TABLE `reader` (
`id` INT(11) NOT NULL DEFAULT '0',
`name` VARCHAR(20) NOT NULL,
`class` VARCHAR(10) NOT NULL,
`department` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
desc reader;

4.4 建立借阅表(borrow)
CREATE TABLE `borrow` (
`bookId` INT(11) NOT NULL COMMENT '学生编号',
`readerId` INT(11) NOT NULL COMMENT '图书编号',
`borrow_date` DATE NULL DEFAULT NULL COMMENT '借书时间',
`expect_return_date` DATE NULL DEFAULT NULL COMMENT '预期归还时间',
PRIMARY KEY (`bookId`, `readerId`),
INDEX `READERID` (`readerId`, `bookId`),
CONSTRAINT `BOOKID` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`),
CONSTRAINT `READERID` FOREIGN KEY (`readerId`) REFERENCES `reader` (`id`)
)
COMMENT='存储学生的借书信息'
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
desc borrow;

4.5 建立管理员表(administartors)
CREATE TABLE `administrators` (
`id` INT(11) NOT NULL DEFAULT '0',
`name` VARCHAR(20) NOT NULL,
`stackroom` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
desc administrators;

4.6 建立还书信息表(return_table)
CREATE TABLE `return_table` (
`bookId` INT(11) NOT NULL,
`readerId` INT(11) NOT NULL,
`borrow_date` DATE NULL DEFAULT NULL,
`return_date` DATE NULL DEFAULT NULL COMMENT '实际还书情况',
PRIMARY KEY (`bookId`, `readerId`),
INDEX `readerId` (`readerId`, `bookId`),
CONSTRAINT `BOOKID_R` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`),
CONSTRAINT `READERID_R` FOREIGN KEY (`readerId`) REFERENCES `reader` (`id`)
)
COMMENT='存储学生的归还信息'
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
desc return_table;

4.7 建立罚单信息表(ticket)
CREATE TABLE `ticket` (
`readerId` INT(11) NOT NULL COMMENT '学生编号',
`bookId` INT(11) NOT NULL COMMENT '书籍编号',
`over_date` INT(11) NULL DEFAULT NULL COMMENT '超期天数',
`ticket_fee` FLOAT NULL DEFAULT NULL COMMENT '处罚金额',
`payoff` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`readerId`, `bookId`),
INDEX `BOOKID_T` (`bookId`),
CONSTRAINT `BOOKID_T` FOREIGN KEY (`bookId`) REFERENCES `book` (`id`),
CONSTRAINT `READERID_T` FOREIGN KEY (`readerId`) REFERENCES `reader` (`id`)
)
COMMENT='存储学生的罚单信息'
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
desc ticket;

5 实施过程
5.1 装载数据过程
5.1.1 用 DML 语句对 book 表加入数据
INSERT INTO `library`.`book` (`id`, `name`, `author`, `publisher`, `num`, `sort`) VALUES ('8', '时事报告', '张习文', '时事报告杂志社', '1', '政治');
INSERT INTO `library`.`book` (`id`, `name`, `author`, `publisher`, `num`, `sort`) VALUES ('9', '计算机网络安全', '马利', '清华大学出版社', '1', '计算机');
select * from book;

5.1.2 用 DML 语句对 reader 表加入数据
INSERT INTO `library`.`reader` (`id`, `name`, `class`, `department`) VALUES ('6', '张三', '1603', '机器人学院');
INSERT INTO `library`.`reader` (`id`, `name`, `class`, `department`) VALUES ('7', '李四', '1602', '金融学院');
select * from reader;

5.1.3 用 DML 语句对 administartors 表加入数据
INSERT INTO `library`.`administrators` (`id`, `name`, `stackroom`) VALUES ('4', '王五', '外国文学');
INSERT INTO `library`.`administrators` (`id`, `name`, `stackroom`) VALUES ('5', '江六', '中国文学');
select * from administrators;

5.2 设计视图
5.2.1 在 reader,borrow 和 book 上创建借书者的全面信息视图 reader_borrow
create view reader_borrow as
select reader.id AS reader_id,reader.name AS reader_name,book.id AS book_id,book.name AS book_name

最低0.47元/天 解锁文章
741

被折叠的 条评论
为什么被折叠?



