当前位置:首页 » 数据仓库 » 数据库归还图书表
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库归还图书表

发布时间: 2022-12-18 21:52:22

sqlServer建 图书管理系统的数据库(简单填试验报告)

你这个问题3个数据表能搞定
1 读者表(ID、姓名、出生日期、最高借阅数量)
2图书表(图书编码、类型、书名、价格、最后借出时间、目前是否借出)
3借阅记录表(ID、图书编码、借出日期、归还日期、是否归还)
能够满足你上面这些条件的要求

(1)借书
图书表显示所有未借出的书,选择后,增加借阅记录表
(2)还书
根据读者列出未归还的借阅记录表,进行设置
(3)限定读者的年龄只能在18~60之间。
增加读者表时,判断出生日期,进行拦截
(4) 对数据库进行正常维护并保持数据的完整性。
不归程序管
(5) 不能删除已借出的图书的基本信息。
删除时,检查图书表的目前是否借出,只能删除为否的记录
(6) 查看某读者的借阅历史记录。
查借阅记录表
(7) 能查看某读者还能借阅的图书数。(允许经过两次操作得到答案)
一条sql语句就能解决,联查sum(借阅记录)与读者最高借阅数量相减
(8) 修改不同身份读者借阅图书的数量。 (只能更改一条记录)
更改读者最高借阅数量
(9) 统计图书借阅次数。
查询借阅记录
(10) 查看指定类型的图书情况。
查看图书表,根据类型
(11) 授予用户U1查看指定类型图书借阅次数的权限。
没看明白什么意思
(12) 查看从没被借阅过的图书。
查看图书表最后借出日期为空的记录
(13)查看书名包含相关信息的图书的信息。
模糊查询图书表
(14)查看借阅相关图书的读者的姓名。(要求用两种方法实现)
我只知道调用借阅记录表,不明白所谓两种方法指的什么
(15)查看某读者借阅的图书的总价。
联查图书表和借阅记录,sum图书价格

就这么多了,具体的还要你自己弄,毕竟是作业,别人写了,成别人的了,你什么都没学到

㈡ 1.图书管理数据库中有“读者表”(借书证号,姓名,部门,办证时间,照片)、“图书表”(书号,书名,作

1.select * from 读者 where 部门='法律系'
2.select 借书证号,书号,借书日期 from 借书登记 where 还书时期 is null
3.select t1.书号 , t1.还书日期-t2.借书日期 from 借书登记 t1,借书登记 t2 where t1.流水号=t2.流水号 and t1.借书证号=t2.借书证号 and t1.书号=t2.书号
4. select 书号,count(*) from 借书登记 group by 书号
5.select 出版社,sum(价格) 汇总金额 from 图书 group by 出版社 order by sum(价格) desc

㈢ 借书还书数据库代码

-- 图书借阅数据库设计
-- 记录每一本图书借出和还回的操作

-- 书的信息

DROP DATABASE IF EXISTS db_lib;
CREATE DATABASE db_lib;

use db_lib

SET @READER_MAX = 10;
SET @EVERY_DAY_FEE=0.1;
SELECT 10 INTO @temp;

-- 新建相关的表
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(255) NOT NULL,
price DECIMAL(8,2) DEFAULT 0
);

CREATE TABLE readers (
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(255) NOT NULL,
borrowed INT DEFAULT 0
);

CREATE TABLE lib_books (
id INT PRIMARY KEY AUTO_INCREMENT,
info INT,
FOREIGN KEY(info) REFERENCES books(id),
stat CHAR(10) NOT NULL DEFAULT "在馆"
);

-- 记录借书和还书
CREATE TABLE lib_loan (
id INT AUTO_INCREMENT,
who INT,
which INT,
check_out DATETIME NOT NULL DEFAULT NOW(),
check_in DATETIME DEFAULT NULL,
renew BOOLEAN NOT NULL DEFAULT 0,
latest DATE NOT NULL,
fee DECIMAL(8,2) DEFAULT NULL,

PRIMARY KEY(id),
FOREIGN KEY(who) REFERENCES readers(id),
FOREIGN KEY(which) REFERENCES lib_books(id)
);

-- 给馆藏图书添加10本书
-- 存储过程
DELIMITER $$$
CREATE PROCEDURE add_books( IN n INT)
BEGIN
-- 需要有多行数据放入变量,需要用 游标 cursor
-- i 局部变量
DECLARE i INT DEFAULT 1;

-- @temp全局变量
SELECT COUNT(*) INTO @temp
FROM books;

