4.2.2. Danh sách các bảng dữ liệu : Bảng Dữ Liệu DB_BAITAP Bảng Dữ Liệu DB_BAITAP Bảng Dữ Liệu DB_CONGTHUC Bảng Dữ Liệu DB_MAUCAUTN Bảng Dữ Liệu DB_CAUHOITN 48
KHOA CNTT –
ĐH KHTN
4.2.3. Danh sách các thuộc tính của từng bảng :
Bảng Dữ Liệu DB_CONGTHUC :
Dùng để lưu trữ các kiểu nhập liệu (được dùng trong các Lời Gợi Ý), các thông tin
này được lưu trong file “dbCongThuc.txt” và được lưu tuần tự như sau :
_ dsTPHinhHoc : danh sách các Thành Phần Hình Học được sử dụng trong Cơng
Thức, Định Lý, chỉ mang ý nghĩa tham khảo cho việc nhập liệu, không thay đổi được.
_ CongThuc : là kiểu công thức nhập liệu cho 1 Cong Thức, Định Nghĩa.
Bảng Dữ Liệu DB_BAITAP :
Dùng để lưu trữ các thông tin về Bài Tập, các thông tin này được lưu trong file
“dbBaiGia.txt” và được lưu tuần tự như sau :
_ STT : số thứ tự của Bài Tập này trong danh sách các Bài Tập có trong chương trình.
_ TenBai : tên của Bài Tập, thể hiện bài tập này thuộc dạng đặc trưng nào.
_ Chuong : xác định xem Bài Tập thuộc chương nào (danh sách các loại Chương này căn cứ theo tiêu chuẩn của Sách Giáo Khoa).
_ DoKho : xác định xem mức độ khó của Bài Tập gổm : Dễ, Trunh Bình và Khó. _ DeBai : nội dung đề bài của Bài Tập dưới dạng văn bản.
_ DapAn : các Lời Gợi Ý được cung cấp dưới dạng văn bản. _ HuongDan : các lời hướng dẫn, gợi ý các cách giải Bài Tập.. _ BaiLam : nội dung Bài Làm của Học Sinh.
_ NhanXet : lời nhận xét của Giáo Viên về Bài Làm của Học Sinh..
Bảng Dữ Liệu DB_CAUHOITN
Lưu trữ thông tin về câu hỏi trắc nghiệm, được lưu trong tập tin
NganHangCauHoi.txt với cấu trúc như sau :
_STTCau : số thứ tự của câu trong ngân hàng câu hỏi. _Chuong : cho biết câu hỏi này thuộc chương nào.
KHOA CNTT –
ĐH KHTN
50
_De : khi câu hỏi được chọn vào một đề trắc nghiệm thì _De sẽ nhận giá trị của thứ tự đề.
_NoiDung : lưu trữ phần nội dung của câu hỏi. _GoiY : lưu trữ các gợi ý (A, B, C, D) của câu hỏi. _DapAn : lưu trữ đáp án đúng của câu hỏi.
Bảng Dữ Liệu DB_MAUCAUTN
Lưu trữ các dạng mẫu câu hỏi dùng để phát sinh câu hỏi trắc nghiệm, được lưu trong tập tin dbMauCau.txt, và có cấu trúc như sau :
_STT : số thứ tự của mẫu.
_TenBai : mô phỏng ngắn gọn về mẫu. _KieuBai : cho biết dạng của mẫu.
_DoKho : cho biết mức độ phức tạp của bài toán.
_DeBai : lưu trữ toàn bộ câu hỏi bao gồm nội dung và các gợi ý. _DapAn : lưu trữ đáp án đúng của câu hỏi.
4.2.4. Danh sách các đối tượng truy xuất dữ liệu :
Lớp dbBaiGiai : thể hiện 1 cơ sở Dữ Liệu của Bài Tập.
dbBaiGiai Load() Save() LoadChiTiet() SaveChiTiet() (f rom BaiGiai LG)
_Load() : thực hiện việc đọc 1 Bài Tập từ file. _Save() : thực hiện việc ghi 1 Bài Tập ra file.
_ LoadChiTiet() : thực hiện việc đọc các chi tiết của Bài Tập từ file Cơ Sở Dữ Liệu.
_ SaveChiTiet() : thực hiện việc ghi các chi tiết của Bài Tập ra file Cơ Sở Dữ Liệu.
Lớp dbCongThuc : thể hiện 1 cơ sở Dữ Liệu của Công Thức Nhập.
_ Load() : thực hiện việc đọc 1 Công Thức Nhập từ file. dbCongThuc
Load() Save()
PhanTichCau() (f rom Cong Thuc Nhap)
_ Save() : thực hiện việc ghi 1 Công Thức Nhập ra file.
_ PhanTichCau() : phân tích các dữ liệu thơ (các Cơng Thức Nhập dưới dạn Text) thành kiểu đặc biệt áp dụng cho việc Phân Tích Bài Giải.
KHOA CNTT –
ĐH KHTN
Lớp dbCauHoiTN : thể hiện 1 cơ sở dữ liệu của Câu hỏi trắc nghiệm.
_Load() : đọc một câu hỏi trắc nghiệm từ tập tin. dbCauHoiTN
Load() Save() (f rom Logical View)
_Save() : lưu một câu hỏi trắc nghiệm vào tập tin.
4.3. Thiết kế các lớp đối tượng xử lý chính :
4.3.1. Lớp BaiGiai :
Lớp BaiGiai : thể hiện cho 1 Bài Tập trong chương trình.
4.3.1.1. Danh sách biến thành phần : BaiGiai STT : Integer Ten : String DeBai : String DapAn : String arrTPDeBai : TPHinhHoc* arrTPPhu : TPHinhHoc* Load() Save() TienXuLyCau() TomTatCau() PhanTichDeBai() PhanTichCauDeBai() GiaiBaiTap() PhanTichCauLoiGiai() LayDSThanhPhan()
(from Bai Giai LG)
_ STT : số thứ tự của Bài Tập được đánh số trong Cơ Sở Dữ Liệu.
_ Ten : tên của Bài Tập. _ DeBai : nội dung của đề bài.
_ DapAn : nội dung của Đáp Án, chỉ ở dưới dạng text. _ arrTPDeBai : danh sách các thành phần Hình Học
được tạo ra khi ta “Phân Tích” nội dung của Đề Bài.
_ arrTPPhu : danh sách các thành phần Hình Học được phát sinh trong quá trình thực hiện việc “Giải Bài Tập”.
4.3.1.2. Danh sách các Hàm thành phần :
_ Load() : đọc nội dung của 1 Bài Tập. _ Save() : lưu lại nội dung của 1 Bài Tập.
_ TienXuLyCau : loại bỏ các ký thừa trong 1 đoạn văn bản, đồng thời tách thành
từng câu riêng biệt.
_ TomTatCau() : phân tích 1 câu nhập liệu thành 1 dạng xác định để so sánh với
danh sách Công Thức nhập liệu xem coi có hợp lệ khơng.
VD : ta nhập câu : “Cho điểm A(0,0) thuộc đường thẳng D:Ax+By+C=0”, khi được
đưa vào hàm TomTatCau() thì trở thành “<Diem> thuộc <DuongThang>” đồng thời
tạo ra 2 đối tượng {A ∈ Diem và D ∈ DuongThang}.
KHOA CNTT –
ĐH KHTN
_PhanTichDeBai() : phân tích tồn bộ Đề Bài xem giả thuyết của Bài Tập cung cấp cho ta những gì, tất cả thành phần tạo ra ở đây được lưu trong mảng arrTPDeBai. _ PhanTichCauDeBai() : phân tích 1 câu xác định, được dùng trong hàm
PhanTichDeBai() ở trên.
_ GiaiBaiTap() : phân tích tồn bộ Lời Giải ⇒ thực hiện tuần tự từng bước đễ ra kết quả cuối cùng , tất cả thành phần tạo ra ở đây được lưu trong mảng arrTPPhuDeBai. _ PhanTichCauLoiGiai() : phân tích 1 câu Đáp Án xác định, được dùng trong hàm
GiaiBaiTap() ở trên.
_ LayDSThanhPhan() : danh sách các Kết Quả cuối cùng thu được, bao gồm cả Giả Thuyết và các Thành Phần trung gian.
4.3.1.3. Sơ đồ phối hợp hoạt động :
_ Ham GiaiBaiTap() : BaiGiai GiaiBaiTap() BaiGiai PhanTichCauDeBai() BaiGiai PhanTichDapAn() BaiGiai PhanTichCauDapAn() BaiGiai PhanTichDeBai() _ Hàm PhanTichCauDapAn() : BaiGiai BaiGiai PhanTichDapAn() BaiGiai TomTatCau() TienXuLyCau() _ Hàm TienXuLyCau() : BaiGiai TienXuLyCau() TPHinhHoc LayKieuNhapLieu() TPQuanHe LayKieuNhapLieu() 4.3.2. Lớp dbBaiGiai :
Lớp DSBaiGiai : thể hiện toàn bộ các Bài Tập có trong chương trình, thực
hiện các u cầu quản lý, truy xuất, tìm kiếm. 52
KHOA CNTT –
ĐH KHTN
4.3.2.1. Danh sách biến thành phần :
_ SoLuong : xác định số lượng các Bài Tập có trong chương trình.
4.3.2.2. Danh sách hàm thành phần :
_ LoadSoLuong() : ghi nhận lại số lượng các Bài Tập có trong chương trình.
_ ThemBaiGiai() : thêm 1 Bài Tập mới vào trong Cơ Sở Dữ Liệu và đưa vào cuối dữ liệu.
_ LuuBaiGiai() : cập nhật lại thông tin của Bài Tập. _ XoaBaiGiai() : xóa Bài Tập này khỏi danh sách.
_ LayDSBaiGiai() : lấy tồn bộ tất cả các Bài Tập có trong chương trình. _ TimTheoSTT() : tìm kiếm thơng tin về Bài Tập theo số thứ tự.
_ TimTheoTen() : tìm kiếm thơng tin về Bài Tập theo tên bài.
_ TimTheoChuong() : tìm kiếm thơng tin về Bài Tập theo tên bài và chương. _ TimTheoDoKho() : tìm kiếm thông tin về Bài Tập theo tên bài và độ khó.
DSBaiGiai SoLuong : Integer LoadSoLuong() ThemBaiGiai() LuuBaiGiai() XoaBaiGiai() LayDSBaiGiai() TimTheoSTT() TimTheoTen() TimTheoChuong() TimTheoDoKho() (from BaiGiai LG) 4.3.3. Lớp PhanTu:
Ngoài ra, khi thực hiện việc “Giải bài Tập”, lớp BaiGiai phải thực hiện việc giao
tiếp với các lớp khác, hỗ trợ cho việc tìm kiếm kết quả cuối cùng.
KHOA CNTT – ĐH KHTN 0..n PhanTu (f rom Fundament) BaiGiai (f rom BaiGiai LG) CongThucQuanHe
(from Cong T huc Nhap)
TPPhuongTrinh (from Fundament) TPHinhHoc (f rom Fundament) TPQuanHe (f rom Fundament) 1..* 1..* 1..* 1..* 1..* 1..* 1..* 1..* Hình 2.4.3-16 Lớp PhanTu
Lớp PhanTu : đây là lớp ảo và là Phần Tử cơ bản nhất trong mơ hình Hỗ Trợ
Giải Tốn, cung cấp các khả năng thiết yếu cho các lớp con thao tác. Bản thân mỗi PhanTu này lại chứa nhiều các đối tượng PhanTu khác.
4.3.3.1. Danh sách biến thành phần : PhanTu Name : String dsPhanTu : PhanTu* KhoiTao() IsActived() OnActived() SetTP() GetTP() LayTenDinhNghia() XuatBaiGiai() (from Fundament)
_ Name : tên của Phần Tử được xét.
_ dsPhanTu : danh sách các đối tượng PhanTu khác mà lớp này kiểm soát.
4.3.3.2. Danh sách hàm thành phần :
_ KhoiTao() : hàm khởi tạo cho các đối tượng có khả năng “nạp chồng” (override), xác định tên và số lượng các thành phần sở hữu và thực hiện các khởi tạo riêng biệt cho từng lớp con.
KHOA CNTT –
ĐH KHTN
_ IsActived() : xác định xem đối tượng đã được “kích hoạt” chưa, “kích hoạt” là khi
đối tượng đã xác định được đầy đủ giá trị.
_ OnActived() : đây là 1 hàm bắt sự kiện, được thực thi khi có 1 đối tượng trong
dsPhanTu được “kích hoạt” lên, đây là hàm có khả năng “nạp chồng” (override), tùy theo các lớp con khác nhau mà có các phản ứng khác nhau. Nếu bản thân lớp được “kích hoạt” thì cũng phát sinh ra sự kiện thông báo cho các đối tượng đang sở hữu
nó biết được.
_ SetTP() : cập nhật thơng tin lại cho 1 đối tượng PhanTu mà lớp đang nắm giữ. _ GetTP() : lấy thông tin lại cho 1 đối tượng PhanTu mà lớp đang nắm giữ.
_ LayTenDinhNghia() : đây là hàm ảo (abstract), dùng để lấy chuỗi ký tự đặc trưng dùng để nhận diện cho việc nhập liệu cho lớp. VD : lớp Diem có chuỗi là “ Điểm“, lớp DuongThang có chuỗi là “Đường Thẳng”.
_ XuatBaiGiai() : đây là hàm ảo (abstract), dùng để xuất nội dung của đối tượng ra thành bài giải.
4.3.4. Lớp TPHinhHoc :
Lớp TPHinhHoc : đây là lớp ảo kế thừa từ lớp PhanTu, thể hiện cho các đối
tượng Hình Học có trong 1 bài tốn Hình Học Giải Tích, chẳng hạn như :
Điểm, Đường Thẳng, Đường Tròn, Ellipse,….
4.3.4.1. Danh sàch hàm thành phần : TPHinhHoc OnActived() LayDSThanhPhan() LoadCongThucNhap() XuatSoNghiem() XuatKetQua() LayKieuNhapLieu() (from Fundament)
_ OnActived() : kế thừa từ lớp PhanTu, xác định lớp sẽ “kích hoạt” khi thoả điều kiện tất cả các đối tượng sở hữu
đều “kích hoạt”.
VD : đối tượng Điểm A được kích hoạt khi ta xác định được 2 giá trị X, Y của A.
_ LayDSThanhPhan() : lấy tất cả các đối tượng mà nó sở hữu và chính nó.
KHOA CNTT –
ĐH KHTN
_ LoadCongThucNhap() : đây là hàm ảo, dùng để đọc 1 đoạn text xem nó có thực hiện việc “nhập liệu” cho 1 đối tượng Hình Học nào đó khơng.
VD : ta có “Điểm A(0,0)” khi đưa vào hàm này thì ta sẽ nhận được 1 khai báo là
khởi tạo 1 đối tượng tên “A” có kiểu là Diem và có giá trị X = Y = 0.
_ XuatSoNghiem() : xác định số nghiệm (số kết quả thu được) của 1 đối tượng Hình Học, số nghiệm có thể là : 1, 2, …
_XuatKetQua() : đây là hàm ảo, dùng để xuất ra bài giải kết luận cuối cùng của đối tượng Hình Học, thường được dùng cho phần “Kết Luận” của Bài Giải.
VD : phần “Kết Luận” của 1 Bài Tập “xác định phương trình Đường Thẳng” ta xuất ra bằng hàm trên là : “Đường thẳng D có phương trình đường thẳng là …”
_ LayKieuNhapLieu() : lấy tất cả các kiểu nhập liệu được định nghĩa trong chương trình, được dùng trong phần Kiểm Tra Đề Bài, Đáp Án.
4.3.4.2. Sơ đồ phối hợp hoạt động :
_ HamXuatKetQua() : TPHinhHoc XuatKetQua() GetAt() TPHinhHoc TPHinhHoc XuatKetQua() *
Chương trình đã định nghĩa 1 số lớp kế thừa từ lớp TPHinhHoc để chuyên biệt hố các xử lý cho từng đối tượng Hình Học mà thường được sử dụng trong các Bài Tốn Hình học Giải Tích.
Ngồi các hàm được kế thừa từ lớp cha, các lớp này chỉ định nghĩa thêm các giá trị
đặc trưng cho từng lớp.
KHOA CNTT – ĐH KHTN TPHinhHoc (f rom Fundament) GiaTri Value : SoThuc (f rom Fundament) Diem X : GiaTri Y : GiaTri (f rom Geometric) DuongThang A : GiaTri B : GiaTri C : GiaTri (f rom Geometric) TamGiac A : Diem B : Diem C : Diem (f rom Geometric) TuGiac A : Diem B : Diem C : Diem D : Diem (f rom Geometric) Goc alpha : GiaTri (f rom Geometric) DuongTron I : Diem R : GiaTri (f rom Geometric) Ellipse I : Diem a : GiaTri b : GiaTri (f rom Geometric) Hyperbol I : Diem a : GiaTri b : GiaTri (f rom Geometric) Parabol I : Diem p : GiaTri (f rom Geometric) Vector U : GiaTri V : GiaTri (f rom Geometric) Hình 2.4.3-17 Lớp TPHinhHoc 4.3.4.3. Danh sách các lớp con :
Lớp GiaTri : thể hiện cho 1 Biến số, Tham số hoặc Hằng số trong 1 Bài Tập, số
lượng đối tượng mà lớp GiaTri nắm giữ chính là số nghiệm của 1 Biến số.
Trong đó Value là giá trị thực của lớp (nếu lớp được kích hoạt) và thuộc kiểu
SoThuc, kiểu dùng để thực hiện tính tốn với kết quả “số đẹp” như “số căn”, “phân số”.
Ngồi ra , lớp GiaTri cịn được cung cấp 1 số hàm để thực hiện các phép toán +. -, *, /, được dùng để Giải Phương Trình.
Lớp Góc : thể hiện cho 1 giá trị Góc, nhưng ở dưới dạng Radian, và chỉ chấp nhận
các giá trị góc đặc biệt như : 0°, 30°, 45°, 90°, …
Lớp Vector : thể hiện cho 1 đối tượng Hình Học là Vector có dạng u(U,V).
KHOA CNTT –
ĐH KHTN
Lớp Diem : thể hiện cho 1 đối tượng Hình Học là Điểm có dạng A(X,Y).
Lớp DuongThang : thể hiện cho 1 đối tượng Hình Học là Đường Thẳng có dạng
D: Ax + By + C = 0.
Lớp TamGiac : thể hiện cho 1 đối tượng Hình Học là Tam Giác gồm 3 Điểm xác
định A, B, C.
Lớp TuGiac : thể hiện cho 1 đối tượng Hình Học là Tam Giác gồm 4 Điểm xác
định A, B, C, D
Lớp DuongTron : thể hiện cho 1 đối tượng Hình Học là Đường Trịn tâm là Điểm I
có dạng C: (x - Ix)² + (y - Iy)² = R².
Lớp Ellipse : thể hiện cho 1 đối tượng Hình Học là Ellipse tâm là Điểm I có dạng
E: (x - Ix)² / a² + (y - Iy)² / b² = 1.
Lớp Hyperbol : thể hiện cho 1 đối tượng Hình Học là Hyperbol tâm là Điểm I có
dạng H: (x - Ix)² / a² - (y - Iy)² / b² = 1.
Lớp Parabol : thể hiện cho 1 đối tượng Hình Học là Parabol tâm là Điểm I có dạng
H: (y – Iy)² = 2 * P * (x - Ix).
4.3.4.4. Danh sách các hàm được kế thừa để chuyên biệt hoá từ lớp
TPHinhHoc :
KhoiTao() : kế thừ từ lớp PhanTu, dùng để khởi tạo cho trường hợp mặc định cho từng đối tượng Hình Học.
LayTenDihnhNghia() : lấy chuỗi định nghĩa cách thức nhập liệu cho từng đối tượng Hình Học.
LoadCongThucNhap() : dùng để đọc 1 đoạn text xem nó có thực hiện việc “nhập
liệu” cho 1 đối tượng Hình Học nào đó khơng.
4.3.5. Lớp TPQuanHe :
Lớp TPQuanHe : đây là lớp ảo kế thừa từ lớp PhanTu, thể hiện cho các Công
Thức, Định Lý, Định Nghĩa có trong 1 bài tốn Hình Học Giải Tích, chẳng hạn
KHOA CNTT –
ĐH KHTN
như : các Công Thức tính giá trị Diện Tích, Chu Vi của Tam Giác, các Định Nghĩa “Điểm Thuộc Đường”, …
4.3.5.1. Danh sách biến thành phần :
_ myPT : danh sách các Phương Trình đặc trưng cho từng lớp Quan Hệ.
4.3.5.2. Danh sách hàm thành phần :
_ LayTenDinhNghia() : kế thừa từ lớp PhanTu, định nghĩa cách thức khai báo 1 Công Thức hoặc Định Lý. _ LoadCongThucNhap() : dùng để đọc 1 đoạn text xem
nó có thực hiện việc “khai báo” cho 1 Cơng Thức hoặc Định Lý. Các cách thức nhập liệu cho đối tượng TPQuanHe này được địng nghĩa trong file “dbCongThuc.txt” và có thể hiệu chỉnh được theo ý người sử dụng.
_ LayKieuNhapLieu() : lấy tất cả các kiểu nhập liệu được khai báo Công Thức, Định Lý trong chương trình, được dùng trong phần Kiểm Tra Đề Bài, Đáp Án.
_ LayPhuongTrinh() : lấy thông tin về dan sách các Phương Trình đặc trưng cho từng lớp TPQuanHe.
_ CapNhatPhuongTrinh() : cập nhật lại thông tin cho các Phương Trình đặc trưng từ các biến thành phần của đối tượng
VD : ta có Định Nghĩa quan hệ “Điểm thuộcc Parabol” có các biến thàng phần là
Điểm M(Mx, My) và Parabol P tâm là Điểm I(Ix, Iy) thì dạng phương trình đặc
trưng là : (My – Iy)² = 2 * P (Mx – Ix).
_ XuatBaiGiai() : kế thừa từ lớp PhanTu, dùng để xuất 1 Công Thức hoặc Định
Nghĩa ra thành Lời Giải theo nguyên tắc sau :
+ Xuất lời dẫn thông báo sử dụng Định Lý hoặ Cơng Thức gì. + Xuất ra nội dung của các Phương Trình đặc trưng.
TPQuanHe myPT : TPPhuongTrinh* LayTenDinhNghia() LoadCongThucNhap() LayKieuNhapLieu() LayPhuongTrinh() CapNhatPhuongTrinh() XuatBaiGiai()
(from Fundam ent)
4.3.5.3. Sơ đồ phối hợp hoạt động :
_ LoadCongThucNhap() :
KHOA CNTT – ĐH KHTN TPQuanHe LoadCongThucNhap() CapNhatPhuongTrinh() CongThucQuanHe LayCongThuc() TPQuanHe * _ CapNhatPhuongTrinh() :