Даны оценки N студентов, полученные ими на 4 экзаменах. Определить число студентов, не имеющих “двоек”, и средний экзаменационный балл каждого студента.
АНО ВО "Российский Новый Университет"
Институт Информационных систем и инженерно-компьютерных технологий
Курсовая работа
по дисциплине «Программирование»
на тему: «Даны оценки N студентов, полученные ими на 4 экзаменах. Определить число студентов, не имеющих “двоек”, и средний экзаменационный балл каждого студента.»
Выполнил студент 1-го курса
Озерков Максим Владимирович
Руководитель:
Москва, 2023
ВВЕДЕНИЕ
Целью курсовой работы является разработка оконного приложения для получения статистики результатов экзаменов студентов, получения информации о среднем экзаменационном балле и количестве студентов, не имеющих «двоек».
Актуальность темы обусловлена необходимость следить за успеваемость студентов в рамках учебного процесса. Информация об среднем экзаменационном балле может быть использована, например, при назначении стипендий. Кроме того, полученные в рамках работы навыки по разработки графического интерфейса и его реализации в виде оконного приложения очень важны, так как это требуется при разработке большинства приложений.
Задачи работы:
1. ПОСТАНОВКА ЗАДАЧИ
1.1 Задание
Даны оценки N студентов, полученные ими на 4 экзаменах. Определить число студентов, не имеющих «двоек», и средний экзаменационный балл каждого студента.
1.2 Описание предметной области
Оценивание на экзамене производится по шкале от 2 до 5. В рамках работы положим, что, если студент не появился на экзамене, ему выставляется оценка 2. Средний экзаменационный балл для каждого студента округляется до двух знаков. Количество студентов N должно быть целым положительным числом.
1.3 Функции программы
Программа в своей работе должна поддерживать следующие функции:
1.4 Входные данные
Входными данными для программы является текстовый файл, содержащий список студентов, состоящий из:
1.5 Выходные данные:
Выходными данных, состоит из списка студентов, состоящему из:
Предусматриваются следующие ограничения:
Количество студентов N – целое положительное число, значит N должно быть больше 0. Кроме того, число N должно совпадать с количеством студентов во входных данных.
Фамилия и имя студента должны состоять из одного слова.
Оценки студентов – это целые числа в диапазоне от 2 до 5. Их должно быть ровно 4 для каждого студента.
Программа должна быть реализована в виде оконного приложения в среде программирования Microsoft Visual Studio на языке C++.
2. РАЗРАБОТКА ПРИЛОЖЕНИЯ
2.1 Разработка структуры приложения
При разработке приложения использовался объектный подход. Были созданы два класса Student и Group. Их диаграмма представлена на Рисунке 2.1. Класс Group используется для работы с массивом объектов типа Sudent.
Рисунок 2.1 – Диаграмма классов Student и Group
Описание класса Student
Поля класса (имеют закрытый уровень доступа):
int Grade[4] – массив целых чисел размером 4 для хранения оценок студентов за экзамены.
std::string Surname – строка с фамилией студента.
std::string Name – строка с именем студента.
double AverageGrade – вещественное число, средняя оценка студента.
Методы класса:
Student() – конструктор по умолчанию.
Student(std::string sname, std::string name, int mark[4]) – конструктор с параметрами.
int GetGrade(int i) – функция возвращает оценку студента за i-й экзамен.
std::string GetSurname() – возвращает фамилию студента.
std::string GetName() – возвращает имя студента.
double GetAAverageGrade() – возвращает среднюю оценку студента.
bool HasGoodGrade() – функция возвращает true, если студент не имеет оценок 2, false – в противном случае.
void CalcAverage() – вычисляет среднюю оценку студента.
Описание класса Group
Поля класса (имеют закрытый уровень доступа):
int Size - целое число, размер массива Array.
Student* Array - указатель на массив объектов класса Student.
Методы класса:
Group(int s) - конструктор класса, в нем создается массив объектов Student размера s.
Student& operator [](int i) – индексатор.
void PutStudent(int i, Student& St, int &error) – функция помещает объект типа Student в массив на i позицию. Если i>Size, функция возвращает код ошибки error.
int CalcCountGoodGrade() – вычисляет количество студентов не имеющих "двоек".
void CalcAverageGrade() – вычисляет среднюю оценку для каждого студента в массиве.
int GetSize() – возвращает размер массива Array.
Student& GetStudent(int i) – возвращает i-элемент массива Array.
Кроме того, будет разработана и использована функция:
Group* ReadDataFromTxt(const char* file, int& error) – функция читает данные из файла с именем file. В случае успешного завершения возвращает указатель на объект класса Group, где хранятся данные всех студентов, загруженные из файла. Если возникла ошибка при выполнении функции, возвращается код ошибки в переменной error.
2.2 Разработка блок-схем алгоритмов
Ниже на Рисунке 2.2 – Рисунке 2.6 представлены блок-схемы основных методов программы.
Рисунок 2.2 – Блок-схема функции ReadDataFromTxt
Рисунок 2.3 Блок-схема метода CalcCountGoodGrade
Рисунок 2.4 – Блок-схема метода CalcAverageGrade
Рисунок 2.5 – Блок-схема метода CalcAverage
Рисунок 2.6 – Блок-схема метода HasGoodGrade
2.3 Разработка пользовательского интерфейса
Приложении предназначено, для преподавателей, работников деканата и других ответственных лиц, которым необходимо следить и получать информацию об статистикой результатов сдачи экзаменов студентов, их средними экзаменационными оценками и количеством студентов, сдавших экзамены без «двоек».
Функции пользователя:
В соответствии с функциями пользователя разработана форма приложения (Рисунок 2.7):
Рисунок 2.7 – Пользовательский интерфейс приложения
Компоненты формы:
button1 – кнопка «Загрузите данные из файла», при нажатии должно открываться диалоговое окно для выбора файла, вывод текста из выбранного файла в dataGridView1. Также для каждого входного файла должно очищаться текстовое поле textBox1.
button2 – кнопку «Посчитать среднюю оценку каждого студента», при нажатии должны выполняться вычисления средней оценки для каждого студента, вывод полученных значений в dataGridView1 в советующий столбец.
button3 – кнопка «Вычислить», при нажатии долж
button4 – кнопка «Инструкция», при нажатии должна показываться инструкция по использованию приложения;
label1 – надпись «Количество студентов без двоек», используется для пояснения к textBox1 и button3.
dataGridView1 – настраиваемая таблица для отображения данных, в которую выводятся список студентов и их оценок за каждый экзамен, а также средняя оценка для каждого студента.
Таблица содержит 6 столбцов:
textBox1 – текстовое поле для вывода количества студентов, не имеющих оценку 2 за экзамены.
groupBox1 – элемент управления, отображает рамку вокруг элементов label1, button3, textBox1.
groupBox2 – элемент управления, отображает рамку вокруг элементов button1, button2, button4.
Если пользователь нажмет на кнопку «Инструкция» должно выводится окно, содержащее инструкцию по формату данных во входном файле, как показано на Рисунке 2.8.
Рисунок 2.8 – Инструкция приложения по формату данных входного файла
3. РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ ПРОГРАММНОГО ПРИЛОЖЕНИЯ
3.1 Описание разработанной программы
Приложение разработано на языке программирования C++. Для реализации графического интерфейса пользователя использовалась библиотека «Windows Forms». Эта библиотека содержит графический конструктор для визуального конструирования формы (окна) приложения на основе, которого автоматически генерируется код формы. Программисту необходимо только добавить и определить логику для событийных обработчиков, в нашем случае, нажатие на кнопки «Инструкция», «Загрузить данные из файла», «Подсчитать среднюю оценку каждого студента» и «Вычислить», а также инициализация данных при начальной загрузке формы.
Работа приложения состоит из следующих этапов:
Полный листинг программы приведен в Приложении 1.
3.2 Тестирование программы
Тестирование программы проводилось по ГОСТ 19.301-79.
Объект испытаний – приложение для получения статистики результатов экзаменов студентов.
Цель испытаний – проверка работоспособности приложения.
Средство т испытаний – программа тестировалась на персональном компьютере с операционной системой Windows 10.
Методы испытаний – приложение тестировалась по методу хода и выхода в нормальных и исключительных условиях для различных наборов тестовых данных.
Порядок испытаний (ниже на Рисунках 3.1 – 3.24 приведены результаты тестирования):
На Рисунке 3.1 представлено начальное состояние окна при запуске приложения.
Рисунок 3.1 - Начальное состояние окна при запуске приложения
На Рисунке 3.2 показано состояние окна приложения после нажатии на кнопку «Инструкция».
Рисунок 3.2 - Вывод инструкции для пользователя при нажатии на кнопку «Инструкция»
Если до загрузки входных данных из файла пользователь нажмет на кнопки «Подсчитать среднюю оценку каждого студента» и «Вычислить», выводится сообщение об ошибке, как показано на Рисунке 3.3 – Рисунке 3.4.
Рисунок 3.3 – Вывод сообщения об ошибке при нажатии на кнопку «Подсчитать среднюю оценку каждого студента» до загрузки входных данных из файла
Рисунок 3.4 – Вывод сообщения об ошибке при нажатии на кнопку «Вычислить» до загрузки входных данных из файла
На Рисунке 3.5 показано состояние окна приложения после нажатия на кнопку «Загрузить данные из файла».
Рисунок 3.5 – Выбор файла для загрузки при нажатии на кнопку «Загрузить данные из файла»
Ввод некорректных данных (Рисунок 3.6 - Рисунок):
Рисунок 3.6 – Вывод сообщения об ошибке, если пользователь задал имя несуществующего файла
Рисунок 3.7 – Пример некорректных входных данных, количество студентов 0 или меньше -1
Рисунок 3.8 – Сообщение об ошибке, если количество студентов не положительное целое число
Рисунок 3.9 – Пример некорректных входных данных: число N меньше фактического количества студентов
Рисунок 3.10 – Сообщение об ошибке при некорректных входных данных: число N меньше фактического количества студентов
Рисунок 3.11 – Пример некорректных входных данных: у некоторых студентов оценки вне диапазона от 2 до 5
Рисунок 3.12 – Сообщение об ошибке при некорректных входных данных: у некоторых студентов оценки вне диапазона от 2 до 5
Рисунок 3.13 – Пример некорректных входных данных: встречается разделитель между полями отличный от «пробела»
Рисунок 3.14 – Сообщение об ошибке при некорректных входных данных: встречается разделитель между полями отличный от «пробела»
Рисунок 3.15 – Пример некорректных входных данных: есть оценки в виде вещественного числа
Рисунок 3.16 – Сообщение об ошибке при некорректных входных данных: есть оценки в виде вещественного числа