Смекни!
smekni.com

Інформаційно-довідкова система 2 (стр. 3 из 3)

cin >> god;

}

void album::output()//ф-ція виводу

{

cout << endl<< setw(10) << setiosflags(ios::left) << nazv

<< setw(10) << setiosflags(ios::left) << god;

}

album1::album1():album() {}//конструктор

album1::~album1(){ album::~album(); }//деструктор

void album1::input()

{

album::input();

cout << "Vvedite kl-vo trekov v albome: ";

cin >> trek;

}

void album1::output()

{

album::output();

cout<< setw(10) << setiosflags(ios::left) << trek;

}

album2::album2():album1() {}

album2::~album2() { album1::~album1(); }

void album2::input()

{

album1::input();

cout << "Vvedite prodolzitelnost alboma po vremeni: ";

cin >> time;

}

void album2::output()

{

album1::output();

cout << setw(12) << setiosflags(ios::left) << time;

}

album3::album3():album2() {}

album3::~album3() { album2::~album2(); }

void album3::input()

{

album2::input();

cout << "Vvedite kolichestvo bonus trekov: ";

cin >> bonus;

}

void album3::output()

{

album2::output();

cout << setw(10) << setiosflags(ios::left) << bonus;

}

void caption()//заголовкова ф-ція

{

cout << endl << setw(10) << setiosflags(ios::left) << "|Nazv"

<< setw(10) << setiosflags(ios::left) << "|God"

<< setw(10) << setiosflags(ios::left) << "|Treki"

<< setw(10) << setiosflags(ios::left) << "|Vremya"

<< setw(10) << setiosflags(ios::left) << "|Bonus+"<< endl;

cout << "-------------------------------------------------------";

}

Trist::Trist(int type, int vvod)//Створення списку об'єктів

{

album1 *pr;

album2 *sp;

album3 *fl;

head = new Tool;

head->t = type;

if (head->t == 0)

{

pr = new album1;

if (vvod)

pr->input();

head->d=pr;

} else

if (head->t == 1)

{

sp = new album2;

if (vvod)

sp->input();

head->d=sp;

} else

if (head->t == 2)

{

fl = new album3;

if (vvod)

fl->input();

head->d=fl;

}

head->right=NULL;

head->left=NULL;

tail=head;

current=head;

}

Trist::~Trist()//Висвободження памяті

{

Tool *h;

h=head;

while (h!=0)

{ head=head->right;

head->left=NULL;

delete h;

h=head;

}

}

void Trist::add(int type, int vvod)//додавання нового об’єкта у список

{

Tool *q = new Tool;

album1 *pr;

album2 *sp;

album3 *fl;

q->t = type;

switch (q->t)

{

case 0:

pr = new album1;

if (vvod)

pr->input();

q->d=pr;

break;

case 1:

sp=new album2;

if (vvod)

sp->input();

q->d=sp;

break;

case 2:

fl=new album3;

if (vvod)

fl->input();

q->d=fl;

break;

}

if (current==tail)

{

q->right=NULL;

q->left=current;

current->right=q;

tail=q;

current=q;

} else

{ q->right=current->right;

current->right->left=q;

current->right=q;

q->left=current;

current=q;

}

}

//Головний файл

#include "RGZ_dsc.cpp"

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <fstream.h>

void sozdan(Trist *&a, int n);//створення

void output(Trist *&a);//вивід на екран

void output_file(Trist *&a, int n);//вивід до файлу

void input_file(Trist *&a);//читання з файлу

Tool* pois(Trist *&a, char* nazv);//ф-ція пошуку

Tool* zadacha(Trist *&a,int godL,int godR);//виконання задачі

void main()//Головна програма

