Semester Project
Semester Project
(CLO-4: Develop a GUI based project for a real-world problem in a team environment)
Project Overview:
Your task is to develop a School Management System that manages Students, Teachers, Courses, and
Administrative Staff. The system will provide functionality to register students and staff, assign courses to
teachers and students, generate reports, and store/retrieve data from files. This project should demonstrate
the use of object-oriented programming concepts in Java, including inheritance, composition,
polymorphism, static members, interfaces, object arrays, generics, and file handling.
Project Requirements:
Core Functionalities:
1. User Roles:
o Student:
1. Attributes: studentID, name, address, dateOfBirth, list of enrolled courses.
2. Methods:
1. enrollInCourse(Course course): Adds a course to the student's list of enrolled
courses.
Output: Confirms the enrollment by printing the course name and student ID.
Example: "Student S001 successfully enrolled in Data Structures."
2. displayCourses(): Lists all the courses the student is enrolled in.
Output: Displays a formatted list of courses with their titles and credits.
o Teacher:
1. Attributes: teacherID, name, specialization, list of courses taught.
2. Methods:
1. assignCourse(Course course): Adds a course to the teacher's list of courses.
Output: Confirms the course assignment by printing the teacher name and course
title.
Example: "Teacher T001 assigned to teach Advanced Algorithms."
2. displayCourses(): Lists all the courses taught by the teacher.
Output: Displays the course titles and IDs.
o Administrative Staff:
1. Attributes: staffID, name, role, and department.
2. Methods:
1. generateReport(List<Person> people): Generates a report summarizing the data for
students, teachers, or courses, depending on the input list.
Output: Returns a string report.
Example:
o Course Management:
1. Attributes: courseID, title, credits, assignedTeacher, list of enrolled students.
2. Methods:
1. addStudent(Student student): Adds a student to the course.
Output: Displays confirmation.
Example: "Student S002 added to Introduction to Java."
2. removeStudent(Student student): Removes a student from the course.
Output: Displays confirmation or error if the student is not enrolled.
Example: "Student S002 removed from Data Structures."
3. calculateAverageGrade(): Calculates the average grade of all students in the course.
Output: Displays the average grade.
Example: "Average grade for Introduction to Java: 85.6"
.
2. Inheritance:
o Create a base class Person with common attributes like name, email, and dateOfBirth. Use
inheritance to create Student, Teacher, and AdministrativeStaff classes.
5. Interfaces:
o Create an interface Reportable with methods like generateReport() and exportToFile().
Implement this interface in AdministrativeStaff and Teacher.
o Methods:
o generateReport(): Outputs a summary of the data specific to the implementer.
o Example for Administrative Staff:
6. Composition:
o A Course object should have a reference to a Teacher object and an array of Student
objects.
7. Object Arrays and ArrayList:
o Use object arrays to store Student and Course objects.
o Use ArrayList for dynamic management of students enrolled in courses.
8. File Handling:
o Save and retrieve data for students, teachers, and courses using files.
o Implement functionality to load and save the current state of the system to files.
o Methods in University:
1. loadData(String filename): Loads students, teachers, and courses from a file.
Output: Confirms success or error.
Example: "Data loaded successfully from university_data.txt."
2. saveData(String filename): Saves current system data to a file.
Output: Confirms success.
Example: "Data saved successfully to university_data.txt."
9. Generics:
o Use a generic class Repository<T> to manage lists of students, teachers, and courses.
o Methods:
1. add(T item): Adds an object of type T to the repository.
Output: Displays confirmation.
Example: "Student S003 added to the repository."
2. remove(T item): Removes an object of type T from the repository.
Output: Displays confirmation or error.
Example: "Course CS101 removed from the repository."
3. getAll(): Returns a list of all objects of type T.
Additional Requirements:
• Reports:
o Generate detailed reports on:
▪ Students enrolled in a course.
▪ Teacher Workload Report: List all courses taught by each teacher.
Example:
Teacher: Ali, Courses: [Data Structures, Algorithms]
▪ Overall system statistics.
• Error Handling:
o Include exception handling for invalid input and file operations.
• Grading System:
o Each course should store grades for enrolled students.
o Implement functionality to calculate average grades for a course.
Evaluation Criteria:
4. Viva (40%):
o Individual oral examination will be conducted.
Deliverables:
2. Documentation:
o Class diagram.
o Explanation of functionality.
o Sample input/output.
3. Viva: Oral examination