Bài
Tập Lớn: Hệ Quản Trị CSDL
Đề Tài: Quản Lý Thư Viện
Trường: Đại học Thành Đô
Lớp: Đại Học Tin k6
Sinh viên thực hiện: Lê Văn
Quyết.
Phạm
Thị Thu Trang.
Vũ
Ngọc Duẩn.
Nguyễn
Sĩ Giang.
LỜI NÓI ĐẦU
Cùng với sự phát triển của xã hội hiện nay, các vấn đề liên quan đến các công việc quản lý ngày càng trở nên khó khăn và phức tạp. Các lĩnh vực cần quản lý ngày càng nhiều hơn và khó kiểm soát hơn. Công việc quản lý đóng một vai trò vô cùng quan trọng không chỉ trong các cơ quan, công ty, xí nghiệp mà còn trong cả nhà trường, bệnh viện hay chính trong cuộc sống hằng ngày của mỗi người.
Bằng việc áp dụng các thành tựu khoa học kĩ thuật, các công cụ, ứng dụng hỗ trợ cho việc quản lý các công việc ra đời và phát triển mạnh mẽ giúp giảm bớt gánh nặng quản lý. Hiện nay, thay vì phải làm công việc quản lý với những tệp hồ sơ dày cộm và những tủ đựng hồ sơ chiếm quá nhiều diện tích mà đôi lúc khiến ta gặp khó khăn trong việc tìm kiếm những thông tin hay dữ liệu, ta đã có thể thay thế nó bằng các phầm mềm quản lý. Sử dụng các phần mềm quản lý giúp ta có thể thoát khỏi những bất tiện, những hạn chế của những tệp hồ sơ, tiết kiệm được nhiều thời gian hơn.
Các phần mềm hỗ trợ các hoạt động quản lý hiện nay đã phát triển đa dạng ở các lĩnh vực khác nhau dựa theo nhu cầu của người dùng. Không chỉ dừng lại ở việc phát triển các phần mềm quản lý cho các cơ quan, công ty, xí nghiệp lớn mà đến cả các công việc quản lý trong các cửa hàng nhỏ lẻ, các bãi đỗ xe, vv… cũng được quan tâm không ít bởi nó ảnh hưởng đến cuộc sống hàng ngày của chính con người.
Cũng như vậy, công việc quản lý trong thư viện cũng là một vấn đề cần quan tâm. Ở bất cứ thời kì nào, hay xã hội nào thì thư viện cũng là tượng trưng cho kho tàng tri thức của loài người, nơi lưu giữ những kiến thức được cóp nhặt từ bao thế hệ, bởi bao con người trên khắp thế giới. Quy mô của thư viện càng lớn thì nó càng chứng tỏ sự phát triển của con người nơi đó. Một thư viện lớn có thể có hàng vạn đến hàng triệu cuốn sách với các nội dung từ các thể loại khác nhau. Các thư viện ngày càng phát triển hơn, với sự đa dạng về nội dung và số lượng. Điều này đã khiến cho công việc quản lý trong thư viện trở nên khó khăn hơn nhiều. Vì vậy, việc phát triển một phần mềm giúp quản lý thư viện một cách hệ thống sẽ giúp giải quyết các vấn đề này. Phần mềm được phát triển càng chi tiết, càng cụ thể và càng gần với các vấn đề thực tế thì việc quản lý càng trở nên dễ dàng hơn.
Việc thực hiện xây dựng một phần mềm quản lý thư viện một cách đầy đủ và chi tiết đòi hỏi phải có một đội ngũ nhân viên có đủ trình độ phân tích thiết kế hệ thống để có thể tạo ra một hệ thống quản lý không bị thiếu sót, gắn với các vấn đề thực tế từ đó xây dựng nên một phần mềm hoàn chỉnh.
Do sự hạn chế về kinh nghiệm cũng như khả năng thực tế nên đề tài nghiên cứu lần này của chúng em có thể còn tồn tại những thiếu sót. Chúng em rất mong nhận được những lời nhận xét và đóng góp của thầy giáo và các bạn để có thể rút ra được những kinh nghiệm cần thiết tránh những sai sót trong tương lai.
Phần 1: Giới
thiệu qua về phần mềm SQL Server
1. SQL
là gì?
SQL
là Structured Query Language – Ngôn ngữ Truy vấn có Cấu trúc
SQL
cho phép bạn truy xuất một cơ sở dữ liệu
SQL
là một ngữ theo chuẩn ANSI
SQL
có thể thực hiện các truy vấn đến một cơ sở dữ liệu
SQL
có thể truy tìm dữ liệu từ một cơ sở dữ liệu
SQL
có thể chèn các mẩu tin mới vào trong một cơ sở dữ liệu
SQL
có thể xóa các mẩu tin trong một cơ sở dữ liệu
SQL
có thể cập nhật các mẩu tin trong một cơ sở dữ liệu
SQL
rất dễ học
2. Tìm
hiểu về SQL
SQL là một
chuẩn ANSI (American National Standards Institute - Viện Tiêu chuẩn Quốc gia
Mỹ) cho các hệ thống truy xuất cơ sở dữ liệu. Các phát biểu SQL dùng để truy
tìm và cập nhật dữ liệu trong một cơ sở dữ liệu.
SQL làm việc
với các trình quản lý cơ sở dữ liệu như Access, DB2, Informix, Microsoft SQL
Server, Oracle, Sybase, và nhiều trình khác (đáng tiếc là đa số trong chúng có
các phần mở rộng ngôn ngữ SQL riêng).
- Các
bảng cơ sở dữ liệu:
Cơ sở dữ liệu
chứa các đối tượng gọi là các Bảng (Tables).
Các Mẩu tin
(Records) lưu trong các bảng này. Các bảng được gọi theo tên bảng (như
"Persons", "Orders", "Suppliers"). Các bảng chứa
các Cột (Columns) và các Dòng (Rows) dữ liệu. Dòng chứa các mẩu tin (như mẩu
tin về một người). Cột chứa dữ liệu (như First Name, Last Name, Address, và
City).
- Các
truy vấn SQL:
Với SQL, chúng
ta có thể truy vấn một cơ sở dữ liệu và nhận được một kết quả trả về với dạng
bảng.
- Thao
tác dữ liệu SQL:
SQL là một cú
pháp để thực hiện các truy vấn. Nhưng ngôn ngữ SQL cũng chứa các cú pháp cập
nhật các mẩu tin (record), chèn các mẩu tin mới và xóa các mẩu tin đang tồn
tại.
Các lệnh truy
vấn và cập nhật này thuộc dạng Ngôn ngữ Thao tác Dữ liệu (Data Manipulation
Language - DML) một phần của SQL:
SELECT
– trích dữ liệu từ một cơ sở dữ liệu
UPDATE
– cập nhật dữ liệu trong một cơ sở dữ liệu
DELETE
– xóa dữ liệu từ một cơ sở dữ liệu
INSERT
– chèn dữ liệu mới vào trong một cơ sở dữ liệu
- Định
nghĩa dữ liệu SQL:
Ngôn ngữ Định
nghĩa Dữ liệu (Data Definition Language - DDL) một phần của SQL, cho phép tạo
hay xóa các bảng cơ sở dữ liệu. Chúng ta cũng có thể định nghĩa các chỉ mục
(các khóa - key), chỉ định liên kết giữa các bảng, và ràng buột giữa các bảng
cơ sở dữ liệu.
CREATE
TABLE – tạo một bảng cơ sở dữ liệu mới
ALTER
TABLE – thay đổi (alters) một bảng cơ sở dữ liệu
DROP
TABLE – xóa một bảng cơ sở dữ liệu
CREATE
INDEX – tạo một chỉ mục (khóa tìm kiếm)
DROP
INDEX – xoá một chỉ mục
Phần 2: Đề tài
nghiên cứu(Quản lý thư viện)
--Tạo cơ sở dữ liệu QLTHUVIEN2016
Create database QLTHUVIEN2016
--Sử dụng cơ sở dữ liệu
Use QLTHUVIEN2016
I/Tạo các bảng
1.Tạo bảng nhân viên
Create table NHANVIEN
(
MaNV char(10) not null primary key,
HoTenNV nvarchar(30),
GioiTinhNV bit default 1,
NgaySinhNV datetime,
DienThoaiNV char(11) unique,
DiaChiNV nvarchar(150),
EmailNV char(100),
NgayVaoLam datetime,
MatKhau char(30)
)
select * from nhanvien
--2.Tạo bảng độc giả
Create table DOCGIA
(
MaDG bigint identity(1,1)not null primary key,
HoTenDG nvarchar(30),
EmailDG char(50),
GioiTinhDG bit default 1,
NgaySinhDG datetime,
DiaChiDG nvarchar(150),
DienThoaiDG char(11)unique,
NgayLamThe datetime,
NgayHetHan datetime
)
select * from DOCGIA
--3.Tạo bảng tác giả
Create table TACGIA
(
MaTG bigint identity(1,1)not null primary key,
HoTenTG nvarchar(30),
DiaChiTG nvarchar(150),
DienThoaiTG char(11)
)
select * from TACGIA
--4.Tạo bảng nhà xuất bản
Create table NHAXUATBAN
(
MaNXB bigint identity(1,1)not null primary key,
TenNXB nvarchar(150),
DiaChiNXB nvarchar(150),
DienThoaiNXB char(11),
)
select * from NHAXUATBAN
--5.Tạo bảng thể loại
Create table THELOAI
(
MaTL char(10) not null primary key,
TenTL nvarchar(150)
)
select * from THELOAI
--6.Tạo bảng ví trị sách
Create table VITRISACH
(
MaVT char(10) not null primary key,
Tang nvarchar(30),
Ke nvarchar(30),
Ngan nvarchar(30)
)
select * from VITRISACH
--7.Tạo bảng sách
Create table SACH
(
MaSach bigint identity(1,1)not null primary key,
TenSach nvarchar(150),
KhoSach nvarchar(30),
NoiDungTT nvarchar(300),
NamXB int,
LanXB int,
SoTrang int,
Gia bigint,
SoLuong int,
NgayNhap datetime,
MaNXB bigint not null references NHAXUATBAN(MaNXB) on update cascade on delete cascade,
MaTG bigint not null references TACGIA(MaTG) on update cascade on delete cascade,
MaTL char(10)not null references THELOAI(MaTL) on update cascade on delete cascade,
MaVT char(10)not null references VITRISACH(MaVT) on update cascade on delete cascade,
TinhTrang nvarchar(150) default N'Còn sách'
)
select * from SACH
--8.Tạo bảng phiếu mượn
Create table PHIEUMUON
(
MaPhieu bigint identity(1,1)not null primary key,
MaDG bigint not null references DOCGIA(MaDG) on update cascade on delete cascade,
NgayMuon datetime,
MaNV char(10) not null references NHANVIEN(MaNV) on update cascade on delete cascade
)
select * from PHIEUMUON
--9.Tạo bảng chi tiết phiếu mượn
Create table CT_PHIEUMUON
(
MaPhieu bigint not null references PHIEUMUON(MaPhieu) on update cascade on delete cascade,
MaSach bigint not null references SACH(MaSach) on update cascade on delete cascade,
HanTra datetime,
Primary key(MaPhieu,MaSach)
)
select * from CT_PHIEUMUON
--10.Tạo bảng trả sách
Create table TRASACH
(
MaPhieu bigint not null references PHIEUMUON(MaPhieu) on update cascade on delete cascade,
MaSach bigint not null references SACH(MaSach) on update cascade on delete cascade,
MaNV char(50) not null references NHANVIEN(MaNV),
NgayTra datetime,
PhatHuHong bigint default 0,
PhatQuaHan bigint default 0,
Primary key(MaPhieu,MaSach)
)
select * from TRASACH
II/Nhập Dữ Liệu
--1.NHAP DU LIEU CHO BANG NHÂN VIÊN
Insert into NHANVIEN values('NV001',' Nguyen Hai Yen','1',' 5/7/1986','09313234321','HaNoi','yen@gmail.com','2/4/2014','a01')
Insert into NHANVIEN values('NV001','Nguyen Minh Du','0','6/3/1987','04238927398','NamDinh','du@gmail.com','2/10/2013','b02')
Insert into NHANVIEN values('NV003','Tran Van Toi','0','11/6/1989','01239498323','HaiPhong','toi @gmail.com','4/5/2015','c03')
Insert into NHANVIEN values('NV004','Le Van Chau','0',' 10/10/1987','01834853334','HaNoi','chau@gmail.com','2/6/2014','d04')
Insert into NHANVIEN values('NV005','Bui Bich Giao','1',' 9/2/1988','04628596732','HaNam','giao @gmail.com','9/12/2014','e05')
Insert into NHANVIEN values('NV006','Pham Tieu Pham','0',' 1/3/1987','09732584201','HaNoi','pham@gmail.com','1/1/2012','a02')
Insert into NHANVIEN values('NV007','Tang Thu Thu','0',' 5/7/1990','07629641642','HaNoi','thu@gmail.com','9/5/2014','b03')
Insert into NHANVIEN values('NV008','Trieu Tu Long','0',' 4/5/1984','03275839210','HaNam','long@gmail.com','9/3/2011','c04')
Insert into NHANVIEN values('NV009','Ly Mac Sau','1',' 5/4/1987','09352810948','HaNoi','sau@gmail.com','3/7/2014','d05')
Insert into NHANVIEN values('NV010','Ly Thanh Chung','0',' 7/9/1987','09532343435','HaNoi','chung@gmail.com','2/2/2016','e06')
go
select *from NHANVIEN
--2.NHAP DU LIEU CHO BANG ĐỘC GIẢ
Insert into DOCGIA values('0011','Truong Van Dinh','dinh@gmail.com','0','2/1/1995','HaNoi','02328947384','10/10/2015','10/10/2016')
Insert into DOCGIA values('0012','Dinh Van Hai','hai@gmail.com','0','5/2/1995','HaNoi','04326947384','2/10/2015','2/10/2016')
Insert into DOCGIA values('0013','Luong xuan Hanh','hanh@gmail.com','1','7/2/1994','HaNoi','04326947384','2/10/2015','2/10/2016')
Insert into DOCGIA values('0014','Le Hong Son','son@gmail.com','0','1/2/1995','HaNoi','02328947384','10/10/2015','10/10/2016')
Insert into DOCGIA values('0015','Hoang Ngoc Hoa','hoa@gmail.com','0','9/1/1995','HaNoi','04326947384','2/10/2015','2/10/2016')
Insert into DOCGIA values('0016','Tran Van Ha','ha@gmail.com','0','8/9/1992','HaNoi','04326947384','2/10/2015','2/10/2016')
Insert into DOCGIA values('0017','Hoang Cong Toan','toan@gmail.com','0','6/7/1991','HaNoi','02328947384','10/10/2015','10/10/2016')
Insert into DOCGIA values('0018','Tran Van Toan','toan01@gmail.com','0','2/9/1994','HaNoi','04326947384','2/10/2015','2/10/2016')
Insert into DOCGIA values('0019','Le Dinh Ba','ba@gmail.com','0','2/2/1992','HaNoi','04326947384','2/10/2015','2/10/2016')
Insert into DOCGIA values('0020','Vu Ngoc Hai','hai01@gmail.com','1','1/10/1996','HaNoi','02328947384','10/10/2015','10/10/2016')
go
select *from DOCGIA
--3.NHAP DU LIEU CHO BANG TÁC GIẢ
Insert into TACGIA values('0100','Truong Van Ba','HaNoi','04549859308')
Insert into TACGIA values('0101','Thu Hong','HaNoi','32435576852')
Insert into TACGIA values('0102','Hoang Ha','HaNam','09876543123')
Insert into TACGIA values('0103','Chu Van Thong','TPHCM','01234567876')
Insert into TACGIA values('0104','Pham Dinh Chieu','NamDinh','04549859308')
Insert into TACGIA values('0105','Tha Thu','HaNoi','04532855643')
Insert into TACGIA values('0106','Cuong van Thai','HaiPhong','04532855643')
Insert into TACGIA values('0107','Hoang Tung','ThaiBinh','04532855643')
Insert into TACGIA values('0108','Le Duc Tho','HaNoi','04549859308')
Insert into TACGIA values('0109','Dao Van Hai','HaNoi','04532855643')
go
select *from TACGIA
--4.NHAP DU LIEU CHO BANG NHÀ XUẤT BẢN
Insert into NHAXUATBAN values('111','DH Quoc gia HN','HaNoi','02932442422')
Insert into NHAXUATBAN values('112','DH Bach Khoa','HaNoi','04332442478')
Insert into NHAXUATBAN values('113','Hoa Hong','HaNoi','02932442422')
Insert into NHAXUATBAN values('114','NXB Giao duc va dao tao','HaNoi','04332442478')
Insert into NHAXUATBAN values('115','NXB kim Chi','HaNoi','02932442422')
go
select *from NHAXUATBAN
--5.NHAP DU LIEU CHO BANG THỂ LOẠI
Insert into THELOAI values('TL001','Van Hoc')
Insert into THELOAI values('TL002','Toan Hoc')
Insert into THELOAI values('TL003','Cong Nghe')
Insert into THELOAI values('TL004','Cuoc Song')
Insert into THELOAI values('TL005','Tap Chi')
Insert into THELOAI values('TL006','Lich Su')
Insert into THELOAI values('TL007','Khoa Hoc')
Insert into THELOAI values('TL008','Ngon Ngu')
Insert into THELOAI values('TL009','Truyen Cuoi')
Insert into THELOAI values('TL010','Danh Ngon')
go
select *from THELOAI
--6.NHAP DU LIEU CHO BANG VỊ TRÍ
Insert into VITRI values('VT01','T1','Ke01', 'Ngan01')
Insert into VITRI values('VT02','T2','Ke02', 'Ngan02')
Insert into VITRI values('VT03','T3','Ke03', 'Ngan03')
Insert into VITRI values('VT04','T4','Ke04', 'Ngan04')
Insert into VITRI values('VT05','T5','Ke05', 'Ngan05')
Insert into VITRI values('VT06','T6','Ke06', 'Ngan06')
Insert into VITRI values('VT07','T7','Ke07', 'Ngan07')
Insert into VITRI values('VT08','T8','Ke08', 'Ngan08')
Insert into VITRI values('VT09','T9','Ke09', 'Ngan09')
Insert into VITRI values('VT10','T10','Ke10', 'Ngan10')
go
select *from VITRI
--7.NHAP DU LIEU CHO BANG SÁCH
Insert into SACH values('111', 'A','K01','1982','5','94','40000','324','10/9/2013','111','0101','TL001','VT01', 'Còn Sách')
Insert into SACH values('112', 'B','K01','1980','2','194','32000','100','10/9/2013','111','0102','TL002','VT03', 'Còn Sách')
Insert into SACH values('113', 'C','K02','1999','1','34','43200','214','10/9/2013','112','0103','TL003','VT02', 'Còn Sách')
Insert into SACH values('114', 'D','K03','1962','5','67','24000','74','10/9/2013','115','0104','TL004','VT04', 'Còn Sách')
Insert into SACH values('115', 'E','K04','1982','7','100','40000','300','10/9/2013','112','0102','TL006','VT05', 'Còn Sách')
Insert into SACH values('116', 'F','K03','2000','3','300','70000','34','10/9/2013','111','0103','TL005','VT06', 'Còn Sách')
Insert into SACH values('117', 'G','K02','2014','2','29','40000','24','10/9/2013','113','0102','TL007','VT07', 'Còn Sách')
Insert into SACH values('118', 'H','K04','2015','2','59','40000','41','10/9/2013','113','0101','TL008','VT08', 'Còn Sách')
Insert into SACH values('119', 'I','K06','1992','2','59','40000','400','10/9/2013','114','0101','TL009','VT09', 'Còn Sách')
Insert into SACH values('120', 'J','K07','1997','2','49','40000','34','10/9/2013','113','0102','TL010','VT03', 'Còn Sách')
Insert into SACH values('121', 'L','K05','2011','4','94','40000','24','10/9/2013','114','0104','TL001','VT02', 'Còn Sách')
Insert into SACH values('122', 'Q','K03','2000','9','94','40000','54','10/9/2013','113','0105','TL002','VT04', 'Còn Sách')
Insert into SACH values('123', 'W','K02','1996','7','100','40000','14','10/9/2013','115','0101','TL002','VT06', 'Còn Sách')
Insert into SACH values('124', 'E','K06','1997','4','100','40000','44','10/9/2013','111','0102','TL003','VT01', 'Còn Sách')
Insert into SACH values('125', 'R','K07','1996','6','67','35000','124','10/9/2013','111','0102','TL004','VT01', 'Còn Sách')
Insert into SACH values('126', 'T','K05','2003','3','34','40000','124','10/9/2013','111','0108','TL003','VT01', 'Còn Sách')
Insert into SACH values('127', 'Y','K03','2005','5','65','40000','124','10/9/2013','112','0101','TL002','VT02', 'Còn Sách')
Insert into SACH values('128', 'U','K06','1999','3','32','40000','124','10/9/2013','112','0109','TL002','VT03', 'Còn Sách')
Insert into SACH values('129', 'I','K06','2012','2','75','40000','24','10/9/2013','112','0101','TL006','VT02', 'Còn Sách')
Insert into SACH values('130', 'O','K04','2015','1','23','21000','50','10/9/2013','115','0102','TL007','VT03', 'Còn Sách')
Insert into SACH values('131', 'P','K01','2014','2','97','40000','34','10/9/2013','115','0107','TL007','VT06', 'Còn Sách')
Insert into SACH values('132','AB','K01','1997','6','23','40000','47','10/9/2013','111','0107','TL009','VT07', 'Còn Sách')
Insert into SACH values('133','AD','K01','1982','3','56','40000','80','10/9/2013','113','0109','TL010','VT07', 'Còn Sách')
Insert into SACH values('134','AF','K02','2007','2','75','40000','10','10/9/2013','113','0101','TL001','VT08', 'Còn Sách')
go
select *from SACH
--8.NHAP DU LIEU CHO BANG PHIẾU MƯỢN
Insert into PHIEUMUON values('1','0011','6/10/2015','NV001')
Insert into PHIEUMUON values('2','0012','6/6/2016','NV002')
Insert into PHIEUMUON values('3','0013','6/2/2016','NV003')
Insert into PHIEUMUON values('4','0014','6/1/2016','NV004')
Insert into PHIEUMUON values('5','0015','6/4/2016','NV005')
Insert into PHIEUMUON values('6','0016','6/2/2016','NV006')
Insert into PHIEUMUON values('7','0017','4/10/2015','NV007')
Insert into PHIEUMUON values('8','0019','5/7/2016','NV008')
Insert into PHIEUMUON values('9','0020','2/2/2016','NV009')
Insert into PHIEUMUON values('11','0011','1/1/2016','NV001')
Insert into PHIEUMUON values('12','0011','6/10/2016','NV001')
Insert into PHIEUMUON values('13','0012','6/9/2016','NV002')
Insert into PHIEUMUON values('14','0013','3/2/2016','NV003')
Insert into PHIEUMUON values('15','0014','2/6/2016','NV004')
Insert into PHIEUMUON values('16','0011','4/4/2016','NV005')
go
select *from PHIEUMUON
--9.NHAP DU LIEU CHO BANG CHI TIẾT PHIẾU
MƯỢN
Insert into CT_PHIEUMUON values('1','111','7/10/2015')
Insert into CT_PHIEUMUON values('2','112','7/6/2016')
Insert into CT_PHIEUMUON values('3','113','7/3/2016')
Insert into CT_PHIEUMUON values('4','114','7/2/2016')
Insert into CT_PHIEUMUON values('5','115','7/11/2016')
Insert into CT_PHIEUMUON values('6','116','7/11/2015')
Insert into CT_PHIEUMUON values('7','117','5/11/2015')
Insert into CT_PHIEUMUON values('8','118','6/11/2016')
Insert into CT_PHIEUMUON values('9','119','3/11/2016')
Insert into CT_PHIEUMUON values('11','112','2/11/2016')
Insert into CT_PHIEUMUON values('12','119','7/11/2016')
Insert into CT_PHIEUMUON values('13','120','7/11/2016')
Insert into CT_PHIEUMUON values('14','112','4/11/2016')
Insert into CT_PHIEUMUON values('15','112','3/11/2016')
Insert into CT_PHIEUMUON values('16','116','5/11/2016')
go
select *from CT_PHIEUMUON
--10.NHAP DU LIEU CHO BANG TRẢ SÁCH
Insert into TRASACH values('1','111','NV001', '7/10/2015','0','0')
Insert into TRASACH values('2','112','NV002', '7/10/2016','0','1')
Insert into TRASACH values('3','113','NV003', '7/3/2016','0','0')
Insert into TRASACH values('4','114','NV004', '7/2/2016','0','0')
Insert into TRASACH values('5','115','NV005', '7/10/2016','0','0')
Insert into TRASACH values('6','116','NV006', '7/15/2015','0','1')
Insert into TRASACH values('7','117','NV007', '5/10/2015','0','0')
Insert into TRASACH values('8','118','NV008', '6/10/2016','0','0')
Insert into TRASACH values('9','119','NV009', '3/10/2016','0','0')
Insert into TRASACH values('11','112','NV001', '2/10/2016','0','0')
Insert into TRASACH values('12','129','NV001', '7/10/2016','0','0')
Insert into TRASACH values('13','120','NV002', '7/10/2016','0','0')
Insert into TRASACH values('14','112','NV003', '4/10/2016','0','0')
Insert into TRASACH values('15','112','NV004', '3/10/2016','0','0')
Insert into TRASACH values('16','116','NV005', '5/11/2016','0','0')
go
select *from TRASACH
III/ Tạo các khung nhìn-VIEW
--Tạo view để xem các thông tin về
nhân viên
Create view View_NHANVIEN
As
Select * from NHANVIEN
IV/ Tạo các trigger
--1.Tạo các trigger đối với bảng NHANVIEN
--1.1.Thêm mới dữ liệu
--Tạo trigger kiểm tra thông tin của bảng
nhân viên xem ngày sinh,ngày vào làm có hợp lệ hay không.
Create trigger tg_NHANVIEN_Them
On NHANVIEN
For insert
As
Declare @NgaySinhNV datetime,@NgayVaoLam datetime,@tuoi int
Select @NgaySinhNV=NgaySinhNV,@NgayVaoLam=NgayVaoLam
From inserted
set @tuoi=year(@NgayVaoLam)-year(@NgaySinhNV)
If @NgaySinhNV>getdate()
Begin
Rollback tran
Declare @Loi2 nvarchar(100)
Set @Loi2=N'Ngày sinh của nhân viên phải
nhỏ hơn hoặc bằng ngày '+cast(day(getdate()) as char(2))+'/'+cast(month(getdate()) as char(2))+'/'+cast(year(getdate()) as char(4))
Raiserror(@Loi2,16,1)
return
End
If @NgayVaoLam>getdate()
Begin
Rollback tran
Declare @Loi3 nvarchar(100)
Set @Loi3=N'Ngày vào làm của nhân viên
phải nhỏ hơn hoặc bằng ngày '+cast(day(getdate()) as char(2))+'/'+cast(month(getdate()) as char(2))+'/'+cast(year(getdate()) as char(4))
Raiserror(@Loi3,16,1)
return
End
If @NgayVaoLam<@NgaySinhNV
Begin
Rollback tran
Declare @Loi4 nvarchar(100)
Set @Loi4=N'Ngày vào làm của nhân viên
phải lớn hơn ngày sinh.'
Raiserror(@Loi4,16,1)
return
End
If @tuoi<18
Begin
Rollback tran
Declare @Loi1 nvarchar(100)
Set @Loi1=N'Đến thời điểm năm '+cast(year(@NgayVaoLam) as char(4))+N' nhân viên này mới có '+cast(@tuoi as char(3))+N'tuổi-Chưa đủ tuổi đi làm!'
Raiserror(@Loi1,16,1)
return
End
--1.2.Sửa dữ liệu
Create trigger tg_NHANVIEN_Sua on NHANVIEN
For update
As
Declare @MaNV char(10),@NgaySinhNV datetime,@NgayVaoLam datetime,@tuoi int,@loi nvarchar(150)
If update(MaNV)
Begin
rollback tran
set @loi=N'Không thể thay đổi mã nhân
viên.'
raiserror (@loi,16,1)
return
End
If update(NgaySinhNV)or update(NgayVaoLam)
Select @MaNV=MaNV from deleted
Select @NgaySinhNV=NgaySinhNV,@NgayVaoLam=NgayVaoLam from NHANVIEN where MaNV=@MaNV
Set @tuoi=year(@NgayVaoLam)-year(@NgaySinhNV)
If @NgaySinhNV>getdate()
Begin
Rollback tran
Declare @Loi2 nvarchar(100)
Set @Loi2=N'Ngày sinh của nhân viên phải
nhỏ hơn hoặc bằng ngày '+cast(day(getdate()) as char(2))+'/'+cast(month(getdate()) as char(2))+'/'+cast(year(getdate()) as char(4))
Raiserror(@Loi2,16,1)
return
End
If @NgayVaoLam>getdate()
Begin
Rollback tran
Declare @Loi3 nvarchar(100)
Set @Loi3=N'Ngày vào làm của nhân viên
phải nhỏ hơn hoặc bằng ngày '+cast(day(getdate()) as char(2))+'/'+cast(month(getdate()) as char(2))+'/'+cast(year(getdate()) as char(4))
Raiserror(@Loi3,16,1)
return
End
If @NgayVaoLam<@NgaySinhNV
Begin
Rollback tran
Declare @Loi4 nvarchar(100)
Set @Loi4=N'Ngày vào làm của nhân viên
phải lớn hơn ngày sinh.'
Raiserror(@Loi4,16,1)
return
End
If @tuoi<18
Begin
Rollback tran
Declare @Loi1 nvarchar(100)
Set @Loi1=N'Đến thời điểm năm '+cast(year(@NgayVaoLam) as char(4))+N' nhân viên này mới có '+cast(@tuoi as char(3))+N'tuổi-Chưa đủ tuổi đi làm!'
Raiserror(@Loi1,16,1)
return
End
--1.3.Xóa dữ liệu
Create trigger tg_NHANVIEN_Xoa on NHANVIEN
For delete
As
Declare @manv char(10)
select @manv=manv from deleted
Delete from PHIEUMUON where manv=@manv
Delete from TRASACH where manv=@manv
--2.Tạo các trigger đối với bảng SACH
--2.1.Kiểm tra việc thêm mới dữ liệu
Create trigger tg_SACH_Them on SACH
For insert
As
Declare @NamXB int,@NgayNhap datetime,@LanXB int,@SoTrang int,@Gia int,@SoLuong int
Select @NamXB=NamXB,@NgayNhap=NgayNhap,@LanXB=LanXB,@SoTrang=SoTrang,@Gia=Gia,@SoLuong=SoLuong
From inserted
If @NamXB>Year(getdate())
Begin
Rollback tran
Declare @Loi2 nvarchar(100)
Set @Loi2=N'Năm xuất bản phải trước hoặc
bằng năm '+cast(year(getdate()) as char(4))
Raiserror(@Loi2,16,1)
return
End
If @LanXB<=0
Begin
Rollback tran
Declare @Loi3 nvarchar(100)
Set @Loi3=N'Lần xuất bản phải lớn hơn
0.'
Raiserror(@Loi3,16,1)
return
End
If @SoTrang<=0
Begin
Rollback tran
Declare @Loi33 nvarchar(100)
Set @Loi33=N'Số trang phải lớn hơn 0.'
Raiserror(@Loi33,16,1)
return
End
If @Gia<=0
Begin
Rollback tran
Declare @Loi5 nvarchar(100)
Set @Loi5=N'Giá sách phải lớn hơn 0.'
Raiserror(@Loi5,16,1)
return
End
If @SoLuong<=0
Begin
Rollback tran
Declare @Loi6 nvarchar(100)
Set @Loi6=N'Số lượng phải lớn hơn 0.'
Raiserror(@Loi5,16,1)
return
End
If @NgayNhap>getdate()
Begin
Rollback tran
Declare @Loi55 nvarchar(100)
Set @Loi55=N'Ngày nhập phải trước hoặc
bằng ngày hiện tại('+cast(day(getdate()) as char(2))+'/'+cast(month(getdate()) as char(2))+'/'+cast(year(getdate()) as char(4))+')'
Raiserror(@Loi55,16,1)
return
End
If year(@NgayNhap)<@NamXB
Begin
Rollback tran
Declare @Loi4 nvarchar(100)
Set @Loi4=N'Năm nhập phải sau hoặc bằng
năm xuất bản('+cast(@NamXB as char(4))+')'
Raiserror(@Loi4,16,1)
return
End
--2.2.Sửa dữ liệu
Create trigger tg_SACH_Sua on SACH
For update
As
Declare @MaSach bigint,@NamXB int,@NgayNhap datetime,@LanXB int,@SoTrang int,@Gia int,@SoLuong int,@loi nvarchar(150)
If update(MaSach)
Begin
rollback tran
set @loi=N'Không thể thay đổi mã
sách.'
raiserror (@loi,16,1)
return
End
If update(NamXB)or update(NgayNhap)or update(LanXB)or update(SoTrang)or update(Gia)or update(SoLuong)
Select @MaSach=MaSach from deleted
Select @NamXB=NamXB,@NgayNhap=NgayNhap,@LanXB=LanXB,@SoTrang=SoTrang,@Gia=Gia,@SoLuong=SoLuong
From SACH where MaSach=@MaSach
If @NamXB>Year(getdate())
Begin
Rollback tran
Declare @Loi2 nvarchar(100)
Set @Loi2=N'Năm xuất bản phải trước hoặc
bằng năm '+cast(year(getdate()) as char(4))
Raiserror(@Loi2,16,1)
return
End
If @LanXB<=0
Begin
Rollback tran
Declare @Loi3 nvarchar(100)
Set @Loi3=N'Lần xuất bản phải lớn hơn
0.'
Raiserror(@Loi3,16,1)
return
End
If @SoTrang<=0
Begin
Rollback tran
Declare @Loi33 nvarchar(100)
Set @Loi33=N'Số trang phải lớn hơn 0.'
Raiserror(@Loi33,16,1)
return
End
If @Gia<=0
Begin
Rollback tran
Declare @Loi5 nvarchar(100)
Set @Loi5=N'Giá sách phải lớn hơn 0.'
Raiserror(@Loi5,16,1)
return
End
If @SoLuong<=0
Begin
Rollback tran
Declare @Loi6 nvarchar(100)
Set @Loi6=N'Số lượng phải lớn hơn 0.'
Raiserror(@Loi5,16,1)
return
End
If @NgayNhap>getdate()
Begin
Rollback tran
Declare @Loi55 nvarchar(100)
Set @Loi55=N'Ngày nhập phải trước hoặc
bằng ngày hiện tại('+cast(day(getdate()) as char(2))+'/'+cast(month(getdate()) as char(2))+'/'+cast(year(getdate()) as char(4))+')'
Raiserror(@Loi55,16,1)
return
End
If year(@NgayNhap)<@NamXB
Begin
Rollback tran
Declare @Loi4 nvarchar(100)
Set @Loi4=N'Năm nhập phải sau hoặc bằng
năm xuất bản('+cast(@NamXB as char(4))+')'
Raiserror(@Loi4,16,1)
return
End
--2.3.Xóa dữ liệu
Create trigger tg_SACH_Xoa on SACH
For delete
As
Declare @MaSACH bigint
select @MaSACH=MaSACH from deleted
--3.Tạo các trigger đối với bảng CT_PHIEUMUON
--3.1.Xây dựng trigger khi thêm mới dữ
liệu vào bảng CT_PhieuMuon với tên tg_CT_PHIEUMUON_Them. Trong đó sẽ kiểm tra
các ràng buộc dữ liệu phải hợp lệ.
-- MaPhieu
phải có trong bảng PHIEUMUON
-- Hạn
trả sách phải sau ngày mượn sách
Create trigger tg_CT_PHIEUMUON_Them
On CT_PHIEUMUON for insert
AS
Declare @KTsoluong int,@NgayMuon datetime,@HanTra datetime,@MaPhieu bigint,@maSach bigint,@KTngay int,@KTmaphieu int,@loi nvarchar(150),@loiSL nvarchar(150)
Set @KTngay=0
Set @KTmaphieu=0
Set @KTsoluong=0
If exists(select maphieu from inserted where maphieu not in(select maphieu from PHIEUMUON))
Set @KTmaphieu=1
Select @MaPhieu=MaPhieu,@HanTra=HanTra,@masach=masach from inserted
select @NgayMuon=NgayMuon from PHIEUMUON pm inner join CT_PHIEUMUON ctpm on pm.MaPhieu=ctpm.MaPhieu where pm.MaPhieu=@MaPhieu
Select @KTsoluong=SoLuong from CT_PHIEUMUON,SACH where CT_PHIEUMUON.MaSach=SACH.MaSach and SACH.MaSach=@MaSach and CT_PHIEUMUON.MaPhieu=@MaPhieu
if(@KTsoluong=1)
Begin
set @loiSL=N'Bạn không thể mượn vì
trong kho sách chỉ còn lại một quyển duy nhất.'
raiserror(@LoiSL,16,1)
rollback tran
End
If(@HanTra<@NgayMuon)
Set @KTngay=1
Set @Loi=case
when (@KTmaphieu=0)and(@KTngay=0) then 'OK'
when (@KTmaphieu=1)and(@KTngay=0) then N'Mã phiếu mượn chưa có
trong bảng PHIEUMUON.'
when (@KTmaphieu=0)and(@KTngay=1) then N'Ngày hẹn trả sách phải
sau ngày '+cast(day(@ngaymuon)as char(2))+'/'+cast(month(@ngaymuon)as char(2))+'/'+cast(year(@ngaymuon)as char(4))
when (@KTmaphieu=1)and(@KTngay=1) then N'Mã phiếu mượn chưa có trong
bảng PHIEUMUON & ngày hẹn trả phải au ngày mượn.'
end
If @Loi<>'OK'
Begin
raiserror(@Loi,16,1)
rollback tran
End
Else
Begin
Update SACH
Set SoLuong=SoLuong-1 where masach=@masach
End
declare @soluong int
set @soluong=0
select @soluong=soluong from SACH where masach=@masach
if(@soluong<=0)
Begin
Update SACH
Set TinhTrang=N'Hết sách' where masach=@masach
End
if(@soluong>0)
Update SACH
Set TinhTrang=N'Còn sách' where masach=@masach
--3.2.Kiểm tra khi sửa dữ liệu
Create trigger tg_CT_PHIEUMUON_Sua on
CT_PHIEUMUON
for update
as
declare @ngaymuon datetime,@hantra datetime
declare @maphieu bigint,@masach bigint,@loi nvarchar(150)
if update(maphieu)
begin
rollback tran
set @loi=N'Không thể thay đổi mã phiếu
mượn.'
raiserror (@loi,16,1)
return
end
if update(hantra)
begin
select @maphieu=maphieu from deleted
select @masach=masach from deleted
select @ngaymuon=ngaymuon from PHIEUMUON where maphieu=@maphieu
select @hantra=hantra from CT_PHIEUMUON where maphieu=@maphieu
if @hantra<@ngaymuon
begin
set @loi=N'Ngày hẹn trả sách phải sau
ngày '+cast(day(@ngaymuon)as char(2))+'/'+cast(month(@ngaymuon)as char(2))+'/'+cast(year(@ngaymuon)as char(4))
raiserror(@loi,16,1)
rollback tran
return
end
end
--3.3.Xóa thông tin
Create trigger tg_CT_PHIEUMUON_Xoa on
CT_PHIEUMUON
for delete
as
declare @maphieu bigint,@masach bigint
select @maphieu=maphieu,@masach=masach from deleted
update SACH
Set SoLuong=SoLuong+1 where masach=@masach
declare @soluong int
set @soluong=0
select @soluong=soluong from SACH where masach=@masach
if(@soluong=0)
Update SACH
Set TinhTrang=N'Hết sách' where masach=@masach
if(@soluong>0)
Update SACH
Set TinhTrang=N'Còn sách' where masach=@masach
--4.Tạo các trigger đối với bảng TRASACH
--4.1.Thêm mới dữ liệu
Create trigger tg_TRASACH_Them on TRASACH for insert
AS
Declare @NgayTra datetime,@NgayMuon datetime,@HanTra datetime,@MaPhieu bigint,@maSach bigint,@KTngay int,@KTmaphieu int,@loi nvarchar(150)
Set @KTngay=0
Set @KTmaphieu=0
If exists(select maphieu from inserted where maphieu not in(select maphieu from PHIEUMUON))
Set @KTmaphieu=1
Select @MaPhieu=MaPhieu,@NgayTra=NgayTra,@masach=masach from inserted
select @NgayMuon=NgayMuon from PHIEUMUON pm inner join TRASACH ts on pm.MaPhieu=ts.MaPhieu where pm.MaPhieu=@MaPhieu
If(@NgayTra<@NgayMuon)
Set @KTngay=1
Set @Loi=case
when (@KTmaphieu=0)and(@KTngay=0) then 'OK'
when (@KTmaphieu=1)and(@KTngay=0) then N'Mã phiếu mượn chưa có
trong bảng PHIEUMUON.'
when (@KTmaphieu=0)and(@KTngay=1) then N'Ngày trả sách phải sau
ngày mượn('+cast(day(@ngaymuon)as char(2))+'/'+cast(month(@ngaymuon)as char(2))+'/'+cast(year(@ngaymuon)as char(4))+')'
when (@KTmaphieu=1)and(@KTngay=1) then N'Mã phiếu mượn chưa có
trong bảng PHIEUMUON & ngày trả phải au ngày mượn.'
end
If @Loi<>'OK'
Begin
raiserror(@Loi,16,1)
rollback tran
End
Else
Begin
Update SACH
Set SoLuong=SoLuong+1 where masach=@masach
End
declare @soluong int
set @soluong=0
select @soluong=soluong from SACH where masach=@masach
if(@soluong=0)
Update SACH
Set TinhTrang=N'Hết sách' where masach=@masach
if(@soluong>0)
Update SACH
Set TinhTrang=N'Còn sách' where masach=@masach
--4.2.Kiểm tra khi sửa dữ liệu
Create trigger tg_TRASACH_Sua on TRASACH
for update
as
declare @ngaymuon datetime,@ngaytra datetime
declare @maphieu bigint,@masach bigint,@loi nvarchar(150)
if update(maphieu)
begin
rollback tran
set @loi=N'Không thể thay đổi mã phiếu
mượn.'
raiserror (@loi,16,1)
return
end
if update(ngaytra)
begin
select @maphieu=maphieu from deleted
select @masach=masach from deleted
select @ngaymuon=ngaymuon from PHIEUMUON where maphieu=@maphieu
select @ngaytra=ngaytra from TRASACH where maphieu=@maphieu
if @ngaytra<@ngaymuon
begin
set @loi=N'Ngày trả sách phải sau
ngày mượn('+cast(day(@ngaymuon)as char(2))+'/'+cast(month(@ngaymuon)as char(2))+'/'+cast(year(@ngaymuon)as char(4))+')'
raiserror(@loi,16,1)
rollback tran
return
end
end
--4.3.Xóa thông tin
Create trigger tg_TRASACH_Xoa on TRASACH
for delete
as
declare @maphieu bigint,@masach bigint
select @maphieu=maphieu,@masach=masach from deleted
update SACH
Set SoLuong=SoLuong-1 where masach=@masach
declare @soluong int
set @soluong=0
select @soluong=soluong from SACH where masach=@masach
if(@soluong=0)
Update SACH
Set TinhTrang=N'Hết sách' where masach=@masach
if(@soluong>0)
Update SACH
Set TinhTrang=N'Còn sách' where masach=@masach
-----------------------------------------------
V/ Tạo các thủ tục lưu trữ-Stored Procedure
--1.Tạo thủ tục đối với bảng NHANVIEN
--1.1.Tạo thủ tục để hiển thị dữ liệu đối
với bảng NHANVIEN
Create proc pro_NHANVIEN
As
Select manv,hotennv,case gioitinhnv when 1 then 'Nam'
else N'Nữ'
end as gioitinhnv,ngaysinhnv,diachinv,dienthoainv,emailnv,hinhanhnv,ngayvaolam,matkhau
From NHANVIEN
--1.2.Tạo thủ tục cập nhật thông tin
trong bảng NHANVIEN
Create PROCEDURE Pro_NhanVien_CapNhat
@LuaChon char(1),
@MaNV char(50),
@HoTenNV nvarchar(30),
@GioiTinhNV bit,
@NgaySinhNV datetime,
@DienThoaiNV char(11),
@DiaChiNV nvarchar(150),
@EmailNV char(100),
@HinhAnhNV char(30),
@NgayVaoLam datetime,
@MatKhau char(30)
AS
Begin
If(@LuaChon='1')
Begin
If(select count(*) from nhanvien where manv=@manv)<=0
Begin
Insert into NHANVIEN Values(@MaNV,@HoTenNV,@GioiTinhNV,@NgaySinhNV,@DienThoaiNV,@DiaChiNV,@EmailNV,@HinhAnhNV,@NgayVaoLam,@MatKhau)
Print N'Thêm thành công!'
End
Else
Print N'Không thêm được. Lỗi
rồi!'
End
Else if(@LuaChon='2')
Begin
If(Select Count(*) From NHANVIEN Where MaNV=@MaNV)>0
Begin
Update NHANVIEN Set HoTenNV=@HoTenNV,GioiTinhNV=@GioiTinhNV,NgaySinhNV=@NgaySinhNV,DienThoaiNV=@DienThoaiNV,DiaChiNV=@DiaChiNV,EmailNV=@EmailNV,HinhAnhNV=@HinhAnhNV,NgayVaoLam=@NgayVaoLam,MatKhau=@MatKhau where MaNV=@MaNV
Print N'Bạn đã cập nhật thành
công!'
End
Else
Print N'Mã này không có trong
bảng NHANVIEN. Lỗi rồi!'
End
End
--1.3.Tạo thủ tục để xóa thông tin trong
bảng NHANVIEN
Create proc pro_NhanVien_Del
@MaNV char(10)
As
Begin
If(select count(*) from nhanvien where manv=@manv)>0
Begin
Delete from nhanvien where manv=@manv
End
Else
Print N'Mã nhân viên này
không có. Không xóa được!'
End
--2.Tạo thủ tục để lấy thông tin từ bảng
NHAXUATBAN
Create Proc pro_NXB
As
Select * From NHAXUATBAN
--3.Tạo thủ tục để lấy thông tin từ bảng THELOAI
Create Proc pro_THELOAI
As
Select * From THELOAI
--4.Tạo thủ tục để lấy thông tin từ bảng TACGIA
Create Proc Pro_TacGia
As
Select * From TacGia
--5.Tạo thủ tục để lấy thông tin từ bảng VITRISACH
Create Proc Pro_VITRISACH
As
Select MaVT,'MoTa'=N'Mã vị trí:'+MaVT+'\'+N'Tầng:'+Tang+'\'+N'Kệ:'+Ke+'\'+N'Ngăn:'+Ngan
From VITRISACH
--6.Tạo thủ tục để hiển thị thông tin từ bảng SACH
Create Proc pro_SACH
AS
Begin
Select * From Sach
End
--7.Taọ các thủ tục đối với bảng SACH
--7.1.Tạo thủ tục xóa thông tin trong bảng SACH
Create Proc pro_SACH_Del
@MaSach bigint
As
Begin
If(Select Count(*) From SACH Where MaSach=@MaSach)>0
Begin
Delete from SACH Where MaSach=@MaSach
Print N'Bạn đã xóa thành
công!'
End
Else
Print N'Mã này không có trong
bảng ISBN. Lỗi rồi!'
End
--7.2.Tạo thủ tục chọn sách theo mã sách có trong
bảng CT_PHIEUMUON
Create Proc Pro_SachMuon_Chon
@MaSach bigint
AS
select CT_PhieuMuon.MaSach,TenSach,HanTra from SACH,CT_PHIEUMUON where CT_PhieuMuon.MaSach=Sach.MaSach and CT_PHIEUMUON.MaSach=@MaSach
--8.Tạo thủ tục để hiển thị thông tin trong bảng
DOCGIA
Create Proc pro_DocGia
As
Select * From DOCGIA
--9.Tạo thủ tục để hiển thị thông tin trong bảng
PHIEUMUON
Create Proc pro_PhieuMuon
As
Select MaPhieu,DocGia.MaDG,HoTenDG,NgayMuon,NHANVIEN.MaNV,HoTenNV From PHIEUMUON,DOCGIA,NHANVIEN Where PHIEUMUON.MaDG=DOCGIA.MaDG and PHIEUMUON.MaNV=NHANVIEN.MaNV
--10.Tìm kiếm thông tin trong bảng SACH
Create Proc Pro_TimSach
@LuaChon char(2),
@MaSach char(10),
@TenSach nvarchar(150)
AS
Begin
if(@LuaChon='1')
select MaSach,TenSach,SoLuong,TinhTrang,NoiDungTT from SACH
else if(@LuaChon='2')
select MaSach,TenSach,SoLuong,TinhTrang,NoiDungTT from SACH where MaSach=@MaSach
else if(@LuaChon='3')
select MaSach,TenSach,SoLuong,TinhTrang,NoiDungTT from SACH where MaSach=@MaSach and TenSach Like '%'+@TenSach+'%'
else if(@LuaChon='4')
select MaSach,TenSach,SoLuong,TinhTrang,NoiDungTT from SACH where TenSach Like '%'+@TenSach+'%'
End
--11.Tìm kiếm thông tin trong bảng
CT_PHIEUMUON
Create Proc Pro_CT_PHIEUMUON
@MaPM bigint
AS
Select MaPhieu,SACH.MaSach,TenSach,HanTra from CT_PHIEUMUON,SACH where CT_PHIEUMUON.MaSach=SACH.MaSach and MaPhieu=@MaPM
--12.Tạo thủ tục lựa chọn sách mượn
Create Proc Pro_Sach_Chon
@MaSach bigint
AS
Select * from SACH where MaSach=@MaSach
--13.Tạo thủ tục lựa chọn phiếu mượn
Create Proc Pro_PhieuMuon_Chon
@MaPhieu bigint
AS
Select * from PHIEUMUON where MaPhieu=@MaPhieu
--14.Tạo thủ tục lựa chọn độc giả
Create Proc Pro_DocGia_Chon
@MaDG bigint
AS
Select * from DOCGIA where MaDG=@MaDG
--15.Tạo thủ tục cập nhật dữ liệu cho bảng
PHIEUMUON
Create Proc Pro_PhieuMuon_Update
@luachon char(1),
@MaPhieu bigint,
@MaDG bigint,
@NgayMuon datetime,
@MaNV char(50)
AS
Begin
If(@luachon='1')
Insert into PHIEUMUON(MaDG,NgayMuon,MaNV)values(@MaDG,@NgayMuon,@MaNV)
Else if(@luachon='2')
Update PHIEUMUON set MaDG=@MaDG,NgayMuon=@NgayMuon,@MaNV=@MaNV where MaPhieu=@MaPhieu
End
--16.Tạo thủ tục cập nhật dữ liệu cho bảng
CT_PHIEUMUON
Create Proc Pro_CT_PhieuMuon_Update
@luachon char(1),
@maphieu bigint,
@masach bigint,
@hantra datetime
AS
Begin
If(@luachon='1')
Begin
If not exists(Select * from CT_PHIEUMUON where maphieu=@maphieu and masach=@masach)
Insert
into CT_PHIEUMUON
values(@maphieu,@masach,@hantra)
End
Else if(@luachon='2')
Update CT_PHIEUMUON
set hantra=@hantra where maphieu=@maphieu and masach=@masach
End
--17.Tạo thủ tục tìm kiếm chi tiết phiếu mượn
Create Proc Pro_TimChiTietPhieuMuon
@LuaChon char(1),
@MaPhieu bigint
AS
Begin
if(@LuaChon='1')
Select PHIEUMUON.MaPhieu,SACH.MaSach,TenSach,HanTra,NHANVIEN.MaNV from CT_PhieuMuon,SACH,NHANVIEN,PHIEUMUON where CT_PHIEUMUON.MaSach=SACH.MaSach and NHANVIEN.MaNV=PHIEUMUON.MaNV and CT_PHIEUMUON.MaPhieu=PHIEUMUON.MaPhieu
else if(@LuaChon='2')
Select PHIEUMUON.MaPhieu,SACH.MaSach,TenSach,HanTra,NHANVIEN.MaNV from CT_PhieuMuon,SACH,NHANVIEN,PHIEUMUON where CT_PHIEUMUON.MaSach=SACH.MaSach and NHANVIEN.MaNV=PHIEUMUON.MaNV and CT_PHIEUMUON.MaPhieu=PHIEUMUON.MaPhieu and CT_PHIEUMUON.MaPhieu=@MaPhieu
End
--18.Tạo thủ tục lưu lại các thông trong bang
TRASACH
Create Proc Pro_TraSach_Insert
@MaPM bigint,
@MaSach bigint,
@MaNV char(50),
@NgayTra datetime,
@PhatHuHong bigint,
@PhatQuaHan bigint
AS
Begin
If(select count(*) from TRASACH where MaPhieu=@MaPM and MaSach=@MaSach)<=0
Insert into TRASACH values(@MaPM,@MaSach,@MaNV,@NgayTra,@PhatHuHong,@PhatQuaHan)
Else
Begin
Declare @loi nvarchar(150)
Set @loi=N'Độc giả này đã trả sách.'
raiserror(@loi,16,1)
End
End
--19.Tạo thủ tục tìm kiếm thông tin sách
Create PROCEDURE Pro_Tim_Sach
@luachon char(2),
@MaSach bigint,
@TenSach nvarchar(150),
@HoTenTG nvarchar(30),
@MaTL char(10),
@MaNXB bigint
AS
Begin
if(@LuaChon='1')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL
else if(@LuaChon='2')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach
else if(@LuaChon='3')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach and tensach like '%'+@tensach+'%'
else if(@LuaChon='4')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach and tensach like '%'+@tensach+'%'
and HoTenTG like '%'+@HoTenTG+'%'
else if(@LuaChon='5')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach and tensach like '%'+@tensach+'%'
and HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL
else if(@LuaChon='6')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach and tensach like '%'+@tensach+'%'
and HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='7')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and tensach like '%'+@tensach+'%'
else if(@LuaChon='8')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and tensach like '%'+@tensach+'%' and
HoTenTG like '%'+@HoTenTG+'%'
else if(@LuaChon='9')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and tensach like '%'+@tensach+'%' and
HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL
else if(@LuaChon='10')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and tensach like '%'+@tensach+'%' and
HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='11')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and HoTenTG like '%'+@HoTenTG+'%'
else if(@LuaChon='12')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL
else if(@LuaChon='13')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL
and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='14')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and TheLoai.MaTL=@MaTL
else if(@LuaChon='15')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and TheLoai.MaTL=@MaTL and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='16')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach
and HoTenTG like '%'+@HoTenTG+'%'
else if(@LuaChon='17')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach
and HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL
else if(@LuaChon='18')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach
and HoTenTG like '%'+@HoTenTG+'%' and TheLoai.MaTL=@MaTL and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='19')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach and TheLoai.MaTL=@MaTL
else if(@LuaChon='20')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach and TheLoai.MaTL=@MaTL
and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='21')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and tensach like '%'+@tensach+'%' and TheLoai.MaTL=@MaTL
else if(@LuaChon='22')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and tensach like '%'+@tensach+'%' and
TheLoai.MaTL=@MaTL and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='23')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and tensach like '%'+@tensach+'%' and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='24')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and HoTenTG like '%'+@HoTenTG+'%' and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='25')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and NhaXuatBan.MaNXB=@manxb
else if(@LuaChon='26')
select * from Sach,TacGia,TheLoai,NhaXuatBan where SACH.MaNXB=NHAXUATBAN.MaNXB and SACH.MaTG=TACGIA.MaTG and Sach.MaTL=THELOAI.MaTL and SACH.MaSach=@MaSach and NhaXuatBan.MaNXB=@manxb
End
--20.Tạo hàm đăng nhập vào hệ thống quản lý thư viện
Create function DangNhap(@MaNV char(50),@MatKhau char(30))
Returns @Bang table(ok int)
As
Begin
Insert into @Bang
Select COUNT(MatKhau)
From NHANVIEN
Where MaNV = @MaNV AND MatKhau=@MatKhau
Return
Sau một thời gian nhóm em bắt tay
vào nghiên cứu cùng với sự giúp đỡ tận tình của thầy giáo, nhóm chúng em đã
hoàn thành đề tài ”Xây dựng cơ sở dữ liệu
quản lý thư viện”. Qua đây đã giúp chúng em vận dụng phần mềm SQL để tạo cơ
sở dữ liệu, quản lý.Đặc biệt là đã giúp cho chúng em có khả năng làm việc theo
nhóm tốt hơn.
Tuy nhiên trong quá trình phân tích, xây dựng hệ cơ sở chúng
em còn chưa nắm vững nên chắc chắn trong báo cáo này không tránh khỏi thiếu sót
và những chỗ xử lý vấn đề chưa được tối ưu. Chúng em rất mong nhận được những
nhận xét, đánh giá từ phía Thầy giảng dạy bộ môn và tất cả các bạn.