{

int i,N=5,k;

Trist *a = NULL;

clrscr();

randomize();

while (1)

{

cout << "&bsol;n&bsol;n############################";

cout << "&bsol;n# 1 - Sozdanie bazi dannih #";

cout << "&bsol;n# 2 - Vivod na ekran #";

cout << "&bsol;n# 3 - Vivod v fail #";

cout << "&bsol;n# 4 - Chtenie iz faila #";

cout << "&bsol;n# 5 - Poisk #";

cout << "&bsol;n# 6 - Redaktirovanie zapisi #";

cout << "&bsol;n# 7 - Vstavka novoi zapisi #";

cout << "&bsol;n# 8 - Udalenie zapisi #";

cout << "&bsol;n# 9 - Vipolnrnie zadachi #";

cout << "&bsol;n# 10 - Vihod #";

cout << "&bsol;n&bsol;n############################";

cout << "&bsol;n Vvedite nomer operatsii:";

cin >> k;

switch (k)

{

case 1:

cout << "&bsol;n Sozdanie tablizi dannih";

cout << "&bsol;n Vvedite N: ";

cin >> N;

sozdan(a,N);

cout << "&bsol;n Tabliza dannih sozdana.";

getch();

break;

case 2:

cout << "&bsol;n Vivod na ekran ";

output(a);

cout << "&bsol;n Vivod na ekran zavershen.";

getch();

break;

case 3:

cout << "&bsol;n Vivod v fail a.dat ";

output_file(a,N);

cout << "&bsol;n Vivod v fail uspeshno zavershen.";

getch();

break;

case 4:

cout << "&bsol;n Chtenie iz faila a.dat ";

input_file(a);

cout << "&bsol;n Chtenie iz faila uspeshno zavershena.";

getch();

break;

case 5:

cout << "&bsol;n Poisk obyekta ";

cout << "&bsol;n Vvedite kluch dlya poiska(nazvanie alboma): ";

char *nazv;

cin >> nazv;

Tool *n;

// n=NULL;

n = pois(a,nazv);

if (n==NULL) cout << "&bsol;n Zapis ne naidena.";

else

{

cout << "&bsol;n Zapis bila naidena.";

caption();

n->d->output();

}

delete nazv;

getch();

break;

case 6:

cout << "&bsol;n Redaktirovanie zapisi ";

cout << "&bsol;n Vvedite nomer zapisi: ";

int c;

cin >> c;

a->current=a->head;

for (i=0;a->current!=NULL;i++)

{

if (i==c)

{

a->current->d->input();

break;

}

a->current=a->current->right;

}

cout << "&bsol;n Redaktirovanie uspeshno zaversheno.";

getch();

break;

case 7:

cout << "&bsol;n Vstavka novoi zapisi ";

cout << "&bsol;n Vvedite tip novoy zapisi [0..2]: ";

int p = 0;

cin >> p;

a->current=a->tail;

a->add(p,1);

cout << "&bsol;n Vstavka zapisi uspeshno zaversena.";

getch();

break;

case 8:

cout << "&bsol;n Udalenie zapisi ";

cout << "&bsol;n Vvedite nomer zapisi dlya udalenia: ";

int j = 0;

cin >> j;

a->current=a->head;

for (i=0;a->current!=NULL;i++)

{

if (i==j)

{

Tool *q = a->current;

if (q->left!=NULL) q->left->right = q->right;

if (q->right!=NULL) q->right->left = q->left;

if (q==a->head) a->head=q->right;

if (q==a->tail) a->tail=q->left;

delete q;

a->current = a->tail;

break;

}

a->current=a->current->right;

}

cout << "&bsol;n Zapis bila udalena.";

getch();

break;

case 9:

cout << "&bsol;n Poisk obyekta s minimalnim kl-vom trekov v zadannom diapazone let";

cout << "&bsol;n Vvedite leviy predel poiska(god): ";

int godL,godR;

cin >> godL;

cout << "&bsol;n Vvedite praviy predel poiska(god): ";

cin >> godR;

Tool *k;

k = zadacha(a,godL,godR);

if (n==NULL) cout << "&bsol;n Zapis ne naidena.";

else

{

cout << "&bsol;n Zapis bila naidena.";

caption();

k->d->output();

}

getch();

break;

case 10:

delete a;

exit(0);

break;

}

}

}