WHILE i<=n DO
INSERT INTO lib_books (info) VALUES ( FLOOR(RAND()*@temp)+1 );
SET i = i+1;
END WHILE;

END $$$
DELIMITER ;

-- 触发器 trigger ,管理图书被借出后,藏书和读者信息的维护
-- 表中数据相关的操作: 增 删 改 (查)
-- 一个表中某条记录被修改:OLD 代表原有的那条记录 NEW代表新的那条记录
-- [BEFORE | AFTER] [INSERT | UPDATE | (DELETE) ]
DELIMITER $$$
CREATE TRIGGER before_insert_loan
BEFORE INSERT ON lib_loan
FOR EACH ROW
BEGIN

-- OLD NEW 已知
DECLARE v1 CHAR(100);
DECLARE v2 INT;

SET NEW.latest =DATE_ADD(NEW.check_out,INTERVAL 1 month);
-- 只能修改NEW
SELECT stat INTO v1
FROM lib_books
WHERE id=NEW.which;

SELECT borrowed INTO v2
FROM readers
WHERE id=NEW.who;

IF ( v1<>"在馆" ) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "图书已借出!";
END IF ;

IF (v2=@READER_MAX) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = "读者已经到达最大借阅数!";
END IF ;

END $$$
DELIMITER ;

-- 书借出的数据维护
DELIMITER $$$
CREATE TRIGGER after_insert_loan
AFTER INSERT ON lib_loan
FOR EACH ROW
BEGIN

UPDATE lib_books
SET stat = "已借出"
WHERE id = NEW.which ;

UPDATE readers
SET borrowed = borrowed + 1
WHERE id = NEW.who;
END $$$
DELIMITER ;

-- 书归还的数据维护
DELIMITER $$$
CREATE TRIGGER after_update_loan
AFTER UPDATE ON lib_loan
FOR EACH ROW
BEGIN
IF(OLD.check_in is NULL AND NEW.check_in is NOT NULL) THEN
UPDATE lib_books
SET stat="在馆"
WHERE id= NEW.which;

UPDATE readers
SET borrowed=borrowed -1
WHERE id=OLD.who;
END IF;

END $$$
DELIMITER ;

DELIMITER $$$
CREATE TRIGGER before_update_loan
BEFORE UPDATE ON lib_loan
FOR EACH ROW
BEGIN

DECLARE x INT;
IF(OLD.renew=0 AND NEW.renew=1 ) THEN
SET NEW.latest=DATE_ADD(OLD.latest,INTERVAL 1 month);
END IF;
-- 计算超期费用
IF(OLD.check_in is NULL AND NEW.check_in is NOT NULL) THEN
SET x=DATEDIFF(NEW.check_in,NEW.latest);
IF(x<=0 )THEN
SET NEW.fee =0 ;
ELSE
SET NEW.fee=@EVERY_DAY_FEE*x;
END IF;

END IF;
END $$$
DELIMITER ;

-- 添加若干的测试数据
INSERT INTO books (name, price)
VALUES
("javascript程序设计", 19.8),
("数据库系统开发", 20.8),
("mysql数据库必知必会", 28.8);

INSERT INTO readers ( name )
VALUES
("Alice"),
("Bob"),
("Carl");

-- 测试语句
SHOW TABLES;

-- 根据书的信息添加10本馆藏图书
CALL add_books( 10) ;

SELECT * from lib_books;
-- 借书
-- 2号读者借了2号书

INSERT INTO lib_loan (who , which ) VALUES (2,2);
INSERT INTO lib_loan (who , which ) VALUES (2,3);
INSERT INTO lib_loan (who , which ) VALUES (2,4);
INSERT INTO lib_loan (who , which ) VALUES (1,2);
INSERT INTO lib_loan (who , which ) VALUES (1,6);
INSERT INTO lib_loan (who , which ) VALUES (2,1);
INSERT INTO lib_loan (who , which ) VALUES (1,1);

-- 还书
UPDATE lib_loan
SET check_in='2022-12-15 12:00:00'
WHERE id = 1;

-- 续借
UPDATE lib_loan
SET renew = 1
WHERE id = 4;

SELECT * FROM lib_books;
SELECT * FROM readers;
SELECT * FROM lib_loan;

㈣ 图书管理系统借书还书怎么做 SQL

有一图书资料基本表,表中有一个字段设计为是否已经在图书管,
借出有一个数据记录表 记录借出数据,插入数据时更新该书的是否在图书馆的标志为不为图书馆
还书有一个数据记录表,记录还书的数据,插入数据时更新该书的是否在图书馆的标志为在图书馆

