- tweak: code management

This commit is contained in:
2026-04-06 12:20:43 +03:00
parent 590975b1f0
commit f883fa98a1
19 changed files with 71 additions and 74 deletions

View File

@@ -0,0 +1,160 @@
#include "routeswidget.h"
#include "../../services/database.h"
#include <QTableWidget>
#include <QHeaderView>
#include <QMessageBox>
#include <QInputDialog>
RoutesWidget::RoutesWidget(QWidget* parent) : QWidget(parent) {
QVBoxLayout* mainLayout = new QVBoxLayout(this);
QLabel* title = new QLabel("Управление рейсами", this);
title->setStyleSheet("font-size: 20px; font-weight: bold;");
mainLayout->addWidget(title);
m_table = new QTableWidget(this);
m_table->setColumnCount(6);
m_table->setHorizontalHeaderLabels({"ID", "Маршрут", "Время отправления", "Цена", "Всего мест", "Свободно"});
m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
m_table->setSelectionMode(QAbstractItemView::SingleSelection);
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
mainLayout->addWidget(m_table);
QHBoxLayout* btnLayout = new QHBoxLayout();
m_addBtn = new QPushButton("Добавить", this);
m_editBtn = new QPushButton("Редактировать", this);
m_deleteBtn = new QPushButton("Удалить", this);
btnLayout->addWidget(m_addBtn);
btnLayout->addWidget(m_editBtn);
btnLayout->addWidget(m_deleteBtn);
btnLayout->addStretch();
mainLayout->addLayout(btnLayout);
connect(m_addBtn, &QPushButton::clicked, this, &RoutesWidget::onAddClicked);
connect(m_editBtn, &QPushButton::clicked, this, &RoutesWidget::onEditClicked);
connect(m_deleteBtn, &QPushButton::clicked, this, &RoutesWidget::onDeleteClicked);
loadRoutes();
}
void RoutesWidget::loadRoutes() {
QVector<Route> routes = Database::instance().getAllRoutes();
m_table->setRowCount(routes.size());
for (int i = 0; i < routes.size(); ++i) {
const Route& route = routes[i];
m_table->setItem(i, 0, new QTableWidgetItem(QString::number(route.id)));
m_table->setItem(i, 1, new QTableWidgetItem(route.routeName));
m_table->setItem(i, 2, new QTableWidgetItem(route.departureTime));
m_table->setItem(i, 3, new QTableWidgetItem(QString::number(route.price, 'f', 2)));
m_table->setItem(i, 4, new QTableWidgetItem(QString::number(route.totalSeats)));
m_table->setItem(i, 5, new QTableWidgetItem(QString::number(route.availableSeats)));
}
}
void RoutesWidget::onAddClicked() {
RouteDialog dialog;
if (dialog.exec() == QDialog::Accepted) {
if (Database::instance().addRoute(
dialog.getRouteName(),
dialog.getDepartureTime(),
dialog.getPrice(),
dialog.getTotalSeats())) {
loadRoutes();
QMessageBox::information(this, "Успех", "Рейс добавлен!");
}
}
}
void RoutesWidget::onEditClicked() {
int row = m_table->currentRow();
if (row < 0) {
QMessageBox::warning(this, "Ошибка", "Выберите рейс для редактирования!");
return;
}
int id = m_table->item(row, 0)->text().toInt();
Route route = Database::instance().getRoute(id);
RouteDialog dialog(&route, this);
if (dialog.exec() == QDialog::Accepted) {
route.routeName = dialog.getRouteName();
route.departureTime = dialog.getDepartureTime();
route.price = dialog.getPrice();
if (route.totalSeats != dialog.getTotalSeats()) {
int diff = dialog.getTotalSeats() - route.totalSeats;
route.totalSeats = dialog.getTotalSeats();
route.availableSeats += diff;
if (route.availableSeats < 0) route.availableSeats = 0;
}
if (Database::instance().updateRoute(route)) {
loadRoutes();
QMessageBox::information(this, "Успех", "Рейс обновлен!");
}
}
}
void RoutesWidget::onDeleteClicked() {
int row = m_table->currentRow();
if (row < 0) {
QMessageBox::warning(this, "Ошибка", "Выберите рейс для удаления!");
return;
}
int id = m_table->item(row, 0)->text().toInt();
QMessageBox::StandardButton reply = QMessageBox::question(
this, "Подтверждение", "Удалить выбранный рейс?",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
if (Database::instance().deleteRoute(id)) {
loadRoutes();
QMessageBox::information(this, "Успех", "Рейс удален!");
}
}
}
RouteDialog::RouteDialog(Route* route, QWidget* parent)
: QDialog(parent)
{
setWindowTitle(route ? "Редактирование рейса" : "Добавление рейса");
setFixedSize(400, 250);
QFormLayout* form = new QFormLayout(this);
m_nameEdit = new QLineEdit(this);
m_dateTimeEdit = new QDateTimeEdit(this);
m_dateTimeEdit->setCalendarPopup(true);
m_dateTimeEdit->setDateTime(QDateTime::currentDateTime().addDays(1));
m_priceEdit = new QLineEdit(this);
m_priceEdit->setPlaceholderText("0.00");
m_seatsEdit = new QLineEdit(this);
m_seatsEdit->setPlaceholderText("100");
if (route) {
m_nameEdit->setText(route->routeName);
m_dateTimeEdit->setDateTime(QDateTime::fromString(route->departureTime, "yyyy-MM-dd HH:mm:ss"));
m_priceEdit->setText(QString::number(route->price, 'f', 2));
m_seatsEdit->setText(QString::number(route->totalSeats));
}
form->addRow("Маршрут:", m_nameEdit);
form->addRow("Время отправления:", m_dateTimeEdit);
form->addRow("Цена билета:", m_priceEdit);
form->addRow("Всего мест:", m_seatsEdit);
QHBoxLayout* btnLayout = new QHBoxLayout();
QPushButton* okBtn = new QPushButton("ОК", this);
QPushButton* cancelBtn = new QPushButton("Отмена", this);
btnLayout->addStretch();
btnLayout->addWidget(okBtn);
btnLayout->addWidget(cancelBtn);
form->addRow(btnLayout);
connect(okBtn, &QPushButton::clicked, this, &QDialog::accept);
connect(cancelBtn, &QPushButton::clicked, this, &QDialog::reject);
}