MỞ ĐẦU Để góp phần nâng cao hiệu quả của việc quản lý quán ăn. Ý nghĩa của phần mềm này giúp dễ dàng quản lý thông tin nhân viên, thông tin món ăn, lập hoá đơn và thanh toán. Page 3 Tieu luan 4 Tài Liệu Báo Cáo Dự Án Với chủ đề “ xây dựng phần mềm quản lý quán ăn” nhóm em chỉ thực hiện dưới dạng nghiên cứu và xây dựng các chức năng dựa vào việc tìm hiểu thực tế và những kiến thức được học trên lớp, Nhưng với những nghiên cứu dưới đây sẽ là nền tảng để phát triển sâu rộng hơn cho những đồ án môn học sau này. Do là lần đầu tiên chúng em tự xây dựng và thiết kế phần mềm.
Kèm với những sự hạn chế ở khả năng cũng như kiến thức thực tế. Xin thầy thông cảm những sai xót của em. Hiện trạng Trong thời buổi công nghệ hiện nay, các hình thức quản lý thủ công trước kia bắt đầu giảm bớt do những sự cố sai xót đáng tiếc ảnh hưởng đến người tiêu dùng khách hàng lẫn các doanh nghiệp thương mại. Thay vào đó, những phần mềm công nghệ ngày càng xuất hiện đa dạng, hổ trợ hầu hết các lĩnh vực.Những phần mềm đem lại những lợi ích vô cùng to lớn, hạn chế được những sai xót đáng tiếc khi dùng phương pháp thủ công trước kia.
Nhận thấy được nhu cầu trên cùng với qua tìm hiểu, em xin xây dựng hệ thống phần mềm “Quản lý quán ăn”. Ưu điểm ➢ Quản lý các món ăn và tài liệu về các món ăn rõ ràng 2. Nhược điểm ➢ Bảo mật kém ➢ Mọi thống kê phải viết bằng tay không tự động ➢ Cần rất nhiều nhân viên để làm nhiều công việc khác nhau b. Hệ Thống Mới 1.
Ưu điểm ➢ Bảo mật tốt ➢ Tìm kiếm và thống kê nhanh chống ➢ Không cần nhiều nhân viên ➢ Bán hàng một cách nhanh chống Page 4 Tieu luan 5 Tài Liệu Báo Cáo Dự Án 2. Nhược điểm ➢ Các nhân viên mới cần kiến thức cơ bản về việc sử dụng máy tính 2. Yêu cầu hệ thống a. Yêu cầu hệ thống 1.
Yêu cầu về phần cứng ➢ Ram: 4gb ➢ CPU: i3 trở lên 2. Yêu cầu về công nghệ ➢ JDK 1.8 ➢ Ngôn ngữ lập trình: Java ➢ Phần mềm lập trình:Netbean và SQL server b. Yêu cầu của người dùng 1. Yêu cầu lưu trữ ➢ Thông tin nhân viên ➢ Thông tin món ăn ➢ Thông tin bán hàng 2.
Yêu cầu quản lý ➢ Quản lý nhân viên ➢ Quản lý món ăn ➢ Quản lý bán hàng 3. Yêu cầu thống kê ➢ Thống kê doanh thu tháng, năm,Top 5 món bán chạy 4. Yêu cầu bảo mật ➢ Tất cả thành viên phải đăng nhập mới được sử dụng phần mềm ➢ Admin mới có thể xem được thống kê Doanh thu ➢ Nhân viên không được phép thêm sửa xoá thông tin của nhân viên khác 3. Usecase tổng quát hệ thống quản lý quán ăn Page 5 Tieu luan 6 Tài Liệu Báo Cáo Dự Án Page 6 Tieu luan Hình 1 b.
Usecase Quản Lý Nhân Viên Hình 2 c. Usecase Quản Lý Món Ăn Tieu luan 8 Tài Liệu Báo Cáo Dự Án Hình 3 d. Usecase Quản Lý Bán Hàng Page 8 Tieu luan 9 Tài Liệu Báo Cáo Dự Án Hình 4 e. Usecase Thống Kê Hình 5 Page 9 Tieu luan 10 Tài Liệu Báo Cáo Dự Án CHI TIẾT CÁC CHỨC NĂNG 1.
Các Usecase bảng Quản Lý(Nhân viên, Món Ăn,Bán Hàng) ➢ Các chức năng của các bảng Admin • Thêm: thêm các dữ liệu ghi trên bảng vào CSDL • Sửa: sửa các dữ liệu đang xem trên bảng • Xoá: xoá các dữ liệu đang xem trên bảng • Tìm kiếm: tìm kiếm các dữ liệu trong CSDL • Điều hướng: di chuyển trước và sau • Các chức năng(Thêm,sửa,xoá) cần được kiểm lỗi hợp lý với dữ liệu • Bán Hàng có chức năng order,Thanh Toán,In Hóa Đơn. Các Usecase Thống kê(Doanh thu) ➢ Thống kê Doanh thu(chỉ có tài khoản Admin được xem) 3. Chi tiết về yêu cầu bảo mật ➢ Tất cả chức năng phải đăng nhập mới được sử dụng ➢ Admin: được phép sử dụng tất cả chức năng ➢ Nhân viên: • Không được xem Thống kê doanh thu • Không được Thêm sửa xoá thông tin của các nhân viên khác II. Mô hình triển khai Page 10 Tieu luan 11 Tài Liệu Báo Cáo Dự Án 2.
Thiết kế CSDL a. Sơ đồ quan hệ thực thể(ERD)(cấp 1) b. Sơ đồ quan hệ thực thể(ERD)(cấp 2) Page 11 Tieu luan 12 Tài Liệu Báo Cáo Dự Án c. Thiết kế chi tiết các thực thể o Nhân Viên: STT Tên Trường Kiểu Dữ Liệu Ràng Buộc Mô Tả 1 MaNV Nchar(10) Not null Mã Nhân Viên 2 Password Nvarchar(30) Not null Mật Khẩu 3 VaiTro Bit Default 0 Vai Trò 4 HoTen Nvarchar(30) Not Null Họ và Tên 5 NgaySinh Date Not Null Ngày sinh 6 GioiTinh Bit Default 0 Giới tính 7 SDT Nvarchar(10) Not Null Số điện thoại o Món Ăn STT Tên Trường Kiểu Dữ Liệu Ràng Buộc Mô Tả 1 MaMon Nchar(10) Not Null Mã Món Ăn 2 Loai Bit Default 0 Loại 3 TenMon Nvarchar(50) Not Null Tên Món Ăn 4 DonVi Nvarchar(20) Null Đơn Vị 5 SoLuong Int Not Null Số Lượng 6 GiaTien Float Not Null Gía Tiền Page 12 Tieu luan 13 Tài Liệu Báo Cáo Dự Án 7 Hinh Nvarchar(50) null Hình o Hóa Đơn STT Tên Trường Kiểu Dữ Liệu Ràng Buộc Mô Tả 1 IDHoaDon int Not null Mã Hóa Đơn 2 MaNV Nchar(10) Not null Mã nhân viên 3 TenKH Nvarchar(30) Not null Tên Khách Hàng 4 Ban Nvarchar(15) Null Id bàn 5 TrangThai Nvarchar(30) Not Null Trạng Thái o Hóa Đơn Chi Tiết STT Tên Trường Kiểu Dữ Liệu Ràng Buộc Mô Tả 1 IDHoaDon int Not null Id hóa đơn 2 MaMon Nchar(10) Not Null Mã Món 3 SoLuong Int Not Null Số Lượng 4 ThanhTien Float Not Null Tổng Tiền 5 NgayThanhToan Date DEFAULT Ngày Thanh Toán GET DATE 3.
Thiết kế giao diện a. Sơ đồ tổ chức giao diện 1.Sơ đồ tổ chức giao diện Admin 2.Sơ đồ giao diện nhân viên Page 13 Tieu luan 14 Tài Liệu Báo Cáo Dự Án b. Thiết kế giao diện cho các chức năng nghiệp vụ 2.1:Thiết kế form màn hình chào 2.2:Thiết kế form đăng nhập Page 14 Tieu luan 15 Tài Liệu Báo Cáo Dự Án 2.3: Thiết kế form đổi mật khẩu 2.4: Thiết kế form trang chính Page 15 Tieu luan 16 Tài Liệu Báo Cáo Dự Án Hình 1 Hình 2 Hình 3 Page 16 Tieu luan 17 Tài Liệu Báo Cáo Dự Án Hình 4 Hình 5 2.5: Thiết kế form quản lý nhân viên 2.6: Thiết kế form quản lý món ăn Page 17 Tieu luan 18 Tài Liệu Báo Cáo Dự Án 2.7: Thiết kế form quản lý bán hàng Page 18 Tieu luan 19 Tài Liệu Báo Cáo Dự Án 2.8: Thiết kế form thống kê Page 19 Tieu luan 20 Tài Liệu Báo Cáo Dự Án III. Thực hiện viết mã 1.
Viết mã tạo CSDL a. Tạo CSDL CREATE DATABASE QuanLyQuanAn GO USE QuanLyQuanAn GO CREATE TABLE [dbo]. SQL truy vấn và thao tác 1.Nhân Viên Hành Động Câu Lệnh SQL Thêm INSERT INTO NhanVien(MaNV,Password,VaiTro,HoTen,NgaySinh,GioiTinh,SDT) VALUES(?,?,?,?,?,?,?) Cập Nhật UPDATE NhanVien SET Password=?,VaiTro=?,HoTen=?,NgaySinh=?,GioiTinh=?,SDT=? WHERE MaNV=? Xóa DELETE FROM NhanVien Where MaNV=? Truy Vấn Tất Cả SELECT * FROM NhanVien Truy Vấn Theo Mã SELECT *FROM NhanVien where MaNV = ? Page 21 Tieu luan 22 Tài Liệu Báo Cáo Dự Án 2.Bán Hàng Hành Câu Lệnh SQL Động Thêm Call sp_TruSoLuong(?,?,?,?,?,?,?) Cập Nhật update HoaDon set TrangThai = ? where IDHoaDon = ? Truy Vấn select hd.TrangThai from HoaDon as hd,HoaDonChiTiet as Đơn ct \n” + Chưa Thanh “where hd.IDHoaDon and hd.TrangThai = N’Chưa Thanh Toán’ Toán Truy Vấn select ma.TenMon from HoaDonChiTiet as ct,MonAn as ma where ct.MaMon and Mã ct.idHoaDon = ? Món theo id Hóa đơn Truy vấn select ct.SoLuong from HoaDonChiTiet as ct,MonAn as ma where ct.MaMon and số ct.IDHoaDon = ? lượng theo id hóa đơn Truy vấn select ma.GiaTien from HoaDonChiTiet as ct,MonAn as ma where ct.MaMon and giá ct.idHoaDon = ? tiền theo id hóa đơn In Hóa select đơn HoaDon.NgayThanhToan,Ban,TrangThai,sum(SoLuong) theo Soluong,sum(ThanhTien) from HoaDonChiTiet \n" + id hóa " Join HoaDon \n" + đơn " on HoaDonChiTiet.IDHoaDon \n" + " where HoaDonChiTiet.IDHoaDon = ? \n" + " Group by HoaDon.IDHoaDon,NgayThanhToan,TenKH,Ban,TrangThai Page 22 Tieu luan 23 Tài Liệu Báo Cáo Dự Án c. Các thủ tục lưu tổng hợp thống kê 1.Thống Kê CREATE PROC [dbo].[sp_ThongKeDoanhThu](@Year INT) AS BEGIN SELECT COUNT(hd.STT) STT, MAX(hdct.MaMon) MaMon, MAX(hd.MaNV) MaNV , SUM(DISTINCT hdct.SoLuong) SoLuong, MAX(hdct.NgayThanhToan) NgayThanhToan, SUM(hdct.ThanhTien) thanhtien FROM HoaDonChiTiet hdct JOIN HoaDon hd ON hd.IDHoaDon WHERE YEAR(NgayThanhToan) = @Year GROUP BY hd.STT END GO 2.Thống Kê Theo Tháng ALTER PROC [dbo].[sp_ThongKeThang](@Month INT) AS BEGIN SELECT hdct.MaMon MaMon, hd.MaNV MaNV, SUM(DISTINCT hdct.SoLuong) SoLuong, SUM(hdct.ThanhTien) ThanhTien FROM HoaDonChiTiet hdct JOIN HoaDon hd ON hd.IDHoaDon WHERE MONTH(NgayThanhToan) = @Month GROUP BY hdct.NgayThanhToan END GO 3.Top 5 Món Bán Chạy CREATE PROC [dbo].MaMon) MaMon, AVG(hdct.SoLuong)SoLuongTB, SUM(hdct.SoLuong) Tong FROM HoaDonChiTiet hdct GROUP BY hdct.SoLuong END GO 4.Thêm Hóa Đơn Và Trừ Trực Tiếp Vào Số Lượng CREATE proc [dbo].[sp_TruSoLuong] @id Nchar(10) , @manv nchar(10),@tenkh nvarchar(30) , @mamon nchar(10), @ban Nvarchar(15),@soluong int,@thanhtien float as begin if exists (Select * From HoaDon where IDHoaDon = @id) Page 23 Tieu luan 24 Tài Liệu Báo Cáo Dự Án begin insert into HoaDonChiTiet(IDHoaDon,MaMon,SoLuong,ThanhTien) values (@id,@mamon,@soluong,@thanhtien) Update MonAn set SoLuong = SoLuong - @SoLuong Where MaMon = @MaMon end else begin insert into HoaDon(IDHoaDon,MaNV,TenKH,Ban) values (@id,@manv,@tenkh,@ban) insert into HoaDonChiTiet(IDHoaDon,MaMon,SoLuong,ThanhTien) values (@id,@mamon,@soluong,@thanhtien) Update MonAn set SoLuong = SoLuong - @SoLuong Where MaMon = @MaMon end end GO 2.
Lập trình JDBC a. Lớp hỗ trợ 2.1: Lớp Tiện Ích X-Date public class XDate { static SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy"); // chuyen doi string sang date // date là string cần chuyển //pattern là định dạng thời gian // return date kết quả public static Date now(){ return new Date(); } public static Date addDays(Date date,long days){ date.getTime()+days*24*60*60*1000); return date; } public static Date add(int days){ Date now = XDate.getTime()+ days*24*60*60*1000); return now; } public static String toString1(Date date,String.pattern){ if(pattern.applyPattern(pattern[0]); } if(date == null){ date = XDate.now(); } Page 24 Tieu luan 25 Tài Liệu Báo Cáo Dự Án return formater.format(date); } public static Date toDate(String date,String.pattern){ try{ if(pattern.applyPattern(pattern[0]); } if(date == null){ return XDate.now(); } return formater.2: Lớp Tiện Ích DB public class DB { private static String driver="com.SQLServerDriver"; private static String dburl="jdbc:sqlserver://localhost;database=QuanLyQuanAn"; private static String username="sa"; private static String password="123456"; static{ try { Class.forName(driver); } catch (ClassNotFoundException ex) { throw new RuntimeException(ex); } } //xay dựng PreparedStatement public static PreparedStatement getStmt(String sql, Object.args) throws SQLException{ Connection connection = DriverManager.getConnection(dburl, username, password); PreparedStatement pstmt = null; if(sql.startsWith("{")){ pstmt = connection.prepareCall(sql);// store procedure } else{ pstmt = connection.prepareStatement(sql);// } for(int i=0;i<args.getHoten()); } return pstmt; Page 25 Tieu luan 26 Tài Liệu Báo Cáo Dự Án } public static ResultSet query(String sql, Object.args) { try { PreparedStatement stmt = DB.getStmt(sql, args); return stmt.printStackTrace(); throw new RuntimeException(e); } } public static Object value(String sql, Object.args) { try { ResultSet rs = DB.query(sql, args); if(rs.next()){ return rs.close(); return null; } catch (Exception e) { throw new RuntimeException(e); } } public static int update(String sql,Object.args){ try{ PreparedStatement stmt = DB.getStmt(sql, args); try{ if(stmt.executeUpdate()>0){ return 1; } } finally{ stmt. Model class-Các lớp mô tả dữ liệu 2.