Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

WORD - файл 1.doc


WORD
скачать (114.5 kb.)

Доступные файлы (1):

1.doc115kb.16.11.2011 00:16скачать

Загрузка...

1.doc

Реклама MarketGid:
Загрузка...
Лабораторная работа №6

Тема: Списки. Класс списка структур.

Цель: Знакомство и получение навыков работы со списками.

Задание: Задание: 1. Исходные данные вводятся из файла.

2. Результаты выводятся на экран и в файлы.

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


Листинг программы:

#include <iostream.h>

#include <fstream.h>

#include <conio.h>

#include <iomanip.h>

#include <string.h>

#include <stdlib.h>

const int L=30;

struct spisok

{char fam[11],name[8],ot[15], gr[10];

int bal;

} ;

struct name2

{ char name[6];

int kol;

};

struct node1

{ spisok ss;

node1 *next;

};

struct node2

{ name2 sb;

node2 *next;

};

class dmassiv

{ private:

node1 *beg1;

void clear1();

node2 *beg2;

void clear2();

public:

dmassiv () { beg1=NULL; beg2=NULL; } ;

~dmassiv () {clear1(); clear2(); } ;

void outputperech ();

void uporjad ();

void inputsp ();

void outputsp ();

void outputperechf();

void makeperech ();

void add();

void delet();

void redakt (); };

void dmassiv::clear1()

{ node1 *ps;

while (beg1!=NULL)

{ ps=beg1;

beg1=beg1->next;

delete ps;}}

void dmassiv::clear2()

{ node2 *pb;

while (beg2!=NULL)

{ pb=beg2;

beg2=beg2->next;

delete pb;}

}

void dmassiv::inputsp ()

{ ifstream fin;

char file [L];

node1 *p;

cout<<"Imja vhodnogo faila";

cin>>file;

fin.open (file);

if (fin.fail ()) { cout<<file<<"ne otkryvaetsa"; getch (); exit(1);}

if (beg1!=NULL) clear1();

do{ p=new node1;

if (p==NULL) {cout<<" net pamjati\n"; getch(); exit (1);}

fin>>p->ss.fam>>p->ss.name>>p->ss.ot>>p->ss.gr>>p->ss.bal;


if(fin.fail()){ cout<<"fail sozdan"; getch(); fin.close(); delete p; return;};

p->next=beg1;

beg1=p;

} while (fin.good());

}


void dmassiv::outputsp ()

{ int i;

node1 *p;

for (p=beg1, i=1; p!=NULL; p=p->next, i++)

cout<<i<<" | "<<setw(10)<<p->ss.fam<<" | "<<setw(11)<<p->ss.name<<" | "<<setw(12)<<p->ss.ot<<" | "<<setw(9)<<p->ss.gr<<" | "<<setw(5)<<p->ss.bal<<" |\n";

}

void dmassiv::outputperechf ()

{ ofstream fout;

char file[L];

node2 *p;

cout<<"Imja vyhodnogo faila"; cin>>file;

fout.open(file);

if (fout.fail()) { cout<<"fail ne sozdan"; getch(); }

for (p=beg2; p!=NULL;p=p->next)

{ fout<<" | "<<setw(3)<<p->sb.name<<" | "<<setw(4)<<p->sb.kol<<" | \n";

} cout<<"fail sozdan\n";

getch();

fout.close(); }


void dmassiv::makeperech ()

{ int fl;

node1 *p1;

node2 *p2,*p;

clear2();

for( p1=beg1; p1!=NULL; p1=p1->next)

{

fl=0;

for( p2=beg2; p2!=NULL; p2=p2->next)

if (strcmp(p1->ss.name,p2->sb.name)==0)

{fl=1; p2->sb.kol++; break;}

if (fl==0)

{ p=new node2;

if (p==NULL) {cout<<" net pamjati\n"; getch(); exit (1); }

strcpy(p->sb.name,p1->ss.name);

p->sb.kol=1;

p->next=beg2;

beg2=p;

}

} }

void dmassiv::outputperech()

{

node2 *p;

for (p=beg2; p!=NULL; p=p->next)

cout<<" | "<<setw(9)<<p->sb.name<<" | "<<setw(3)<<p->sb.kol<<" |\n";

}

void dmassiv::add()

{ node1 *p;

char iniz[5];

p=new node1 ;

if (p==NULL) {cout<<" net pamjati\n"; getch(); exit (1);}

cout<<"familiya";

cin>>p->ss.fam;

cout<<"name:";

cin>>p->ss.name;

cout<<"otchestvo:";

cin>>p->ss.ot;

cout<<"gruppa";

cin>>p->ss.gr;

cout<<"kol-vo ballov";

cin>>p->ss.bal;

p->next=beg1;

beg1=p;

cout<<"zapis' dobavlena";

getch();

}

void dmassiv::redakt()

{ node1 *p0;

int i,j;

char ch[2], iniz[5];

outputsp ();

cout<<"nomer redaktiruemoj stroki:\n";

cin>>j;

p0=beg1; for (i=1;i!=j;i++)

{ p0=p0->next;

if (p0==NULL) {cout<<"net takoj stroki\n"; getch(); return; } }

cout<<j<<" - stroka:\n";

cout<<p0->ss.fam<<" "<<" "<<p0->ss.name<<" "<<p0->ss.ot<<" "<<p0->ss.gr<<" "<<p0->ss.bal<<endl;

cout<<"otredaktirovat'?(y/n)";

cin>>ch;

if(ch=="n") return;

cout<<"Fam";

cin>>p0->ss.fam;

cout<<"name:";

cin>>p0->ss.name;

cout<<"otchestvo:";

cin>>p0->ss.ot;

cout<<"gruppa";

cin>>p0->ss.gr;

cout<<"kol-vo ballov";

cin>>p0->ss.bal;

cout<<"zapis' otredaktirovana";

getch();

}

void dmassiv::delet()

{ node1 *p, *p0;

int i,j;

char ch[2];

outputsp ();

cout<<"nomer udaljaemoj stroki:\n";

cin>>j;

p0=beg1; for (i=1;i!=j;i++)

{ p0=p0->next;

if (p0==NULL) {cout<<"net takoj stroki\n"; getch(); return; } }

cout<<j<<" - stroka:\n";

cout<<p0->ss.fam<<" "<<p0->ss.name<<" "<<p0->ss.ot<<" "<<p0->ss.gr<<" "<<p0->ss.bal<<endl;

cout<<"udalit'?(y/n)";

cin>>ch;

if(ch=="n") return;

if (j==1) { beg1=beg1->next;}

else { for(p=beg1;p->next!=p0;p=p->next) continue;

p->next=p0->next;

}

delete p0;

cout<<"zapis' udalena";

getch();

}

void main ()

{

dmassiv a;

int j;


while (1)

{

clrscr();

cout << "1. Vvod tablicy iz faila \n";

cout << "2. Vyvod tablicy na ekran \n";

cout << "3. Dobavlenie zapisi v tablicu \n";

cout << "4. Udalenie zapisi iz tablicy \n";

cout << "5. Redaktirovanie zapisi \n";

cout << "6. Formirovanie perechnja \n";

cout << "7. Vyvod perechnja na ekran \n";

cout << "8. Sohranenie perechnja v fail \n";

cout << "9. Vyhod iz programmy \n";

cout << "\n Vash vybor (1-9) :";

cin >> j;

switch(j)

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

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

case 3: a.add(); break;

case 4: a.delet(); break;

case 5: a.redakt(); break;

case 6: a.makeperech(); break;

case 7: a.outputperech(); getch(); break;

case 8: a.outputperechf(); break;

case 9: cout << "Zavershenie raboty"; getch(); return;

default: cout << " Oshibka. Povtorite."; getch();

} }}


тестирование:













после удаления:





Вывод:

В ходе лабораторной работы я получила навыки работы со списками.


Скачать файл (114.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru