Tải bản đầy đủ (.pdf) (31 trang)

Nhập và tra cứu thông tintrận đấu bóng đá bài tập lớn nhập môn lập trình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.55 MB, 31 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Họ và tên sinh viên:
1. Phạm Quốc Huy - 22021558
2. Nguyễn Thái Bảo - 22021546

NHẬP VÀ TRA CỨU THÔNG TIN
TRẬN ĐẤU BĨNG ĐÁ
BÀI TẬP LỚN NHẬP MƠN LẬP TRÌNH

Ngành: Cơ học kĩ thuật và Tự động hóa
Lớp: K67 - AT
Cán bộ hướng dẫn: T.S Trần Thanh Hải

  HÀ NỘI – 19/04/2023
P a g e 1 | 31


MỤC LỤC
A. PHẦN MỞ ĐẦU………………………………………………3
1. Giới thiệu bài tập lớn……………………………………...3
2. Ý tưởng……………………………………………………..3
3. Ưu điểm…………………………………………………….4
4. Nhược điểm………………………………………………...5
B. CHƯƠNG TRÌNH…………………………………………….5
1. Tóm tắt theo sơ đồ khối……………………………………5
2. Tóm tắt kiến thức sử dụng trong bài……………………...6
3. Thể hiện chương trình thơng qua lệnh code chi tiết……..6
C. HƯỚNG DẪN SỬ DỤNG……………………………………24
D. LỜI KẾT………………………………………………………27



P a g e 2 | 31


A. PHẦN MỞ ĐẦU
1. Giới thiệu bài tập lớn
1.1.

Tên bài tập: Nhập và tra cứu thơng tin trận đấu bóng đá

1.2.

Công cụ sử dụng: Dev C++

-

Ngôn ngữ C++ là một ngơn ngữ lập trình phổ biến và mạnh mẽ, được sử dụng rộng
rãi trong lĩnh vực phát triển phần mềm. Với tính năng đa nền tảng và khả năng tương
tác với hệ thống, C++ là một công cụ hiệu quả để xây dựng các ứng dụng đa dạng.
Trong bài báo cáo này, chúng ta sẽ tìm hiểu về việc sử dụng ngôn ngữ C++ để tra cứu
thông tin thông số của một trận đấu bóng đá.

1.3.

Kiến thức: Sử dụng các phím mũi tên và nút Enter để truy cập vào menu các chức

năng kết hợp cùng thư viện tự tạo và các thư viện có sẵn.
1.4.

Mục đích: Tạo ra một cửa sổ console có thể dùng các phím mũi tên lên xuống để


truy cập vào các chức năng nhập, truy xuất, hiển thị,... có tiềm năng phát triển.

2. Ý tưởng
- Kết hợp các kiến thức đã học trong chương trình cùng với những kiến
thức tìm hiểu được từ bên ngồi để tạo ra được một bài tập lớn.
- Tạo ra được một bảng chức năng (menu) giúp người dùng nhập, xuất,
hiển thị các thơng tin trận bóng.
- Sử dụng các màu sắc để bài tập trở nên sinh động, bắt mắt hơn.
- Chủ động sử dụng các lệnh trong thư viện có sẵn kết hợp thư viện tự tạo
để giúp bố cục bài tập lớn trở nên logic hơn.
- Sử dụng các câu lệnh liên quan đến các phím mũi tên kết hợp với nhập
dữ liệu từ bàn phím.
2.1.

 Mơ tả vấn đề : Một trận đấu bóng đá thường có nhiều thơng số như tỷ

số, thời gian thi đấu, đội hình, số lần sút, số lần kiểm sốt bóng, số thẻ phạt,
số lần phạt góc, v.v... Các thơng số này được ghi lại và lưu trữ trong cơ sở 
dữ liệu hoặc các nguồn dữ liệu khác. Để tra cứu thông tin này, chúng ta cần
 phải xây dựng một ứng dụng có khả năng nhập và xử lý dữ liệu, đồng thời
P a g e 3 | 31


cung cấp giao diện để người dùng có thể tương tác và tra cứu thông tin một
cách thuận tiện.
2.2.

 Giải pháp: Sử dụng ngôn ngữ C++ và các thư viện hỗ trợ, chúng ta


