Hình 50. Physical DFD order món ăn
Hình 52. Giao diện menu quản lý hệ thống
Thêm nguyên liệu:
Hình 53. Giao diện thêm nguyên liệu
Các đối tượng giao diện (Interface Objects):
Hình 54. Giao diện tuỳ chọn
Tên thuộc tính:
Trường nhập dữ liệu:
Nút điều khiển, xử lý:
Bảng hiển thị thông tin:
Các hoạt động trên giao diện (Interface Actions): o Thêm dữ liệu:
o Tìm kiếm dữ liệu:
o Thoát:
o Các biểu tượng (Interface Icons):
Lần lượt là : ẩn giao diện, phóng to giao diện và đóng giao diện.
4.5.2 Giao diện hệ thống
4.5.2.1. Giao diện quản lý khách hàng
Giao diện đặt bàn:
Giao diện tìm kiếm khách hàng:
Hình 56. Giao diện tìm kiếm khách hàng đặt bàn
Hình 57. Giao diện phiếu order món ăn
4.5.2.2. Giao diện quản lý nguyên liệu
4.5.2.3. Giao diện quản lý thanh toán
Hình 59. Giao diện quản lý thanh toán
4.5.2.4. Giao diện quản lý tài khoản
Hình 61. Giao diện đổi mật khẩu
Giao diện quản lý nhân viên (thêm nhân viên, khoá tài khoản nhân viên):
Hình 62. Giao diện quản lý nhân viên
Hình 63. Giao diện cấp tài khoản
4.6. Thiết kế kiểm soát
4.6.1 Xác định các điểm hở của hệ thống
Do con người: thao tác, chuyên môn. Giao diện của hệ thống dễ sử dụng. Tuy nhiên do dễ sử dụng nên yếu tố con người không có chuyên môn quá cao cũng có thể xâm nhập dễ dàng nếu rò rỉ thông tin tài khoản của người có quyền quản lý.
Do kĩ thuật: lỗi/sự cố phần cứng. Ví dụ: khi đang hoạt động máy tính bị lỗi màn hình, RAM đầy hoặc do máy bị nóng lên dẫn đến tình trạng không thao tác được
Thảm hoạ tự nhiên: lụt, bão, sét đánh…Ví dụ: khi có những thảm họa tự nhiên không báo trước, dữ liệu cần được sao lưu để đảm bảo tất cả có thể được khôi phục không cần máy chủ.
Do cố ý: gian lận, hack…
Gian lận thương mại: gián điệp…
Các phá hoại khác
4.6.2 Các giải pháp được đề xuất để khắc phục các điểm hở
Hệ thống hiện tại vẫn đang tồn tại 1 số điểm hở như đã nêu ở trên . Và nhóm cũng xin đưa ra 1 số đề xuất giải pháp khắc phục điểm hở đó góp phần xây dựng hệ thống làm việc 1 cách hiệu quả , chuẩn mực và an toàn hơn:
Tăng cường tính an toàn cho hệ thống:
Mục đích: kiểm soát tốt hơn về hệ thống tránh bị xâm nhập và phá hoại có chủ đích từ phía con người.
Yêu cầu: tên đăng nhập bắt buộc phải là mã nhân viên và mật khẩu phải thay đổi 1 tháng 1 lần.
Tăng cường tính toàn vẹn cho hệ thống:
Phải đảm bảo cho hệ thống hoạt động một cách tốt nhất, không bị gián đoạn trong quá trình sử dụng hoặc lỗi kỹ thuật.
Nguyên nhân: có thể là hỏng phần cứng, lập trình sai, hệ điều hành lỗi,..
Cách khắc phục: Tạo các bản sao lưu, thiết lập các server dự phòng..
Tăng cường tính tiện lợi cho hệ thống:
Đảm bảo cho những người không có kĩ năng về công nghệ cũng như là người nước ngoài có thể sử dụng được dễ dàng.
Cách khắc phục: Tạo 1 bản hướng dẫn bằng tiếng việt và tiếng anh 1 cách dễ hiểu nhất để mọi người đều có thế tiếp cận được dễ dàng.
4.6.3 Các kết quả thiết kế kiểm soát
Bảng đặc tả ràng buộc với từng thông tin đầu vào, đầu ra (I):
Chế độ mã hoá đối với những thông tin nhạy cảm/mật (I):
Mã hoá mật khẩu bằng mã hoá bằng key xác thực
Mật khẩu phải được đổi sau 1 tháng để đảm bảo tính bảo mật
Ma trận phân cấp truy cập chức năng (A): Nhóm người dùng Chức năng Bộ phận đón tiếp khách hàng Bộ phận bếp Bộ phận phục vụ bàn Bộ phận kế toán thu ngân Bộ phận quản lý 1.1. Đặt bàn x x 1.2. Tìm kiếm khách hàng x x x 1.3. Lập phiếu order món ăn x 2.1. Lập hoá đơn thanh toán x 2.2. Thanh toán hoá đơn x 3.1. Lập phiếu yêu cầu nhập nguyên liệu x 3.2. Duyệt phiếu yêu cầu nhập nguyên liệu x 3.3. Thêm
3.7. Cập nhật món ăn x 3.8. Tìm kiếm món ăn x x 4.1. Lập báo cáo thống kê nhập nguyên liệu x 4.2. Lập báo cáo thống kê nguyên liệu x 4.3. Lập báo cáo thống kê doanh thu x 4.4. Tìm kiếm
báo cáo doanh thu x 4.5. Lập báo cáo thống kê tài chính x 5.1. Đăng nhập x x x x x 5.2. Cập nhật thông tin tài khoản x x x x x 5.3. Đổi mật khẩu x x x x x 5.4. Khoá tài khoản x 5.5. Cấp tài khoản x 5.6. Thêm nhân viên x 5.7. Đăng xuất x x x x x
Ma trận phân cấp truy cập thông tin (C): Nhóm người dùng Thông tin Bộ phận đón tiếp khách hàng Bộ phận bếp Bộ phận phục vụ bàn Bộ phận kế toán thu ngân Bộ phận quản lý Danh sách tài khoản x Danh sách món ăn x x
Danh sách khách hàng x x x x Danh sách hoá đơn x x x Danh sách nguyên liệu x x Danh sách nhân viên x x Danh sách phiếu order x x x x Danh sách yêu cầu nhập nguyên liệu x x Danh sách duyệt yêu cầu nhập nguyên liệu x
Các kịch bản sao lưu, phục hồi dữ liệu, ứng phó rủi ro, kiểm tra an toàn thông tin (A):
Sao lưu phục hồi dữ liệu: tránh trường hợp dữ liệu đang nhập bị mất đi khi mất điện hay hỏng phần cứng. Xây dựng server dự phòng, dữ liệu tự động sao lưu lại và khi mất điện hay mất dữ liệu tại máy đang làm việc, người dùng có thể truy cập vào server dự phòng để lấy lại.
Ứng phó rủi ro: Trường hợp nếu một tài khoản nào đó đăng nhập vào hệ thống cần phải có xác minh khi đăng nhập và mật khẩu được thay đổi một tháng một lần, để đảm bảo khi bị lộ tài khoản người lạ cũng không thể đăng nhập được.
Hệ thống thêm mục trợ giúp người dùng có tài liệu tham khảo sử dụng vận hành hệ thống bằng tiếng việt và tiếng anh để đảm bảo người dùng
Lúc gọi đến form lập phiếu order món ăn (LapPhieuOrder.cs), textbox MaPhieuOrder phải tự động hiển thị được mã phiếu tiếp theo (ví dụ: trong hệ thống đã có 2 phiếu order món ăn rồi thì lúc form LapPhieuOrder.cs được gọi đến phải hiển thị trong textbox MaPhieuOrder là 3).
Đồng thời, textbox ngày giờ phải tự động lấy và hiển thị ra textbox NgayGio là ngày giờ hiện tại khi vào form.
Cùng vào đó, comboBox TenNV và comboBox TenMon phải được tự động load hiển thị ra danh sách tên nhân viên vào comboBox TenNV, và danh sách tên món vào comboBox TenMon.
Sau khi nhập đầy đủ các thông tin vào các trường, nhấn button “Lập” thì thông tin được lưu vào DataGridView.
Mỗi 1 bản ghi (record) được thêm vào DataGridView đều có thể xem chi tiết lại bản ghi đó và thực hiện xuất ra phiếu (PhieuOrder.rpt). Chọn 1 bản ghi (checkbox) và nhấn button “Xem chi tiết” để xem chi tiết phiếu order. Sau đó, nhấn button “Xuất” để thực hiện xuất phiếu order đó (PhieuOrder.rpt).
Nếu dữ liệu trong các trường (textbox) còn trống, mà thực hiện nhấn button “Lập” thì hệ thống sẽ hiển thị thông báo “Textbox nào không được để trống”.
Với các xử lý trên, Model Component cần có các phương thức: String LoadMaPhieuOrder();
String getNgayHienTai() ; DataTable LoadTenNV(); DataTable LoadTenMon();
Controller Component cần có:
View Component có giao diện LapPhieuOrder.cs như sau:
Hình 65. View Component lập phiếu order món ăn
Lúc gọi đến form Lập hóa đơn thanh toán(FrmLaphoadon.cs), con trỏ chuột tự động nằm ở ô textbox txtSohoadon.
Textbox lấy ngày phải tự động lấy ngày hiện tại và hiển thị ra textbox txtNgay.
ComboBox TenNVthanhtoan tự động load hiển thị danh danh sách tên nhân viên thanh toán.
Sau khi nhập đầy đủ các thông tin cần thiết vào các trường, nhấn button "Cập nhật", thông tin sẽ được tự động lưu vào Data GridView.
Muốn tìm kiếm một hóa đơn nào đó chỉ cần nhập thông tin vào textbox cần tìm kiếm rồi nhấn button Tìm kiếm. Sự kiện sẽ trả ra DataGridView thông tin của số hóa đơn theo thông tin đã nhập.
Ô checkbox trong DataGridView chỉ hiển thị với những bản ghi có thông tin của "Số hóa đơn" , vì đây sẽ là 1 hóa đơn thanh toán.
Chọn 1 bản ghi (checkbox) nhấn button "Lập hóa đơn" . Sự kiện sẽ in ra phiếu "Hóa đơn thanh toán" (Hoadonthanhtoan.rpt).
Ngoại trừ số hóa đơn và số bàn ăn có thể được để trống do 1 hóa đơn chỉ dành cho 1 bàn ăn và bàn ăn đó có thể có nhiều món thì toàn bộ các trường còn lại không được để trống. Nếu còn để trống, khi nhấn button Cập nhật sẽ có thông báo hiện ra màn hình "Textbox nào không được để trống".
Các phương thức của Model Component: getNgayhientai();
DataTable LoadTenNVthanhtoan(); Controller Component cần có:
void btnCapnhathoadon_Click(object sender, EventArgs e);
Hàm này sẽ lần lượt gọi các phương thức trong Model Component. void btnLaphoadon_Click(object sender, EventArgs e);
View Component có giao diện FrmLaphoadon.cs như sau:
4.7.3 Chức năng: 3.1. Lập phiếu yêu cầu nhập nguyên liệu
Các bước xử lý:
Lúc gọi đến form Yêu cầu nhập nguyên(FrmYCNNL.cs), con trỏ chuột tự động nằm ở ô textbox txtHoTen.
Textbox lấy ngày phải tự động lấy ngày hiện tại và hiển thị ra textbox txtNgayYC.
Sau khi nhập đầy đủ các thông tin cần thiết vào các trường, nhấn button "Gửi phiếu yêu cầu" thì các thông tin được gửi lên hệ thống và lưu trữ và database.
Nếu trường nào bị bỏ trống thì khi nhấn vào button “Gửi phiếu yêu cầu” sẽ hiển thị message box thông báo yêu cầu điền đầy đủ thông tin.
Các phương thức của Model Component: + getNgayHienTai();
yeuCauNhapNguyenLieu();
Controller Component cần có:
void btnGuiPhieuYeuCau_Click(object sender, EventArgs e); void btnThoat_Click(object sender, EventArgs e)
4.7.4 Chức năng: 3.5. Tìm kiếm nguyên liệu
Các bước xử lý:
Lúc gọi đến form Quản lý nguyên liệu (QLNguyenlieu.cs), con trỏ chuột tự động nằm ở ô textbox txtManguyenlieu.
Sau khi nhập các thông tin cần tìm kiếm vào các trường, nhấn button "Tìm kiếm", Khi nhập thông tin cần tìm kiếm ở các ô textbox sai kiểu dữ liệu hoặc thông tin không đúng sau khi nhấn nút “Tìm kiếm” hệ thống sẽ hiện thông báo “Thông tin bạn nhập không đúng mời kiểm tra lại” và con trỏ chuột sẽ tự động nhảy vào ô textbox có thông tin bị sai.
Trong trường hợp thông tin không bị sai thì sau khi nhấn nút “tìm kiếm” thông tin sẽ được tự động lưu vào Data GridView. Sự kiện sẽ trả ra DataGridView thông tin của nguyên liệu theo thông tin đã nhập.
void btnThoat_Click(object sender, EventArgs e);
View Component có giao diện QLNguyenlieu.cs như sau:
Biểu đồ giao tiếp tuần tự giữa các thành phần:
4.7.5 Chức năng: 4.1. Lập báo cáo thống kê nhập nguyên liệu
Khi gọi đến form Quản lý báo cáo thống kê (QLBaoCao.cs), combobox Danh Mục Báo Cáo phải tự động hiển thị được tên của 1 trong những loại báo cáo nhà hàng quản lý.
Click vào mũi tên sổ xuống chọn Nhập Nguyên Liệu nếu loại báo cáo trong combobox không phải là báo cáo nhập nguyên liệu.
Sau khi chọn loại báo cáo cần xem click vào ô ngày lập để chọn ngày lập hóa đơn, nếu thông tin ngày không chính xác hiện thông báo “Không có báo cáo thống kê nào được lập, hãy chọn lại ngày lập”.
Sau khi nhập chính xác loại báo cáo cần xem và ngày lập click nút xem báo cáo để đi đến báo cáo.
Các phương thức của Model Component:
getTaoMoi();
Controller Component cần có:
void btnTaoMoi_Click(object sender, EventArgs e);
→ Hàm này sẽ lần lượt gọi các phương thức trong Model Component. void btnThoat_Click(object sender, EventArgs e);
4.7.6 Chức năng: 4.2. Lập báo cáo thống kê nguyên liệu
Các bước xử lý:
Khi gọi đến form Quản lý báo cáo thống kê (QLBaoCao.cs ), combobox Danh Mục Báo Cáo phải tự động hiển thị được tên của 1 trong những loại báo cáo nhà hàng quản lý.
Click vào mũi tên bên phải ô chọn “ Nguyên Liệu” nếu loại báo cáo trong combobox không phải là báo cáo thống kê nguyên liệu.
Sau khi chọn loại báo cáo cần xem click vào ô “Ngày Lập” để chọn ngày lập hóa đơn, nếu thông tin ngày không chính xác hiện thông báo “Không có báo cáo thống kê nào được lập, hãy chọn lại ngày lập”.
Sau khi nhập chính xác loại báo cáo cần xem và ngày lập click nút “Tạo Mới” để đi đến báo cáo.
DataTable LoadDanhMucBaoCao();
getNgayLap();
String CheckNgayLap();
String CheckTenDanhMuc();
→ Hàm này sẽ lần lượt gọi các phương thức trong Model Component. void btnTaoMoi_Click(object sender, EventArgs e);
View Component có giao diện QLBaoCao.cs như sau:
Khi gọi đến form đổi mật khẩu (DoiMatKhau.cs), textbox TenDangNhap phải tự động hiển thị được tên đăng nhập của tài khoản hiện đang sử dụng chức năng này.
Sau khi nhập đầy đủ các thông tin về mật khẩu cũ, mật khẩu mới và xác nhận mật khẩu, nhấn button “Cập nhật” thì thông tin mật khẩu mới sẽ được cập nhật vào hệ thống và hiển thị thông báo “Đổi mật khẩu thành công”.
Nếu dữ liệu về mật khẩu cũ không khớp với mật khẩu hiện tại của tài khoản thì khi nhấn nút “Cập nhật” hệ thống sẽ hiển thị thông báo “Mật khẩu cũ không chính xác”.
Nếu dữ liệu trường mật khẩu mới trống thì khi nhấn nút “Cập nhật” hệ thống sẽ hiển thị thông báo “Mật khẩu mới không được để trống”.
Nếu dữ liệu trường xác nhận mật khẩu không khớp với mật khẩu mới hệ thống sẽ hiển thị thông báo “Mật khẩu xác nhận không khớp”.
Với các xử lý trên, Model Component cần có các phương thức: String loadTenDangNhap();
String checkMatKhauCu(); Boolean capNhatMatKhau(); Controller Component cần có: Boolean capNhatMatKhau();
Hàm này sẽ lần lượt gọi các phương thức Model Component và kiểm tra các điều kiện đã nêu ở trên.
Biểu đồ giao tiếp tuần tự giữa các thành phần:
4.7.8 Chức năng: 5.5. Cấp tài khoản
Các bước xử lý:
Khi load đến form cấp tài khoản(frmCapTaiKhoan.cs), comboBox TenNV phải được tự động load hiển thị ra danh sách tên nhân viên vào comboBox TenNV. Lưu ý, trong comboBox TenNV chỉ hiển thị các nhân viên chưa được cấp tài khoản.
Nếu textbox tài khoản bỏ trống, mà nhấn nút button “Lưu” thì hệ thống hiển thị thông báo “Tài khoản không được để trống”.
Nếu textbox tài khoản nhập trùng với tên tài khoản đã tồn tại trong database thì hệ thống hiển thị thông báo “Tài khoản đã tồn tại. Vui lòng chọn tài khoản khác”.
Nếu textbox mật khẩu bỏ trống thì hệ thống hiển thị thông báo “Mật khẩu không được để trống”.
Nếu textbox xác nhận mật khẩu bỏ trống thì hệ thống hiển thị thông báo “Xác nhận mật khẩu không được để trống”.
Nếu textbox xác nhận mật khẩu và textbox mật khẩu không khớp nhau thì hệ thống hiển thị thông báo “Xác nhận mật khẩu không khớp với mật khẩu”.
Trên Model component cần có phương thức: DataTable LoadNhanVien();
String CheckTenTaiKhoan(); Boolean TaoTaiKhoan();
Trên Controller component cần có:
void btnLuu_Click(object sender, EventArgs e);
Hàm này sẽ lần lượt gọi các phương thức trong Model Component và kiểm tra các điều kiện đã nêu ở trên.
Biểu đồ giao tiếp tuần tự giữa các thành phần:
TÀI LIỆU THAM KHẢO
[1] Slide bài giảng phân tích và thiết kế hệ thống thông tin của thầy Lê Hữu Dũng – Khoa Công nghệ thông tin –Đại Học Mở Hà Nội.
KẾT QUẢ KHẢO SÁT THỰC TẾ
1. Phiếu phỏng vấn
Phiếu phỏng vấn
Người được hỏi:
Dương Quốc Hùng
Ngày phỏng vấn: 27/05/2019