Sortowanie z pliku, baza danych

0

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 .

0
          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);

Wiem, że nie do końca w temacie, ale takie coś zadziała Ci tylko gdy ktoś uruchomi konsolę w takiej samej rozdzielczości co Ty :P

A odnośnie problemu:

   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;
                        }
                }
        }
}

Deklarujesz sobie jeden obiekt typu "komorka" o nazwie "par", wczytujesz do niego cenę - okej, ea potem w pętli nagle porównujesz elemnty tablicy, która też się nazywa "par"- wtf? Przecież tej tablicy nigdzie nie masz zadeklarowanej

0

..FYI#1:
jest jeszcze drugi 'konflikt' i przyszle problemy ze scopem/kopiowaniem:
41. komorka par; -- globalna
458. komorka par; -- lokalna

FYI#2:

a i korzystam ze środowiska Borland C++ 5.02

z wiki: "Borland C++ 5.02 - (1997) Final release" to pewnie tlumaczy to indeksowanie struktur..
ale tylko sie smieję, nie wiem :)
podejrzewam, ze autorowi wcielo jakas linijke z deklaracja tablicy roboczej, tez o nazwie 'par'..

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