㈤ 数据库图书管理系统代码

create database db

use db

create table 借阅等级信息(

借阅等级 int primary key,

最长借阅时间 int,

最大借阅数量 int,

)

insert into 借阅等级信息 values

(0, 30, 10),

(1, 60, 20),

(2, 90, 30),

(3, 120, 40)

create table 读者信息(

姓名 char(15) not null,

证件号 char(12) primary key,

借阅等级 int default 0,

累计借书 int default 0,

foreign key(借阅等级) references 借阅等级信息(借阅等级)

)

insert into 读者信息(姓名, 证件号, 借阅等级) values

('张三', '541607120165', 1),

('李四', '541707010185', 3),

('王五', '541707120165', 1),

('赵六', '541505980268', 2),

('孙七', '541407010169', 0),

('周八', '541307010489', 1)

create table 出版社信息(

出版社 varchar(20) primary key,

地址 varchar(25),

联系电话 char(7)

)

insert into 出版社信息 values

('清华大学出版社', '北京', '4979421'),

('晟威出版社', '天津', '5564130'),

('南海出版公司', '海南', '4984910'),

('上海文艺出版社', '上海', '6640239')

create table 图书信息(

索书号 char(15) primary key,

作者 char(15),

书名 char(15),

出版社 varchar(20),

出版时间 date,

foreign key(出版社)references 出版社信息(出版社)

)

insert into 图书信息 values

('b12987', '严蔚敏', '数据结构', '清华大学出版社', '2012-02-06'),

('b97894', '东野圭吾', '幻夜', '南海出版公司', '2004-08-02'),

('b16546', '吴玉华', '物理实验教程', '清华大学出版社', '2013-05-15'),

('b89490', '张雪峰', '考研指点', '晟威出版社', '2016-12-12'),

('b56400', '郏宗培', '纸上寻仙记', '上海文艺出版社', '2011-02-05')

create table 单本图书信息(

条码号 char(7) primary key check(len(条码号) = 7),

索书号 char(15),

馆藏地 varchar(40),

书刊状态 varchar(6) check(书刊状态 in ('可借', '借出', '非可借')),

历史借阅量 int default 0,

foreign key(索书号)references 图书信息(索书号)

)

insert into 单本图书信息(条码号, 索书号, 馆藏地, 书刊状态) values

('t987628', 'b97894', '三楼A8', '借出'),

('t594805', 'b97894', '二楼C7', '可借'),

('t984910', 'b89490', '五楼A2', '借出'),

('t940566', 'b12987', '负一楼D3', '借出')

create table 借阅信息(

借阅号 char(6) primary key,

借阅时间 date,

归还时间 date,

图书条码号 char(7),

借阅人证件号 char(12),

foreign key(图书条码号) references 单本图书信息(条码号),

foreign key(借阅人证件号) references 读者信息(证件号)

)

create table 评论信息(

评论号 char(8) primary key,

评分 numeric(2, 1),

内容 varchar(200),

评论时间 date,

评论者id char(12),

索书号 char(15),

foreign key(索书号)references 图书信息(索书号),

foreign key(评论者id)references 读者信息(证件号)

)

insert into 评论信息 values

('p12391', 8.9, '很有趣', '2015-06-24', '541707010185', 'b97894'),

('p98523', 7.8, '受益颇多', '2016-05-22', '541307010489', 'b89490'),

('p94606', 6.8, '完全看不懂orz', '2017-05-02', '541607120165', 'b12987')

create table 主题词信息(

ID char(8) primary key,

类别 char(15),

索书号 char(15),

foreign key(索书号)references 图书信息(索书号)

)

insert into 主题词信息 values

('z64400', '计算机', 'b12987'),

('z95410', '物理', 'b16546'),

('z98500', '考研', 'b89490'),

('z64165', '推理悬疑', 'b97894'),

('z69850', '仙侠', 'b56400')

use db

go

create trigger trigger1

on 借阅信息

after insert

as

begin

update 读者信息 --更改读者累计借书量

set 累计借书 = 累计借书 + 1

from 读者信息, inserted

where 读者信息.证件号 = inserted.借阅人证件号

update 单本图书信息 --更改图书状态

set 单本图书信息.书刊状态 = '借出'

from inserted, 单本图书信息

where inserted.图书条码号 = 单本图书信息.条码号

update 单本图书信息

set 历史借阅量 = 历史借阅量 + 1 --更改图书历史借阅量

