You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Đây là ứng dụng máy tính để bàn cho phép quản lý việc trả trang phục và thanh toán trong nội bộ cửa hàng cho thuê trang phục biểu diễn.
Phạm vi:
Ứng dụng: máy tính để bàn (có thể chạy trên nhiều máy của các nhân viên khác nhau nhưng đồng bộ cơ sở dữ liệu).
Phạm vi sử dụng: bên trong cửa hàng
Người dùng: chỉ cho các nhân viên của cửa hàng, bao gồm:
Quản lý cửa hàng
Nhân viên thu ngân
Chức năng: Cho khách hàng trả trang phục và thanh toán.
1.2.2. Ai được sử dụng hệ thống và sử dụng để làm gì?
Chỉ nhân viên thu ngân được sử dụng hệ thống này và có thể sử dụng chức năng trả trang phục và thanh toán.
1.2.3. Các chức năng của hệ thống hoạt động như thế nào?
Khi khách hàng đến trả trang phục, nhân viên thu ngân đăng nhập và hệ thống và chọn menu "Trả đồ và thanh toán".
Nhân viên hỏi tên đầy đủ của khách hàng. Khách hàng cung cấp tên của mình.
Nhân viên nhập tên khách hàng vào ô tìm kiếm và click “Tìm kiếm”.
Hệ thống hiển thị danh sách các khách hàng có tên vừa nhập, và kèm với các thông tin khác của khách hàng, bao gồm:
Mã khách hàng
Tên khách hàng
Số điện thoại
Email
Địa chỉ
Nhân viên chọn đúng khách hàng cần xử lý trả trang phục.
Nếu không tìm thấy khách hàng, nhân viên kiểm tra lại thông tin tìm kiếm. Nếu vẫn không tìm thấy, thông báo cho quản lý/admin.
Nếu có nhiều khách hàng có cùng tên xuất hiện, nhân viên hỏi thêm thông tin như số điện thoại, email, địa chỉ khách hàng. Dựa vào các thông tin đó để tìm kiếm khách hàng cần tìm.
Sau khi chọn đúng khách hàng, hệ thống hiện lên danh sách các trang phục mà khách hàng đó đã trả và chưa trả, mỗi trang phục trên một dòng với các thông tin bảo gồm:
Danh sách trang phục chưa trả:
Mã trang phục
Tên trang phục
Ngày mượn
Giá mượn
Giá gốc (cọc)
Số lượng mượn
Sô lượng trả (mặc định để trống)
Danh sách trang phục đã trả:
Mã trang phục
Tên trang phục
Ngày mượn
Ngày trả
Số lượng trả
Tổng tiền thuê
Tổng tiền phạt
Nhân viên điền số lượng trả vào ô số lượng trả của các trang phục mà khách hàng đem trả (có thể không trả hết 1 lần), sau đó click nút "Tiếp" để sang màn hình cập nhật tình trạng trang phục.
Nếu nhân viên chưa điền số lượng trả vào ô số lượng trả của các trang phục mà khách hàng đem trả, hệ thống sẽ hiển thị thông báo "Vui lòng điền số lượng trả".
Hệ thống hiện lại giao diện gồm danh sách các trang phục được trả và danh sách lỗi trang phục:
Danh sách trang phục được trả:
Mã trang phục
Tên trang phục
Ngày mượn
Số lượng trả
Tiền mượn = số lượng trả * tiền mượn 1 trang phục
Ghi chú
Danh sách lỗi trang phục khi mượn:
Mã trang phục
Tên trang phục
Tên lỗi
Ngày phát hiện lỗi (ngày thuê)
Số lượng trang phục bị lỗi
Ghi chú
Danh sách lỗi trang phục khi trả:
Mã trang phục
Tên trang phục
Tên lỗi
Số lượng trang phục lỗi
Tổng phí phạt = số lượng trang phục lỗi * tiền phạt 1 trang phục
Ghi chú
Với mỗi trang phục:
Nhân viên kiểm tra tình trạng thực tế.
Nếu có lỗi khi trả (hư hỏng, thiếu hoặc mất phụ kiện, ...), nhân viên thêm trang phục kèm lỗi vào danh sách lỗi trang phục khi trả cùng số lượng trang phục bị lỗi.
Nếu không có lỗi, nhân viên không thêm trang phục vào danh sách lỗi trang phục khi trả.
Nếu lỗi chưa có trong hệ thống, nhân viên chọn "Thêm lỗi" và điền các thông tin gồm:
Tên lỗi
Mô tả lỗi
Tiền phạt
Ghi chú
Nếu lỗi đã có trong hệ thống, nhân viên chọn lỗi từ danh sách lỗi đã có trong hệ thống.
Sau khi cập nhật trạng thái trang phục được trả, nhân viên kéo xuống và click nút “Hoàn thành”.
Hệ thống hiển thị phiếu trả đồ kèm các đồ cọc có thể trả trong đợt này bao gồm:
Mã hóa đơn
Ngày lập hóa đơn (ngày trả)
Tên nhân viên thu ngân
Thông tin khách hàng
Danh sách trang phục được trả:
Mã trang phục
Tên trang phục
Ngày mượn
Số lượng trả
Số tiền mượn
Ghi chú
Danh sách lỗi trang phục khi trả:
Mã trang phục
Tên trang phục
Tên lỗi
Số lượng trang phục lỗi
Tổng phí phạt = số lượng trang phục lỗi * tiền phạt 1 trang phục
Ghi chú
Tổng số tiền mượn
Tổng số tiền phạt
Tổng số tiền phải trả = Tổng số tiền mượn + Tổng số tiền phạt
Danh sách đồ cọc có thể trả:
Mã đồ cọc
Tên đồ cọc
Số lượng
Giá trị cọc
Ghi chú
Quy tắc xử lý cọc:
Cọc chỉ được trả khi khách hàng trả hết các trang phục đã thuê trong một đợt thuê (phiếu mượn).
Hệ thống tự động cập nhật tình trạng thuê, nếu phiếu trả đã được trả hết, hệ thống tự động đánh dấu phiếu mượn là đã trả hết và hiển thị danh sách đồ cọc có thể trả.
Khách hàng kiểm tra các thông tin trong phiếu, sau đó nhân viên kéo xuồng và click "Xác nhận"
Hệ thống hiển thị thông báo "Giao dịch thành công", in phiếu trả đồ và cập nhật vào cơ sở dữ liệu.
Nhân viên có thể chọn "Hủy" để hủy giao dịch.
1.2.3. Các đối tượng cần xử lý:
Khách hàng:
Mã khách hàng
Tên khách hàng
Số điện thoại
Email
Địa chỉ
Ghi chú (nếu có)
Nhân viên:
Mã nhân viên
Tên nhân viên
Số điện thoại
Chức vụ
Cửa hàng:
Mã cửa hàng
Tên cửa hàng
Liên lạc
Địa chỉ
Trang phục:
Mã trang phục
Tên trang phục
Màu sắc
Kích cỡ
Mô tả
Giá gốc
Sô lượng tồn kho
Khu vực
Lỗi:
Mã lỗi
Tên lỗi
Mô tả lỗi
Tiền phạt
Đồ cọc:
Mã đồ cọc
Tên đồ cọc
Giá trị cọc
Phiếu mượn:
Mã phiếu mượn
Ngày mượn
Thông tin khách hàng
Thông tin nhân viên
Danh sách trang phục mượn
Danh sách lỗi trang phục khi mượn
Danh sách đồ cọc
Tổng số tiền cọc
Phiếu trả đồ:
Mã phiếu trả đồ
Ngày trả
Thông tin khách hàng
Thông tin nhân viên
Danh sách trang phục trả
Danh sách lỗi trang phục khi trả
Tổng số tiền mượn
Tổng số tiền phạt
Tổng số tiền phải trả
1.2.5. Quan hệ giữa các đối tượng
Một cửa hàng có thể có nhiều trang phục.
Một trang phục có thể được thuê bởi nhiều khách hàng (ở nhiều thời điểm khác nhau)
Một khách hàng có thể thuê một hoặc nhiều trang phục.
Một khách hàng có thể sở hữu nhiều phiếu mượn.
Một khách hàng có thể có nhiều hóa đơn trả đồ.
Một phiếu mượn chỉ có thể thuộc về một khách hàng.
Một phiếu trả đồ chỉ có thể thuộc về một khách hàng.
Một nhân viên thu ngân có thể lập nhiều phiếu mượn.
Một nhân viên thu ngân có thể xử lý nhiều hóa đơn trả đồ.
Một phiếu trả đồ chỉ được xử lý bởi một nhân viên thu ngân.
Một phiếu mượn chỉ được lập bởi một nhân viên thu ngân.
Một phiếu mượn có thể bao gồm nhiều trang phục.
Một phiếu trả đồ có thể bao gồm nhiều trang phục được trả.
Một trang phục có thể xuất hiện trong nhiều phiếu mượn tại các thời điểm khác nhau.
Một trang phục có thể xuất hiện trong nhiều phiếu trả đồ ở các lần giao dịch khác nhau.
1.3. Business model by UML
1.3.1. Actor
Actor là người dùng trực tiếp: Nhân viên thu ngân. Các actor này đều cùng là nhân viên trong cửa hàng cho thuê trang phục biểu diễn, nên có quan hệ kế thừa từ actor này.
Actor là người dùng gián tiếp: Khách hàng, dù không trực tiếp sử dụng và thao tác trên hệ thống, nhưng một số chức năng phải có khách hàng tham gia thì mới thực hiện được như: cho thuê trang phục, cho khách hàng trả trang phục.
1.3.2. Các sub use case
Đăng nhập vào hệ thống
Xem giao diện của thu ngân
Tìm kiếm khách hàng
Xem thông tin khách hàng, danh sách trang phục đã trả và chưa trả
Kiểm tra thông tin trang phục được trả.
Ghi lại các tình trạng trang phục được trả và tiền phạt.
Thêm tình trạng trang phục mới
Xem thông tin và xuất hóa đơn
1.3.3. Sơ đồ use case
Các use case được mô tả như sau:
Đăng nhập hệ thống: Use case này cho phép nhân viên thu ngân đăng nhập hệ thống.
Xem giao diện của thu ngân: Use case này cho phép nhân viên thu ngân xem giao diện của thu ngân.
Tìm kiếm khách hàng: Use case này cho phép nhân viên tìm kiếm khách hàng.
Xem thông tin khách hàng, danh sách trang phục đã trả và chưa trả: Use case này cho phép nhân viên thu xem thông tin khách hàng và danh sách phiếu mượn: Use case này cho phép nhân viên thu ngân xem thông tin khách hàng và danh sách phiếu mượn.
Kiểm tra thông tin trang phục được trả: Use case này cho phép nhân viên thu ngân kiểm tra thông tin trang phục được trả.
Ghi lại tình trạng trang phục được trả và tiền phạt: Use case này cho phép nhân viên thu ngân ghi lại tình trạng trang phục được trả và tiền phạt.
Thêm tình trạng trang phục mới: Use case này cho phép nhân viên thu ngân thêm tình trạng trang phục mới.
Xem thông tin và xuất hóa đơn: Use case này cho phép nhân viên thu ngân xem thông tin và xuất hóa đơn.
2. Pha phân tích
2.1. Kịch bản
Scenario
Cho khách hàng trả trang phục
Actor
Nhân viên thu ngân, Khách hàng
Pre-condition
Nhân viên thu ngân có tài khoản đúng định dạng.
Khách hàng đã mượn một số lượng trang phục và cần trả.
Post-condition
Khách hàng trả trang phục thành công.
Main events
Nhân viên thu ngân A đăng nhập vào hệ thống với username là A, mật khẩu là a@123 để khách hàng trả trang phục.
Hệ thống hiện giao diện chính của nhân viên thu ngân, có lựa chọn “Trả trang phục và thanh toán”.
Thu ngân chọn chức năng "Trả trang phục và thanh toán".
Hệ thống hiện giao diện, yêu cầu thu ngân tìm kiếm khách hàng theo tên khách hàng, email hoặc số điện thoại.
Thu ngân yêu cầu khách hàng cung cấp tên.
Khách hàng cung cấp tên cho thu ngân.
Thu ngân nhập tên khách hàng vào ô tìm kiếm.
Hệ thống tìm kiếm và hiển thị danh sách khách hàng có tên trùng với tên khách hàng được cung cấp.
Thanh tìm kiếm theo tên khách hàng
Thanh tìm kiếm theo email
Thanh tìm kiếm theo số điện thoại
Nút tìm kiếm
Nút "Quay lại"
Danh sách khách hàng
Mã
Họ tên
Địa chỉ
Số điện thoại
Email
Ghi chú
123
Nguyễn Văn B
Hà Nội
0123456789
b@gmail.com
Nhân viên thu ngân chọn đúng khách hàng trả trang phục.
Hệ thống hiện ra giao diện thông tin khách hàng kèm danh sách trang phục đang mượn và đã trả cùng danh sách lỗi đã vi phạm của khách hàng đó:
Thông tin khách hàng
Mã
Họ tên
Địa chỉ
Số điện thoại
Email
Ghi chú
123
Nguyễn Văn B
Hà Nội
0123456789
b@gmail.com
Danh sách trang phục đang mượn
Mã
Tên trang phục
Ngày mượn
Giá cọc
Giá mượn
Số lượng mượn
Số lượng trả
123
Áo dài cách tân đen nữ size XL
10/03/2026
1000
10
2
0
124
Áo dài cách tân trắng nữ size L
11/03/2026
900
10
3
0
125
Áo dài truyền thống đỏ nữ size M
12/03/2026
750
15
2
0
Danh sách trang phục đã trả
Mã
Tên trang phục
Ngày mượn
Ngày trả
Số lượng
Tiền thuê
Tiền phạt
123
Áo dài cách tân đen nữ size M
01/03/2026
08/03/2026
2
160000
0
Danh sách đồ đang cọc
Mã
Tên cọc
Ngày cọc
Số lượng cọc
Số tiền
Ghi chú
123
Tiền mặt
01/03/2026
1
1000000
Nút "Tiếp"
Nút "Hủy"
Nhân viên yêu cầu khách hàng đưa trang phục cần trả.
Khách hàng đưa trang phục cho nhân viên thu ngân.
Nhân viên điền số lượng trả cho trang phục tương ứng, bấm [Tiếp].
Hệ thống hiển thị giao diện để nhân viên thu ngân xác nhận trả đồ và kiểm tra tình trạng đồ gồm:
Ngày trả: 16/03/2026
Thông tin khách hàng
Mã
Họ tên
Địa chỉ
Số điện thoại
Email
Ghi chú
123
Nguyễn Văn B
Hà Nội
0123456789
b@gmail.com
Danh sách trang phục được trả:
Mã
Tên trang phục
Ngày mượn
Số lượng
Tiền thuê
123
Áo dài cách tân đen nữ size M
10/03/2026
2
120
124
Áo dài cách tân trắng nữ size L
11/03/2026
1
50
Danh sách lỗi trang phục khi mượn:
Mã
Tên trang phục
Tên lỗi
Số lượng trang phục lỗi
Ngày phát hiện
Ghi chú
Danh sách lỗi trang phục khi trả:
Mã
Tên trang phục
Tên lỗi
Số lượng trang phục lỗi
Tiền phạt
Ghi chú
Tổng tiền mượn: 170
Tổng tiền phạt: 0
Nút "Hoàn thành"
Nút "Hủy"
Trang phục không có lỗi, nhân viên chọn [Hoàn thành].
Hệ thống hiện Phiếu trả đồ kèm tổng tiền mượn, cọc, chênh lệch.
Mã hóa đơn: 123
Ngày trả: 16/03/2026
Tên nhân viên: Nguyễn Văn A
Thông tin khách hàng
Mã
Họ tên
Địa chỉ
Số điện thoại
Email
Ghi chú
123
Nguyễn Văn B
Hà Nội
0123456789
b@gmail.com
Danh sách trang phục được trả:
Mã
Tên trang phục
Ngày mượn
Số lượng
Tiền thuê
123
Áo dài cách tân đen nữ size M
10/03/2026
2
120
124
Áo dài cách tân trắng nữ size L
11/03/2026
1
50
Danh sách lỗi trang phục khi mượn:
Mã
Tên trang phục
Tên lỗi
Số lượng trang phục lỗi
Ngày phát hiện
Ghi chú
Danh sách lỗi trang phục khi trả:
Mã
Tên trang phục
Tên lỗi
Số lượng trang phục lỗi
Tiền phạt
Ghi chú
Danh sách cọc được trả:
Mã
Tên cọc
Ngày cọc
Số lượng cọc
Số tiền
Ghi chú
Tổng tiền mượn: 170
Tổng tiền phạt: 0
Tổng số tiền cần thanh toán: 170
Xác nhận
Hủy
Nhân viên thu ngân đọc các thông tin trong phiếu trả và hỏi lại khách hàng về các thông tin trên phiếu trả.
Khách hàng xác nhận thông tin chính xác.
Nhân viên nhấn [Xác nhận].
Hệ thống in phiếu và lưu DB.
Nhân viên thu ngân đưa phiếu trả cho khách hàng, thông báo với khách hàng là đã trả đồ thành công.
Exception
2. Đăng nhập thất bại: Bấm OK -> Quay lại đăng nhập -> Nhập đúng -> Vào hệ thống.
8. Trùng tên/Không thấy KH: Hỏi thêm SĐT/Email -> Tìm lại -> Hiện đúng KH.
10. Sai số lượng: Bấm OK -> Nhập lại đúng số lượng -> Thanh toán.
15. Tình trạng thực tế không có trong hệ thống: Chọn "Thêm tình trạng" -> Nhập chi tiết/phí phạt -> Bấm Thêm -> Hệ thống cập nhật lại tiền.
2.2. Biểu đồ lớp thực thể
Bước 1: Mô tả module bằng một đoạn văn
Hệ thống quản lý cửa hàng cho thuê trang phục biểu diễn cho phép nhân viên cửa hàng quản lý thông tin trang phục, cũng như quản lý việc mượn và trả trang phục. Module khách hàng trả đồ và thanh toán được thực hiện bởi nhân viên thu ngân và khách hàng, trong đó khách hàng mang trang phục đã mượn tới cửa hàng, nhân viên thu ngân tiến hành lấy thông tin khách hàng, tìm kiếm khách hàng và phiếu mượn trên hệ thống, tìm kiếm và kiểm trang phục được trả và thanh toán. Trong trường hợp trang phục được trả có lỗi, nhân viên thu ngân ghi lại lỗi lên trên hệ thống và thu phì phạt theo kèm số tiền thuê trang phục khi thanh toán. Nếu lỗi chưa có trên hệ thống, nhân viên thêm lỗi mới vào hệ thống. Cuối cùng in hóa đơn gồm tổng số tiền thuê, tổng số tiền phạt và số tiền cọc cần trả lại cho khách hàng.
Bước 2 + 3: Trích và đánh giá các danh từ:
Nhân viên thu ngân → Lớp User (username, password, fullname, role)
Khách hàng → Lớp Client (fullname, email, tel, address, note)
Thông tin phiếu trả → Thuộc tính của lớp ReturnedReceipt
Số tiền thuê trang phục → Thuộc tính của lớp ReturnedReceipt
Số tiền phạt → Thuộc tính của lớp ReturnedReceipt
Cọc → Lớp DepositItem (name, value, note)
Bước 4 + 5: Xét quan hệ giữa các lớp và bổ sung các quan hệ đối tượng
Quan hệ giữa các lớp thực thể được xác định như sau:
Mỗi cửa hàng có thể có nhiều trang phục, mỗi trang phục lại chỉ thuộc về một cửa hàng duy nhất nên quan hệ Store – Costume là 1 – n.
Mỗi khách hành có thể trả trang phục nhiều lần nên sẽ có nhiều phiếu trả đồ (những lần khác nhau), nên quan hệ giữa Client – ReturnedReceipt là 1 – n.
Mỗi khách hàng có thể gồm nhiều trang phục, mỗi trang phục lại có thể thuộc nhiều phiếu mượn khách nhau (ở những thời điểm khách nhau), vậy nên quan hệ giữa RentedReceipt – Costume là n – n. Ta cần một lớp ở giữa là RentedCostume. Mỗi RentedReceipt và Costumer ta xác định được duy nhất một RentedCostume.
Mỗi khách hàng có thể chọn trả nhiều trang phục đã mượn, mỗi trang phục đã mượn lại có thể thuộc nhiều phiếu trả khác nhau (ở những thời điểm khác nhau), vậy nên quan hệ giữa ReturedReceipt – RentedCostume là n – n. Ta cần một lớp ở giữa là ReturnedCostume. Mỗi ReturedReceipt và RentedCostume ta xác định được duy nhất một RentedCostume.
Mỗi lần mượn đồ, mỗi lỗi trang phục sẽ có nhiều trang phục tương ứng và một trang phục được mượn có thể mắc nhiều lỗi, vậy nên mối quan hệ giữa State – RentedCostume là n – n. Ta cần một lớp giữa là RentedDamage.
Mỗi lần trả đồ, mỗi lỗi trang phục sẽ có nhiều trang phục tương ứng và một trang phục được trả có thể mắc nhiều lỗi, vậy nên mối quan hệ giữa Damage – ReturnedCostume là n – n. Ta cần một lớp giữa là ReturnedDamage.
Nhân viên có thể tạo ra nhiều phiếu trả đồ , nên quan hệ User – ReturnedReceipt là 1 – n. Tượng tự quan hệ User – RentedReceipt cũng là 1 – n.
Mỗi lần mượn khách hàng có thể cọc nhiều vật phẩm, và một vật phẩm có thể cọc trong nhiều lần cọc, vậy nên mối quan hệ giữa DepositItem – RentedReceipt là n – n. Ta cần một lớp giữa RentedDeposit.
Ta có được biểu đồ lớp thực thể:
2.3. Biểu đồ lớp đầy đủ
2.3.1. Giao diện đang nhập → LoginView
Nhập tên người dung: inUsername
Nhập mật khẩu: inPassword
Nút đăng nhập: subLogin
Hệ thống cần kiểm tra đăng nhập có đúng ko → Cần phương tức checkLogin()
Đầu vào: username, password
Đầu ra: Boolean
Lớp chủ thể: User
2.3.2. Giao diện chính của nhân viên thu ngân → CashierHomeView
Lựa chọn cho thuê trang phục: subRent
Lựa chọn cho khách hàng trả trang phục: subReturn
Lựa chọn đăng xuất: subLogout
2.3.3. Giao diện tìm kiếm khách hàng → SearchClientView
Nhập tên người dung: inFullname
Nhập số điệnt thoại: inTel
Nhập email: inEmail
Nút tìm kiếm: subSearch
Nút hủy tìm kiếm, quay lại trang trước đó: subCancel
Hiển thị danh sách các thông tin khách hàng: outsubListClient.
Hệ thống cần tìm kiếm khách hàng bằng nhiều thông tin khác nhau (tên, email, sđt) → Cần phương thức searchClient()
Đầu vào: fullname, email, tel
Đầu ra: List
Lớp chủ thể: ClientDAO
2.3.4. Giao diện thông tin khách hàng → ClientInfoView
Hiển thị thông tin khách hàng: outClientInfo
Hiển thị danh sách trang phục khách hàng chưa trả và đã trả:
outBarcode
outName
outRentedAt
outPrice
outQuantity (Số lượng trang phục chưa trả)
Nhập số lượng khách muốn trả trong đợt này: inReturnQuantity
outReturnedAt (Với trang phục đã trả xong 100%)
Nút tiếp tục: subNext
Nút hủy tìm kiếm, quay lại trang trước đó: subCancel
Hệ thống lấy thông tin trang phục đã thuê kèm tình trạng đã trả hay chưa trả → searchByClient()
Đầu vào: Client
Đầu ra: List
Lớp chủ thể: RentedReceipt
Hệ thống cần tính toán số lượng trang phục chưa trả → calculateRemainedQuantity():
Đầu vào: RentedCostume
Đầu ra: int
Lớp chủ thể: ReturnedReceipt
2.3.5. Giao diện cập nhật tình trạng trang phục → ProcessCostumeView
Hiển thị ngày trả trang phục: outReturnedAt
Hiển thị thông tin khách hàng: outClientInfo
Hiển thị danh sách trang phục được chọn trả đợt này:
outBarcode
outName
outRentedAt
outReturnQuantity (Số lượng đang trả)
outRentedCost
Hiển thị danh sách lỗi của trang phục khi thuê:
outCostumeBarcode
outCostumeName
outRentedAt
outDamageName
outDamageQuantity
outFineFee
Hiển thị danh sách lỗi của trang phục khi trả:
outinCostumeBarcode
outinCostumeName
outRentedAt
outinDamageName
outinDamageQuantity
outFineFee
Nút thêm lỗi trang phục: subAddDamage
Hiển thị tổng tiền thuê trang phục đợt này: outTotalRentedCost
Hiển thị tổng tiền phạt đợt này: outTotalFineFee
Nút hoàn thành: subFinish
Nút hủy tìm kiếm, quay lại trang trước đó: subCancel
Hệ thống cần tính tiền thuê trang phục theo ngày và số lượng trả → calculateRentedFee():
Đầu vào: returnedAt, rentedAt, quantity
Đầu ra: rentedCost
Lớp chủ thể: ReturnedCostume
Hệ thống cần cập nhật lại trạng thái trang phục do người dung mắc lỗi (rách, bẩn, …) → addReturnedDamage():
Đầu vào: ReturnedCostume, Damage
Đầu ra: boolean
Lớp chủ thể: ReturnedCostume
2.3.6. Giao diện thêm lỗi trang phục mới → AddDamageView
Nhập tên trạng thái: inName
Nhập mô tả trạng thái: inDetail
Nhập phí phạt cho trạng thái: inFee
Nhập ghi chú: inNote
Nút thêm lỗi mới: subAdd
Nút hủy tìm kiếm, quay lại trang trước đó: subCancel
Hệ thống cần xử lý thêm lỗi vi phạm → addDamage():
Đầu vào: name, detail, fee, note
Đầu ra: Boolean
Lớp chủ thể: Damage
2.3.7. Giao diện xác nhận phiếu trả trang phục → ConfirmView
Hiển thị phiếu trả: outReturnedReceipt
Danh sách cọc trả đợt này: outReturnedDeposit
Nút xác nhận và in phiếu: subConfirm
Nút hủy và quay lại: subCancel
Hệ thống cần tính toán tổng tiền cho hóa đơn (tiền thuê, tiền phạt) → calculateTotalReceipt()
Đầu vào: List
Đầu ra: ReturnedReceipt
Lớp chủ thể: ReturnedReceipt
Hệ thống cần cộng lại số lượng trang phục vào kho → updateQuantity():
Đầu vào: costumeId, returnQuantity
Đầu ra: Boolean
Lớp chủ thể: Costume
Khi xác nhận, hệ thống lưu phiếu trả mới → addReturnedReceipt():
Đầu vào: ReturnedReceipt
Đầu ra: Boolean
Lớp chủ thể: ReturnedReceipt
Hệ thống kiểm tra xem phiếu mượn gốc đã hoàn thành chưa để kích hoạt luồng trả cọc → checkReturnedDeposit():
Đầu vào: rentedReceiptId
Đầu ra: Boolean (Trả về True nếu status phiếu mượn là "Đã hoàn tất")
Lớp chủ thể: RentedReceipt
Ta được biểu đồ lớp thực thể bao gồm các lớp giao diện:
2.4. Kịch bản chuẩn V2 và biều đồ tuần tự
Khách hàng mang trang phục tới quầy thu ngân yêu cầu trả trang phục.
Thu ngân đăng nhập với username là A, password là a@123 trên giao diện LoginView.
Lớp LoginView gọi lớp User để xử lý.
Lớp User thực hiện hàm checkLogin().
Lớp User trả về kết quả đăng nhập thành công cho LoginView.
Lớp LoginView gọi lớp CashierHomeView
Lớp CashierHomeView hiển thị cho thu ngân.
Thu ngân chọn chức năng “Cho khách hàng trả trang phục”
Lớp CashierHomeView gọi lớp SearchClientView
Lớp SearchClientView hiển thị cho thu ngân
Thu ngân hỏi tên khách hàng.
Khách hàng trả lời cho thu ngân
Thu ngân nhập tên khách hàng vào thanh tìm kiếm theo tên khách hàng.
Lớp SearchClientView gọi lớp Client.
Lớp Client thực hiện hàm searchClientByFullname().
Lớp Client trả về khách hàng cần tìm cho lớp SearchClientView.
Lớp SearchClientView hiển thị khách hàng tìm được cho thu ngân.
Thu ngân bấm chọn vào khách hàng được hiển thị.
Lớp SearchClientView gọi lớp ClientInfoView
Lớp ClientInfoView gọi lớp RentedReceipt.
Lớp RentedReceipt thực hiện hàm searchByClient().
Lớp RentedReceipt trả về danh sách trang phục khách hàng chưa trả và đã trả cho lớp ClientInfoView.
Lớp ClientInfoView hiển thị danh sách trang phục chưa trả và đã trả cho thu ngân.
Thu ngân yêu cầu khách hàng trao trả trang phục đã thuê.
Khách hàng giao lại trang phục cho đã thuê thu ngân.
Thu ngân kiểm kê trang phục được trả và tick vào ô chọn trả ở các trang phục đó và bấm Next.
Lớp ClientInfoView gọi lớp ProcessCostumeView
Lớp ProcessCostumeView hiển thị cho thu ngân.
Thu ngân nhập số lượng trang phục được trả.
Lớp ProcessCostumeView gọi lớp ReturnedCostume.
Lớp ReturnedCostume thực hiện hàm calculateRentedFee().
Lớp ReturnedCostume trả về số tiền thuê trang phục cho lớp ProcessCostumeView.
Lớp ProcessCostumeView hiển thị số tiền thuê cho thu ngân.
Thu ngân nhấn vào nút hoàn thành.
Lớp ProcessCostumeView gọi lớp ConfirmView
Lớp ConfirmView gọi lớp ReturnedReceipt.
Lớp ReturnedReceipt thực hiện hàm calculateTotalReceipt().
Lớp ReturnedReceipt trả về phiếu trả sau khi được tính toán cho lớp ConfirmView.
Lớp ConfirmView hiển thị thông tin cho thu ngân.
Thu ngân đọc các thông tin cho khách hàng.
Khách hàng xác nhận với thu ngân.
Thu ngân thực hiện thanh toán số tiền chênh lệnh cho khách hàng.
Khách hàng xác nhận đã nhận tiền.
Thu ngân bấm nút xác nhận.
Lớp ConfirmView gọi lớp ReturnedReceipt.
Lớp ReturnedReceipt thực hiện hàm addReturnReceipt().
Lớp ReturnedReceipt trả về kết quả cho lớp ConfirmView.
Lớp ConfirmView gọi lớp RentedCostume.
Lớp RentedCostume thực hiên hàm updateRentedStatus().
Lớp RentedCostume trả về kết quả cho lớp ConfirmView.
Lớp ConfirmView gọi lớp Costume.
Lớp Costume thực hiện hàm updateQuantity().
Lớp Costume trả về kết quả cho lớp ConfirmView.
Lớp ConfirmView gọi lớp RentedReceipt.
Lớp RentedReceipt thực hiện hàm updateDepositStatus().
Lớp RentedReceipt trả về kết quả cho lớp ConfirmView.
Lớp ConfirmView báo trả đồ thành công cho thu ngân.
Thu ngân thông báo quá trình trả đồ thành công cho khách hàng.
Ta có được biểu đồ tuần tự:
3. Pha thiết kế
3.1. Thiết kế lớp thực thể
Bước 1: Hoàn thiện lớp và thuộc tính:
Thêm ID vào tất cả các lớp.
Bổ xung kiểu cho thuộc tính.
Bước 2: Chuyển các quan hệ Association thành quan hệ Aggregation/Composition tương ứng:
Costume + RentedReceipt → RentedCostume được chuyển thành: Costume là thành phần của RentedCostume, RentedCostume là thành phần của RentedReceipt.
RentedCostume + ReturnedReceipt → ReturnedCostume được chuyển thành: RentedCostume là thành phần của ReturnedCostume, ReturnedCostume là thành phần của ReturnedReceipt.
DepositItem + RentedReceipt → RentedDeposit được chuyển thành: DepositItem là thành phần của RentedDeposit, RentedDeposit là thành phần của RentedReceipt.
RentedCostume + Damage → RentedDamage được chuyển thành: Damage là thành phần của RentedDamage, RentedDamage là thành phần của RentedCostume.
ReturnedCostume + Damage → ReturnedDamage được chuyển thành: Damage là thành phần của ReturnedDamage, ReturnedDamage là thành phần của ReturnedCostume.
Bước 3: Bổ xung thuộc tính đối tượng tương ứng theo quan hệ thành phần:
Client là thành phần của RentedReceipt, quan hệ 1 – n → RentedReceipt chứa một Client.
User là thành phần của RentedReceipt, quan hệ 1 – n → RentedReceipt chứa một User.
Client là thành phần của ReturnedReceipt, quan hệ 1 – n → ReturnedReceipt chứa một Client.
User là thành phần của ReturnedReceipt, quan hệ 1 – n → ReturnedReceipt chứa một User.
Costume là thành phần của Store, quan hệ n – 1 → Store có một danh sách Costume.
DepositItem là thành phần của RentedDeposit, quan hệ 1 – n → RentedDeposit có một DepositItem.
RentedDeposit là thành phần của RentedReceipt, quan hệ n – 1 → RentedReceipt có một danh sách RentedDeposit.
Costume là thành phần của RentedCostume, quan hệ 1 – n → RentedCostume có một Costume.
RentedCostume là thành phần của RentedReceipt, quan hệ n – 1 → RentedReceipt chứa một danh sách RentedCostume.
ReturnedCostume là thành phần của ReturnedReceipt, quan hệ n – 1 → ReturnedReceipt chứa một danh sách ReturnedCostume.
RentedDamage là thành phần của RentedCostume, quan hệ n – 1 → RentedCostume chứa một danh sách RentedDamage.
Damage là thành phần của RentedDamage, quan hệ 1 – n → RentedDamage chứa một Damage.
RentedCostume là thành phần của ReturnedCostume, quan hệ 1 – n → ReturnedCostume chứa một RentedCostume.
ReturnedDamage là thành phần của ReturnedCostume, quan hệ n – 1 → ReturnedCostume chứa một danh sách ReturnedDamage.
Damage là thành phần của ReturnedDamage, quan hệ 1 – n → ReturnedDamage chứa một Damage.
Ta được biểu đồ lớp thực thể:
3.2. Thiết kế cơ sở dữ liệu
Bước 1: Với mỗi lớp thực thể tương ứng với một bảng dữ liệu có tên dạng tbl<tên lớp thực thể>
Lớp User → bảng tblUser
Lớp Client → bảng tblClient
Lớp Store → bảng tblStore
Lớp Costume → bảng tblCostume
Lớp DepositItem → bảng tblDepositItem
Lớp Damage → bảng tblDamage
Lớp RentedCostume → bảng tblRentedCostume
Lớp RentedDeposit → bảng tblRentedDeposit
Lớp RentedReceipt → bảng tblRentedReceipt
Lớp RentedDamage → bảng tblRentedDamage
Lớp ReturnedCostume → bảng tblReturnedCostume
Lớp ReturnedReceipt → bảng tblReturnedReceipt
Lớp ReturnedDamage → bảng tblReturnedDamage
Bước 2: Các thuộc tính không phải đối tượng của lớp nào thì chuyển thành cột của bảng tương ứng