# aniprogramer/student-result-management-system---mini-project architecture

> Architecture diagram of the GitHub repository aniprogramer/student-result-management-system---mini-project, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aniprogramer/student-result-management-system---mini-project
- Repository: https://github.com/aniprogramer/student-result-management-system---mini-project

## Overview

1. **Overall shape**
   - This is a desktop **Java Swing** application for student result management, not a web app.
   - The architecture is a straightforward **MVC + DAO** split:
     - **UI** layer: Swing forms and menus
     - **Model** layer: entity/POJO classes
     - **DAO** layer: JDBC-backed persistence and queries
     - **Util** layer: shared infrastructure, mainly database connectivity

2. **Application entry and startup**
   - `Main.java` is the launch point.
   - Startup is responsible for applying the **FlatLaf** look-and-feel and then opening the main navigation screen.
   - The README indicates DB settings are passed as JVM properties, so the app is configured at runtime rather than through a hardcoded config file.

3. **Presentation layer**
   - The `ui` package contains the user-facing screens:
     - `MainMenu` for navigation
     - CRUD forms for `Student`, `Department`, `Faculty`, `Course`, `Marks`, and `Result`
     - `ReportCardForm` for transcript-style output
     - `IconBadge` as a reusable visual component
   - These forms are likely the primary interaction boundary for end users; they drive all data entry, search/filtering, and reporting actions.

4. **Domain model**
   - The `model` package contains simple data holders:
     - `Student`
     - `Department`
     - `Faculty`
     - `Course`
     - `Marks`
     - `Result`
   - These classes represent the shared data contract between the UI and persistence layers. They keep business data separate from Swing widgets and SQL code.

5. **Persistence layer**
   - The `dao` package contains one DAO per core entity:
     - `StudentDAO`, `DepartmentDAO`, `FacultyDAO`, `CourseDAO`, `MarksDAO`, `ResultDAO`
   - These DAOs encapsulate database access using **JDBC prepared statements** against **MySQL**.
   - This is the main boundary between the in-memory model objects and the database schema; UI forms should not talk directly to SQL.

6. **Shared infrastructure**
   - `util/DBConnection.java` is the central database utility.
   - It reads JDBC settings from JVM system properties such as `db.url`, `db.user`, and `db.pass`.
   - That makes the app environment-driven and keeps connection details out of the source code.

7. **Data flow through the system**
   - Typical flow is:
     - User interacts with a Swing form
     - Form creates or updates a model object
     - DAO persists or retrieves the object from MySQL
     - Results are rendered back into tables/forms in the UI
   - For search/filter features, the flow is mostly UI → in-memory table filtering, with the DAO used when a refresh or database lookup is needed.

8. **Marks and results are the functional core**
   - The presence of both `Marks` and `Result` entities suggests a separation between raw score entry and computed academic outcomes.
   - The README says marks entry auto-calculates totals and grades on save, and the report card computes **SGPA per semester** and **CGPA overall**.
   - That means some academic calculations are done in the application layer, likely inside the marks/result workflows rather than in the database.

9. **Reporting boundary**
   - `ReportCardForm` is the main reporting screen and probably the most computation-heavy UI.
   - It pulls student and marks data, derives semester and cumulative performance metrics, and then presents them for viewing, CSV export, or printing.
   - This form sits at the intersection of UI, DAO, and calculation logic.

10. **Database and schema**
   - `initialize_student_result_database.sql` is the schema/bootstrap script.
   - The repository depends on a pre-created MySQL schema with tables for the managed entities and seed data for demonstration.
   - This makes the database an explicit external dependency and a required runtime boundary.

11. **Technology choices that affect architecture**
   - **Java 17+** and **Maven** define the build/runtime baseline.
   - **Swing** means the app is client-rendered and event-driven.
   - **MySQL Connector/J** plus JDBC means persistence is synchronous and relational.
   - **FlatLaf** affects UI composition and initialization but not the core data architecture.

