Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Качесова Л.Ю.-Прогр.2--20130305084643.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
258.05 Кб
Скачать

СТО АлтГТУ 13.62.1.0667-2011

Методические указания к лабораторным работам

2-й семестр

Порядок выполнения лабораторных работ

  1. Познакомиться с темой и целью лабораторной работы.

  2. Изучить необходимые к выполнению лабораторной работы теоретические сведения и примеры программ.

  3. Познакомиться с общим заданием к лабораторной работе и индивидуальным вариантом задания.

  4. Написать и отладить программу решения задачи индивидуального варианта.

  5. Протестировать работу программы на различных наборах исходных данных.

  6. Продемонстрировать преподавателю работу программы.

  7. Оформить отчет.

  8. Защитить лабораторную работу.

Оборудование, технические средства, инструмент

Лабораторные работы выполняются в компьютерном классе, оснащенном персональными компьютерами. На компьютерах должна быть установлена система программирования, поддерживающая создание консольных программ на С++ (например, Geany, Qt Creator).

Требования к оформлению отчета

Отчет по лабораторной работе оформляется в виде принтерных распечаток на сброшюрованных листах формата А4. Он должен содержать:

  • титульный лист;

  • задание к лабораторной работе (общее задание и индивидуальный вариант задания);

  • постановка задачи;

  • листинг программы;

  • тестовые примеры, иллюстрирующие все варианты работы программы.

Требования к защите лабораторных работ

После оформления отчета, лабораторную работу защищают, т. е. поясняют алгоритм работы программы и отвечают на контрольные вопросы.

Лабораторная работа №2. Отношения между классами

Цель работы: получить практические навыки организации и использования отношений между классами и объектами в С++.

2.1 Наследование и полиморфизм

До выполнения первого задания лабораторной работы необходимо изучить как в С++ организуется между классами отношение открытого простого наследования и реализуется полиморфизм.

В качестве примера использования отношения наследования и полиморфизма в листинге 2.1 представлена программа, созданная в Geany, в которой реализовано взаимодействие объектов трех классов: базового класса CPublication и производных классов CBook и CJournal.

Результат выполнения программы в различных вариантах представлен на рисунке 2.1.

Листинг 2.1

// CPublication.h

#ifndef CPUBLICATION_H_

#define CPUBLICATION_H_

//базовый класс "публикация"

class CPublication

{ protected:

char title[80];//название публикации

Int year; //год издания

public:

CPublication(char Title[],int Year);

virtual ~ CPublication(){}

Virtual void Display();//вывод описания публикации

};

#endif

// CPublication.cpp

#include "CPublication.h"

#include <string.h>

#include <iostream>

using namespace std;

CPublication::CPublication(char Title[],int Year)

{ strcpy(title,Title);

year = Year;

}

Void cPublication:: Display()

{ cout << "\nПубликации: ";

cout << "\n Название: "<< title;

cout << "\n Год издания: " << year;

}

// CBook.h

#ifndef CBOOK_H_

#define CBOOK_H_

#include "CPublication.h"

//производный класс "книга"

class CBook : public CPublication

{ protected:

char author[80]; //автор

public:

CBook(char Title[],int Year,char Author[]);

virtual ~ CBook(){}

virtual void Display(); //вывод описания книги

};

#endif

// CBook.cpp

#include "CBook.h"

#include <iostream>

#include <string.h>

using namespace std;

CBook::CBook(char Title[],int Year,char Author[]): CPublication(Title,Year)

{ strcpy(author,Author);

}

void CBook::Display()

{cout << "\nКнига: ";

cout << "Автор: " << author << " ";

cout << "Название: "<< title << " ";

cout << "Год издания: " << year << "\n";

}

// CJournal.h

#ifndef CJOURNAL_H_

#define CJOURNAL_H_

#include "CPublication.h"

// производный класс "журнал"

class CJournal : public CPublication

