Wstawianie rekordu do tablicy posortowanej (Dev-C++)

Witam,

mój problem polega na tym że nie wiem jak zrobić żeby dodawało rekord do bazy ,ale do tablicy posortowanej.

Próbowałem sam do tego dojść, ale niepowiodło sie.

Jeżeli byłby ktoś tak miły i pomógł mi w tym byłbym wdzięczny

Niżej podaje kod całego programu:

#include 

#include 

using namespace std;


class Ksiazka

       {

       protected:

       char Tytul[50],Autor[30];

       int iloscStron,RokWydania;

       float Cena;


       public:

       void ZapiszDoPliku();

       void WczytajZPliku();

       void Wczytaj();

       const char* Ksiazka::DajTytul() const

             {return Tytul;}

       const char* Ksiazka::DajAutor() const

             {return Autor;}

       int Ksiazka::DajStrony()

             {return iloscStron;}

       int Ksiazka::DajRok()

             {return RokWydania;}

       float Ksiazka::DajCena()

             {return Cena;}

       };


void ZapiszBazeDoPliku();

void WczytajBazeZPliku();

void DrukujPomoc();

void DodajRekordNaKoniec();

void Drukuj();

void usun();

void ZestiloscStron();

void ZestRokWydania();

void ZestCena();

void PokazRaport();

void PokazTabela();



       const char PlikBazy[]="d:\\baza.txt";

       int MAXROZMIAR=10;

       Ksiazka*Tablica=NULL;

       int Rozmiar=0;

       fstream Plik;


void Ksiazka::Wczytaj()

         {


         cout<<"Podaj tytul :"<
         while (cin.peek()=='\n') cin.get();

         cin.getline(Tytul,sizeof (Tytul));

         int i;

         Tytul[0]=toupper(Tytul[0]);

         for(i=1;Tytul[i] ! =0;i++)

         Tytul[i]=tolower(Tytul[i]);


         cout<<"Podaj autora:"<
         while (cin.peek()=='\n') cin.get();

         cin.getline(Autor,sizeof (Autor));

         for (i = 0; Autor[i] ! = '\0'; ++i) 

         { 

         if ((i == 0) || (Autor[i - 1] == ' ')) 

         Autor[i] = toupper(Autor[i]); 

         else 

         Autor[i] = tolower(Autor[i]); 

         }



         cout<<"Podaj ilosc stron:"<
         cin>>iloscStron;


         cout<<"Podaj cene:"<
         cin>>Cena;

         if (Cena<0)

         cout<<"BLAD! \n Podaj cene wieksza od 0:"<
         while(Cena<0)

         cin>>Cena;


         cout<<"Podaj rok wydania:"<
         cin>>RokWydania;

         if(!(RokWydania > 1900 && RokWydania < 2010))

         cout<<"BLAD! \n Podaj rok z zakresu 1900-2010:"<
         while(!(RokWydania > 1900 && RokWydania < 2010))

         cin>>RokWydania;

         }


void Ksiazka::ZapiszDoPliku()

{

     Plik<
     Plik<
     Plik<
     Plik<
     Plik<
}


void Ksiazka::WczytajZPliku()

{

           while (Plik.peek()=='\n') Plik.get();

           Plik.getline(Tytul,sizeof (Tytul));


           while (Plik.peek()=='\n') Plik.get();

           Plik.getline(Autor,sizeof (Autor));

           Plik>>iloscStron;

           Plik>>Cena;

           Plik>>RokWydania;

}


