Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
12.02.2018
Размер:
135.08 Кб
Скачать

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

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

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

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

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

ОТЧЕТ

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

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

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

Студентка гр. 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 <iostream>

#include <fstream>

#include <string>

#include <ctime>

#include <cmath>

#include <conio.h>

#include <stdbool.h>

#include <windows.h>

#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; //Указатель на группу, где необходимо удалить студента

Соседние файлы в папке Спиридонов. Курсовая 2 семестр. Список групп, потока