Форум программистов, компьютерный форум CyberForum.ru

Помогите плз найти ошибку. - C++

Восстановить пароль Регистрация
 
freeez
0 / 0 / 0
Регистрация: 25.10.2008
Сообщений: 70
26.10.2008, 00:01     Помогите плз найти ошибку. #1
Нужно написать прогу с 2 классами и наследованием. Программа загружает файл, и создает перечень (остальные функции пока убрал).Ошибка-не создает перечень. Когда все в одном классе прога работает нормально.

Код
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
int nn=0;
class spisok
{
struct avto
{
int nomer;
int  god;
char fio[20];
char iniz[5];
char punkt_nazn[15];
char strana[15];
};
class node1
  {
    public:
    int i;
    avto s;
    node1*next;
   };
public:
     node1*beg1,*end1;int nn;
     friend class spisok2;
     spisok():nn(0),beg1(NULL),end1(NULL){}
     ~spisok();
     void prosmotr();
     void vvod();
     void sohranenie();
     void dobavlenie();
     void udalenie();
     void sortfio();
     void sortgod();
     void sortpunkt_nazn();
     void sortstrana();
     void perechen();
     void saveperechen();
     void openperechen();
     void sortperechengod();
     void sortperechenkol();
     node1*findname (avto t);
     }info;
class spisok2:public spisok
{
struct list
{
int nomer;
int kol;
int god;
};
class node2
  {
    public:
    list l;
    node2*next;
    int h;
};
public:
node2*beg2,*end2;int k;
spisok2():k(0),beg2(NULL),end2(NULL){}
~spisok2();
void perechen();
void saveperechen();
void openperechen();
void sortperechengod();
void sortperechenkol();
void prosmotrperech();
friend class spisok;
}info2;
void main()
  {
  spisok a;
while(1)
{
  clrscr();
  cout<<"\n1  -  Vvod dannih iz faila";
  cout<<"\n2  -  Prosmotr";
  cout<<"\n3  -  Sohranenie faila";
  cout<<"\n4  -  Dobavlenie zapisi";
  cout<<"\n5  -  Udalenie zapisi";
  cout<<"\n6  -  Sortirovka po fio";
  cout<<"\n7  -  Sortirovka po godu";
  cout<<"\n8  -  Sortirovka po marke";
  cout<<"\n9  -  Sortirovka po strane";
  cout<<"\n10 -  Formirovanie perechna";
  cout<<"\n11 -  Prosmotr perechna";
  cout<<"\n12 -  Sortirovka perechna po fio";
  cout<<"\n13 -  Sortirovka perechna po kolichestvu avto";
  cout<<"\n14 -  Sohranenie perechna v binarni fail";
  cout<<"\n15 -  Vvod perechna iz binarnogo faila";
  cout<<"\n16 -  Vihod";
  cout<<"\n \n Viberite punkt (1-16): ";
  int a;
	cin>>a;
	switch(a)
	{
	 case 1: info.vvod();break;
	 case 2: info.prosmotr();break;
	 case 3: info.sohranenie();break;
	 case 4: info.dobavlenie();break;
	 case 5: info.udalenie();break;
	 case 6: info.sortfio();break;
	 case 7: info.sortgod();break;
	 case 8: info.sortpunkt_nazn();break;
	 case 9: info.sortstrana();break;
	 case 10: info2.perechen();break;
	 case 11: info2.prosmotrperech();break;
	 case 12: info2.sortperechengod();break;
	 case 13: info2.sortperechenkol();break;
	 case 14: info2.saveperechen();break;
	 case 15: info2.openperechen();break;
	 case 16: exit(1);
	 default:cout<<"\n Osibka vvoda! Povtorite popitku\n";break;
	 }
	 }
}
istream&operator>>(istream&is,spisok::node1&z)
{
 cout<<"Vvedite fio: ";is>>z.s.fio>>z.s.iniz;
 cout<<"Vvedite marku: ";is>>z.s.punkt_nazn;
 cout<<"Vvedite god: ";is>>z.s.god;
 cout<<"Vvedite stranu: ";is>>z.s.strana;
return is;}
ostream&operator<<(ostream&iss,spisok::node1&z)
{
iss<<setw(7)<<z.s.nomer<<setw(17)<<z.s.fio<<setw(17)<<z.s.punkt_nazn<<setw(7)<<z.s.god<<setw(17)<<z.s.strana<<endl;
return iss;}
ostream &operator<<(ostream&iss,spisok2::node2&z)
{iss<<setw(7)<<z.l.nomer<<setw(20)<<z.l.god<<setw(15)<<z.l.kol<<endl;return iss;
};

void spisok::prosmotr()
{
  clrscr();
  node1*p;
  cout.setf(ios::left);
  cout<<"\nNomer  FIO              punkt_nazn            God    Strana\n";
  p=beg1;
  while(p!=NULL)
	{
			cout<<(*p);
			p=p->next;
	}
  getch();
}

