". h"файл
|
". cpp" файл
|
Пространство
имен (namespace)
|
rf.
H
|
rf.
cpp
|
rf
|
forward.
H
|
forward.
cpp
|
forward
|
halfback.
H
|
halfback.
cpp
|
halfback
|
centerforward.
H
|
centerforward.
cpp
|
centerforward
|
flangforward.
H
|
flangforward.
cpp
|
flangforward
|
centerhalfback.
H
|
centerhalfback.
cpp
|
centerhalfback
|
flangforward.
H
|
flangforward.
cpp
|
flangforward
|
rus.
H
|
rus.
cpp
|
rus
|
useful_functions.
H
|
useful_functions.
cpp
|
someusefulfunctions
|
Colour.
H
|
Colour.
cpp
|
colour
|
functions_in_list.
H
|
functions_in_list.
cpp
|
mylist
|
somemenues.
H
|
somemenues.
cpp
|
stdmyinterfacefunctions
|
program.
H
|
program.
cpp
|
myprogram
|
|
main.
cpp
|
|
2.1
"Дерево" объектов
Одной из задач курсового проектирования было создание так
называемого "дерева" объектов. Автор курсового проектирования
предложил модель, представленную на рисунке 18. Следует отметить, что главным
классом (классом родителем) является верхний класс, а остальные классы (классы
потомки) наследуют все методы и данные классов предков публичным способом
наследования. При этом наследование идет сверху вниз (указано с помощью стрелок
на рисунке).
Рисунок 18.
Класс-родитель rf, который описан в одноименном файле rf. h, содержит основные поля
данных записи, соответствующей каждому футболисту:
private:
Club; // футбольный клуб
string Number; // игровой номер
string Age; // возраст
string Name; // имя футболиста
При объявлении данных использовалось ключевое слово "private". Это означает, что
данные класса country закрытые и получить доступ к ним можно только при помощи
специальных методов, описанных ниже (в качестве примера приводится метод
доступа к переменной Name, содержащей название имя футболиста).
// имя футболиста
inline string GetName () {return Name; }void
SetName (string &s) {Name = s; }
Метод inline<тип возвращаемого значения>Get… () возвращает
соответствующее поле данных, а метод - inlinevoidSet… (<тип сохраняемого
значения>&s) заполняет соответствующее поле данных. В данном случае в этом
заключается принцип инкапсуляции, одного из свойств объектно-ориентированного
программирования.
Кроме методов, представленных выше, класс countryсодержит также ряд
следующих методов:
// обработка данных
virtual void Printing (); // вывод на экранvoid
SetingNewData (); // заполнение с клавиатуры
virtual void Uploading (ostream &); // загрузка в файл
// действия
virtual void Whatzadacha () {}; // главная задачаvoid
Whatvtorzadacha () {}; // вторичная задача () {}; // рабочая нога
Все методы, служащие для обработки данных - виртуальные
(определяются ключевым словом "virtual"), они могут быть использованы для обработки
информации, содержащейся в объекте определенного класса.
То же самое касается и методов, описывающих некие действия,
совершаемые объектами. К примеру, для Центрального нападающего и Флангового
нападающего актуальным является действие, описывающее их задачу, но задача этих
футболистов выглядит по-разному, то есть метод описывающий действие на поле
один и тот же, но результат его выполнения различен для объектов разных классов
(в нашем случае эти объекты - Центральный нападающий и Фланговый нападающий). В
этом заключается смысл полиморфизма в парадигме объектно-ориентированного
программирования.
Также в классе countryреализована такая возможность языка C ++ как перегрузка
оператора. Был перегружен оператор == с целью замены действия (strstr
(getTypeName () , str_1)! = NULL).
2.2 Работа со
списком
Еще одной задачей курсового проектирования было создание
контейнера типа "список" и ряда функций для его обработки. Прототипы
этих функций описаны в файле "functions_in_list. h”, а их реализация в файле "functions_in_list. cpp”. Пространство имен
stdmyspisok содержит следующие функции обработки списка:
// включение нового элемента в список с
клавиатуры
void IncludeElement (list <Rf*>&, Rf
*);
// включение нового элемента в список из файла
void IncludeElementFromFile (list
<Rf*>&, Rf *, char *);
// поиск элемента
Void SearchingElement (list <Rf*>&, Rf
*, string &, const char *); // печать всего списка(list<Rf*>&);
// печать конкретного элемента из списка
voidPrintElementFromList (list<Rf*>&,
int&);
// печать определенной категории списка
void PrintCategoryFromList (list
<Rf*>&, const char *);
// удаление элемента из списка
void DeleteElementFromList (list
<Rf*>&, int &);
// удаление категорию из списка
void DeleteCategoryFromList (list
<Rf*>&, const char *);
// печать конкретного элемента из списка в файл
void PrintElementFromListToFile (list <Rf*>&, int &, char *);
// печать категории из списка в файл
void PrintCategoryFromListToFile (list <Rf*>&, const char *, char *); // Печать всего
списка в файл
void PrintListToFile (list <Rf*>&, char
*);
// Печать действий, выполняемых объектом
void PrintAllObjectsActions (list <Rf*>&);
В качестве аргумента во всех этих функциях фигурирует список
объектов класса Rf. Это означает, что к данному заголовочному файлу необходимо
подключить заголовочные файлы всех классов, из которых состоит
"дерево" и их пространства имен:
#include "rf. h"
#include "flanghalfback. h"
#include "centerhalfback. h"
#include "flangforward. h"
#include "centerforward. h"namespace
rf;namespace flanghalfback;namespace centerhalfback;namespace
flangforward;namespace centerforward;
Также необходимо подключение стандартной библиотеки <list> для получения
возможности использования стандартных библиотечных функций работы со списком:
#include <list>
2.3
Программный интерфейс
Программный интерфейс организуют функции, представленные в
следующих пространствах имен:
· rus
· colour
· stdmyinterfacefunctions
· myprogram
Пространство имен rus.
Пространство имен stdrus содержит единственную функцию для корректного
вывода букв русского алфавита в консольное меню:
* Rus (const char *); // русификация строки вывода
консольное меню
При реализации этой функции была использована функция
перекодировки AnsiToOem (constchar *, char *) из стандартной библиотеки<windows. h>.
Пространство имен colour.
В пространстве имен colour описаны функции настройки цветов
фона и текста
#include <windows. h>
// устанавливает цвет текста и подложки в консоли
void SetColor (ConsoleColor text, ConsoleColor
background);
// устанавливает цвет в меню и подменю
void SetColorMenu ();
// устанавливает цвет текста и фона в рабочей
области
void SetColorWorkPlace ();
Параметрыtextиbackground - коды цветов текста и
фона.
Пространство имен stdmyinterfacefunctions
В пространстве имен stdmyinter face functions описаны
функции, реализующие и синхронизирующие работу всех подменю программы.
// возврат назад
void Return (int);
// проверка на введенный элемент списка
int Checking (list <Rf*>&spisok, int &number);
// вводим имя файла
void interfaceIncludeNewElementInListByKeyboard
(list <Rf*>&);
// добавляет элемент списка в конец (заполнение
из файла)
voidinterfaceIncludeNewElementInListFromFile
(list<Rf*>&);
// поиск (по названию страны и соответственно по
категориям)
void interfaceSearchingList (list
<Rf*>&);
void interfaceDeleteSomethingFromList (list
<Rf*>&);
// распечатка
void interfacePrintList (list <Rf*>&);
// сохранение в файл
void interface Print List In File (list
<Rf*>&);
Для корректной работы этих функций необходимо подключение
следующих файлов и пространств имен:
#include "functions_in_list. h"
#include "Colour. h"namespace space
stdmyspisok; namespace colour;
Пространство имен myprogram
Пространство имен myprogram содержит единственную функциюprogram, которая реализует
работу главного меню программы. Необходимо подключение файла "somenues. h" и соответствующего
ему пространства имен:
#include "somemenues. h"namespace
stdmyinterfacefunctions;myprogram
{Program (list <Rf*>&);
}
Заключение
В процессе курсового проектирования были выполнены следующие
задачи:
· реализовано "дерево" объектов,
состоящее из семи классов;
· реализован список объектов;
· реализованы методы объекта, такие как
отображение полей данных, загрузка данных из файла, сохранение данных в файл,
добавление данных об объекте с клавиатуры;
· реализованы следующие методы работы со
списком: добавление элемента, поиск элемента в списке, загрузка элементов
списка из файла, сохранение списка в файл, печать списка на экране, удаление
элемента из списка.