/
Maksim_Shchelochok
/
Course_Work
Обзор
Документация
Войти
/
Maksim_Shchelochok
/
Course_Work
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/controller/TeachingController.java
154 строки
6 KB
Maksim
Создан CRUD-контроллер для Teaching
23 июн 2026, 16:04
23 июн 2026, 16:04
8b614ed
Код
Авторство
О чём код?
package controller; import javafx.geometry.Insets; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.scene.layout.Region; import model.Group; import model.Teacher; import model.Teaching; import model.TeachingManager; import view.EntityTableView; import java.util.List; import java.util.Optional; public class TeachingController { private final TeachingManager manager = new TeachingManager(); private final EntityTableView view; public TeachingController(boolean canEdit) { this.view = new EntityTableView( new String[]{"ID", "Преподаватель", "Группа (ID)", "Часов"}, canEdit); view.getRefreshButton().setOnAction(e -> refresh()); if (canEdit) { view.getAddButton().setOnAction(e -> add()); view.getEditButton().setOnAction(e -> edit()); view.getDeleteButton().setOnAction(e -> delete()); } refresh(); } public Region getView() { return view; } private void refresh() { view.setData(manager.getAll()); } private void add() { showDialog("Добавить преподавание", -1, -1, 0, t -> { String error = manager.create(t.getTeacherId(), t.getGroupId(), t.getHoursCount()); if (error != null) error(error); refresh(); }); } private void edit() { Object[] row = view.getSelectedRow(); if (row == null) { info("Выберите строку для изменения."); return; } int id = Integer.parseInt(row[0].toString()); int curTeacherId = -1, curGroupId = -1, curHours = 0; for (Teaching t : manager.getAll()) { if (t.getTeachingId() == id) { curTeacherId = t.getTeacherId(); curGroupId = t.getGroupId(); curHours = t.getHoursCount(); break; } } showDialog("Изменить преподавание", curTeacherId, curGroupId, curHours, t -> { String error = manager.update(id, t.getTeacherId(), t.getGroupId(), t.getHoursCount()); if (error != null) error(error); refresh(); }); } private void delete() { Object[] row = view.getSelectedRow(); if (row == null) { info("Выберите строку для удаления."); return; } int id = Integer.parseInt(row[0].toString()); String error = manager.delete(id); if (error != null) error(error); refresh(); } private void showDialog(String title, int existingTeacherId, int existingGroupId, int existingHours, java.util.function.Consumer<Teaching> onOk) { Dialog<Teaching> dialog = new Dialog<>(); dialog.setTitle(title); dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); // Список преподавателей ComboBox<Teacher> teacherBox = new ComboBox<>(); List<Teacher> teachers = manager.getAllTeachers(); teacherBox.getItems().addAll(teachers); teacherBox.setConverter(new javafx.util.StringConverter<Teacher>() { @Override public String toString(Teacher t) { return t == null ? "" : t.getLastName() + " " + t.getFirstName(); } @Override public Teacher fromString(String s) { return null; } }); if (existingTeacherId != -1) { for (Teacher t : teachers) { if (t.getId() == existingTeacherId) { teacherBox.setValue(t); break; } } } // Список групп ComboBox<Group> groupBox = new ComboBox<>(); List<Group> groups = manager.getAllGroups(); groupBox.getItems().addAll(groups); groupBox.setConverter(new javafx.util.StringConverter<Group>() { @Override public String toString(Group g) { return g == null ? "" : "Группа №" + g.getGroupId() + " (" + g.getSpecialityName() + ")"; } @Override public Group fromString(String s) { return null; } }); if (existingGroupId != -1) { for (Group g : groups) { if (g.getGroupId() == existingGroupId) { groupBox.setValue(g); break; } } } TextField hoursField = new TextField(String.valueOf(existingHours)); GridPane grid = new GridPane(); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(20)); grid.add(new Label("Преподаватель:"), 0, 0); grid.add(teacherBox, 1, 0); grid.add(new Label("Группа:"), 0, 1); grid.add(groupBox, 1, 1); grid.add(new Label("Часов:"), 0, 2); grid.add(hoursField, 1, 2); dialog.getDialogPane().setContent(grid); dialog.setResultConverter(button -> { if (button == ButtonType.OK) { Teacher t = teacherBox.getValue(); Group g = groupBox.getValue(); if (t == null || g == null) return null; int hours; try { hours = Integer.parseInt(hoursField.getText().trim()); } catch (Exception ex) { hours = 0; } return new Teaching(0, t.getId(), t.getLastName() + " " + t.getFirstName(), g.getGroupId(), hours); } return null; }); Optional<Teaching> result = dialog.showAndWait(); if (result.isPresent()) { onOk.accept(result.get()); } } private void info(String text) {alert(Alert.AlertType.INFORMATION, text);} private void error(String text) {alert(Alert.AlertType.ERROR, text);} private void alert(Alert.AlertType type, String text) { Alert a = new Alert(type); a.setHeaderText(null); a.setContentText(text); a.showAndWait(); } }