Implemented UI, fixed serialization inconsistency

This commit is contained in:
2023-09-25 19:00:21 +03:00
parent 338ed053e3
commit 24d671f765
19 changed files with 365 additions and 153 deletions

View File

@@ -0,0 +1,56 @@
package org.lumijiez.base;
import org.lumijiez.enums.StudyField;
import java.util.List;
public class Faculty {
public Faculty(String name, String abbreviation, StudyField field) {
this.name = name;
this.abbreviation = abbreviation;
this.field = field;
}
private String name;
private String abbreviation;
private List<Group> groups;
private StudyField field;
public void addGroup(Group group) {
groups.add(group);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAbbreviation() {
return abbreviation;
}
public void setAbbreviation(String abbreviation) {
this.abbreviation = abbreviation;
}
public List<Group> getGroups() {
return groups;
}
public void setGroups(List<Group> groups) {
this.groups = groups;
}
public StudyField getField() {
return field;
}
public void setField(StudyField field) {
this.field = field;
}
}

View File

@@ -3,8 +3,16 @@ package org.lumijiez.base;
import java.io.Serializable;
public class Grade implements Serializable {
private final String subject;
private final int grade;
private String subject;
private int grade;
public void setSubject(String subject) {
this.subject = subject;
}
public void setGrade(int grade) {
this.grade = grade;
}
public Grade(String subject, int grade) {
this.subject = subject;

View File

@@ -5,8 +5,27 @@ import java.util.ArrayList;
import java.util.List;
public class Group implements Serializable {
private final String name;
private final List<Student> students = new ArrayList<>();
private String name;
private Faculty faculty;
public void setName(String name) {
this.name = name;
}
public Faculty getFaculty() {
return faculty;
}
public void setFaculty(Faculty faculty) {
this.faculty = faculty;
}
public void setStudents(List<Student> students) {
this.students = students;
}
private List<Student> students = new ArrayList<>();
public Group(String name) {
this.name = name;
@@ -19,6 +38,7 @@ public class Group implements Serializable {
public void addStudent(Student st) {
students.add(st);
}
public void deleteStudent(Student st) {
students.remove(st);
}
@@ -28,11 +48,10 @@ public class Group implements Serializable {
}
public Student getStudent(String name, String surname) {
for (Student student : students) {
for (Student student : students)
if (student.getName().equals(name) && student.getSurname().equals(surname)) {
return student;
}
}
return null;
}
}

View File

@@ -2,13 +2,31 @@ package org.lumijiez.base;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Student implements Serializable {
private final String name;
private final String surname;
private final String fullname;
private String name;
private String surname;
private String fullname;
private String email;
private Date enrollmentDate;
private Date dateOfBirth;
// Student stores a reference to its own Group and Faculty, bidirectional association
private Group group;
public Faculty getFaculty() {
return faculty;
}
public void setFaculty(Faculty faculty) {
this.faculty = faculty;
}
private Faculty faculty;
private final List<Grade> grades = new ArrayList<>();
public Student(String name, String surname, Group group) {
@@ -31,6 +49,7 @@ public class Student implements Serializable {
public void addGrade(Grade grade) {
grades.add(grade);
}
public String getName() {
return name;
}
@@ -43,8 +62,44 @@ public class Student implements Serializable {
return fullname;
}
public String getEmail() {
return email;
}
public Date getEnrollmentDate() {
return enrollmentDate;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public Group getGroup() {
return group;
}
public void setName(String name) {
this.name = name;
}
public void setSurname(String surname) {
this.surname = surname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public void setEmail(String email) {
this.email = email;
}
public void setEnrollmentDate(Date enrollmentDate) {
this.enrollmentDate = enrollmentDate;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}

View File

@@ -1,6 +1,6 @@
package org.lumijiez.data;
import org.lumijiez.managers.Manager;
import org.lumijiez.managers.Supervisor;
import java.io.File;
import java.io.FileInputStream;
@@ -8,12 +8,12 @@ import java.io.IOException;
import java.io.ObjectInputStream;
public class DataDeserializer {
public static Manager deserialize() {
public static Supervisor deserialize() {
File serializedFile = new File("manager.ser");
Manager manager = new Manager();
Supervisor manager = new Supervisor();
if (serializedFile.exists()) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(serializedFile))) {
manager = (Manager) ois.readObject();
manager = (Supervisor) ois.readObject();
System.out.println("Manager object deserialized successfully.");
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();

View File

@@ -1,6 +1,6 @@
package org.lumijiez.data;
import org.lumijiez.managers.Manager;
import org.lumijiez.managers.Supervisor;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -8,7 +8,7 @@ import java.io.ObjectOutputStream;
public class DataSerializer {
public static void serialize(Manager manager) {
public static void serialize(Supervisor manager) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("manager.ser"))) {
oos.writeObject(manager);
System.out.println("Manager object serialized successfully.");

View File

@@ -0,0 +1,26 @@
package org.lumijiez.enums;
public enum StudyField {
MECHANICAL_ENGINEERING("Mechanical Engineering", "ME"),
SOFTWARE_ENGINEERING("Software Engineering", "FAF"),
FOOD_TECHNOLOGY("Food Technology", "FT"),
URBANISM_ARCHITECTURE("Urbanism and Architecture", "UA"),
VETERINARY_MEDICINE("Veterinary Medicine", "VE");
private final String name;
private final String abbreviation;
StudyField(String name, String abbreviation) {
this.name = name;
this.abbreviation = abbreviation;
}
public String getName() {
return name;
}
public String getAbbreviation() {
return abbreviation;
}
}

View File

@@ -3,12 +3,13 @@ package org.lumijiez.gui;
import org.lumijiez.data.DataDeserializer;
import org.lumijiez.data.DataSerializer;
import org.lumijiez.gui.forms.*;
import org.lumijiez.managers.Manager;
import org.lumijiez.managers.Supervisor;
import javax.swing.*;
import java.awt.*;
public class StudentManagementGUI{
private final Manager studentManager;
public class StudentManagementGUI {
private final Supervisor studentManager;
private final JFrame frame;
private final JTextArea outputTextArea;

View File

@@ -1,14 +1,14 @@
package org.lumijiez.gui.forms;
import org.lumijiez.base.Grade;
import org.lumijiez.base.NameSurnameGroup;
import org.lumijiez.managers.Manager;
import org.lumijiez.util.NameSurnameGroup;
import org.lumijiez.managers.Supervisor;
import javax.swing.*;
import java.awt.*;
public class AddGradeForm extends JFrame {
public AddGradeForm(int centerX, int centerY, Manager studentManager, JTextArea outputTextArea) {
public AddGradeForm(int centerX, int centerY, Supervisor studentManager, JTextArea outputTextArea) {
this.setTitle("Add Grade");
this.setSize(400, 300);
this.setLocation(centerX, centerY);

View File

@@ -1,13 +1,13 @@
package org.lumijiez.gui.forms;
import org.lumijiez.base.NameSurnameGroup;
import org.lumijiez.managers.Manager;
import org.lumijiez.util.NameSurnameGroup;
import org.lumijiez.managers.Supervisor;
import javax.swing.*;
import java.awt.*;
public class AddStudentForm extends JFrame {
public AddStudentForm(int centerX, int centerY, Manager studentManager, JTextArea outputTextArea) {
public AddStudentForm(int centerX, int centerY, Supervisor studentManager, JTextArea outputTextArea) {
this.setTitle("Add Student");
this.setSize(400, 300);
this.setLocation(centerX, centerY);

View File

@@ -1,13 +1,13 @@
package org.lumijiez.gui.forms;
import org.lumijiez.base.NameSurnameGroup;
import org.lumijiez.managers.Manager;
import org.lumijiez.util.NameSurnameGroup;
import org.lumijiez.managers.Supervisor;
import javax.swing.*;
import java.awt.*;
public class ChangeGroupForm extends JFrame {
public ChangeGroupForm(int centerX, int centerY, Manager studentManager, JTextArea outputTextArea) {
public ChangeGroupForm(int centerX, int centerY, Supervisor studentManager, JTextArea outputTextArea) {
this.setTitle("Change Group");
this.setSize(400, 300);
this.setLocation(centerX, centerY);

View File

@@ -1,13 +1,13 @@
package org.lumijiez.gui.forms;
import org.lumijiez.base.NameSurnameGroup;
import org.lumijiez.managers.Manager;
import org.lumijiez.util.NameSurnameGroup;
import org.lumijiez.managers.Supervisor;
import javax.swing.*;
import java.awt.*;
public class DeleteStudentForm extends JFrame {
public DeleteStudentForm(int centerX, int centerY, Manager studentManager, JTextArea outputTextArea) {
public DeleteStudentForm(int centerX, int centerY, Supervisor studentManager, JTextArea outputTextArea) {
this.setTitle("Delete Student");
this.setSize(400, 300);
this.setLocation(centerX, centerY);
@@ -33,14 +33,14 @@ public class DeleteStudentForm extends JFrame {
this.add(formPanel);
submitButton.addActionListener(e -> {
String name = nameField.getText();
String surname = surnameField.getText();
String group = groupField.getText();
if (!name.isEmpty() && !surname.isEmpty() && !group.isEmpty()) {
studentManager.removeStudent(new NameSurnameGroup(name, surname, group));
outputTextArea.setText("===== Students =====\n" + studentManager.getStudentsText());
this.dispose();
} else JOptionPane.showMessageDialog(this, "Please fill in all fields.");
String name = nameField.getText();
String surname = surnameField.getText();
String group = groupField.getText();
if (!name.isEmpty() && !surname.isEmpty() && !group.isEmpty()) {
studentManager.removeStudent(new NameSurnameGroup(name, surname, group));
outputTextArea.setText("===== Students =====\n" + studentManager.getStudentsText());
this.dispose();
} else JOptionPane.showMessageDialog(this, "Please fill in all fields.");
});
this.setVisible(true);
}

View File

@@ -1,13 +1,13 @@
package org.lumijiez.gui.forms;
import org.lumijiez.base.NameSurnameGroup;
import org.lumijiez.managers.Manager;
import org.lumijiez.util.NameSurnameGroup;
import org.lumijiez.managers.Supervisor;
import javax.swing.*;
import java.awt.*;
public class ShowGradesForm extends JFrame {
public ShowGradesForm(int centerX, int centerY, Manager studentManager, JTextArea outputTextArea) {
public ShowGradesForm(int centerX, int centerY, Supervisor studentManager, JTextArea outputTextArea) {
this.setTitle("Show Grades Student");
this.setSize(400, 300);
this.setLocation(centerX, centerY);

View File

@@ -0,0 +1,45 @@
package org.lumijiez.managers;
import org.lumijiez.base.Faculty;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class FacultyManager implements Serializable {
public FacultyManager(GroupManager gm, StudentManager sm) {
this.gm = new GroupManager(sm);
this.sm = sm;
}
private final GroupManager gm;
private final StudentManager sm;
private final List<Faculty> faculties = new ArrayList<>();
public Faculty getFaculty(String facultyName, GroupManager gm) {
for (Faculty fc : faculties)
if (fc.getName().equals(facultyName)) return fc;
return null;
}
public void addFaculty(Faculty faculty) {
faculties.add(faculty);
}
public void deleteFaculty(Faculty faculty) {
faculties.remove(faculty);
}
public List<Faculty> getFaculties() {
return faculties;
}
public String getFacultiesText() {
StringBuilder builder = new StringBuilder();
for (Faculty fc : faculties)
builder.append(fc.getName()).append("\n");
return builder.toString();
}
}

View File

@@ -7,26 +7,43 @@ import java.util.ArrayList;
import java.util.List;
public class GroupManager implements Serializable {
public GroupManager(StudentManager sm) {
this.sm = sm;
}
private final StudentManager sm;
private final List<Group> groups = new ArrayList<>();
public Group getGroup(String groupName) {
for (Group group : groups)
if (group.getName().equals(groupName)) return group;
Group newGroup = new Group(groupName);
groups.add(newGroup);
return newGroup;
return null;
}
// public void addGroup(Group group) {
// groups.add(group);
// }
public void addGroup(Group group) {
groups.add(group);
}
public void deleteGroup(Group group) {
groups.remove(group);
}
public List<Group> getGroups() {
return groups;
}
// public void deleteGroup(Group group) {
// groups.remove(group);
// }
public String getGroupsText() {
StringBuilder builder = new StringBuilder();
for (Group gr : groups)
builder.append(gr.getName()).append("\n");
return builder.toString();
}
public Group findGroup(String name) {
for (Group gr : groups) {
if (gr.getName().equals(name)) return gr;
}
return null;
}
}

View File

@@ -1,102 +0,0 @@
package org.lumijiez.managers;
import org.lumijiez.base.Grade;
import org.lumijiez.base.Group;
import org.lumijiez.base.NameSurnameGroup;
import org.lumijiez.base.Student;
import java.io.Serializable;
public class Manager implements Serializable {
private final GroupManager groupManager;
public Manager() {
this.groupManager = new GroupManager();
}
public String getStudentsText() {
StringBuilder info = new StringBuilder();
for (Group group : groupManager.getGroups()) {
for (Student student : group.getStudents()) {
info.append(student.getFullname()).append(" ").append(student.getGroup().getName()).append("\n");
}
}
return info.toString();
}
public String getGradesText(NameSurnameGroup NSG) {
StringBuilder info = new StringBuilder();
for (Grade grade : groupManager.getGroup(NSG.group()).getStudent(NSG.name(), NSG.surname()).getGrades()) {
info.append(grade.getSubject()).append(" ").append(grade.getGrade());
}
return info.toString();
}
public String getGroupsText() {
StringBuilder info = new StringBuilder();
for (Group group : groupManager.getGroups()) {
info.append(group.getName()).append("\n");
}
return info.toString();
}
// public Student getStudent(NameSurnameGroup NSG) {
// return groupManager.getGroup(NSG.group()).getStudent(NSG.name(), NSG.surname());
// }
public void changeGroup(NameSurnameGroup NSG, String groupName) {
Group gr = groupManager.getGroup(groupName);
groupManager.getGroup(groupName).getStudent(NSG.name(), NSG.surname()).setGroup(gr);
}
// public void addGroup(String groupName) {
// groupManager.addGroup(new Group(groupName));
// }
// public void removeGroup(String groupName) {
// groupManager.deleteGroup(groupManager.getGroup(groupName));
// }
// public GroupManager getGroupManager() {
// return groupManager;
// }
public void addStudent(NameSurnameGroup NSG) {
Group currentGroup = groupManager.getGroup(NSG.group());
currentGroup.addStudent(new Student(NSG.name(), NSG.surname(), currentGroup));
}
// public void printStudents() {
// for (Group group : groupManager.getGroups()) {
// for (Student student : group.getStudents()) {
// System.out.println(student.getFullname() + " " + student.getGroup().getName());
// }
// }
// }
// public void printGroups() {
// for (Group group : groupManager.getGroups()) {
// System.out.println(group.getName());
// }
// }
// public void printGrades(NameSurnameGroup NSG) {
// Student student = groupManager.getGroup(NSG.group()).getStudent(NSG.name(), NSG.surname());
// for (Grade grade : student.getGrades()) {
// System.out.println(grade.getSubject() + " " + grade.getGrade());
// }
// }
public void addGrade(NameSurnameGroup NSG, Grade grade) {
Student student = groupManager.getGroup(NSG.group()).getStudent(NSG.name(), NSG.surname());
student.addGrade(grade);
}
public void removeStudent(NameSurnameGroup NSG) {
Student student = groupManager.getGroup(NSG.group()).getStudent(NSG.name(), NSG.surname());
groupManager.getGroup(NSG.group()).deleteStudent(student);
if (student.getGroup().getStudents().isEmpty()) {
groupManager.getGroups().remove(student.getGroup());
}
}
}

View File

@@ -0,0 +1,50 @@
package org.lumijiez.managers;
import org.lumijiez.base.Grade;
import org.lumijiez.base.Group;
import org.lumijiez.util.NameSurnameGroup;
import org.lumijiez.base.Student;
import java.io.Serializable;
public class Supervisor implements Serializable {
private final FacultyManager fm;
public Supervisor() {
this.groupManager = new FacultyManager();
}
public String getStudentsText() {
StringBuilder info = new StringBuilder();
for (Group group : groupManager.getGroups()) {
for (Student student : group.getStudents()) {
info.append(student.getFullname()).append(" ").append(student.getGroup().getName()).append("\n");
}
}
return info.toString();
}
public String getGradesText(NameSurnameGroup NSG) {
StringBuilder info = new StringBuilder();
for (Grade grade : groupManager.getGroup(NSG.group()).getStudent(NSG.name(), NSG.surname()).getGrades()) {
info.append(grade.getSubject()).append(" ").append(grade.getGrade());
}
return info.toString();
}
public void changeGroup(NameSurnameGroup NSG, String groupName) {
Group gr = groupManager.findGroup(groupName);
groupManager.getGroup(groupName).getStudent(NSG.name(), NSG.surname()).setGroup(gr);
}
public void addStudent(NameSurnameGroup NSG) {
Group currentGroup = groupManager.getGroup(NSG.group());
currentGroup.addStudent(new Student(NSG.name(), NSG.surname(), currentGroup));
}
public void addGrade(NameSurnameGroup NSG, Grade grade) {
Student student = groupManager.getGroup(NSG.group()).getStudent(NSG.name(), NSG.surname());
student.addGrade(grade);
}
}

View File

@@ -0,0 +1,36 @@
package org.lumijiez.util;
import org.lumijiez.base.Faculty;package org.lumijiez.util;
// Helper class for easier management of names, surnames, and groups
public class FullStudentData {
private final String name;
private final String surname;
private final String groupName;
private final String facultyName;
public FullStudentData(String name, String surname, String groupName, String facultyName) {
this.name = name;
this.surname = surname;
this.groupName = groupName;
this.facultyName = facultyName;
}
public String name() {
return name;
}
public String surname() {
return surname;
}
public String group() {
return groupName;
}
public String faculty() {
return facultyName;
}
}

View File

@@ -1,5 +1,6 @@
package org.lumijiez.base;
package org.lumijiez.util;
// Helper class for easier management of names, surnames, and groups
public class NameSurnameGroup {
private final String name;
private final String surname;