Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на C / C++ / Лабораторные работы / Лабораторная работа №10

.doc
Скачиваний:
24
Добавлен:
02.05.2014
Размер:
628.22 Кб
Скачать

Уфимский Государственный Авиационный Технический Университет

Лабораторная работа №10.

Классы. Класс массива структур

Выполнил студент группы

Проверил доцент

кафедры АПрИС

Бежаева О.Я.

Уфа-2008.

1.Цель работы:

Знакомство и получение навыков работы с классами на языке С++.

2. Условия задания:

Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания. Требуется найти перечень авторов с указанием числа их книг.

3. Решение задания:

  1. Алгоритм решения задания в виде блок- схемы:

2)Текст программы на языке С++:

#include<iostream.h>

#include<iomanip.h>

#include<fstream.h>

#include<conio.h>

#include<stdlib.h>

#include<string.h>

struct book

{char avtor[15];

char name[15];

char izdat[15];

int god;};

struct avtor

{char avtor[15];

int kolvo;};

class dmassiv

{private:

book *pst;

int n;

avtor *pz;

int k;

public:

dmassiv(){n=0;pst=NULL;k=0;pz=NULL;}

~dmassiv();

void inputbookfile();

void outputbook();

void perechavtor();

void outputperechavtor();

void outputperechfile();

};

void dmassiv::inputbookfile()

{ifstream fin;

char file[15];

book t;

int i;

cout<<"File name:\n";

cin>>file;

fin.open(file);

if(fin==NULL){cout<<"File not open\n";getch();exit(1);}

n=0;

do{fin>>t.avtor>>t.name>>t.izdat>>t.god;

n++;}while(fin.good());

n--;

fin.close();

pst=new book[n];

if(pst==NULL){cout<<"No dinamic memory\n";getch();exit(1);}

fin.open(file);

if(fin==NULL){cout<<"File not open\n";getch();exit(1);}

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

{fin>>pst[i].avtor>>pst[i].name>>pst[i].izdat>>pst[i].god;}

fin.close();}

void dmassiv::outputbook()

{int i;

cout<<"Ishodnik \n\n";

cout<<"ABTOP Ha3BaHiE I/I3DaHiE God\n";

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

{cout<<pst[i].avtor<<setw(10)<<pst[i].name

<<setw(10)<<pst[i].izdat<<setw(10)<<pst[i].god<<endl; }

}

void dmassiv::perechavtor()

{int i,j,fl;

pz=new avtor[n];

if(pz==NULL){cout<<"No dinamic memory\n";getch();exit(1);}

if(pz!=NULL){delete []pz;k=0;}

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

{fl=0;

for(j=0;j<k;j++)

if(strcmp(pst[i].avtor,pz[j].avtor)==0){fl=1;pz[j].kolvo++;}

if(fl==0){strcpy(pz[k].avtor,pst[i].avtor);pz[k].kolvo=1;k++;}

}

}

void dmassiv::outputperechavtor()

{int i;

cout<<"Perechen ABTOPOB\n";

cout<<"ABTOP KOLI4ECTBO\n";

for(i=0;i<k;i++)

{cout<<pz[i].avtor<<" "<<pz[i].kolvo<<endl;}

}

void dmassiv::outputperechfile()

{ofstream fout;

char file[10];

int i;

cout<<"File name:\n";

cin>>file;

fout.open(file);

if(!fout.good()){cout<<"File not created\n";getch();exit(1);}

for(i=0;i<k;i++)

fout<<pz[i].avtor<<" "<<pz[i].kolvo<<endl;

fout.close();

}

dmassiv::~dmassiv()

{if(pst!=NULL){delete []pst;n=0;pst=NULL;}

if(pz!=NULL){delete []pz;k=0;pz=NULL;}

}

void main()

{dmassiv a;

int j;

while(1)

{clrscr();

cout<<"1.Enter the table\n";

cout<<"2.Print the table at screen \n";

cout<<"3.Creating perech\n";

cout<<"4.Print perech at screen\n";

cout<<"5.Vivod\n";

cout<<"6.Exit\n\n";

cout<<"Choose 1-6\n";

cin>>j;

switch(j)

{case 1: a.inputbookfile();break;

case 2: a.outputbook();getch();break;

case 3: a.perechavtor();break;

case 4: a.outputperechavtor();getch();break;

case 5: a.outputperechfile();break;

case 6: cout<<"3ABEPIIIEHIE PAboT6I";getch();return;

default: cout<<"ERROR.Repeat Please";getch();

}

}

}

3)Результат тестирования программы:

Текстовый файл:

Работа программы:

Полученный текстовой файл: