Программа для заполнения экзаменационной ведомости

Построение программы, создающей ведомость для каждой группы студентов по всем дисциплинам с указанием формы контроля (зачет или экзамен). Упорядочивание списка студентов по алфавиту. Описание функций и переменных. Алгоритм, блок-схема и текст программы.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 17.10.2013
Размер файла 281,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

  • Введение
  • 1. Постановка задачи
  • 2. Разработка алгоритма
  • 3. Описание функций и переменных
  • 4. Блок - схема программы
  • 5. Тестирование программы
  • 6. Текст программы
  • Введение
  • C++ - это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, С++ помимо ООР поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. С++ уже стал универсальным языком для программистов всего мира.
  • C++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
  • 1. Постановка задачи
  • В деканате факультета информатики имеются списки студентов разных групп. В сессию сотрудники деканата печатают ведомости для каждой дисциплины для сдачи студентами экзаменов и зачетов. Написать программу, создающие ведомости для каждой группы по всем дисциплинам с указанием формы контроля (зачет, экзамен). Списки студентов упорядочить по алфавиту.
  • 2. Разработка алгоритма
  • программа ведомость студент алгоритм
  • Для реализации программы были созданы две структуры.
  • Структуры использованы для логического объединения данных типов string и int. и так же как массивы служат для группирования данных разного типа.
  • Структура groups задана следующим образом:
  • struct groups{
  • string name;colStudents;string fioStudents[50];};
  • В структуре groups созданы три переменные - name типа string, содержащую название группы, colStudent типа int, принимающую значение о количестве студентов в данной группе и fioStudents типа string, включающая информацию о фамилиях студентов. Доступ к полям структуры осуществляется посредством оператора . (точка).
  • arrG[i].name;
  • arrG[i].colStudents;
  • arrG[i].ftoStudents[j];
  • Аналогичной является структура predmets
  • struct predmets {
  • string name;string prepod;};
  • Имеет две переменные типа string: первая - name, в которой заключается наименование предмета, вторая - prepod, которая содержит ФИО преподавателя, который преподает этот предмет.
  • Для сортировки массива по фамилиям студентов была выбрана быстрая сортировка.
  • Быстрая сортировка (англ. quicksort), часто называемая qsort по имени реализации в стандартной библиотеке языка Си -- широко известный алгоритм сортировки, разработанный английским информатиком Чарльзом Хоаром в МГУ в 1960 году. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O (n log n) обменов при упорядочении n элементов.
  • Краткое описание алгоритма быстрой сортировки:
  • · выбрать элемент, называемый опорным.
  • · сравнить все остальные элементы с опорным, на основании сравнения разбить множество на три -- "меньшие опорного", "равные" и "большие", расположить их в порядке меньшие-равные-большие.
  • · повторить рекурсивно для "меньших" и "больших".
  • Для вывода на экран диалога с пользователем и вывода ведомостей был использован оператор cout.
  • Диалог с пользователем был осуществлен посредством перебора последовательности условий поиска "нужной" ведомости. После чего на экран выводиться искомая ведомость, после просмотра которого есть возможность повторного поиска ведомости.
  • Сложность метода заключаеться в том, что метод неустойчив. Поведение довольно естественно, если учесть, что при частичной упорядоченности повышаються шансы разделения массива на более равные части.
  • Сортировка использует дополнительную память, так как приблизителдьная глубина рекурсии составляет O(log n), а данные о рекурсивнх подвызовах каждый раз добавляются в стек.
  • 3. Описание функций и переменных
  • 1.Функция ввода значений в массивы.
  • На входе:
  • Указатели на массивы содержащий символьные элементы, количество элементов в массиве.
  • По очереди вводим все элементы массивов.
  • 2. Функция сортировки quickSort.
  • Функция сортирует список фамилий в алфавитном порядке при печати ведомости.
  • 3. Функция определения номера для выбора той или иной группы/предмета/формы контроля и т.д.
  • На входе: Указатель на массив, три целочисленных переменные присвоенные названиям групп/предметов/формы контроля
  • Пока не закончим просмотр ведомостей, повторяем вывод информации на экран с помощью оператора while. Все входные данные считываются с файла. В файле содержаться количество групп, их названия, сдающие ими предметы и форма контроля (экзамен/зачет) по этим предметам. Каждый блок данных заполняется в соответствующий массив. Далее реализуем выбор нужных нам данных для ведомости. Выбираем нужные нам данные из массивов и смотрим ведомость.
  • На выходе: Зачетная/Экзаменационная ведомость, заполненная данными из массивов.
  • 4. Блок - схема программы
  • 5. Тестирование программы
  • Для вывода требуемой ведомости нужно уточнить условия выбора. Для этого нужно выбрать тип ведомости (зачет/экзамен), группу и нужный предмет.
  • Рисунок 1.
  • После выбора всех параметров поиска на экран выводиться искомая ведомость.
  • Рисунок 2.
  • 6. Текст программы
  • #include "stdafx.h"
  • #include <iostream>
  • #include <fstream>
  • #include <string>
  • using namespace std;
  • struct groups
  • {
  • string name;
  • int colStudents;
  • string fioStudents[50];
  • };
  • struct predmets
  • {
  • string name;
  • string prepod;
  • };
  • #include <iostream>
  • using namespace std;
  • void quickSort(string arr[], int left, int right) {
  • int i = left, j = right;
  • string tmp;
  • string pivot = arr[(left + right) / 2];
  • /* partition */
  • while (i <= j) {
  • while (arr[i] < pivot)
  • i++;
  • while (arr[j] > pivot)
  • j--;
  • if (i <= j) {
  • tmp = arr[i];
  • arr[i] = arr[j];
  • arr[j] = tmp;
  • i++;
  • j--;
  • }
  • };
  • /* recursion */
  • if (left < j)
  • quickSort(arr, left, j);
  • if (i < right)
  • quickSort(arr, i, right);
  • }
  • int main()
  • {
  • setlocale(0,"Rus");
  • int i, j, nGroups, nPredmets, group, predmet, tmp;
  • string typeVed;
  • ifstream in("groups.txt", ios::in);
  • ifstream in2("predmets.txt", ios::in);
  • in>>nGroups;
  • groups *arrG = new groups[nGroups];
  • for(i=0; i<nGroups; i++)
  • {
  • in>>arrG[i].name;
  • in>>arrG[i].colStudents;
  • for(j=0; j<arrG[i].colStudents; j++)
  • {
  • in>>arrG[i].fioStudents[j];
  • }
  • cout<<"Группа "<<arrG[i].name<<" успешно сохранена!"<<endl<<endl;
  • }
  • for(i=0; i<nGroups; i++){
  • quickSort(arrG[i].fioStudents, 0, arrG[i].colStudents-1);
  • }
  • in2>>nPredmets;
  • predmets *arrP = new predmets[nPredmets];
  • for(i=0; i<nPredmets; i++)
  • {
  • in2>>arrP[i].name;
  • in2>>arrP[i].prepod;
  • cout<<"Предмет "<<arrP[i].name<<" успешно сохранён!"<<endl<<endl;
  • }
  • while (true)
  • {
  • cout<<"\n\nВыберите тип ведомости:\n\n0 - зачёт\n1 - экзамен\n\n: "; cin>>tmp;
  • if(tmp) typeVed = "экзамен"; else typeVed = "зачёт";
  • cout<<"\nГруппы сдающие "<<typeVed<<"\n"<<endl;
  • for(i=0; i<nGroups; i++)
  • {
  • cout<<i<<": "<<arrG[i].name<<endl;
  • }
  • cout<<"\nВыберите группу, сдающую "<<typeVed<<"\n\n: "; cin>>group;
  • cout<<"\nПредметы, которые сдает группа "<<arrG[group].name<<"\n"<<endl;
  • for(i=0; i<nPredmets; i++)
  • {
  • cout<<i<<": "<<arrP[i].name<<endl;
  • }
  • cout<<"\nВыберите предмет, который сдаёт группа "<<arrG[group].name<<"\n\n: "; cin>>predmet;
  • system("cls");
  • if(typeVed=="экзамен") cout<<"\n________________________________________________________________________________\n\t\t\t ЭКЗАМЕНАЦИОННАЯ ВЕДОМОСТЬ\n________________________________________________________________________________"<<endl; else cout<<"\n________________________________________________________________________________\n\t\t\t ЗАЧЕТНАЯ ВЕДОМОСТЬ\n________________________________________________________________________________"<<endl;
  • cout<<"\n\tГРУППА: "<<arrG[group].name<<"\tПРЕДМЕТ: "<<arrP[predmet].name<<"\tПРЕПОДОВАТЕЛЬ: "<<arrP[predmet].prepod<<endl;
  • cout<<"\n________________________________________________________________________________"<<endl;
  • cout<<"\t ФИО\t\t| № Зач.книжки\t| Оценка\t| Подпись экзаменатора"<<endl;
  • cout<<"________________________________________________________________________________"<<endl;
  • for(j=0; j<arrG[group].colStudents; j++)
  • {
  • cout<<" "<<arrG[group].fioStudents[j]<<"\t\t|\t\t|\t\t|"<<endl;
  • }
  • cout<<"________________________________________________________________________________"<<endl;
  • cout<<"Итого:"<<endl;
  • cout<<"\t\tОтлично: ______________________________"<<endl;
  • cout<<"\t\tХорошо: _______________________________"<<endl;
  • cout<<"\t\tУдовлетворительно: ____________________"<<endl;
  • cout<<"\t\tНеудовлетворительно: __________________"<<endl;
  • cout<<"\t\tНеявка: _______________________________\n"<<endl;
  • system("pause");
  • }
  • system("pause");
  • return 0;
  • }
  • Размещено на Allbest.ru

