diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..4e7f670
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..1ec79ca
--- /dev/null
+++ b/.project
@@ -0,0 +1,34 @@
+
+
+ management-system
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
+
+ 1770804693954
+
+ 30
+
+ org.eclipse.core.resources.regexFilterMatcher
+ node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
+
+
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..abdea9a
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs
new file mode 100644
index 0000000..d4313d4
--- /dev/null
+++ b/.settings/org.eclipse.jdt.apt.core.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.apt.aptEnabled=false
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..e96c048
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.processAnnotations=disabled
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/college.db b/college.db
index 29d0dc7..a88525e 100644
Binary files a/college.db and b/college.db differ
diff --git a/src/main/java/com/college/management/AdminDashboard.java b/src/main/java/com/college/management/AdminDashboard.java
index e894116..29197dd 100644
--- a/src/main/java/com/college/management/AdminDashboard.java
+++ b/src/main/java/com/college/management/AdminDashboard.java
@@ -118,29 +118,63 @@ public class AdminDashboard {
root.setCenter(content);
}
+ public static void loadEventsIntoList(ListView 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(); }
+ }
+
private void showEventManagement(BorderPane root) {
VBox content = new VBox(15);
content.setPadding(new Insets(20));
- Label title = new Label("Manage Events");
+ Label title = new Label("College 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");
+ ListView listView = new ListView<>();
+ loadEventsIntoList(listView);
- 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(); }
+ Button btnShowForm = new Button("Create New Event");
+ btnShowForm.setStyle("-fx-background-color: #128c7e; -fx-text-fill: white; -fx-font-weight: bold;");
+
+ btnShowForm.setOnAction(e -> {
+ // Creation Form
+ VBox form = new VBox(10);
+ form.setPadding(new Insets(10));
+ form.setStyle("-fx-border-color: #dcdcdc; -fx-border-radius: 5; -fx-padding: 15;");
+
+ TextField txtTitle = new TextField(); txtTitle.setPromptText("Event Title");
+ DatePicker datePicker = new DatePicker();
+ TextArea txtDesc = new TextArea(); txtDesc.setPromptText("Event Description");
+
+ HBox actions = new HBox(10);
+ Button btnSave = new Button("Post Event");
+ Button btnCancel = new Button("Cancel");
+ actions.getChildren().addAll(btnSave, btnCancel);
+
+ btnSave.setOnAction(ev -> {
+ if (txtTitle.getText().isEmpty() || datePicker.getValue() == null) return;
+ 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();
+ showEventManagement(root); // Refresh view
+ } catch (SQLException ex) { ex.printStackTrace(); }
+ });
+
+ btnCancel.setOnAction(ev -> content.getChildren().remove(form));
+
+ form.getChildren().addAll(new Label("New Event Details"), txtTitle, datePicker, txtDesc, actions);
+ content.getChildren().add(form);
});
- content.getChildren().addAll(title, txtTitle, datePicker, txtDesc, btnAdd);
+ content.getChildren().addAll(title, listView, btnShowForm);
root.setCenter(content);
}
@@ -226,6 +260,42 @@ public class AdminDashboard {
root.setCenter(content);
}
+ public static void loadNoticesIntoList(ListView listView) {
+ try (Connection conn = DatabaseManager.getConnection();
+ Statement stmt = conn.createStatement();
+ ResultSet rs = stmt.executeQuery(
+ "SELECT n.title, n.content, n.date, u.role " +
+ "FROM notices n " +
+ "LEFT JOIN users u ON n.posted_by = u.id " +
+ "ORDER BY n.id DESC")) {
+ while (rs.next()) {
+ String role = rs.getString("role");
+ String prefix = "ADMIN".equals(role) ? "[PRIORITY] " : "";
+ String notice = prefix + rs.getString("date") + " - " + rs.getString("title") + "\n" + rs.getString("content");
+ listView.getItems().add(notice);
+ }
+ } catch (SQLException e) { e.printStackTrace(); }
+
+ // Custom cell factory for highlighting
+ listView.setCellFactory(lv -> new ListCell() {
+ @Override
+ protected void updateItem(String item, boolean empty) {
+ super.updateItem(item, empty);
+ if (empty || item == null) {
+ setText(null);
+ setStyle("");
+ } else {
+ setText(item);
+ if (item.startsWith("[PRIORITY]")) {
+ setStyle("-fx-font-weight: bold; -fx-text-fill: #d32f2f;"); // Red bold for priority
+ } else {
+ setStyle("");
+ }
+ }
+ }
+ });
+ }
+
private void showNoticeManagement(BorderPane root) {
VBox content = new VBox(15);
content.setPadding(new Insets(20));
@@ -242,10 +312,11 @@ public class AdminDashboard {
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 (?, ?, ?)")) {
+ PreparedStatement pstmt = conn.prepareStatement("INSERT INTO notices (title, content, date, posted_by) VALUES (?, ?, ?, ?)")) {
pstmt.setString(1, txtTitle.getText());
pstmt.setString(2, txtContent.getText());
pstmt.setString(3, java.time.LocalDate.now().toString());
+ pstmt.setInt(4, userId);
pstmt.executeUpdate();
txtTitle.clear();
txtContent.clear();
diff --git a/src/main/java/com/college/management/FacultyDashboard.java b/src/main/java/com/college/management/FacultyDashboard.java
index 6f8bc6e..da5cb0a 100644
--- a/src/main/java/com/college/management/FacultyDashboard.java
+++ b/src/main/java/com/college/management/FacultyDashboard.java
@@ -37,12 +37,13 @@ public class FacultyDashboard {
Button btnMarks = createSidebarButton("Marks Entry");
Button btnTimetable = createSidebarButton("My Timetable");
Button btnEvents = createSidebarButton("Events");
+ Button btnNotices = createSidebarButton("Notices");
Button btnChat = createSidebarButton("Global Chat");
Button btnPrivateChat = createSidebarButton("Private Chat");
Button btnSettings = createSidebarButton("Settings");
Button btnLogout = createSidebarButton("Logout");
- sidebar.getChildren().addAll(brand, new Separator(), btnAttendance, btnMarks, btnTimetable, btnEvents, btnChat, btnPrivateChat, btnSettings, btnLogout);
+ sidebar.getChildren().addAll(brand, new Separator(), btnAttendance, btnMarks, btnTimetable, btnEvents, btnNotices, btnChat, btnPrivateChat, btnSettings, btnLogout);
root.setLeft(sidebar);
applyTheme(root);
@@ -52,6 +53,7 @@ public class FacultyDashboard {
btnMarks.setOnAction(e -> showMarksEntry(root));
btnTimetable.setOnAction(e -> showTimetable(root));
btnEvents.setOnAction(e -> showEvents(root));
+ btnNotices.setOnAction(e -> showNotices(root));
btnChat.setOnAction(e -> AdminDashboard.showChat(root, username, userId));
btnPrivateChat.setOnAction(e -> root.setCenter(new PrivateChatUI(userId).getView()));
btnSettings.setOnAction(e -> root.setCenter(new SettingsUI(userId, () -> applyTheme(root)).getView()));
@@ -62,6 +64,68 @@ public class FacultyDashboard {
stage.setScene(scene);
}
+ private void showEvents(BorderPane root) {
+ VBox content = new VBox(15);
+ content.setPadding(new Insets(20));
+ Label title = new Label("College Events");
+ title.setStyle("-fx-font-size: 24px; -fx-font-weight: bold;");
+
+ ListView listView = new ListView<>();
+ AdminDashboard.loadEventsIntoList(listView);
+
+ Button btnShowForm = new Button("Create New Event");
+ btnShowForm.setStyle("-fx-background-color: #128c7e; -fx-text-fill: white; -fx-font-weight: bold;");
+
+ btnShowForm.setOnAction(e -> {
+ VBox form = new VBox(10);
+ form.setPadding(new Insets(15));
+ form.setStyle("-fx-border-color: #dcdcdc; -fx-border-radius: 5;");
+
+ TextField txtTitle = new TextField(); txtTitle.setPromptText("Event Title");
+ DatePicker datePicker = new DatePicker();
+ TextArea txtDesc = new TextArea(); txtDesc.setPromptText("Event Description");
+
+ HBox actions = new HBox(10);
+ Button btnSave = new Button("Post Event");
+ Button btnCancel = new Button("Cancel");
+ actions.getChildren().addAll(btnSave, btnCancel);
+
+ btnSave.setOnAction(ev -> {
+ if (txtTitle.getText().isEmpty() || datePicker.getValue() == null) return;
+ 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();
+ showEvents(root);
+ } catch (SQLException ex) { ex.printStackTrace(); }
+ });
+
+ btnCancel.setOnAction(ev -> content.getChildren().remove(form));
+
+ form.getChildren().addAll(new Label("New Event Details"), txtTitle, datePicker, txtDesc, actions);
+ content.getChildren().add(form);
+ });
+
+ content.getChildren().addAll(title, listView, btnShowForm);
+ 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<>();
+ AdminDashboard.loadNoticesIntoList(listView);
+
+ content.getChildren().addAll(title, listView);
+ root.setCenter(content);
+ }
+
private void applyTheme(BorderPane root) {
root.getStylesheets().clear();
root.getStylesheets().add(getClass().getResource("/com/college/management/css/chat.css").toExternalForm());
@@ -86,25 +150,6 @@ public class FacultyDashboard {
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"));
diff --git a/src/main/java/com/college/management/StudentDashboard.java b/src/main/java/com/college/management/StudentDashboard.java
index 320c1d9..5f1b50e 100644
--- a/src/main/java/com/college/management/StudentDashboard.java
+++ b/src/main/java/com/college/management/StudentDashboard.java
@@ -120,13 +120,7 @@ public class StudentDashboard {
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(); }
+ AdminDashboard.loadEventsIntoList(listView);
content.getChildren().addAll(title, listView);
root.setCenter(content);
@@ -199,13 +193,7 @@ public class StudentDashboard {
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(); }
+ AdminDashboard.loadNoticesIntoList(listView);
content.getChildren().addAll(title, listView);
root.setCenter(content);
diff --git a/target/classes/com/college/management/AdminDashboard$1.class b/target/classes/com/college/management/AdminDashboard$1.class
new file mode 100644
index 0000000..1814ac3
Binary files /dev/null and b/target/classes/com/college/management/AdminDashboard$1.class differ
diff --git a/target/classes/com/college/management/AdminDashboard$TableValue.class b/target/classes/com/college/management/AdminDashboard$TableValue.class
index d3cfec1..273f28e 100644
Binary files a/target/classes/com/college/management/AdminDashboard$TableValue.class and b/target/classes/com/college/management/AdminDashboard$TableValue.class differ
diff --git a/target/classes/com/college/management/AdminDashboard.class b/target/classes/com/college/management/AdminDashboard.class
index b494cec..3ab231b 100644
Binary files a/target/classes/com/college/management/AdminDashboard.class and b/target/classes/com/college/management/AdminDashboard.class differ
diff --git a/target/classes/com/college/management/FacultyDashboard$TimetableEntry.class b/target/classes/com/college/management/FacultyDashboard$TimetableEntry.class
index 6a92c3b..f59c32f 100644
Binary files a/target/classes/com/college/management/FacultyDashboard$TimetableEntry.class and b/target/classes/com/college/management/FacultyDashboard$TimetableEntry.class differ
diff --git a/target/classes/com/college/management/FacultyDashboard.class b/target/classes/com/college/management/FacultyDashboard.class
index 3345808..d4886d7 100644
Binary files a/target/classes/com/college/management/FacultyDashboard.class and b/target/classes/com/college/management/FacultyDashboard.class differ
diff --git a/target/classes/com/college/management/StudentDashboard$MarkRecord.class b/target/classes/com/college/management/StudentDashboard$MarkRecord.class
index ff64d50..868e9aa 100644
Binary files a/target/classes/com/college/management/StudentDashboard$MarkRecord.class and b/target/classes/com/college/management/StudentDashboard$MarkRecord.class differ
diff --git a/target/classes/com/college/management/StudentDashboard.class b/target/classes/com/college/management/StudentDashboard.class
index c370ef9..24c37b7 100644
Binary files a/target/classes/com/college/management/StudentDashboard.class and b/target/classes/com/college/management/StudentDashboard.class differ
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
index f426395..8737c83 100644
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -10,6 +10,7 @@ com/college/management/App.class
com/college/management/PrivateChatUI$1.class
com/college/management/ChatService.class
com/college/management/User.class
+com/college/management/AdminDashboard$1.class
com/college/management/FacultyDashboard$TimetableEntry.class
com/college/management/StudentDashboard$MarkRecord.class
com/college/management/ChatMessage.class