from inserted, 单本图书信息

where inserted.图书条码号 = 单本图书信息.条码号

end

insert into 借阅信息 values

('j13488', '2018-05-01', '2018-08-01', 't987628', '541407010169')

insert into 借阅信息 values

('j14910', '2016-12-11', '2017-01-25', 't984910', '541607120165')

insert into 借阅信息 values

('j97890', '2018-05-14', '2018-06-14', 't940566', '541607120165')

go

create view view_1(图书条码, 借阅者姓名, 编号, 借阅时间, 应还时间)

as

select 图书条码号, 姓名, 证件号, 借阅时间, 归还时间

from 借阅信息, 读者信息

where 借阅信息.借阅人证件号 = 读者信息.证件号 and 归还时间 > getdate()

go

create view view_2(图书条码, 历史总借阅量)

as

select 条码号, 历史借阅量

from 单本图书信息, 图书信息

where 单本图书信息.索书号 = 图书信息.索书号 and 书名 = '幻夜'

go

create view view_3(类别, 图书条码, 历史总借阅量)

as

select 类别, 条码号, 历史借阅量

from 单本图书信息, 图书信息, 主题词信息

where 主题词信息.索书号 = 图书信息.索书号 and 图书信息.索书号 = 单本图书信息.索书号 and 类别 = '考研'

go

create view view_4(读者编号, 条码, 图书名称, 应还日期)

as

select 借阅人证件号, 图书条码号, 书名, 归还时间

from 单本图书信息, 图书信息, 借阅信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号

and 归还时间 > getdate() and 借阅人证件号 = '541607120165'

go

create view view_5(读者编号, 图书条码, 图书名称, 借阅日期, 归还日期)

as

select 借阅人证件号, 图书条码号, 书名, 借阅时间, 归还时间

from 单本图书信息, 图书信息, 借阅信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 图书信息.索书号

and 借阅人证件号 = '541607120165'

go

create view view_6(读者编号, 图书名称, 评论时间, 评论内容)

as

select 评论者id, 书名, 评论时间, 内容

from 借阅信息, 单本图书信息, 评论信息, 图书信息

where 借阅信息.图书条码号 = 单本图书信息.条码号 and 单本图书信息.索书号 = 评论信息.索书号

and 评论信息.索书号 = 图书信息.索书号 and 评论者id = '541607120165'

go

create view view_7(出版社名称, 图书名称, 出版时间)

as

select top 100 percent 出版社信息.出版社, 书名, 出版时间

from 出版社信息, 图书信息

where 出版社信息.出版社 = 图书信息.出版社

order by 出版时间 asc

--执行

select * from view_1

select * from view_2

select * from view_3

select * from view_4

select * from view_5

select * from view_6

select * from view_7 order by 出版时间 asc

(5)数据库归还图书表扩展阅读:

数据库模型:

对象模型

层次模型(轻量级数据访问协议)

网状模型(大型数据储存)

关系模型

面向对象模型

半结构化模型

平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)

架构

数据库的架构可以大致区分为三个概括层次:内层、概念层和外层。

内层:最接近实际存储体,亦即有关数据的实际存储方式。

外层:最接近用户,即有关个别用户观看数据的方式。

概念层:介于两者之间的间接层。

数据库索引

主条目:数据库索引

数据索引的观念由来已久,像是一本书前面几页都有目录,目录也算是索引的一种,只是它的分类较广,例如车牌、身份证字号、条码等,都是一个索引的号码,当我们看到号码时,可以从号码中看出其中的端倪,若是要找的人、车或物品,也只要提供相关的号码,即可迅速查到正确的人事物。

另外,索引跟字段有着相应的关系,索引即是由字段而来,其中字段有所谓的关键字段(Key Field),该字段具有唯一性,即其值不可重复,且不可为"空值(null)"。

例如:在合并数据时,索引便是扮演欲附加字段数据之指向性用途的角色。故此索引为不可重复性且不可为空。

数据库操作:事务

主条目:数据库事务

