Skip to content

Консольный электронный журнал на C++ и SQLite: студенты, группы, предметы, оценки, отчеты и экспорт

Notifications You must be signed in to change notification settings

nickihysterics/cpp-gradebook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cpp-gradebook - электронный журнал оценок студентов

Консольное приложение для учета студентов, групп, предметов и оценок. Данные сохраняются между запусками в SQLite, есть отчеты, электронный журнал и экспорт в Excel.

Цель проекта

  • Учебный и портфолио-проект: демонстрация работы с БД, консольным UX, отчетностью и экспортом данных.

Возможности

  • CRUD для студентов, групп, предметов и оценок
  • Поиск/фильтрация/сортировка студентов (группа, ФИО, минимум среднего балла; сортировка по ID/ФИО/среднему)
  • Отчеты: средние по студентам и предметам, подробности по предмету, топ-N, пересдачи
  • Электронный журнал: сводный, по предмету, по студенту
  • Автосохранение после каждого изменения
  • Экспорт в CSV для Excel (UTF-8 с BOM)

Стек

  • C++17
  • MSVC (Visual Studio Build Tools / Community)
  • SQLite (amalgamation в third_party/sqlite)
  • Windows + VS Code (tasks + launch)

Архитектура данных

Сущности

  • Group: учебная группа
  • Student: студент, принадлежит группе
  • Subject: учебный предмет
  • Grade: оценка по предмету, каждая новая оценка = новая попытка

SQLite

  • Файл БД: data/data_store.db (создается автоматически)
  • Таблицы:
    • groups(id, name)
    • students(id, name, group_id)
    • subjects(id, name)
    • grades(id, student_id, subject_id, value, attempt)
  • Включены внешние ключи (PRAGMA foreign_keys = ON)

Логика расчета

  • Средний балл по предмету: среднее всех оценок по предмету (все попытки)
  • Средний балл студента: сначала среднее по каждому предмету, затем среднее по предметам
  • Пересдачи: последняя оценка по предмету ниже проходного балла

Пользовательские сценарии

  1. Создать группы (или создавать их при добавлении студентов)
  2. Добавить студентов и назначить группу
  3. Добавить предметы
  4. Внести оценки
  5. Открыть отчеты и электронный журнал
  6. Экспортировать данные в CSV при необходимости

Быстрый старт

Требования

  • Windows 10/11
  • Visual Studio Build Tools или Community с workload Desktop development with C++

Сборка в VS Code

  1. Откройте папку проекта
  2. Ctrl+Shift+B (задача сборки)

Сборка из терминала

.\build.bat

Запуск

.\build\cpp-gradebook.exe

Кодировка консоли

Если кириллица отображается некорректно:

chcp 65001

Работа с приложением

  • Главное меню: справочники (группы/студенты/предметы), оценки, отчеты, журнал, экспорт
  • Все действия выполняются через подсказки в консоли, изменения сохраняются сразу

Электронный журнал и отчеты

  • Сводный журнал: последняя оценка по каждому предмету для студента
  • Журнал по предмету: все попытки, средние, последняя оценка, число попыток
  • Журнал по студенту: все предметы, все попытки, средний балл и последняя оценка
  • Отчеты: средние по студентам/предметам, подробности по предмету, топ-N, пересдачи

Экспорт в Excel

CSV-файлы сохраняются в exports/:

  • export_groups.csv
  • export_students.csv
  • export_subjects.csv
  • export_grades.csv

Примечания:

  • Экспорт идет в UTF-8 с BOM для корректной кириллицы в Excel
  • Разделитель ; соответствует RU-локали

Структура проекта

  • src/main.cpp - логика приложения
  • third_party/sqlite/ - SQLite amalgamation
  • resources/app.rc - ресурс с иконкой приложения
  • assets/app.png, assets/app.ico - иконка
  • .vscode/ - задачи сборки и запуск
  • build.bat - сборка через MSVC
  • build/ - exe и объектные файлы
  • data/ - база SQLite (создается автоматически)
  • exports/ - CSV-выгрузки

FAQ для преподавателя

Q: Почему SQLite, а не полноценная СУБД? A: SQLite не требует сервера, прост в разворачивании, идеально подходит для учебного кейса и портфолио.

Q: Почему используется amalgamation? A: Минимум зависимостей и простая сборка в один проект без внешнего менеджера пакетов.

Q: Как считается средний балл студента? A: По каждому предмету берутся все оценки, считается среднее по предмету, затем среднее по предметам.

Q: Как определить пересдачи? A: Если последняя оценка по предмету ниже проходного балла, предмет попадает в пересдачи.

Q: Где хранятся данные? A: В файле data/data_store.db, создается автоматически при первом запуске.

Q: Почему экспорт в CSV, а не в XLSX? A: CSV проще и универсальнее; Excel корректно открывает UTF-8 BOM.

Q: Как обеспечивается сохранность изменений? A: Все изменения сразу записываются в SQLite (автосохранение).

Q: Какие связи между таблицами? A: Студент связан с группой, оценки связаны со студентом и предметом (foreign keys).

Ограничения

  • Нет проверки дублей по именам
  • Редактирование оценки не меняет номер попытки

Идеи развития

  • Импорт данных из CSV
  • Отчеты по семестрам
  • Роли пользователей и авторизация
  • Дополнительные фильтры по предметам и периодам

About

Консольный электронный журнал на C++ и SQLite: студенты, группы, предметы, оценки, отчеты и экспорт

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published