Mam takie pytanie.Jak posortowac ta strukture wedlug imienia i jeśli dajmy na to imiona są takie same to wedlug dochodów?
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
struct pracownicy
{
char imie[20];
float przychod;
char nazwisko[30];
int wiek;
};
void wpisz(pracownicy pracownik)
{
int wybor=1;
ofstream plik1("dane_pracownikow.dat",ios::binary | ios::app | ios::out);
while(wybor)
{
cout << "Podaj imie pracownika : " << endl;
cin >> pracownik.imie;
cout << "Podaj dochod pracownika : " << endl;
cin >> pracownik.przychod;
cout << "Podaj nazwisko pracownika : " << endl;
cin >> pracownik.nazwisko;
cout << "Podaj wiek pracownika : " << endl;
cin >> pracownik.wiek;
plik1.write(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
cout << "Chcesz wpisywac kolejnego pracownika? 1 - TAK, 0 - NIE" << endl;
cin >> wybor;
}
plik1.close();
}
void wypisz(pracownicy pracownik)
{
int i=1;
cout << "------Pracownicy------" << endl;
ifstream plik("dane_pracownikow.dat",ios::binary);
for(;;)
{
plik.read(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
if(plik.eof())
break;
cout<<i<<" "<<pracownik.imie<<" "<<pracownik.przychod<<" "<< pracownik.nazwisko <<" "<< pracownik.wiek <<endl;
i++;
}
plik.close();
}
void zamiana(pracownicy pracownik)
{
int k;
cout << "Podaj numer rekordu ktory chcesz edytowac: " << endl;
cin >> k;
cout << "Podaj imie pracownika: " << endl;
cin >> pracownik.imie;
cout << "Podaj nazwisko pracownika: " << endl;
cin >> pracownik.nazwisko;
cout << "Podaj dochod pracownika : " << endl;
cin >> pracownik.przychod;
cout << "Podaj wiek pracownika : " << endl;
cin >> pracownik.wiek;
ofstream plik3("dane_pracownikow_zamiana.dat",ios::binary | ios::in | ios::ate);
plik3.seekp(sizeof(struct pracownicy)*(k-1));
plik3.write(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
plik3.close();
}
void przepisz(pracownicy pracownik)
{
int i=1;
ifstream plik("dane_pracownikow.dat",ios::binary);
ofstream plik1("dane_przepisane.dat",ios::binary | ios::trunc | ios::out);
while (1)
{
plik.read(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
if(plik.eof())
break;
if((pracownik.przychod>1000)&&(pracownik.przychod<5000))
{
plik1.write(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
}
}
plik.close();
plik1.close();
ifstream plik3("dane_przepisane.dat",ios::binary);
cout << "pracownicy O PRZYCHODZIE WIEKSZYM NIZ 1000 ORAZ MNIEJSZYM NIZ 5000" << endl;
while (1)
{
plik3.read(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
if(plik3.eof())
break;
cout<<i<<" "<<pracownik.imie<<" "<<pracownik.nazwisko<<" "<<pracownik.wiek<<" "<<pracownik.przychod<<endl;
i++;
}
plik3.close();
}
void przepisz_dochody(pracownicy pracownik)
{
int i=1;
ifstream plik("dane_pracownikow.dat",ios::binary);
ofstream plik1("dane_dochody.dat",ios::binary | ios::trunc | ios::out);
while (1)
{
plik.read(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
if(plik.eof())
break;
plik1.write(reinterpret_cast<char*>(&pracownik.przychod),sizeof(pracownik.przychod));
}
plik.close();
plik1.close();
ifstream plik3("dane_dochody.dat",ios::binary);
cout << "--------------DOCHODY----------------" << endl;
while (1)
{
plik3.read(reinterpret_cast<char*>(&pracownik.przychod),sizeof(pracownik.przychod));
if(plik3.eof())
break;
cout<<i<<" "<<pracownik.przychod<<endl;
i++;
}
plik3.close();
}
void wyszukaj_pracownika(pracownicy pracownik)
{
char im[30];
cin>>im;
ifstream plik("dane_pracownikow.dat",ios::binary);
int i=1;
while (1)
{
plik.read(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
if(plik.eof())
break;
if(!strcmp(pracownik.imie,im))
cout<<" "<<pracownik.nazwisko<<" "<<pracownik.wiek<<" "<<pracownik.przychod<<endl;
}
plik.close();
}
bool usun_pracownika(pracownicy pracownik)
{
char t[20];
bool u=false;
cout<<"Podaj tytul: ";
cin>>t;
ifstream plik("dane_pracownikow.dat", ios::binary);
ofstream zapis("dane2.dat", ios::binary);
zapis.seekp(0,ios::beg);
if(!plik or !zapis) return 0;
while(1)
{
plik.read(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
if(plik.eof()) break;
if(strcmp(pracownik.imie,t)) zapis.write(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
else u=true;
}
plik.close();
zapis.close();
system("dane_pracownikow.dat");
system("ren dane2.dat dane.dat");
return u;
}
void sortowanie_po_imieniu(pracownicy pracownik)
{
}
void wypisz_dochody(pracownicy pracownik)
{
int i=0;
char im[30];
cout<<"podaj imie pracow ";
cin>>im;
ifstream plik("dane_pracownikow.dat",ios::binary);
for(;;)
{
plik.read(reinterpret_cast<char*>(&pracownik),sizeof(pracownicy));
if(plik.eof())
break;
if(!strcmp(pracownik.imie,im))
cout<<" "<<pracownik.przychod;
}
plik.close();
}
main()
{
int wybor;
ofstream plik1("dane_pracownikow.dat",ios::binary | ios::app | ios::out);
pracownicy pracownik;
char znak;
do{
cout << "--------MENU--------" << endl
<< "1. Wpisanie danych pracownikow." << endl
<< "2. Wypisanie danych pracownikow. " << endl
<< "3. Zmiana informacji o pracowikach . " << endl
<< "4. Przepisz dane o '1000 < przychod < 5000' do nowego pliku!" << endl
<< "5. Przepisz same dochody pracownikow do nowego pliku" << endl
<<" 6. Wyszukaj pracownika"<<endl
<<" 7. Usun pracownika"<<endl
<<" 8. Sortowanie po imieniu"<<endl
<<" 9. wypisz dochody jakiejs osoby"<<endl
<< "0. EXIT " << endl
<< "Twoj wybor: " << endl;
cin >> wybor;
switch(wybor)
{
case 1:
{
wpisz(pracownik);
}
break;
case 2:
{
wypisz(pracownik);
}
break;
case 3:
{
wypisz(pracownik);
zamiana(pracownik);
}
break;
case 4:
{
przepisz(pracownik);
}
break;
case 5:
{
przepisz_dochody(pracownik);
}
break;
case 6 :
wyszukaj_pracownika(pracownik);
break;
case 7 :
usun_pracownika(pracownik);
if(!usun_pracownika(pracownik)) cout<<"Nie udalo sie usunac rekordu z pracownicy.dat"<<endl;
break;
case 8 :
sortowanie_po_imieniu(pracownik);
break;
case 9:
wypisz_dochody(pracownik);
break;
case 0:
{
system("cls");
cout << "Konczymy program. " << endl;
}
break;
default:
{
system("cls");
cout << "Zly wybor! " << endl;
}
break;
}
cout<<"dalej czy zakonczyc \n ?"
" wcisnij t ,aby dalej n,aby przerwac ";
cin>>znak;
}while(znak!='n');
system ("Pause");
}