mysql图书管理系统数据库详细设计

图书管理系统的数据库设计需要考虑到借出归还设计和存储过程设计、信息操作功能和人员管理等方面。下面是数据库设计:

Books 表

字段名数据类型备注
book_idint主键,自增长
titlevarchar(255)书名
authorvarchar(255)作者
publishervarchar(255)出版社
publish_datedate出版日期
pricedecimal(10,2)价格
statusint状态(0:未借出,1:已借出)

Readers 表

字段名数据类型备注
reader_idint主键,自增长
namevarchar(255)姓名
gendervarchar(10)性别
ageint年龄
phonevarchar(20)联系方式
passwordvarchar(255)密码(加密存储)

BorrowRecords 表

字段名数据类型备注
record_idint主键,自增长
borrow_datedatetime借阅日期
return_datedatetime归还日期
reader_idint外键,关联到 Readers 表的 reader_id 字段
book_idint外键,关联到 Books 表的 book_id 字段
statusint状态(0:已归还,1:未归还)

在这个示例中,Books 表存储图书的信息,包括书籍 ID、书名、作者、出版社、出版日期、价格和状态。Readers 表存储读者的信息,包括读者 ID、姓名、性别、年龄、联系方式和密码。BorrowRecords 表存储借阅记录的信息,包括借阅 ID、借阅日期、归还日期、读者 ID、书籍 ID 和状态。

为了实现借出归还功能,可以设计以下两个存储过程:

借书存储过程

CREATE PROCEDURE BorrowBook
    @reader_id int,
    @book_id int
AS
BEGIN
    -- 检查该书籍是否已经借出
    IF EXISTS (SELECT * FROM BorrowRecords WHERE book_id = @book_id AND status = 1)
    BEGIN
        PRINT '该书籍已经借出,无法再次借阅!'
    END
    ELSE
    BEGIN
        -- 将该书籍的状态设置为已借出
        UPDATE Books SET status = 1 WHERE book_id = @book_id
        -- 添加一条借阅记录
        INSERT INTO BorrowRecords (borrow_date, reader_id, book_id, status)
        VALUES (GETDATE(), @reader_id, @book_id, 1)
        PRINT '借书成功!'
    END
END

还书存储过程

CREATE PROCEDURE ReturnBook
    @reader_id int,
    @book_id int
AS
BEGIN
    -- 检查该书籍是否已经归还
    IF NOT EXISTS (SELECT * FROM BorrowRecords WHERE book_id = @book_id AND status = 1)
    BEGIN
        PRINT '该书籍已经归还,无需再次归还!'
    END
    ELSE
    BEGIN
        -- 将该书籍的状态设置为未借出
        UPDATE Books SET status = 0 WHERE book_id = @book_id
        -- 更新借阅记录的状态和归还日期
        UPDATE BorrowRecords SET status = 0, return_date = GETDATE()
        WHERE reader_id = @reader_id AND book_id = @book_id AND status = 1
        PRINT '还书成功!'
    END
END

这两个存储过程分别用于借书和还书操作。借书存储过程会检查该书籍是否已经借出,如果是,则返回错误信息;否则,它会将该书籍的状态设置为已借出,并添加一条借阅记录。还书存储过程会检查该书籍是否已经归还,如果是,则返回错误信息;否则,它会将该书籍的状态设置为未借出,并更新借阅记录的状态和归还日期。

除了上述表格和存储过程之外,还需要设计相应的信息操作功能和人员管理功能,例如添加图书、修改图书信息、删除图书、查询图书、添加读者、修改读者信息、删除读者、查询读者等。这些功能可以通过 SQL 语句或存储过程来实现。

存储过程设计如下:

添加图书存储过程

CREATE PROCEDURE AddBook
    @title varchar(255),
    @author varchar(255),
    @publisher varchar(255),
    @publish_date date,
    @price decimal(10,2)
AS
BEGIN
    INSERT INTO Books (title, author, publisher, publish_date, price, status)
    VALUES (@title, @author, @publisher, @publish_date, @price, 0)
    PRINT '添加图书成功!'
END

修改图书信息存储过程

CREATE PROCEDURE UpdateBook
    @book_id int,
    @title varchar(255),
    @author varchar(255),
    @publisher varchar(255),
    @publish_date date,
    @price decimal(10,2)
