Currently under development to meet the requirements. The purpose of this project is to build a strong foundation of C++ knowledge and skills and deepen them.
Introduce roles such as admin and student, ensuring that common functionalities and specific functionalities for both admin and student
add/remove students and subjects
modify students' grade
calculate GPA,
display indivisual average grades
display all students' grades
display ranking by all students' average grades
display grade distributions
load thier grade on CSV file
export their grade on CSV file
generate a report as csv for the selected student by the admin(teachers), including the selected student name, its grades, GPA, and average grade
add a user login/logout system
add error handings
allows users such as admin(teachers and students) to use the system through CUI interface, not GUI interface
add a menu for admin(teachers) and students to use the system
Scalability:
The system shall support at least 1000 students and 200 subjects without significant degradation in performance.
Readability:
All code shall follow the C++ Core Guidelines.
Each class and function shall be documented with meaningful comments.
Maintainability:
The system shall be designed with a modular architecture to allow the addition of new features with minimal code changes.
Error Handling:
If the following errors happen, the system shall display an appropriate error message.
preventing invalid login, error loading grade csv, removing students or subjects that don't exist, and duplicate entries for students or subjects, invalid grade values
Security:
Students must not access admin features.
Passwords shall be hashed with SHA-256.
Commons for both students and admin(teachers):
user login/logout system
reset a password
calculate GPA, average grades
load thier grade on CSV file
load user data on CSV file
export their grade to CSV file
export user data to CSV file
add error handings, preventing invalid login, error loading grade csv, removing students or subjects that don't exist, and duplicate entries for students or subjects
students:
display only their own grades such as GPA and average grade
admin(teachers):
modify student's grades
add/remove students and subjects
display their all grades
display ranking by average grades
display grade distributions
generate a report as csv, including the specific student name, its grades, GPA, and average grade
├── data # User and grade data
| ├── users.csv
│ └── grades.csv
├── doc # Documents for this repository
| ├── CMake.md # Document about CMake
│ └── note.md # Document about C++ programming through this project
├── include # Header files
│ ├── GradeSystem.h
│ ├── User.h
│ ├── Admin.h
│ ├── Student.h
│ └── utilities.h
├── src # Source files
│ ├── GradeSystem.cpp
│ ├── main.cpp
│ ├── User.cpp
│ ├── Admin.cpp
│ ├── Student.cpp
│ ├── utilities.cpp
├── output # .exe file after build
│ └── program.exe
├── .gitignore
├── CMakeLists.txt # Build configuration
└── README.md # Project overview
- without CMake
- compile the program with the following command in terminal
# win / macOS (clang++) – works the same with Homebrew g++ too
g++ -std=c++17 -Iinclude src/*.cpp -o output/StudentGradeSystem
# or, if you want to list files explicitly:
g++ -std=c++17 -Iinclude ./src/main.cpp ./src/GradeSystem.cpp ./src/User.cpp ./src/Admin.cpp ./src/Student.cpp ./src/utilities.cpp -o output/StudentGradeSystem
- execute StudentGradeSystem.exe
- with CMake
After configuring your project, you're ready to build. Open the Command Palette (Ctrl+Shift+P) and run the CMake: Build command, or select the Build button from the status bar.
After the build, if StudentGradeSystem.exe hasn't been made, run the following command in the terminal.
cmake --build out/build/student_grade_system
- Integrate unit testing
- Learn Smart Pointers and apply it
- Consider GUI/CLI menu to improve user experience
- Exceptional handling