Phần mềm Complex Calculator là một máy tính số phức với các chức năng cơ bản bao gồm:
- Standard Calculation: Thực hiện các phép tính cơ bản như cộng, trừ, nhân, chia.
- Module: Tính toán module của số phức.
- Exit: Thoát khỏi chương trình.
Hệ thống Complex Calculator được thiết kế với các khối chức năng chính sau:
Khối APP_MANAGER quản lý toàn bộ phần mềm và bao gồm 3 bước chính:
Init()
- Khởi tạo: Bước khởi tạo các thành phần của phần mềm.Launch()
- Chạy: Quản lý việc chạy ứng dụng và xử lý các sự kiện từ người dùng.Exit()
- Thoát: Thực hiện thoát khỏi chương trình.
Khối EVENT_MANAGER tạo và nhận tín hiệu để hiển thị giao diện tương ứng với 4 sự kiện:
- main window: Sự kiện hiển thị giao diện chính.
- standard calculation window: Sự kiện hiển thị giao diện tính toán cơ bản.
- module window: Sự kiện hiển thị giao diện tính toán module.
- exit window: Sự kiện hiển thị giao diện thoát.
Khối UI bao gồm Command-line User Interface (CUI) và Graphical User Interface (GUI).
Khối UI được thiết kế bao gồm 4 giao diện: MainWindow, StandardCalculationWindow, ModuleWindow và ExitWindow
-
CUI: Giao diện dòng lệnh bao gồm 4 giao diện con. Mỗi giao diện con bao gồm 2 phần:
- Data: Lưu trữ dữ liệu của giao diện đó.
- Window Management Function: Các hàm khởi chạy giao diện, bao gồm 3 hàm
DisplayMenu()
,GetInputFromUser()
vàHandleUserInput()
, được đóng gói thành một hàm duy nhấtLaunch()
.
-
GUI (Các học viên tự luyện): Giao diện đồ họa bao gồm 4 giao diện con. Mỗi giao diện con bao gồm 2 phần:
- Data: Lưu trữ dữ liệu của giao diện đó.
- Window Management Function: Các hàm khởi chạy giao diện, bao gồm nhiều hàm được đóng gói thành một hàm duy nhất
Launch()
.
Người dùng có thể lựa chọn sử dụng giao diện CUI hoặc GUI.
Khối BACKEND bao gồm backend cho chức năng Standard Calculation và Module:
-
Standard Calculation: Bao gồm 2 phần:
- Data: Lưu trữ dữ liệu cho phần xử lý tính toán cơ bản.
- Backend Processing Function: Các hàm xử lý tính toán.
-
Module: Bao gồm 2 phần:
- Data: Lưu trữ dữ liệu cho phần xử lý tính toán module.
- Backend Processing Function: Các hàm xử lý tính toán.
Dưới đây là cây thư mục dự án hiện tại:
Thư mục ".vscode" chứa các file đã cấu hình sẵn IntelliSense Visual Studio Code. Ngoài ra, các file còn lại được chia thành các nhóm chức năng sau:
Thư mục gốc
docs
: Chứa tài liệu liên quan tới dự án.inc
/src
: Chứa các file khai báo hàm/mã nguồn cho Complex Calculatormain.c
: Chứa nơi bắt đầu khởi chạy phần mềm.app_manager.h/.c
: Chứa mã nguồn về trình tự khởi chạy của phần mềm.event_manager.h/.c
: Chứa mã nguồn về các sự kiện quyết định giao diện nào sẽ được hiển thịdata_structure.h
: Các cấu trúc dữ liệu của Complex Calculatorutility.h
: Các tiện ích cho việc lập trình, ở đây chứa tiện íchLOG()
dùng để in ra màn hình console nhằm dễ dàng trong quá trình gỡ lỗi.backend
: Chứa mã nguồn cho phần lõi của Complex Calculator.standard_calculation.h/.c
: Chứa các định nghĩa cho các hàm tính toán cơ bản.
ui
: Chứa các file liên quan đến giao diện. Các giao diện này hoàn toàn độc lập với chức năng (backend) của hệ thống.cui
: Chứa các định nghĩa cho giao diện người dùng console.utility
: Chứa các định nghĩa cho các tiện ích giao diện người dùng.cui_input_validation.h/.c
: Chứa các định nghĩa cho các hàm yêu cầu đầu vào người dùng từ console.
cui.h
: Tổng hợp toàn bộ các file cần thiết cho CUI, các module khác chỉ cần#include "cui.h"
.cui_common.h
: Chứa các định nghĩa cho các cấu trúc dữ liệu và khai báo hàm chung của giao diện console.cui_main_window.h/.c
: Chứa các định nghĩa cho cửa sổ chính của giao diện người dùng console.cui_standard_calculation_window.h/.c
: Chứa các định nghĩa cho cửa sổ tính toán cơ bản của giao diện người dùng console.cui_exit_window.h/.c
: Chứa các định nghĩa cho cửa sổ thoát giao diện người dùng console.
gui
: Chứa các định nghĩa cho giao diện người dùng đồ họa.gui.h
: Chứa các định nghĩa cho giao diện người dùng đồ họa.
Makefile
: Chứa lệnh biên dịch và chạy Complex CalculatorREADME.md
: Mô tả dự án.
Lưu ý
- Các file header có phần mở rộng
.h
thường chứa các khai báo cho các cấu trúc dữ liệu, hàm. - Các file nguồn có phần mở rộng
.c
thường chứa định nghĩa/khởi tạo cho các hàm, biến. - Tệp Makefile được sử dụng để tự động hóa việc biên dịch và chạy phần mềm.
-
cd
tới thư mục dự án (thư mục Revision) -
Chạy với Make:
make clean build run
Lưu ý:
- Nếu chỉ muốn xóa thư mục build:
make clean
- Nếu chỉ muốn biên dịch:
make build
- Nếu chỉ muốn chạy:
make run
Yêu cầu tối thượng: đọc hiểu toàn bộ ý tưởng và code của dự án
Hiện tại, Complex Calculator đã có những tính năng sau:
- Có toàn bộ code cho giao diện CUI, tuy nhiên chưa có khởi tạo giao diện UI
- Hỗ trợ tính cộng, trừ số phức ở cả Backend, UI và Event
- Hỗ trợ thoát chương trình ngay lập tức
Hiện tại, Complex Calculator có những tính năng sau cần các học viên phải hoàn thiện:
- Khởi tạo giao diện UI - User Interface
- Tạo giao diện CUI "Bạn có chắc chắn muốn thoát" cho tính năng thoát chương trình
- Lập trình Backend tính toán nhân, chia số phức và lập trình UI cho phép hiển thị kết quả nhân, chia số phức
- Tạo toàn bộ UI, Event và Backend cho tính năng tính Module số phức
- Hiển thị giao diện GUI - Graphic User Interface (Làm để học thêm, không bắt buộc)
File ui.c
, dòng 6: Cấp phát bộ nhớ cho p_ui_temp, sử dụng macro UI_MemAlloc()
đã được định nghĩa trong ui.h
. Nếu cấp phát thành công thì bộ nhớ này sẽ được gán lại cho p_ui_handler (đã được viết sẵn ở dòng 9)
Biết rằng phần định nghĩa cho việc khởi chạy giao diện Exit nằm ở cui_exit_window.h/.c
: Hãy tham khảo template từ các giao diện khác đã có như cui_main_window.h/.c
, cui_standard_calculation_window.h/.c
để hoàn thiện phần định nghĩa hàm trong cui_exit_window.c
5.2.3. Lập trình Backend tính toán nhân, chia số phức và lập trình UI cho phép hiển thị kết quả nhân, chia số phức
Biết rằng phần Backend nằm ở standard_calculation.c
: Học viên cần tìm nơi nào chứa phần tính toán nhân chia và bổ sung thêm code
Biết rằng phần giao diện nằm ở cui_standard_calculation_window.c
: Học viên cần tìm nơi nào chứa phần hiển thị kết quả nhân chia và bổ sung thêm code
Backend: Tham khảo template của backend trong file backend đã có sẵn standard_calculation.h/.c
. Gợi ý cần tạo struct cui_module_data_t
, các hàm Get()/Set()
và Update()
UI: Tham khảo template của giao diện trong các file giao diện đã có (cui_main_window.h/.c
, cui_standard_calculation.h/.c
, cui_exit_window.h/.c
), gợi ý: tạo file cui_module_window.h/.c
và tạo các struct, các hàm như template
Event: Tham khảo template của event trong file event_manager.h/.c
.
- Gợi ý:
- Bổ sung thêm
bool signal_module_window
vàoevent_manager_event_t
và tạo hai hàm tương ứng_GetSignal_()
/_TriggerSignal_()
- Bên trong
app_manager.c
, chú ý bổ sung việc nhận và xử lý tín hiệu ModuleWindow vào hàmAPP_MANAGER_Launch()
- Bên trong
cui_main_window.c
, chú ý bổ sung việc Trigger tín hiệu vào hàmCUI_MAIN_WINDOW_HandleUserInput()
để phát tín hiệu hiển thị giao diện tính Module
- Bổ sung thêm