1.
Introduction + objective
Hello teacher and everyone, we would like to present our project: Student Grade
Management.
The goal of the application is to import student scores from a CSV file, then automatically
calculate the average score, assign letter grades, and visualize the results with charts so
teachers/users can quickly assess overall class performance.
The key points we want to emphasize are: the app is designed to be fast, easy to use, reduce
mistakes, and present data visually.
2. Overview of the Application & How to Run It (≈ 1.5–2 phút)
Now, I would like to give an overview of our application and explain how it is run in
practice.
t this stage, our application has not been packaged into an executable file yet, so
it is run directly from Python source code.
To open the application, we simply run the main Python file, called
[Link]. This file starts the PyQt6 application and displays the main
graphical interface. Once the file is executed, the app opens immediately and the
user can interact with it through the GUI.
Once this file is opened, the Student Grade Management interface appears
immediately, the user can see:
● A main table for displaying student names and subject scores
● A set of control buttons at the top, including Load CSV, Update Data,
Histogram, Pie Chart, and 3D Scatter Plot
● A status label at the bottom showing class statistics such as class average,
highest score, and lowest score
The usage workflow is simple and intuitive. (Slide chứa cả hình ảnh để tt theo hình
và chữ)
First, the user clicks “Load CSV” to import student score data from a CSV file.
The data is immediately displayed in the table and can be reviewed or edited
directly.
Next, the user clicks “Update Data”, which triggers the backend processing logic.
At this stage, the application automatically calculates:
● Each student’s average score
● The corresponding letter grade
● Overall class statistics
Finally, the user can select different visualization options, such as:
● A histogram to observe the distribution of average scores. In this histogram,
the x-axis represents the average score, and the y-axis shows the number of
students. This chart helps users quickly see how student scores are
distributed, for example whether most students score high or low
● A pie chart to analyze grade proportions. This pie chart shows the proportion
of each letter grade in the class. Each slice represents the percentage of
students receiving a specific grade.”
● A 3D scatter plot to compare performance across multiple subjects. In this
3D scatter plot, the x-axis represents English scores, the y-axis represents
Physics scores, and the z-axis represents Math scores. Each point on the
plot represents a student, with their scores in these three subjects. This chart
helps visualize how students perform across all three subjects, showing if
there’s a correlation or pattern in their performance.
1 warning: Finally, we demonstrate one warning: if users have not clicked Update yet and try
to plot a chart, the app will remind them to Update first. This ensures the correct workflow
and prevents data errors.
3. Technology used and development process
Technology used:
In terms of technology, our project is written in Python.
The GUI uses PyQt6: the app is initialized with QApplication, creates a
QMainWindow, and attaches the extended UI to run the program.
Code (file: [Link] — app initialization / window launch):
Data processing uses pandas to read CSV and perform calculations.
Visualization uses matplotlib to plot the Histogram, Pie chart, and 3D
scatter.
Development process:
Our development process is divided into 3 parts based on the code
structure:
(1) UI design: we designed the interface using Qt Designer and
converted it to Python. The file [Link] is generated from the .ui
file using the PyQt6 UI code generator tool (so we keep the UI
separated for easier layout adjustments).
(2) Attach logic to the UI: we created the class GiaoDien_extend
inheriting from Ui_MainWindow, then connected the buttons to the
correct functions: Load csv, Update data, Histogram, Pie chart, 3D
Scatter.
Processing & displaying results:
- load_csv() opens a file selection dialog and reads using pd.read_csv
- update_data() automatically detects subject columns, converts values
to numeric, computes Average Grade, then assigns Grade using
get_grade() based on the A+…F rules.
- Then the app updates class statistics (Class Avg/High/Low) and
displays the grade conversion table on the right.
- The chart functions call matplotlib to draw the Histogram, Pie
(based on value_counts), and 3D scatter.
- In addition, we use QMessageBox warnings to prevent crashes when
data has not been updated
4. Evaluation and Results
Now, I would like to talk about the evaluation and results of our project.
At the beginning, we had five main objectives: managing student scores, calculating class
statistics automatically, creating 2D and 3D charts, handling input errors, and designing
a polished user interface. After completing the project, we successfully achieved four out of
the five objectives.
The application works correctly for managing student data, calculating averages and class
statistics, and generating both 2D and 3D [Link] also handles errors properly and
does not crash when the input data is invalid or incomplete.
However, the visual design of the interface is still quite basic. Due to time constraints and
limited experience with Qt Designer, we focused more on functionality rather than advanced
UI design.
Overall, although the interface is simple, the application works as expected and meets the
core requirements of the project.
Ở phần này, slide nên để table rồi cho nhx mục tiêu vào 1 bên bảng, nhx cái Met ở bên kia
bảng
5. Challenges and future development
Challenges
During development, we encountered three main challenges:
● Inconsistent CSV data: column names/formats may differ, so we need to
validate input data to ensure correct calculations.
● Integrating matplotlib with PyQt6: Matplotlib is designed to render charts in
its own window, while PyQt6 is a GUI application. If integrated incorrectly, the
chart may not appear or the app may freeze. Therefore, we must validate the
data before plotting and display charts in a way that does not affect the GUI.
● UI/UX not yet optimized: the current UI is still quite basic and has not been
refined much in terms of layout and user experience.
Future development
If we have more time, we will develop in three directions:
● Improve UI/UX: reorganize the layout to make the interface more intuitive and
easier to use.
● Embed charts directly inside the app instead of opening a separate window to
provide a smoother experience.
● Add reporting features such as exporting results and more detailed statistics to
better support class management.