Witam
Tworzę sobie mała bazę danych i mam mały problem z sortowaniem według ceny. Ogólnie wyskakują jakieś błedy przy tym sortowaniu i nie wiem co zrobić, proszę was o pomoc, może jest mały błąd do poprawienie i go poprawicie.
A oto cały kod bazy:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string>
#include<windows.h>
#include<stdlib.h>
#include<fstream.h>
using namespace std;
string producent,model,napis,slowo,aparat,stan,gwarancja,cena,cale;
char decyzja;
short int wybor;
struct komorka
{
string producent;
string model;
string stan;
string gwarancja;
string aparat;
string cena;
string cale;
};
void usuwanie();
void wyswietlanie();
void dodawanie();
void szukaj();
void usuwaniebazy();
void czyszczenie();
void sortuj();
void gotoxy (int x, int y);
// void pokaz_plik();
komorka par;
fstream plik;
fstream plik2;
int main()
{
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
cout<<"\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(10));
cout<<"\t######## ### ######## ### ## ## ####### ## ##\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(14));
cout<<"\t## ## ## ## ## ## ## ## ## ## ## ### ###\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(10));
cout<<"\t## ## ## ## ## ## ## ## ## ## ## #### ####\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(6));
cout<<"\t######## ## ## ## ## ## ##### ## ## ## ### ##\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(10));
cout<<"\t## ## ######### ## ######### ## ## ## ## ## ##\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(14));
cout<<"\t## ## ## ## ## ## ## ## ## ## ## ## ##\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(10));
cout<<"\t######## ## ## ######## ## ## ## ## ####### ## ##\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(270));
gotoxy(25,18);
cout << "|";
gotoxy(46,18);
cout << "|";
for(int i=0; i<20;i++)
{
gotoxy(i+26,18);
cout << (char)219;
gotoxy(50,18);
cout << (i+1)*5 <<" %";
Sleep(200);
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(0));
do{
clrscr();
// pokaz_plik();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<" Baza danych - KOMORKI\n\n\n\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(15));
cout<<" +++++++++++++++++++++++++++++++++++++++++++++++\n";
cout<<" + Menu: +\n";
cout<<" + +\n";
cout<<" + 1 - Dodawanie rekordu +\n";
cout<<" + 2 - Usuwanie rekordu +\n";
cout<<" + 3 - Wyszukiwanie rekordu +\n";
cout<<" + 4 - Wyswietlanie rekordu +\n";
cout<<" + 5 - Usun baze +\n";
cout<<" + 6 - Sortowanie wedlug ceny +\n";
cout<<" + 7 - Koniec +\n";
cout<<" + +\n";
cout<<" +++++++++++++++++++++++++++++++++++++++++++++++\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"\n\nPodaj swoj wybor\n";
cin>>wybor;
switch(wybor)
{
case 1:
{
clrscr();
dodawanie();
break;
}
case 2:
{
clrscr();
usuwanie();
break;
}
case 3:
{
clrscr();
szukaj();
break;
}
case 4:
{
clrscr();
wyswietlanie();
break;
}
case 5:
{
clrscr();
usuwaniebazy();
break;
}
case 6:
{
clrscr();
sortuj();
wyswietlanie();
break;
}
case 7:
{
clrscr();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(10));
cout<<"\n";
cout<<"\t\t###### ###### # ###### # # # # # ###### \n";
cout<<"\t\t# # # # # # # # # # # \n";
cout<<"\t\t# # # # ##### #### # # # ##### \n";
cout<<"\t\t# # # # # # # # # # # \n";
cout<<"\t\t###### ###### # ###### # # #### #### ###### \n";
cout<<"\n";
cout<<"\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(14));
cout<<" \t\t\t\t###### ## \n";
cout<<" \t\t\t\t # # # \n";
cout<<" \t\t\t\t # # # \n";
cout<<" \t\t\t\t # ###### \n";
cout<<" \t\t\t\t###### # # \n";
cout<<"\n";
cout<<"\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<" #### # # #### ##### ###### # # #### ##### ## # # # ###### \n";
cout<<" # # # # # # # # # # # # # # ## # # # \n";
cout<<" #### #### # # # # # # #### # # # # # # # ##### \n";
cout<<" # # # # # ##### # # # # ###### # # # # # ";
cout<<" #### # # #### # # ###### # #### # # # # # # ###### \n";
Sleep(2000);
return 0;
break;
}
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"\n 't' - powrot do menu ";
cout<<"\n 'n' - wyjscie z programu ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(6));
cout<<"\n\nCzy chcesz powtorzyc (n/t)?\n";
cin>>decyzja;
}while(decyzja!='n');
system("PAUSE");
return 0;
}
void dodawanie()
{
cout<<"Podaj producenta: \n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>par.producent;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Podaj model: \n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>par.model;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Podaj stan(nowy lub uzywany): \n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>par.stan;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Podaj aparat(gdy brak wpisz 0): \n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>par.aparat;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Podaj gwarancje(w miesiacach, gdy brak wpisz 0):\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>par.gwarancja;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Podaj wielkosc wyswietlacza(w calach): \n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>par.cale;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Podaj cene: \n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>par.cena;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"\nProsze czekac\n";
cout<<"Dodaje.";
Sleep(1000);
cout<<".";
Sleep(1000);
cout<<".";
Sleep(1000);
cout<<".\n";
Sleep(1000);
plik.open("bazakom.txt",ios::app|ios::out);
if(plik.good()==true)
{
plik<<par.producent<<"\t";
plik<<par.model<<"\t";
plik<<par.stan<<"\t";
plik<<par.aparat<<"\t";
plik<<par.gwarancja<<"\t";
plik<<par.cale<<"\n";
plik<<par.cena<<"\n";
plik.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
}
void wyswietlanie()
{
plik.open("bazakom.txt",ios::in);
if(plik.good()==true)
{
plik>>par.producent;
plik>>par.model;
plik>>par.stan;
plik>>par.aparat;
plik>>par.gwarancja;
plik>>par.cale;
plik>>par.cena;
while(!plik.eof())
{
cout<<"Producent : "<<par.producent<<"\nModel : "<<par.model<<"\nStan: "<<par.stan<<"\nAparat : "<<par.aparat<<"\nGwarancja : "<<par.gwarancja<<"\nWielkosc wyswietlacza : "<<par.cale<<"\nCena : "<<par.cena<<"\n\n";
plik>>par.producent;
plik>>par.model;
plik>>par.stan;
plik>>par.aparat;
plik>>par.gwarancja;
plik>>par.cale;
plik>>par.cena;
}
plik.clear();
plik.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
}
void usuwanie()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cout<<"Podaj producenta, model, wielkosc wyswietlacza i cene.\nTen samochod bedzie usuniety\n\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Producent :\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>producent;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Model :\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>model;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Wielkosc wyswietlacza :\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>cale;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Cena :\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(7));
cin>>cena;
plik.open("bazakom.txt",ios::in);
plik2.open("bazakomt.txt",ios::app|ios::out);
if(plik.good()==true && plik2.good()==true)
{
plik>>par.producent;
plik>>par.model;
plik>>par.stan;
plik>>par.aparat;
plik>>par.gwarancja;
plik>>par.cale;
plik>>par.cena;
while(!plik.eof())
{
if(par.producent==producent && par.model==model && par.cale==cale && par.cena==cena)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"\nProsze czekac\n";
cout<<"Znaleziono taki pojazd.\n";
cout<<"Usuwam.";
Sleep(1000);
cout<<".";
Sleep(1000);
cout<<".";
Sleep(1000);
cout<<".\n";
Sleep(1000);
goto dalej;
}
else
{
plik2<<par.producent<<"\t";
plik2<<par.model<<"\t";
plik2<<par.stan<<"\t";
plik2<<par.aparat<<"\t";
plik2<<par.gwarancja<<"\t";
plik2<<par.cale<<"\n";
plik2<<par.cena<<"\n";
}
dalej:
plik>>par.producent;
plik>>par.model;
plik>>par.stan;
plik>>par.aparat;
plik>>par.gwarancja;
plik>>par.cale;
plik>>par.cena;
}
plik.clear();
plik2.clear();
plik.close();
plik2.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
remove("bazakom.txt");
rename("bazakomt.txt","bazakom.txt");
}
void szukaj()
{
cout<<"Podaj slowo jakie chcesz wyszukac\n";
cin>>slowo;
clrscr();
plik.open("bazakom.txt",ios::in);
if(plik.good()==true)
{
plik>>par.producent;
plik>>par.model;
plik>>par.stan;
plik>>par.aparat;
plik>>par.gwarancja;
plik>>par.cale;
plik>>par.cena;
while(!plik.eof())
{
if(par.model==slowo || par.producent==slowo || par.stan==slowo || par.aparat==slowo || par.gwarancja==slowo || par.cale==slowo || par.cena==slowo)
{
cout<<"Producent : "<<par.producent<<"\nModel : "<<par.model<<"\nStan : "<<par.stan<<"\nAparat : "<<par.aparat<<"\nGwarancja : "<<par.gwarancja<<"\nCale : "<<par.cale<<"\nCena : "<<par.cena<<"\n\n";
}
plik>>par.producent;
plik>>par.model;
plik>>par.stan;
plik>>par.aparat;
plik>>par.gwarancja;
plik>>par.cale;
plik>>par.cena;
}
plik.clear();
plik.close();
}
else
cout<<"Nie udalo sie otworzyc\n";
}
void usuwaniebazy()
{
if ( !remove("bazakom.txt") )
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(2));
cout<<"Plik zostal usuniety";
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),(4));
cout<<"ups, plik nie zostal usunienty";
}
getchar();
}
void czyszczenie()
{
fstream plik;
plik.open("bazakom.txt",ios::trunc);
DeleteFile("bazakom.txt");
plik.clear();
plik.close();
}
void gotoxy (int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void sortuj()
{
fstream plik;
plik.open("bazakom.txt",ios::in | ios::out);
komorka tmp;
komorka par;
plik>>par.cena;
int n;
for(int i=0;i<n;++i)
{
for(int j=0;j<n-1;++j)
{
if(par[j].cena > par[j+1].cena)
{
tmp = par[j+1];
par[j+1] = par[j];
par[j] = tmp;
}
}
}
}
/*void pokaz_plik()
{
plik.open("bazakom.txt", ios::in);
if(ifstream("bazakom.txt", ios::ate).tellg())
{
cout<<"bazakom.txt";
cout<<" - Plik nie jest pusty";
}
else
{
cout<<"bazakom.txt";
cout<<" - Plik jest pusty";
}
plik.close();
}
*/
A tu macie samą funkcje sortowania:
void sortuj()
{
fstream plik;
plik.open("bazakom.txt",ios::in | ios::out);
komorka tmp;
komorka par;
plik>>par.cena;
int n;
for(int i=0;i<n;++i)
{
for(int j=0;j<n-1;++j)
{
if(par[j].cena > par[j+1].cena)
{
tmp = par[j+1];
par[j+1] = par[j];
par[j] = tmp;
}
}
}
}
a i korzystam ze środowiska Borland C++ 5.02
Z góry dziękuję i proszę o pomoc .