事务(transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

事务的并发性是指多个事务的并行操作轮流交叉运行,事务的并发可能会访问和存储不正确的数据,破坏交易的隔离性和数据库的一致性。

网状数据模型的数据结构 网状模型 满足下面两个条件的基本层次联系的集合为网状模型。 1. 允许一个以上的结点无双亲; 2. 一个结点可以有多于一个的双亲。

参考资料来源:网络——数据库

㈥ 请问一下在数据库中借书表与还书表之间是什么关系

借书表(属性:name[书名],state[借出,未借出],bcount[借出数量],tcount[总数量]...)
每次借出bcount+1
还书bcount-1

㈦ 关于数据库的几个问题:

以上表都创建在test数据库中,并自己构造测试数据。
create database test
on
(name=test_Data,
filename='D:\testData.mdf',
size=10,
maxsize=50,
filegrowth=5)
log on
(name=test_Log,
filename='D:\testLog.ldf',
size=2,
maxsize=10,
filegrowth=5)

create table book
( bno char(10) primary key,
bname varchar(50) not null,
author varchar(30) null,
publish varchar(50) null,
price float null)

create table reader
( rno char(10) primary key,
rname varchar(8) not null,
rxb char(2) not null,
tel char(8) null,
dept varchar(30) null)

create table borrow
( rno char(10) constraint reader_Fore foreign key references reader(rno),
bno char(10) constraint book_Fore foreign key references book(bno),
bdate datetime not null,
rdate datetime null)
查询全体图书的信息,其中单价8折显示,并设置该列的别名为‘打折价’;
Select * proce*0.8 as '打折价' from book
查询姓名的第二个字符是‘R’并且只有两个字符的读者的读者号及姓名;
Select rno,rname from reader where rname like ‘_R’
查询有归还日期的借阅信息;
select * from borrow
where rdate IN(SELECT DISTINCT rdate FROM borrow)
查询机械工业出版社图书的平均价、最高价、最低价;
select avg(price),max(price),min(price)
where pubilsh='机械工业出版社'
查询借阅图书数大于等于3本的读者号、总本数,并按借阅本数数值从大到小排序;
select rno,count(*) as borrow_num from borrow
group by rno having (count(*)>=3)
ORDER BY count(*) DESC
查询借阅了机械工业出版社出版,并且书名中包含‘数据库’三个字的图书的读者,并显示读者号,姓名,书名,出版社,借出日期,归还日期;
SELECT borrow.rno,rname,bname,book.publish,bdate,rdate
FROM borrow,book,reader
WHERE borrow.bno=book.bno AND reader.rno=borrow.rno AND publish = '机械工业出版社' AND bname LIKE '数据库%'
查询办公电话为‘88320701’的所有读者的借阅情况,要求包括借阅了图书的读者和没有借阅的读者,显示他们的读者号,姓名,书号及借阅日期;
select rno,rname,bno,bdate from reader,borrow
where tel='88320701'
查询从未被借阅过的图书;
select bno from book,borrow
where bno not in(SELECT DISTINCT bno FROM borrow)
把图书表中机械工业出版社图书的单价提高20%;
update book
set price=1.2*price
where pubilsh='机械工业出版社'
为读者表创建唯一索引,姓名以降序排列。
create unique index name_down on reader(rname desc)
创建视图v1,要求有书名、单价。
create view v1(bname,price)
as select bname,price
from book
现需把图书表的查询权限授权给所有用户。
grant select on book to public
那个表的数据你应该会输入了吧

㈧ 三个sql 数据库表 图书表,图书类型表,借阅表之间的关联问题

SELECT BookType.type_id, BookType.type_name, Count(Book.book_name) AS 馆藏总量
FROM BookType INNER JOIN Book ON BookType.type_id = Book.type_id
GROUP BY BookType.type_id, BookType.type_name;
SELECT BookType.type_id, BookType.type_name, Count(Book.book_name) AS 当前借阅数量
FROM BookType INNER JOIN (Book INNER JOIN BorrowBooks ON Book.book_id = BorrowBooks.book_id) ON BookType.type_id = Book.type_id
GROUP BY BookType.type_id, BookType.type_name, BorrowBooks.IsReturned
HAVING (((BorrowBooks.IsReturned)=False));
SELECT BookType.type_id, BookType.type_name, Count(Book.book_name) AS 合计借出数量
FROM BookType INNER JOIN (Book INNER JOIN BorrowBooks ON Book.book_id = BorrowBooks.book_id) ON BookType.type_id = Book.type_id
GROUP BY BookType.type_id, BookType.type_name, BorrowBooks.IsReturned
HAVING (((BorrowBooks.IsReturned)=True));

㈨ 图书管理系统中还书部分如何通过数据库实现

借书应该有一个单独的表,然后设置一个单独的字段来识别是否归还。
还书时将对应该书、该借书人的那条记录的归还字段设为已归还(true或者1字段类型自己定义)
这样既做到了还书功能,又能保存读者的借阅记录。
我的图书管理系统借阅管理就是这么做的。