-
Способ реализации с файловым вводом/выводом
Подключены библиотеки fstream и windows.h, ctime. Первая используется для создания переменных типа ofstream (вывод в файл; если файла не существует, то он создается) и ifstream (считывание с файла). Отчеты сохраняются только в текстовый файл (.txt), база данных еще и в бинарный (.bin). Файлы имеют имена следующего вида:
<Тип отчета> <Дата> <Время>.<Расширение>
Тип может принимать значения:
-
DB – База данных;
-
AG – Среднее значение потока;
-
EP – Отличники потока;
-
HTTAG – Студенты, у которых средний балл выше среднего балла потока.
Например, DB May 6 2016 12:34:00.txt
Windows.h позволяет находить в какой-либо папке файлы с именами, подходящие критерию, который необходим разработчику.
Например:
file = FindFirstFile("./*.txt", &f);
//Находит в каталоге программы первый файл с расширением .txt
if (file != INVALID_HANDLE_VALUE) //Если такой файл найден, то
{
do
{
std::cout << " " << f.cFileName << std::endl;
//Выводим его имя в консоль
} while (FindNextFile(file, &f));
//Ищем следующий файл, удовлетворяющий условию
}
Текстовый вывод на примере создания отчета о среднем значении потока:
std::string type, date, time; //Используются для имени файла
type = "AG ";
date = __DATE__;
date += " ";
time = __TIME__;
type += date;
type += time;
std::string fdate = type + ".txt";
std::ofstream fout(fdate.c_str());
fout << "The average grade of feed: ";
fout << "\n" << aver; //Вывод значения в файл
fout.close(); //Закрытие файла
Бинарный вывод:
std::string bdate = type + ".bin"; //Имя файла
std::ofstream bout(bdate.c_str(), std::ios::binary | std::ios::out);
//Открытие/создание для бинарного ввода
bout.write((char*)p, sizeof(Group)); //Пример записи целой структуры
bout.write((char*)&t->name, sizeof(t->name)); //Запись поля структуры
Ввод выполняет аналогично, только вместо fout<< -> fin >>, bout.write(…) -> bin.read(…), где fout/fin, bout/bin имена переменных.
-
Блок-схемы построения отчетов
Все три отчета строятся по похоже алгоритму, только в функция нахождения среднего балла потока не ссылается на другие функции. Блок-схема нахождения среднего арифметического балла:
-
Интерфейс программы
Интерфейс программы выполнен в стиле «user friendly», т.е. при работе с программой пользователь знает с чем работает.
Перемещение в меню осуществляется с помощью стрелок на клавиатуре, выбор пункта – нажатием Enter. Ввода пунктов меню от пользователя не требуется.
Максимальный уровень меню 4. Основное меню состоит из 5 пунктов:
-
Feed – для работы с потоком;
-
Group – для работы с группами;
-
Student – для работы со студентами;
-
DataBase – для работы с базой данных в целом;
-
Exit – выход из программы.
Добавление
первой группы в БД Перемещение
по списку групп Контроль
ввода
-
Особенности
-
Проверка оценок на принадлежность к диапазону от 2 до 5;
-
Проверка введенных значений на принадлежность к целым числам, если происходит ввод для целочисленной переменной;
-
Проверка при добавлении студента на существование студента с таким же номером студенческого билета;
-
Сортировка студентов и групп по возрастанию при добавлении;
-
Перемещение в меню с помощью стрелок, выбор пункта меню нажатием Enter;
-
Поиск и вывод файлов в виде списка для загрузки БД;
-
Вывод списка групп и списка студентов также для выбора с помощью стрелок.