zapis do pliku za pomocą przeciążonych operatorów

0

Witam mam takie zadanie. Dajmy na to że mamy bazę danych abonentów sieci telefonii komórkowej. Dodajemy sobie tych abonentów (nazwisko, numer taryfa-3 do wyboru), abonenci umieszczani są w liście dynamicznej, oprócz tego abonenci pobierani są z pliku. Wszyscy abonenci (z pliku, jak i ci wpisani przez użytkownika) są później zapisywani do jakiegoś pliku wyjściowego. I to wszystko działa, pytanie tylko jak pogrupować abonentów w tym pliku według kryterium? Niech będzie to taryfa. Czyli żeby plik wyglądał tak:

"Taryfa 1:
Kowalski
Nowak
Taryfa 2:
Kowalski2
Nowak2"
?

Kod programu to:

#include <string>
#include <fstream>
using namespace std;

int taryfy[3]={11, 22, 33};

class Abonent
{
public:
int number;
string sname;
int taryfa;
public:
void dodaj(void);
Abonent *nast;
Abonent ();
void wypisz(void);
friend ostream& operator << (ostream &b, const Abonent &send);
friend istream& operator >> (istream &b, Abonent &read);
};

void Abonent::dodaj(void)
{
int tar;
char naz[256];
printf("podaj numer\n");
scanf("%d" , &number);
printf("Podaj nazwisko\n");
scanf("%s", naz);
string sname2(naz);
sname=sname2;
printf("ktora taryfa 1 2 3\n");
scanf("%d", &tar);
taryfa=taryfy[tar-1];
}

void Abonent::wypisz(void)
{
printf("%d %s %d",number,sname,taryfa);
}

ostream& operator << (ostream &b, const Abonent &send)
{
return b << send.number << " " << send.sname<< " " << send.taryfa << endl; 
}

istream& operator >> (istream &b, Abonent &read)
{
return b >> read.number >> read.sname >> read.taryfa;
}

Abonent::Abonent()
{

nast=NULL;
}

int main(void)
{

fstream plik;
fstream plik2;
fstream plik3;
string nazwa3;
int x=1;
Abonent *glowa, *wsk, *pop;
glowa=wsk=new Abonent();
plik.open("Abonenci.txt", ios::in);
plik2.open("Nowe.txt", ios::out);
while( !plik.eof())
{
plik >> *wsk;
wsk->nast= new Abonent();
wsk=wsk->nast;
}
printf("Chcesz dodac kolejnego abonenta?(1-tak,2-nie)");
scanf("%d",&x);
while(x==1)
{
wsk->dodaj();
wsk->nast = new Abonent();
wsk=wsk->nast;
printf("Chcesz dodac kolejnego abonenta?");
scanf("%d",&x);
}
pop=glowa;
while(pop)
{
plik2 << *pop;
pop=pop->nast;
}
printf("podaj nazwe pliku dla raportu pamietaj o .txt");
scanf("%d",&nazwa3);
plik3.open(nazwa3.c_str(), ios::trunc);
	return 0;
}

z góry dziękuje za pomoc.

0

z tego co rozumiem, abonenci są trzymani jako kolejka. przebiegaj więc po całej kolejce trzykrotnie, za każdym razem zapisując do pliku tylko abonentów o danej taryfie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1