Tải bản đầy đủ (.docx) (22 trang)

Bài tập lớn môn học thiết kế cơ sở dữ liệu cơ sở thực tế bài toán quản lý siêu thị mini

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (954.72 KB, 22 trang )

TRƯỜNG ĐẠI HỌC GIAO THÔNG VÂN TẢI

KHOA CÔNG NGHỆ THÔNG TIN
---------------o0o---------------

Bài tập lớn môn học

Thiết Kế Cơ Sở Dữ Liệu
Giảng viên hướng dẫn: Nguyễn Kim Sao
Nhóm thực hiện: Nhóm 12
Lớp: CNTT2
Sinh viên thực hiện:
Mai Duy Chinh
Chu Mạnh Quân
Nguyễn Minh Quý
Hoàng Minh Đức
Trần Đức An
Nguyễn Quang Huy

Hà Nội, tháng 9 năm 2022


Lời nói đầu
Cơng nghệ thơng tin là một ngành đang phát triển rất mạnh trên đất nước ta hiện nay.
Việc ứng dụng công nghệ thông tin trong các lĩnh vực của đời sống cịn nhiều hạn chế.
Để nâng cao tính ứng dụng của công nghệ thông tin trong lĩnh vực kinh doanh và dịch
vụ, chúng em đã quyết định chọn đề tài “Xây dựng hệ thống quản lý siêu thị mini”. Mục
tiêu của bài tập này là phân tích, thiết kế để xây dựng được chương trình quản lý siêu thị
với nhiều tính năng phục vụ cho việc quản lý bán các sản phẩm dễ dàng hơn.
Mục lục


I.

KHẢO SÁT ....................................................................................................

AI.

PHÂN TÍCH THIẾT KẾ ................................................................................
1. Các kiểu thực thể liên kết ..........................................................................
2. Mơ hình thực thể liên kết ..........................................................................

BI.

XÂY DỰNG VÀ QUẢN TRỊ HỆ THỐNG CSDL TRÊN SQL SEVER
1. View .........................................................................................................
2. Trigger ......................................................................................................
3. Thủ tục ......................................................................................................
4. Hàm ..........................................................................................................
5. Câu lệnh điều khiển dữ liệu ......................................................................

IV.

.....

XÂY DỰNG CHƯƠNG TRÌNH KẾT NỐI ..................................................


I.

KHẢO SÁT
1. Cơ sở thực tế bài toán quản lý siêu thị mini

Siêu thị là mơ hình kinh doanh khá phổ biến.
Nguồn hàng chủ yếu do các nhà cung cấp, nhà sản xuất.
Khách hàng của siêu thị chủ yếu là người tiêu dùng
Siêu thị có đa dạng các mặt hàng, sản phẩm.
Vì vậy cần một hệ thống quản lý để giúp cho việc quản lý siêu thị được dễ
dàng hơn.
f) Các hoạt động chính của siêu thị gồm nhập hàng vào kho, bán hàng, báo cáo số
lượng và doanh thu hàng bán.
a)
b)
c)
d)
e)

2. Những nghiệp vụ chính yếu
-

Nghiệp vụ quản lý bán hàng:
+ Xuất hiện: Có khách hàng đến mua hàng.
+ Cách thực hiện: Tính tiền cho khách, lập hóa đơn và cập nhật vào CSDL.
- Nghiệp vụ quản lý nhập hàng
+ Xuất hiện: Khi nhập hàng hóa từ nhà cung cấp.
+ Cách thực hiện: Lập phiếu nhập, lưu thông tin hàng hóa vào CSDL.
- Nghiệp vụ quản lý bảo hành:
+ Xuất hiện: Khi khách hàng mua sản phẩm có bảo hành từ siêu thị.
+ Cách thực hiện: Lập phiếu bảo hành sản phẩm và cập nhật CSDL.
- Nghiệp vụ thống kê tổng hợp:
+ Xuất hiện: Khi cần thống kê kinh doanh siêu thị.
+ Cách thực hiện: Tính tổng đơn giá nhập và bán sản phẩm và cập
nhật CSDL.


