Главная страница
Навигация по странице:

  • Текстовый вывод на примере создания отчета о среднем значении потока

  • Отчет по программированию. Отчет по курсовой за 2 семестр. База данных студентов


    Скачать 131.92 Kb.
    НазваниеБаза данных студентов
    АнкорОтчет по программированию
    Дата29.11.2022
    Размер131.92 Kb.
    Формат файлаdocx
    Имя файлаОтчет по курсовой за 2 семестр.docx
    ТипОтчет
    #820081

    МИНОБРНАУКИ РОССИИ

    САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

    ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

    «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

    Кафедра автоматики и процессов управления

    ОТЧЕТ

    о курсовой работе

    по дисциплине «Программирование»

    Тема: База данных студентов


    Студентка гр. 5371




    Локкина О.С.

    Преподаватель




    Спиридонов Р.Е.

    Санкт-Петербург

    2016

    Оглавление


    1.Задание курсовой работы 3

    2.Структура программы 4

    3.Сущность данных 5

    4.Способ реализации с файловым вводом/выводом 9

    5.Блок-схемы построения отчетов 12

    6.Интерфейс программы 13

    7.Особенности 13


    1. Задание курсовой работы


    Необходимо создать на языке С++ без использования vector базу данных для работы с потоком студентов.

    Для работы с потоком должно быть реализовано:

    • Вывод среднего балла всего потока;

    • Вывод студентов со средним баллом выше, чем у потока;

    • Вывод отличников.

    Три данных отчета нужно сохранить в файле в виде текста с указанием в имени файла даты, времени и вида отчета.

    Работа с группами:

    • Создание;

    • Вывод;

    • Удаление;

    • Поиск;

    • Вывод отличников;

    • Вывод двоечников;

    • Вывод среднего балла группы.

    Работа со студентами:

    • Вывод студента;

    • Добавление;

    • Удаление.

    Также необходимо всю базу данных сохранять в текстовый и бинарный файлы, а также считывать ее из этих же файлов.

    Информация в текстовом файле должна быть представлена в таком виде:
    /Количество групп/
    {
    /Первая группа/
    /Количество студентов в этой группе/
    /*Далее идет список студентов, которые представлены по такой схеме*/
    {
    /Фамилия Имя/
    /Номер студенческого билет/
    /Дата рождения/
    /Телефон/
    /Оценки/
    <…>
    }
    <…>
    }
    1. Структура программы


    Программа состоит из заголовочных файлов (.h) и файлов исходного кода (.cpp).
    Список всех файлов (всего из 13):

    • Database.cpp //Определение функций для работы с БД

    • Database.h //Содержит прототипы функций, описанных в Database.cpp

    • FeedFunc.cpp //Определение функций для работы с потоком

    • FeedFunc.h //Прототипы функций

    • GroupFunc.cpp //Определение функций для работы с группами

    • GroupFunc.h

    • lib.h //Содержит все необходимы для программы библиотеки, а также заголовочные файлы; объявление глобальных переменных

    • StudentFunc.cpp //Функции для работы со студентами

    • StudentFunc.h

    • main.cpp //Инициализация глобальных переменных, вход в программу через функцию FirstMenu()

    • menu.cpp //Функции для работы с меню

    • menu.h

    • structs.h //Содержит описание 2 структур (студент, группа)

    Данное разбиение выбрано для удобства работы с объектами в целом, т.е. со студентами, группами, потоком, самой базой данных, меню (сложная структура, поэтому лучше было переместить в отдельные файлы).
    1. Сущность данных


    Здесь приведены все функции, используемые в программе:

    Database.h:

    • void SaveDB(); //Сохраняет всю базу данных в бинарном и текстовом файле

    • void LoadDBMenu(); //Выводит список файлов с расширением .txt и .bin, позволяет выбрать загружаемый файл

    • void DBMenu(); //Меню для управления загрузкой/сохранением базы данных

    FeedFunc.h:

    • void ShowAllGroups(); //Выводит список всех групп с количеством студентов. Показывает общее число студентов

    • double AverageGrade(); //Находит среднее значение потока

    • void ExcellentPupil(); //Выводит отличников потока

    GroupFunc.h:

    • Group* SearchGroup(); //Поиск группы по номеру, возвращает указатель на эту группу

    • Group* CreateGroupAuto(int); //Создание группы в результате считывания файла, т.е. от пользователя не требуется никакого ввода в консоль

    • void CreateGroup(); //Создает группу при условии, что она еще не создана

    • void PrintGroup(); //Выводит в консоль всю группу, проверяет на существование и заполненность

    • void DeleteGroup(); //Удаляет группу

    • double AverageGradeOfGroup(); //Возвращает среднее арифметическое группы

    StudentFunc.h:

    • bool Grades(Student*, int); //Проверяет, что у студента все оценки равны определенному значению (2/5)

    • bool AverageGrade(Student*, double); //Проверяет, что у студента среднее арифметическое оценок больше какого-то числа

    • Student* CreateStudentAuto(Group*&, std::istream&); //Аналогично с CreateGroupAuto

    • void AddStudent(); //Добавляет студента в группу, проверяя при этом студента по номеру студенческого билета

    • void DeleteStudent(); //Удаляет студента

    • void PrintStudent(); //Выводит в консоль все поля, кроме ср. ариф., определенного студента

    • void Losers(); //Выводит двоечников группы

    • void ExcellentPupilOfGroup(); //Выводит отличников группы

    • void HigherThanTheAverageGrade(); //Выводит студентов, чей средний балл выше среднего балла потока

    menu.h:

    • int Point(); //Отвечает за перемещение стрелки меню

    • void FirstMenu(); //Отвечает за первый уровень меню

    • void SecondMenu(); //Второй уровень меню

    • void ListOfGroups(); //Выводи список существующих групп для выбора их в меню

    • void ListOfStudents(Group*); //Аналогично с ListOfGroups, только для студентов

    • int MenuGroup(); //Обрабатывает перемещение по списку групп

    • Group* SearchGroupAuto(); //Возвращает указатель на группу после нажатия пользователем Enter, когда стрелка указывала на одну из групп

    • int MenuStudent(Group*); //Аналогично с MenuGroup

    • Student* SearchStudentAuto(Group*); //Аналогично с SearchGroupAuto

    Также опишем структуры:
    structs.h:

    struct Student //Структура студента

    {

    std::string name; //Имя студента

    int number; //Номер студенческого билета

    std::string dateofbirth; //Дата рождения

    std::string phone; //Номер телефона

    int grade[AMOUNTofGRADES]; //Массив оценок

    Student* next; //Указатель на следующего по списку студента

    Student* prev; //На предыдущего

    double averg = 0; //Среднее арифметическое оценок

    };

    struct Group //Структура группы

    {

    int number; //Номер группы

    int count = 0; //Количество студентов группы

    Group(int count) //Конструктор

    {

    number = count;

    averg = 0;

    stud = NULL;

    last = NULL;

    }

    Group* next; //Указатель на следующую группу в списке

    Group* prev; //На предыдущую

    Student* stud; //Указатель на начало списка студентов

    Student* last; //На конец

    double averg; //Среднее арифметическое группы

    };

    Lib.h:

    #define AMOUNTofGRADES 7

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include "structs.h"

    #include "StudentFunc.h"

    #include "FeedFunc.h"

    #include "GroupFunc.h"

    #include "menu.h"

    #include "Database.h"

    extern char point[]; //В main.cpp будет присвоено значение ‘->’

    extern int amount, N, fmenu, smenu, stop, gmenu, stmenu, dbmenu, filemenu;

    //Отвечают за количество групп, номер группы, номера пунктов меню, а также за ограничение движения стрелки в консоли (stop)

    extern COORD m; //Положение меню

    extern COORD c; //Положение стрелки

    extern HANDLE h; //Дескриптор потока вывода

    extern Group* start; //Начало всего потока

    extern Group* finish; //Конец потока

    extern Group* fordel; //Указатель на группу, где необходимо удалить студента
    1. Способ реализации с файловым вводом/выводом


    Подключены библиотеки 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 имена переменных.
    1. Блок-схемы построения отчетов


    Все три отчета строятся по похоже алгоритму, только в функция нахождения среднего балла потока не ссылается на другие функции.
    Блок-схема нахождения среднего арифметического балла:


    1. Интерфейс программы


    Интерфейс программы выполнен в стиле «user friendly», т.е. при работе с программой пользователь знает с чем работает.

    Перемещение в меню осуществляется с помощью стрелок на клавиатуре, выбор пункта – нажатием Enter. Ввода пунктов меню от пользователя не требуется.

    Максимальный уровень меню 4. Основное меню состоит из 5 пунктов:

    • F eed – для работы с потоком;

    • Group – для работы с группами;

    • Student – для работы со студентами;

    • DataBase – для работы с базой данных в целом;

    • Exit – выход из программы.


    Контроль ввода

    Перемещение по списку групп

    Добавление первой группы в БД
    Еще примеры работы программы:

    1. Особенности


    • Проверка оценок на принадлежность к диапазону от 2 до 5;

    • Проверка введенных значений на принадлежность к целым числам, если происходит ввод для целочисленной переменной;

    • Проверка при добавлении студента на существование студента с таким же номером студенческого билета;

    • Сортировка студентов и групп по возрастанию при добавлении;

    • Перемещение в меню с помощью стрелок, выбор пункта меню нажатием Enter;

    • Поиск и вывод файлов в виде списка для загрузки БД;

    • Вывод списка групп и списка студентов также для выбора с помощью стрелок.


    написать администратору сайта