на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Інформаційно-довідкова система
{

bonus=c;

}

~album3();

};

class Tool

{

public:

album *d;

int t;

friend class Trist;//об'явлення дружнього класу

Tool *right,*left;

};

class Trist

{

public:

Tool *head,*tail;

Tool *current;

Trist(int type,int vvod);//Конструктор

void add(int type, int vvod);//ф_ція добавлення об'єктів

~Trist();//Деструктор

};

//Описний файл

#include "RGZ.h"

#include <iostream.h>

#include <string.h>

#include <stdlib.h>

#include <iomanip.h>

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

{

cout << "Vvedite nazvanie alboma: ";

cin >> nazv;

nazv[3]=NULL;

cout << "Vvedite god vipuska: ";

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) << "

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 << "\n\n############################";

cout << "\n# 1 - Sozdanie bazi dannih #";

cout << "\n# 2 - Vivod na ekran #";

cout << "\n# 3 - Vivod v fail #";

cout << "\n# 4 - Chtenie iz faila #";

cout << "\n# 5 - Poisk #";

cout << "\n# 6 - Redaktirovanie zapisi #";

cout << "\n# 7 - Vstavka novoi zapisi #";

cout << "\n# 8 - Udalenie zapisi #";

cout << "\n# 9 - Vipolnrnie zadachi #";

cout << "\n# 10 - Vihod #";

cout << "\n\n############################";

cout << "\n Vvedite nomer operatsii:";

cin >> k;

switch (k)

{

case 1:

cout << "\n Sozdanie tablizi dannih";

cout << "\n Vvedite N: ";

cin >> N;

sozdan(a,N);

cout << "\n Tabliza dannih sozdana.";

getch();

break;

case 2:

cout << "\n Vivod na ekran ";

output(a);

cout << "\n Vivod na ekran zavershen.";

getch();

break;

case 3:

cout << "\n Vivod v fail a.dat ";

output_file(a,N);

cout << "\n Vivod v fail uspeshno zavershen.";

getch();

break;

case 4:

cout << "\n Chtenie iz faila a.dat ";

input_file(a);

cout << "\n Chtenie iz faila uspeshno zavershena.";

getch();

break;

case 5:

cout << "\n Poisk obyekta ";

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

char *nazv;

cin >> nazv;

Tool *n;

// n=NULL;

n = pois(a,nazv);

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

else

{

cout << "\n Zapis bila naidena.";

caption();

n->d->output();

}

delete nazv;

getch();

break;

case 6:

cout << "\n Redaktirovanie zapisi ";

cout << "\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 << "\n Redaktirovanie uspeshno zaversheno.";

getch();

break;

case 7:

cout << "\n Vstavka novoi zapisi ";

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

int p = 0;

cin >> p;

a->current=a->tail;

a->add(p,1);

cout << "\n Vstavka zapisi uspeshno zaversena.";

getch();

break;

case 8:

cout << "\n Udalenie zapisi ";

cout << "\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 << "\n Zapis bila udalena.";

getch();

break;

case 9:

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

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

int godL,godR;

cin >> godL;

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

cin >> godR;

Tool *k;

k = zadacha(a,godL,godR);

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

else

{

cout << "\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 << "\nVvedite tip zapisi [0..2]: ";

int k;

cin >> k;

a = new Trist(k,1);

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

{

cout << "\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 << "\nOshibka vivoda v fail!\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 << "\nOshibka chtenia faila!\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;

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.