# abxijth/oop-term-project-student-attendance-management-system architecture

> Architecture diagram of the GitHub repository abxijth/oop-term-project-student-attendance-management-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-05-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/abxijth/oop-term-project-student-attendance-management-system
- Repository: https://github.com/abxijth/oop-term-project-student-attendance-management-system

## Overview

1. **Repository shape**
   - This is a **single Java, object-oriented application** in `Phase-3/Program/src`.
   - The `Phase-1.pdf` and `Phase-2.pdf` files appear to be **project documentation/artifacts**, not runtime components.
   - There is no visible web layer, database, or service tier in the tree.

2. **Overall architecture**
   - The system is a **monolithic attendance management app** built around a small set of domain classes and one orchestrating application class.
   - The design is centered on **in-memory state management** through `DataStore`, with the rest of the classes modeling users, courses, sessions, and attendance events.

3. **Main entrypoint and orchestration**
   - `AttendanceManagementSystem.java` is the likely **main program / controller layer**.
   - It coordinates user actions such as login, creating sessions, marking attendance, and viewing attendance information.
   - In architecture terms, it sits between the user interaction flow and the domain/data classes.

4. **User and role model**
   - `User.java` is the shared base type for people in the system.
   - `Student.java`, `Faculty.java`, and `Admin.java` represent the main roles.
   - This suggests a role-based design where permissions and workflows differ by actor:
     - **Faculty** manages class attendance.
     - **Student** views their own attendance.
     - **Admin** oversees the overall system.

5. **Academic structure**
   - `Subject.java` models a course or subject offering.
   - `ClassSession.java` models a specific lecture or class instance where attendance is taken.
   - These classes define the academic context that attendance records belong to.

6. **Attendance data model**
   - `AttendanceRecord.java` is the atomic attendance entry.
   - It likely links a **student**, a **class session**, and a **present/absent status**.
   - This is the key bridge between the academic schedule and student attendance history.

7. **Shared state and repository boundary**
   - `DataStore.java` is the central **application state container**.
   - It likely holds collections of students, faculty, subjects, sessions, and attendance records.
   - Architecturally, it acts as an **in-memory repository/fake database**, which keeps persistence logic simple and local to the application.

8. **Primary data flows**
   - **Admin flow:** creates or manages users and subjects, with system-wide visibility.
   - **Faculty flow:** selects a subject/session, marks attendance, and stores records.
   - **Student flow:** reads attendance status and percentages from stored records.
   - These flows all converge on `DataStore`, which is the system’s shared source of truth.

9. **Responsibility boundaries**
   - The project separates concerns in a lightweight way:
     - `AttendanceManagementSystem` handles orchestration and user-driven flow.
     - Domain classes (`Student`, `Faculty`, `Subject`, `ClassSession`, `AttendanceRecord`) hold business data.
     - `DataStore` manages stored collections and lookup state.
   - This makes the architecture easy to diagram as **controller + entities + shared store**.

10. **Technology/runtime**
    - The application is **pure Java** and intended to run with **JDK 8+** from the command line or an IDE such as Eclipse/VS Code.
    - No external dependencies, frameworks, or backend infrastructure are visible in the repository tree.

11. **What the diagram should emphasize**
    - A single application boundary enclosing all runtime classes.
    - `AttendanceManagementSystem` as the interaction/orchestration node.
    - `DataStore` as the central shared data hub.
    - Role-based actors (`Student`, `Faculty`, `Admin`) connected to the core attendance model (`Subject`, `ClassSession`, `AttendanceRecord`).

Main entry points: [`Phase-3/Program/src/DataStore.java`](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/DataStore.java) (DataStore), [`Phase-3/Program/src/User.java`](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/User.java) (User), [`Phase-3/Program/src/ClassSession.java`](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/ClassSession.java) (ClassSession), [`Phase-3/Program/src/AttendanceRecord.java`](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/AttendanceRecord.java) (AttendanceRecord)

## Diagram (Mermaid)

