㈠ 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欄位類型自己定義)
這樣既做到了還書功能,又能保存讀者的借閱記錄。
我的圖書管理系統借閱管理就是這么做的。