图书管理系统的数据库设计需要考虑到借出归还设计和存储过程设计、信息操作功能和人员管理等方面。下面是数据库设计:
Books 表
字段名 | 数据类型 | 备注 |
---|---|---|
book_id | int | 主键,自增长 |
title | varchar(255) | 书名 |
author | varchar(255) | 作者 |
publisher | varchar(255) | 出版社 |
publish_date | date | 出版日期 |
price | decimal(10,2) | 价格 |
status | int | 状态(0:未借出,1:已借出) |
Readers 表
字段名 | 数据类型 | 备注 |
---|---|---|
reader_id | int | 主键,自增长 |
name | varchar(255) | 姓名 |
gender | varchar(10) | 性别 |
age | int | 年龄 |
phone | varchar(20) | 联系方式 |
password | varchar(255) | 密码(加密存储) |
BorrowRecords 表
字段名 | 数据类型 | 备注 |
---|---|---|
record_id | int | 主键,自增长 |
borrow_date | datetime | 借阅日期 |
return_date | datetime | 归还日期 |
reader_id | int | 外键,关联到 Readers 表的 reader_id 字段 |
book_id | int | 外键,关联到 Books 表的 book_id 字段 |
status | int | 状态(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
这些存储过程实现了添加图书、修改图书信息、删除图书、查询图书、添加读者、修改读者信息、删除读者、查询读者等功能。可以根据需要进行修改和扩展。