#include "loginwindow.h" #include "database.h" #include LoginWindow::LoginWindow(QWidget* parent) : QDialog(parent), isRegistering(false) { setWindowTitle("Авторизация - Система вокзала"); setFixedSize(400, 280); setModal(true); QVBoxLayout* mainLayout = new QVBoxLayout(this); mainLayout->setSpacing(15); mainLayout->setContentsMargins(30, 30, 30, 30); QLabel* titleLabel = new QLabel("Система учета вокзала", this); titleLabel->setAlignment(Qt::AlignCenter); titleLabel->setStyleSheet("font-size: 18px; font-weight: bold;"); mainLayout->addWidget(titleLabel); QLabel* userLabel = new QLabel("Логин:", this); m_usernameEdit = new QLineEdit(this); m_usernameEdit->setPlaceholderText("Введите логин"); mainLayout->addWidget(userLabel); mainLayout->addWidget(m_usernameEdit); QLabel* passLabel = new QLabel("Пароль:", this); m_passwordEdit = new QLineEdit(this); m_passwordEdit->setPlaceholderText("Введите пароль"); m_passwordEdit->setEchoMode(QLineEdit::Password); mainLayout->addWidget(passLabel); mainLayout->addWidget(m_passwordEdit); m_messageLabel = new QLabel(this); m_messageLabel->setAlignment(Qt::AlignCenter); m_messageLabel->setStyleSheet("color: red;"); mainLayout->addWidget(m_messageLabel); QHBoxLayout* btnLayout = new QHBoxLayout(); m_loginBtn = new QPushButton("Войти", this); m_registerBtn = new QPushButton("Регистрация", this); btnLayout->addWidget(m_loginBtn); btnLayout->addWidget(m_registerBtn); mainLayout->addLayout(btnLayout); connect(m_loginBtn, &QPushButton::clicked, this, &LoginWindow::onLoginClicked); connect(m_registerBtn, &QPushButton::clicked, this, &LoginWindow::onRegisterClicked); } void LoginWindow::onLoginClicked() { QString username = m_usernameEdit->text().trimmed(); QString password = m_passwordEdit->text(); if (username.isEmpty() || password.isEmpty()) { m_messageLabel->setText("Заполните все поля!"); return; } if (Database::instance().authenticate(username, password)) { User user = Database::instance().getUser(username); m_username = user.username; m_role = user.role; accept(); } else { m_messageLabel->setText("Неверный логин или пароль!"); m_passwordEdit->clear(); } } void LoginWindow::onRegisterClicked() { if (!isRegistering) { isRegistering = true; m_loginBtn->setText("Зарегистрироваться"); m_registerBtn->setText("Отмена"); m_messageLabel->setText("Регистрация нового пользователя"); m_messageLabel->setStyleSheet("color: green;"); } else { QString username = m_usernameEdit->text().trimmed(); QString password = m_passwordEdit->text(); if (username.isEmpty() || password.isEmpty()) { m_messageLabel->setText("Заполните все поля!"); m_messageLabel->setStyleSheet("color: red;"); return; } if (password.length() < 4) { m_messageLabel->setText("Пароль должен быть >= 4 символов!"); m_messageLabel->setStyleSheet("color: red;"); return; } if (Database::instance().addUser(username, password, "cashier")) { QMessageBox::information(this, "Успех", "Пользователь зарегистрирован!"); isRegistering = false; m_loginBtn->setText("Войти"); m_registerBtn->setText("Регистрация"); m_messageLabel->setText(""); m_messageLabel->setStyleSheet("color: red;"); m_usernameEdit->clear(); m_passwordEdit->clear(); } else { m_messageLabel->setText("Ошибка: пользователь уже существует!"); m_messageLabel->setStyleSheet("color: red;"); } } }