3. Khảo sát chung

/>


Tổng hợp khảo sát:



4. Khảo sát nhân viên

/>

Tổng hợp khảo sát:



5. Khảo sát khách hàng

/>


Tổng hợp khảo sát:



AI.

PHÂN TÍCH THIẾT KẾ


1. Chức năng
2. Mơ hình thực thể


3. Cách chuyển đổi

4. Chuyển đổi các kiểu thực thể, mối liên

kết Mô tả cấu trúc dữ liệu bảng:


5. Mơ hình Diagram

III. XÂY DỰNG VÀ QUẢN TRỊ HỆ THỐNG CSDL TRÊN SQL SEVER
1. View
--Câu 1: tạo View đưa ra danh sách nhân viên có ngày vào làm từ năm 2015 trở đi
create view Cau1
as
Select TenNV As N'Họ Tên Nhân viên ',MaNV As N'Mã Nhân viên ',DiaChi As N'Địa chỉ
',NgayVaoLam As N'Ngày vào làm '
From tNhanVien
Where NgayVaoLam>=2015
select * from Cau1
--Câu 2: Tạo view đưa ra khách hang mua trong ngày ……….
create view Cau2
as
Select tKhachHang.* from tKhachHang join tHoaDonBan on tKhachHang.MaKH
=tHoaDonBan.MaKH Where tHoaDonBan.NgayBan = N'2019-04-12T00:00:00.000'
select * from Cau2

--Câu 3: Tạo view đưa ra hang hóa nhập trong tháng 4/2019
create view Cau3
as
select tHangHoa.* from tPhieuNhap join tChiTietPN on tPhieuNhap.MaPN = tChiTietPN.MaPN
join tHangHoa on tHangHoa.MaHH = tChiTietPN.MaHH
where month(tPhieuNhap.NgayNhap) = 4 and year(tPhieuNhap.NgayNhap) =
2019 select * from Cau3
--Câu 4: tạo view đưa ra danh sách hang hóa hết HSD ###
create view Cau4
as
Select TenHH As N'Tên hàng hóa ',MaHH As N'Mã hàng hóa ',NSX As N'Ngày sản xuất ' From
tHangHoa
Where HSD <= getdate()
select * from Cau4
--Câu 5: Tạo view đưa ra khách hang có số hóa đơn lớn hơn 3
create view Cau5
as
select tHoaDonBan.MaKH, TenKH, DiaChi, DienThoai, GioiTinh, count(MaHDB) as SoLuongHD
from tKhachHang join tHoaDonBan on tKhachHang.MaKH = tHoaDonBan.MaKH
group by tHoaDonBan.MaKH, TenKH, DiaChi, DienThoai, GioiTinh
having count(MaHDB) > 3


select *from Cau5
--Câu 6: Tạo view đưa ra nhân viên có số lượng xuất lớn hơn 2
create view Cau6
as
Select tNhanVien.MaNV, TenNV, DiaChi, DienThoai , count(MaPX) as SoLuongXuat from
tNhanVien join tPhieuXuat on tNhanVien.MaNV =tPhieuXuat.MaNV


group by tNhanVien.MaNV, TenNV, DiaChi, DienThoai
having Count(MaPX) > 2
select * from Cau6
--Câu 7: tạo view danh sách hang hóa có cùng nhà cung cấp “Thái Bảo”
create view Cau7
as
Select tHangHoa.* from tHangHoa join tNhaCungCap on tHangHoa.MaNCC
=tNhaCungCap.MaNCC Where tNhaCungCap.TenNCC = N'Thái Bảo'
select * from Cau7
--Câu 8: Tạo view đưa ra danh sách hàng hóa có cùng nhóm hàng "thực phẩm" .
create view Cau8
as
Select tHangHoa.* from tHangHoa join tNhomHang on tHangHoa.MaNH
=tNhomHang.MaNH Where tNhomHang.TenNH = N'thực phẩm'
select * from Cau8