có thể xây dựng một ứng dụng đơn giản để tra cứu thơng tin của một trận
đấu bóng đá. Giải pháp có thể bao gồm các bước sau:
- Thiết kế giao diện người dùng: Sử dụng các công cụ và thư viện của C++,
chúng ta có thể xây dựng giao diện cho ứng dụng, cho phép người dùng
nhập thơng tin của trận đấu bóng đá cần tra cứu, chẳng hạn như mã trận đấu,
ngày thi đấu, v.v...
- Xây dựng cơ sở dữ liệu: Sử dụng các công cụ và thư viện C++ hỗ trợ kết nối
và truy vấn cơ sở dữ liệu, chúng ta có thể xây dựng cơ sở dữ liệu để lưu trữ
thông tin của các trận đấu bóng đá. Các thơng số của trận đấu bao gồm tỷ số,
thời gian thi đấu, đội hình, số lần sút, số lần kiểm sốt bóng, số thẻ phạt, số
lần phạt góc, v.v... có thể được lưu trữ dưới dạng các bản ghi trong cơ sở dữ
liệu.
- Xây dựng chức năng tra cứu thông tin: Sử dụng ngôn ngữ C++ và các thư
viện hỗ trợ, chúng ta có thể xây dựng các chức năng để tra cứu thông tin của
trận đấu bóng đá từ cơ sở dữ liệu. Ví dụ, chúng ta có thể xây dựng các hàm
để thực hiện các truy vấn dữ liệu như lấy thông tin trận đấu dựa trên mã trận
đấu hoặc ngày thi đấu, tính tổng số lần sút, số lần kiểm sốt bóng, v.v... Các
kết quả truy vấn có thể được trả về cho người dùng để hiển thị trên giao
diện.
- Xây dựng tính năng nhập dữ liệu: Ngồi tra cứu thơng tin, chúng ta cũng có
thể xây dựng tính năng cho phép người dùng nhập dữ liệu của một trận đấu
 bóng đá mới vào cơ sở dữ liệu. Ví dụ, người dùng có thể nhập thơng tin về
tỷ số, thời gian thi đấu, đội hình, số lần sút, số lần kiểm sốt bóng, số thẻ
 phạt, số lần phạt góc, v.v... thơng qua giao diện của ứng dụng. Các dữ liệu
P a g e 4 | 31


này sau đó sẽ được lưu trữ vào cơ sở dữ liệu để có thể tra cứu và xem lại sau
này.
- Xử lý lỗi và đảm bảo tính nhất quán dữ liệu: Trong quá trình nhập dữ liệu và

truy vấn cơ sở dữ liệu, chúng ta cần đảm bảo tính nhất quán của dữ liệu và
xử lý các lỗi có thể xảy ra. Ví dụ, chúng ta có thể kiểm tra tính hợp lệ của dữ
liệu nhập vào như định dạng của tỷ số, thời gian thi đấu, số lần sút, v.v... để
đảm bảo dữ liệu được lưu trữ và hiển thị chính xác trên giao diện.
3. Ưu điểm
- Lập trình bằng ngơn ngữ C++ dễ tiếp cận người sử dụng trong quá trình
lên ý tưởng và làm bài.
- Giúp người dùng có thể nhập, xuất, tra cứu thơng tin trận đấu dựa trên
ngơn ngữ lập trình C++.
- Chương trình chạy tốt trên hầu hết các dịng máy có dung lượng thấp và
đơn giản hơn so với lập trình đồ họa.
- Có tiềm năng phát triển thành trang tra cứu thơng tin bóng đá tồn cầu...
4. Nhược điểm
- Tốc độ xử lý chưa cao.
- Chưa tối ưu nhập nhiều trận đấu bóng đá.
- Chưa tối ưu được nhiều chức năng.
- Màn hình hiển thị cịn đơn giản
B. CHƯƠNG TRÌNH

CHƯƠNG I. Sơ đồ khối
1.1.

Sơ đồ khối chung

P a g e 5 | 31


Bắt đầu

Xử lý lựa chọn người dùng


Sai

Kiểm tra

Đúng

Nhập và lưu thơng tin đội
bóng và cầu thủ

Hiển thị thơng tin đội bóng và
cầu thủ

Tìm kiếm và xóa thơng tin cầu thủ

Kết thúc

P a g e 6 | 31


1.2.

Sơ đồ khối chi tiết

Bắt đầu
Headers
#include <ThuVien.h>
#include <isotream>
#include <vector>
#include <fstream>

#include <algorithm>
#include <cctype>
#include <string>
#include <conio.h>
#include <iomanip>
#include<windows.h>
#include <mmsystem.h>
#pragma comment (lib,
“winmm.lib”)

Định dạng (console)

Các hàm trong chương trình
- String, float, int (tạo các
chỉ số, thông số, tên,
tuổi,...
- Void (tạo các hàm thông
tin, thông số, truy xuất,
tìm kiếm...)
- Struct (tạo cấu trúc chỉ số
thơng tin cầu thủ, đội
 bóng...)
- Playsound (phát âm
thanh chức năng)
- Getch() (điều khiển phím
mũi tên)
Hàm main

- Khởi tạo
- Thiết lập giao diện

- Set up các phím mũi tên di chuyển + Enter (qua các hàm getch() và
key).
- Khởi tạo các chức năng ở trên giao diện gồm chức năng:
 Nhập dữ liệu
Hiển thị dữ liệu
Tra cứu dữ liệu
Xóa dữ liệu
Thốt
- Chèn file âm thanh dựa vào hàm Playsound để menu thêm sống động.






P a g e 7 | 31


Nhập dữ liệu vào chương trình
- Sử dụng bàn phím kết hợp với các hàng void tạo ra để nhập và lưu vào
chương trình.
- Sử dụng các hàm void vừa tạo kết hợp cùng các toán tử if, else, for,...
để cho chương trình có thể nhận được thơng tin từ bàn phím vào.
- Dùng vector để lưu trữ danh sách cầu thủ đội bóng.

P a g e 8 | 31


2. Tóm tắt kiến thức sử dụng trong bài 
2.1.

 Khối bắt đầu
- Bao gồm: khai báo thư viện có sẵn và tạo một hàm ThuVien.h và hàm main
2.2.
Khối lựa chọn
- Sử dụng các hàm: GetStdHandle và SetConsoleTextAttribute để thay đổi màu sắc văn
 bản và tương tác với bàn phím thơng qua "_getch".
- Sử dụng một mảng chuỗi để lưu trữ danh sách các tùy chọn và một vòng lặp để cho
 phép người dùng lựa chọn tùy chọn của họ.
2.3.
Khối nhập dữ liệu
- Dùng kiểu dữ liệu void để tạo ra các hàm kết hợp cùng các câu lệnh điều kiện if, else,
for.....
2.4.
 Khối hiển thị
- Sử dụng kiểu void để tạo ra các hàm hiển thị kết hợp với câu lệnh if,else,for ,…; tạo
màu sắc SetConsoleTextAttribute…….
2.5.
Khối kết thúc
- Đóng của sổ console, sử dụng câu lệnh return.
3. Thể hiện chương trình thơng qua lệnh code chi tiết bao gồm có 3 files.
3.1.

 File code thư viện 

4. #ifndef __THUVIEN__
5. #define __THUVIEN__
6.
7. #include <iostream>
8. #include <vector>
9. #include <fstream>

10.#include <algorithm>
11.#include <cctype>
12.#include <string>
13.#include <conio.h>
14.#include <iomanip>
15.#include <windows.h>
16.
17.using namespace std;
18.
19.struct CauThu
20.{
21.
string ten;
22.
string doituyen;
23.
string viTri;
24.
float soao;
25.
float diemxephang;

P a g e 9 | 31


26.
float sophutthidau;
27.
float sophatacbong;
28.

float phamloi;
29.
float chuyenchinhxac;
30.
float banthang;
31.
float sokientao;
32.
float thevang;
33.
float thedo;
34.
float cuuthua;
35.
float cusut;
36.};
37.struct DoiBong
38.{
39.
int sobanthang;
40.
string tendoi;
41.
int solansut;
42.
int suttrungdich;
43.
string kiemsoatbong;
44.
int luottruyenbong;

45.
string tyletruyenbongchinhxac;
46.
int phamloi;
47.
int thevang;
48.
int thedo;
49.
int vietvi;
50.
int phatgoc;
51.};
52.
53. DoiBong Nhap1DoiBong ();
54.void NhapThongKeTranDau (vector <DoiBong>& thongketrandau);
55.void nhapThongTinDoiHinh(vector <CauThu >& danhSachCauThu);
56.void nhapThongTinDoiHinh(vector <CauThu >& danhSachCauThuDuBi );
57.void XuatCauThuCoBan(CauThu cauthu, int stt);
58.void XuatThongKeTranDau (vector <DoiBong>& thongketrandau);
59.void HienThiDayDuThongTin (CauThu  cauthu );
60.void hienThiBangCauThu(const vector<CauThu>& danhSachCauThu );
61.void hienThiBangCauThu(const vector<CauThu>& danhSachCauThuDuBi );
62.void truyXuatThongTinCauThu (const vector <CauThu >& danhSachCauThu);
63.void truyXuatThongTinCauThu (const vector <CauThu >& danhSachCauThuDuBi);
64.void xoaCauThu(vector <CauThu>& danhSachCauThu );
65.void xoaCauThu(vector <CauThu>& danhSachCauThuDuBi );
66.
67.#endif // !__THUVIEN__


  3.2 File code chức năng 
68.#include "ThuVien.h"

P a g e 10 | 31


69.
70.void nhapThongTinDoiHinh(vector <CauThu >& danhSachCauThu) {
71.
int soLuong;
72.
cout << " Nhap so luong cau thu : ";
73.
cin >> soLuong;
74.
cin.ignore();
75.
cout << "----------------------------------- \n";
76.
77.
for (int i = 0; i < soLuong; i++) {
78.
CauThu cauThu;
79.
cout << " Nhap thong tin cau thu thu " << i + 1 << ":" << endl;
80.
cout << " Nhap ho ten: ";
81.
getline(cin >> ws, cauThu.ten);
82.

83.
cout << " Nhap doi tuyen: ";
84.
getline(cin >> ws, cauThu.doituyen);
85.
86.
cout << " Nhap so ao: ";
87.
cin >> cauThu.soao;
88.
89.
cout << " Nhap diem xep hang: ";
90.
cin.ignore();
91.
cin >> cauThu.diemxephang;
92.
93.
cout << " Nhap thoi gian thi dau: ";
94.
cin.ignore();
95.
cin >>  cauThu.sophutthidau;
96.
97.
cout << " Nhap vi tri: ";
98.
cin.ignore();
99.
getline(cin >> ws, cauThu.viTri);

100.
101.
transform(cauThu.viTri. begin(), cauThu.viTri.end(),
cauThu.viTri.begin(), ::toupper);
102.
if (cauThu.viTri == "THU MON")
103.
{
104.
cout << " Nhap so pha cuu thua: ";
105.
cin >> cauThu.cuuthua;
106.
107.
cout << " Nhap so the vang: ";
108.
cin >> cauThu.thevang;
109.
110.
cout << " Nhap so the do: ";
111.
cin >> cauThu.thedo;
112.
cout << "----------------------------------- \n";

P a g e 11 | 31


113.
114.

115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.

145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.

}
else if (cauThu.viTri == "HAU VE")
{
cout << " Nhap so pha tac bong: ";
cin >>  cauThu.sophatacbong;
cout << " Nhap so lan pham loi: ";
cin >> cauThu.phamloi;
cout << " Nhap so luot chuyen chinh xac: ";
cin >>  cauThu.chuyenchinhxac;
cout << " Nhap so ban thang: ";
cin >> cauThu.banthang;
cout << " Nhap so lan kien tao: ";
cin >> cauThu.sokientao;
cout << " Nhap so the vang: ";
cin >> cauThu.thevang;
cout << " Nhap so the do: ";

cin >> cauThu.thedo;
cout << "----------------------------------- \n";
}
else if (cauThu.viTri == "TIEN VE")
{
cout << " Nhap so ban thang: ";
cin >> cauThu.banthang;
cout << " Nhap so cu sut: ";
cin >> cauThu.cusut;
cout << " Nhap so lan kien tao: ";
cin >> cauThu.sokientao;
cout << " Nhap so the vang: ";
cin >> cauThu.thevang;
cout << " Nhap so the do: ";
cin >> cauThu.thedo;
cout << "----------------------------------- \n";
}
else if (cauThu.viTri == "TIEN DAO")
{

P a g e 12 | 31


158.
cout << " Nhap so ban thang: ";
159.
cin >> cauThu.banthang;
160.
161.
cout << " Nhap so cu sut: ";

162.
cin >> cauThu.cusut;
163.
164.
cout << " Nhap so lan kien tao: ";
165.
cin >> cauThu.sokientao;
166.
167.
cout << " Nhap so the vang: ";
168.
cin >> cauThu.thevang;
169.
170.
cout << " Nhap so the do: ";
171.
cin >> cauThu.thedo;
172.
cout << "----------------------------------- \n";
173.
}
174.
175.
danhSachCauThu. push_back(cauThu);
176.
}
177.
}
178.
179.

void XuatCauThuCoBan(CauThu  cauthu , int stt)
180.
{
181.
cout << "|" << setw(8) << stt << "|" << setw(27) << cauthu.ten
<< "|" << setw(25) << cauthu.doituyen << "|" << setw(18) << cauthu.viTri
<< "|" << setw(19) << cauthu.soao << "|" << endl;
182.
}
183.
184.
void HienThiDayDuThongTin(CauThu cauthu)
185.
{
186.
HANDLE hConsole;
187.
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
188.
SetConsoleTextAttribute(hConsole, 14);
189.
cout << "+----------------------------------+ " << endl;
190.
cout << " " << cauthu.ten << " - " << cauthu.viTri << endl;
191.
cout << " " << cauthu.doituyen << " #" << cauthu.soao << "\n\n";
192.
cout << " Diem xep hang cau thu : " << setw(5) << 
cauthu.diemxephang << endl;
193.

cout << " So phut thi dau
:" << setw(5)
<194.
cout << "------------------------------------ " << endl;
195.
if (cauthu.viTri == "THU MON")
196.
{
197.
cout << " Cuu thua
:" << setw(5) << 
cauthu.cuuthua << endl;

P a g e 13 | 31


198.
cout << " The vang
:" << setw(5)
cauthu.thevang << endl;
199.
cout << " The do
:" << setw(5)
cauthu.thedo << endl;
200.
}
201.
else if (cauthu.viTri == "HAU VE")
202.

{
203.
cout << " So pha tac bong
:" << setw(5)
cauthu.sophatacbong << endl;
204.
cout << " Pham loi
:" << setw(5)
cauthu.phamloi << endl;
205.
cout << " Luot chuyen chinh xac : " << setw(5)
cauthu.chuyenchinhxac << endl;
206.
cout << " Ban thang
:" << setw(5)
cauthu.banthang << endl;
207.
cout << " So lan kien tao
:" << setw(5)
cauthu.sokientao << endl;
208.
cout << " The vang
:" << setw(5)
cauthu.thevang << endl;
209.
cout << " The do
:" << setw(5)
cauthu.thedo << endl;
210.
}

211.
else if (cauthu.viTri == "TIEN VE")
212.
{
213.
cout << " Ban thang
:" << setw(5)
cauthu.banthang << endl;
214.
cout << " Tong so cu sut
:" << setw(5)
cauthu.cusut << endl;
215.
cout << " So lan kien tao
:" << setw(5)
cauthu.sokientao << endl;
216.
cout << " The vang
:" << setw(5)
cauthu.thevang << endl;
217.
cout << " The do
:" << setw(5)
cauthu.thedo << endl;
218.
}
219.
else if (cauthu.viTri == "TIEN DAO")
220.
{

221.
cout << " Ban thang
:" << setw(5)
cauthu.banthang << endl;
222.
cout << " Tong so cu sut
:" << setw(5)
cauthu.cusut << endl;
223.
cout << " So lan kien tao
:" << setw(5)
cauthu.sokientao << endl;
224.
cout << " The vang
:" << setw(5)
cauthu.thevang << endl;

<< 
<< 

<< 
<< 
<< 
<< 
<< 
<< 
<< 

<< 
<< 

<< 
<< 
<< 

<< 
<< 
<< 
<< 

P a g e 14 | 31


225.
cout << " The do
:" << setw(5) << 
cauthu.thedo << endl;
226.
}
227.
cout << "+----------------------------------+ " << endl;
228.
}
229.
230.
void hienThiBangCauThu(const vector <CauThu >& danhSachCauThu )
231.
{
232.
HANDLE hConsole;
233.

hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
234.
if (danhSachCauThu.empty())
235.
{
236.
SetConsoleTextAttribute(hConsole, 14);
237.
cout << "Danh sach cau thu rong! " << endl;
238.
}
239.
else
240.
{
241.
SetConsoleTextAttribute(hConsole, 15);
242.
int luaChon = 0;
243.
int key;
244.
do
245.
{
246.
system("cls");
247.
cout << "-------------------------------------------DANH SACH CAU THU------------------------------------------ " << endl;
248.

cout << 
"+----------------------------------------------------------------------------------------------------+ " << endl;
249.
cout << "|
STT |
TEN CAU THU
|
DOI TUYEN
|
VI TRI
|
SO AO
| " << endl;
250.
cout << 
"+----------------------------------------------------------------------------------------------------+ " << endl;
251.
for (int i = 0; i < danhSachCauThu.size(); i++)
252.
{
253.
if (i == luaChon)
254.
SetConsoleTextAttribute(hConsole, 30);
255.
XuatCauThuCoBan(danhSachCauThu[i], i + 1);
256.
SetConsoleTextAttribute(hConsole, 15);
257.
cout << 

"+----------------------------------------------------------------------------------------------------+ " << endl;
258.
}
259.
key = _getch();
260.
if (key == 13)

P a g e 15 | 31


261.
break;
262.
else if (key == 72)
263.
{
264.
luaChon--;
265.
if (luaChon < 0)
266.
luaChon = 0;
267.
}
268.
else if (key == 80)
269.
{
270.

luaChon++;
271.
if (luaChon >= danhSachCauThu.size())
272.
luaChon = danhSachCauThu.size() - 1;
273.
}
274.
} while (true);
275.
HienThiDayDuThongTin (danhSachCauThu[luaChon]);
276.
}
277.
}
278.
279.
void truyXuatThongTinCauThu (const vector<CauThu>& danhSachCauThu ) {
280.
string tenCanTim;
281.
cout << " Nhap ten cau thu can truy xuat: ";
282.
getline(cin >> ws, tenCanTim);
283.
284.
bool found = false;
285.
for (int i = 0; i < danhSachCauThu.size(); i++)
286.

{
287.
if (danhSachCauThu[i].ten == tenCanTim)
288.
{
289.
290.
HANDLE hConsole;
291.
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
292.
SetConsoleTextAttribute(hConsole, 14);
293.
cout << "+----------------------------------+ " << endl;
294.
cout << " " <<  danhSachCauThu[i].ten << " - " << 
danhSachCauThu[i].viTri << endl;
295.
cout << " " << danhSachCauThu[i].doituyen << " #" << 
danhSachCauThu[i].soao << "\n\n";
296.
cout << " Diem xep hang cau thu : " << setw(5) << 
danhSachCauThu[i].diemxephang << endl;
297.
cout << " So phut thi dau
:" << setw(5)
<298.
cout << "------------------------------------ " << endl;
299.

if  (danhSachCauThu[i].viTri == "THU MON")
300.
{

P a g e 16 | 31


301.
cout << " Cuu thua
:" << setw(5) << 
danhSachCauThu[i].cuuthua << endl;
302.
cout << " The vang
:" << setw(5) << 
danhSachCauThu[i].thevang << endl;
303.
cout << " The do
:" << setw(5) << 
danhSachCauThu[i].thedo << endl;
304.
}
305.
else if  (danhSachCauThu[i].viTri == "HAU VE")
306.
{
307.
cout << " So pha tac bong
:" << setw(5) << 
danhSachCauThu[i].sophatacbong << endl;
308.

cout << " Pham loi
:" << setw(5) << 
danhSachCauThu[i].phamloi << endl;
309.
cout << " Luot chuyen chinh xac : " << setw(5) << 
danhSachCauThu[i].chuyenchinhxac << endl;
310.
cout << " Ban thang
:" << setw(5) << 
danhSachCauThu[i].banthang << endl;
311.
cout << " So lan kien tao
:" << setw(5) << 
danhSachCauThu[i].sokientao << endl;
312.
cout << " The vang
:" << setw(5) << 
danhSachCauThu[i].thevang << endl;
313.
cout << " The do
:" << setw(5) << 
danhSachCauThu[i].thedo << endl;
314.
}
315.
else if  (danhSachCauThu[i].viTri == "TIEN VE")
316.
{
317.
cout << " Ban thang

:" << setw(5) << 
danhSachCauThu[i].banthang << endl;
318.
cout << " Tong so cu sut
:" << setw(5) << 
danhSachCauThu[i].cusut << endl;
319.
cout << " So lan kien tao
:" << setw(5) << 
danhSachCauThu[i].sokientao << endl;
320.
cout << " The vang
:" << setw(5) << 
danhSachCauThu[i].thevang << endl;
321.
cout << " The do
:" << setw(5) << 
danhSachCauThu[i].thedo << endl;
322.
}
323.
else if  (danhSachCauThu[i].viTri == "TIEN DAO")
324.
{
325.
cout << " Ban thang
:" << setw(5) << 
danhSachCauThu[i].banthang << endl;
326.
cout << " Tong so cu sut

:" << setw(5) << 
danhSachCauThu[i].cusut << endl;
327.
cout << " So lan kien tao
:" << setw(5) << 
danhSachCauThu[i].sokientao << endl;

P a g e 17 | 31


328.
cout << " The vang
:" << setw(5) << 
danhSachCauThu[i].thevang << endl;
329.
cout << " The do
:" << setw(5) << 
danhSachCauThu[i].thedo << endl;
330.
}
331.
cout << "+----------------------------------+ " << endl;
332.
found = true;
333.
}
334.
}
335.
336.

if (!found) {
337.
cout << " -----> Khong tim thay thong tin cau thu! " << endl;
338.
}
339.
}
340.
341.
void xoaCauThu(vector<CauThu>& danhSachCauThu ) {
342.
string tenCanXoa;
343.
cout << " Nhap ten cau thu can xoa: ";
344.
getline(cin >> ws, tenCanXoa);
345.
346.
bool found = false;
347.
for (vector< CauThu>::iterator it = danhSachCauThu.begin(); it !=
danhSachCauThu.end(); ) {
348.
if (it->ten == tenCanXoa) {
349.
it = danhSachCauThu.erase(it);
350.
found = true;
351.
}

352.
else {
353.
++it;
354.
}
355.
}
356.
357.
if (found) {
358.
cout << " -----> Da xoa cau thu! " << endl;
359.
}
360.
else {
361.
cout << " -----> Khong tim thay cau thu can xoa! " << endl;
362.
}
363.
}
364.
365.
int sobanthang;
366.
string tendoi;
367.
int solansut;

368.
int suttrungdich;
369.
string kiemsoatbong;

P a g e 18 | 31


370.
int luottruyenbong;
371.
string tiletruyenbongchinhxac;
372.
int phamloi;
373.
int thevang;
374.
int thedo;
375.
int vietvi;
376.
int phatgoc;
377.   DoiBong  Nhap1DoiBong()
378.
{
379.
DoiBong td;
380.
cout << "Nhap ten doi: ";
381.

std::getline(std::cin >> std::ws, td.tendoi);
382.
cout << "So ban thang: "; cin >> td.sobanthang;
383.
cout << "So lan sut: "; cin >> td.solansut;
384.
cout << "Sut trung dich: "; cin >> td.suttrungdich;
385.
cout << "Kiem soat bong: "; cin >> td.kiemsoatbong;
386.
cout << "Luot truyen bong: "; cin >> td.luottruyenbong;
387.
cout << "Ty le truyen bong chinh xac: "; cin >> 
td.tyletruyenbongchinhxac;
388.
cout << "Pham loi: "; cin >> td.phamloi;
389.
cout << "The vang: "; cin >> td.thevang;
390.
cout << "The do: "; cin >> td.thedo;
391.
cout << "Viet vi: "; cin >> td.vietvi;
392.
cout << "Phat goc: "; cin >> td.phatgoc;
393.
return td;
394.
}
395.
void NhapThongKeTranDau(vector<DoiBong>& thongketrandau )

396.
{
397.
DoiBong doiA;
398.
DoiBong doiB;
399.
cout << "+--------------------------------------+ " << endl;
400.
cout << "Nhap thong ke cua doi A " << endl;
401.
cout << "---------------------------------------- " << endl;
402.
doiA = Nhap1DoiBong();
403.
cout << "+--------------------------------------+ " << endl;
404.
cout << "Nhap thong ke cua doi B " << endl;
405.
cout << "---------------------------------------- " << endl;
406.
doiB = Nhap1DoiBong();
407.
thongketrandau. push_back(doiA);
408.
thongketrandau. push_back(doiB);
409.
}
410.
void XuatThongKeTranDau(vector<DoiBong>& thongketrandau )

411.
{
412.
HANDLE hConsole;
413.
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);

P a g e 19 | 31


414.
int luaChon = 0;
415.
int listLen = 11;
416.
int key;
417.
string ListMenu[] = {
418.
"1. Kiem soat bong ",
419.
"2. So lan sut ",
420.
"3. Sut trung dich ",
421.
"4. Luot truyen bong",
422.
"5. Ty le truyen bong chinh xac ",
423.
"6. Pham loi",

424.
"7. The vang",
425.
"8. The do",
426.
"9. Viet vi",
427.
"10. Phat goc",
428.
"11. Thoat"
429.
};
430.
431.
do
432.
{
433.
system("cls");
434.
SetConsoleTextAttribute(hConsole, 14);
435.
cout << "-------------------------THONG KE TRAN
DAU----------------------------" << endl;
436.
cout << setw(15) << thongketrandau[0].tendoi << " 
"
<< thongketrandau[0].sobanthang << " 
" << 
thongketrandau[1].sobanthang << " 

" << thongketrandau[1].tendoi
<< endl;
437.
cout << 
"---------------------------------------------------------------------- " 
<< endl;
438.
SetConsoleTextAttribute(hConsole, 15);
439.
for (int i = 0; i < listLen; i++)
440.
{
441.
if (i == luaChon)
442.
{
443.
SetConsoleTextAttribute(hConsole, 49);
444.
}
445.
cout << ListMenu[i] << endl;
446.
SetConsoleTextAttribute(hConsole, 15);
447.
}
448.
SetConsoleTextAttribute(hConsole, 14);
449.
cout << 

"---------------------------------------------------------------------- " 
<< endl;
450.
key = _getch();

P a g e 20 | 31


451.
if (key == 13)
452.
break;
453.
else if (key == 72)
454.
{
455.
luaChon--;
456.
if (luaChon < 0)
457.
luaChon = 0;
458.
}
459.
else if (key == 80)
460.
{
461.
luaChon++;

462.
if (luaChon >= listLen)
463.
luaChon = listLen - 1;
464.
}
465.
} while (true);
466.
luaChon = luaChon + 1;
467.
switch (luaChon)
468.
{
469.
case 1:
470.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
471.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
472.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;

473.
cout << "|
Kiem soat bong(%)
|" << setw(20) << 
thongketrandau[0].kiemsoatbong << " |" << setw(20) << 
thongketrandau[1].kiemsoatbong << " |" << endl;
474.
break;
475.
case 2:
476.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
477.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
478.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
479.
cout << "|
So Lan sut
|" << setw(20) << 
thongketrandau[0].solansut << " |" << setw(20) << 
thongketrandau[1].solansut << " |" << endl;


P a g e 21 | 31


480.
break;
481.
case 3:
482.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
483.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
484.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
485.
cout << "|
Sut trung dich
|" << setw(20) << 
thongketrandau[0].suttrungdich << " |" << setw(20) << 
thongketrandau[1].suttrungdich << " |" << endl;
486.
break;

487.
case 4:
488.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
489.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
490.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
491.
cout << "|
Luot truyen bong
|" << setw(20) << 
thongketrandau[0].luottruyenbong << " |" << setw(20) << 
thongketrandau[1].luottruyenbong << " |" << endl;
492.
break;
493.
case 5:
494.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;

495.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
496.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
497.
cout << "| Ty le truyen chinh xac | " << setw(20) << 
thongketrandau[0].tyletruyenbongchinhxac << " |" << setw(20) << 
thongketrandau[1].tyletruyenbongchinhxac << " |" << endl;
498.
break;
499.
case 6:

P a g e 22 | 31


500.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
501.
cout << "|
DOI BONG
|" << setw(20) << 

thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
502.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
503.
cout << "|
Pham loi
|" << setw(20) << 
thongketrandau[0].phamloi << " |" << setw(20) << thongketrandau[1].phamloi
<< " |" << endl;
504.
break;
505.
case 7:
506.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
507.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
508.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;

509.
cout << "|
The vang
|" << setw(20) << 
thongketrandau[0].thevang << " |" << setw(20) << thongketrandau[1].thevang
<< " |" << endl;
510.
break;
511.
case 8:
512.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
513.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
514.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
515.
cout << "|
The do
|" << setw(20) << 
thongketrandau[0].thedo << " |" << setw(20) << thongketrandau[1].thedo << 
" |" << endl;

516.
break;
517.
case 9:
518.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;

P a g e 23 | 31


519.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
520.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
521.
cout << "|
Viet vi
|" << setw(20) << 
thongketrandau[0].vietvi << " |" << setw(20) << thongketrandau[1].vietvi
<< " |" << endl;
522.
break;

523.
case 10:
524.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
525.
cout << "|
DOI BONG
|" << setw(20) << 
thongketrandau[0].tendoi << " |" << setw(20) << thongketrandau[1].tendoi
<< " |" << endl;
526.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
527.
cout << "|
Phat goc
|" << setw(20) << 
thongketrandau[0].phatgoc << " |" << setw(20) << thongketrandau[1].phatgoc
<< " |" << endl;
528.
break;
529.
case 11:
530.
cout << " 
Nhan Enter lan nua de thoat !!!
" << endl;

531.
break;
532.
default:
533.
break;
534.
}
535.
cout << 
"+--------------------------------------------------------------------+ " 
<< endl;
536.
}

 
3.3. File main
#include "ThuVien.h"
int Menu()
{
 
HANDLE hConsole;
 
hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
 
int luaChon = 0;

P a g e 24 | 31



 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

int listLen = 12;
int key;
string ListMenu[] = {
" NHAP VA TRA CUU THONG TIN TRAN DAU BONG DA ",
" 1. Nhap Thong ke tran dau ",
" 2. Nhap thong tin doi hinh ra san ",
" 3. Nhap thong tin doi hinh du bi ",
" 4. Xuat Thong ke tran dau ",
" 5. Hien thi bang cau thu ra san ",
" 6. Hien thi bang cau thu du bi ",
" 7. Truy xuat thong tin cau thu ra san ",
" 8. Truy xuat thong tin cau thu du bi ",
" 9. Xoa thong tin cau thu ra san ",

"10. Xoa thong tin cau thu du bi ",
"11. Thoat"
};

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 

do
{
system("cls");
SetConsoleTextAttribute (hConsole, 14);
cout << "------------------------------------------- " << endl;
SetConsoleTextAttribute (hConsole, 15);
for (int i = 0; i < listLen; i++)
{
if (i == luaChon)
{
SetConsoleTextAttribute (hConsole, 30);
}
cout << ListMenu[i] << endl;
SetConsoleTextAttribute (hConsole, 15);
}
SetConsoleTextAttribute (hConsole, 14);
cout << "------------------------------------------- " << endl;
SetConsoleTextAttribute (hConsole, 15);
key = _getch();
if (key == 13)
break;
else if (key == 72)
{
luaChon--;
if (luaChon < 0)
luaChon = 0;
}

else if (key == 80)

P a g e 25 | 31


×