12. **What to draw in an architecture diagram**
   - Show a desktop client entry point leading to a main menu.
   - From the menu, show separate Swing forms for master data, marks entry, and report cards.
   - Place the model classes between UI and DAO as shared data objects.
   - Put DAOs between models/UI and the MySQL database.
   - Add `DBConnection` as the shared connector used by all DAOs.
   - Highlight the reporting path from `Marks`/`Result` data to computed SGPA/CGPA output.

13. **Key boundaries**
   - **UI boundary:** Swing forms never own database access directly.
   - **Persistence boundary:** DAOs isolate SQL and connection handling.
   - **Data boundary:** model classes are plain carriers with no UI dependencies.
   - **Runtime boundary:** MySQL and JVM system properties are external to the codebase and must be present for the app to function.

Main entry points: [`src/main/java/ui/MainMenu.java`](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/MainMenu.java) (Main Menu), [`src/main/java/util/DBConnection.java`](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/util/DBConnection.java) (DB Connection), [`src/main/java/ui/ReportCardForm.java`](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/ReportCardForm.java) (Report Card), [`src/main/java/ui/StudentForm.java`](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/StudentForm.java) (Student Form)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App"]
  node_main(("Main<br/>entrypoint<br/>[Main.java]"))
end

subgraph group_ui["UI"]
  node_menu["Main Menu<br/>navigation<br/>[MainMenu.java]"]
  node_student_form["Student Form<br/>CRUD form<br/>[StudentForm.java]"]
  node_dept_form["Department Form<br/>CRUD form"]
  node_faculty_form["Faculty Form<br/>CRUD form<br/>[FacultyForm.java]"]
  node_course_form["Course Form<br/>CRUD form<br/>[CourseForm.java]"]
  node_marks_form["Marks Form<br/>entry form<br/>[MarksForm.java]"]
  node_result_form["Result Form<br/>[ResultForm.java]"]
  node_report_form["Report Card<br/>reporting form"]
  node_badge(("Icon Badge<br/>ui component<br/>[IconBadge.java]"))
end

subgraph group_model["Model"]
  node_student["Student<br/>entity<br/>[Student.java]"]
  node_department["Department<br/>entity<br/>[Department.java]"]
  node_faculty["Faculty<br/>entity<br/>[Faculty.java]"]
  node_course["Course<br/>entity<br/>[Course.java]"]
  node_marks["Marks<br/>entity<br/>[Marks.java]"]
  node_result["Result<br/>entity<br/>[Result.java]"]
end

subgraph group_dao["DAO"]
  node_student_dao{{"Student DAO<br/>JDBC DAO<br/>[StudentDAO.java]"}}
  node_dept_dao{{"Department DAO<br/>JDBC DAO<br/>[DepartmentDAO.java]"}}
  node_faculty_dao{{"Faculty DAO<br/>JDBC DAO<br/>[FacultyDAO.java]"}}
  node_course_dao{{"Course DAO<br/>JDBC DAO<br/>[CourseDAO.java]"}}
  node_marks_dao{{"Marks DAO<br/>JDBC DAO<br/>[MarksDAO.java]"}}
  node_result_dao{{"Result DAO<br/>JDBC DAO<br/>[ResultDAO.java]"}}
end

subgraph group_infra["Infra"]
  node_db_conn["DB Connection<br/>[DBConnection.java]"]
  node_bootstrap_sql["Schema Script<br/>bootstrap sql"]
end

subgraph group_external["External"]
  node_mysql[("MySQL<br/>external db")]
  node_jvm_props["JVM Props<br/>runtime config"]
end