{ protected:

int number; //номер журнала

public:

CJournal(char Title[],int Year, int Number);

virtual ~ CJournal(){}

virtual void Display();//вывод описания журнала

};

#endif

// CJournal.cpp

#include "CJournal.h"

#include <iostream>

//#include <string.h>

using namespace std;

CJournal::CJournal(char Title[],int Year,int Number): CPublication(Title,Year)

{ number = Number;

}

void CJournal::Display()

{ cout << "\nЖурнал: ";

cout << "Название: "<< title << " ";

cout << "Год издания: " << year << " ";

cout << "Номер: " << number << "\n";

}

// main.cpp

#include "CPublication.h"

#include "CJournal.h"

#include "CBook.h"

#include <string.h>

#include <iostream>

using namespace std;

void vvod(char title1[], int &year1)

{ //ввод названия и года издания публикации

cout << "\nНазвание:"; cin.get();

cin.getline(title1,80);

cout << "\nГод издания:"; cin >> year1;

}

int main()

{ int nMenu, flag = 1, kol;

char title1[80];//название публикации

int year1; //год издания публикации

char author1[80]; //автор книги

int number1; //номер журнала

int i = 0; //индекс нового издания

CPublication* p[100];

cout <<"\n Количество публикаций: ";cin >> kol;

while(i < kol && flag)

{ // вывод пунктов меню

cout<<"\nНовое издание. Введите: " << endl;

cout<<"1-для книги,2-для журнала,3-выход\n";

cin >> nMenu;

switch (nMenu)

{ case 1 : cout << "\nАвтор:"; cin.get(); cin.getline(author1,80);

vvod(title1, year1);

p[i++] = new CBook(title1, year1, author1); break;

case 2 : vvod(title1, year1);

cout << "\nНомер журнала:"; cin >> number1;

p[i++] = new CJournal(title1, year1, number1 ); break;

default : flag = 0; break;

}

}

// вывод описаний изданий

for (int id = 0; id < kol; id++)

{ p[id]->Display();

delete p[id];

}

}

Рисунок 2.1 – Результат выполнения программы

