Trong thời đại ngày nay, công nghệ thông tin đang được phát triển mạnh mẽ, nhanh chóng và xâm nhập vào nhiều lĩnh vực khoa học, kỹ thuật cũng như trong cuộc sống. Nó trở thành công cụ đắc lực trong nhiều ngành nghề như giao thông, quân sự, y học.... đặc biệt trong công tác quản lý nói chung và quản lý nhà hàng nói riêng. Trước đây, khi máy tính chưa được ứng dụng rộng rãi, các công việc quản lý nhà hàng đều được làm thủ công nên rất mất thời gian và tốn kém về nhân lực cũng như tài chính. Ngày nay, với sự phát triển công nghệ thông tin mà máy tính đã được sử dụng rộng rãi trong các cơ quan, nhà máy, trường học... giúp cho công việc được tốt hơn. Việc sử dụng máy tính vào công tác quản lý nhà hàng là một yêu cầu cần thiết nhằm xóa bỏ những phương pháp quản lý lạc hậu, lỗi thời gây tốn kém về nhiều mặt. Vì vậy, chúng em đã xây dựng đề tài “Quản lý nhà hàng ” với mong muốn giúp cho việc quản lý được dễ dàng, thuận tiện và tránh sai sót.
TRƯỜNG ĐẠI HỌC THỦY LỢI KHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN HỌC PHẦN: HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU ĐỀ TÀI: QUẢN LÝ CỬA HÀNG Giáo viên hướng dẫn: Nguyễn Ngọc Quỳnh Châu Sinh viên/nhóm sinh viên thực hiện: Trần Thanh An – 2051060374 - 62PM2 Huy Văn Bình - 2051060403 - 62PM2 Nguyễn Văn Đức - 2051060456 - 62PM2 Hà Nội, năm 2022 MỤC LỤC A MỞ ĐẦU Giới thiệu Mục đích Phương pháp B NỘI DUNG Thiết kế CSDL a Mô tả toán b Mơ hình quan hệ Lập trình a Cursor b Procedure c Function d View e Trigger A MỞ ĐẦU: Giới thiệu: Trong thời đại ngày nay, công nghệ thông tin phát triển mạnh mẽ, nhanh chóng xâm nhập vào nhiều lĩnh vực khoa học, kỹ thuật sống Nó trở thành cơng cụ đắc lực nhiều ngành nghề giao thông, quân sự, y học đặc biệt công tác quản lý nói chung quản lý nhà hàng nói riêng Trước đây, máy tính chưa ứng dụng rộng rãi, công việc quản lý nhà hàng làm thủ công nên thời gian tốn nhân lực tài Ngày nay, với phát triển cơng nghệ thơng tin mà máy tính sử dụng rộng rãi quan, nhà máy, trường học giúp cho công việc tốt Việc sử dụng máy tính vào cơng tác quản lý nhà hàng yêu cầu cần thiết nhằm xóa bỏ phương pháp quản lý lạc hậu, lỗi thời gây tốn nhiều mặt Vì vậy, chúng em xây dựng đề tài “Quản lý nhà hàng ” với mong muốn giúp cho việc quản lý dễ dàng, thuận tiện tránh sai sót Mục đích: Hệ thống “Quản lý nhà hàng ” thực quản lý danh mục món, danh sách bàn, danh sách nhân viên: (Thơng tin NV, tốn lương NV), lịch phân ca làm việc, danh bạ công thức pha chế, danh sách khoản thu chi, danh sách đại lý, nhà cung cấp, danh sách khách hàng cần thiết (khách VIP, khách quen…), giúp cho việc quản lý nhà hàng dễ dàng, thuận tiện tránh sai sót Phương pháp: o Phương pháp nghiên cứu: tham khảo, nghiên cứu số tài liệu, sách, báo, trang mạng sở tiến hành phân tích thiết kế hệ thống “Quản lý nhà hàng ” o Phương pháp nghiên cứu thực tiễn: Đến nhà hàng để khảo sát hệ thống tổ chức làm việc nhà hàng tham khảo số phần mềm quản lý số doanh nghiệp, công ty sử dụng để tạo phong phú hiệu cho đề tài B NỘI DUNG: Thiết kế CSDL: a Mơ tả tốn - Quản lý menu: bảng giá mặt hàng mặt hàng có nhà hàng - Quản lý bàn ăn: quản lý hóa đơn tính tạm bàn ăn cập nhật liên tục khách thêm - Lập hóa đơn tốn: hóa đơn tốn theo số lượng đơn giá ăn mà khách hàng gọi hệ thống tự động tính tổng tiền khách phải trả số tiền khách dư sau trả, lưu vào sở liệu để quản lý hóa đơn - Lập báo cáo: Hàng tháng nhân viên thu chi sử dụng chức quản lý thu chi hệ thống để tổng hợp lâp báo cáo tình hình thu/chi lợi nhuận tháng nhà hàng lên giám đốc vào ngày 28 hàng tháng để giám đốc có kế hoạch chi trả lương thưởng cho nhân viên vào ngày mùng tháng sau b CSDL Mơ hình quan hệ: Nhanvien Tên IDNhanVien Hoten Ngaysinh Gioitinh Kiểu liệu int nvarchar(50) date nvarchar(10) NgayBatDauDiLam date DiaChi Email SoDienThoai nvarchar(50) nvarchar(50) nvarchar(50) Khóa Primary key Ghi Mã nhân viên Tên nhân viên Ngày sinh Giới tính Ngày bắt đầu làm Địa Email Số điện thoại HoaDon Tên IDHoaDon IDKhachHang IDNhanVien NgayBan Kiểu liệu int int Int date Khóa Primary key Foreign key Foreign key Ghi Mã hóa đơn Mã khách hàng Mã nhân viên Ngày bán ChitietHoaDon Tên IDHoaDon IDSanPham SoLuong DonGiaBan TyLeGiamGia Kiểu liệu int int int float float Khóa Primary key Primary key Ghi Mã hóa đơn Mã sản phẩm Số lượng Đơn giá bán Tỷ lệ giảm giá Kiểu liệu int nvarchar(50) int int float nvarchar(50) Khóa Primary key Ghi Mã sản phẩm Tên sản phẩm Mã loại hàng Mã nguyên liệu Đơn giá Mơ tả Kiểu liệu int Khóa Primary key SanPham Tên IDSanPham TenSP IDLoaihang IDNguyenlieu Dongia Mota Foreign key Foreign key NguyenLieu Tên IDNguyenLieu Ghi Mã nguyên liệu TenNguyenLie u SoLuong IDNhaCungCap nvarchar(50) int int Foreign key Tên nguyên liệu Mã loại hàng Mã nhà cung cấp LoaiHang Tên IDLoaiHang TenLoaiHang Mota Kiểu liệu int nvarchar(50) nvarchar(50) Khóa Primary key Ghi Mã loại hàng Tên loại hàng Mô tả Kiểu liệu int nvarchar(50) nvarchar(10) nvarchar(50) nvarchar(50) nvarchar(50) Khóa Primary key Ghi Mã khách hàng Tên khách hàng Giới tính Địa Email Số điện thoại KhachHang Tên IDKhachHang HoTen GioiTinh DiaChi Email SoDienThoai NhaCungCap Tên IDNhaCungCa p TenCongTy DiaChi Website Kiểu liệu Khóa Ghi int nvarchar(50) nvarchar(50) nvarchar(50) Primary key ConGiaoDich int Mã nhà cung cấp Tên công ty Địa Website Tình trạng giao dịch Lập trình: a Cursor Sử dụng trỏ để in nhân viên bán nhiều thơng qua khung hình TongKetHoaDon DECLARE cau1 CURSOR DYNAMIC SCROLL FOR SELECT IDNhanVien FROM v_TongKetHoaDon GROUP BY IDNhanVien HAVING COUNT(IDNhanVien) >= ALL(SELECT COUNT(IDNhanVien) FROM v_TongKetHoaDon GROUP BY IDNhanVien); OPEN cau1; DECLARE @idNhanVien INT; FETCH FIRST FROM cau1 INTO @idNhanVien; WHILE (@@FETCH_STATUS = 0) BEGIN SELECT DISTINCT IDNhanVien, HoTenNhanVien FROM v_TongKetHoaDon WHERE IDNhanVien = @idNhanVien; FETCH NEXT FROM cau1 INTO @idNhanVien; END close cau1; Sử dụng trỏ để in sản phẩm có số lượng bán nhiều dựa vào khung hình ChiTietHoaDon DECLARE cau2 CURSOR DYNAMIC SCROLL FOR SELECT IDSanPham FROM v_ChitietHoaDon GROUP BY IDSanPham HAVING SUM(SoLuong) >= ALL(SELECT SUM(SoLuong) FROM v_ChitietHoaDon GROUP BY IDSanPham); OPEN cau2; DECLARE @idSanPham INT; FETCH FIRST FROM cau2 INTO @idSanPham; WHILE (@@FETCH_STATUS = 0) BEGIN SELECT DISTINCT IDSanPham, TenSp FROM v_ChitietHoaDon WHERE IDSanPham = @idSanPham; FETCH NEXT FROM cau2 INTO @idSanPham; END close cau2; DEALLOCATE cau2; Sử dụng trỏ để chứa toàn ghi.Sử dụng trỏ để in định dạng : ‘Tên SP…… Mô tả……’ declare cs2 cursor dynamic scroll for select TenSP, Mota from SanPham open cs2 declare @ten nvarchar(50) , @mota nvarchar(50); fetch first from cs2 into @ten, @mota while(@@FETCH_STATUS=0) begin print N'Tên SP:' + @ten + N' Mô tả:' + @mota fetch next from cs2 into @ten , @mota end close cs2; deallocate cs2; Sử dụng trỏ để in hóa đơn tên khách hàng: Mã hóa đơn, Tên hiển thị declare cs3 cursor dynamic scroll for select Hoadon.IDHoaDon, KhachHang.HoTen from Hoadon, KhachHang open cs3 declare @id int , @tenkh nvarchar(100); fetch first from cs3 into @id, @tenkh while(@@FETCH_STATUS=0) begin print N'Mã hóa đơn :' + cast(@id as char(10))+ N' Tên khách hàng: ' +@tenkh fetch next from cs3 into @id , @tenkh end close cs3; deallocate cs3; Sử dụng trỏ đến ghi Hóa đơn, in ra: “Mã hóa đơn ….Ngày bán … Tên nhân viên bán … ” declare cs5 cursor dynamic scroll for select IDHoaDon, ngayban, Hoten from Hoadon ,NhanVien where Hoadon.IDNhanVien = NhanVien.IDNhanVien open cs5 declare @id int, @ngayban date, @ten nvarchar(50); fetch first from cs5 into @id ,@ngayban, @ten; while( @@FETCH_STATUS =0) begin print N'Mã hóa đơn: ' + cast(@id as nvarchar(50)) + N' Ngày bán: ' + cast(@ngayban as nvarchar(50)) + N' Tên nhân viên bán: ' + @ten fetch next from cs5 into @id, @ngayban, @ten; end close cs5; deallocate cs5; Sử dụng trỏ để chứa ghi phiếu thống kê tài khoản Sử dụng trỏ để in theo định dạng “Tên hiển thị… số lượng hóa đơn” declare cs6 cursor dynamic scroll for select Hoten, count(IDHoaDon) from NhanVien, HoaDon where HoaDon.IDNhanVien = NhanVien.IDNhanVien group by Hoten open cs6 declare @ten nvarchar(50), @soluong int; fetch first from cs6 into @ten, @soluong; while( @@FETCH_STATUS =0) begin print N'Tên nhân viên: ' + @ten + N' Số lượng hóa đơn:' + cast(@soluong as char(10)) fetch next from cs6 into @ten, @soluong; end close cs6; deallocate cs6; i Trần Thanh An: 5, ii Huy Văn Bình: 3, iii Nguyễn Văn Đức 1,2 b Procedure Viết thủ tục hiển thị số lượng hóa đơn mà nhân viên thực create proc nhanvien @x nchar(10) output as begin declare @count int select @count= count(IDHoaDon) from HoaDon where @x=IDNhanVien print CONCAT(N'Nhân Viên',@x,N'đã làm', @count,N'Hóa Đơn') end; exec nhanvien'2' Viết thủ tục hiển thị số lượng sản phẩm create proc Dem @demsp int as begin declare @dem int; select @dem = count(*) from SanPham print N'Có ' +cast(@dem as char(4)) + N' SanPham' end; Viết thủ tục hiển thị số hóa đơn bán theo ngày nhập vào create or alter proc cau3 @date datetime as begin select HoaDon.NgayBan, count(*) as SoHoaDon from HoaDon where NgayBan = @date group by NgayBan end exec v2 '2022-02-14' Viết thủ tục trả tổng số tiền tất hóa đơn alter proc tongtiennh as begin declare @tong int; set @tong = 0; select @tong = sum(Soluong * DonGiaBan) from ChitietHoaDon print N'Tổng số tiền nhà hàng thu được: ' + cast(@tong as nvarchar(100)) end Viết thủ tục trả số lượng nguyên liệu mà nhà cung cấp cung ứng cho nhà hàng create proc SLNL @ncc nvarchar(50) as begin declare @dem int; select @dem = count(*) from NguyenLieu where IDNhaCungCap = (select IDNhaCungCap from NhaCungCap where TenCongTy = @ncc) print N'Nhà cung cấp: ' + @ncc + N' cung ứng ' + cast(@dem as nvarchar(10)) + N' nguyên liệu' end; Viết thủ tục trả số lượng sản phẩm mà loại hàng cung cấp create proc SLSPLH @type nvarchar(50) as begin declare @dem int; select @dem = count(*) from SanPham where IDLoaiHang = (select IDLoaiHang from LoaiHang where TenLoaiHang = @type) print N'Loại hàng ' + @type + N' có ' + cast(@dem as nvarchar(10)) + N' sản phẩm' end; i Trần Thanh An: 5, ii Huy Văn Bình: 1, iii Nguyễn Văn Đức: 3, c Function Viết hàm f_ThanhTien trả thành tiền sản phầm đơn hàng create function f_ThanhTien (@idhd int , @idsp int) returns float as begin declare @x float; select @x = SoLuong *DonGiaBan *(1- TyLeGiamGia*0.01) from ChiTietHoaDon where IDHoaDon = @idhd and IDSanPham = @idsp; return @x end Viết hàm tổng tiền hóa đơn CREATE or alter FUNCTION f_TongTien(@idHoaDon int) RETURNS float AS BEGIN RETURN (SELECT SUM(dbo.f_ThanhTien(@idHoaDon, IDSanPham)) FROM ChitietHoaDon where IDHoaDon = @idHoaDon group by IDHoaDon); END Function trả danh sách chi tiết sản phẩm đơn hàng bao gồm : IDSanPham, TenSanPham, TenLoaiHang, TenNguyenLieu, TenNhaCungCapNL,TyLeGiamGia, ThanhTien create or alter function cau3(@idhoadon int) returns table as return(select ChitietHoaDon.IDSanPham, SanPham.TenSP, LoaiHang.TenLoaiHang, NguyenLieu.TenNguyenLieu, NhaCungCap.TenCongTy, TyLeGiamGia, dbo.f_ThanhTien(@idhoadon, ChitietHoaDon.IDSanPham) as ThanhTien from ChitietHoaDon, NguyenLieu, SanPham, NhaCungCap, LoaiHang where ChitietHoaDon.IDSanPham = SanPham.IDSanPham AND SanPham.IDNguyenLieu = NguyenLieu.IDNguyenLieu AND NguyenLieu.IDNhaCungCap = NhaCungCap.IDNhaCungCap AND SanPham.IDLoaiHang = LoaiHang.IDLoaiHang AND ChitietHoaDon.IDHoaDon = @idhoadon) Viết hàm trả mã hóa đơn có nhiều sản phẩm create function hdslmax() returns table as return (select top(1) IDHoaDon, count(IDSanPham) as SoLuong from ChitietHoaDon group by IDHoaDon order by SoLuong desc) Viết hàm trả tên nhân viên có nhiều hóa đơn create function f_maxsp() returns table as return select HoTen from HoaDonNhanVien where SoLuong = (select max(SoLuong) from HoaDonNhanVien) Tìm hóa đơn với nhân viên id=1 create function timhoadon() returns table as return (select * from HoaDon where IDNhanVien=1) select * from timhoadon() i Trần Thanh An: 3, ii Huy Văn Bình: ,6 iii Nguyễn Văn Đức: 1, d View Tạo khung hình hiển thị chi tiết thơng tin hóa đơn bao gồm:IDHoaDon, IDSanPham, TenSanPham, TenLoaiHang, SoLuongBan, TenNguyenLieu,DonGiaBan, TyLeGiamGia,TongTienBan create view v_ChitietHoaDon as select IDHoaDon, SanPham.IDSanPham, TenSP, TenLoaiHang, ChitietHoaDon.SoLuong , TenNguyenLieu, DonGiaBan, TyLeGiamGia, dbo.f_ThanhTien(IDHoaDon, ChitietHoaDon.IDSanPham) AS TongTienBan From ChitietHoaDon JOIN SanPham ON ChitietHoaDon.IDSanPham = SanPham.IDSanPham JOIN LoaiHang ON SanPham.IDLoaiHang = LoaiHang.IDLoaiHang JOIN NguyenLieu ON NguyenLieu.IDNguyenLieu = SanPham.IDNguyenLieu SELECT * FROM v_ChitietHoaDon; Tạo khung hình hiển thị thơng tin tổng kết hóa đơn bao gồm IDHoaDon, IDKhachHang, HoTenKhachHang, GioiTinhKhachHang, IDNhanVien, HoTenNhanVien, NgayBan, TongTienHoaDon create view v_TongKetHoaDon as select IDHoaDon, KhachHang.IDKhachHang, KhachHang.HoTen HotenKhachHang, KhachHang.GioiTinh GioiTinhKhachHang, NhanVien.IDNhanVien, NhanVien.Hoten HotenNhanVien, HoaDon.NgayBan, dbo.f_TongTien(HoaDon.IDHoaDon) TongTienHoaDon FROM HoaDon JOIN KhachHang ON KhachHang.IDKhachHang = HoaDon.IDKhachHang JOIN NhanVien ON NhanVien.IDNhanVien = HoaDon.IDNhanVien select * from v_TongKetHoaDon Tạo khung nhìn hiển thị Tên sản phẩm, Đơn giá, Mã nguyên liệu,Tên Nguyên liệu,Mã loại hàng, tên loại hàng Create view SanPhamNguyenLieu as Select SanPham.TenSP, SanPham.Mota, Nguyenlieu.IDNguyenLieu, Nguyenlieu.TenNguyenLieu as'TenNguyenLieu', LoaiHang.IDLoaiHang, LoaiHang.TenLoaiHang as 'TenLoaiHang' from SanPham, Nguyenlieu, LoaiHang where SanPham.IDNguyenLieu = Nguyenlieu IDNguyenLieu and SanPham.IDLoaiHang = LoaiHang.IDLoaiHang Group By SanPham.TenSP, SanPham.Mota, Nguyenlieu.IDNguyenLieu, Nguyenlieu.TenNguyenLieu, LoaiHang.IDLoaiHang, LoaiHang.TenLoaiHang Tạo khung nhìn hiển thị số lượng hóa đơn mà nhân viên thực Create view HoaDonNhanVien as select HoTen, count(IDHoaDon) as SoLuong from NhanVien, HoaDon where NhanVien.IDNhanVien = HoaDon.IDNhanVien group by HoTen Tạo khung nhìn tổng hợp tên sản phẩm bán nhiều Create view SoluongNguyenLieu as select Nguyenlieu.tennguyenlieu, Nguyenlieu.soluong from Nguyenlieu where soluong > Tạo khung nhìn hiển thị loại hàng số lượng sản phẩm loại hàng create view loaihangsp as select TenLoaiHang, count(IDSanPham) as SoLuong from LoaiHang, SanPham where LoaiHang.IDLoaiHang = SanPham.IDLoaiHang group by TenLoaiHang i Trần Thanh An: 5, ii Huy Văn Bình: 3, iii Nguyễn Văn Đức: 1, e Trigger Tạo trigger tự động cập nhật tổng tiền hóa đơn người dùng thay đổi số lượng sản phẩm hóa đơn ALTER TABLE ChiTietHoaDon ADD ThanhTien MONEY GO CREATE OR ALTER TRIGGER ThanhTienNhap ON ChiTietHoaDon FOR UPDATE AS BEGIN DECLARE @soHDN NVARCHAR(20), @donGiaNhap MONEY, @maHang NVARCHAR(20) SELECT @soHDN = IDHoaDon, @maHang = IDSanPham FROM inserted UPDATE ChiTietHoaDon SET ThanhTien = (SoLuong * DonGiaBan) where IDHoaDon = @soHDN AND IDSanPham = @maHang END GO Tạo trigger tự động cập nhật tổng tiền hóa đơn người dùng thêm, xóa sản phẩm khỏi chi tiết hóa đơn ALTER TABLE HoaDon ADD TongTien MONEY GO CREATE OR ALTER TRIGGER TongTienBan ON ChiTietHoaDon FOR INSERT, UPDATE, DELETE AS BEGIN DECLARE @inSoHDB NVARCHAR(20), @deSoHDB NVARCHAR(20), @inThanhTien MONEY, @deThanhTien MONEY SELECT @inSoHDB = IDHoaDon, @inThanhTien = ThanhTien FROM inserted SELECT @deSoHDB = IDHoaDon, @deThanhTien = ThanhTien FROM deleted UPDATE HoaDon SET TongTien = ISNULL(TongTien, 0) + ISNULL(@inThanhTien,0) - ISNULL(@deThanhTien, 0) WHERE IDHoaDon = ISNULL(@inSoHDB, @deSoHDB) END GO Tạo trigger tự động cập nhật trạng thái bàn ăn (về trống) trạng thái hóa đơn tốn create trigger triggger1 on HoaDon for update as begin IF( (SELECT TrangThai from inserted) = 'Thanh Toan') UPDATE BanAn SET TrangThai = 'Trong' WHERE IDBanAn = (SELECT IDBanAn from inserted) PRINT N'Bàn ăn trống' ELSE: PRINT N'Hóa đơn chưa tốn' end Tạo trigger xóa nhân viên hóa đơn nhân viên bị xóa theo GO CREATE OR ALTER TRIGGER XoaHD ON HoaDon INSTEAD OF DELETE AS ... mềm quản lý số doanh nghiệp, công ty sử dụng để tạo phong phú hiệu cho đề tài B NỘI DUNG: Thiết kế CSDL: a Mơ tả tốn - Quản lý menu: bảng giá mặt hàng mặt hàng có nhà hàng - Quản lý bàn ăn: quản. .. dụng máy tính vào cơng tác quản lý nhà hàng yêu cầu cần thiết nhằm xóa bỏ phương pháp quản lý lạc hậu, lỗi thời gây tốn nhiều mặt Vì vậy, chúng em xây dựng đề tài ? ?Quản lý nhà hàng ” với mong muốn... số tài liệu, sách, báo, trang mạng sở tiến hành phân tích thiết kế hệ thống ? ?Quản lý nhà hàng ” o Phương pháp nghiên cứu thực tiễn: Đến nhà hàng để khảo sát hệ thống tổ chức làm việc nhà hàng tham