void spisok::vvod()
{
 clrscr();
	 char filename[20];
	 node1*p1,*p;
	 spisok2::node2*p2;
	 cout<<"Vvedite ima faila: ";
	 cin>>filename;
	 ifstream fin(filename);
	 if(!fin){cout<<"Nevozmogno otkrit' fail dla chteniya";getch();return;}
	 if (beg1!=NULL)
	  {
	     while (beg1!=NULL)
		{
		p1=beg1;
		beg1=beg1->next;
		delete p1;
		}
	     end1=NULL;
	     nn=0;
	  }
	 p =new node1;
	 if (p==NULL) {cout<<"Net dinamicheskoy pamyati\n";getch();return;}
	 fin>>p->s.nomer>>p->s.fio>>p->s.iniz>>p->s.punkt_nazn>>p->s.god>>p->s.strana;
	 strcat(p->s.fio," ");
	 strcat(p->s.fio,p->s.iniz);
	 p->next=NULL;
	 while(fin.good())
		{
		if(beg1==NULL) {beg1=p;} else end1->next=p;
		end1=p;
		nn++;
		p =new node1;
		if (p==NULL) {cout<<"Net dinamicheskoy pamyati\n";getch();return;}
		fin>>p->s.nomer>>p->s.fio>>p->s.iniz>>p->s.punkt_nazn>>p->s.god>>p->s.strana;
		strcat(p->s.fio," ");            //dobavlenie inicialov
		strcat(p->s.fio,p->s.iniz);  //k familii
		p->next=NULL;
		}
	delete p;
	fin.close();
 clrscr();
}

void spisok::sohranenie()
{
}

void spisok::dobavlenie()
{
}

void spisok::udalenie()
{
}

void spisok::sortfio()
 {
 }
void spisok::sortgod()
 {
  }

void spisok::sortpunkt_nazn()
 {
 }
void spisok::sortstrana()
 {
 }

void spisok2::perechen()
{
	int fl=0;
	node1*p1; int h=0;
	node2*p,*p2;
		if (beg2!=NULL)
	  {
	     while (beg2!=NULL)
		{
		p2=beg2;
		beg2=beg2->next;
		delete p2;
		}
	     end2=NULL;
	     k=0;
	  }
	 for(p1=beg1;p1!=NULL;p1=p1->next)
	 {
	   fl=1;
	   for(p2=beg2;p2!=NULL;p2=p2->next)
	   {
	    if(p1->s.god==p2->l.god)
	    {fl=0;p2->l.kol++;break;}
	   }
	    if(fl==1)
		{
		 h++;
		 p=new node2;
		 p->next=NULL;
		 p->l.god=p1->s.god;
		 p->l.kol=1;
		 p->l.nomer=h;
		 if(beg2==NULL) {beg2=p;}else end2->next=p;end2=p;
	   }

	}
	h=0;
}

void spisok2::saveperechen()
{
}

void spisok2::openperechen()
{
}

spisok::~spisok()
{
	node1*p1;
	if (beg1!=NULL)
	  {
	     while (beg1!=NULL)
		{
		p1=beg1;
		beg1=beg1->next;
		delete p1;
		}
	     end1=NULL;
	     nn=0;
	  }
}
spisok2::~spisok2()
{
     node2*p2;
       if (beg2!=NULL)
	  {
	     while (beg2!=NULL)
		{
		p2=beg2;
		beg2=beg2->next;
		delete p2;
		}
	     end2=NULL;
	     k=0;
	  }
}

node1*spisok::findname(avto t)
{
}

void spisok2::sortperechengod()
{
}
void spisok2::sortperechenkol()
{
}
void spisok2::prosmotrperech()
{
  clrscr();
  node2*p;
  cout.setf(ios::left);
  cout<<"\nNomer  fio                 kolichestvo\n";
  p=beg2;
  while(p!=NULL)
	{
			cout<<(*p);
			p=p->next;
	}
  if (beg2==NULL){cout<<"Pusto";}
  getch();
}
Тестовый файл
Вложения
Тип файла: txt Fail.txt (512 байт, 15 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2008, 00:01     Помогите плз найти ошибку.
Посмотрите здесь:

C++ Помогите найти ошибку
C++ помогите найти ошибку.
C++ Помогите найти ошибку
C++ Помогите найти ошибку
C++ Помогите найти ошибку
Калькулятор комплексных чисел. Помогите плз найти ошибки C++
C++ Помогите найти ошибку
Помогите найти ошибку. C++
Помогите найти ошибку C++
Помогите найти ошибку C++
C++ Помогите найти ошибку: По двум сторонам и углу найти все остальное

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru