 
        
        - •Содержание
- •1 Постановка задачи
- •2 Анализ задачи, выбор способа представления данных
- •3 Алгоритмы решения задачи
- •4 Реализация программы
- •4.1 Именованные константы
- •4.2 Пользовательские типы данных
- •4.3 Функции
- •5 Руководство пользователя
- •Список использованных источников
- •Приложение а – Текст программы (обязательное)
	
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Математический факультет
Кафедра математического обеспечения информационных систем
ОТЧЕТ
по домашнему заданию
по курсу «Информатика и программирование»
Программа для работы с записями о спортсменах
ОГУ 010503.62.6012.391 О
Руководитель
_______________Полежаев П.Н.
“_____”________________2012г.
Исполнитель
студент гр. 11МОС(б)ТП
_______________Иванов И.И.
“_____”________________2012г.
Оренбург 2012
Содержание
1 Постановка задачи 3
2 Анализ задачи, выбор способа представления данных 4
3 Алгоритмы решения задачи 5
4 Реализация программы 9
4.1 Именованные константы 9
4.2 Пользовательские типы данных 9
4.3 Функции 10
5 Руководство пользователя 12
Список использованных источников 13
Приложение А – Текст программы 14
1 Постановка задачи
Даны сведения (записи) о спортсменах. Каждый спортсмен описывается фамилией, именем, отчеством, датой рождения, видом спорта и количеством сыгранных спортсменом игр.
Необходимо разработать программу, включающую следующие функциональные возможности:
- Добавление новой записи, введенной с клавиатуры. 
- Удаление записи по ее номеру. 
- Поиск записей о спортсменах по указанной фамилии. 
- Сортировку записей в порядке не возрастания количества сыгранных игр. 
- Вывод всех записей на экран. 
- Сохранение всех записей в файл. 
- Чтение всех записей из файла. 
2 Анализ задачи, выбор способа представления данных
В результате анализа условия задачи принято решение представить сведения о спортсменах в виде следующей таблицы (см. таблицу 1):
Таблица 1 – Сведения о спортсменах
| Номер | Фамилия | Имя | Отчество | Дата рождения | Вид спорта | Количество сыгранных игр | 
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 
Каждая строка таблицы содержит сведения об одном спортсмене и представляет собой конкретный экземпляр структуры. Вся таблица будет храниться в виде массива экземпляров структур. Каждому столбцу данной таблицы, начиная со второго, соответствует поле структуры. Первый столбец содержит номер записи – ее индекс в массиве экземпляров структур.
Строка таблицы состоит из полей различного типа: поля 2, 3 и 4 представляют собой строки символов; поле 5 имеет сложный тип и будет представлено в виде структуры, состоящей из трех числовых полей – года, месяца и дня; поле 6 имеет тип перечисления; поле 7 – числовой тип.
Тип перечисления, используемый для поля 6, будет включать в себя следующие виды спорта: теннис, шахматы и бег.
Описание используемых в программе типов на языке программирования С++ приведено в п. 4.2.
Хранение данных в программе будет осуществляться с помощью двух переменных: массива экземпляров структур (записей), содержащих сведения о спортсменах, и количества этих спортсменов.
3 Алгоритмы решения задачи
Детальное изучение решаемой задачи позволяет выделить следующие подзадачи:
- ввод сведений об одном спортсмене с клавиатуры; 
- вывод сведений об одном спортсмене на экран; 
- добавление новой записи о спортсмене в конец массива экземпляров структур; 
- удаление из массива записи о спортсмене по ее индексу; 
- поиск в массиве записей о спортсменах, имеющих данную фамилию; 
- сортировку сведений о спортсменах в порядке не возрастания количества сыгранных игр; 
- вывод сведений обо всех спортсменах на экран в виде таблицы; 
- сохранение сведений обо всех спортсменах в файл; 
- чтение сведений обо всех спортсменах из файла; 
- отображение меню программы. 
Приведем словесное описание укрупненного алгоритма решения поставленной задачи (см. алгоритм 1):
Алгоритм 1 – Укрупненный алгоритм решения задачи
- Количество спортсменов = 0. 
- Прочитать сведения обо всех спортсменах из файла и сохранить их в массив экземпляров структур, а их число – в переменную количества. 
- Отобразить меню программы. 
- Сохранить содержимое массива экземпляров структур и их количество в файл. 
Опустим описания алгоритмов, решающих подзадачи ввода и вывода сведений об одном спортсмене в силу их очевидной тривиальности. То же самое касается алгоритма добавления новой записи о спортсмене в конец массива экземпляров структур.
Рассмотрим алгоритм удаления из массива записи о спортсмене по ее индексу (см. алгоритм 2):
Алгоритм 2 – Удаление из массива записи о спортсмене по ее индексу
- Если задан недопустимый индекс удаляемого из массива элемента, то сообщаем об этом и завершаем выполнение алгоритма. 
- В цикле последовательно выполняем сдвиг влево на одну позицию всех элементов массива, начиная с элемента, индекс которого на единицу больше индекса удаляемого элемента. 
- Уменьшаем на единицу количество спортсменов. 
Поиск в массиве экземпляров структур записей о спортсменах, имеющих указанную фамилию, осуществляется следующим образом (см. алгоритм 3):
Алгоритм 3 – Поиск в массиве записей о спортсменах, имеющих данную фамилию
- Количества найденных записей = 0. 
- Для каждого спортсмена в массиве выполнить: 
начало
- если фамилия спортсмена совпадает с искомой фамилией, то 
начало
- вывести на экран сведения о данном спортсмене; 
- количество найденных записей увеличить на 1; 
конец.
конец.
Алгоритм сортировки сведений о спортсменах в порядке не возрастания количества сыгранных игр выглядит следующим образом (см. алгоритм 4):
Алгоритм 4 – Сортировка сведений о спортсменах в порядке не возрастания количества сыгранных игр
- Для каждого i от 0 до количества спортсменов – 2 с шагом 1 
начало
- MaxIndex = i; 
- для каждого j от i + 1 до количества спортсменов – 1 с шагом 
начало
- если количество игр, сыгранных j-м спортсменом больше числа игр, сыгранным спортсменом с индексом MaxIndex, то 
начало
- MaxIndex = i; 
конец
конец
- в массиве экземпляров структур переставить местами элементы с индексами i и MaxIndex; 
конец.
Вывод сведений обо всех спортсменах на экран в виде таблицы осуществляется с помощью следующего алгоритма (см. алгоритм 5):
Алгоритм 5 – Вывод на экран сведений обо всех спортсменах
- Вывести заголовок таблицы. 
- Для каждого спортсмена в массиве выполнить: 
начало
2.1 вывести на экран сведения о данном спортсмене;
конец.
Следующий алгоритм осуществляет сохранение сведений обо всех спортсменах в файл (см. алгоритм 6):
Алгоритм 6 – Сохранение сведений обо всех спортсменах в файл
- Открыть файловый поток на запись, передав ему имя открываемого файла. 
- Сохранить в поток количество спортсменов. 
- Сохранить в поток все используемые элементы массива экземпляров структур, содержащего сведения о спортсменах. 
- Закрыть файловый поток. 
Чтение сведений обо всех спортсменах из файла осуществляется с помощью следующего алгоритма (см. алгоритм 7):
Алгоритм 7 – Чтение сведений обо всех спортсменах из файла
- Открыть файловый поток на чтение, передав ему имя открываемого файла. 
- Прочитать из потока количество спортсменов. 
- Прочитать из потока элементы массива экземпляров структур, содержащего сведения о спортсменах. 
- Закрыть файловый поток. 
Алгоритм отображения меню программы помимо вывода самого меню, осуществляет вызов алгоритмов, соответствующих пунктам меню, выбранных пользователем (см. алгоритм 8):
Алгоритм 8 – Отображение меню программы
- Делай 
- вывести заголовок меню; 
- вывести пункт 1 – “[1] Add sportsman”; 
- вывести пункт 2 – “[2] Remove sportsman”; 
- вывести пункт 3 – “[3] Search sportsman”; 
- вывести пункт 4 – “[4] Sort sportsmen ”; 
- вывести пункт 5 – “[5] Show all sportsmen”; 
- вывести пункт 6 – “[6] Exit”; 
- ввести номер выбранного пользователем пункта и сохранить в переменную UserChoice; 
- выбор (UserChoice) 
1 :
- ввести сведения о спортсмене с клавиатуры; 
- добавить запись о спортсмене в конец массива экземпляров структуры; 
- покинуть выбор; 
2 :
- ввести индекс удаляемой записи о спортсмене; 
- удалить из массива экземпляров структур элемент с введенным индексом; 
- покинуть выбор; 
3 :
- ввести фамилию для поиска; 
- выполнить поиск в массиве записей о спортсменах, имеющих данную фамилию; 
- покинуть выбор; 
4 :
- выполнить сортировку сведений о спортсменах в порядке не возрастания количества сыгранных игр; 
- покинуть выбор; 
5 :
- вывести сведения обо всех спортсменах на экран в виде таблицы; 
- покинуть выбор; 
6 :
- вывести "Bye-bye..."; 
- покинуть выбор; 
по умолчанию:
- вывести сообщение об ошибке и просьбу повторить ввод; 
все-выбор;
Пока UserChoice не равен 6.