```mermaid
flowchart TD

node_attendance_management_system["Attendance App<br/>controller"]
node_datastore[("DataStore<br/>in-memory store<br/>[DataStore.java]")]
node_user(("User<br/>base entity<br/>[User.java]"))
node_student(("Student<br/>role entity<br/>[Student.java]"))
node_faculty(("Faculty<br/>role entity<br/>[Faculty.java]"))
node_admin(("Admin<br/>role entity<br/>[Admin.java]"))
node_subject["Subject<br/>course model<br/>[Subject.java]"]
node_class_session["ClassSession<br/>session model<br/>[ClassSession.java]"]
node_attendance_record["AttendanceRecord<br/>attendance model"]
node_login_dispatch{{"Login & Dispatch<br/>workflow"}}
node_attendance_ops{{"Attendance Ops<br/>workflow"}}
node_reporting{{"Attendance View<br/>workflow"}}

node_attendance_management_system -->|"routes"| node_login_dispatch
node_login_dispatch -->|"authenticates"| node_user
node_user -->|"specializes"| node_student
node_user -->|"specializes"| node_faculty
node_user -->|"specializes"| node_admin
node_attendance_management_system -->|"reads/writes"| node_datastore
node_admin -->|"manages"| node_datastore
node_faculty -->|"drives"| node_attendance_ops
node_attendance_ops -->|"selects"| node_subject
node_attendance_ops -->|"creates"| node_class_session
node_attendance_ops -->|"writes"| node_attendance_record
node_student -->|"views"| node_reporting
node_reporting -->|"reads"| node_attendance_record
node_subject -->|"groups"| node_class_session
node_class_session -->|"contains"| node_attendance_record
node_datastore -->|"stores"| node_student
node_datastore -->|"stores"| node_faculty
node_datastore -->|"stores"| node_admin
node_datastore -->|"stores"| node_subject
node_datastore -->|"stores"| node_class_session
node_datastore -->|"stores"| node_attendance_record

click node_attendance_management_system "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/AttendanceManagementSystem.java"
click node_datastore "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/DataStore.java"
click node_user "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/User.java"
click node_student "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Student.java"
click node_faculty "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Faculty.java"
click node_admin "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Admin.java"
click node_subject "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Subject.java"
click node_class_session "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/ClassSession.java"
click node_attendance_record "https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/AttendanceRecord.java"

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_attendance_management_system,node_datastore,node_user,node_student,node_faculty,node_admin,node_subject,node_class_session,node_attendance_record,node_login_dispatch,node_attendance_ops,node_reporting toneNeutral
```

## Components

### Other components

- [Attendance App](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/AttendanceManagementSystem.java): controller · Main orchestration entrypoint for user-driven attendance workflows. · `Phase-3/Program/src/AttendanceManagementSystem.java`
- [DataStore](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/DataStore.java): in-memory store · Central application state and lookup collections. · `Phase-3/Program/src/DataStore.java`
- [User](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/User.java): base entity · Shared superclass for system users and roles. · `Phase-3/Program/src/User.java`
- [Student](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Student.java): role entity · Learner role that consumes attendance history. · `Phase-3/Program/src/Student.java`
- [Faculty](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Faculty.java): role entity · Instructor role that creates sessions and marks attendance. · `Phase-3/Program/src/Faculty.java`
- [Admin](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Admin.java): role entity · Administrative role for system-wide management. · `Phase-3/Program/src/Admin.java`
- [Subject](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/Subject.java): course model · Represents a course or subject offering. · `Phase-3/Program/src/Subject.java`
- [ClassSession](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/ClassSession.java): session model · A scheduled class instance where attendance is taken. · `Phase-3/Program/src/ClassSession.java`
- [AttendanceRecord](https://github.com/abxijth/oop-term-project-student-attendance-management-system/blob/main/Phase-3/Program/src/AttendanceRecord.java): attendance model · Atomic record linking a student to a session and status. · `Phase-3/Program/src/AttendanceRecord.java`
- **Login & Dispatch**: workflow · Routes a signed-in user into the correct role-specific path.
- **Attendance Ops**: workflow · Faculty-side flow for session creation and attendance marking.
- **Attendance View**: workflow · Student-facing flow for viewing attendance status and totals.

## Connections

- Attendance App → Login & Dispatch: routes · Starts the user interaction flow and selects the role-specific path.
- Login & Dispatch → User: authenticates · Uses the shared user model to identify the signed-in actor.
- User → Student: specializes · Student is a concrete user role.
- User → Faculty: specializes · Faculty is a concrete user role.
- User → Admin: specializes · Admin is a concrete user role.
- Attendance App → DataStore: reads/writes · Coordinates state changes through the shared store.
- Admin → DataStore: manages · Admin operations act on system-wide stored data.
- Faculty → Attendance Ops: drives · Faculty uses the attendance workflow.
- Attendance Ops → Subject: selects · Attendance operations are scoped to a subject.
- Attendance Ops → ClassSession: creates · Creates or opens the class session for attendance.
- Attendance Ops → AttendanceRecord: writes · Marks present/absent entries for students.
- Student → Attendance View: views · Student-facing attendance lookup flow.
- Attendance View → AttendanceRecord: reads · Reporting derives attendance history from records.
- Subject → ClassSession: groups · Sessions belong to a subject offering.
- ClassSession → AttendanceRecord: contains · Each session accumulates attendance entries.
- DataStore → Student: stores · Keeps student entities in memory.
- DataStore → Faculty: stores · Keeps faculty entities in memory.
- DataStore → Admin: stores · Keeps admin entities in memory.
- DataStore → Subject: stores · Keeps subject data in memory.
- DataStore → ClassSession: stores · Keeps scheduled sessions in memory.
- DataStore → AttendanceRecord: stores · Keeps attendance entries in memory.
