Project
Project
Project description
This project is a comprehensive university attendance system designed to streamline the academic
management process. It features three distinct user roles: student, teacher, and admin.
Student Features:
o Course Management: Students can easily select and remove courses from their
profiles.
o Assignment and Attendance Tracking: Students can view their assignments and
monitor their attendance records.
o Teacher Selection: Students have the option to pick their preferred teachers for various
courses.
Teacher Features:
o Attendance Management: Teachers can add and update the attendance of their
students.
o Grading: Teachers have the capability to mark student performance and upload grades.
Admin Features:
o Full Access: The admin has comprehensive control over the system, including managing
courses, students, and teachers, as well as overseeing the entire academic process.
CODE
Main Class
package view;
import view.forms.LoginUI;
import javax.swing.*;
import com.formdev.flatlaf.FlatLightLaf;
try {
UIManager.setLookAndFeel(new FlatLightLaf());
} catch (UnsupportedLookAndFeelException e) {
loginScreen.setVisible(true);
Dashboard:-
package view;
import view.forms.UserSettings;
import view.components.ViewAttendance;
import view.components.ModifyAttendance;
import view.forms.DeleteAttendance;
import view.forms.AddAttendance;
import view.components.Reports;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import controller.UASController;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import view.components.charts.SemesterAttendanceReport;
import view.forms.LoginUI;
public Dashboard() {
if (!UASController.isUserLoggedIn()) {
loginScreen.setVisible(true);
this.dispose();
} else {
if(UASController.objApplicationSession.getUser().getRole().equals("faculty"))
else
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setLayout(new BorderLayout());
// Header Panel
createHeaderPanel();
// Menu Panel
createMenuPanel();
// Content Panel
createContentPanel();
pack();
setLocationRelativeTo(null);
headerPanel.setLayout(new BorderLayout());
add(headerPanel, BorderLayout.NORTH);
titleLabel.setVerticalAlignment(SwingConstants.CENTER);
titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
headerPanel.add(titleLabel, BorderLayout.CENTER);
menuPanel.setLayout(new GridBagLayout());
add(menuPanel, BorderLayout.WEST);
gbc.gridy = 0;
if(UASController.objApplicationSession.getUser().getRole().equals("student")){
menuPanel.add(homeButton, gbc);
gbc.gridy++;
menuPanel.add(viewAttendanceButton, gbc);
gbc.gridy++;
if (UASController.objApplicationSession.getUser().getRole().equals("faculty")) {
menuPanel.add(addAttendanceButton, gbc);
gbc.gridy++;
menuPanel.add(deleteAttendanceButton, gbc);
gbc.gridy++;
menuPanel.add(modifyAttendanceButton, gbc);
gbc.gridy++;
if(UASController.objApplicationSession.getUser().getRole().equals("student")){
gbc.gridy++;
menuPanel.add(settingsButton, gbc);
gbc.gridy++;
gbc.gridy++;
logoutButton.setForeground(Color.WHITE);
logoutButton.setFocusPainted(false);
logoutButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
logoutButton.addActionListener(new ActionListener() {
@Override
UASController.expireSession();
});
menuPanel.add(logoutButton, gbc);
button.setForeground(Color.WHITE);
button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
addWindowListener(new WindowAdapter() {
@Override
// Call the method to expire the session and handle any other necessary cleanup
UASController.expireSession();
});
// Hover Effect
button.addMouseListener(new java.awt.event.MouseAdapter() {
});
button.addActionListener(new ActionListener() {
@Override
contentPanel.removeAll();
if (buttonText.equals("Dashboard")) {
contentPanel.add(new ViewAttendance());
contentPanel.add(new DeleteAttendance());
contentPanel.add(new ModifyAttendance());
contentPanel.add(new UserSettings());
} else if (buttonText.equals("Reports")) {
contentPanel.add(new Reports());
contentPanel.revalidate();
contentPanel.repaint();
});
return button;
if(UASController.objApplicationSession.getUser().getRole().equals("student")){
}else{
contentPanel.add(new AddAttendance(), BorderLayout.CENTER); // Add the chart to the center of the content
panel
add(contentPanel, BorderLayout.CENTER);
package view.forms;
import org.jdatepicker.JDatePicker;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import controller.UASController;
import java.util.Stack;
import model.UASFactory;
import model.dto.ClassDTO;
import model.dto.CourseClassDTO;
import model.dto.CourseDTO;
import model.dto.Response;
import model.dto.StudentDTO;
import model.dto.TeacherCourseViewDTO;
UASController controllerObj;
ArrayList<StudentDTO> studentList;
public AddAttendance() {
controllerObj = UASFactory.getUASControllerInstance();
initializeComponents();
initializeStudentTable();
setupLayout();
addListeners();
cl.push(s);
timeSlotField.setText(timeString);
// Initialize the table model with column names and set it to the JTable
tableModel = new DefaultTableModel(new Object[]{"Name", "RegNo", "Present"}, 0);
studentTable.setModel(tableModel);
studentTable.getColumnModel().getColumn(2).setCellRenderer(new DefaultTableCellRenderer() {
checkBox.setSelected((boolean) value);
return checkBox;
});
checkAllCheckBox.setSelected(true);
tableModel.setRowCount(0);
tableModel.addRow(rowData);
setLayout(new GridBagLayout());
gbc.gridx = 0;
gbc.gridy = 0;
add(classLabel, gbc);
gbc.gridx = 1;
add(classComboBox, gbc);
//Add course
gbc.gridx = 0;
gbc.gridy++;
add(dateLabel, gbc);
gbc.gridx = 1;
add(datePicker, gbc);
gbc.gridx = 0;
gbc.gridy++;
add(timeSlotLabel, gbc);
gbc.gridx = 1;
add(timeSlotField, gbc);
gbc.gridx = 0;
gbc.gridy++;
add(remarksLabel, gbc);
gbc.gridx = 1;
add(remarksField, gbc);
checkAllCheckBox.setSelected(true);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 2;
gbc.weightx = 1;
gbc.weighty = 0;
gbc.fill = GridBagConstraints.NONE;
gbc.anchor = GridBagConstraints.LINE_END;
add(checkAllCheckBox, gbc);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 2;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
add(scrollPane, gbc);
gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 2;
gbc.weighty = 0;
gbc.fill = GridBagConstraints.CENTER;
gbc.anchor = GridBagConstraints.CENTER;
add(addAttendanceButton, gbc);
classComboBox.addActionListener(new ActionListener() {
@Override
classObj.setClassId(classId);
course.setCourseCode(courseId);
if(res.isSuccessfull()){
updateStudentTable(studentList);
}else{
JOptionPane.showMessageDialog(classComboBox, res.getErrorMessages());
});
// courseComboBox.addActionListener(new ActionListener() {
// @Override
//
// }
// });
checkAllCheckBox.addActionListener(new ActionListener() {
@Override
tableModel.setValueAt(isChecked, i, 2);
});
addAttendanceButton.addActionListener(new ActionListener() {
@Override
System.out.println(selectedDate.toString());
System.out.println("Name: " + name + ", RegNo: " + regNo + ", Present: " + isPresent);
timeSlotField.setText("");
remarksField.setText("");
studentTable.clearSelection();
});
Courses.java
package view.components;
/**
* @author fawad
*/
import controller.UASController;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.util.ArrayList;
import model.UASFactory;
import model.dto.CourseDTO;
import model.dto.Response;
UASController objController;
public Courses() {
objController=UASFactory.getUASControllerInstance();
setLayout(new BorderLayout());
Response response=UASFactory.getResponseInstance();
ArrayList<CourseDTO> courseList=objController.getCourses(response);
for(CourseDTO c:courseList){
tableModel.addRow(new Object[]{
c.getCourseCode(),
c.getCourseName(),
c.getCreditHours()
});
}}
ManageCourses
package view.components;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import view.forms.AddCourse;
public ManageCourses() {
setLayout(new BorderLayout());
// Create the card layout and the card panel to hold the panels
cardPanel.add(addCoursePanel, "AddCourse");
add(cardPanel, BorderLayout.CENTER);
addCourseButton.addActionListener(new ActionListener() {
@Override
cardLayout.show(cardPanel, "AddCourse");
});
viewCoursesButton.addActionListener(new ActionListener() {
@Override
cardPanel.add(viewCoursesPanel, "ViewCourses");
cardLayout.show(cardPanel, "ViewCourses");
});
navBarPanel.add(addCourseButton);
add(navBarPanel, BorderLayout.NORTH);
ManageUsers
package view.components;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import view.forms.AddUser;
public ManageUsers() {
setLayout(new BorderLayout());
// Create the card layout and the card panel to hold the panels
add(cardPanel, BorderLayout.CENTER);
cardPanel.add(addUserPanel, "AddUser");
addUserButton.addActionListener(new ActionListener() {
@Override
cardLayout.show(cardPanel, "AddUser");
});
viewUsersButton.addActionListener(new ActionListener() {
@Override
cardPanel.add(viewUsersPanel, "ViewUsers");
cardLayout.show(cardPanel, "ViewUsers");
});
// Add the buttons to the navigation bar panel in the desired order
navBarPanel.add(addUserButton);
navBarPanel.add(viewUsersButton);
PICTURES (below)
Package diagram (below)