AS
BEGIN
    UPDATE Books SET
        title = @title,
        author = @author,
        publisher = @publisher,
        publish_date = @publish_date,
        price = @price
    WHERE book_id = @book_id
    PRINT '修改图书信息成功!'
END

删除图书存储过程

CREATE PROCEDURE DeleteBook
    @book_id int
AS
BEGIN
    DELETE FROM BorrowRecords WHERE book_id = @book_id
    DELETE FROM Books WHERE book_id = @book_id
    PRINT '删除图书成功!'
END

查询图书存储过程

CREATE PROCEDURE SearchBooks
    @title varchar(255) = NULL,
    @author varchar(255) = NULL,
    @publisher varchar(255) = NULL
AS
BEGIN
    SELECT * FROM Books
    WHERE (@title IS NULL OR title LIKE '%' + @title + '%')
        AND (@author IS NULL OR author LIKE '%' + @author + '%')
        AND (@publisher IS NULL OR publisher LIKE '%' + @publisher + '%')
END

添加读者存储过程

CREATE PROCEDURE AddReader
    @name varchar(255),
    @gender varchar(10),
    @age int,
    @phone varchar(20),
    @password varchar(255)
AS
BEGIN
    INSERT INTO Readers (name, gender, age, phone, password)
    VALUES (@name, @gender, @age, @phone, @password)
    PRINT '添加读者成功!'
END

修改读者信息存储过程

CREATE PROCEDURE UpdateReader
    @reader_id int,
    @name varchar(255),
    @gender varchar(10),
    @age int,
    @phone varchar(20),
    @password varchar(255)
AS
BEGIN
    UPDATE Readers SET
        name = @name,
        gender = @gender,
        age = @age,
        phone = @phone,
        password = @password
    WHERE reader_id = @reader_id
    PRINT '修改读者信息成功!'
END

删除读者存储过程

CREATE PROCEDURE DeleteReader
    @reader_id int
AS
BEGIN
    DELETE FROM BorrowRecords WHERE reader_id = @reader_id
    DELETE FROM Readers WHERE reader_id = @reader_id
    PRINT '删除读者成功!'
END

查询读者存储过程

CREATE PROCEDURE SearchReaders
    @name varchar(255) = NULL,
    @gender varchar(10) = NULL,
    @phone varchar(20) = NULL
AS
BEGIN
    SELECT * FROM Readers
    WHERE (@name IS NULL OR name LIKE '%' + @name + '%')
        AND (@gender IS NULL OR gender = @gender)
        AND (@phone IS NULL OR phone LIKE '%' + @phone + '%')
END

