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

 

Содержание


Введение

. Постановка задачи

. Разработка алгоритма

. Описание функций и переменных

. Блок - схема программы

. Тестирование программы

. Текст программы



Введение


C++ - это попытка решения разработчиками языка С задач объектно-ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, С++ помимо ООР поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. С++ уже стал универсальным языком для программистов всего мира.++ - универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей C++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, C++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.



1. Постановка задачи


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


. Разработка алгоритма

программа ведомость студент алгоритм

Для реализации программы были созданы две структуры.

Структуры использованы для логического объединения данных типов string и int. и так же как массивы служат для группирования данных разного типа.

Структура groups задана следующим образом:

groups{name;colStudents;string fioStudents[50];};


В структуре groups созданы три переменные - name типа string, содержащую название группы, colStudent типа int, принимающую значение о количестве студентов в данной группе и fioStudents типа string, включающая информацию о фамилиях студентов. Доступ к полям структуры осуществляется посредством оператора . (точка).

[i].name;[i].colStudents;[i].ftoStudents[j];


Аналогичной является структура predmets

predmets {name;string prepod;};


Имеет две переменные типа string: первая - name, в которой заключается наименование предмета, вторая - prepod, которая содержит ФИО преподавателя, который преподает этот предмет.

Для сортировки массива по фамилиям студентов была выбрана быстрая сортировка.

Быстрая сортировка (англ. quicksort), часто называемая qsort по имени реализации в стандартной библиотеке языка Си - широко известный алгоритм сортировки, разработанный английским информатиком Чарльзом Хоаром в МГУ в 1960 году. Один из быстрых известных универсальных алгоритмов сортировки массивов (в среднем O (n log n) обменов при упорядочении n элементов.

Краткое описание алгоритма быстрой сортировки:

·выбрать элемент, называемый опорным.

·сравнить все остальные элементы с опорным, на основании сравнения разбить множество на три - "меньшие опорного", "равные" и "большие", расположить их в порядке меньшие-равные-большие.

·повторить рекурсивно для "меньших" и "больших".

Для вывода на экран диалога с пользователем и вывода ведомостей был использован оператор cout.

Диалог с пользователем был осуществлен посредством перебора последовательности условий поиска "нужной" ведомости. После чего на экран выводиться искомая ведомость, после просмотра которого есть возможность повторного поиска ведомости.

Сложность метода заключаеться в том, что метод неустойчив. Поведение довольно естественно, если учесть, что при частичной упорядоченности повышаються шансы разделения массива на более равные части.

Сортировка использует дополнительную память, так как приблизителдьная глубина рекурсии составляет O(log n), а данные о рекурсивнх подвызовах каждый раз добавляются в стек.


3. Описание функций и переменных


.Функция ввода значений в массивы.

На входе:

Указатели на массивы содержащий символьные элементы, количество элементов в массиве.

По очереди вводим все элементы массивов.

. Функция сортировки quickSort.

Функция сортирует список фамилий в алфавитном порядке при печати ведомости.

. Функция определения номера для выбора той или иной группы/предмета/формы контроля и т.д.

На входе: Указатель на массив, три целочисленных переменные присвоенные названиям групп/предметов/формы контроля

Пока не закончим просмотр ведомостей, повторяем вывод информации на экран с помощью оператора while. Все входные данные считываются с файла. В файле содержаться количество групп, их названия, сдающие ими предметы и форма контроля (экзамен/зачет) по этим предметам. Каждый блок данных заполняется в соответствующий массив. Далее реализуем выбор нужных нам данных для ведомости. Выбираем нужные нам данные из массивов и смотрим ведомость.

На выходе: Зачетная/Экзаменационная ведомость, заполненная данными из массивов.


4. Блок - схема программы



. Тестирование программы


Для вывода требуемой ведомости нужно уточнить условия выбора. Для этого нужно выбрать тип ведомости (зачет/экзамен), группу и нужный предмет.



Рисунок 1.


После выбора всех параметров поиска на экран выводиться искомая ведомость.


Рисунок 2.


6. Текст программы


#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <string>namespace std;groups

{name;colStudents;fioStudents[50];

};predmets

{name;prepod;

};

#include <iostream>namespace std;quickSort(string arr[], int left, int right) {i = left, j = right;tmp;pivot = arr[(left + right) / 2];

/* partition */(i <= j) {(arr[i] < pivot)++;(arr[j] > pivot)-;(i <= j) {= arr[i];[i] = arr[j];[j] = tmp;++;-;

}

};

/* recursion */(left < j)(arr, left, j);(i < right)(arr, i, right);

}main()

