Thiết kế các bảng ảo

Một phần của tài liệu BÀI TẬP LỚN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ĐỀ TÀI: Quản lý thư viện Đại Học Hà Nội (Trang 37)

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' (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

( @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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

- 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

Một phần của tài liệu BÀI TẬP LỚN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ĐỀ TÀI: Quản lý thư viện Đại Học Hà Nội (Trang 37)