МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра автоматики и процессов управления
ОТЧЕТ
о курсовой работе
по дисциплине «Программирование»
Тема: База данных студентов
Студентка гр. 5371 |
|
Локкина О.С. |
Преподаватель |
|
Спиридонов Р.Е. |
Санкт-Петербург
2016
Оглавление
1.Задание курсовой работы 3
2.Структура программы 4
3.Сущность данных 5
4.Способ реализации с файловым вводом/выводом 9
5.Блок-схемы построения отчетов 12
6.Интерфейс программы 13
7.Особенности 13
-
Задание курсовой работы
Необходимо создать на языке С++ без использования vector базу данных для работы с потоком студентов.
Для работы с потоком должно быть реализовано:
-
Вывод среднего балла всего потока;
-
Вывод студентов со средним баллом выше, чем у потока;
-
Вывод отличников.
Три данных отчета нужно сохранить в файле в виде текста с указанием в имени файла даты, времени и вида отчета.
Работа с группами:
-
Создание;
-
Вывод;
-
Удаление;
-
Поиск;
-
Вывод отличников;
-
Вывод двоечников;
-
Вывод среднего балла группы.
Работа со студентами:
-
Вывод студента;
-
Добавление;
-
Удаление.
Также необходимо всю базу данных сохранять в текстовый и бинарный файлы, а также считывать ее из этих же файлов.
Информация в текстовом файле должна быть представлена в таком виде: /Количество групп/ { /Первая группа/ /Количество студентов в этой группе/ /*Далее идет список студентов, которые представлены по такой схеме*/ { /Фамилия Имя/ /Номер студенческого билет/ /Дата рождения/ /Телефон/ /Оценки/ <…> } <…> }
-
Структура программы
Программа состоит из заголовочных файлов (.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 структур (студент, группа)
Данное разбиение выбрано для удобства работы с объектами в целом, т.е. со студентами, группами, потоком, самой базой данных, меню (сложная структура, поэтому лучше было переместить в отдельные файлы).
-
Сущность данных
Здесь приведены все функции, используемые в программе:
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; //Указатель на группу, где необходимо удалить студента