
курсовая работа по информатике 2 семестр / Задание на курсовую по информатике
.pdfЗадание на курсовую работу по дисциплине «Информатика»
Связать отношением наследования иерархию классов согласно варианту задания (п. 1 задания). Класс, стоящий во главе иерархии, определить как абстрактный. В каждом производном классе должно быть не менее двух уникальных полей.
Определить в классах методы для просмотра и установки полей данных. Определить в классах конструкторы и деструкторы. В конструкторах
должно осуществляться заполнение полей объектов. Деструкторы должны выводить информационные сообщения о том, какой объект его вызвал.
Написать функции для выполнения запросов (п. 2 задания). Запросы могут быть реализованы в виде внешних функций или методов классов.
Определить в классах статическое поле, предназначенное для хранения количества объектов данного класса. Предусмотреть возможность просмотра текущего количества объектов каждого класса.
В демонстрационной программе предусмотреть вывод на экран пользовательского меню, предусматривающего создание и удаление объектов, а также выполнение запросов (п. 2 задания).
Пояснительная записка к курсовой работе оформляется в соответствии со стандартами ЮУрГУ. В пояснительной записке к курсовой работе должны присутствовать:
1.Введение, заключение, список использованной литературы
2.Основная часть: описание работы функций, классов, демонстрационной программы, а также блок-схемы алгоритмов работы функций и демонстрационной программы. Блок-схемы оформляются в соответствии с ГОСТ 19.701-90 «Схемы алгоритмов, программ, данных и систем».
3.Руководство оператора (инструкция пользователю по работе с демонстрационной программой со скриншотами работы программы).
4.Листинг программы на Си++.
1

Методические указания к курсовой работе по дисциплине «Информатика»
Даны классы: Организация, Магазин, Библиотека, Печатное издание, Книга, Журнал. В демонстрационной программе предусмотреть вывод:
∙перечня печатных изданий указанного типа в указанной организации;
∙перечня организаций, содержащих печатные издания указанного типа.
1.) Данные классы можно упорядочить следующим образом
а) Отношение наследования
|
|
Организация |
|
|
|
Печатное издание |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Магазин |
|
|
Библиотека |
|
Словарь |
|
Учебник |
||||
|
|
|
|
|
|
|
|
|
|
|
|
б) Отношение агрегации
Организация |
содержит |
Печатное издание |
Реализация отношений между классами:
#define Max 5 |
|
|
|
class TOrg |
|
class TPrint |
|
{ char name[20]; |
|
{ char name[20]; |
|
char address[40]; |
|
char author[25]; |
|
class TPrint *listPrint[Max]; \\ перечень печатн. изд. |
static int num; \\ учет количества созданных объектов |
||
static int num; \\ учет количества созданных объектов TOrg |
…. |
|
|
int numPrint; \\ учет количества созд. объектов TPrint |
}; |
|
|
…. |
|
|
|
}; |
|
|
|
class TMagaz : TOrg |
class TBiblio : TOrg |
class TSlovar : TPrint |
class TUchebnik : TPrint |
{ float square; |
{ float xerox_price; |
{ int words_number; |
{ char predmet[30]; |
char work_hours[20]; |
int kolvo_zalov; |
char language[20]; |
int page_number; |
static int num; |
static int num; |
static int num; |
static int num; |
… |
… |
… |
… |
}; |
}; |
}; |
}; |
Отношение агрегации реализуется посредством включения в описание класса массива указателей на объекты соответствующего типа. В рассмотренном примере данный вид отношения реализуется посредством строки:
class TPrint *listPrint[Max];
При создании любых объектов в программе их необходимо упорядочивать в виде статических массивов. Для целей курсовой работы достаточно размерности, равной 5. Желательно вместо цифры везде, где это необходимо использовать соответствующее макроопределение, введенное в начале программы:
#define Max 5
Любые объекты создаются в программе динамически по запросу пользователя. Указатели на вновь созданные объекты должны записываться в ячейки соответствующих массивов. Количество созданных объектов класса записывается в соответствующее статическое поле класса. Пример создания печатного издания, которое находится в определенной организации
….
class TOrg *listOrg[Max]; \\ в начале программы описывается массив указателей на класс TOrg …..
…\\ где-то в программе создается i-ая организация (объект класса TMagaz или TBiblio) …..
class TSlovar *tmp = new TSlovar (); \\ создается новый объект класса TSlovar …..
…..\\ где-то в программе пользователь указывает организацию, в которую необходимо добавить новый объект класса TSlovar, после чего программа определяет индекс данной организации в массиве TOrg и записывает результат (полученный индекс) в переменную i.
…..
2
listOrg[i]->listPrint[listOrg[i]->numPrint] = tmp; \\ запись адреса нового объекта в массив listPrint i-й организации;
listOrg[i]->numPrint++; \\ учет количества печатных изданий в организации; при создании нового печатного издания– увеличение значения поля на единицу.
2)При удалении объектов осуществлять следующую последовательность действий:
2.1.физическое удаление объекта посредством операции delete;
2.2.удаление объекта из массива:
а) удаляемый элемент - последний элемент массива: в этом случае достаточно уменьшить на единицу значение переменной, хранящей значение общего количества объектов массива.
б) удаляемый элемент – не является последним элементом массива: в этом случае необходимо сместить все значения, расположенные правее удаляемого элемента на один индекс влево, после чего уменьшить на единицу значение переменной, хранящей значение общего количества объектов массива.
3)Поскольку для хранения объектов используются массивы указателей на родительские классы, необходимо каким-то образом идентифицировать тип объекта в массиве. Например, предложенный ранее массив
class TPrint *listPrint[Max];
представляет собой массив указателей на родительский класс TРrint, предназначенный для хранения адресов объектов классов TSlovar и TUchebnik. Для того, чтобы идентифицировать тип объекта в i-ой ячейке массива TPrint, необходимо в описании классов TSlovar и TUchebnik предусмотреть поле с именем класса:
char classname[20];
При создании объекта класса TSlovar или TUchebnik, в конструкторах данных классов необходимо предусмотреть заполнение данного поля соответствующим значением, например:
strcpy(classname,” словарь”);
В этом случае, при необходимости, можно идентифицировать тип объекта в массиве listPrint: if (strcmp(listOrg[i]->listPrint[j]->classname, “ словарь”)==0)
{
....\\ выполняются действия над объектом класса TSlovar
}
…
4)Реализация пользовательского меню:
/* описание функций, реализующих основные действия меню*/ void AddOrg() {........}
void AddPrint() {........} void DelOrg() {........} void DelPrint() {........}
void VivodOfPrints() {........} void VivodOfOrgs() {........}
/* функция вывода меню на экран и обработка результатов выбора пользователя */ int PrintMenu()
{
int ch; system(“cls”);
printf(“\n 1 Добавить организацию”); printf(“\n 2 Добавить печатное издание”); printf(“\n 3 Удалить организацию”); printf(“\n 4 Удалить печатное издание”);
printf(“\n 5 Перечень печатных изданий указанного типа в указанной организации”); printf(“\n 6 Перечень организаций, содержащих печатные издания указанного типа”); printf(“\n Введите № меню, 0 - завершение работы: ”);
scanf(“%d”,&ch); getchar(); switch (ch)
{case 1 : { AddOrg(); break;} case 2 : { AddPrint(); break;}
case 3 : { DelOrg(); break;} case 4 : { DelPrint(); break;}
case 5 : { VivodOfPrints(); break;} case 6 : { VivodOfOrgs(); break;} default : break;
}
rerurn ch;
}
3
/* реализация демонстрационной программы в функции main */ void main()
{
system(“chcp 1251”);
while (PrintMenu()); \\ бесконечный цикл, который заканчивается, когда функция PrintMenu возвращает 0 printf(“ Работа программы окончена. До свидания!!!”);
getchar();
}
5) Реализация функции вывода организаций, содержащих печатные издания указанного типа:
void VivodOfPrints() {char type[20];
int i, j, mark;
printf(“\n--- Функция вывода организаций, содержащих печатные издания указанного типа ---\n”); do
{
printf(“ Введите тип требуемого печатного издания (выход – 0): ”); gets(type);
if (strcmp(type,”0”) == 0) break; for (i = 0; i< TOrg::num; i++) { mark = 0;
for (j = 0; j< TOrg[i].numPrint; j++)
if (strcmp(TOrg[i]->listPrint[j]->classname, type) == 0) mark++;
if (mark > 0) TOrg[i]->VivodPoley(); \\ метод, отображающий на экране содержимое полей объекта,
|
в базовом классе должен быть описан как виртуальный |
} |
|
}while(1); |
|
printf(“------------------------------------------- |
--------------------------------\n”); |
printf(“ Для продолжения работы нажмите Enter….”); getchar();
}
4