Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет ЛР 8.docx
Скачиваний:
0
Добавлен:
31.08.2019
Размер:
234.5 Кб
Скачать

Министерство образования и науки Российской федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования «Алтайский государственный технический университет им. И. И.Ползунова»

Факультет информационных технологий.

Кафедра систем автоматизированного проектирования

Отчет защищен с оценкой ________________

Преподаватель __________________________

(подпись)

«__________» ____________________ 2011 г.

Отчет

по лабораторной работе № 2

Отношения между классами и объектами.

(название лабораторной работы)

по дисциплине «Программирование»

Студент группы ИВТ-12 В.А. Меркулов 10 ВАРИАНТ

(И. О., Фамилия) Вариант

Преподаватель доцент Л. Ю. Качесова

Барнаул 2012

Вариант 10

Задание 1

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

Алгоритм

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

#include <iostream>

#include <conio.h>

using namespace std;

//bazovii class AviaR

class AviaR

{

friend void function(AviaR p[], int zB,char pN[])

{

if (zB==p->zena)

{

if (strcmp(p->punctNz,pN)==0)

{

p->Display();

cout<<"\n";

}

}

}

protected:

int num; //nomer reysa

char punctNz[25]; //punkt naznachenia

int zena; //zena bileta

char vremOtpr[15];//vrema otpravlenia

char vremPrb[10]; //vrema pribitia

public:

AviaR();

virtual ~ AviaR(){}

virtual void Display();//vivod dannih

};

AviaR::AviaR()

{ //

cout<<"\n Введите номер рейса: ";cin>>num;

cout<<"\n Введите пункт назначения: "; cin>>punctNz;

cout<<"\n введите цену билета: "; cin>>zena;

cout<<"\n введите время отправления: "; cin>>vremOtpr;

cout<<"\n введите время прибытия: "; cin>>vremPrb;

}

void AviaR::Display()

{

cout << "\n номер рейса:" << num;

cout << "\n пункт назначения:" << punctNz;

cout << "\n цена билета:" << zena;

cout << "\n время отправления:"<< vremOtpr;

cout << "\n время прибытия:" << vremPrb;

}

//proizv class AviaR_1 po strane

class AviaR_1 : public AviaR

{

protected:

char dv[10]; //dni vileta

public:

AviaR_1();

virtual ~ AviaR_1(){}

virtual void Display(); //vivod dannih

};

AviaR_1::AviaR_1()

{

cout << "\n Дни вылета:"; cin >> dv;

}

void AviaR_1::Display()

{cout << "\n АВИА-РЕЙСЫ ПО СТРАНЕ: ";

cout << "\n Дни вылета: " << dv << " ";

cout << "\n номер рейса:" << num;

cout << "\n пункт назначения:" << punctNz;

cout << "\n цена билета:" << zena;

cout << "\n время отправления:"<< vremOtpr;

cout << "\n время прибытия:" << vremPrb;

}

// proizv class AviaR_2 mezgorod

class AviaR_2 : public AviaR

{ protected:

char strana [25];

char datotpr[10];

char datprib[10];

public:

AviaR_2();

virtual ~ AviaR_2(){}

virtual void Display();

};

AviaR_2::AviaR_2()

{

cout << "\n страна:"; cin>> strana;

cout << "\n дата отправления: "; cin>> datotpr ;

cout << "\n дата прибытия: "; cin>> datprib ;

}

void AviaR_2::Display()

{ cout << "\n МЕЖДУНАРОДНЫЕ АВИА-РЕЙСЫ: ";

cout << "\n страна: "<< strana << " ";

cout << "\n дата отправления: " << datotpr << " ";

cout << "\n дата прибытия: " << datprib << " ";

cout << "\n номер рейса:" << num;

cout << "\n пункт назначения:" << punctNz;

cout << "\n цена билета:" << zena;

cout << "\n время отправления:"<< vremOtpr;

cout << "\n время прибытия:" << vremPrb;

}

int main()