Подобные документы

  • Комбинированный тип данных для хранения входных данных о студентах и информация, содержащаяся в полях. Пример структуры входных и выходных данных. Алгоритм работы и программный код программы по успеваемости студентов, описание используемых функций.

    курсовая работа [135,9 K], добавлен 28.12.2012

  • Характеристика программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит результаты на экран. Описание переменных в программе, ее блок-схема и алгоритм работы. Листинг программы. Описание входных данных и результат вычислений.

    курсовая работа [721,4 K], добавлен 10.11.2010

  • Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.

    курсовая работа [122,5 K], добавлен 19.05.2011

  • Обеспечение универсальности функций тестирования при разработке программы для тестирования студентов. Бесплатное программное обеспечение. Анализ выбора среды программирования. Особенности среды Delphi и СУБД MySQL. Описание алгоритма и блок-схемы.

    курсовая работа [1,6 M], добавлен 01.02.2013

  • Разработка программного модуля "Учет успеваемости студентов". Характеристика используемой ПЭВМ, ОС и языка программирования. Технологический процесс машинной реализации задачи. Алгоритм и текст программы меню. Составление инструкции для пользователей.

    курсовая работа [1,6 M], добавлен 14.01.2013

  • Построение перспективной проекции, алгоритм удаления невидимых линий и поверхностей, получения изменений формы и движения объекта. Обобщенная структурная диаграмма программы, предназначение данных и основных переменных. Блок-схема процедур и функций.

    курсовая работа [2,0 M], добавлен 08.02.2011

  • Определение назначения и описание функций дискового кэша как промежуточного буфера с быстрым доступом к информации. Процесс кэширования внешних накопителей. Построение алгоритма, описание интерфейса и разработка программы для работы с двусвязным списком.

    курсовая работа [2,1 M], добавлен 21.01.2014

  • Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.

    курсовая работа [352,8 K], добавлен 14.04.2011

  • Создание программы, работающей со списком группы, который хранится в текстовом файле; среда разработки: Qt Creator 5.1. Описание и определение самой длинной фамилии среди студентов группы. Руководство пользователя; словесный алгоритм; код программы.

    отчет по практике [304,9 K], добавлен 29.09.2013

  • Проектирование программы в среде Delphi для тестирования знаний студентов по программированию, с выводом оценки по окончанию тестирования. Разработка экранных форм и алгоритма программы. Описание программных модулей. Алгоритм процедуры BitBtn1Click.

    курсовая работа [365,0 K], добавлен 18.05.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.