node_main -->|"opens"| node_menu
node_menu -->|"nav"| node_student_form
node_menu -->|"nav"| node_dept_form
node_menu -->|"nav"| node_faculty_form
node_menu -->|"nav"| node_course_form
node_menu -->|"nav"| node_marks_form
node_menu -->|"nav"| node_result_form
node_menu -->|"nav"| node_report_form
node_student_form -->|"uses"| node_student
node_dept_form -->|"uses"| node_department
node_faculty_form -->|"uses"| node_faculty
node_course_form -->|"uses"| node_course
node_marks_form -->|"uses"| node_marks
node_result_form -->|"uses"| node_result
node_report_form -->|"reads"| node_student
node_report_form -->|"reads"| node_marks
node_report_form -->|"derives"| node_result
node_student_form -->|"calls"| node_student_dao
node_dept_form -->|"calls"| node_dept_dao
node_faculty_form -->|"calls"| node_faculty_dao
node_course_form -->|"calls"| node_course_dao
node_marks_form -->|"calls"| node_marks_dao
node_result_form -->|"calls"| node_result_dao
node_report_form -->|"queries"| node_student_dao
node_report_form -->|"queries"| node_marks_dao
node_student_dao -->|"uses"| node_db_conn
node_dept_dao -->|"uses"| node_db_conn
node_faculty_dao -->|"uses"| node_db_conn
node_course_dao -->|"uses"| node_db_conn
node_marks_dao -->|"uses"| node_db_conn
node_result_dao -->|"uses"| node_db_conn
node_db_conn -->|"reads"| node_jvm_props
node_db_conn -->|"connects"| node_mysql
node_bootstrap_sql -->|"initializes"| node_mysql

click node_main "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/Main.java"
click node_menu "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/MainMenu.java"
click node_student_form "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/StudentForm.java"
click node_dept_form "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/DepartmentForm.java"
click node_faculty_form "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/FacultyForm.java"
click node_course_form "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/CourseForm.java"
click node_marks_form "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/MarksForm.java"
click node_result_form "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/ResultForm.java"
click node_report_form "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/ReportCardForm.java"
click node_badge "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/IconBadge.java"
click node_student "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Student.java"
click node_department "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Department.java"
click node_faculty "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Faculty.java"
click node_course "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Course.java"
click node_marks "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Marks.java"
click node_result "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Result.java"
click node_student_dao "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/StudentDAO.java"
click node_dept_dao "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/DepartmentDAO.java"
click node_faculty_dao "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/FacultyDAO.java"
click node_course_dao "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/CourseDAO.java"
click node_marks_dao "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/MarksDAO.java"
click node_result_dao "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/ResultDAO.java"
click node_db_conn "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/util/DBConnection.java"
click node_bootstrap_sql "https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/initialize_student_result_database.sql"

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 toneBlue
class node_menu,node_student_form,node_dept_form,node_faculty_form,node_course_form,node_marks_form,node_result_form,node_report_form,node_badge toneAmber
class node_student,node_department,node_faculty,node_course,node_marks,node_result toneMint
class node_student_dao,node_dept_dao,node_faculty_dao,node_course_dao,node_marks_dao,node_result_dao toneRose
class node_db_conn,node_bootstrap_sql toneIndigo
class node_mysql,node_jvm_props toneTeal
```

## Components

### App

Startup and navigation

- [Main](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/Main.java): entrypoint · Application launch and look-and-feel setup · `src/main/java/Main.java`

### UI

Swing screens and forms

- [Main Menu](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/MainMenu.java): navigation · Primary screen that opens feature forms · `src/main/java/ui/MainMenu.java`
- [Student Form](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/StudentForm.java): CRUD form · Student management screen · `src/main/java/ui/StudentForm.java`
- [Department Form](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/DepartmentForm.java): CRUD form · Department management screen · `src/main/java/ui/DepartmentForm.java`
- [Faculty Form](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/FacultyForm.java): CRUD form · Faculty management screen · `src/main/java/ui/FacultyForm.java`
- [Course Form](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/CourseForm.java): CRUD form · Course management screen · `src/main/java/ui/CourseForm.java`
- [Marks Form](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/MarksForm.java): entry form · Marks entry and grade calculation workflow · `src/main/java/ui/MarksForm.java`
- [Result Form](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/ResultForm.java): result form · Result management screen · `src/main/java/ui/ResultForm.java`
- [Report Card](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/ReportCardForm.java): reporting form · Transcript and SGPA/CGPA view · `src/main/java/ui/ReportCardForm.java`
- [Icon Badge](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/ui/IconBadge.java): ui component · Reusable visual element · `src/main/java/ui/IconBadge.java`

### Model

Shared domain objects

- [Student](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Student.java): entity · Student record model · `src/main/java/model/Student.java`
- [Department](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Department.java): entity · Department record model · `src/main/java/model/Department.java`
- [Faculty](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Faculty.java): entity · Faculty record model · `src/main/java/model/Faculty.java`
- [Course](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Course.java): entity · Course record model · `src/main/java/model/Course.java`
- [Marks](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Marks.java): entity · Raw marks and grade data · `src/main/java/model/Marks.java`
- [Result](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/model/Result.java): entity · Computed academic outcome · `src/main/java/model/Result.java`

### DAO

JDBC persistence layer

- [Student DAO](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/StudentDAO.java): JDBC DAO · Student persistence and queries · `src/main/java/dao/StudentDAO.java`
- [Department DAO](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/DepartmentDAO.java): JDBC DAO · Department persistence and queries · `src/main/java/dao/DepartmentDAO.java`
- [Faculty DAO](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/FacultyDAO.java): JDBC DAO · Faculty persistence and queries · `src/main/java/dao/FacultyDAO.java`
- [Course DAO](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/CourseDAO.java): JDBC DAO · Course persistence and queries · `src/main/java/dao/CourseDAO.java`
- [Marks DAO](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/MarksDAO.java): JDBC DAO · Marks persistence and queries · `src/main/java/dao/MarksDAO.java`
- [Result DAO](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/dao/ResultDAO.java): JDBC DAO · Result persistence and queries · `src/main/java/dao/ResultDAO.java`

### Infra

Database access and bootstrap

- [DB Connection](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/src/main/java/util/DBConnection.java): utility · Shared JDBC connection factory from JVM properties · `src/main/java/util/DBConnection.java`
- [Schema Script](https://github.com/aniprogramer/student-result-management-system---mini-project/blob/main/initialize_student_result_database.sql): bootstrap sql · Database schema and seed data · `initialize_student_result_database.sql`

### External

Runtime and database boundaries

- **MySQL**: external db · Runtime database dependency
- **JVM Props**: runtime config · db.url, db.user, db.pass

## Connections

- Main → Main Menu: opens · Launches the main navigation screen
- Main Menu → Student Form: nav · Opens student management
- Main Menu → Department Form: nav · Opens department management
- Main Menu → Faculty Form: nav · Opens faculty management
- Main Menu → Course Form: nav · Opens course management
- Main Menu → Marks Form: nav · Opens marks entry
- Main Menu → Result Form: nav · Opens result management
- Main Menu → Report Card: nav · Opens transcript/reporting
- Student Form → Student: uses · Binds form inputs to student data
- Department Form → Department: uses · Binds form inputs to department data
- Faculty Form → Faculty: uses · Binds form inputs to faculty data
- Course Form → Course: uses · Binds form inputs to course data
- Marks Form → Marks: uses · Captures raw marks and grades
- Result Form → Result: uses · Works with computed results
- Report Card → Student: reads · Loads student identity for reports
- Report Card → Marks: reads · Uses marks data for SGPA/CGPA
- Report Card → Result: derives · Builds report output from result data
- Student Form → Student DAO: calls · CRUD operations on students
- Department Form → Department DAO: calls · CRUD operations on departments
- Faculty Form → Faculty DAO: calls · CRUD operations on faculty
- Course Form → Course DAO: calls · CRUD operations on courses
- Marks Form → Marks DAO: calls · Persists marks entries
- Result Form → Result DAO: calls · Persists and loads results
- Report Card → Student DAO: queries · Fetches student records for reporting
- Report Card → Marks DAO: queries · Fetches marks for report computation
- Student DAO → DB Connection: uses · Opens JDBC connections
- Department DAO → DB Connection: uses · Opens JDBC connections
- Faculty DAO → DB Connection: uses · Opens JDBC connections
- Course DAO → DB Connection: uses · Opens JDBC connections
- Marks DAO → DB Connection: uses · Opens JDBC connections
- Result DAO → DB Connection: uses · Opens JDBC connections
- DB Connection → JVM Props: reads · Reads database settings from system properties
- DB Connection → MySQL: connects · Creates JDBC connections to MySQL
- Schema Script → MySQL: initializes · Creates schema and seed data