这些存储过程实现了添加图书、修改图书信息、删除图书、查询图书、添加读者、修改读者信息、删除读者、查询读者等功能。可以根据需要进行修改和扩展。

  • 2
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SQL数据库项目示例,该项目包含源码和课程设计主题。DROP DATABASE IF EXISTS `BOOK_SYSTEM`; -- 创建DATABASE CREATE DATABASE BOOK_SYSTEM; -- 使用BOOK_SYSTEM USE BOOK_SYSTEM; -- 用户表 CREATE TABLE IF NOT EXISTS `T_USER` ( `ID` int AUTO_INCREMENT NOT NULL, `USER_NAME` varchar(20), `USER_PASSWORD` varchar(20), PRIMARY KEY (`ID`) ); INSERT INTO `T_USER` VALUES ('1', 'crazyit', 'crazyit'); -- 书种类 CREATE TABLE IF NOT EXISTS `T_BOOK_TYPE` ( `ID` int AUTO_INCREMENT NOT NULL, -- 主键生成策略为自动增长 `TYPE_NAME` varchar(50), -- 种类名称 `TYPE_INTRO` varchar(200), -- 种类简介 PRIMARY KEY (`ID`) ); -- 出版社 CREATE TABLE IF NOT EXISTS `T_PUBLISHER` ( `ID` int AUTO_INCREMENT NOT NULL, -- 主键生成策略为自动增长 `PUB_NAME` varchar(50), -- 出版社名称 `PUB_TEL` varchar(50), -- 联系电话 `PUB_LINK_MAN` varchar(50), -- 联系人 `PUB_INTRO` varchar(200), -- 简介 PRIMARY KEY (`ID`) -- 声明主键 ); -- 书 CREATE TABLE IF NOT EXISTS `T_BOOK` ( `ID` int AUTO_INCREMENT NOT NULL, -- ID字段,自增 `BOOK_NAME` varchar(50), -- 书名称 `BOOK_INTRO` varchar(200), -- 书简介 `BOOK_PRICE` double, -- 书的单价 `TYPE_ID_FK` int NOT NULL, -- 种类外键 `PUB_ID_FK` int NOT NULL, -- 出版社外键 `IMAGE_URL` varchar(200), -- 缩略图URL `AUTHOR` varchar(200), -- 作者 `REPERTORY_SIZE` bigint(10), -- 库存数量 FOREIGN KEY (`TYPE_ID_FK`) REFERENCES `T_BOOK_TYPE` (`ID`), -- 声明种类的外键 FOREIGN KEY (`PUB_ID_FK`) REFERENCES `T_PUBLISHER` (`ID`), -- 声明出版社外键 PRIMARY KEY (`ID`) ); -- 交易记录表, 一个交易记录包括多个书的销售记录, 一次交易可能有多本书 CREATE TABLE IF NOT EXISTS `T_SALE_RECORD` ( `ID` int AUTO_INCREMENT NOT NULL, `RECORD_DATE` datetime,-- 交易日期 PRIMARY KEY (`ID`) ); -- 书的销售记录, 一条记录对应一本书 CREATE TABLE IF NOT EXISTS `T_BOOK_SALE_RECORD` ( `ID` int AUTO_INCREMENT NOT NULL, `BOOK_ID_FK` int, -- 销售的书 `T_SALE_RECORD_ID_FK` int, -- 该书的销售记录所对应的交易记录 `TRADE_SUM` int(10), -- 销售数量 FOREIGN KEY (`BOOK_ID_FK`) REFERENCES `T_BOOK` (`ID`), FOREIGN KEY (`T_SALE_RECORD_ID_FK`) REFERENCES `T_SALE_RECORD` (`ID`), PRIMARY KEY (`ID`) ); -- 入库记录表, 一次入库会入多本书 CREATE TABLE IF NOT EXISTS `T_IN_RECORD` ( `ID` int AUTO_INCREMENT NOT NULL, `RECORD_DATE` datetime, -- 入库日期 PRIMARY KEY (`ID`) ); -- 书的入库记录 CREATE TABLE IF NOT EXISTS `T_BOOK_IN_RECORD` ( `ID` int AUTO_INCREMENT NOT NULL, -- ID自增 `BOOK_ID_FK` int, -- 入库的书 `T_IN_RECORD_ID_FK` int, -- 对应的入库记录 `IN_SUM` int(10), -- 入库数量 FOREIGN KEY (`BOOK_ID_FK`) REFERENCES `T_BOOK` (`ID`), -- 声明书的外键 FOREIGN KEY (`T_IN_RECORD_ID_FK`) REFERENCES `T_IN_RECORD` (`ID`), -- 声明入库记录外键 PRIMARY KEY (`ID`) );
借书------根据您提供的图书条形码和图书编号确认图书,再据读者的编号确认读者后把此书借给这位读者。 还书------根据您提供的图书条形码和图书编号确认图书,再据读者的编号确认读者后把此书归还。 图书管理------对所有图书的资料进行添加,修改和删除等操作。 读者管理------对所有读者的资料进行添加,修改和删除等操作。 查询------所有图书、不在馆图书,今天借出图书、今日归还图书、今日新进图书和有条件查询。 统计------图书基础状况统计排名。 管理员------在这里修改管理员的登录密码。 1.4 需求分析 1.4.1 软件需求 管理员可以维护客户注册信息、维护图书信息、处订定单信息、 网上售书、查看图书调查报告;。本系统的设计目标将最终定位于完成以上所述的系统主要业务的基本模型上。  开发意图:面对网购越来越走红的趋势,结合广大书迷对于购书的需求,特意推出书店的网络版,以满足广大购书者能够实现足不出户就购买到所需图书的意愿。  作用范围:本网上书店系统暂时面向单机使用,有机会将会架设在公用网络上,以满足广大网民新形势下对于买书的需求。  《网上书店管理系统》正是基于这种市场潜力,面向全国中小型图书销售商而开发的,力争为全国的中小型书店提供一款功能完善、界面友好、性能可靠的网上销售系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一花一world

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值