Project 12
Project 12
Prepared By
Project description
Full Access: The admin has comprehensive control over the system, including
managing courses, students, and teachers, as well as overseeing the entire academic
process
Main Class
package view;
import view.forms.LoginUI;
import javax.swing.*;
import com.formdev.flatlaf.FlatLightLaf;
try {
UIManager.setLookAndFeel(new FlatLightLaf());
} catch (UnsupportedLookAndFeelException e) {
}
LoginUI loginScreen = new LoginUI();
loginScreen.setVisible(true);
Class 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()) {
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.gridx = 0;
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")) {
JButton addAttendanceButton = createMenuButton("Add Attendance");
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")){
menuPanel.add(reportsButton, gbc);
gbc.gridy++;
menuPanel.add(settingsButton, gbc);
gbc.gridy++;
gbc.gridy++;
logoutButton.setForeground(Color.WHITE);
logoutButton.setFocusPainted(false);
logoutButton.setFont(new Font("Arial", Font.BOLD, 12));
logoutButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
UASController.expireSession();
});
menuPanel.add(logoutButton, gbc);
button.setForeground(Color.WHITE);
button.setFocusPainted(false);
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 SemesterAttendanceReport(),
BorderLayout.CENTER);
contentPanel.add(new AddAttendance());
contentPanel.add(new ViewAttendance());
} else if (buttonText.equals("Delete Attendance")) {
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")){
contentPanel.add(new SemesterAttendanceReport(), BorderLayout.CENTER); //
Add the chart to the center of the content panel
}else{
add(contentPanel, BorderLayout.CENTER);
Admin_dashboard
package view;
/**
* @author fawad
*/
import view.components.UTCTime;
import javax.swing.*;
import controller.UASController;
import japa.parser.ParseException;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import view.forms.LoginUI;
import view.components.ManageCourses;
import view.components.ManageStudents;
import view.components.ManageTeachers;
import view.components.ManageUsers;
import view.forms.AssignmentDashboard;
public AdminDashboard() {
if (!UASController.isUserLoggedIn()) {
this.dispose();
} else {
setTitle("Attendance Management System - Admin Dashboard");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setLayout(new BorderLayout());
// Header Panel
createHeaderPanel();
// Menu Panel
createMenuPanel();
// Content Panel
createContentPanel();
pack();
setLocationRelativeTo(null);
add(headerPanel, BorderLayout.NORTH);
@Override
// Call the method to expire the session and handle any other necessary
cleanup
UASController.expireSession();
});
titleLabel.setVerticalAlignment(SwingConstants.CENTER);
titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
headerPanel.add(titleLabel, BorderLayout.CENTER);
rightPanel.setOpaque(false);
headerPanel.add(rightPanel, BorderLayout.EAST);
rightPanel.add(timeLabel, BorderLayout.NORTH);
try {
});
updateTimeThread.start();
menuPanel.setLayout(new GridBagLayout());
add(menuPanel, BorderLayout.WEST);
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(10, 10, 10, 10);
// JButton addStudentButton = createMenuButton("Add Student");
// menuPanel.add(addStudentButton, gbc);
// gbc.gridy++;
menuPanel.add(manageStudentsButton, gbc);
gbc.gridy++;
gbc.gridy++;
menuPanel.add(manageUserButton, gbc);
gbc.gridy++;
menuPanel.add(manageTeacherButton, gbc);
gbc.gridy++;
gbc.gridy++;
logoutButton.setForeground(Color.WHITE);
logoutButton.setFocusPainted(false);
logoutButton.addActionListener(new ActionListener() {
@Override
UASController.expireSession();
});
menuPanel.add(logoutButton, gbc);
button.setForeground(Color.WHITE);
button.setFocusPainted(false);
button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
button.addMouseListener(new java.awt.event.MouseAdapter() {
});
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
contentPanel.removeAll();
if (buttonText.equals("Manage Courses")) {
contentPanel.add(new ManageCourses());
contentPanel.add(new ManageUsers());
contentPanel.add(new ManageStudents());
}else if (buttonText.equals("Manage Teachers")) {
contentPanel.add(new ManageTeachers());
contentPanel.add(new AssignmentDashboard());
}
contentPanel.revalidate();
contentPanel.repaint();
});
return button;
contentPanel.setLayout(new BorderLayout());
add(contentPanel, BorderLayout.CENTER);
String[] parts =
UASController.objApplicationSession.getUser().getEmail().split("@");
welcomeLabel.setHorizontalAlignment(SwingConstants.CENTER);
contentPanel.add(welcomeLabel, BorderLayout.CENTER);
}
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()
});
add(scrollPane, BorderLayout.CENTER);
Managecourse.java
package view.components;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import view.forms.AddCourse;
import static view.components.Component.createMenuButton;
public class ManageCourses extends JPanel {
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);
navBarPanel.add(Box.createHorizontalStrut(10)); // Add a gap of 10 pixels
navBarPanel.add(viewCoursesButton);
add(navBarPanel, BorderLayout.NORTH);
Manageteacher.java
package view.components;
import view.forms.AddTeacher;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public ManageTeachers() {
setLayout(new BorderLayout());
// Create the card layout and the card panel to hold the panels
cardPanel.add(addTeacherPanel, "AddTeacher");
add(cardPanel, BorderLayout.CENTER);
addTeacherButton.addActionListener(new ActionListener() {
@Override
cardLayout.show(cardPanel, "AddTeacher");
}
});
viewTeachersButton.addActionListener(new ActionListener() {
@Override
cardLayout.show(cardPanel, "ViewTeachers");
});
// Add the buttons to the navigation bar panel in the desired order
navBarPanel.add(addTeacherButton);
navBarPanel.add(viewTeachersButton);
add(navBarPanel, BorderLayout.NORTH);
Manageuser.java
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(Box.createHorizontalStrut(10)); // Add a gap of 10 pixels
navBarPanel.add(viewUsersButton);
Modifyattandance
package view.components;
import org.jdatepicker.JDatePicker;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
public ModifyAttendance() {
initializeComponents();
setupLayout();
addListeners();
setLayout(new GridBagLayout());
setOpaque(false);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 0;
add(courseLabel, gbc);
gbc.gridx = 1;
add(courseComboBox, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
add(dateLabel, gbc);
gbc.gridx = 1;
add(datePicker, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
add(remarksLabel, gbc);
gbc.gridx = 1;
add(remarksField, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 2;
gbc.weighty = 0;
gbc.fill = GridBagConstraints.CENTER;
gbc.anchor = GridBagConstraints.CENTER;
add(updateAttendanceButton, gbc);
gbc.gridy = 4;
gbc.gridwidth = 2;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
add(scrollPane, gbc);
@Override
System.out.println("Name: " + name + ", RegNo: " + regNo + ", Present: " +
isPresent);
}
remarksField.setText("");
attendanceTable.clearSelection();
});
Viewattandancejava
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to
change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this
template
*/
package view.components;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.awt.GridBagConstraints;
import controller.UASController;
import org.jdatepicker.JDatePicker;
initializeComponents();
setupLayout();
addListeners();
setLayout(new GridBagLayout());
setOpaque(false);
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0;
gbc.gridy = 0;
add(courseLabel, gbc);
gbc.gridx = 1;
add(courseComboBox, gbc);
gbc.gridx = 0;
gbc.gridy = 1;
add(dateLabel, gbc);
gbc.gridx = 1;
add(datePicker, gbc);
gbc.gridx = 0;
gbc.gridy = 2;
gbc.gridwidth = 2;
gbc.weighty = 0;
gbc.fill = GridBagConstraints.CENTER;
gbc.anchor = GridBagConstraints.CENTER;
add(viewAttendanceButton, gbc);
gbc.gridx = 0;
gbc.gridy = 3;
gbc.gridwidth = 2;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
add(scrollPane, gbc);
viewAttendanceButton.addActionListener(e -> {
attendanceTable.setModel(tableModel);
});
}
Class diagram
Package diagram (below)
Portal login
Database