II. Thiết kế cơ sở dữ liệu
3. Thiết kế các bảng ảo
Để phục vụ cho quá trình xem sửa dễ dàng cũng như làm trung gian giữa các thủ tục, hàm với các bảng dữ liệu chúng ta thiết kế một số khung nhìn cho hệ thống
3.1 Bảng ảo thơng tin độc giả
Cho biết thông tin chi tiết về các độc giả như mã thẻ thư viện, họ tên độc giả, phái, ngày tháng năm sinh, lớp nào, địa chỉ nhà, điện thoại liên hệ, ngày làm thẻ, ngày hết hạn thẻ
3.2 Bảng ảo thông tin về sách
Cho biết thông tin chi tiết về các đầu sách như mã, tên sách, thuộc thể loại nào, tình trạng ra sao, số lượng có trong kho, đơn giá của mỗi cuốn, năm xuất bản sách, của nhà xuất bản nào, tác giả nào viết
3.3 Bảng ảo thông tin phiếu mượn
Cho biết một phiếu mượn do ai mượn, nhân viên nào lập phiếu mượn, ngày mượn sách, thời gian mượn sách là bao nhiêu ngày
3.4 Bảng ảo thông tin chi tiết sách mượn
Cho biết thông tin chi tiết về các phiếu mượn đã mượn sách có tên là gì, thuộc thể loại nào, đơn giá sách là bao nhiêu, của tác giả nào, nhà xuất bản nào, số lượng mượn là bao nhiêu
4. Thiết kế các thủ tục lưu trữ
4.1 thủ tục nhập dữ liệu cho các bảng khơng có bảng cha
Đối với thủ tục loại này chỉ cần kiểm tra các khóa chính nhập vào có bị trùng hay khơng. Nếu trùng thì thơng báo bị trùng và khơng cho nhập vào, cịn khơng thì thơng báo thành cơng và nhập vào cơ sơ dữ liệu
CREATE PROCEDURE nhapdocgia ( @ma char(5), @ten varchar(50), @phai bit, @ns datetime, @cq varchar(50), @dc varchar(50), @dt varchar(15) ) AS begin
if exists(select * from docgia where madg=@ma) print ' ma bi trung'
else begin
insert into docgia values(@ma,@ten,@phai,@ns,@cq,@dc,@dt) print ' nhap thanh cong'
end end
------------------------- THỦ TỤC NHẬP CHO BẢNG NHÂN VIÊN -------------
CREATE PROCEDURE nhapnhanvien ( @ma char(5),
@ten varchar(50), @dt varchar(15) )
AS
if exists(select * from nhanvien where manv=@ma) print ' ma bi trung'
else begin
insert into nhanvien values(@ma,@ten,@dt) print ' nhap thanh cong' end
end
----------------------- THỦ TỤC NHẬP CHO BẢNG TÁC GIẢ --------------------
CREATE PROCEDURE nhaptacgia ( @ma char(5), @ten varchar(50), @dt varchar(15), @dc varchar(50), @coquan varchar(50) ) AS
if exists(select * from tacgia where matg=@ma) print ' ma bi trung'
else begin
insert into tacgia
values(@ma,@ten,@dt,@dc,@coquan) print ' nhap thanh cong'
end end
----------------------------THỦ TỤC NHẬP CHO BẢNG NXB ----------------------
CREATE PROCEDURE nhapnxb ( @ma char(5), @ten varchar(50), @dc varchar(15), @dt varchar(50) ) AS
if exists(select * from nxb where manxb=@ma) print ' ma bi trung'
else begin
insert into nxb
values(@ma,@ten,@dc,@dt) print ' nhap thanh cong'
end end
4.2 Thủ tục nhập dữ liệu cho các bảng có bảng cha
Với thủ tục loại này thì yêu cầu các ràng buộc cần chặt trẽ hơn, phức tạp hơn. Ngoài việc kiểm tra khóa chính nhập vào khơng trùng thì cịn phải kiểm tra khóa ngoại tham chiếu tới bảng cha. Nếu kiểm tra khóa ngoại nhập vào khơng có trong bảng cha thì thơng báo lỗi và hủy q trình nhập, nếu thỏa mãn có thì thơng báo thành cơng và thực hiện nhập vào cơ sở dữ liệu
---------- THỦ TỤC NHẬP CHO BẢNG THẺ ĐỘC GIẢ ---------- CREATE PROCEDURE nhapthedocgia
( @mathe char(5), @madg char(5), @ngaytao datetime, @ngayhethan datetime ) as begin
if exists (select * from thedocgia where mathe=@mathe) print 'khoa bi trung'
else
if not exists(select * from docgia where madg=@madg) print 'khong ton tai ma doc gia trong bang doc gia' else begin
if(@ngaytao>@ngayhethan)
print 'nhap lai ngay tao va ngay het han' else
begin
print 'nhap thanh cong' insert into dbo.thedocgia values(@mathe,@madg,@ngaytao,@ngayhethan)
end end
--------- THỦ TỤC NHẬP CHO BẢNG PHIẾU NHẮC TRẢ ------------ CREATE PROCEDURE nhapphieunhactra
( @sopnhactra char(5), @sopmuon char(5), @ngaylap datetime ) as begin
if exists (select * from phieunhactra where sopnhactra=@sopnhactra) print 'khoa bi trung'
else
if not exists(select * from phieumuon where sopmuon=@sopmuon) print 'khong ton tai so phieu muon trong bang phieu muon' else
begin
print'nhap thanh cong' insert into dbo.phieunhactra
values(@sopnhactra,@sopmuon,@ngaylap) end
end
---------- THỦ TỤC NHẬP CHO BẢNG SÁCH ---------------- CREATE PROCEDURE nhapsach
( @ms char(5), @ts varchar(50), @tl varchar(50), @ttrang varchar(50), @solc bigint, @dg money, @namxb int, @matg char(5), @manxb char(5) ) as begin
if exists (select * from sach where masach=@ms) print 'khoa bi trung'
else
if not exists(select * from tacgia where matg=@matg) print'khong ton tai ma tac gia trong bang tac gia' else
if not exists(select * from nxb where manxb=@manxb) print 'khong ton tai manxb trong bang nha xuat ban' else
begin
print'nhap thanh cong' insert into sach
values(@ms,@ts,@tl,@ttrang,@solc,@dg,@namxb,@matg,@manxb) end
end
------------ THỦ TỤC NHẬP CHO BẢNG PHIẾU MƯỢN --------- CREATE PROCEDURE nhapphieumuon
( @sopmuon char(5), @mathe char(5), @manv char(5), @ngaymuon datetime, @songaymuon int ) as begin
if exists (select * from phieumuon where sopmuon=@sopmuon) print 'khoa bi trung'
else
if not exists(select * from nhanvien where manv=@manv) print'khong ton tai ma nhan vien trong bang nhan vien' else
if not exists(select * from thedocgia where mathe=@mathe) print'khong ton tai ma the trong bang the doc gia' else
if(@songaymuon>30)
print'nhap lai so ngay muon lon hon bang 0 va nho hon bang 30' else
begin
print'nhap thanh cong' insert into phieumuon
values(@sopmuon,@mathe,@manv,@ngaymuon,@songaymuon) end
end
------------------------- NHẬP BẢNG SÁCH MƯỢN --------------------------------
CREATE PROCEDURE nhapsachmuon ( @sopmuon char(5), @masach char(5), @sl int ) as begin
if exists(select * from sachmuon where sopmuon=@sopmuon and masach=@masach)
print 'khoa bi trung' else
if not exists(select * from phieumuon where sopmuon=@sopmuon) print ' khong ton tai phieu muon trong bang phieu muon' else
if not exists(select * from sach where masach=@masach) print ' khong ton tai ma sach trong bang sach ' else
begin
declare @slco int
select @slco=soluongco from sach where masach=@masach
if(@sl>@slco)
print ' khong du sach de muon ' else
begin
values(@sopmuon,@masach,@sl) end
end end
4.3 Viết thủ tục nhập dữ liệu cho nhiều bảng
Loại thủ tục này cho phép nhập các thông tin về tài liệu xuất, nhập thực tế và tự động chèn vào các bảng cơ sở dữ liệu có liên quan
----------- THỦ TỤC NHẬP VÀO BẢNG ĐỘC GIẢ VÀ THẺ ĐỘC GIẢ------ CREATE PROC taothedg
( @madg CHAR(5), @mathe CHAR(5), @hoten VARCHAR(50), @phai char(5), @ns DATETIME, @cq VARCHAR(50), @dc VARCHAR(50), @dt VARCHAR(15), @ngaylap DATETIME, @ngayhethan DATETIME ) AS
IF EXISTS(SELECT * FROM docgia WHERE madg=@madg) OR EXISTS(SELECT * FROM THEDOCGIA WHERE mathe=@mathe)
print ' ma bi trung ' ELSE
BEGIN
INSERT INTO docgia VALUES (@madg,@hoten,@phai,@ns,@cq,@dc,@dt)
INSERT INTO thedocgia
VALUES(@mathe,@madg,@ngaylap,@ngayhethan) print ' nhap du lieu thanh cong '
4.4 Thủ tục tạo các thống kê cần thiết cho hệ thống
Thủ tục loại này cho phép đưa ra các thống kê cho chức năng báo cáo thống kê như thống kê số lượt mượn sách, báo cáo sách yêu thích . . .
------------ THỐNG KÊ SỐ LƯỢNG ĐỘC GIẢ MƯỢN SÁCH ----------------- CREATE PROCEDURE SLDOCGIAMUON
AS BEGIN
SELECT THEDOCGIA.Mathe,
DOCGIA.HotenDG,COUNT(PHIEUMUON.Sopmuon) AS SOLANMUON FROM (DOCGIA INNER JOIN THEDOCGIA ON DOCGIA.MaDG = THEDOCGIA.MaDG) INNER JOIN PHIEUMUON ON
THEDOCGIA.Mathe = PHIEUMUON.Mathe
GROUP BY THEDOCGIA.Mathe, DOCGIA.HotenDG; DECLARE @SL INT
SELECT @SL=COUNT (*) FROM PHIEUMUON
PRINT ' SO LUOT DOC GIA MUON SACH LA ' + CAST(@SL AS VARCHAR(5))
END
-------------- TK SỐ LƯỢNG SÁCH MƯỢN -------------------------- CREATE PROCEDURE TKSLSACHMUON AS
BEGIN
SELECT MASACH, SUM(SOLUONG)AS TONGSLMUON FROM SACHMUON GROUP BY MASACH
END
EXECUTE TKSLSACHMUON
--------------- BC SÁCH YÊU THÍCH ---------------------------------- CREATE PROC BCSACHYEUTHICH
AS
SELECT SACH.Masach, SACH.Tensach, Sum(SACHMUON.Soluong) AS tongsoluong
FROM SACH INNER JOIN SACHMUON ON SACH.Masach = SACHMUON.Masach
GROUP BY SACH.Masach, SACH.Tensach ORDER BY Sum(SACHMUON.Soluong) DESC; GO
5. Thiết kế các hàm (function )
5.1 Thiết kế hàm xem thông tin độc giả
Hàm này cho phép người dùng nhập vào một mã thẻ độc giả và hàm trả về bản ghi chứa thông tin về mã thẻ đó. Hàm này cịn phục vụ cho chức năng kiểm tra thẻ độc giả khi mượn sách
CREATE FUNCTION XEMTHONGTINDG(@MATHE CHAR(5)) RETURNS TABLE AS
RETURN
SELECT * FROM THONGTINTHEDG WHERE MATHE=@MATHE
5.2 Thiết kế hàm xem thông tin phiếu mượn
Hàm này cho phép nhập vào một mã phiếu mượn và trả về các thông tin liên quan đến phiếu mượn đó như người mượn, người lập phiếu, thời gian mượn . . .
CREATE FUNCTION XEMTTPHIEUMUON(@SOPHIEU CHAR(5))
RETURNS TABLE AS RETURN
SELECT * FROM THONGTINPHIEUMUON WHERE SOPMUON=@SOPHIEU
5.3 Thiết kế hàm xem thông tin chi tiết phiếu mượn
Hàm này cho phép nhập vào một số phiếu mượn và trả về các thông tin chi tiết về sách mượn trong phiếu mượn đó
CREATE FUNCTION XEMTTCHITIETPHIEUMUON(@SOPHIEU CHAR(5))
RETURNS TABLE AS RETURN
SELECT * FROM THONGTINCHITIETSACHMUON WHERE SOPMUON=@SOPHIEU
5.4 Thiết kế hàm xem thông tin sách
Hàm này cho phép nhập và một mã sách và trả về các thông tin chi tiết liên quan đến mã sách đó. Hàm này cịn phục vụ cho chức năng tra cứu tài liệu của người dùng là độc giả
RETURN
SELECT * FROM THONGTINSACH WHERE MASACH=@MASACH
6. Tạo trigger hệ thống
Tạo các trigger kiểm tra điều kiện hợp lệ của dữ liệu trong bảng Sách khi mà thêm mới, cập nhật lại, xóa dữ liệu trong bảng Sách mượn.
6.1 Tạo trigger khi cập nhật bản ghi
CREATE TRIGGER trg_sachmuon_update ON SACHMUON FOR UPDATE AS if update(soluong) IF @@ROWCOUNT=1 BEGIN update sach
set sach.soluongco = sach.soluongco - (inserted.soluong - deleted.soluong)
from(deleted inner join inserted on deleted.masach=inserted.masach) inner join sach on sach.masach=deleted.masach
END ELSE BEGIN UPDATE sach SET sach.soluongco=sach.soluongco- (SELECT SUM(inserted.soluong-deleted.soluong) FROM inserted INNER JOIN deleted
ON inserted.masach=deleted.masach WHERE inserted.masach=sach.masach)
WHERE sach.masach IN(SELECT masach FROM inserted) END
6.2 Tạo trigger khi delete bản ghi.
• Trường hợp xóa 1 bản ghi create trigger trg_sachmuon_delete on sachmuon
for delete as
update sach
from deleted inner join sach on deleted.masach=sach.masach
• Trường hợp xóa nhiều bản ghi
CREATE TRIGGER trg_sachmuon_delete ON sachmuon
FOR DELETE AS
BEGIN
DECLARE @masach char(5) DECLARE @soluong int
DECLARE CONTRO CURSOR FOR
SELECT deleted.masach,deleted.soluong FROM deleted
OPEN CONTRO
FETCH NEXT FROM CONTRO INTO @masach,@soluong WHILE @@FETCH_STATUS=0
BEGIN
UPDATE sach
SET soluongco=soluongco+@soluong WHERE masach=@masach
FETCH NEXT FROM CONTRO INTO @masach, @soluong END
CLOSE CONTRO
DEALLOCATE CONTRO END
6.3 Tạo trigger khi insert bản ghi.
CREATE TRIGGER trg_sachmuon_insert ON sachmuon
FOR INSERT AS
BEGIN
DECLARE @masach char(5) DECLARE @soluong int
DECLARE CONTRO CURSOR FOR
SELECT inserted.masach, inserted.soluong FROM inserted
OPEN CONTRO
FETCH NEXT FROM CONTRO INTO @masach, @soluong WHILE @@FETCH_STATUS=0
BEGIN
WHERE masach=@masach
FETCH NEXT FROM CONTRO INTO @masach, @soluong END
CLOSE CONTRO
DEALLOCATE CONTRO END.
CHƯƠNGIV. LẬP TRÌNH CHẠY THỬ
1. Kết nối SQL server2000 với Visual Basic 6.0
Public cnn As New ADODB.Connection Public Sub ketnoi ()
cnn.ConnectionString = "Provider=MSDASQL, driver= {SQL server}, server=(local),uid=sa,pwq=,databases=qltvdhhanoi"
cnn.Open End Sub
2. Thiết kế giải thuật cho từng chức năng
2.2 chức năng quản lý thẻ độc giả
2.5 Chức năng đăng nhập
2.7 Chức năng lập phiếu nhắc trả
2.9 Chức năng tìm kiếm sách
3. Thiết kế giao diện
3.1 Màn hình đăng nhập
3.2 Form main khi đăng nhập quyền thủ thư
3.5 Form quản lý sách
3.7 Form tìm kiếm sách theo mã sách
4. Thiết kế tài liệu xuất
4.1 Tạo thẻ độc giả
4.3 Báo cáo sách yêu thích
PHỤ LỤC
1. Bảng phân cơng cơng việc
1. Phạm Văn Hà - Phân tích hệ thống
- Thiết kế các hàm, thủ tục , trigger - Thiết kế chức năng tra cứu
- Thiết kế chức năng quản lý sách - Soạn thảo slide, báo cáo
2. Trương Hồng Đức - Phân tích hệ thống - Test chương trình
- Thiết kế chức năng quản lý mượn trả - Thiết kế chức năng đăng nhập
- Tổng hợp các modul, thiết kế menu 3. Hồng Đình Hợp - Khảo sát hệ thống
- Thiết kế các bảng và các ràng buộc - Thiết kế hàm, thủ tục, trigger - Thiết kế chức năng quản lý độc giả - Soạn thảo báo cáo
4. Đàm Phương - Khảo sát hệ thống
- Thiết kế chức năng quản lý nhân viên - Test chương trình
2. Danh mục tài liệu tham khảo
Giáo trình DBMS – bộ mơn hệ thống thơng tin, khoa CNTT, Đại học Công Nghiệp Hà Nội
MS SQL server 2000 – Phạm Thị Hồng Nhung – bộ mơn CNPM, Đại học Thủy Lợi
Giáo trình SQl server – Trần Nguyên Phong – Đại học KHTN Huế
Giáo trình SQl server – Trung tâm tin học – Đại học KHTN tp Hồ Chí Minh
Phân tích thiết kế hệ thống thông tin – Nguyễn Văn Ba – Đại học quốc gia Hà Nội
Slide PTTKHT – Nguyễn Thị Thanh Huyền – Đại học Công Nghiệp Hà Nội
Tự học Visual Basic 6 trong 21 ngày – Nguyễn Đình Tê- NXB Lao Động – Xã Hội
ADO toàn tập – Giaiphapexcel.com
Câu lạc bộ Visual Basic - http://www.caulacbovb.com