{ setlocale(0,"Rus");

int zb; char pN[25];

int nMenu, flag = 1, kol;

int i = 0;

AviaR* p[100];

cout <<"\n Количество рейсов: ";cin >> kol;

while(i < kol && flag)

{

cout<<"\n Новая запись. Введите: "<< endl;

cout<<"1-Авиа-рейс по стране 2-Международный авиа-рейс 3-выход\n";

cin >> nMenu;

switch (nMenu)

{ case 1 : p[i++] = new AviaR_1(); break;

case 2 : p[i++] = new AviaR_2(); break;

default : flag = 0; break;

}

}

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

{ p[id]->Display();

}

cout<<"\n\n Введите цену билета:"; cin>>zb;

cout<<"\n\n Введите пункт назначения:"; cin>>pN;

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

{

function(p[id],zb,pN);

}

getch();

}

Тесты:

Задание 2

Класс «ЛЕКАРСТВО» содержит закрытые поля: название лекарства, цена, показания к применению, противопоказания и метод вывода сведений о лекарстве. Класс «АПТЕКА» содержит закрытые поля: название аптеки, номер аптеки, массив объектов класса «ЛЕКАРСТВО», метод поступления новых лекарств в аптеку, метод поиска лекарства по названию и метод вывода списка лекарств аптеки.

Алгоритм

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

#include <iostream>

#include <conio.h>

#include <string>

#include <stdio.h>

using namespace std;

// objavlenie classa

class Medican

{

private:

double zena;

string pok;

string prpok;

public:

char nazv[20];

Medican();

void Display();

};

class Apteka

{

private:

char name[20];

int num;

public:

Medican *p[20];

int n;

Apteka();

void Poisk(char[]);

void Display();

void NewMed();

};

Apteka::Apteka()

{

cout<<"\n vvedite nazvanie apteki: ";cin>>name;

cout<<"\n vvedite nomer apteki: ";cin>>num;

cout<<"\n vvedite kol-vo lekarstv: ";cin>>n;

for (int i=0;i<n;i++)

p[i]=new Medican();

}

void Apteka::NewMed()

{

p[n++]=new Medican();

}

void Apteka::Poisk(char *Nazv)

{

for (int i=0;i<n;i++)

if(strcmp(p[i]->nazv,Nazv)==0)

{

cout<<"\n\n nazvanie apteki: "<<name;

cout<<"\n nomer apteki: "<<num;

p[i]->Display();

}

}

void Apteka::Display()

{

cout<<"\n\n NAZVANIE APTEKI: "<<name;

cout<<"\n NOMER APTEKI: "<<num;

for (int i=0;i<n;i++)

p[i]->Display();

}

Medican::Medican()

{

cout<<"\n vvedite nazvanie lekarstva: "; cin>>nazv;

cout<<"\n vvedite zenu: "; cin>>zena;

cout<<"\n vvedite pokazania k primeneniu: "; cin>>pok;

cout<<"\n vvedite protivopokazania k primeneniu: "; cin>>prpok;

}

void Medican::Display()

{

cout<<"\n\n nazvanie lekarstva: "<<nazv;

cout<<"\n zena: "<<zena<<" RUR";

cout<<"\n pokazania k primeneniu: "<<pok;

cout<<"\n protivopokazania k primeneniu: "<<prpok;

}

int main()

{

int n,Menu,flag=1,NUMER;

Apteka *q;

char Nazv[20];

cout<<"\n kol-vo aptek:";cin>>n;

q=new Apteka [n];

while(flag)

{

cout<<"\n\n Nazmite:\n 1-Prosmotret' dannie 2-Poisk lekarstva 3-Dobavit' lekarstvo 4-Vihod \n";

cin >> Menu;

switch (Menu)

{

case 1 :for (int i=0;i<n;i++)

q[i].Display(); break;

case 2 : {cout<<"\n\n poisk: \n";

cout<<"\n vvedite nazvanie lekarstva:";cin>>Nazv;

for (int i=0;i<n;i++)

q[i].Poisk(Nazv); break;}

case 3: {cout<<"\n vvedite nomer apteki, v kot. hotite dobavit' lekarstva:";cin >>NUMER;

q[NUMER-1].NewMed();break;}

default : flag=0; break;

}

}

getch();

}

Тесты:

Вопросы (часть 1)