From 30066b0e01f746dd1dfcdab78fe469974451ba35 Mon Sep 17 00:00:00 2001 From: BalrajSinghGidda Date: Mon, 9 Feb 2026 16:10:26 +0530 Subject: [PATCH] First draft of the app --- .direnv/flake-profile | 2 +- .direnv/flake-profile-1-link | 1 - .direnv/flake-profile-3-link | 1 + college.db | Bin 0 -> 49152 bytes flake.nix | 33 +- pom.xml | 67 ++++ .../college/management/AdminDashboard.java | 321 ++++++++++++++++++ src/main/java/com/college/management/App.java | 96 ++++++ .../com/college/management/ChatService.java | 58 ++++ .../college/management/DatabaseManager.java | 109 ++++++ .../college/management/FacultyDashboard.java | 240 +++++++++++++ .../com/college/management/PrivateChatUI.java | 96 ++++++ .../college/management/ReportGenerator.java | 57 ++++ .../college/management/StudentDashboard.java | 208 ++++++++++++ .../java/com/college/management/User.java | 20 ++ .../AdminDashboard$TableValue.class | Bin 0 -> 541 bytes .../college/management/AdminDashboard.class | Bin 0 -> 20160 bytes .../classes/com/college/management/App.class | Bin 0 -> 6045 bytes .../com/college/management/ChatService.class | Bin 0 -> 4569 bytes .../college/management/DatabaseManager.class | Bin 0 -> 3274 bytes .../FacultyDashboard$TimetableEntry.class | Bin 0 -> 1070 bytes .../college/management/FacultyDashboard.class | Bin 0 -> 17126 bytes .../college/management/PrivateChatUI$1.class | Bin 0 -> 1683 bytes .../college/management/PrivateChatUI.class | Bin 0 -> 6214 bytes .../college/management/ReportGenerator.class | Bin 0 -> 4142 bytes .../StudentDashboard$MarkRecord.class | Bin 0 -> 758 bytes .../college/management/StudentDashboard.class | Bin 0 -> 14119 bytes .../classes/com/college/management/User.class | Bin 0 -> 875 bytes .../compile/default-compile/createdFiles.lst | 13 + .../compile/default-compile/inputFiles.lst | 9 + 30 files changed, 1328 insertions(+), 3 deletions(-) delete mode 120000 .direnv/flake-profile-1-link create mode 120000 .direnv/flake-profile-3-link create mode 100644 college.db create mode 100644 pom.xml create mode 100644 src/main/java/com/college/management/AdminDashboard.java create mode 100644 src/main/java/com/college/management/App.java create mode 100644 src/main/java/com/college/management/ChatService.java create mode 100644 src/main/java/com/college/management/DatabaseManager.java create mode 100644 src/main/java/com/college/management/FacultyDashboard.java create mode 100644 src/main/java/com/college/management/PrivateChatUI.java create mode 100644 src/main/java/com/college/management/ReportGenerator.java create mode 100644 src/main/java/com/college/management/StudentDashboard.java create mode 100644 src/main/java/com/college/management/User.java create mode 100644 target/classes/com/college/management/AdminDashboard$TableValue.class create mode 100644 target/classes/com/college/management/AdminDashboard.class create mode 100644 target/classes/com/college/management/App.class create mode 100644 target/classes/com/college/management/ChatService.class create mode 100644 target/classes/com/college/management/DatabaseManager.class create mode 100644 target/classes/com/college/management/FacultyDashboard$TimetableEntry.class create mode 100644 target/classes/com/college/management/FacultyDashboard.class create mode 100644 target/classes/com/college/management/PrivateChatUI$1.class create mode 100644 target/classes/com/college/management/PrivateChatUI.class create mode 100644 target/classes/com/college/management/ReportGenerator.class create mode 100644 target/classes/com/college/management/StudentDashboard$MarkRecord.class create mode 100644 target/classes/com/college/management/StudentDashboard.class create mode 100644 target/classes/com/college/management/User.class create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/.direnv/flake-profile b/.direnv/flake-profile index 0c05709..519b17b 120000 --- a/.direnv/flake-profile +++ b/.direnv/flake-profile @@ -1 +1 @@ -flake-profile-1-link \ No newline at end of file +flake-profile-3-link \ No newline at end of file diff --git a/.direnv/flake-profile-1-link b/.direnv/flake-profile-1-link deleted file mode 120000 index 1f52160..0000000 --- a/.direnv/flake-profile-1-link +++ /dev/null @@ -1 +0,0 @@ -/nix/store/yh4rk74mwj495vjphknnjmk8mbz87yaz-java-devshell-env \ No newline at end of file diff --git a/.direnv/flake-profile-3-link b/.direnv/flake-profile-3-link new file mode 120000 index 0000000..56eb919 --- /dev/null +++ b/.direnv/flake-profile-3-link @@ -0,0 +1 @@ +/nix/store/pv7anfrpq0yks95kdn0wig9s7pi04scz-java-devshell-env \ No newline at end of file diff --git a/college.db b/college.db new file mode 100644 index 0000000000000000000000000000000000000000..54ee83073f3e3e49c45e75a98753519a3c828f27 GIT binary patch literal 49152 zcmeI)O>g5w7zc1WPMW4o)}S8DDjVvGMQYR(@Z3Z1vj2<4N08Z zlR{4@5f?rS9QXh2vsIs{!eiNg{ahvoU>)fEE z*&(iLJSOhtgBWQx@D@Rs;)iMYU*LFR4LYu)K9b{wb;-PN>%pW zidNM#F6o-YX-==rIHX0a^I%%b?o!gFs;+&iXQ;&@qDH5u?y=kJrHZERY5T=SSyy)( zwHo`>rk7aPiFHA69t3;({}8=G$1 z9u*L`fBZRVjSfzXR=-Uznq8wa3Y!|vV?vvbJ<3OV@E{shl1Xv6%cJYs)M^oTv{?*< zI7+-`fHPKsr#KPH^lXQ*GGtgVT|Egq^tS$#H*Zi`I!76L&}({CR6 z)S0yxwD0<*CD0^HvU^qB_rrcIPx82Xj(uXay|&QbMglR9Q`L2^QJFEEZ2&VT{dRk% zIFgQGwf)FU(lZ>|nY47Xk&Zs`iZBnQ1!ZGH^lQ3%)@GgErc2KHgb80d3{jw$VjPq8KuR?+M^Q3D&A@ABrHB=kb(xZl^Ru6Qw+9;PZJ;Qasv>lUE zOp_bZC^W!FusF~v%iG9f~dSA2&_LAi91o@f#6Wd^c z00bZa0SG_<0uX=z1Rwwb2teR=1@46-LMoN4`y(^C(a2J+t~d7B(C$5npVf)cIweky zj<);7T{ixEq=*qgNhyZevATSf%NL4!l~Q$ya$0SG_<0uX=z z1Rwwb2tWV=5P-l91maRk91jBNzkC@CVJ2axc7|Ia4z{}fB*y_009U<00Izz00ibkz?=Ust|i0yZ2rM!HouwOKCEeV_HP6H{{M49em)-% z$Rz|I009U<00Izz00bZa0SG`~J_O?4P=F$aD+WDvKf~|;=i{j(mk@ve1Rwwb2tWV= z5P$##ATZwo=>O06^GEI>009U<00Izz00bZa0SG`~J_OMJpO5E^TtWZ>5P$##AOHaf zKmY;|fWUkUc>Vv7{DUC>%2rq)009U<00Izz00bZa0SG_<0uXp51l|cngw#r*PWvY5 z(%fm=p8iWeHJ9Bf + 4.0.0 + com.college + management-system + 1.0-SNAPSHOT + + UTF-8 + 21 + 21 + 21.0.1 + + + + org.openjfx + javafx-controls + ${javafx.version} + + + org.openjfx + javafx-fxml + ${javafx.version} + + + org.xerial + sqlite-jdbc + 3.45.1.0 + + + com.itextpdf + itext7-core + 8.0.2 + pom + + + org.apache.commons + commons-csv + 1.10.0 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 21 + + + + org.openjfx + javafx-maven-plugin + 0.0.8 + + + + default-cli + + com.college.management.App + + + + + + + diff --git a/src/main/java/com/college/management/AdminDashboard.java b/src/main/java/com/college/management/AdminDashboard.java new file mode 100644 index 0000000..64305a0 --- /dev/null +++ b/src/main/java/com/college/management/AdminDashboard.java @@ -0,0 +1,321 @@ +package com.college.management; + +import javafx.geometry.Insets; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.*; +import javafx.stage.Stage; +import java.sql.*; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.control.cell.PropertyValueFactory; + +public class AdminDashboard { + private Stage stage; + private int userId; + private String username; + + public AdminDashboard(Stage stage, int userId, String username) { + this.stage = stage; + this.userId = userId; + this.username = username; + } + + public void show() { + BorderPane root = new BorderPane(); + + // Sidebar + VBox sidebar = new VBox(10); + sidebar.setPadding(new Insets(20)); + sidebar.setStyle("-fx-background-color: #2c3e50;"); + sidebar.setPrefWidth(200); + + Label brand = new Label("Admin Panel"); + brand.setStyle("-fx-text-fill: white; -fx-font-size: 18px; -fx-font-weight: bold;"); + + Button btnUsers = createSidebarButton("Manage Users"); + Button btnNotices = createSidebarButton("Post Notice"); + Button btnTimetable = createSidebarButton("Timetable"); + Button btnEvents = createSidebarButton("Events"); + Button btnChat = createSidebarButton("Global Chat"); + Button btnPrivateChat = createSidebarButton("Private Chat"); + Button btnReports = createSidebarButton("Reports"); + Button btnLogout = createSidebarButton("Logout"); + + sidebar.getChildren().addAll(brand, new Separator(), btnUsers, btnNotices, btnTimetable, btnEvents, btnChat, btnPrivateChat, btnReports, btnLogout); + + root.setLeft(sidebar); + + // Default Content + showUserManagement(root); + + btnUsers.setOnAction(e -> showUserManagement(root)); + btnNotices.setOnAction(e -> showNoticeManagement(root)); + btnTimetable.setOnAction(e -> showTimetableManagement(root)); + btnEvents.setOnAction(e -> showEventManagement(root)); + btnChat.setOnAction(e -> showChat(root, "Admin")); + btnPrivateChat.setOnAction(e -> root.setCenter(new PrivateChatUI(userId).getView())); + btnReports.setOnAction(e -> showReports(root)); + btnLogout.setOnAction(e -> new App().start(stage)); + + Scene scene = new Scene(root, 900, 600); + stage.setTitle("Admin Dashboard"); + stage.setScene(scene); + } + + private void showTimetableManagement(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("Manage Timetable"); + title.setStyle("-fx-font-size: 24px; -fx-font-weight: bold;"); + + GridPane form = new GridPane(); + form.setHgap(10); form.setVgap(10); + + ComboBox cbDay = new ComboBox<>(FXCollections.observableArrayList("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")); + cbDay.setPromptText("Day"); + TextField txtTime = new TextField(); txtTime.setPromptText("Time (e.g. 09:00-10:00)"); + TextField txtSubject = new TextField(); txtSubject.setPromptText("Subject"); + TextField txtFaculty = new TextField(); txtFaculty.setPromptText("Faculty Name"); + Button btnAdd = new Button("Add Entry"); + + form.add(new Label("Day:"), 0, 0); form.add(cbDay, 1, 0); + form.add(new Label("Time:"), 0, 1); form.add(txtTime, 1, 1); + form.add(new Label("Subject:"), 0, 2); form.add(txtSubject, 1, 2); + form.add(new Label("Faculty:"), 0, 3); form.add(txtFaculty, 1, 3); + form.add(btnAdd, 1, 4); + + btnAdd.setOnAction(e -> { + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("INSERT INTO timetable (day, time_slot, subject, faculty_name) VALUES (?, ?, ?, ?)")) { + pstmt.setString(1, cbDay.getValue()); + pstmt.setString(2, txtTime.getText()); + pstmt.setString(3, txtSubject.getText()); + pstmt.setString(4, txtFaculty.getText()); + pstmt.executeUpdate(); + new Alert(Alert.AlertType.INFORMATION, "Timetable entry added!").show(); + } catch (SQLException ex) { ex.printStackTrace(); } + }); + + content.getChildren().addAll(title, form); + root.setCenter(content); + } + + private void showEventManagement(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("Manage Events"); + title.setStyle("-fx-font-size: 24px; -fx-font-weight: bold;"); + + TextField txtTitle = new TextField(); txtTitle.setPromptText("Event Title"); + DatePicker datePicker = new DatePicker(); + TextArea txtDesc = new TextArea(); txtDesc.setPromptText("Event Description"); + Button btnAdd = new Button("Add Event"); + + btnAdd.setOnAction(e -> { + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("INSERT INTO events (title, description, event_date) VALUES (?, ?, ?)")) { + pstmt.setString(1, txtTitle.getText()); + pstmt.setString(2, txtDesc.getText()); + pstmt.setString(3, datePicker.getValue().toString()); + pstmt.executeUpdate(); + new Alert(Alert.AlertType.INFORMATION, "Event added!").show(); + } catch (SQLException ex) { ex.printStackTrace(); } + }); + + content.getChildren().addAll(title, txtTitle, datePicker, txtDesc, btnAdd); + root.setCenter(content); + } + + public static void showChat(BorderPane root, String senderName) { + VBox content = new VBox(10); + content.setPadding(new Insets(20)); + Label title = new Label("Global Chat / Announcements"); + title.setStyle("-fx-font-size: 24px; -fx-font-weight: bold;"); + + TextArea chatArea = new TextArea(); + chatArea.setEditable(false); + chatArea.setPrefHeight(400); + + HBox inputArea = new HBox(10); + TextField txtMsg = new TextField(); + txtMsg.setPrefWidth(500); + Button btnSend = new Button("Send"); + + Runnable refreshChat = () -> { + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT sender, content, timestamp FROM messages ORDER BY id ASC")) { + StringBuilder sb = new StringBuilder(); + while (rs.next()) { + sb.append("[").append(rs.getString("timestamp")).append("] ") + .append(rs.getString("sender")).append(": ") + .append(rs.getString("content")).append("\n"); + } + chatArea.setText(sb.toString()); + chatArea.setScrollTop(Double.MAX_VALUE); + } catch (SQLException ex) { ex.printStackTrace(); } + }; + + btnSend.setOnAction(e -> { + if (txtMsg.getText().isEmpty()) return; + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("INSERT INTO messages (sender, content) VALUES (?, ?)")) { + pstmt.setString(1, senderName); + pstmt.setString(2, txtMsg.getText()); + pstmt.executeUpdate(); + txtMsg.clear(); + refreshChat.run(); + } catch (SQLException ex) { ex.printStackTrace(); } + }); + + refreshChat.run(); + inputArea.getChildren().addAll(txtMsg, btnSend); + content.getChildren().addAll(title, chatArea, inputArea); + root.setCenter(content); + } + + private void showReports(BorderPane root) { + VBox content = new VBox(20); + content.setPadding(new Insets(20)); + + Label title = new Label("System Reports"); + title.setStyle("-fx-font-size: 24px; -fx-font-weight: bold;"); + + Button btnCSV = new Button("Export Students to CSV"); + Button btnPDF = new Button("Export Students to PDF"); + + btnCSV.setOnAction(e -> { + try { + ReportGenerator.exportStudentsCSV("students_report.csv"); + new Alert(Alert.AlertType.INFORMATION, "Exported to students_report.csv").show(); + } catch (Exception ex) { ex.printStackTrace(); } + }); + + btnPDF.setOnAction(e -> { + try { + ReportGenerator.exportStudentsPDF("students_report.pdf"); + new Alert(Alert.AlertType.INFORMATION, "Exported to students_report.pdf").show(); + } catch (Exception ex) { ex.printStackTrace(); } + }); + + content.getChildren().addAll(title, btnCSV, btnPDF); + root.setCenter(content); + } + + private void showNoticeManagement(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + + Label title = new Label("Post New Notice"); + title.setStyle("-fx-font-size: 24px; -fx-font-weight: bold;"); + + TextField txtTitle = new TextField(); + txtTitle.setPromptText("Notice Title"); + TextArea txtContent = new TextArea(); + txtContent.setPromptText("Notice Content..."); + Button btnPost = new Button("Post Notice"); + + btnPost.setOnAction(e -> { + if (txtTitle.getText().isEmpty() || txtContent.getText().isEmpty()) return; + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("INSERT INTO notices (title, content, date) VALUES (?, ?, ?)")) { + pstmt.setString(1, txtTitle.getText()); + pstmt.setString(2, txtContent.getText()); + pstmt.setString(3, java.time.LocalDate.now().toString()); + pstmt.executeUpdate(); + txtTitle.clear(); + txtContent.clear(); + new Alert(Alert.AlertType.INFORMATION, "Notice Posted!").show(); + } catch (SQLException ex) { ex.printStackTrace(); } + }); + + content.getChildren().addAll(title, txtTitle, txtContent, btnPost); + root.setCenter(content); + } + + private Button createSidebarButton(String text) { + Button btn = new Button(text); + btn.setMaxWidth(Double.MAX_VALUE); + btn.setStyle("-fx-background-color: transparent; -fx-text-fill: white; -fx-alignment: CENTER_LEFT;"); + return btn; + } + + private void showUserManagement(BorderPane root) { + VBox content = new VBox(20); + content.setPadding(new Insets(20)); + + Label title = new Label("User Management"); + title.setStyle("-fx-font-size: 24px; -fx-font-weight: bold;"); + + // Form to add user + HBox form = new HBox(10); + TextField txtUsername = new TextField(); + txtUsername.setPromptText("Username"); + PasswordField txtPassword = new PasswordField(); + txtPassword.setPromptText("Password"); + ComboBox cbRole = new ComboBox<>(FXCollections.observableArrayList("STUDENT", "FACULTY", "ADMIN")); + cbRole.setPromptText("Role"); + Button btnAdd = new Button("Add User"); + + form.getChildren().addAll(txtUsername, txtPassword, cbRole, btnAdd); + + // Table to show users + TableView table = new TableValue(); + setupUserTable(table); + refreshUserTable(table); + + btnAdd.setOnAction(e -> { + addUser(txtUsername.getText(), txtPassword.getText(), cbRole.getValue(), table); + txtUsername.clear(); + txtPassword.clear(); + }); + + content.getChildren().addAll(title, form, table); + root.setCenter(content); + } + + private void setupUserTable(TableView table) { + TableColumn colId = new TableColumn<>("ID"); + colId.setCellValueFactory(new PropertyValueFactory<>("id")); + + TableColumn colUser = new TableColumn<>("Username"); + colUser.setCellValueFactory(new PropertyValueFactory<>("username")); + + TableColumn colRole = new TableColumn<>("Role"); + colRole.setCellValueFactory(new PropertyValueFactory<>("role")); + + table.getColumns().addAll(colId, colUser, colRole); + } + + private void refreshUserTable(TableView table) { + ObservableList users = FXCollections.observableArrayList(); + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT id, username, role FROM users")) { + while (rs.next()) { + users.add(new User(rs.getInt("id"), rs.getString("username"), rs.getString("role"), "")); + } + } catch (SQLException e) { + e.printStackTrace(); + } + table.setItems(users); + } + + private void addUser(String user, String pass, String role, TableView table) { + if (user.isEmpty() || pass.isEmpty() || role == null) return; + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users (username, password, role) VALUES (?, ?, ?)")) { + pstmt.setString(1, user); + pstmt.setString(2, pass); + pstmt.setString(3, role); + pstmt.executeUpdate(); + refreshUserTable(table); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + // Inner class fix for TableView + private static class TableValue extends TableView {} +} diff --git a/src/main/java/com/college/management/App.java b/src/main/java/com/college/management/App.java new file mode 100644 index 0000000..6a0d984 --- /dev/null +++ b/src/main/java/com/college/management/App.java @@ -0,0 +1,96 @@ +package com.college.management; + +import javafx.application.Application; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.VBox; +import javafx.stage.Stage; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class App extends Application { + + @Override + public void start(Stage stage) { + DatabaseManager.initializeDatabase(); + showLoginScreen(stage); + } + + private void showLoginScreen(Stage stage) { + VBox layout = new VBox(10); + layout.setPadding(new Insets(20)); + layout.setAlignment(Pos.CENTER); + + Label titleLabel = new Label("College Management System - Login"); + titleLabel.setStyle("-fx-font-size: 20px; -fx-font-weight: bold;"); + + TextField usernameField = new TextField(); + usernameField.setPromptText("Username"); + usernameField.setMaxWidth(250); + + PasswordField passwordField = new PasswordField(); + passwordField.setPromptText("Password"); + passwordField.setMaxWidth(250); + + Button loginButton = new Button("Login"); + loginButton.setMinWidth(100); + + Label statusLabel = new Label(); + + loginButton.setOnAction(e -> { + String user = usernameField.getText(); + String pass = passwordField.getText(); + handleLogin(user, pass, stage, statusLabel); + }); + + layout.getChildren().addAll(titleLabel, usernameField, passwordField, loginButton, statusLabel); + + Scene scene = new Scene(layout, 400, 300); + stage.setTitle("Login"); + stage.setScene(scene); + stage.show(); + } + + private void handleLogin(String username, String password, Stage stage, Label statusLabel) { + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT role FROM users WHERE username = ? AND password = ?")) { + + pstmt.setString(1, username); + pstmt.setString(2, password); + ResultSet rs = pstmt.executeQuery(); + + if (rs.next()) { + String role = rs.getString("role"); + int userId = -1; + try (PreparedStatement idStmt = conn.prepareStatement("SELECT id FROM users WHERE username = ?")) { + idStmt.setString(1, username); + ResultSet rsId = idStmt.executeQuery(); + if (rsId.next()) userId = rsId.getInt("id"); + } + + if ("ADMIN".equals(role)) { + new AdminDashboard(stage, userId, username).show(); + } else if ("FACULTY".equals(role)) { + new FacultyDashboard(stage, userId, username).show(); + } else if ("STUDENT".equals(role)) { + new StudentDashboard(stage, userId, username).show(); + } + } else { + statusLabel.setText("Invalid username or password."); + statusLabel.setStyle("-fx-text-fill: red;"); + } + } catch (SQLException e) { + e.printStackTrace(); + statusLabel.setText("Database error."); + } + } + + public static void main(String[] args) { + launch(); + } +} \ No newline at end of file diff --git a/src/main/java/com/college/management/ChatService.java b/src/main/java/com/college/management/ChatService.java new file mode 100644 index 0000000..f9f2a55 --- /dev/null +++ b/src/main/java/com/college/management/ChatService.java @@ -0,0 +1,58 @@ +package com.college.management; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +public class ChatService { + + public static void sendPrivateMessage(int senderId, int receiverId, String content) { + String sql = "INSERT INTO private_messages (sender_id, receiver_id, content) VALUES (?, ?, ?)"; + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setInt(1, senderId); + pstmt.setInt(2, receiverId); + pstmt.setString(3, content); + pstmt.executeUpdate(); + } catch (SQLException e) { e.printStackTrace(); } + } + + public static List getPrivateConversation(int user1, int user2) { + List messages = new ArrayList<>(); + String sql = "SELECT u.username as sender_name, pm.content, pm.timestamp " + + "FROM private_messages pm " + + "JOIN users u ON pm.sender_id = u.id " + + "WHERE (pm.sender_id = ? AND pm.receiver_id = ?) " + + "OR (pm.sender_id = ? AND pm.receiver_id = ?) " + + "ORDER BY pm.timestamp ASC"; + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setInt(1, user1); + pstmt.setInt(2, user2); + pstmt.setInt(3, user2); + pstmt.setInt(4, user1); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + messages.add("[" + rs.getString("timestamp") + "] " + + rs.getString("sender_name") + ": " + rs.getString("content")); + } + } catch (SQLException e) { e.printStackTrace(); } + return messages; + } + + public static List getChatableUsers(int currentUserId, String roleToFilter) { + List users = new ArrayList<>(); + String sql = "SELECT id, username, role FROM users WHERE id != ?"; + if (roleToFilter != null) sql += " AND role = '" + roleToFilter + "'"; + + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setInt(1, currentUserId); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + users.add(new User(rs.getInt("id"), rs.getString("username"), rs.getString("role"), "")); + } + } catch (SQLException e) { e.printStackTrace(); } + return users; + } +} diff --git a/src/main/java/com/college/management/DatabaseManager.java b/src/main/java/com/college/management/DatabaseManager.java new file mode 100644 index 0000000..6f7cfb9 --- /dev/null +++ b/src/main/java/com/college/management/DatabaseManager.java @@ -0,0 +1,109 @@ +package com.college.management; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; + +public class DatabaseManager { + private static final String URL = "jdbc:sqlite:college.db"; + + public static Connection getConnection() throws SQLException { + return DriverManager.getConnection(URL); + } + + public static void initializeDatabase() { + try (Connection conn = getConnection(); + Statement stmt = conn.createStatement()) { + + // Users table + stmt.execute("CREATE TABLE IF NOT EXISTS users (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "username TEXT UNIQUE NOT NULL," + + "password TEXT NOT NULL," + + "role TEXT NOT NULL" + // ADMIN, FACULTY, STUDENT + ")"); + + // Profiles table + stmt.execute("CREATE TABLE IF NOT EXISTS profiles (" + + "user_id INTEGER PRIMARY KEY," + + "full_name TEXT," + + "email TEXT," + + "department TEXT," + + "FOREIGN KEY(user_id) REFERENCES users(id)" + + ")"); + + // Attendance + stmt.execute("CREATE TABLE IF NOT EXISTS attendance (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "student_id INTEGER," + + "date TEXT," + + "status TEXT," + // PRESENT, ABSENT + "FOREIGN KEY(student_id) REFERENCES users(id)" + + ")"); + + // Marks + stmt.execute("CREATE TABLE IF NOT EXISTS marks (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "student_id INTEGER," + + "subject TEXT," + + "score REAL," + + "FOREIGN KEY(student_id) REFERENCES users(id)" + + ")"); + + // Notices + stmt.execute("CREATE TABLE IF NOT EXISTS notices (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "title TEXT," + + "content TEXT," + + "date TEXT," + + "posted_by INTEGER," + + "FOREIGN KEY(posted_by) REFERENCES users(id)" + + ")"); + + // Timetable + stmt.execute("CREATE TABLE IF NOT EXISTS timetable (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "day TEXT," + // Monday, Tuesday, etc. + "time_slot TEXT," + // e.g., 09:00 - 10:00 + "subject TEXT," + + "faculty_name TEXT," + + "target_role TEXT" + // ALL, STUDENT, FACULTY + ")"); + + // Events + stmt.execute("CREATE TABLE IF NOT EXISTS events (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "title TEXT," + + "description TEXT," + + "event_date TEXT" + + ")"); + + // Messages (Simple Chat) + stmt.execute("CREATE TABLE IF NOT EXISTS messages (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "sender TEXT," + + "content TEXT," + + "timestamp DATETIME DEFAULT CURRENT_TIMESTAMP" + + ")"); + + // Private Messages (One-to-One) + stmt.execute("CREATE TABLE IF NOT EXISTS private_messages (" + + "id INTEGER PRIMARY KEY AUTOINCREMENT," + + "sender_id INTEGER," + + "receiver_id INTEGER," + + "content TEXT," + + "timestamp DATETIME DEFAULT CURRENT_TIMESTAMP," + + "FOREIGN KEY(sender_id) REFERENCES users(id)," + + "FOREIGN KEY(receiver_id) REFERENCES users(id)" + + ")"); + + // Insert default admin if not exists + stmt.execute("INSERT OR IGNORE INTO users (username, password, role) VALUES ('admin', 'admin123', 'ADMIN')"); + + System.out.println("Database initialized successfully."); + } catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/college/management/FacultyDashboard.java b/src/main/java/com/college/management/FacultyDashboard.java new file mode 100644 index 0000000..731de35 --- /dev/null +++ b/src/main/java/com/college/management/FacultyDashboard.java @@ -0,0 +1,240 @@ +package com.college.management; + +import javafx.geometry.Insets; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.*; +import javafx.stage.Stage; +import java.sql.*; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.control.cell.PropertyValueFactory; +import java.time.LocalDate; + +public class FacultyDashboard { + private Stage stage; + private int userId; + private String username; + + public FacultyDashboard(Stage stage, int userId, String username) { + this.stage = stage; + this.userId = userId; + this.username = username; + } + + public void show() { + BorderPane root = new BorderPane(); + + VBox sidebar = new VBox(10); + sidebar.setPadding(new Insets(20)); + sidebar.setStyle("-fx-background-color: #34495e;"); + sidebar.setPrefWidth(200); + + Label brand = new Label("Faculty Panel"); + brand.setStyle("-fx-text-fill: white; -fx-font-size: 18px; -fx-font-weight: bold;"); + + Button btnAttendance = createSidebarButton("Attendance"); + Button btnMarks = createSidebarButton("Marks Entry"); + Button btnTimetable = createSidebarButton("My Timetable"); + Button btnEvents = createSidebarButton("Events"); + Button btnChat = createSidebarButton("Global Chat"); + Button btnPrivateChat = createSidebarButton("Private Chat"); + Button btnLogout = createSidebarButton("Logout"); + + sidebar.getChildren().addAll(brand, new Separator(), btnAttendance, btnMarks, btnTimetable, btnEvents, btnChat, btnPrivateChat, btnLogout); + root.setLeft(sidebar); + + showAttendanceManagement(root); + + btnAttendance.setOnAction(e -> showAttendanceManagement(root)); + btnMarks.setOnAction(e -> showMarksEntry(root)); + btnTimetable.setOnAction(e -> showTimetable(root)); + btnEvents.setOnAction(e -> showEvents(root)); + btnChat.setOnAction(e -> AdminDashboard.showChat(root, username)); + btnPrivateChat.setOnAction(e -> root.setCenter(new PrivateChatUI(userId).getView())); + btnLogout.setOnAction(e -> new App().start(stage)); + + Scene scene = new Scene(root, 900, 600); + stage.setTitle("Faculty Dashboard"); + stage.setScene(scene); + } + + private void showTimetable(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("College Timetable"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + TableView table = new TableView<>(); + setupTimetableTable(table); + loadTimetable(table); + + content.getChildren().addAll(title, table); + root.setCenter(content); + } + + private void showEvents(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("Upcoming Events"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + ListView listView = new ListView<>(); + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT title, description, event_date FROM events ORDER BY event_date ASC")) { + while (rs.next()) { + listView.getItems().add(rs.getString("event_date") + " - " + rs.getString("title") + "\n" + rs.getString("description")); + } + } catch (SQLException e) { e.printStackTrace(); } + + content.getChildren().addAll(title, listView); + root.setCenter(content); + } + + private void setupTimetableTable(TableView table) { + TableColumn colDay = new TableColumn<>("Day"); + colDay.setCellValueFactory(new PropertyValueFactory<>("day")); + TableColumn colTime = new TableColumn<>("Time"); + colTime.setCellValueFactory(new PropertyValueFactory<>("timeSlot")); + TableColumn colSub = new TableColumn<>("Subject"); + colSub.setCellValueFactory(new PropertyValueFactory<>("subject")); + TableColumn colFac = new TableColumn<>("Faculty"); + colFac.setCellValueFactory(new PropertyValueFactory<>("facultyName")); + table.getColumns().addAll(colDay, colTime, colSub, colFac); + } + + private void loadTimetable(TableView table) { + ObservableList data = FXCollections.observableArrayList(); + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT day, time_slot, subject, faculty_name FROM timetable")) { + while (rs.next()) { + data.add(new TimetableEntry(rs.getString("day"), rs.getString("time_slot"), rs.getString("subject"), rs.getString("faculty_name"))); + } + } catch (SQLException e) { e.printStackTrace(); } + table.setItems(data); + } + + public static class TimetableEntry { + private String day, timeSlot, subject, facultyName; + public TimetableEntry(String d, String t, String s, String f) { day = d; timeSlot = t; subject = s; facultyName = f; } + public String getDay() { return day; } + public String getTimeSlot() { return timeSlot; } + public String getSubject() { return subject; } + public String getFacultyName() { return facultyName; } + } + + private Button createSidebarButton(String text) { + Button btn = new Button(text); + btn.setMaxWidth(Double.MAX_VALUE); + btn.setStyle("-fx-background-color: transparent; -fx-text-fill: white; -fx-alignment: CENTER_LEFT;"); + return btn; + } + + private void showAttendanceManagement(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + + Label title = new Label("Mark Attendance"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + DatePicker datePicker = new DatePicker(LocalDate.now()); + TableView table = new TableView<>(); + setupStudentTable(table); + loadStudents(table); + + HBox controls = new HBox(10); + Button btnPresent = new Button("Mark Present"); + Button btnAbsent = new Button("Mark Absent"); + controls.getChildren().addAll(new Label("Date:"), datePicker, btnPresent, btnAbsent); + + btnPresent.setOnAction(e -> markAttendance(table, datePicker.getValue(), "PRESENT")); + btnAbsent.setOnAction(e -> markAttendance(table, datePicker.getValue(), "ABSENT")); + + content.getChildren().addAll(title, controls, table); + root.setCenter(content); + } + + private void showMarksEntry(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + + Label title = new Label("Enter Marks"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + TableView table = new TableView<>(); + setupStudentTable(table); + loadStudents(table); + + HBox controls = new HBox(10); + TextField txtSubject = new TextField(); + txtSubject.setPromptText("Subject"); + TextField txtScore = new TextField(); + txtScore.setPromptText("Score"); + Button btnSave = new Button("Save Mark"); + + controls.getChildren().addAll(txtSubject, txtScore, btnSave); + + btnSave.setOnAction(e -> saveMark(table, txtSubject.getText(), txtScore.getText())); + + content.getChildren().addAll(title, controls, table); + root.setCenter(content); + } + + private void setupStudentTable(TableView table) { + TableColumn colId = new TableColumn<>("ID"); + colId.setCellValueFactory(new PropertyValueFactory<>("id")); + TableColumn colUser = new TableColumn<>("Student Name"); + colUser.setCellValueFactory(new PropertyValueFactory<>("username")); + table.getColumns().addAll(colId, colUser); + } + + private void loadStudents(TableView table) { + ObservableList students = FXCollections.observableArrayList(); + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT id, username FROM users WHERE role = 'STUDENT'")) { + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + students.add(new User(rs.getInt("id"), rs.getString("username"), "STUDENT", "")); + } + } catch (SQLException e) { e.printStackTrace(); } + table.setItems(students); + } + + private void markAttendance(TableView table, LocalDate date, String status) { + User selected = table.getSelectionModel().getSelectedItem(); + if (selected == null || date == null) return; + + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("INSERT INTO attendance (student_id, date, status) VALUES (?, ?, ?)")) { + pstmt.setInt(1, selected.getId()); + pstmt.setString(2, date.toString()); + pstmt.setString(3, status); + pstmt.executeUpdate(); + showAlert("Success", "Attendance marked as " + status); + } catch (SQLException e) { e.printStackTrace(); } + } + + private void saveMark(TableView table, String subject, String scoreStr) { + User selected = table.getSelectionModel().getSelectedItem(); + if (selected == null || subject.isEmpty() || scoreStr.isEmpty()) return; + + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("INSERT INTO marks (student_id, subject, score) VALUES (?, ?, ?)")) { + pstmt.setInt(1, selected.getId()); + pstmt.setString(2, subject); + pstmt.setDouble(3, Double.parseDouble(scoreStr)); + pstmt.executeUpdate(); + showAlert("Success", "Marks saved for " + subject); + } catch (Exception e) { e.printStackTrace(); } + } + + private void showAlert(String title, String content) { + Alert alert = new Alert(Alert.AlertType.INFORMATION); + alert.setTitle(title); + alert.setHeaderText(null); + alert.setContentText(content); + alert.showAndWait(); + } +} diff --git a/src/main/java/com/college/management/PrivateChatUI.java b/src/main/java/com/college/management/PrivateChatUI.java new file mode 100644 index 0000000..03c1c47 --- /dev/null +++ b/src/main/java/com/college/management/PrivateChatUI.java @@ -0,0 +1,96 @@ +package com.college.management; + +import javafx.geometry.Insets; +import javafx.scene.control.*; +import javafx.scene.layout.*; +import java.util.List; + +public class PrivateChatUI { + private int currentUserId; + private User selectedUser; + private TextArea chatArea; + private ListView userList; + + public PrivateChatUI(int currentUserId) { + this.currentUserId = currentUserId; + } + + public Pane getView() { + BorderPane layout = new BorderPane(); + + // Left side: User List + VBox leftPane = new VBox(10); + leftPane.setPadding(new Insets(10)); + leftPane.setPrefWidth(200); + Label userLbl = new Label("Contacts"); + userLbl.setStyle("-fx-font-weight: bold;"); + + userList = new ListView<>(); + refreshUserList(); + + userList.setCellFactory(param -> new ListCell() { + @Override + protected void updateItem(User item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null) setText(null); + else setText(item.getUsername() + " (" + item.getRole() + ")"); + } + }); + + leftPane.getChildren().addAll(userLbl, userList); + layout.setLeft(leftPane); + + // Center: Chat Area + VBox chatPane = new VBox(10); + chatPane.setPadding(new Insets(10)); + + chatArea = new TextArea(); + chatArea.setEditable(false); + chatArea.setPrefHeight(400); + chatArea.setWrapText(true); + + HBox inputPane = new HBox(10); + TextField txtMsg = new TextField(); + txtMsg.setPrefWidth(400); + Button btnSend = new Button("Send"); + inputPane.getChildren().addAll(txtMsg, btnSend); + + chatPane.getChildren().addAll(new Label("Chat Window"), chatArea, inputPane); + layout.setCenter(chatPane); + + // Logic + userList.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal) -> { + selectedUser = newVal; + refreshMessages(); + }); + + btnSend.setOnAction(e -> { + if (selectedUser != null && !txtMsg.getText().isEmpty()) { + ChatService.sendPrivateMessage(currentUserId, selectedUser.getId(), txtMsg.getText()); + txtMsg.clear(); + refreshMessages(); + } + }); + + return layout; + } + + private void refreshUserList() { + List users = ChatService.getChatableUsers(currentUserId, null); + userList.getItems().setAll(users); + } + + private void refreshMessages() { + if (selectedUser == null) { + chatArea.setText("Select a contact to start chatting."); + return; + } + List history = ChatService.getPrivateConversation(currentUserId, selectedUser.getId()); + StringBuilder sb = new StringBuilder(); + for (String msg : history) { + sb.append(msg).append("\n"); + } + chatArea.setText(sb.toString()); + chatArea.setScrollTop(Double.MAX_VALUE); + } +} diff --git a/src/main/java/com/college/management/ReportGenerator.java b/src/main/java/com/college/management/ReportGenerator.java new file mode 100644 index 0000000..aed55f7 --- /dev/null +++ b/src/main/java/com/college/management/ReportGenerator.java @@ -0,0 +1,57 @@ +package com.college.management; + +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Paragraph; +import com.itextpdf.layout.element.Table; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; + +import java.io.FileWriter; +import java.io.IOException; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; + +public class ReportGenerator { + + public static void exportStudentsCSV(String filePath) throws Exception { + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT id, username, role FROM users WHERE role = 'STUDENT'"); + CSVPrinter printer = new CSVPrinter(new FileWriter(filePath), CSVFormat.DEFAULT.withHeader("ID", "Username", "Role"))) { + while (rs.next()) { + printer.printRecord(rs.getInt("id"), rs.getString("username"), rs.getString("role")); + } + } + } + + public static void exportStudentsPDF(String filePath) throws Exception { + PdfWriter writer = new PdfWriter(filePath); + PdfDocument pdf = new PdfDocument(writer); + Document document = new Document(pdf); + + document.add(new Paragraph("Student Report").setFontSize(20).setBold()); + + float[] columnWidths = {50f, 200f, 100f}; + Table table = new Table(columnWidths); + + table.addCell("ID"); + table.addCell("Username"); + table.addCell("Role"); + + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT id, username, role FROM users WHERE role = 'STUDENT'")) { + while (rs.next()) { + table.addCell(String.valueOf(rs.getInt("id"))); + table.addCell(rs.getString("username")); + table.addCell(rs.getString("role")); + } + } + + document.add(table); + document.close(); + } +} diff --git a/src/main/java/com/college/management/StudentDashboard.java b/src/main/java/com/college/management/StudentDashboard.java new file mode 100644 index 0000000..c74b433 --- /dev/null +++ b/src/main/java/com/college/management/StudentDashboard.java @@ -0,0 +1,208 @@ +package com.college.management; + +import javafx.geometry.Insets; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.*; +import javafx.stage.Stage; +import java.sql.*; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.control.cell.PropertyValueFactory; + +public class StudentDashboard { + private Stage stage; + private int studentId; + private String studentName; + + public StudentDashboard(Stage stage, int studentId, String studentName) { + this.stage = stage; + this.studentId = studentId; + this.studentName = studentName; + } + + public void show() { + BorderPane root = new BorderPane(); + + VBox sidebar = new VBox(10); + sidebar.setPadding(new Insets(20)); + sidebar.setStyle("-fx-background-color: #16a085;"); + sidebar.setPrefWidth(200); + + Label brand = new Label("Student Panel"); + brand.setStyle("-fx-text-fill: white; -fx-font-size: 18px; -fx-font-weight: bold;"); + Label nameLbl = new Label("Welcome, " + studentName); + nameLbl.setStyle("-fx-text-fill: #ecf0f1; -fx-font-size: 12px;"); + + Button btnMarks = createSidebarButton("My Marks"); + Button btnAttendance = createSidebarButton("My Attendance"); + Button btnTimetable = createSidebarButton("Time Table"); + Button btnEvents = createSidebarButton("Upcoming Events"); + Button btnChat = createSidebarButton("Global Chat"); + Button btnPrivateChat = createSidebarButton("Private Chat"); + Button btnNotices = createSidebarButton("Notices"); + Button btnLogout = createSidebarButton("Logout"); + + sidebar.getChildren().addAll(brand, nameLbl, new Separator(), btnMarks, btnAttendance, btnTimetable, btnEvents, btnChat, btnPrivateChat, btnNotices, btnLogout); + root.setLeft(sidebar); + + showMarks(root); + + btnMarks.setOnAction(e -> showMarks(root)); + btnAttendance.setOnAction(e -> showAttendance(root)); + btnTimetable.setOnAction(e -> showTimetable(root)); + btnEvents.setOnAction(e -> showEvents(root)); + btnChat.setOnAction(e -> AdminDashboard.showChat(root, studentName)); + btnPrivateChat.setOnAction(e -> root.setCenter(new PrivateChatUI(studentId).getView())); + btnNotices.setOnAction(e -> showNotices(root)); + btnLogout.setOnAction(e -> new App().start(stage)); + + Scene scene = new Scene(root, 900, 600); + stage.setTitle("Student Dashboard - " + studentName); + stage.setScene(scene); + } + + private void showTimetable(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("Class Schedule"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + TableView table = new TableView<>(); + setupTimetableTable(table); + loadTimetable(table); + + content.getChildren().addAll(title, table); + root.setCenter(content); + } + + private void setupTimetableTable(TableView table) { + TableColumn colDay = new TableColumn<>("Day"); + colDay.setCellValueFactory(new PropertyValueFactory<>("day")); + TableColumn colTime = new TableColumn<>("Time"); + colTime.setCellValueFactory(new PropertyValueFactory<>("timeSlot")); + TableColumn colSub = new TableColumn<>("Subject"); + colSub.setCellValueFactory(new PropertyValueFactory<>("subject")); + TableColumn colFac = new TableColumn<>("Faculty"); + colFac.setCellValueFactory(new PropertyValueFactory<>("facultyName")); + table.getColumns().addAll(colDay, colTime, colSub, colFac); + } + + private void loadTimetable(TableView table) { + ObservableList data = FXCollections.observableArrayList(); + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT day, time_slot, subject, faculty_name FROM timetable")) { + while (rs.next()) { + data.add(new FacultyDashboard.TimetableEntry(rs.getString("day"), rs.getString("time_slot"), rs.getString("subject"), rs.getString("faculty_name"))); + } + } catch (SQLException e) { e.printStackTrace(); } + table.setItems(data); + } + + private void showEvents(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("Upcoming Events"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + ListView listView = new ListView<>(); + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT title, description, event_date FROM events ORDER BY event_date ASC")) { + while (rs.next()) { + listView.getItems().add(rs.getString("event_date") + " - " + rs.getString("title") + "\n" + rs.getString("description")); + } + } catch (SQLException e) { e.printStackTrace(); } + + content.getChildren().addAll(title, listView); + root.setCenter(content); + } + + private Button createSidebarButton(String text) { + Button btn = new Button(text); + btn.setMaxWidth(Double.MAX_VALUE); + btn.setStyle("-fx-background-color: transparent; -fx-text-fill: white; -fx-alignment: CENTER_LEFT;"); + return btn; + } + + private void showMarks(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("Academic Results"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + TableView table = new TableView<>(); + TableColumn colSub = new TableColumn<>("Subject"); + colSub.setCellValueFactory(new PropertyValueFactory<>("subject")); + TableColumn colScore = new TableColumn<>("Score"); + colScore.setCellValueFactory(new PropertyValueFactory<>("score")); + table.getColumns().addAll(colSub, colScore); + + ObservableList data = FXCollections.observableArrayList(); + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT subject, score FROM marks WHERE student_id = ?")) { + pstmt.setInt(1, studentId); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + data.add(new MarkRecord(rs.getString("subject"), rs.getDouble("score"))); + } + } catch (SQLException e) { e.printStackTrace(); } + table.setItems(data); + + content.getChildren().addAll(title, table); + root.setCenter(content); + } + + private void showAttendance(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("Attendance Records"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + int present = 0, total = 0; + try (Connection conn = DatabaseManager.getConnection(); + PreparedStatement pstmt = conn.prepareStatement("SELECT status FROM attendance WHERE student_id = ?")) { + pstmt.setInt(1, studentId); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + total++; + if ("PRESENT".equals(rs.getString("status"))) present++; + } + } catch (SQLException e) { e.printStackTrace(); } + + double percent = total == 0 ? 0 : (double) present / total * 100; + Label stats = new Label(String.format("Attendance: %d/%d (%.2f%%)", present, total, percent)); + stats.setStyle("-fx-font-size: 18px;"); + + content.getChildren().addAll(title, stats); + root.setCenter(content); + } + + private void showNotices(BorderPane root) { + VBox content = new VBox(15); + content.setPadding(new Insets(20)); + Label title = new Label("College Notices"); + title.setStyle("-fx-font-size: 22px; -fx-font-weight: bold;"); + + ListView listView = new ListView<>(); + try (Connection conn = DatabaseManager.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SELECT title, content, date FROM notices ORDER BY id DESC")) { + while (rs.next()) { + listView.getItems().add(rs.getString("date") + " - " + rs.getString("title") + "\n" + rs.getString("content")); + } + } catch (SQLException e) { e.printStackTrace(); } + + content.getChildren().addAll(title, listView); + root.setCenter(content); + } + + public static class MarkRecord { + private String subject; + private double score; + public MarkRecord(String subject, double score) { this.subject = subject; this.score = score; } + public String getSubject() { return subject; } + public double getScore() { return score; } + } +} diff --git a/src/main/java/com/college/management/User.java b/src/main/java/com/college/management/User.java new file mode 100644 index 0000000..628fddd --- /dev/null +++ b/src/main/java/com/college/management/User.java @@ -0,0 +1,20 @@ +package com.college.management; + +public class User { + private int id; + private String username; + private String role; + private String fullName; + + public User(int id, String username, String role, String fullName) { + this.id = id; + this.username = username; + this.role = role; + this.fullName = fullName; + } + + public int getId() { return id; } + public String getUsername() { return username; } + public String getRole() { return role; } + public String getFullName() { return fullName; } +} diff --git a/target/classes/com/college/management/AdminDashboard$TableValue.class b/target/classes/com/college/management/AdminDashboard$TableValue.class new file mode 100644 index 0000000000000000000000000000000000000000..06ece5dac66f67af42da9d6c37a843b3ed4300e7 GIT binary patch literal 541 zcmb7>&rSj{5XQg4!orH8;GdiEpow~LjaLXtFh-LN7nFNhD%5n_q}^3t%ae%*AHat) z&Mqd#gGPJkZ>F7mU#Ii-{_+Z-kF5YDlzn&&R8VEuzT@}&_Azv^&?1bDPOVYlHJ>Ok zmg0e-+LcRPNM%Bbr|X+InzANEZLn#zc<(Y$>7Eb z+v$;7Ffy5q#f4NP*Z$t%Q7+C<8w!_R8khQ5XW0AGlNlOUS_?Z++&Mw524A0r9r!e& zd@&*oiCCvBBr;;<@EPohf)WDS^J}m(EK%H86cCpw^RQA>HL+T74XuK0Y!Cyg_0h&A Ff)C>}jKBZ@ literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/AdminDashboard.class b/target/classes/com/college/management/AdminDashboard.class new file mode 100644 index 0000000000000000000000000000000000000000..a7a12058113c570754f783bf9950daf6d08d28e2 GIT binary patch literal 20160 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 Ag8%>k literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/App.class b/target/classes/com/college/management/App.class new file mode 100644 index 0000000000000000000000000000000000000000..1ed4dc74cdac6c8f804b9679bd6e8b21f58bc109 GIT binary patch literal 6045 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 Ar2qf` literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/ChatService.class b/target/classes/com/college/management/ChatService.class new file mode 100644 index 0000000000000000000000000000000000000000..5b341a5cc53cb80921516cd53851631c57f883f0 GIT binary patch literal 4569 zcmcha+jkSk9ml^TOIjf&F}J=->iQ3*7aWi7{m|a2%$|wSVsg=f%bFeoS7+_<(bUH*>f`Q3Pkr-;YFl%rE6g0D)bq)%u8!7c*s}E zt}MH~#`NIm@sXU7-rr}aPj4J?BsAzcmScrLcfL}}(@d*U7Fe6^9rf&Yo-Ae-CI%8{$0`j;9rs|hz&%UI(DSM-tEMe; zF1=Cv32aOI>b!8|T-z$o3^eU<)L&3&tl&l+SgYY)9Vx66Sl8I7MU-K6q?=W{MAF%8 z@3dOlspCG}FR+YL{&oT#>Fg3lc;beR4cN#q$O|%GbLH`Bfu?(T$|`kTIv!FvjpU0J zM{4M)yYBfjHEUO%GS3!e9Np;Eu?d^0$}ALewJJm5II@%vRtpQM8-?a#!YnH0U!O4lSRw}C{;|RGm zls?C(85845LjzS~FZZ$v#)-otlOsm@wyFKb;P|kTZ{nFN_V*eSlmC_Q@W`Zb;H1*D zVDDgVNM&ocj(4D6Ko7EctS0S?D*sKyO-iR$baT=rX?w6&!#*AR@lJtcBMA)=fpA$~ zAYVMTr(!rjtQvc&)x$bQaFC-sM0MD@o724*_~tVZ!(o9$Q#N8aBA^B7NV2eu>KMZ~ zPh`nFFL@I4rhCG2XW3(p%B~}DWQna>L2n%iqS0(l0!ML7!=#QJrUX`avGB-JP%!|6 znw&Oo=-0LZ6_{y(9RY2sV%2$L?Wz=|50lS~j|Lgpz|1Eh@NVVgNrBzXnuDm_mEjsr z3#`9GwL4BwV|Yv;WEE7t&gghAOx6wN%c~oU9I7WP8$(_oR`((X)`PI}B!(FQ*4b0A zRH;8F(7#k=X|=m`q<30FQDEa83?G^`-JG=Nti0NLs8V3Fa?~oz@mlGuw5L?fA+e*C zyjh$!ZA(1|gJE~pA{$+!|5^0_RVV_F`q$5xfBUFAAiHG2WEreFZizT_`W~q}qNOZT zYnT}GE?Ki6MQVd9hSP$!uU(jHu6dk|`G+D)-b7X)UauEwAlVv8vPm;ocD>>_W>&p8 zXn1bXMO;6f9n5^-E=}UC>X`n$w_4pGzV-(8G$v#-ma7+RZIlMiMHC_1gLVfEuV3HX zxm8og;$&T{))Urso9rI{x%qVN<8I4x)=b%SYc_+IUc%TrENfTyJ84pcsN+C)9$E_8 zC466=uh}*)akWeZUsq>fs&ddOx{_}Wp8HgnX|ewf=PETj zFKG`$(%y7rwyNsIp#znQ>$tXA9h2^CrQpQy60>w#JZ6Y~L&WehWrTMvd39>9(Ia|R zM)9>czK(Bb_@=5&-{Mj7ilLVet2|dZFEc((1c){HpqY0o>Xy0OT*3lDf8)buxloi& z*J!13zE&M*&2Q7lqJ>kWWC`)pP4e|B+%y!Z7&42+oaIUeT+j0K*+WH>ZzPU}?~;KQ zpO!LJ!}kU5e|u3@Q{OLazkp^GTjsGcg#Jh>5?(itHEl>mBI|=rv~M2k z)yO;^5IB*FypB!k;X#2bF#4lvprbLM_iL$WO1p}5D*9R~tYpLU=<{VGYM`SrpsU5H zsFIDmb_H=|$yH=tp`%GWf?>V^z6+B$&Nc>oj`%HZ6%|6mv)-p&<69J;x^K}C zZSgoqy{Xtg5gHFf7B5|xKcHbtlzIFhKEz#_$Iu?nUf|}d*m3e29v(|Ra##7RCswPc zdLFxY??zM6d64Xvu%#~*O%BduC$gwH?C4_%H#9Qrn9GFzxtd0LCBe7-kb({d+hOXNY z+TQmnPMst@@0rKr9!6*D7!|xu@`-Dhtz-1Y{|TdRp8jWu%ky6K=w^z)iXZa%Cj|Ou zY}ev9c%y;QK2{G9m>5SA*vi>$T(O;UJ6M2sVmEO(K$xo7MXlSYYZtX`qmEtp6K7R* zQP}L}zmH8fQSs|cCw>%Q^M@vEZm_2Lb>;?9zvQ9udsZSJo8Puzqvk#zVDki)|4aSK zR|$U$h6Yu5NX?trRR=<28DddtAi?PcD(XVf+k_S*nz{LcSN9Y_Ut%Q%Yi)@B^TzhR Szk+XbEY9ce;Cnnysec1k24-OZ literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/DatabaseManager.class b/target/classes/com/college/management/DatabaseManager.class new file mode 100644 index 0000000000000000000000000000000000000000..b4f8c8ee8e0230ba03a00b8fc2d86e3807b3286c GIT binary patch literal 3274 zcmbVP-E$LF6#w0RkTy+i36w7p7ZlpGOCzA76w%ObF?5rbWK%vw<97G9Y}xF_-3?G) zd~(J&nPGf%oZ$r>9~7M_pbotG;D6+ccK2{-7)ke(2H#h!>jrYJ#FjGN_u{2l^X%Ww$qkl1!ow#$5M+i^f4SU+)CPTZJV#~ zbVYac6<*;^ke<;4eM$FuE+lzTIgEO;Hg!X-_) zq)DZG_CiSsb>&N{Dpz&izv+5reOH(W$)0OB1R_#u0I%Ud46i33;UGh@dBi4eh8Vxa zjatANMmBTrl|H<|@NI{KRXumvvN@eiz%FloKzX@l+vVn&WM0uNJ3N4F@~Z9y!nyVJ z?0iAVp34ijL>g04L77zwN`6{tIFkIBO7-C|!@UmB^dR7lsXGSWqT~IbW)hILL&zpY zz7EW%OHlKl2iX#OApeE=-&0M-i?;E=pxB}EzH&iO2hRy`75K!?VfCjy%1!I z;l~aj9XGHH5$4S!{J$$4SV7}D%7*Ju7#h)SxwGo}0XNG_Yt3`C<8AJ~5bgxS-41XA ztHS9;A`n{xZ0c)u2MWQmZ@Ue^8=SkW8#OyvYrDvS?$Ik%ZYCdH%A*WH2VndLIpZbV zXma21tg3hl>p(+A<)%Z)a+={z2g?=i`}ACI)wWN$!@at#4KWlRqGYI4r5Sqdv}{h1 zW|Y}XN!6t3Qi0M`D+^*#%j6aa)iK5r9Z*&2(We|MzZAOmO!c_IMg3@}y)^EP$rE~l z^lp9`H}JNh*qoa@a)RM%HeXZFH7QzrKH7-TB1jA zY*aTZmNP0#^~tg0C&WB6lgs8uQ~h`c@5XR4f%owKhPqx{qok`)Id^MR%SP(O({j@b zR7?XZsa&s6DVt(A6xDM{Gys-vTerC>`89){0AD=jYm;$&fHN_Cn7~KKL`gS8M})Sfp>F&VY-!M5}($){!D1d?4H*?qvTX4E#bAhL&^!mxTL?+o2lJ23MKObTH-1uYcB!-FPzQ@?#g^Lr(L($~TXmTW)j71ZYsx!;cWHOq( z6-|!UC%@wDp7;xgCLZG~!+q?{(JC3O`t$P9b)1u*juQ)Mo(ox2S|y`Ze{Mo1 zmWikL(Kk1~j{F01;Q%VQO-b=3zQWfu_TUb_qwyYoz)v&+zhRxu-W~d6kum`oCa&!y zxs!hTDfbTJ2qq~AC+Vrk&~FasDNsdxf~!~t$2GEHk(FW6ZISk2(s`Y4{2V;=QPvlZx-=qq^c{1kr_u(7YqiO?nimnFB1mgd4Dlf)?~~0m-Lemulz3)0P)zqh`Y_*Z=6sj)&F?=ye*t)fy&4KAmSNc_VM(BICO^oIFT-)?{qRh= zT43pg7kc`oK(W;xR8c{-jGB#Q*aFYoDCoG6@2j!u1TvIk6{t{mj-)&B_4H6Cr^86b zqwQlaP+AUs^*Yq?l(|Nda;Oe0Q6|5)imL)J#CeQ^rT&U?eI;YpxIub&YlP^UBBM8-_5A5CIc z9eJkz&BY}>G0Pz9J(cJ;QKHLe3+(*oAOiN=FjVn@FOx*E_xisp$35<=z&~eE^6$_p zm@TK8i%m6`NnL{Axk`DBp3iqB>ZbDp!r7gn?Cj03;yj+A;cQtmtba?f*D05X0jAiZ ze43%q#0`4H<0iA4`zCJDGQBi$n^rNk?$EM$f0vzRl{?hteaZQb@>d!KoEQ0+7ReHp z=0ybV=Ym%j!Jl%$4|2hcMeyfb@OCbEeG&X62VBI%bht;@Np%Yjb&a!E(84aNe*xDF B(Zc`$ literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/FacultyDashboard.class b/target/classes/com/college/management/FacultyDashboard.class new file mode 100644 index 0000000000000000000000000000000000000000..408f35c9a7786fead490523e80ebcf114dc26fdf GIT binary patch literal 17126 zcmcgz3w#vS)jwz0-I;6#2nisopsS!jNQk^4Q6NB&Xb8v#Frvbe9mv9FH|}nDXnkv~ zk5*A@rPkKgXYIrKAQ4hUrD_rDqn2v5)>qZ4ZSA}LYFoemxidTa$Oiaq`=P&`J9F=x zd+s^^^SX2M^uKmJLPYi2^?uT5fKDEhyyRml+YsIqu8D=?>uZ**-C(t)nS3Wi`rEBITk`XJpG#t15G)z_+U>Z?u;EH*PExx&9 zAQk-c(+Ci(hCA=Aw-OyzI=Qu`F`ly0Dc{_wnYWIjQS$1sCLKp( znf&Np8jeK3BGVD$GD|Obzi#{rgT{mZ>UCSH*M{3Ru1_Yq;*n~|HIb|hj-E1g>a1y2 zoe-X2QWaH08Xz1>Z;e43!)&s7;uyceH#eH$X#`C&X|k-u6n2u8tAM`Mws1x}A0H$KCcvXZuRG!ak1v;gK!GHX*bl?Hl4OhfWi z(VU1_IxQ~*b!J&1t23MorxQs(wa|c4I*nR&I^CpIbOzJW4yFEQ1m{3yeJln{k6V>v zPPWb0jXzzCx4$;rlWu$HMS7e6F0812Iqtv}fO_Kx~H_%3% zVkUJEbazCaLNb!iV6YTISrV^T3Wb*3r4^wotHL76;c4+RKz=;(0@tPc=@PnBr^`(Gtav1MMseu2Tesa*OEevWOvnob` z0^i(;ibLS)3z&Pp9bj^8^;)J01&(I&U1518rT=b8DO|{9D~?y(wBwGz*r(2afygseZ{0(#I8y}e?FvaB@Ox-)8OTu zKsiE1P@yuV)7P0sb#|;K+fi3a_t3X=`nE~mq3=Q}!coB(Fz-0(H2kAv0OBih$RW(z z&*6!`$J7{VXlj_>5=;v=s)7+K)s~EQ3L8~H1?klh@v{q;Em>^er-DnCEofL4oY$J$ zUmu!ZO83(PIz4F84(fJLsF-tSgx|KdSZ!Tt>(nkQxs_?04Z8e*Y5PD~`7$eo)Fou4 zvG9jzr%t;}>ZR}J(sqX+Ifx_vsniHA^HzGqq}>t)49K<-D@G)F48bkCCZV~mNrWP%TKS-8z#LeObqTs(g@Kb)oMwG+rZA-Ou?d-rmPzNr>i4w&^uV?g78*9 zy+t#1`W4f}qVKd>u~^O0WTMkbrnjyL$GR*yPsC~@9Up)~L@2yRGlk4=O!_T-WV@RA zcrAA{Q@~y^lI5;+6gC--#Uwq%k`4MjuqR%{pg#g`X|zJI1oD(WBVLEPRO)WfUnO{F zZvF>1ju$uRV_;{UouoG-sTSY&Pm}&7*!3&FAS+J!k%hC)n#lvCCnKWV#A4xT$~)VM z4HlAcQ=9r^GQ3qhmBC)7I>+R(`YPCchqXEdeyf5GdsRV)o7Ixz+mT4Jy&&5?Go$p~0na2)T3l*~bGB1$hwDDY+2q*A)61N8cxs6m8=& zlZSA*9rBbra19+g&6Q$7LMU%<0LFM&UPZPb(FJMvF8JsZ^$%k>VDjOT+DkgJIJ`w= z_6Cn+YAIe!q?6%z3b~^Mca^CZ&)>tb==!+$@!H`0hUS)rWviPS7PhDiX@bE=!Gt82 z4rcQ_osVWZs;D_2@K{TuZ5yqmpGWf;osTv7I3AmE0HT_jrbJsfCIev~@xWJOk3Vr2**2(=u*}!KjbCvY^^>Om_lOJVups`JtzH3Q|%g z=an;R0TTHO65TeZa?8rP?m#(WIhF7U2G0fO4U&HZRb`~}ynd4;M7f1gD;Du{Ju(ii z=LVA(O5QgR@`bPK=uEd@jKPbr?oeAIX&HPn3@;SkWGU+91=*RK&(!H0M&Z+sr(KSH8{%HR^c_gQLGn*XYIJgzHakSo*>}!8T6v~*M!NPd^U_+GAS!&XR?b?lq&kJ zZu_yJF|IY`zY8am;WBn|Bn~xo@?@F z_&nI4=mtp>_Usx37Z;d(AzuWY!CaNjyyF@h;VI#fFERO2zD$ycL?#=}XVVFULgsRl zKgUT`{hVo?X zCMGHIX2qmEly5QltBlgE6qcB>?C{)=IV=$Iecj}5@NKsEGNYjg6xrq2O}$p}ZAudVKV>+oH{$2aFV@O`PSR8&qe$wQp#A8VLr&4)?_rm7t=Y`gHj zeujU9^$Fmz*^^tA9W3D26y!R^7%})cEPCm(2ANdn7XX@m9D03cr=Opfc>X;9#N_>q zs!aCj#p-glX0kgvs62Fj8QAKFptC_LJEqGU{rnQYA|QEH_Ry8Hd5K>$`4{}UtrW>) zm_}x|NNoT)n|89}3_ZTdZ|VHD$-m@xu$|h^y!8?6o46H#s2A=-xIkzwP;cKY!D2EL zUA<@WuVhElFU0IE8F~DH$sfw&f%3Q|Q)@`iZ%qEJ^bC?7l~EzNk{yT2EDt%dEE4|4 zBbV^ZNBlzUXo|+I=B|#lFb=7Ku>YWvVaA)Hly2N-T zOypi@x)O&M#jULu@QAjp@Ih$h;Lsjs@6!vq?TyFmS16TUhvXN$>B2004hE)ep%;iJ zvzV-NfD6jk3%shMo70Q0%zgKSLseQqNn1A?tZGT9-Cl;u@v=FbXgJ-0HRSYWlSK4l z5phH*#a+Qh9tcZjcUZPBcMk=&!-Qc6N7qmis7 z!OodkCs4ek`_yyKhFgYOky;^nADvkvR_`RleZDt=nS+n|H`oC)X#{j+pRh$ZP)Yji z9RPfs%FLXfEi7<{2*?~W1Hy}Y9I3}K&aX^emEpFT*Q*K~xn1!|4sLl;;wba-r?;d5 z9{US;e@?)yGQqNpmqgKaMN;;{i9iREgbOBxGInJSz}S2R;eN%gSW~atsR*)od~~_hQ`y;>{Ma_w|eJ5_5c z(@w^NGv&cqrnXdT!rdCV3!B;!b=M|$5mRecckASCy{Ro$cTu_9U}~qRI~;^Dv<_2i z)J`_E1pGS(tAp%kkUU$ulBTvuI|+9<8DeN%rnXSs;R~~&Z85d^+5$s62Z>`AZ$YUC ztw=DO3bLVn20L0RL2wTn#cV(k(nMB)JKXb_EWN^HbF zy0Sq?CyY-V^2rGzl&>M~-7_`{@?NrqX`g~fjcH0GHgRTvKW((z}|GpR; zZ@wzWsb;>2<~%A~5{jHge3DPjkA?Bo6PO?57CcTdd6?_q^LH(g0V!83>d>`oP%QUB zM=?d~+BRp?KTm3TLlG}+RM62l9--lA#sK`{03ceLoZ3@Y9Mi*f1dh6R`6GNc{2lIM z==b0{w6ce|a>5SMD@X32ftA%eXvlr?7XKctoL z^B?(7xC13MFZPnrl9`2@p>jkJJTdj;XO2R zaaAuJh4#@sG`gF{RF#kGrpl_JG_jkG@1-fN<uy^%NNPjs4PEOt|gV_O>*^DbyIU$$-}g)bwG8f)zeEYU}8n6)f@1H zT73a;s8tX6LajzX54D#00tSBdKnZ@0fIqa8R%*0z0%)9BIiZ`v0Z-+GU1Sk;Q#9a} zcEWD^q}^$^b!ne%w+(40?RJT@Q+C^5xr@@O*-M*SCk&;nL+RWeIO{|EmQU}>fg`Cn*x!OPqH30gjI z^r}W^>EP={jnOi|-9Al2s{}mm(FUO92L~0JNAm(=nr!koAbuOP1fZ*I2wl||LJBpX zw^4HqP}57>pziAdn}DaAZcx8B2_(EOB7lRenr{|i4^XyHiL<9fbHKt}3Q#?brg;$M z0*I{v!d?hrFQVntNT<`uN=Q>})?E8oYV4w?37B~nCUDm$`vUrtR4Fh2m~p--SPP4J zl7_nv%-WKG5h&@VmjcG_fKSHycG9c%SeTfM%{(yW<$xh$_1yulj0K}Vx5vUJWo+hw z366aMUB>!$-$i~|R5!hTU>)jo3eLG*hchhOaTe${T<6lgfc}1Z0v|Y@!*vG0{{gPQ zr@zt1xK75&205AHQMz9SFGjQ&x^IT=mq7PRq5EafQV4IhfZB4*umZm;F;6RI3W0tr zW(a|9D=3Fpr&b<9t9Tqvf>zU+3L|F#kI}Scupbh=;1i6FRGo%VkM7moAf#mAtZu%P`0Y&|o$KZ1Qn>cz-rht1RJH6MHkj`{)o z2v%H&<@><;MZNS^YxysG=v|2v@3oe{-$NgE)34Rz-{Em{wR-%AoX3B{<62JujvnLx zlGE`w=>T|C$KUM^`1F714`Y%6Rfr9U4{lVjT|%KZSOaSe(_yq04z~?%H$t-z4NihH zTZW^fYp9(rq^Q#LYpe_Z2MT(0KW$<25 zxI-Dd2lVzUgC9U|!c4{B2Z(xHxP0iq#Y69DM`=MQR073tC>5g|K-hgpqfgBI8Zq;c zrq6@NOPaRl!Ge^Qfxtq0>%944@T!WKIO-VCzGCOb?H%g%h#U2QLCtH&0N% z6MK1*%3pa(txwib!Ber4THS6>m$m`u@=RUj7?P4y@GMLK7b8ihS5i&MG;JRf&_Oof z*#)ns(n`a*ovm&q&iS&r3NlsLY4L<*Aq~MwKZl@o1%lR9$OW%P-uDHX4s6V!Ymv5W zLmapsA?pT6=!-z}jc^e+!4kG33fzoip zYh$!yp|3dzXp+`=B`j*kX=C98+u-oVK`%Py+o+94%W#t(dweCvYx2R)(b;y~i_Z2Q zL}znybe5auiJm;&$eFTw^7e9lYY)#?iO`?Ac|qnL*-!}lJ{;ntezY-?RC|(*HzOauA1&})HH=|RLb#S zhVzwjyqKp;o1j%eO%bxRYP9f23v{YBF;7kQn^OO2a+D9hQc>=Mn#4pKB^p<7vm2!= zcxg85R`4=6PFHYCHtZq+cf)RBusvJ_&s`8xFU0hHi0NUZUXLK*-mR8xm!ggCvKt+5 zSxU3D8Wmi}(6QR_5?mG5Y@Z>cD&Z;YQIp^&>`{|3$_|=Sur!=Tv=@j(UB`b!54b_I zf|u`PRD_aW?BrEQtg}ILB7)``1Wl}dC$B|1jaG{akrlkIg4=s|Lncr@n+bl5gGiD} zyTQ+X@Sg~NUKEI@A|u(4yd;i*CBg1Ix)RrGfu!v!*xdodWisCBG!RRD92(t&kw3uO zPav8+iD35>=aO#L-%Ua3xb^ViL&gz8BUOEC$n#m<1HieH1Q0kT zVgo`OjnE^G>9Gmj9Pj4jqr66t@FeL~Pm$+7r{b#MEjCC{bfLGK&)Lc651@e0i?rn8 zo%~s8`>LJBPQH?9Wn~3_zIqp51AoHXGR0E{9d7ZILC3#cJlzM=mED03$R$nZ()qX^ z0o4jDZUrLm!F4#?%uW{`b}sZRO4aAk^8!Zy7!+Q_-oZ~$#_Xp?`YB-Y5@@~*sxN@n z%b@lGXuM31($5r3mH`lBsZD{y2MRaaB@b-eEqU-a8ky~-#~g4#+}ccS7OYiTwQ73_ z=PI>2?S!0?NBR_CR4#=5ihrQg;WgORSV5VThezvtBOXd(gma5h&q&c@*D>4l{O(-H zWMEZ{5Y{e)q%cx-jN?g81Y~f&$pKC^U@XAdR|uRTfW#NSO#W(Iw&z0V%l$#f#m__h zm7RR62UyBNsA?DA{{I3YzDpo93H8oq2;h9W3~9%HY&_kdYVCUvtscaE5USsU19Nsw zZA0kifY58`c^#wQ0EIWPkMb5OsJBr${}M6p9ngFiR9^?JcR}rS(0CWV<~q6)W1)KyAOn9JbX?TLPzz15b$##2<3Gj5JEX4 z^B}}`_#6n$1$b}-)5)Aa1K%UjHrUH|x8Be9^ziqZs{yA6s=1pVtOkyH0HR$hvzvu> z5d8q*?n9vb*VxVd4Ym${i|xXXlq~Ha8g!)=BEqi+n%$gGIzc*cfK-}qRM<_Y8F`&J`EjUmS>C1 za?_`n1>dHeS>^+Q!olEPejeHAk7b9qn_nzk$_zD$UF!{Ymoiwf&0rg!z8r$5LNp?{ ziV3~^QY**}?BSnv^Uu3U?PJ=7l&z2Him06kRk%beoO}@^6nPEg@tw^fe-gMA@+A{M zddNfkMj@xua)_3=L`z(vB`#5X%5#V=aEM~Zyqn)Gq&PK)qR*x1b1C{QspnXBRR=bV@{|jO;!R!D4 literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/PrivateChatUI$1.class b/target/classes/com/college/management/PrivateChatUI$1.class new file mode 100644 index 0000000000000000000000000000000000000000..e189b69e4d952ae88655b283d61897734c6b81ba GIT binary patch literal 1683 zcma)6U2oG!6g|^?xJ?ZWp_BzuC=kF&08H1sY>DnukZ{vW4gEpp+XE^VvHcmR3x;W@+$S|b zGoM;n$|stBOLE-}skFsj*GC$8VPBd>BFZ&YH}u4k-)q!B0hf)psh9YZm3;Saq5-%(w<30w-&GX6wFdRawu0rK~i(vc2% zCnk-?u|Qp6a}Fy{WwDsU9o)5W&p7oy$@zH=eYvf+gd1BtHt!Pmvwdbuw$@Z#!DM+`}S-It$y82WER0#WBd&?G}p?e>b4BCH2IibQ1L zA;Y;nH4T$$;Ss~h{Zq-hab1|BFVh&^a3Dn^gVVG-L#tb0y?Cbb8SE1U#&DMYvlIqS zp+x^PaRScaJnhWO7vRwIvRPBw$2`*JUQ@^*ejoWG6WQFZw@*hlB zs=GKuY$a+ zKQLcw3K=Qa5-GV#^(zX+U7Q?Vq1^+^B?P9f3F=jzW*S+zv>3w`%=hN2_?_l7f#0C+ enJ3rqC(Yvoa+^jCb=nmuZqsaj53qz~9QzJ5T&r0C literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/PrivateChatUI.class b/target/classes/com/college/management/PrivateChatUI.class new file mode 100644 index 0000000000000000000000000000000000000000..d7f5e42ad93886f166f46566ec9a00120a1d23e7 GIT binary patch literal 6214 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 Ibt!883#c2u(f|Me literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/ReportGenerator.class b/target/classes/com/college/management/ReportGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..7c51a91f3f070e0588558a0f9b30ab85efc1171a GIT binary patch literal 4142 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 C_l;8k literal 0 HcmV?d00001 diff --git a/target/classes/com/college/management/User.class b/target/classes/com/college/management/User.class new file mode 100644 index 0000000000000000000000000000000000000000..8538855643ed59b3ccf07d05a5e117c56bad6e5b GIT binary patch literal 875 zcma)3+iDY06kTUBlWCGkn_H_%ti3}rsPp1eD}o4xK&W6f?6E#^bkgU3P#+Ww zf)9RxA64A@Bq*eV_;U7j?Y;IozaD=41n>?=RTwDQFdbMZ3pB3ft@I+91m1_~weoX; z@|!RT^S1(}!EjQ+8Y(ub4r*`&`hFUFei}t8P+lw(8K_t#x%c@-WdcTcAs|MKS$D93 zhQQj4Dv6AhKx_PW*Lj|WNpQlQEeCDxG_y2PoY-`*rJ(MX_15lgT* zv@;k!<|bfM(?_~-(SG{pxaxU2%Y1bja;d^&Ua?TvBP|U2G?QKupFD##)s_^~mV_c} zfe7IVy-z8+qdtpl&;1VJ_UEwO7jx9zmvc1Tt~p2NtHyS@2W5IIw4+LI4ePY0jXJvI z^{DcCF$sM