2. Trigger
--Câu 1: Viết một trigger xóa tự động bản ghi về hóa đơn bán của khách hàng khi xóa dữ liệu
khách hàng đó trong bảng khách hàng
go
create or alter trigger Cau1_trigger on tkhachhang for delete as begin
declare @makh nvarchar(20)
select @makh = deleted.MaKH from deleted
delete from tChiTietHDB
from tChiTietHDB join tHoaDonBan on tChiTietHDB.MaHDB =
tHoaDonBan.MaHDB where tHoaDonBan.MaKH = @makh
delete from tHoaDonBan
where tHoaDonBan.MaKH = @makh
end
--đang lỗi

--Câu 2: Thêm trường đơn giá cho bảng Chi tiết HDB ,Viết trigger cho cập nhập tự động cho bảng
này
alter table tchitietHDB
add Dongia int
go
create or alter trigger Cau2_trigger on tchitiethdb for insert,update as begin
declare @mahdb1 nvarchar(20),@mahdb2 nvarchar(20),@mah
nvarchar(20),@mah2 nvarchar(20),@dongia1 int,@dongia2 int
select @mahdb1 = inserted.MaHDB,
@mah = inserted.MaHH from inserted


select @mahdb2 = deleted.MaHDB,
@mah2 = deleted.MaHH from deleted
select @dongia1 = tHangHoa.DonGiaBan from tHangHoa join inserted on inserted.MaHH
= tHangHoa.MaHH
where inserted.MaHDB = @mahdb1
select @dongia2 = tHangHoa.DonGiaBan from tHangHoa join deleted on deleted.MaHH
= tHangHoa.MaHH
where deleted.MaHDB = @mahdb2
update tChiTietHDB
set Dongia = isnull(Dongia ,0)-isnull(@dongia2,0)+isnull(@dongia1,0) where
tChiTietHDB.MaHDB = isnull(@mahdb1,@mahdb2) and tChiTietHDB.MaHH =
isnull(@mah,@mah2)
end
UPDATE tChiTietHDB
SET Dongia = '27800'
WHERE MaHH ='H01'
insert into tChiTietHDB values(N'HDB01',N'H03',7,NULL,NULL)
select * from tchitiethdb

--Câu 3 Thêm trường tổng tiền cho bảng chi tiêt HDB ,Viết trigger tự động tính tổng tiền và cập
nhập Tổng tiền = số lượng * đơn giá
alter table tchitiethdb
add Tongtien int
go
create trigger Cau3_trigger on tchitiethdb for insert,update as begin
declare @mah nvarchar(20),@shdb nvarchar(20)
select @mah = inserted.MaHH,
@shdb = inserted.MaHDB from inserted
declare @tt int
select @tt = inserted.SLBan*tHangHoa.DonGiaBan from inserted join tHangHoa on
tHangHoa.MaHH = inserted.MaHH
where inserted.MaHDB = @shdb
update tChiTietHDB
set Tongtien = @tt
end
--Câu 4: Viết trigger gắn với bảng hàng hóa dựa trên sự kiện Insert, Update để tự động xếp
loại Nhiều hay ít về số lượng hàng hóa , cách thức xếp loại như Số lượng >100 là nhiều,
ngược lại là ít
alter table thanghoa
add tinhtrang nvarchar(20)
create trigger Cau4_trigger on thanghoa for insert,update as
begin
declare @mah nvarchar(20),@tt nvarchar(20)
select @mah = inserted.MaHH from inserted
declare @sl int
select @sl = inserted.SoLuong from inserted
if @sl > 100 set @tt = N'Nhiêu'
else set @tt = N'Ít'
update tHangHoa

set TinhTrang = @tt


