Chủ Nhật, 23 tháng 10, 2016

Nhóm 5

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+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-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



PHẦN 3: KẾT LUẬN
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.

Không có nhận xét nào:

Đăng nhận xét