Задание 1: Разработать консольную программу на языке С++, в которой необходимо определить базовый класс и на его основе производные классы. Кроме закрытых полей с данными в классах должны быть методы доступа, конструкторы с параметрами, деструктор, также методы и функции-друзья в соответствии с индивидуальным вариантом задачи. С использованием массива указателей на базовый класс создать массив объектов производных классов и организовать работу с ним..

  1. Базовый класс «СТУДЕНТ» описывает следующие данные о студентах университета: ФИО, год поступления, курс, номер группы, размер стипендии, оценки по n предметам. В состав класса входят следующие функции: виртуальный метод просмотра информации о студенте, функция-друг, которая вычисляет средний балл и выводит ФИО студента, у которого он максимальный. Производный класс «СТУДЕНТ-ОБЩЕСТВЕННИК» содержит следующие элементы: общественная работа, процент надбавки к стипендии, переопределенный метод просмотра информации о студентах-общественниках. Производный класс «СТУДЕНТ-СПОРТСМЕН» содержит следующие элементы: вид спорта, переопределенный метод просмотра информации о студентах-спортсменах.

  2. Базовый класс «СОТРУДНИК» описывает следующие данные о сотрудниках фирмы: ФИО сотрудника; табельный номер; количество отработанных часов за месяц; почасовой тариф. В состав класса входят следующие функции: виртуальная функция просмотра данных о сотрудниках; функция-друг, которая позволяет вывести размер заработанной платы каждого сотрудни­ка фирмы за вычетом подоходного налога, который составляет 13 % от суммы заработка. Производный класс «СОТРУДНИК-КОМАНДИРОВКИ» содержит следующие элементы: количество командировочных дней в течение месяца; процент надбавки к зарплате за каждый день командировки; переопределенную функцию просмотра информации о сотрудниках, которые в теку­щем месяце побывали в командировке. Производный класс «СОТРУДНИК-ОБЩЕСТВЕННИК» содержит следующие элементы: общественная работа; переопределенную функцию просмотра информации о сотрудниках-общественниках.

  3. Базовый класс «АБИТУРИЕНТ» описывает следующие данные об абитуриентах, сдавших вступительные экзамены в университет: ФИО; адрес; оценки по предметам. В состав класса входят следующие функции: виртуальная функция просмотра данных о абитуриентах; функция-друг, позволяющая определить количество абитуриентов, проживающих в заданном городе. Производный класс «АБИТУРИЕНТ-ЛЬГОТНИК» содержит следующие данные: описание льготы и переопределенную функцию просмотра информации об абитуриентах, имеющих льготы при поступлении. Производный класс «АБИТУРИЕНТ-СПОРТСМЕН» содержит следующие данные: вид спорта, соревнования, награды и переопределенный метод вывода данных об абитуриентах- спортсменах.

  4. Базовый класс «АВТОБУСНЫЙ РЕЙС» описывает следующие данные-элементы: номер рейса, пункт назначения, цена билета, дата и время отправления, дата и время прибытия на конечный пункт и следующие методы: виртуальную функцию просмотра информации об автобусных рейсах, функцию-друга, которая должна вывести информацию о рейсах, позволяющих добраться до указан­ного пункта. Производный класс «РЕЙС-ЭКСПРЕСС» содержит следующие данные: процентная надбавка на цену билета и переопределенную функцию просмотра данных о рейсах экспресс. Производный класс «МЕЖДУНАРОДНЫЙ РЕЙС» содержит следующие данные: страна и переопределенную функцию просмотра данных о международных автобусных рейсах.

  5. Базовый класс «ТЕЛЕФОН» описывает данные о разговорах на междугородней АТС: дату разговора, код и название города, продолжительность разговора, тариф, номер телефона в этом городе, номер телефона абонента. В класс входят следующие функции: виртуальная функция просмотра данных о разговорах на междугородней АТС, функция-друг, которая подсчитает суммарное время разговора с указанным городом. Производный класс «ТЕЛЕФОН-ЛЬГОТЫ» содержит следующие данные о льготных тарифах: вид льгот, процент для льготного тарифа, переопределенную функцию просмотра данных о льготных разговорах на междугородней АТС. Производный класс «СРОЧНЫЕ ВЫЗОВЫ» содержит следующие данные: надбавка к тарифу за срочность вызова, переопределенную функцию просмотра данных о срочных разговорах на междугородней АТС.

  6. Базовый класс «ТОВАР» описывает данные о товарах, имеющихся на складе: наименование товара, фирма-изготовитель. В класс входят следующие функции: виртуальная функция просмотра данных о товарах, имеющихся на складе; функция-друг, которая позволяет вывести товары и их данные для указанной фирмы-изготовителя. Производный класс «ИМПОРТИРУЕМЫЙ ТОВАР» содержит следующие данные: страна-поставщик; дата поставки; количество единиц товара; переопределенную функцию просмотра информации об импортируемых товарах. Производный класс «ЭКСПОРТИРУЕМЫЙ ТОВАР» содержит следующие данные: страна-заказчик; количество единиц товара, переопределенную функцию просмотра информации об экспортируемых товарах.

  7. Базовый класс «ДЕТАЛЬ» описывает дан­ные о партиях деталей, выпускаемых различными цехами завода: наименование детали; количество деталей; номер цеха, где они были изготовлены. В класс входят следующие функции: виртуальная функция просмотра дан­ных о партиях деталей, выпускаемых различными цехами завода; функция-друг, позволяющая вычислить общее количество изделий указанного наимено­вания. Производный класс «ДЕТАЛЬ_1» имеет следующие элементы: наличие дополнительного антикоррозийного покрытия; переопределенная функция просмотра дан­ных о партиях деталей. Производный класс «ДЕТАЛЬ_2» имеет следующие элементы: коэффициент надежности в процентах для разных типов деталей; переопределенная функция просмотра дан­ных о партиях деталей.

  8. Базовый класс «ТОВАР» описывает данные о товарах, имеющихся в компьютерном магазине: шифр товара, дата поступления товара; фирма-поставщик, фирма-изготовитель, количество единиц товара. В класс входят следующие функции: виртуальная функция просмотра данных о товарах, имеющихся в магазине; функция-друг, которая выводит информацию о фирмах-поставщиках, которые поставили больше всего товаров. Производный класс «ТОВАР-КОМПЬЮТЕР» содержит следующие данные: тип компьютера (портативный, настольный); производитель; тип процессора; частота процессора; емкость ОЗУ; емкость винчестера, переопределенную функцию просмотра информации о товарах - компьютерах. Производный класс «ТОВАР-МОНИТОР» содержит следующие данные: размер монитора, тип монитора, переопределенную функцию просмотра информации о товарах - мониторах.

  9. Базовый класс «УЧАСТНИК СОРЕВНОВАНИЙ» описывает данные об участниках спортивных соревнований: название соревнования, ФИО спортсмена, возраст, рост, вес. В класс входят следующие элементы-функции: виртуальная функция просмотра информации об участниках спортивных соревнований; функция-друг, которая выведет информацию о самом легком спортсмене. Производный класс «УЧАСТНИК СОРЕВНОВАНИЙ ПО ПЛАВАНИЮ» содержит элементы-данные: результирующее время и переопределенную функцию просмотра данных об участниках соревнований по плаванию. Производный класс «УЧАСТНИК СОРЕВНОВАНИЙ ПО СТРЕЛЬБЕ» содержит элементы-данные: набранные балы и переопределенную функцию просмотра данных об участниках соревнований по стрельбе.

  10. Базовый класс «АВИА-РЕЙСЫ» описывает следующие данные-элементы: номер рейса; пункт назначения; цена билета; время отправления; время прибытия на конечный пункт. В класс входят следующие функции: виртуальная функция просмотра информации об авua - рейсах; функция-друг для вывода информации о рейсах, отправляющихся в указанный пункт назначения по указанной цене билета. Производный класс «АВИА-РЕЙСЫ ПО СТРАНЕ» содержит следующие данные: дни вылета; переопределенную функцию просмотра данных о внутренних авua-рейсах. Производный класс «МЕЖДУНАРОДНЫЕ АВИА-РЕЙСЫ» содержит: страна, дата отправления и дата прибытия, переопределенную функцию просмотра данных о международных авua-рейсах.

  11. Базовый класс «БИБЛИОГРАФ» описывает следующие дан­ные: ФИО сотрудника библиотеки, год рождения, год поступления на работу, категория (библиограф, старший библиограф, главный библиограф, заведующий отделом), название отдела. В класс входят следующие функции: виртуальная функция вывода всех данных о сотруднике библиотеки; функция-друг, которая позволяет вывести ФИО старших библиографов отдела, название которого вводится с клавиатуры. Производный класс «БИБЛИОГРАФ_1» имеет следующие элементы: количество выполняемых справок-заказов в день и переопределенную функцию вывода всех данных о сотруднике библиотеки. Производный класс «БИБЛИОГРАФ_2» имеет следующие элементы: количество выполняемых тематических справок в месяц и переопределенную функцию вывода всех данных о сотруднике библиотеки.

  12. Базовый класс «ПРЕПОДАВАТЕЛЬ» описывает данные: ФИО преподавателя, должность, кафедра. В класс входят следующие функции: виртуальная функция просмотра данных о преподавателе; функция-друг, которая позволяет вывести список преподавателей для указанной кафедры. Производный класс «КУРАТОР» содержит следующие данные: название курируемой группы, номер курса; переопределенную функцию просмотра информации о преподавателях-кураторах. Производный класс «НАУЧНЫЙ РУКОВОДИТЕЛЬ» содержит следующие данные: тема, ФИО студента, переопределенную функцию просмотра информации о преподавателях - научных руководителях.