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

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

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

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

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

Списки. Класс списка структур

Выполнил студент группы САПР-131

Кочергин Н.В.

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

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

Бежаева О.Я.

Уфа-2008.

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

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

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

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

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

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

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

#include <iostream.h>

#include <conio.h>

#include <string.h>

#include <fstream.h>

#include <string.h>

#include <stdlib.h>

struct nodebook

{ char author[21];

char name[41];

char publisher[21];

double year;

nodebook *next;};

struct nodeyear

{ double year;

int nob;

nodeyear *next;};

class books

{ private:

nodebook *bb,*enb;

nodeyear *by,*eny;

int n,m;

public:

books(){n=m=0; bb=enb=NULL; by=eny=NULL;}

~books();

void input();

void outpu();

void yearlist();};

books::~books()

{

nodebook *t_b;

nodeyear *t_y;

if(bb!=NULL)

{while(bb!=NULL)

{t_b=bb;

bb=bb->next;

delete t_b;}

enb=NULL;

n=0;}

if(by!=NULL)

{while(by!=NULL)

{t_y=by;

by=by->next;

delete t_y;}

eny=NULL;

m=0;}

}

void books::input()

{

ifstream fin;

int i;

nodebook *pb,t;

fin.open("books.txt");

do

{

fin>>t.author>>t.name>>t.publisher>>t.year;

n++;

} while(fin.good());

n--;

fin.close();

fin.open("books.txt");

pb=new nodebook;

fin>>pb->author>>pb->name>>pb->publisher>>pb->year;

pb->next=NULL;

bb=pb;

enb=pb;

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

{pb=new nodebook;

fin>>pb->author>>pb->name>>pb->publisher>>pb->year;

enb->next=pb;

pb->next=NULL;

enb=pb;}

fin.close();

}

void books::outpu()

{

ofstream fout;

nodebook *i;

fout.open("authors.txt");

for(i=bb;i!=NULL;i=i->next)

fout<<i->author<<" "<<i->name<<" "<<i->publisher<<" "<<i->year<<endl;

cout<<"File 'authors.txt' created\n";

fout.close();

}

void books::yearlist()

{

int fl;

nodebook *i;

nodeyear *py,*k;

py=new nodeyear;

py->year=bb->year;

py->nob=0;

py->next=NULL;

by=py;

eny=py;

for(i=bb;i!=NULL;i=i->next)

{fl=0;

for(k=by;k!=NULL;k=k->next)

if(i->year==k->year) {k->nob++; fl=1;}

if(fl==0)

{

py=new nodeyear; py->year=i->year;

py->nob=1; eny->next=py; py->next=NULL; eny=py;}

}

for(k=by;k!=NULL;k=k->next)

cout<<k->year<<" "<<k->nob<<endl;

getch();

}

void main()

{

clrscr();

books a;

a.input();

a.outpu();

a.yearlist();

getch();

}

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

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

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

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