
Программирование на C / C++ / Лабораторные работы / Лабораторная работа №12
.docУфимский Государственный Авиационный Технический Университет
Лабораторная работа №12.
Списки. Класс списка структур
Выполнил студент группы САПР-131
Кочергин Н.В.
Проверил доцент
кафедры АПрИС
Бежаева О.Я.
Уфа-2008.
1.Цель работы:
Знакомство и получение навыков работы со списками на языке С++.
2. Условия задания:
Строка таблицы данных содержит следующую информацию о книгах: автор, наименование, издательство, год издания. Требуется найти перечень годов изданий с указанием числа книг, выпущенных в эти годы.
3. Решение задания:
-
Алгоритм решения задания в виде блок- схемы:
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)Результат тестирования программы:
Текстовый файл:
Работа программы:
Полученный текстовой файл: