Thủ tục procedure: 1.1 Thủ tục thêm: - 1.Thêm thuốc: CREATE PROC Them_Thuoc @MaThuoc char10,@TenThuoc nvarchar100,@DVTinh nvarchar100,@SoLuong char10,@LoaiThuoc nvarchar100,@Hansudung v
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
BÀI TẬP LỚN HỌC PHẦN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
ĐỀ TÀI: THIẾT KẾ VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU HIỆU
Trang 2LỜI NÓI ĐẦU
- Ngày nay, hiệu thuốc đã có những bước tiến nhanh chóng quan trọng trong mọi lĩnh vực của cuộc sống trên phạm vi toàn thế giới nói chung
và Việt Nam nói riêng Hiệu thuốc được người ta quan tâm và nhắc đến nhiều hơn bao giờ hết vì nó là một phần không thể thiếu trong cuộc sống
- Ở Việt Nam hiện nay, hiệu thuốc trong nhiều năm qua đã được sử dụng rất rộng rãi Sự phát triển của thuốc nhằm đáp ứng nhu cầu của con người.
- Quản lý hiệu thuốc là một đề tài không còn mới mẻ với mọi người Trong phạm vi bài tập lớn nhóm chúng em đã đề cập đến vấn đề “Quản
lý hiệu thuốc” qua hệ quản trị cơ sở dữ liệu SQL.
Trang 3PHẦN A GIỚI THIỆU BÀI TOÁN
I Đặc tả :
- Mỗi khoa có một mã khoa để quản lý, một tên khoa và ghi nhận năm thành lập khoa Mỗi khoá học có một mã để quản lý, năm bắt đầu khoá học và năm kết thúc khoá học Mỗi sinh viên có một mã để quản lý và thuộc về một lớp nào đó (xác định bởi maLop) Mỗi chương trình có một
mã để quản lý và một tên chương trình Mỗi môn học có một mã để quản
lý và thuộc về một khoa nào đó (xác định bởi maKhoa) Mỗi kết quả thì ghi nhận điểm của một sinh viên làm bài thi cho 1 môn học nào đó ở một lần thi cụ thể (1 sinh viên có thể thi 1 môn nào đó trên 1 lần) Mỗi dòng trong bảng này cho biết một môn học được giảng dạy tại một khoa nào đó trong một chương trình nào đó Trong chương trình này, môn học đó được quy định số tiết lý thuyết và thực hành cụ thể và tương đương với bao nhiêu tín chỉ (soTinChi bao gồm cả tín lý thuyết và thực hành) Một lớp
có một mã lớp để quản lý, thuộc về một khoa nào đó và mở ra cho một khoá học nhất định, trong một chương trình nhất định Số thứ tự được đánh giá tăng dần cho các lớp cùng khoá học và cùng khoa và cùng
chương trình.
II Phân tích lược đồ quan hệ :
Bảng danh mục thuốc (THUOC)
Trang 4Bảng danh mục nhà cung cấp (NCC)
Bảng danh mục nhân viên (NHANVIEN)
Bảng danh mục hóa đơn nhập (HDNHAP)
Bảng chi tiết phiếu nhập hàng (CTHDNHAP)
Trang 5Tên Ý nghĩa Kiểu Độ rộng
Bảng danh mục tồn kho (TONKHO)
Trang 6PHẦN B: THIẾT KẾ VÀ QUẢN TRỊ CƠ SỞ DỮ LIỆU
I Thiết kế cơ sở dữ liệu :
Trang 7Bảng danh mục hóa đơn nhập (HDNHAP)
Bảng chi tiết phiếu nhập hàng (CTHDNHAP)
Bảng danh mục tồn kho (TONKHO)
Trang 8II.Thiết kế procedure, view, trigger, function:
1 Thủ tục procedure:
1.1 Thủ tục thêm:
- 1.Thêm thuốc:
CREATE PROC Them_Thuoc
@MaThuoc char(10),@TenThuoc nvarchar(100),@DVTinh nvarchar(100),@SoLuong char(10),@LoaiThuoc
nvarchar(100),@Hansudung varchar(20)as
declare @ThemThuoc char(10)
if exists(select MaThuoc from Thuoc where @MaThuoc = MaThuoc)
begin
set @ThemThuoc = N'Mã thuốc đã tồn tại vui lòng nhập mã khác'
raiserror(@ThemThuoc,10,1)return
end
else begin
insert into Thuoc
values(@MaThuoc,@TenThuoc,@DVTinh,@SoLuong,@LoaiThuoc,@Hansudung)
end
Trang 9- 2 Thêm nhân viên:
CREATE PROC Them_NhanVien
@MaNV char(10),@TenNV nvarchar(100), @Chucvu nvarchar(100)as
declare @ThemNhanVien nchar(10)
if exists (select MaNV from NHANVIEN where @MaNV = MaNV)
begin
set @ThemNhanVien = N'Mã nhân viên đã tồn tại vui lòng nhập mã khác'
raiserror (@ThemNhanVien,10,1)return
end
else begin
insert into NHANVIEN
values (@MaNV,@TenNV,@Chucvu)end
Trang 10- 3 Thêm HDNhap:
CREATE PROC Them_HDNhap
@MaHDNhap char(10), @MaNCC char(10), @MaNV char(10),
@NgayNhap date
as
declare @ThemHDNhap nvarchar(10)
if exists (select MaHDNhap from HDNHAP where @MaHDNhap = MaHDNhap)
begin
set @ThemHDNhap = N'Mã đã tồn tại vui lòng nhập mã khác'
raiserror (@ThemHDNhap,10,1)return
end
else begin
insert into HDNHAPvalues(@MaHDNhap,@MaNCC,@MaNV,@NgayNhap)end
- 4 Thêm NCC:
CREATE PROC [dbo].[Them_NCC]
@MaNCC char(10),@TenNCC nvarchar(100),@Diachi
nvarchar(100),@Dienthoai varchar(10)
as
declare @ThemNCC char(10)
if exists(select MaNCC from NCC where @MaNCC = MaNCC)begin
set @ThemNCC = N'Mã NCC đã tồn tại vui lòng nhập mã khác'
raiserror(@ThemNCC,10,1)return
end
else begin
insert into NCCvalues(@MaNCC,@TenNCC,@Diachi,@Dienthoai)
end
Trang 11- 5 Thêm CTHDNHAP:
ALTER PROC [dbo].[Them_CTNHAP]
@MaHDNhap char(10), @MaThuoc char(10), @SlNhap int, @DgNhap money
as
declare @ThemCTNHAP nvarchar(10)
if exists (select MaHDNhap from CTHDNhap where @MaHDNhap
end
else begin
insert into CTHDNhap(MaHDNhap,MaThuoc,SlNhap,DgNhap)
values (@MaHDNhap,@MaThuoc,@SlNhap,@DgNhap)
end
- 6 Thêm hàng tồn kho :
create proc Them_TonKho
@MaThuoc char(10),@SLton int, @Hansudung datetime
as
declare @ThemTon nchar(20)
if not exists (select MaThuoc from THUOC where @MaThuoc = MaThuoc)
begin
set @ThemTon = N'Mã thuốc không tồn tại vui lòng nhập
mã khác'
raiserror(@ThemTon,10,1)return
end
else begin
insert into TONKHOvalues (@MaThuoc,@Slton,@Hansudung)end
exec Them_TonKho 'AS004','60','01-01-2020'
Trang 121.2 Thủ tục sửa :
- 1 Sửa Mã nhân viên:
CREATE PROC [dbo].[Sua_NhanVien]
@Chucvu nvarchar(100),@MaNV char(10)as
update NHANVIEN
set Chucvu = @Chucvu
where MaNV = @MaNV
- 2 Sửa Tên nhà cung cấp :
CREATE PROC [dbo].[SUA_TenNCC]
@DienThoai varchar(10), @MaNCC char(10)as
update NCC
set DienThoai =@DienThoai
where MaNCC = @MaNCC
- 3 Sửa hóa đơn nhập:
CREATE PROC [dbo].[Sua_HDNHAP]
@MaHDNHAP char (10) @MaNV char(10)as
update HDNHAP
set MaHDNHAP = @MaHDNHAP
where MaNV = @MaNV
- 4 Sửa Loại Thuốc:
CREATE PROC [dbo].[Sua_LoaiThuoc]
@LoaiThuoc nvarchar(100),@MaThuoc char(10)as
update Thuoc
set LoaiTHuoc = @LoaiThuoc
where MaThuoc = @MaThuoc
- 5 Sửa Số lượng tồn kho :
CREATE proc [dbo].[Sua_Soluongton]
@SLton int, @MaThuoc char(10)
as
update TONKHO
set SLton = @SLton
where MaThuoc = @MaThuoc
Trang 13- 6 Sửa phiếu nhập:
ALTER PROC [dbo].[Sua_CTHDNHAP]
@MaHDNHAP char (10) @MaThuoc char(10)
as
update CTHDNHAP
set MaHDNHAP = @MaHDNHAP
where MaThuoc = @MaThuoc
declare @MaThuoc char(10)
select @MaThuoc = MaThuoc from Thuoc
where CONVERT(char(10),@TenThuoc) =
CONVERT(char(10),TenThuoc)
delete from Thuoc where @TenThuoc = TenThuoc
- 2 Xóa Tên nhà cung cấp:
CREATE PROC [dbo].[Xoa_NCC]
@TenNCC nvarchar(100)
as
declare @MaNCC char(10)
select @MaNCC = MaNCC from NCC
where CONVERT(nvarchar(100),@TenNCC) =
CONVERT(nvarchar(100),TenNCC)
delete from NCC where @TenNCC = TenNCC
- 3 Xóa Hóa đơn nhập:
CREATE PROC [dbo].[Xoa_HDNhap]
@NgayNhap date
As
declare @MaHDNhap char(10)
Select @MaHDNhap = MaHDNhap from HDNHAPwhere CONVERT(date, @NgayNhap,103) =
CONVERT(date,NgayNhap,103)
Delete from HDNHAP where @NgayNhap = NgayNhap
Trang 14- 4 Xóa nhân viên:
CREATE PROC [dbo].[Xoa_NV]
@Chucvu nvarchar(100)
as
declare @MaNV char(10)
select @MaNV = MaNV from NHANVIEN
where CONVERT(nvarchar(100),@Chucvu) =
CONVERT(nvarchar(100),Chucvu)
delete from NhanVien where @Chucvu = Chucvu
- 5 Xóa thuốc hết hạn trong tồn kho :
CREATE PROC [dbo].[Xoa_thuochethan]
@Hansudung datetime
as
declare @MaThuoc char(10)
select @MaThuoc = MaThuoc from TONKHO
where CONVERT(DATETIME,@Hansudung,103) =
declare @MaHDNhap char(10)
Select @MaHDNhap = MaHDNhap from CTHDNHAPwhere CONVERT(money, @DgNhap,103) =
CONVERT(money,DgNhap,103)
Delete from CTHDNHAP where @DgNhap = DgNhap
Trang 162.4 Hiển thị tên thuốc,mã thuốc, hạn sử dụng sắp xếp theo thứ tự tăng dần.
2.5 Hiển thị các thông tin chi tiết hóa đơn nhập trong ngày 03/03/2030, các thông tin hiển thị gồm: Mã hóa đơn nhập,mã thuốc,số lượng nhập,tên thuốc.
Trang 172.6 Tạo bảng THUOC hiển thỉ danh sách các loại thuốc với các thông tin mã thuốc,tên thuốc,mã hóa đơn nhập,ngày nhập,số lượng
nhập,đơn giá nhập,thông tin hiển thị được sẽ sắp xếp tang dần theo
mã thuốc,tên thuốc và mã hóa đơn nhập.
2.7 Tạo bảng đơn giá nhập có dg là 70 nghìn đồng.
2.8 Hiển thị các thông tin nhập thuốc từ Nhà cung cấp có Mã nhà cung cấp là ‘NCC01’, các thông tin gồm: Mã nhà cung cấp, Tên nhà cung cấp, Ngày nhập, Mã thuốc, Số lượng nhập; kết quả được sắp xếp theo Ngày nhập giảm dần.
Trang 182.9 Hiển thị các thông tin thuốc được nhập bởi nhân viên có Mã nhân viên là ‘NV001’, các thông tin gồm: Mã nhân viên, Tên nhân viên, Ngày nhập, Mã thuốc, Số lượng nhập; kết quả được sắp xếp theo
Trang 192.11 Hiển thị các thông tin nhập thuốc từ Nhà cung cấp có Mã nhà cung cấp là ‘NCC02’, các thông tin gồm: Mã nhà cung cấp, Tên nhà cung cấp, Ngày nhập, Mã thuốc, Số lượng nhập; kết quả được sắp xếp theo Ngày nhập tăng dần.
2.12 Hiển thị tên thuốc,mã thuốc, hạn sử dụng sắp xếp theo thứ tự giảm dần.
2.13 Hiển thị tên thuốc, mã thuốc,hạn sử dụng có tên loại thuốc là thuốc an thần.
Trang 202.14 Hiển thị tên thuốc, mã thuốc,hạn sử dụng có tên loại thuốc là thuốc giảm đau.
2.15 Hiển thị thông tin thuốc có tên loại thuốc là thuốc đau bụng có hạn sử dụng là tháng 7/2025.
Trang 213 Trigger 1.Bảng CTHDNhap
FROM Thuoc
JOIN inserted ON Thuoc.MaThuoc = inserted.MaThuocEND
GO
Trang 24UPDATE HDNhap SET MaHDNhap = NgayNhap
(SELECT NgayNhap FROM inserted WHERE MaHDNhap = MaNCC.NgayNhap) +
(SELECT NgayNhap FROM deleted WHERE MaHDNhap
=MaNCC.NgayNhap)
FROM HDNhap
JOIN deleted ON HDNhap.MaHDNhap = deleted.MaHDNhap
END
Trang 25insert into HDNhap(SLNhap)
Select SLNhap from HDNhap
Trang 26-Thời gian phiếu nhập
CREATE TRIGGER trg_Thoi_Gian_Phieu_Nhap
Trang 27AS BEGINDeclare cur_PNHAP cursor
for Select SoDH from PNHAPOpen cur_PNHAP
Declare @SoPN char(4),@trigia moneyFetch next from cur_PNHAP into @SoPNWhile @@FETCH_STATUS=0
Close cur_PNHAPDeallocate cur_PNHAP
-Xóa ngày nhap
CREATE TRIGGER tr_PNHAP_Ngaynhap
ON PNHAPfor delete
AS BEGIN Nếu là thứ ba thì không cho thêm và hiện thông báo bên dưới
IF DATEPART(DW, GETDATE()) = 3 BEGIN
ROLLBACK PRINT N'Không thêm dữ liệu vào thứ ba!' END
Trang 28FROM inserted WHERE TenThuoc = SoLuong.TenThuoc )
From Thuoc a, DELETED b, INSERTED c
Where a.MaThuoc = b.MaThuoc
And a.MaThuoc = c.MaThuoc
And TenThuoc + b.MaThuoc - c.DvTinh < 0
Trang 294.1 Hàm tạo bảng
1. Hiển thị nhà cung cấp bằng cách truyền vào địa chỉ
CREATEFUNCTION NhaCC_DC (@Diachi nvarchar(100))
2. Hiển thị Danh sách thuốc bằng cách truyền vào loại thuốc
CREATEFUNCTION DSThuoc_LoaiThuoc (@LoaiThuoc nvarchar(100))
3. Hiển thị nhân viên bằng cách truyền chức vụ
CREATEFUNCTION DSNhanVien_Chucvu (@Chucvu nvarchar(100))
4. Hiển thi thuốc An thần hiện có
CREATEFUNCTION AnThan()
Trang 305 Hiển thị số lượng thuốc hiện có
CREATEFUNCTION SLThuoc (@MaThuoc char (10))
CREATEFUNCTION ThanhTien()
RETURNS @ThanhTien table(MaThuoc char(10),ThanhTien int)
AS
BEGIN
INSERTINTO @ThanhTien(MaThuoc,ThanhTien)SELECT MaThuoc,SLNhap * DgNhap as ThanhTien from CTHDNHAP Orderby ThanhTien
RETURN
END
2 Từ DSThuoc(@MaThuoc) truyền mã thuốc hiển thị tên thuốc, đơn vị tính, số lượng, loại thuốc và sắp xếp tên thuốc theo thứ tự a-z
CREATEFUNCTION DSThuoc (@MaThuoc char(10))
RETURNS @DSThuoc TABLE (TenThuoc nvarchar(10),DvTinh
nvarchar (100) SoLuong nvarchar (100), LoaiThuoc nvarchar (100))AS
BEGIN
INSERTINTO @DSThuoc
(TenThuoc,DvTinh,SoLuong,LoaiThuoc)
SELECT TenThuoc,DvTinh,SoLuong,LoaiThuoc from THUOC
where MaThuoc = @MaThuoc Orderby TenThuoc
RETURN
END
Trang 313 Từ DSNhanVien(@Chucvu) truyền vào chức vụ hiển thị
mã nhân viên, tên nhân viên ,sắp xếp tên nhân viên theo thứ tự từ a
- z
CREATEFUNCTION DSNhanVien (@Chucvu nvarchar(30))
RETURNS @DSNhanVien TABLE (MaNV char(10),TenNV
CREATEFUNCTION SoLuongT (@MaThuoc char(10))
RETURNS @SoLuongT TABLE (TenThuoc nvarchar(10),DvTinh
nvarchar (100) SoLuong nvarchar (100), LoaiThuoc nvarchar (100))AS
BEGIN
INSERTINTO @SoLuongT
(TenThuoc,DvTinh,SoLuong,LoaiThuoc)
SELECT TenThuoc,DvTinh,SoLuong,LoaiThuoc from THUOC
where MaThuoc = @MaThuoc Orderby SoLuong
RETURN
END
5. Từ DSTonKho(@MaThuoc) truyền vào mã thuốc hiển thị số lượng tồn, hạn sử dụng
CREATEFUNCTION DSTonKho (@MaThuoc char(10))
RETURNS @DSTonKho TABLE (SLton int Hansudung datetime)
Trang 334 Tổng nhân viên theo chức vụ
CREATEFUNCTION TongNV(@ChucVu nvarchar(30))RETURNSint
ASBEGIN
DECLARE @count int=nullSELECT @count=count(*)FROM NhanVien WHERE
@ChucVu=ChucVu
RETURN @count
ENDGOPRINTN'Tổng nhân viên là'PRINT dbo.TongNV(N'Nhân viên')
5 Tổng hóa đơn nhập
CREATEFUNCTION TongHDNhap()RETURNSint
ASBEGIN
DECLARE @count int=nullSELECT @count=count(*)FROM HDNhap
RETURN @count
END
Trang 34PHẦN C: KẾT LUẬN
- Tóm tắt nội dung đã làm được
o Khảo sát đơn vị thực tế, học viện Nông Nghiệp
o Thiết kế mô hình cơ sở dữ liệu quản lý sinh viên Học Viện Nông
Nghiệp
o Thiết kế cơ sở dữ liệu đáp ứng yêu cầu của người dùng:
View: Cho phép người dùng nhận cơ sở dữ liệu dưới các khung nhìn khác nhau
Procedure: Cho phép người dùng thực hiện thao tác thêm xoá sửa dữ liệu
Trigger: Đảm bảo toàn vẹn cơ sở dữ liệu khi người dùng thực hiện chèn/sửa/xoá
Funtion: Cho phép tính toán, trả về 1 giá trị/1 bảng dữ liệu
Trang 35NHẬN XÉT CỦA GIÁO VIÊN
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 36BẢNG PHÂN CÔNG NHIỆM VỤ
1 Khảo sát yêu cầu, thiết kế CSDL (các
bảng, mô hình quan hệ), viết báo cáo