void ZapiszBazeDoPliku()

         {    

              Plik.clear();                    

              Plik.open("d:\\baza.txt", ios::out);

              if(!Plik.good())

              {

              cout<<"BLAD: Nie moge otworzyc pliku do zapisu!"<
              return;

              }

              Plik << Rozmiar << endl;

              int i;

              for(i=0;i
              Tablica[i].ZapiszDoPliku();

              Plik.close();    

         }


void WczytajBazeZPliku()

         {

              Plik.open("d:\\baza.txt", ios::in);

              if(!Plik.good())

              {

              cout<<"BLAD:Nie moge otworzyc pliku do odczytu!"<
              MAXROZMIAR=Rozmiar+10;

              Tablica = new Ksiazka [MAXROZMIAR];

              return;


              }

              Plik >> Rozmiar;

              MAXROZMIAR=Rozmiar+10;

              Tablica = new Ksiazka [MAXROZMIAR];

              int i;

              for(i=0;i
              Tablica [i].WczytajZPliku();

              Plik.close();    


         }


void DrukujPomoc()

         {

              cout<<"Dostepne polecenia:\n"

               " n - dodaj nowy rekord na koniec tabeli:\n"

               " d - drukuj baze:\n"

               " c - zestawienie cena:\n"

               " s - zestawienie ilości stron:\n"

               " r - zestyawienie wg rok wydania:\n"

               " u - usun:\n"

               " q - koniec pracy programu:\n"

               " h - wydruk html:\n"

               " t - wydruk raport jako tabela:\n";

         }


void DodajRekordNaKoniec()

         {

              Tablica[Rozmiar++].Wczytaj();

              if (Rozmiar+1 == MAXROZMIAR)

              {

                            int i;

                            Ksiazka*Tab1;

                            MAXROZMIAR +=10;

                            Tab1 = new Ksiazka [MAXROZMIAR];

                            for (i=0;i
                            Tab1[i]=Tablica[i];

                            delete [] Tablica;

                            Tablica = Tab1;

              }

         }


void Drukuj()

         {

              int i;

              cout<<"Zawartosc bazy:"<
              for(i=0; i
              cout<
               

               <<"Tytul - "<
               <<"Autor - "<
               <<"Ilosc stron - "<
               <<"Cena - "<
               <<"Rok wydania - "<
               cout<<"\t\t\t\t---KONIEC---"<
         }


void usun()

     {

           int i, j;

           cout << "\nWpisow: " <
           cout << "\nPodaj nr wpisu, ktory chcesz usunac: ";

           cin >> j;

           j--;

               for (i=j; i
	           Tablica[i]=Tablica[i+1];

               Rozmiar--;

     }




void ZestiloscStron()

     {

          float c1, c2;

          int i;

          cout << "Podaj ilosc stron poczatkowa(dolna granica): ";

          cin >> c1;

              if (c1<0)

	          {

	             cout << "Podales liczbe mniejsza od zera! ";

	             return;

              }

          cout << "Podaj ilosc stron koncowa(gorna granica): ";

          cin >> c2;

              if (c2<0)

	          {

	             cout << "Podales liczbe mniejsza od zera!";

	             return;

              }

              for (i=0; i
              if (Tablica[i].DajStrony()>=c1 && Tablica[i].DajStrony()<=c2)

		      cout<
                  <<"Tytul:"<
                  <<"Autor:"<
                  <<"Ilosc stron:"<< Tablica[i].DajStrony()<
                  <<"Cena:"<< Tablica[i].DajCena()<
                  <<"Rok wydania:"<
     }


void ZestRokWydania()

     {

         int i,j;

         cout<<"\nPodaj rok wydania:";

         cin>>j;

                for(i=0;i
                if(Tablica[i].DajRok()==j)

                cout<
                    <<"Tytul:"<
                    <<"Autor:"<
                    <<"Ilosc stron:"<< Tablica[i].DajStrony()<
                    <<"Cena:"<< Tablica[i].DajCena()<
                    <<"Rok wydania:"<
     }

void ZestCena()

     {

           float c1, c2;

           int i;

           cout << "Podaj cene poczatkowa: ";

           cin >> c1;

               if (c1<0)

	           {

	              cout << "Podales liczbe mniejsza od zera! ";

	              return;

               }

               cout << "Podaj cene koncowa: ";

               cin >> c2;

               if (c2<0)

	           {

	              cout << "Podales liczbe mniejsza od zera!";

	              return;

               }

               for (i=0; i
               if (Tablica[i].DajCena()>=c1 && Tablica[i].DajCena()<=c2)

		       cout<
                   <<"Tytul:"<
                   <<"Autor:"<
                   <<"Ilosc stron:"<< Tablica[i].DajStrony() <
                   <<"Cena:"<< Tablica[i].DajCena()<
                   <<"Rok wydania:"<
               return;

     }

void PokazRaport()

{


     float c1,c2;

     int i;

     cout << "Podaj cene poczatkowa: ";

           cin >> c1;

               if (c1<0)

	           {

	              cout << "Podales liczbe mniejsza od zera! ";

	              return;

               }

     cout << "Podaj cene koncowa: ";

               cin >> c2;

               if (c2<0)

	           {

	              cout << "Podales liczbe mniejsza od zera!";

	              return;

               }

     Plik.clear();

     Plik.open("D:\\Raport.htm",ios::out);

     if(!Plik.good())

     {

     cout<<"blad"<
     return ;

     }


Plik<<"type=text/css>"

 "

" "

" “** Raport-zestawienie ksiazek wedlug cen”

"face=‘Comic Sans MS’ color=‘red’>**
“< Plik<<”

Lista ksiazek wedlug cen od: "<

“< Plik<<”

  1. “; int licznik=0; for(i=0;i if (Tablica[i].DajCena()>=c1 && Tablica[i].DajCena()<=c2) { Plik<<”
    pozycja
  • Tytul:_"

    <face=‘Castellar’>_
    face=‘Arial narrow’> "< Plik<<“Autor:

    <face=‘Castellar’> face=‘Arial narrow’>"< Plik<<“ilosc stron:”

    <face=‘Arial narrow’>"< Plik<<“rok wydania:”

    <face=‘Arial narrow’>"< Plik<<“cena:”

    <face=‘Arial narrow’>"< Plik<<"

“< licznik++; } if(licznik==0) Plik<<”

brak książek w bazie dla podanych kryteriów"< Plik<<"   wszystkich ksiazek w bazie:"

  "<font face="Tahoma" color="#FF0000">"

<
w tym spełniajacych warunek:"

  "<font face="Tahoma" color="#FF0000">"

<"< Plik.close(); system (“D:\raport.htm”); } void PokazTabela() { float c1, c2; int i; cout << "\nPodaj cene poczatkowa: "; cin >> c1; if (c1<0) { cout << "\nPodales liczbe mniejsza od zera! "; return; } cout << "\nPodaj cene koncowa: "; cin >> c2; if (c2<0) { cout << “\nPodales liczbe mniejsza od zera!”; return; } Plik.clear(); Plik.open(“d:\raport.htm”, ios::out); if (!Plik.good()) { cout<<“BLAD: Nie moge otworzyc pliku do zapisu!”< return; } Plik<<"type=text/css>

" "Zestawienie ksiazek w cenie od: "<

  1. “< int j=0; for (i=0; i if (Tablica[i].DajCena()>=c1 && Tablica[i].DajCena()<=c2) { Plik<<”
    " “

                               "<font face="Times New Roman" color="#cc0000"><u>Numer KSIAZKI W BAZIE w bazie: "&lt;<i></i></u></font></b></font>"\< Plik\<\<" " "
    

| Tytul | "< |

" “Autor"<”< Plik<<" " “iloscStron"<”< Plik<<" " “Rok wydania"<”< Plik<<" " “Cena"<”< Plik<<"


Użyj kolejki zamiast tablicy. Żeby wstawić do tablicy element na pozycji N musisz przesunąć wszystko na pozycji N i dalszych. Jeśli tablica Ci się skończy (a skończy Ci się) to musisz ją realokować. Jako że używasz new masz więcej kłopotów niż to wszystko jest warte.

Wstawienie na pozycję N (wartość 0…ilosc_elementow_w_tablicy - 1) w tablicy elementu wymaga pętli (pseudokod)

for (i = ilosc_elementow_w_tablicy; i > N; i--)

  tablica[i] = tablica[i-1];

tablica[N] = nowy_element;