{(0,"Rus");i, j, nGroups, nPredmets, group, predmet, tmp;typeVed;in("groups.txt", ios::in);in2("predmets.txt", ios::in);>>nGroups;*arrG = new groups[nGroups];(i=0; i<nGroups; i++)

{>>arrG[i].name;>>arrG[i].colStudents;(j=0; j<arrG[i].colStudents; j++)

{>>arrG[i].fioStudents[j];

}<<"Группа "<<arrG[i].name<<" успешно сохранена!"<<endl<<endl;

}(i=0; i<nGroups; i++){(arrG[i].fioStudents, 0, arrG[i].colStudents-1);

}>>nPredmets;*arrP = new predmets[nPredmets];(i=0; i<nPredmets; i++)

{>>arrP[i].name;>>arrP[i].prepod;<<"Предмет "<<arrP[i].name<<" успешно сохранён!"<<endl<<endl;

}(true)

{<<"\n\nВыберите тип ведомости:\n\n0 - зачёт\n1 - экзамен\n\n: "; cin>>tmp;(tmp) typeVed = "экзамен"; else typeVed = "зачёт";<<"\nГруппы сдающие "<<typeVed<<"\n"<<endl;(i=0; i<nGroups; i++)

{<<i<<": "<<arrG[i].name<<endl;

}<<"\nВыберите группу, сдающую "<<typeVed<<"\n\n: "; cin>>group;<<"\nПредметы, которые сдает группа "<<arrG[group].name<<"\n"<<endl;(i=0; i<nPredmets; i++)

{<<i<<": "<<arrP[i].name<<endl;

}

cout<<"\nВыберите предмет, который сдаёт группа "<<arrG[group].name<<"\n\n: "; cin>>predmet;("cls");(typeVed=="экзамен") cout<<"\n________________________________________________________________________________\n\t\t\t ЭКЗАМЕНАЦИОННАЯ ВЕДОМОСТЬ\n________________________________________________________________________________"<<endl; else cout<<"\n________________________________________________________________________________\n\t\t\t ЗАЧЕТНАЯ ВЕДОМОСТЬ\n________________________________________________________________________________"<<endl;<<"\n\tГРУППА: "<<arrG[group].name<<"\tПРЕДМЕТ: "<<arrP[predmet].name<<"\tПРЕПОДОВАТЕЛЬ: "<<arrP[predmet].prepod<<endl;

cout<<"\n________________________________________________________________________________"<<endl;<<"\t ФИО\t\t| № Зач.книжки\t| Оценка\t| Подпись экзаменатора"<<endl;

cout<<"________________________________________________________________________________"<<endl;(j=0; j<arrG[group].colStudents; j++)

{<<" "<<arrG[group].fioStudents[j]<<"\t\t|\t\t|\t\t|"<<endl;

}<<"________________________________________________________________________________"<<endl;<<"Итого:"<<endl;<<"\t\tОтлично: ______________________________"<<endl;<<"\t\tХорошо: _______________________________"<<endl;

cout<<"\t\tУдовлетворительно: ____________________"<<endl;<<"\t\tНеудовлетворительно: __________________"<<endl;

cout<<"\t\tНеявка: _______________________________\n"<<endl;("pause");

}("pause");0;

}


Содержание Введение . Постановка задачи . Разработка алгоритма . Описание функций и переменных . Блок - схема программы . Тестирование про

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