/
spitsyn62
/
AcademicPerformance
Обзор
Документация
Войти
/
spitsyn62
/
AcademicPerformance
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
StudentTableModel.h
134 строки
4 KB
spitsyn62
create: AcademicPerformance.pro, main.cpp, MainWindow.cpp, MainWindow.h, MainWindow.ui, README.txt, StudentTableModel.cpp, StudentTableModel.h, Список студентов.csv
15 май 2026, 14:21
Верифицирован
15 май 2026, 14:21
b654f18
Код
Авторство
О чём код?
#ifndef STUDENTTABLEMODEL_H #define STUDENTTABLEMODEL_H #include <QAbstractTableModel> #include <QVector> #include <QString> /** * @brief Структура, представляющая одного студента. * * Содержит ФИО студента и оценки за лабораторные работы. */ struct Student { QString name; //< ФИО студента QVector<int> labs; ///< Оценки за 7 лабораторных работ (0–5) }; /** * @brief Модель данных для отображения списка студентов и их оценок. * * Реализует таблицу: * - ФИО * - 7 лабораторных работ * - Допуск к экзамену * - Рекомендуемая оценка (средний балл) * * Используется с QTableView. */ class StudentTableModel : public QAbstractTableModel { Q_OBJECT public: /** * @brief Конструктор модели. * @param parent Родительский QObject. */ explicit StudentTableModel(QObject *parent = nullptr); /** * @brief Возвращает количество строк (студентов). */ int rowCount(const QModelIndex &parent = QModelIndex()) const override; /** * @brief Возвращает количество столбцов. * * Столбцы: * 0 — ФИО * 1–7 — лабораторные работы * 8 — допуск к экзамену * 9 — средний балл */ int columnCount(const QModelIndex &parent = QModelIndex()) const override; /** * @brief Возвращает данные для отображения в ячейке. * * Поддерживает роли: * - Qt::DisplayRole * - Qt::EditRole * - Qt::BackgroundRole * - Qt::TextAlignmentRole */ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; /** * @brief Заголовки таблицы. */ QVariant headerData(int section, Qt::Orientation orientation, int role) const override; /** * @brief Флаги ячеек (редактируемость и доступность). */ Qt::ItemFlags flags(const QModelIndex &index) const override; /** * @brief Устанавливает значение ячейки (оценку). * * Ограничение: допустимы значения от 0 до 5. */ bool setData(const QModelIndex &index, const QVariant &value, int role) override; /** * @brief Загрузка списка студентов без оценок. * * CSV формат: * одна строка = один студент (ФИО). */ void loadFromCsv(const QString &filePath); /** * @brief Сохранение текущего журнала в CSV. * * Сохраняет ФИО и оценки за лабораторные работы. */ void saveToCsv(const QString &filePath) const; /** * @brief Загрузка полного журнала из CSV. * * CSV формат: * ФИО;ЛР1;ЛР2;...;ЛР7 */ void loadFullCsv(const QString &filePath); private: QVector<Student> students_; ///< Список студентов /** * @brief Вычисляет средний балл студента. * @param s Студент * @return Среднее значение оценок */ double averageScore(const Student &s) const; /** * @brief Проверяет, допущен ли студент к экзамену. * * Студент допущен, если все лабораторные работы сданы (нет нулей). */ bool isAllowed(const Student &s) const { for (int val : s.labs) { if (val == 0) return false; } return true; } }; #endif // STUDENTTABLEMODEL_H