目 录
一.需求分析
我们的图书借阅系统旨在支持图书馆的信息化管理,优化图书借阅、归还及图书资源管理。通过数据库系统化地管理图书资源、读者信息和借阅记录,系统将提升管理效率和服务质量。系统将具备以下核心功能:
- 图书信息管理
图书信息是系统的核心资源之一。系统需记录每本图书的详细信息,包括图书编号、名称、分类号、作者、出版社、价格等,同时按图书分类号对图书进行分类。图书分类号(BookClassificationNumber)将帮助系统实现对图书的高效分类和检索。每个图书副本(BookCopy)将有一个唯一编号和状态(如“可借”、“已借出”),以便跟踪和管理每本书的借阅情况。
相关表:
·图书表(Book):记录图书的基本信息,如图书编号、名称、作者、出版社、价格等。
·图书分类表(BookClassification):通过分类号管理图书类型,确保图书分类的准确性。
- 读者信息管理
系统通过唯一证件号( cardrd )标识每位读者,并记录读者的姓名、证件状态(如有效或无效)、联系方式等信息。为了确保借阅的规范性,系统需要随时更新读者状态。读者的借阅权限基于证件状态( cardstatus),如果证件过期,系统应自动禁用其借书功能。
相关表:
·读者表(Reader):记录读者的基本信息,包括证件号、姓名、联系方式和证件状态。
·借阅证表(Card):记录借阅证的发放和过期日期,作为读者借阅图书的凭证。
1.借阅记录管理
借阅记录是系统的关键组成部分,系统需记录每次借书的图书编号、读者证件号、借阅日期、应还日期和实际归还日期。系统还需要能够处理逾期归还,并计算罚款金额。借阅记录的准确性对于管理借阅行为和资源调度至关重要。
相关表:
·借阅表(BorrowRecord):记录每次借阅的详细信息,包括借阅日期、应还日期、归还日期、罚款金额等。
·罚款:借阅表中的罚款金额( PenaltyFee)会在图书逾期归还时自动生成,确保借阅者按时归还图书。
2.图书副本管理
每本图书可能有多个副本,系统需要记录每个副本的唯一编号、状态(如“可借”、“已借出”、“损坏”)。副本管理帮助管理员追踪借阅情况,并确保图书资源的合理分配,避免资源浪费或丢失。副本的管理对于多副本图书的借阅和归还至关重要。
相关表:
·图书副本表(BookCopy):记录每本图书副本的编号、状态、条形码等信息。
3.借阅证管理
借阅证是读者借书的凭证,系统需要记录借阅证的发放日期和过期日期。系统应自动禁用过期证件的借阅功能,以确保借阅的规范性。借阅证表将记录每位读者借阅证的有效期,超出有效期后,读者将无法继续借书,需重新申请。
相关表:
·借阅证表(Card):记录借阅证的发和过期日期,确保过期证件无法继续借书。
二.概念结构设计
我们分析图书借阅系统的需求,根据对现实世界中的图书管理人员中涉及的人,物,事进行抽象,从而得到系统的实体,实体的属性,实体的码,实体之间的联系及联系的类型,并用以下E-R图进行表示。
图 1总体E-R图
图 2 E-R图读者实体
图 3 E-R图借阅关系
图 4 E-R图借阅证弱实体
图 5 E-R图图书副本实体
图 6 E-R图图书实体
图 7 E-R图图书类型实体
三.逻辑结构设计
我们的数据库的逻辑结构设计是根据概念结构设计阶段的全局E-R图,按照转换规则成数据模型。图书借阅的关系模式如下:
(1)图书类型
表名:BookClassification
属性:图书分类号(BookClassificationNumber),图书分类名称(BookClassificationName),描述信息(Description)
(2)图书
表名:Book
属性:图书编号(BookId),图书名称(BookName),图书分类号(BookClassificationNumber),作者(Author),出版社(Publisher),价格(Price)
(3)读者
表名 :Reader
属性:证件号(CardId),姓名(Name),证件状态(CardStatus),联系方式(Phone),邮箱(Email)
(4)借阅
表名:BorrowRecord
属性:证件号(CardId),图书编号(BookId),借阅日期(BorrowingDate),应还日期(DueDate),归还日期(ReturnDate),罚款金额(PenaltyFee)
(5)图书副本 (弱实体集)
表名:BookCopy
属性:副本编号(CopyId),图书编号(BookId),状态(Status),条形码(Barcode)
(6)借阅证 (弱实体集)
表名:Card
属性:证件号(CardId),借阅证编号(Card_id),发放日期(IssueDate),过期日期(ExpirationDate)
四.系统相关数据库表设计
表3.1 读者表
表名 | 读者表 | |||
列名 | 数据类型 | 非空 | 约束条件 | 中文描述 |
CardId | CHAR(10) | true | 主键 | 主键标识,证件号 |
Name | CHAR(8) | true | 姓名 | |
Card Status | CHAR(4) | true | 证件状态 | |
Phone | CHAR(11) | false | 联系方式 | |
| VARCHAR(50) | false | UNIQUE | 邮箱 |
表3.2 图书表
表名 | 图书表 | |||
列名 | 数据类型 | 非空 | 约束条件 | 中文描述 |
Book_id | char(13) | true | 主键 | 主键标识,图书编号 |
Book name | varchar(50) | true | 图书名称 | |
Book Classification Number | char(7) | true | 外键,参照图书类型表的分类号 | 图书分类号 |
Author | char(50) | true | 作者 | |
Publisher | char(30) | false | 出版社 | |
Price | float | true | 必须大于0 | 价格 |
ISBN | CHAR(13) | true | UNIQUE | 国际标准书号 |
表3.3 图书类型表
表名 | 图书类型表 | |||
列名 | 数据类型 | 非空 | 约束条件 | 中文描述 |
Book Classification Number | CHAR(7) | true | 主键 | 主键标识,图书分类号 |
Book Classification Name | CHAR(20) | true | 图书分类名(部分码) | |
Description | VARCHAR(50) | false | 描述信息 |
表3.4 借阅表
表名 | 借阅表 | |||
列名 | 数据类型 | 非空 | 约束条件 | 中文描述 |
CardId | CHAR(10) | true | 外键,参照读者表的证件号 | 主键标识,证件号 |
Book_id | CHAR(13) | true | 外键,参照图书表的图书编号 | 主键标识,图书编号 |
Borrowing Date | DATE | true | 主键 | 主键标识,借阅日期 |
Due Date | DATE | true | 应还日期 | |
Return Date | DATE | false | 归还日期 | |
Penalty Fee | FLOAT | true | DEFAULT 0.0,CHECK(Penalty Fee >= 0.0) | 罚款金 |
Status | CHAR(10) | true | CHECK(Status IN("借阅中,已归还'逾期”)) |
表3.5 借阅证表
表名 | 借阅证表 | |||
列名 | 数据类型 | 非空 | 约束条件 | 中文描述 |
CardId | CHAR(10) | true | 部分主键,外键,参照读者表 | 证件号(外键) |
Issue Date | DATE | true | 发放日期 | |
Expiration Date | DATE | true | 过期日期 | |
Card_id | CHAR(10) | true | 借阅证编号(部分码) |
表3.6 图书副本表
表名 | 图书副本表 | |||
列名 | 数据类型 | 非空 | 约束条件 | 中文描述 |
Copyid | CHAR(10) | true | 副本编号(部分码) | |
Status | CHAR(10) | true | CHECK(Status IN('可借’借出’暂无”)) | 副本状态 |
Barcode | CHAR(20) | true | UNIQUE | 条形码 |
Book_id | CHAR(13) | true | 主键 | 图书编号 |
五.模块详细设计与实现
1.使用MySQL建立数据库
2.建立基本表
(1)读者表(Reader)
CREATE TABLE Reader (
CardId CHAR(10) NOT NULL,
Name CHAR(8) NOT NULL,
CardStatus CHAR(4) NOT NULL,
Phone CHAR(11),
Email VARCHAR(50),
PRIMARY KEY (CardId),
UNIQUE (Email)
);
(2)图书表(Book)
CREATE TABLE IF NOT EXISTS Book (
Book_id CHAR(13) NOT NULL,
Book_name VARCHAR(50) NOT NULL,
BookClassificationNumber CHAR(7) NOT NULL,
Author VARCHAR(50) NOT NULL,
Publisher VARCHAR(30),
Price FLOAT NOT NULL CHECK (Price > 0),
ISBN CHAR(13) NOT NULL UNIQUE,
PRIMARY KEY (Book_id),
FOREIGN KEY (BookClassificationNumber) REFERENCES BookClassification (BookClassificationNumber)
);
(3)图书类型表(BookClassification)
CREATE TABLE BookClassification (
BookClassificationNumber CHAR(7) NOT NULL,
BookClassificationName CHAR(20) NOT NULL,
Description VARCHAR(50),
PRIMARY KEY (BookClassificationNumber)
);
(4)借阅表(Borrow)
CREATE TABLE Borrow (
CardId CHAR(10) NOT NULL,
Book_id CHAR(13) NOT NULL,
Borrowing_Date DATE NOT NULL,
Due_Date DATE NOT NULL,
Return_Date DATE,
Penalty_Fee FLOAT NOT NULL DEFAULT 0.0,
Status CHAR(10) NOT NULL,
PRIMARY KEY (CardId, Book_id, Borrowing_Date),
CONSTRAINT fk_card FOREIGN KEY (CardId) REFERENCES Reader(Cardid),
CONSTRAINT fk_book FOREIGN KEY (Book_id) REFERENCES Book(Book_id),
CONSTRAINT chk_penalty_fee CHECK (Penalty_Fee >= 0.0),
CONSTRAINT chk_status CHECK (Status IN ('借阅中', '已归还', '逾期'))
);
(5)借阅证表(Card)-弱实体集
CREATE TABLE BorrowCard (
CardId CHAR(10) NOT NULL,
`Issue Date` DATE NOT NULL,
`Expiration Date` DATE NOT NULL,
Card_id CHAR(10) NOT NULL,
PRIMARY KEY (CardId, Card_id),
FOREIGN KEY (CardId) REFERENCES Reader(CardId)
);
(6)图书副本表(BookCopy)-弱实体集
CREATE TABLE BookCopy (
Copyid CHAR(10) NOT NULL,
Status CHAR(10) NOT NULL CHECK (Status IN ('可借', '借出', '暂无')),
Barcode CHAR(20) NOT NULL UNIQUE,
Book_id CHAR(13) NOT NULL,
PRIMARY KEY (Book_id)
);
3.视图创建
(1)创建图书分类下所有图书的视图
CREATE VIEW Books_By_Category AS
SELECT
bc.BookClassificationName,
b.Book_name,
b.Author,
b.Price
FROM
Book b
JOIN BookClassification bc ON b.BookClassificationNumber = bc.BookClassificationNumber;
(2)创建图书的借阅记录视图
CREATE VIEW Books_BorrowRecords AS
SELECT
b.Book_name,
r.Name AS ReaderName,
br.Borrowing_Date,
br.Due_Date,
br.Return_Date
FROM
Borrow br
JOIN Book b ON br.Book_Id = b.Book_Id
JOIN Reader r ON br.CardId = r.CardId;
4.插入数据以测试视图
(1)插入读者数据
(2)插入图书类型数据
(3)插入图书数据
(4)插入借阅数据
(5)插入借阅证数据
(6)插入图书副本数据
5.测试视图
(1)查看每个读者的借阅记录
SELECT * FROM Reader_BorrowRecords;
(2)查看每个图书分类下的所有图书
SELECT * FROM Books_By_Category;
六.总结
1.系统功能概述
(1)图书信息管理
系统的核心资源是图书,通过图书表(Book)来管理每本图书的基本信息,包括图书编号、名称、分类、作者、出版社、价格等。图书信息还通过图书分类表(BookClassification)进行分类,以便于图书的高效管理和检索。
(2)读者信息管理
系统通过读者表(Reader)来管理所有读者的信息,每位读者通过唯一的证件号(CardId)进行标识。读者信息包括姓名、证件状态(有效或无效)、联系方式等。为了确保借阅的规范性,系统会实时更新读者的借阅权限。
(3)借阅记录管理
借阅记录是系统的重要组成部分,记录每次借书的图书编号、读者证件号、借阅日期、应还日期、归还日期和罚款金额。通过借阅表(BorrowRecord)来管理这些信息,系统能够自动计算罚款,并跟踪图书的借阅和归还情况。
(4)图书副本管理
图书副本通过图书副本表(BookCopy)进行管理,记录每个副本的唯一编号、状态(如“可借”、“已借出”或“损坏”)以及条形码等信息。副本管理帮助管理员追踪借阅情况,避免资源浪费或丢失。
(5)借阅证管理
借阅证是读者借书的凭证,通过 `借阅证表`(`Card`)来记录每个读者的借阅证信息,包括发放日期和过期日期。过期的借阅证会自动禁用,确保借阅行为的规范性。
2.数据库设计
系统的数据库设计包括 7 个主要表,分别为:
·图书表(Book):记录图书的基本信息。
·图书分类表(BookClassification):记录图书的分类信息。
·读者表(Reader):记录每个读者的个人信息。
·借阅表(BorrowRecord):记录每次借书的详细信息。
·图书副本表(BookCopy):记录每个图书副本的状态和位置。
·借阅证表(Card):记录读者借阅证的发放和过期日期。
这些表并非孤立存在,而是通过精心设计、具备强关联性的外键紧密相连,仿若大厦内部坚固交织的钢筋骨架,彼此支撑协同,确保数据在这座 “知识信息大厦” 内流通时,始终维持高度的完整性与一致性。任何一处数据细节变更,均能联动相关信息板块自动协同更新,为系统长期、稳定运行筑牢坚实根基,保障系统可靠性。
3.系统工作流程
(1)读者注册和借阅:读者踏入图书馆知识领域,先在系统内启动注册流程,提交个人信息后,系统依预设标准严谨审核,审核通过即时发放借阅证。此后读者凭借证件号借阅,每次借阅操作,系统毫秒级响应,精准捕捉借阅起始时间,依托算法推算应还日期,全程动态监测图书归位,确保知识传递各环节精准无误。
(2)逾期和罚款管理:图书借阅瞬间,系统依预设规则精确计算应还日期并记录。若图书未如期归还,系统凭借敏锐监测机制察觉,自动生成逾期信息,依据逾期天数、参照具法律效力的罚款规则精确计算罚款金额。逾期将关联读者信用记录,影响后续借阅资格获取,促使读者守时还书,保障图书馆资源高效、有序循环。
本图书借阅系统旨在通过前沿的数据库技术,全方位管理图书馆的图书资源、读者信息与借阅记录。从优化借阅流程入手,简化读者借还书手续,去除繁琐环节;到精细打磨归还流程,确保图书归位迅速、准确;再到全面提升图书馆管理效率,以数据驱动决策,让管理员轻松掌控全局。凭借合理精妙的数据库结构设计,宛如搭建稳固高效的 “知识生产线”;依托行之有效的数据管理功能,如同为生产线配备智能监控;再佐以安全可靠的用户权限控制,恰似为知识宝库筑牢坚固 “门禁”。如此一来,系统便能为图书馆提供高效、可靠的服务,如同强劲引擎,有效助推图书馆的日常运营,确保图书资源如活水般顺畅流动,借阅流程似通途般便捷无阻。系统设计全程秉持前瞻性理念,充分考量安全性,为知识资产保驾护航;兼顾扩展性,以便未来轻松对接新需求;聚焦易用性,让无论是管理员还是读者都能轻松上手,全方位满足图书馆在信息化浪潮下的各类管理需求。