0% found this document useful (0 votes)
11 views25 pages

Project

it`s oop project

Uploaded by

Windtaker
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views25 pages

Project

it`s oop project

Uploaded by

Windtaker
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

Course title:- OOP

Teacher:- Iqra Sarfraz


NAME :- M.Osama
Project :- university attendance portal

Project description

University Attendance System Website

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;

public class UAS {

public static void main(String[] args) {

try {

UIManager.setLookAndFeel(new FlatLightLaf());

} catch (UnsupportedLookAndFeelException e) {

LoginUI loginScreen = new LoginUI();

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 class Dashboard extends JFrame {

private JPanel headerPanel;

private JPanel menuPanel;

private JPanel contentPanel;

public Dashboard() {

if (!UASController.isUserLoggedIn()) {

LoginUI loginScreen = new LoginUI();

loginScreen.setVisible(true);

this.dispose();

} else {

if(UASController.objApplicationSession.getUser().getRole().equals("faculty"))

setTitle("University Attendance System -Faculty Dashboard");

else

setTitle("University Attendance System -Student 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);

private void createHeaderPanel() {

headerPanel = new JPanel();

headerPanel.setBackground(new Color(41, 128, 185));

headerPanel.setLayout(new BorderLayout());

headerPanel.setPreferredSize(new Dimension(800, 75));

add(headerPanel, BorderLayout.NORTH);

JLabel titleLabel = new JLabel("University Attendance System");

titleLabel.setForeground(new Color(250, 250, 250));

titleLabel.setFont(new Font("Arial", Font.BOLD, 24));

titleLabel.setVerticalAlignment(SwingConstants.CENTER);

titleLabel.setHorizontalAlignment(SwingConstants.CENTER);

headerPanel.add(titleLabel, BorderLayout.CENTER);

private void createMenuPanel() {

menuPanel = new JPanel();

menuPanel.setBackground(new Color(52, 152, 219));

menuPanel.setPreferredSize(new Dimension(220, 600));

menuPanel.setLayout(new GridBagLayout());

add(menuPanel, BorderLayout.WEST);

GridBagConstraints gbc = new GridBagConstraints();


gbc.gridx = 0;

gbc.gridy = 0;

gbc.insets = new Insets(10, 10, 10, 10);

if(UASController.objApplicationSession.getUser().getRole().equals("student")){

JButton homeButton = createMenuButton("Dashboard");

JButton viewAttendanceButton = createMenuButton("View Attendance");

menuPanel.add(homeButton, gbc);

gbc.gridy++;

menuPanel.add(viewAttendanceButton, gbc);

gbc.gridy++;

if (UASController.objApplicationSession.getUser().getRole().equals("faculty")) {

JButton addAttendanceButton = createMenuButton("Add Attendance");

JButton deleteAttendanceButton = createMenuButton("Delete Attendance");

JButton modifyAttendanceButton = createMenuButton("Modify Attendance");

menuPanel.add(addAttendanceButton, gbc);

gbc.gridy++;

menuPanel.add(deleteAttendanceButton, gbc);

gbc.gridy++;

menuPanel.add(modifyAttendanceButton, gbc);

gbc.gridy++;

JButton settingsButton = createMenuButton("User Settings");

if(UASController.objApplicationSession.getUser().getRole().equals("student")){

JButton reportsButton = createMenuButton("Reports");


menuPanel.add(reportsButton, gbc);

gbc.gridy++;

menuPanel.add(settingsButton, gbc);

gbc.gridy++;

gbc.gridy++;

JButton logoutButton = new JButton("Logout");

logoutButton.setForeground(Color.WHITE);

logoutButton.setBackground(new Color(41, 128, 185));

logoutButton.setFocusPainted(false);

logoutButton.setFont(new Font("Arial", Font.BOLD, 12));

logoutButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

logoutButton.putClientProperty("JButton.buttonType", "roundRect"); // Use roundRect button type

logoutButton.putClientProperty("JButton.selectedBackground", new Color(52, 152, 219));

// Add ActionListener to handle logout functionality

logoutButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

UASController.expireSession();

});

menuPanel.add(logoutButton, gbc);

private JButton createMenuButton(String text) {

JButton button = new JButton(text);

button.setPreferredSize(new Dimension(200, 35));

button.setForeground(Color.WHITE);

button.setBackground(new Color(41, 128, 185));


button.setFocusPainted(false);

button.setFont(new Font("Arial", Font.BOLD, 14));

button.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

button.putClientProperty("JButton.buttonType", "roundRect"); // Use roundRect button type

button.putClientProperty("JButton.selectedBackground", new Color(52, 152, 219));

// Add WindowListener to handle closing event

addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

// 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

public void actionPerformed(ActionEvent e) {

// Handle button click event or navigate to the corresponding page

String buttonText = button.getText();

contentPanel.removeAll();

if (buttonText.equals("Dashboard")) {

contentPanel.add(new SemesterAttendanceReport(), BorderLayout.CENTER);

} else if (buttonText.equals("Add Attendance")) {


contentPanel.add(new AddAttendance());

} else if (buttonText.equals("View Attendance")) {

contentPanel.add(new ViewAttendance());

} else if (buttonText.equals("Delete Attendance")) {

contentPanel.add(new DeleteAttendance());

} else if (buttonText.equals("Modify Attendance")) {

contentPanel.add(new ModifyAttendance());

} else if (buttonText.equals("User Settings")) {

contentPanel.add(new UserSettings());

} else if (buttonText.equals("Reports")) {

contentPanel.add(new Reports());

contentPanel.revalidate();

contentPanel.repaint();

});

return button;

private void createContentPanel() {

contentPanel = new JPanel();


contentPanel.setLayout(new BorderLayout()); // Set layout manager for the content panel

if(UASController.objApplicationSession.getUser().getRole().equals("student")){

contentPanel.add(new SemesterAttendanceReport(), BorderLayout.CENTER); // Add the chart to the center


of the content panel

}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;

public class AddAttendance extends JPanel {

UASController controllerObj;

private JLabel classLabel;

private JComboBox<String> classComboBox;

private JComboBox<String> courseComboBox;

private JLabel dateLabel;

private JDatePicker datePicker;

private JLabel timeSlotLabel;

private JTextField timeSlotField;

private JLabel remarksLabel;

private JTextField remarksField;

private JTable studentTable;

private JButton addAttendanceButton;

private JCheckBox checkAllCheckBox;

private DefaultTableModel tableModel;

ArrayList<StudentDTO> studentList;

public AddAttendance() {

controllerObj = UASFactory.getUASControllerInstance();

initializeComponents();

initializeStudentTable();

setupLayout();

addListeners();

private void initializeComponents() {


classLabel = new JLabel("Select Course:");

ArrayList<CourseClassDTO> list = controllerObj.getClassesByTeacherID(new Response());

Stack<String> cl = new Stack<>();

for (CourseClassDTO c : list) {

String s = c.getCourseName() + "-" + c.getCourseCode() + "-" + c.getClassId();

cl.push(s);

classComboBox = new JComboBox<>(cl);

dateLabel = new JLabel("Date:");

datePicker = new JDatePicker(new Date());

timeSlotLabel = new JLabel("Time Slot:");

timeSlotField = new JTextField(10);

remarksLabel = new JLabel("Remarks:");

remarksField = new JTextField(20);

// Set current time slot

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");

Date currentDate = new Date();

String timeString = timeFormat.format(currentDate);

timeSlotField.setText(timeString);

addAttendanceButton = new JButton("Add Attendance");

private void initializeStudentTable() {

// Initialize the table model with column names and set it to the JTable
tableModel = new DefaultTableModel(new Object[]{"Name", "RegNo", "Present"}, 0);

studentTable = new JTable(tableModel);

studentTable.setModel(tableModel);

// Set checkbox renderer for the "Present" column

studentTable.getColumnModel().getColumn(2).setCellRenderer(new DefaultTableCellRenderer() {

public JCheckBox getTableCellRendererComponent(JTable table, Object value, boolean isSelected,

boolean hasFocus, int row, int column) {

JCheckBox checkBox = new JCheckBox();

checkBox.setSelected((boolean) value);

return checkBox;

});

private void updateStudentTable(ArrayList<StudentDTO> studentList) {

checkAllCheckBox.setSelected(true);

// Clear the existing table data

tableModel.setRowCount(0);

// Populate the table with the student list and checkboxes

for (StudentDTO student : studentList) {

Object[] rowData = new Object[]{student.getName(), student.getRegNo(), true};

tableModel.addRow(rowData);

private void setupLayout() {

setLayout(new GridBagLayout());

setOpaque(false); // Make the panel transparent

GridBagConstraints gbc = new GridBagConstraints();


gbc.fill = GridBagConstraints.HORIZONTAL;

gbc.insets = new Insets(5, 5, 5, 5);

// Add course label and combo box

gbc.gridx = 0;

gbc.gridy = 0;

add(classLabel, gbc);

gbc.gridx = 1;

add(classComboBox, gbc);

//Add course

// Add date label and date picker

gbc.gridx = 0;

gbc.gridy++;

add(dateLabel, gbc);

gbc.gridx = 1;

add(datePicker, gbc);

// Add time slot label and text field

gbc.gridx = 0;

gbc.gridy++;

add(timeSlotLabel, gbc);

gbc.gridx = 1;

add(timeSlotField, gbc);

// Add remarks label and text field

gbc.gridx = 0;

gbc.gridy++;

add(remarksLabel, gbc);
gbc.gridx = 1;

add(remarksField, gbc);

// Add check/uncheck all checkbox

checkAllCheckBox = new JCheckBox("Check/Uncheck All");

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);

// Add student table

gbc.gridx = 0;

gbc.gridy++;

gbc.gridwidth = 2;

gbc.weightx = 1;

gbc.weighty = 1;

gbc.fill = GridBagConstraints.BOTH;

JScrollPane scrollPane = new JScrollPane(studentTable);

add(scrollPane, gbc);

// Add add attendance button

gbc.gridx = 0;

gbc.gridy++;

gbc.gridwidth = 2;

gbc.weighty = 0;
gbc.fill = GridBagConstraints.CENTER;

gbc.anchor = GridBagConstraints.CENTER;

add(addAttendanceButton, gbc);

private void addListeners() {

classComboBox.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String selectedClass = (String) classComboBox.getSelectedItem();

ClassDTO classObj = new ClassDTO();

CourseDTO course = new CourseDTO();

String[] parts = selectedClass.split("-");

String courseId = parts[0];

String classId = parts[2] + "-" + parts[3];

classObj.setClassId(classId);

course.setCourseCode(courseId);

Response res=new Response();

studentList = controllerObj.getStudentByClassIDCourseCode(course, classObj,res );

// Update the JTable with the student list and checkboxes

if(res.isSuccessfull()){

updateStudentTable(studentList);

}else{

JOptionPane.showMessageDialog(classComboBox, res.getErrorMessages());

});
// courseComboBox.addActionListener(new ActionListener() {

// @Override

// public void actionPerformed(ActionEvent e) {

//

// }

// });

checkAllCheckBox.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

boolean isChecked = checkAllCheckBox.isSelected();

DefaultTableModel tableModel = (DefaultTableModel) studentTable.getModel();

int rowCount = tableModel.getRowCount();

for (int i = 0; i < rowCount; i++) {

tableModel.setValueAt(isChecked, i, 2);

});

addAttendanceButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String selectedClass = (String) classComboBox.getSelectedItem();

Date selectedDate = (Date) datePicker.getModel().getValue();

String timeSlot = timeSlotField.getText();

String remarks = remarksField.getText();

System.out.println(selectedDate.toString());

// Get attendance information from the table

DefaultTableModel tableModel = (DefaultTableModel) studentTable.getModel();

int rowCount = tableModel.getRowCount();


for (int i = 0; i < rowCount; i++) {

String name = (String) tableModel.getValueAt(i, 0);

String regNo = (String) tableModel.getValueAt(i, 1);

boolean isPresent = (Boolean) tableModel.getValueAt(i, 2);

// Perform attendance saving logic here

System.out.println("Name: " + name + ", RegNo: " + regNo + ", Present: " + isPresent);

// Clear input fields

timeSlotField.setText("");

remarksField.setText("");

// Clear table selection

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;

public class Courses extends JPanel {

private JTable table;

UASController objController;

public Courses() {

objController=UASFactory.getUASControllerInstance();

setLayout(new BorderLayout());

// Create the table model with column names

String[] columnNames = {"Course Code", "Course Name", "Credit Hours"};

DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0);

Response response=UASFactory.getResponseInstance();

ArrayList<CourseDTO> courseList=objController.getCourses(response);

for(CourseDTO c:courseList){

tableModel.addRow(new Object[]{

c.getCourseCode(),

c.getCourseName(),

c.getCreditHours()

});

// Create the table with the model

table = new JTable(tableModel);

// Add the table to a scroll pane

JScrollPane scrollPane = new JScrollPane(table);

// Add the scroll pane to the panel


add(scrollPane, BorderLayout.CENTER);

}}

ManageCourses
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 {

private CardLayout cardLayout;

private JPanel cardPanel;

private JPanel addCoursePanel;

private JPanel viewCoursesPanel;

public ManageCourses() {

setLayout(new BorderLayout());

// Create the card layout and the card panel to hold the panels

cardLayout = new CardLayout();

cardPanel = new JPanel(cardLayout);

// Create the AddCourse panel and add it to the card panel

addCoursePanel = new AddCourse();

cardPanel.add(addCoursePanel, "AddCourse");

// Add the card panel to the main panel

add(cardPanel, BorderLayout.CENTER);

// Create a navigation bar with buttons to switch between panels


JPanel navBarPanel = new JPanel();

navBarPanel.setLayout(new BoxLayout(navBarPanel, BoxLayout.X_AXIS));

JButton addCourseButton = createMenuButton("Add Course");

JButton viewCoursesButton = createMenuButton("View Courses");

// Apply styles to the navigation bar

navBarPanel.setBackground(new Color(173, 216, 230)); // Light blue background color

navBarPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20)); // Margin and padding

addCourseButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

cardLayout.show(cardPanel, "AddCourse");

});

viewCoursesButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// Create the ViewCourses panel and add it to the cardPanel

viewCoursesPanel = new Courses();

cardPanel.add(viewCoursesPanel, "ViewCourses");

cardLayout.show(cardPanel, "ViewCourses");

});

// Add a gap of 10 pixels between the buttons

navBarPanel.add(addCourseButton);

navBarPanel.add(Box.createHorizontalStrut(10)); // Add a gap of 10 pixels


navBarPanel.add(viewCoursesButton);

// Add the navigation bar panel to the main panel

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 static view.components.Component.createMenuButton;

import view.forms.AddUser;

public class ManageUsers extends JPanel {

private CardLayout cardLayout;

private JPanel cardPanel;

public ManageUsers() {

setLayout(new BorderLayout());

// Create the card layout and the card panel to hold the panels

cardLayout = new CardLayout();

cardPanel = new JPanel(cardLayout);

add(cardPanel, BorderLayout.CENTER);

// Create a navigation bar with buttons to switch between panels

JPanel navBarPanel = new JPanel();

navBarPanel.setLayout(new BoxLayout(navBarPanel, BoxLayout.X_AXIS));


navBarPanel.setBackground(new Color(173, 216, 230)); // Light blue background color

navBarPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20)); // Margin and padding

JButton addUserButton = createMenuButton("Add User");

JButton viewUsersButton = createMenuButton("View Users");

AddUser addUserPanel = new AddUser();

cardPanel.add(addUserPanel, "AddUser");

addUserButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// Create the AddUser panel and add it to the cardPanel

cardLayout.show(cardPanel, "AddUser");

});

viewUsersButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

// Create the ViewUsers panel and add it to the cardPanel

ViewUsers viewUsersPanel = new ViewUsers();

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);

// Add the navigation bar panel to the main panel


add(navBarPanel, BorderLayout.NORTH);

PICTURES (below)
Package diagram (below)

You might also like