void sozdan(Trist *&a, int n)

{

if (a!=NULL)

delete a;

cout << "&bsol;nVvedite tip zapisi [0..2]: ";

int k;

cin >> k;

a = new Trist(k,1);

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

{

cout << "&bsol;nVvedite tip zapisi [0..2]: ";

cin >> k;

a->add(k,1);

}

}

void output(Trist *&a)

{

caption();

a->current=a->head;

while (a->current!=NULL)

{

a->current->d->output();

a->current=a->current->right;

}

}

void output_file(Trist *&a, int n)

{

ofstream file("a.dat",ios::out|ios::binary);

if (!file)

{

cerr << "&bsol;nOshibka vivoda v fail!&bsol;n";

getch();

exit(1);

}

file.seekp(0);

file.write((char*)&(n),sizeof(n));

a->current=a->head;

while (a->current!=NULL)

{

file.write((char*)&(a->current->t),sizeof(a->current->t));

file.write(a->current->d->nazv,sizeof(a->current->d->nazv));

switch (a->current->t)

{

case 0:

album1 *obj1;

obj1=(album1*)a->current->d;

int trek = obj1->getTrek();

file.write((char*)&(trek),sizeof(trek));

break;

case 1:

album2 *obj2;

obj2=(album2*)a->current->d;

trek = obj2->getTrek();

int time = obj2->getTime();

file.write((char*)&(trek),sizeof(trek));

file.write((char*)&(time),sizeof(time));

break;

case 2:

album3 *obj3;

obj3=(album3*)a->current->d;

trek = obj3->getTrek();

time = obj3->getTime();

int bonus = obj3->getBonus();

file.write((char*)&(trek),sizeof(trek));

file.write((char*)&(time),sizeof(time));

file.write((char*)&(bonus),sizeof(bonus));

break;

}

a->current=a->current->right;

}

file.close();

}

void input_file(Trist *&a)

{

ifstream file("a.dat",ios::in);

if (!file)

{

cerr << "&bsol;nOshibka chtenia faila!&bsol;n";

getch();

exit(1);

}

int n;

file.read((char*)&(n),sizeof(n));

int i;

delete a;

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

{

int t;

file.read((char*)&(t),sizeof(t));

if (i==0) a=new Trist(t,0); else a->add(t,0);

file.read((char*)&(a->current->d->nazv),sizeof(a->current->d->nazv));

switch (t)

{

case 0:

album1 *obj1;

obj1=(album1*)a->current->d;

int trek = 0;

file.read((char*)&(trek),sizeof(trek));

obj1->setTrek(trek);

break;

case 1:

album2 *obj2;

obj2=(album2*)a->current->d;

trek = 0;

int time = 0;

file.read((char*)&(trek),sizeof(trek));

file.read((char*)&(time),sizeof(time));

obj2->setTrek(trek);

obj2->setTime(time);

break;

case 2:

album3 *obj3;

obj3=(album3*)a->current->d;

trek = 0;

time = 0;

int bonus = 0;

file.read((char*)&(trek),sizeof(trek));

file.read((char*)&(time),sizeof(time));

file.read((char*)&(bonus),sizeof(bonus));

obj3->setTrek(trek);

obj3->setTime(time);

obj3->setBonus(bonus);

break;

}

}

file.close();

}

Tool* pois(Trist *&a, char* nazv)

{

Tool *n = NULL;

a->current=a->head;

while (a->current!=NULL)

{

n = a->current;

if (strcmp(n->d->nazv,nazv)==0) break;

else n=NULL;

a->current=a->current->right;

}

return n;

}

Tool* zadacha(Trist *&a,int godL,int godR)

{

Tool *k = NULL;

a->current=a->head;

int max=1000;

while (a->current!=NULL)

{

k = a->current;

if(k->d->god>godL)

if(k->d->god<godR)

if(k->d->trek<min) break;

else k=NULL;

a->current=a->current->right;

}

return k;