Bảng Kế hoạch Phát triển Phần mềm
| Giai đoạn PSP2.1 | Hoạt động | Thời gian dự kiến (phút) | Thời gian thực (phút) |
| Lập kế hoạch | Ước lượng thời gian | 35 | 30 |
| Phát triển | Phân tích yêu cầu | 40 | 50 |
| Thiết kế tài liệu | 35 | 40 |
| Kiểm tra thiết kế | 25 | 20 |
| Viết mã | 70 | 85 |
| Kiểm thử | 30 | 38 |
| Báo cáo | Kiểm thử báo cáo | 35 | 46 |
| Tổng kết dự án | 20 | 25 |
Thiết kế Hệ thống
Cấu trúc Lớp
| Thành phần | Chức năng |
| PhanSo | Xử lý phân số và tính toán |
| BieuThuc | Quản lý biểu thức toán học |
| BoTaoCauHoi | Tạo đề bài tự động |
| KiemTraDapAn | Đối chiếu kết quả |
| TienIch | Cung cấp hàm tiện ích |
Triển khai Mã nguồn
Lớp PhanSo (Xử lý phân số)
// Rút gọn phân số
void PhanSo::rutGon() {
if (tuSo == 0) {
mauSo = 1;
return;
}
int ucln = timUCLN(tuSo, mauSo);
tuSo /= ucln;
mauSo /= ucln;
if (mauSo < 0) {
tuSo = -tuSo;
mauSo = -mauSo;
}
}
// Chuyển phân số thành chuỗi
string PhanSo::chuyenChuoi() const {
if (mauSo == 1) return to_string(tuSo);
if (abs(tuSo) < mauSo) return to_string(tuSo) + "/" + to_string(mauSo);
int phanNguyen = tuSo / mauSo;
int phanDu = abs(tuSo % mauSo);
return to_string(phanNguyen) + "'" + to_string(phanDu) + "/" + to_string(mauSo);
}
Tạo Biểu thức Ngẫu nhiên
void BieuThuc::taoNgauNhien(int gioiHan, int maxToanTu) {
vector<char> toanTu = {'+', '-', '*', '/'};
int soToanTu = TienIch::soNgauNhien(maxToanTu) + 1;
int soToanHang = soToanTu + 1;
vector<PhanSo> toanHang;
vector<char> danhSachToanTu;
for (int i = 0; i < soToanHang; i++) {
if (TienIch::soNgauNhien(2) == 0) {
int giaTri;
do {
giaTri = TienIch::soNgauNhien(gioiHan);
} while (giaTri == 0 && i > 0);
toanHang.push_back(PhanSo(giaTri, 1));
} else {
int mau = TienIch::soNgauNhien(gioiHan - 2) + 2;
int tu = TienIch::soNgauNhien(mau - 1) + 1;
toanHang.push_back(PhanSo(tu, mau));
}
}
for (int i = 0; i < soToanTu; i++) {
danhSachToanTu.push_back(toanTu[TienIch::soNgauNhien(toanTu.size())]);
}
// ... (Phần còn lại của quy trình tạo biểu thức)
}
Kiểm tra Đáp án
bool soSanhDapAn(const string& traLoi, const string& dapAnChuan) {
string traLoiChuan = traLoi;
string dapAn = dapAnChuan;
xoaKhoangTrang(traLoiChuan);
xoaKhoangTrang(dapAn);
if (traLoiChuan == dapAn) return true;
try {
PhanSo phanSoTraLoi = phanTichChuoi(traLoiChuan);
PhanSo phanSoDapAn = phanTichChuoi(dapAn);
phanSoTraLoi.rutGon();
phanSoDapAn.rutGon();
return (phanSoTraLoi.layTu() == phanSoDapAn.layTu())
&& (phanSoTraLoi.layMau() == phanSoDapAn.layMau());
} catch (...) {
return false;
}
}
Kiểm thử Hệ thống
Kiểm thử Hiệu năng
Hàm tinhToan() chiếm 75% thời gian xử lý khi tạo 10,000 câu hỏi. Tối ưu thuật toán đánh giá biểu thức giúp cải thiện 40% hiệu suất.