where tHangHoa.MaHH = @mah
end
--Câu 5: Viết một Trigger gắn với bảng hàng hóa dựa trên sự kiện Insert, Update để tự động cập
nhật Ngày cịn sử dụng của hàng hóa khi thêm mới hay cập nhật hàng hóaNgày cịn sử dụng=
HSD – ngày SX
alter table thanghoa
add Ngayconhsd int
create or alter trigger Cau5_trigger on thanghoa for insert,update as begin
declare @mah nvarchar(20)
select @mah = inserted.MaHH from inserted
declare @sn int
select @sn = datedif(day,inserted.NSX,inserted.HSD) from inserted
update tHangHoa
set Ngayconhsd = @sn
where tHangHoa.MaHH = @mah
end
go
insert into tHangHoa values(N'H15',N'Thảm trải nhà quý tộc',N'NSX10','2019-08-11
00:00:00.000','2024-08-11
00:00:00.000',N'NH02',N'NCC05',3000000,4600000,300,NULL,N'Nhiêu',NULL)
--Câu 6: them trường thâm niên cho nhân viên,Viết trigger tự động tính năm thâm niên cho từng
nhân viên Thâm niên = năm- ngày vào làm
alter table tnhanvien
add Thamnien int
create trigger Cau6_trigger on tnhanvien for insert,update as
begin
declare @mnv nvarchar(20)

select @mnv = inserted.MaNV from inserted
declare @sn int
select @sn = datedif(year,inserted.NgayVaoLam,getdate()) from inserted
update tNhanVien
set Thamnien = @sn
where tNhanVien.MaNV = @mnv
end

3. Thủ tục
--Câu 1: Tạo thủ tục đầu vào là ngày bán đầu ra số lượng hóa đơn bán dc trong ngày đó
create procedure Cau1_tt(@ngayban datetime, @slban int output)
as begin
select @slban = count(tChiTietHDB.MaHDB)
from tChiTietHDB join tHoaDonBan on tChiTietHDB.MaHDB =
tHoaDonBan.MaHDB where NgayBan = @ngayban
end
declare @slhdban int
exec Cau1_tt '2020-01-01', @slhdban output
print @slhdban
--Câu 2: Tạo thủ tục đầu vào là mã hàng đầu ra là tên hàng hóa ,nhà sản xuất
create procedure Cau2_tt @mah nvarchar(20),@tenh nvarchar(20) output,@tnsx nvarchar(20)
output as
begin


select @tenh = TenHH,
@tnsx = tNhaSanXuat.TenNSX from tHangHoa join tNhaSanXuat on
tHangHoa.MaNSX = tNhaSanXuat.MaNSX
where tHangHoa.MaHH = @mah
end

declare @tenh nvarchar( 20),@tnsx nvarchar(20)
exec Cau2_tt'H02',@tenh output,@tnsx output
print @tenh
print @tnsx
--Câu 3: Tạo thủ tục đầu vào là mã nhân viên đầu ra là số lượng nhập của nhân viên đó
create or alter procedure Cau3_tt(@manv nvarchar(20), @slnhap int output)
as begin
select @slnhap = count(tPhieuNhap.MaPN)
from tNhanVien join tPhieuNhap on tNhanVien.MaNV =
tPhieuNhap.MaNV where tNhanVien.MaNV = @manv
end
declare @slnhapvao nvarchar(20)
exec Cau3_tt N'NV06', @slnhapvao output
print @slnhapvao
--Câu 4: Tạo thủ tục đầu vào là mã khách hàng,ngày bán, đầu ra là số hóa đơn của khách
hàng đó
create procedure Cau4_tt @makh nvarchar(20),@ngayban datetime, @shd nvarchar(20)
output as
begin
end
--Câu 5: Tạo thủ tục đầu vào là Mã hàng hóa, mã phiếu nhập đầu ra là tên hàng hóa và ngày
nhập
create or alter procedure Cau5_tt @mahh nvarchar(20),@maph nvarchar(20), @tenhh
nvarchar(20) output, @ngaynhap datetime output as
begin
select @tenhh = tHangHoa.TenHH,
@ngaynhap = tPhieuNhap.NgayNhap
from tHangHoa join tNhaCungCap on tHangHoa.MaNCC =
tNhaCungCap.MaNCC join tPhieuNhap on tNhaCungCap.MaNCC =
tPhieuNhap.MaNCC


where tPhieuNhap.MaPN = @maph and tHangHoa.MaHH =
@mahh end
declare @tenhh nvarchar(20),@ngaynhap datetime
exec Cau5_tt N'H01',N'PN01',@tenhh output,@ngaynhap output
print N'Tên hàng hóa: '+cast(@tenhh as nvarchar(20)) print
N'Ngày nhập: '+cast(@ngaynhap as nvarchar(20))

--Câu 6: Tạo thủ tục đầu vào là Mã Hóa đơn đầu ra là tên khách hàng ,sdt khách hàng đó create
procedure Cau6_tt @mahd nvarchar(20), @tenkh nvarchar(20) output,@sdt nvarchar(20) output
as
begin
select @tenkh =tKhachHang.TenKH,
@sdt = tKhachHang.DienThoai
from tKhachHang join tHoaDonBan on tKhachHang.MaKH =
tHoaDonBan.MaKH where tHoaDonBan.MaHDB = @mahd
end


declare @tenkh nvarchar(20),@sdt nvarchar(20)
exec Cau6_tt N'HDB01',@tenkh output,@sdt output
print N'Tên khách hàng: '+cast(@tenkh as nvarchar(20))
print N'SĐT: ' + cast(@sdt as nvarchar(20))

4. Hàm
--Câu 1: Tạo hàm với đầu vào là năm, đầu ra là danh sách nhân viên vào làm vào năm đó
create function Cau1_h(@nam int) returns table as
return(
select tNhanVien.* from tNhanVien
where year(tNhanVien.NgayVaoLam) = @nam

)
select * from Cau1_h(2018)
--Câu 2. Tạo hàm với đầu vào là số thâm niên (số năm làm việc) đầu ra là danh sách nhân viên
có thâm niên đó
create function Cau2_h (@tl int)
returns table
as return(
select MaNV, MaCV, TenNV, GioiTinh, NgayVaoLam, DiaChi, DienThoai, DATEDIFF(Year,
NgayVaoLam, GetDate()) as ThamLien
from tNhanVien
where DATEDIFF(Year, NgayVaoLam, GetDate()) = @tl
)
select * from Cau2_h('4')
--Câu 3. Tạo hàm đầu vào là chức vụ đầu ra là những nhân viên cùng chức vụ đó
create function Cau3_h (@tl nvarchar(20))
returns table
as return(
select MaNV, tNhanVien.MaCV , TenNV, GioiTinh, NgayVaoLam, DiaChi, DienThoai
from tNhanVien join tChucVu on tNhanVien.MaCV = tChucVu.MaCV
where TenCV = @tl
)
select * from Cau3_h(N'Nhân viên thu ngân')
--Câu 4: Tạo hàm đầu vào là mã khách hàng đầu ra là số lượng hóa đơn của khách hàng đó
create function Cau4_h(@tl nvarchar(20))
returns int as
begin
declare @shd int
select @shd= count(tHoaDonBan.MaHDB) from tHoaDonBan where tHoaDonBan.MaKH
= @tl return @shd
end

print dbo.Cau4_h('KH03')
--Câu 5: tạo hàm đưa ra danh sách hàng hóa tồn kho quá 1 tháng (bán nhưng không hết trong 1
tháng)
--Câu 6: Tạo hàm đầu vào là mã nhóm hàng đầu ra là thơng tin hàng hóa ,ngày sản xuất.
create or alter function Cau6_h(@tl nvarchar(20))
returns table


as return(
select TenHH, NSX, TenNH,tNhomHang.MaNH
from tHangHoa join tNhomHang on tHangHoa.MaNH =
tNhomHang.MaNH Where tNhomHang.MaNH = @tl
)
select * from Cau6_h(N'NH04')

5. Câu lệnh điều khiển dữ liệu

IV.

XÂY DỰNG CHƯƠNG TRÌNH KẾT NỐI

Chương trình gồm các form

KẾT LUẬN
Tài liệu thao khảo



×