# mxminh/school_gradebook_system architecture

> Architecture diagram of the GitHub repository mxminh/school_gradebook_system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mxminh/school_gradebook_system
- Repository: https://github.com/mxminh/school_gradebook_system

## Overview

This is a small interactive C++ course-management console app. Its main workflow initializes a course catalog and student list, then routes users through student or teacher menus for profile, enrollment, grading, and report-card tasks. Student and course state is held in memory; report cards are written to text files. The excerpts show the principal menu calls and report generation, but not every menu branch or implementation detail, so unsampled relationships are omitted.

Main entry points: [`ConsoleDisplay.cpp`](https://github.com/mxminh/school_gradebook_system/blob/master/ConsoleDisplay.cpp) (Interactive menus), [`Student.cpp`](https://github.com/mxminh/school_gradebook_system/blob/master/Student.cpp) (Student records), [`Teacher.cpp`](https://github.com/mxminh/school_gradebook_system/blob/master/Teacher.cpp) (Teacher tools), [`StudentList.cpp`](https://github.com/mxminh/school_gradebook_system/blob/master/StudentList.cpp) (Student registry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Console entry"]
  node_main["Program entry<br/>[main.cpp]"]
  node_menus["Interactive menus<br/>[ConsoleDisplay.cpp]"]
end

subgraph group_people["People and records"]
  node_person["Person profile<br/>[Person.cpp]"]
  node_student["Student records<br/>[Student.cpp]"]
  node_students[("Student registry<br/>[StudentList.cpp]")]
  node_teacher["Teacher tools<br/>[Teacher.cpp]"]
end

subgraph group_academics["Courses and grading"]
  node_course["Course model<br/>[Student.h]"]
  node_catalog["Course catalog<br/>[main.cpp]"]
  node_grading["Grades and GPA<br/>[Student.cpp]"]
end

subgraph group_reports["Reports"]
  node_reporting["Report generation<br/>[Teacher.cpp]"]
  node_reportfile["Report text file"]
end

node_user(("Console user"))

node_user -->|"chooses options"| node_menus
node_main -->|"starts menus"| node_menus
node_main -->|"initializes"| node_catalog
node_menus -->|"creates and updates"| node_student
node_menus -->|"looks up students"| node_students
node_menus -->|"invokes teacher tools"| node_teacher
node_menus -->|"displays and searches"| node_catalog
node_student -->|"inherits profile"| node_person
node_teacher -->|"inherits profile"| node_person
node_student -->|"registers students"| node_students
node_teacher -->|"queries students"| node_students
node_student -->|"stores courses"| node_course
node_student -->|"calculates grades"| node_grading
node_menus -->|"edits student points"| node_grading
node_teacher -->|"edits course points"| node_grading
node_teacher -->|"generates reports"| node_reporting
node_reporting -->|"retrieves report subjects"| node_students
node_reporting -->|"saves student report"| node_student
node_student -->|"writes report"| node_reportfile

click node_main "https://github.com/mxminh/school_gradebook_system/blob/master/main.cpp"
click node_menus "https://github.com/mxminh/school_gradebook_system/blob/master/ConsoleDisplay.cpp"
click node_person "https://github.com/mxminh/school_gradebook_system/blob/master/Person.cpp"
click node_student "https://github.com/mxminh/school_gradebook_system/blob/master/Student.cpp"
click node_students "https://github.com/mxminh/school_gradebook_system/blob/master/StudentList.cpp"
click node_teacher "https://github.com/mxminh/school_gradebook_system/blob/master/Teacher.cpp"
click node_course "https://github.com/mxminh/school_gradebook_system/blob/master/Student.h"
click node_catalog "https://github.com/mxminh/school_gradebook_system/blob/master/main.cpp"
click node_grading "https://github.com/mxminh/school_gradebook_system/blob/master/Student.cpp"
click node_reporting "https://github.com/mxminh/school_gradebook_system/blob/master/Teacher.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_menus,node_user toneBlue
class node_person,node_student,node_students,node_teacher toneAmber
class node_course,node_catalog,node_grading toneMint
class node_reporting,node_reportfile toneRose
```

## Components

### Console entry

- [Program entry](https://github.com/mxminh/school_gradebook_system/blob/master/main.cpp): `main.cpp`
- [Interactive menus](https://github.com/mxminh/school_gradebook_system/blob/master/ConsoleDisplay.cpp): `ConsoleDisplay.cpp`

### People and records

- [Person profile](https://github.com/mxminh/school_gradebook_system/blob/master/Person.cpp): `Person.cpp`
- [Student records](https://github.com/mxminh/school_gradebook_system/blob/master/Student.cpp): `Student.cpp`
- [Student registry](https://github.com/mxminh/school_gradebook_system/blob/master/StudentList.cpp): `StudentList.cpp`
- [Teacher tools](https://github.com/mxminh/school_gradebook_system/blob/master/Teacher.cpp): `Teacher.cpp`

### Courses and grading

- [Course model](https://github.com/mxminh/school_gradebook_system/blob/master/Student.h): `Student.h`
- [Course catalog](https://github.com/mxminh/school_gradebook_system/blob/master/main.cpp): `main.cpp`
- [Grades and GPA](https://github.com/mxminh/school_gradebook_system/blob/master/Student.cpp): `Student.cpp`

### Reports

- [Report generation](https://github.com/mxminh/school_gradebook_system/blob/master/Teacher.cpp): `Teacher.cpp`
- **Report text file**

### Other components

- **Console user**

## Connections

- Console user → Interactive menus: chooses options (evidence: `ConsoleDisplay.cpp`)
- Program entry → Interactive menus: starts menus (evidence: `main.cpp`)
- Program entry → Course catalog: initializes (evidence: `main.cpp`)
- Interactive menus → Student records: creates and updates (evidence: `ConsoleDisplay.cpp`)
- Interactive menus → Student registry: looks up students (evidence: `ConsoleDisplay.cpp`)
- Interactive menus → Teacher tools: invokes teacher tools (evidence: `ConsoleDisplay.cpp`)
- Interactive menus → Course catalog: displays and searches (evidence: `ConsoleDisplay.cpp`)
- Student records → Person profile: inherits profile
- Teacher tools → Person profile: inherits profile
- Student records → Student registry: registers students (evidence: `Student.cpp`)
- Teacher tools → Student registry: queries students (evidence: `Teacher.cpp`)
- Student records → Course model: stores courses (evidence: `Student.cpp`)
- Student records → Grades and GPA: calculates grades (evidence: `Student.cpp`)
- Interactive menus → Grades and GPA: edits student points (evidence: `ConsoleDisplay.cpp`)
- Teacher tools → Grades and GPA: edits course points (evidence: `Teacher.cpp`)
- Teacher tools → Report generation: generates reports (evidence: `Teacher.cpp`)
- Report generation → Student registry: retrieves report subjects (evidence: `Teacher.cpp`)
- Report generation → Student records: saves student report (evidence: `Teacher.cpp`)
- Student records → Report text file: writes report (evidence: `Student.cpp`)
