Biểu đồ usecase chi tiết + mô tả các usecase của moduleTrọng tài đăng nhập vào hệ thống -> Giao diện chính của trọng tài hiện ra -> Trọng tàichọn chức năng cập nhật kết quả trận đấu - >
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN 1
-
-BÀI TẬP LỚN
Đề tài 9: Hệ thống quản lý lên lịch
và kết quả giải đấu cờ vua vô địch thế giới
Môn học : Nhập môn công nghệ phần mềm
Nhóm học phần : N07
Số thứ tự nhóm : 15 Yêu cầu : Báo Cáo Tổng Hợp Module : Cập Nhật kết quả Sinh viên thực hiện:
Ngô Đăng Hán MSV: B21DCCN324
Vũ Quốc Huy MSV: B21DCCN444 Trần Đức Lộc MSV: B21DCCN492
Lưu Phương Thảo MSV: B21DCCN684
Hà Nội – 2024
Trang 21 Biểu đồ usecase chi tiết + mô tả các usecase của module
Trọng tài đăng nhập vào hệ thống -> Giao diện chính của trọng tài hiện ra -> Trọng tàichọn chức năng cập nhật kết quả trận đấu - > Giao diện cập nhật kết quả trận đấu hiện ra(danh sách các vòng đấu, mỗi vòng đấu viết trên một dòng) -> Trọng tài chọn vòng đấuđang được diễn ra -> Giao diện hiện ra danh sách các trận đấu của vòng đấu đó (mỗidòng là thông tin một cặp đấu) -> Trọng tài chọn cặp đấu cần cập nhật kết quả từ danhsách sổ ra -> Giao diện thông tin chi tiết của 2 cờ thủ hiện ra -> Trọng tài nhập điểm vàđiểm Elo cho 2 cờ thủ ( Các thông tin khác không có quyền sửa) rồi bấm nút lưu -> Hệthống thông báo cập nhật kết quả thành thành công, quay về giao diện trang chủ củatrọng tài
=> Để cập nhật kết quả, trọng tài phải: đăng nhập, chọn vòng đấu từ danh sách sổ ra ,chọn cặp đấu cần cập nhật kết quả ở vòng đấu đó
Use Case chi tiết của module cập nhật kết quả trận đấu:
Mô tả Use Case :
- Đăng nhập : use case này cho phép trọng tài đăng nhập vào tài khoản bằng
username và password
- Chọn vòng đấu: use case cho phép trọng tài chọn vòng đấu từ danh sách sổ ra
- Chọn cặp đấu giữa 2 cờ thủ: use case cho phép trọng tài chọn cặp đấu cần cập nhậpkết quả
Trang 32 Kịch bản chuẩn
Pre-condition Trọng tài có tài khoản
Post-condition Cập nhật kết quả
Main Events Trọng tài Lưu Phương Thảo đăng nhập vào hệ thống với
username = “congchua”, password = “abc@123” để cập nhậtkết quả cho 2 cờ thủ có id là F1 và F5 ở vòng đấu 2
Hệ thống hiện giao diện chính của trọng tài có 2 lựa chọn
- Cập nhật kết quả
- Thống kê thay đổi eloTrọng tài chọn chức năng Cập nhật kết quả
Hệ thống hiện giao diện các vòng đấu, có 11 vòng đấu:
Trọng tài chọn hàng thứ 2 tương đương với vòng đấu 2
Hệ thống hiện giao diện danh sách các cặp đấu của vòng đấu 2
và ô tìm kiếm + nút tìm kiếm (Có thể sử dụng hoặc không):
Trọng tài chọn dòng dòng đầu tương ứng với 2 cờ thủ có ID làF1 và F5
Hệ thống hiện giao diện thông tin chi tiết của 2 cờ thủ F1 và F5
- Cờ thủ số 1:
- ID: F1 (không sửa được)
- Tên: Nguyễn Văn A (không sửa được)
Trang 4- Tên: Nguyễn Văn B (không sửa được)
- Điểm: 0
- Elo: 567
- Nút save, reset, cancelTrọng tài sửa điểm của cờ thủ F1 = 0, Elo = 345, sửa điểm của
cờ thủ F2 = 1, Elo = 789 rồi click nút “save”
Hệ thống thông báo thành côngTrọng tài click “OK”
Hệ thống quay về giao diện chính của Trọng TàiException 2 Hệ thống báo đăng nhập sai
2.1 Trọng tài click vào “OK” của thông báo2.2 Hệ thống quay lại giao diện đăng nhập
7.3 Trọng tài chọn dòng đầu tiên ứng với 2 cờ thủ có ID là F1 và F5
7 Không tìm thấy tên cờ thủ trong vòng đấu
Trang 53 Biểu đồ thực thể pha phân tích của module
Mô tả module trong một đoạn văn ngắn
Hệ thống cho phép trọng tài cập nhật kết quả của mỗi trận đấu, mỗi trận đấu có 2
cờ thủ Kết quả mỗi trận đấu bao gồm điểm số và Elo Để cập nhật kết quả trận đấuthì phải chọn 1 vòng đấu từ 11 vòng đấu cho trước Sau khi nhập điểm và Eloxong, đó chính là kết quả của trận đấu giữa 2 cờ thủ tại vòng đấu được chọn
Trích xuất và phân loại danh từ
- Hệ thống: danh từ trừu tượng -> Reject
- Trọng tài: cần cần được được quản lý -> lớp Trọng Tài
- Kết quả: danh từ chung chung -> Reject
- Trận đấu: cần cần được quản lý -> lớp Trận đấu
- Cờ thủ: cần được quản lý -> lớp Cờ thủ
- Điểm số : sử dụng làm thuộc tính của của cờ thủ
- Elo: sử dụng làm thuộc tính của cờ thủ
- Vòng đấu: cần được quản lý -> lớp Vòng đấu
=> Có lớp trọng tài, lớp cờ thủ, lớp trận đấu, lớp vòng đấu
Mối quan hệ số lượng và đối tượng giữa các lớp:
- Trong 1 vòng đấu, 1 trọng tài có thể giám sát nhiều trận đấu, mỗi trận đấuchỉ được giám sát bởi một trọng tài => Trọng tài - trận đấu là 1-n
- 1 cờ thủ phải tham gia nhiều vòng đấu, 1 vòng đấu có nhiều cờ thủ => cờthủ - vòng đấu là n-n => 1 lớp ở giữa : Cờ thủ trong trận đấu
- Trong 1 vòng đấu, 1 cờ thủ chỉ tham gia 1 trận đấu, 1 trận đấu có 2 cờ thủ
=> vòng đấu - cờ thủ là 1-n
Trang 64 Biểu đồ lớp đầy đủ pha phân tích của module
Phân tích module
- Đăng nhập vào hệ thống -> giao diện đăng nhập hiện ra -> Lớp LoginView
- Đầu vào cho username -> inUsername
- Đầu vào cho password -> inPassword
- Gửi đăng nhập -> subLogin
- Nhập username/password -> hệ thống kiểm tra thông tin đăng nhập có đúngkhông -> Cần 1 phương thức
- Lựa chọn để Cập nhật kết quả -> subUpdateResult
- Lựa chọn để Thống kê thay đổi Elo -> subEloChangeStatistics
- Chọn cập nhật kết quả -> giao diện danh sách vòng đấu hiện ra -> LớpListRoundView
- Danh sách các vòng đấu sổ ra -> outsubListRound
- Chọn 1 vòng đấu-> giao diện danh sách trận đấu hiện ra -> LớpListMatchView
- Ô nhập tìm kiếm (nếu cần) -> inKey
=> Cần phương thức SearchByID(), input: từ khóa, output : none,gán cho lớp thực thể Match
- nút tìm kiếm -> subSearch
- Danh sách các vòng đấu sổ ra -> outsubListMatch
- Chọn một trận đấu cần cập nhật kết quả -> Giao diện cập nhật kết quả của 2
cờ thủ hiện ra -> Lớp UpdateResultView
- ID của cờ thủ số 1 : chỉ đọc -> outID1
- Tên của cờ thủ số 1 : chỉ đọc -> outName1
- Điểm của cờ thủ số 1 : đọc và chỉnh sửa -> inoutScore1
- Elo của cờ thủ số 1: đọc và chỉnh sửa -> inoutElo1
- ID của cờ thủ số 2 : chỉ đọc -> outID2
- Tên của cờ thủ số 2 : chỉ đọc -> outName2
- Điểm của cờ thủ số 2 : đọc và chỉnh sửa -> inoutScore2
- Elo của cờ thủ số 2: đọc và chỉnh sửa -> inoutElo2
- Nút để lưu: submit -> subSave
Trang 7- Thay đổi điểm và Elo rồi click save -> hệ thống cập nhật vào Database ->cần 1 phương thức.
Trang 85 Biểu đồ tuần tự phân tích của module
Kịch bản V.2 của module Cập nhật kết quả
1 Trọng tài nhập username/password và click on vào nút “Đăng Nhập”
2 Lớp LoginView gọi lớp Trọng Tài để xử lý
3 Lớp Trọng Tài gọi hàm checkLogin() Đăng nhập thành công
4 Lớp Trọng Tài trả về kết kết quả cho lớp LoginView
5 Lớp LoginView gọi lớp RefereeHomeView
6 Lớp RefereeHomeView hiển thị chính nó cho Trọng Tài
7 Trọng Tài chọn lựa chọn Cập nhật kết quả
8 Lớp RefereeHomeView gọi lớp ListRoundView
9 Lớp ListRoundView hiển thị chính nó cho Trọng Tài là danh sách vòng đấu
10 Trọng Tài chọn một vòng đấu
11.Lớp ListRoundView gọi lớp ListMatchView
12.Lớp ListMatchView hiển thị danh sách trận đấu
13 Trọng tài chọn một trận đấu
14.Lớp ListMatchView gọi lớp DetailInfoView
15.Lớp DetailInfoView hiển thị chính nó
16.Trọng tài sửa một số thuộc tính và click on vào nút “Lưu”
17 Lớp DetailInfoView gọi lớp Cờ thủ trong trận đấu để xử lý
18 Lớp Cờ thủ trong trận đấu gọi phương thức updateResult()
19 Lớp Cờ thủ trong trận đấu trở về lớp DetailInfoView
20 Lớp DetailInfoView thông báo thành công cho Trọng Tài
21 Trọng Tài click nút “OK” của hộp thoại
22 Lớp DetailInfoView gọi lớp RefereeHomeView
23 Lớp RefereeHomeView hiển thị chính nó cho trọng tài
Trang 96 Biểu đồ thiết kế lớp thực thể của module
Chuẩn hóa lớp và thuộc tính.
- Đổi tên các lớp và thuộc tính sang tiếng anh cho đồng bộ
- Cờ Thủ -> Player
- Trọng Tài -> Referee
- Trận đấu -> Match
- Vòng đấu -> Round
- Cờ Thủ trong trận đấu -> Player In Match
- Thêm ID cho các lớp không kế thừa từ các lớp khác + bổ sung kiểu dữ liệu
Trang 10Chuyển đổi tất cả các quan hệ association thành aggregation/composition
Player + Match -> PlayerInMactch được chuyển thành:
Player là 1 component của PlayerInMatch, PlayerInMatch là 1 component củaMatch
Thêm các thuộc tính đối tượng tương ứng với các quan hệ aggregation/composition
- Match là 1 component của Round, thuộc loại n-1 => Round có 1 danh sáchMatch
- Referee là 1 component của Match, thuộc loại 1-n => Match có 1 Referee
- Player là 1 component của PlayerInMatch, thuộc loại 1-n => PlayerInMatch
có 1 Player
- PlayerInMatch là 1 component của Match, thuộc loại n-1 => Match có 1danh sách PlayerInMatch
Trang 117 Biểu đồ thiết kế CSDL của module
Mỗi lớp thực thể đề xuất bảng tương ứng
- tblPlayer có các thuộc tính: id, name, elo, dob, phoneNumber
- tblRound: id, name, time
- tblMatch: id, name, timeStart, timeEnd
- tblReferee: id, name, phoneNumber, userName, password
- tblPlayerInMatch: id, score, eloInRound
Trang 12Chuyển quan hệ số lượng giữa các lớp thực thể thành quan hệ số lượng giữa các bảng
- 1 tblRound - n tblMatch
- 1 tblReferee - n tblMatch
- 1 tblPlayer - n tblPlayerInMatch
- 1 tblMatch - n tblPlayerInMatch
Bổ sung các thuộc tính khóa
- Khóa chính được thiết lập bằng thuộc tính id của các bảng tương ứng
- Khóa ngoại được thiết lập cho các bảng:
+ 1 tblRound - n tblMatch -> bảng tblMatch có khóa ngoại tblRoundid+ 1 tblReferee - n tblMatch -> bảng tblMatch có khóa ngoại tblRefereeid+ 1 tblPlayer - n tblPlayerInMatch -> bảng tblPlayerInMatch có khóa ngoạitblPlayerid
+ 1 tblMatch - n tblPlayerInMatch -> bảng tblPlayerInMatch có khóa ngoạitblMatchid
Loại bỏ các thuộc tính dư thừa
- Thuộc tính bị trùng lặp: Không có
- Thuộc tính dẫn xuất: Không có
8 Thiết kế giao diện và biểu đồ lớp thiết kế chi tiết đầy đủ của module
a Thiết kế giao diện
- Giao diện đăng nhập (LoginView)
Trang 13- Giao diện trang chủ của Trọng Tài (Referee Home view)
Trang 14- Giao diện cập nhật kết quả cho cờ thủ
b Biểu đồ lớp thiết kế chi tiết đầy đủ của module
Trang 15- Thuộc tính tường minh:
- UpdateResultFrm là giao diện hiện ra để cập nhật kết quả Cần những
textfield là id, name, score, elo Cần 1 nút save và 1 nút cancel
- thuộc tính tường minh
Trang 16- RefereeDAO là lớp thao tác với DB liên quan đến đối tượng Referee Cần mộtphương thức để xác minh xem thông tin đăng nhập có chính xác hay không:
- PlayerInMatchDAO là lớp thao tác với DB liên quan đến đối tượng
PlayerInMatch Cần phương thức updateResult() để cập nhật kết quả
- PlayerDAO là lớp thao tác với DB liên quan đến đối tượng Player Cần phươngthức updateELo()
Lớp thực thể: Referee, Match, Round, Player, PlayerInMatch
Trang 179 Biểu đồ tuần tự pha thiết kế của module
Kịch Bản chuẩn V.3
1 Trọng tài nhập username, password và click nút login trên loginFrm
2 Phương thức actionPerformed() của LoginFrm được gọi
3 Phương thức actionPerformed() gọi Referee để tạo đối tượng Referee
4 Lớp Referee đóng gói thông tin vào một đối tượng Referee
5 Lớp Referee trả về đối tượng Referee cho phương thức actionPerformed()
6 Phương thức actionPerformed() gọi phương thức checkLogin() của lớp RefereeDAO
7 Phương thức checkLogin() kiểm tra thông tin đăng nhập
8 Phương thức checkLogin() gọi lớp Referee đặt thêm các thuộc tính name, phoneNumber
9 Lớp Referee gọi phương thức setName(), setPhoneNumber()
10 Lớp Referee trả lại đối tượng Referee cho phương thức checkLogin()
11 Phương thức checkLogin() trả về kết quả cho actionPerformed()
12 Phương thức actionPerformed() gọi lớp RefereeHomeFrm
13 Constructor RefereeHomeFrm() được gọi
14 Giao diện RefereeHomeFrm được hiển thị cho Trọng tài
15 Trọng tài clicks in vào nút UpdateResult
16 Phương thức actionPerformed() được gọi
17 Phương thức actionPerformed() gọi lớp ListRoundFrm
18 Constructor ListRoundFrm() được gọi
19 Lớp ListRoundFrm() gọi phương thức displayAllRound() của class RounDAO()
20 Phương thức displayAllRound() được thực hiện
21 Phương thức displayAllRound gọi Round để đóng gói kết quả
22 Lớp Round đóng gói từng kết quả vào 1 đối tượng Round
23 Lớp Round trả về kết quả cho phương thức displayAllround
24 Trả về kết quả cho lớp ListRoundFrm
25 Giao diện ListRoundFrm được hiện ra cho trong Trọng Tài
26 Trọng tài click vào 1 vòng đấu
27 Phương thức actionPerformed() được gọi
28 Phương thức actionPerformed() gọi lớp ListMatchFrm
29 Constructor ListMatchFrm() được gọi
30 Lớp ListMatchFrm() gọi phương thức displayAllMatch() của class MatchDAO()
31 Phương thức displayAllMatch() được thực hiện
32.Phương thức displayAllMatch() gọi Match để đóng gói kết quả
33.Lớp Match đóng gói từng kết quả vào 1 đối tượng Match
34 Lớp Match trả về kết cho phương thức displayAllMatch()
35 Trả về kết quả cho ListMatchFrm()
36 Giao diện ListMatchFrm được hiển thị cho trọng tài
37 Trọng tài click vào 1 trận đấu
38 Phương thức actionPerformed() của lớp ListMatchFrm được gọi
39 Phương thức actionPerformed() gọi lớp UpdateResultFrm
40 Constructor UpdateResultFrm() được gọi
Trang 1841 Giao hiện UpdateResultFrm được hiển thị cho Trọng Tài
42 Nhân viên nhập điểm và elo cho 2 cờ thủ và nhấn vào nút lưu
43 Phương thức actionPerformed() của lớp UpdateResultFrm được gọi
44 Phương thức actionPerformed() gọi phương thức UpdateResult() củaPlayerInMatchDAO()
45 Phương thức UpdateResult() được thực hiện
46 Phương thức UpdateResult() gọi PlayerInMatch để đóng gói kết quả47.Lớp PlayerInMatch đóng gói kết quả
48.Trả về kết quả cho phương thức UpdateResult()
49 Phương thức UpdateResult() trả về kết quả cho actionPerformed()
50 Giao diện RefereeHomeFrm được hiển thị cho Trọng tài
Trang 2010 Test plan và test case chuẩn cho test hộp đen của module
a Test plan
STT Module Các lớp test case
1 Cập nhật kết quả Cập nhật kết quả cho cho trận đấu đã tồn tại
2 Cập nhật kết quả cho trận đấu chưa tồn tồn tại
3 Cập nhật 2 lần liên tục cho trận đấu đã tồn tại
b Viết test case chuẩn cho test hộp đen
- CSDL trước khi test
- tblreferee
- tblround
- tblmatch
Trang 21- tblplayer
- tblplayerinmatch
- Kịch Bản
Các bước thực hiện Kết quả mong đợi
1 Mở phần mềm Giao diện đăng nhâp hiện ra
- username
- password
- login
2 Nhậpusername = username1password = password1click đăng nhập
Giao diện chính chính của trọng tài hiện racác lựa chọn
- Cập nhật kết quả
- Thống kê thay đổi elo
3 Chọn “Cập nhật kếtquả”
Giao diện các vòng đấu hiện ra
4 Chọn vòng đấu 1 Giao diện danh sách các cặp đấu của vòng 1
STT ID cờ
thủ 1
Tên cờ thủ 1
ID cờ thủ 2
Tên cờ thủ 2
1 player1 Nguyễn player2 Trần Thị
Trang 22Văn A B
2 player3 Lưu
Phương Thảo
+ Elo: 1500
- Cờ thủ 2
+ ID: player2(Không sửa được)+ Trần Thị B (không sửa được)+ Điểm:0
+ Elo: 1600
6 Trọng tài sửa
- điểm player2 là1
- CSDL sau khi test
- Bảng playerinmatch thay đổi
Trang 23- Bảng player thay thay đổi