Witam. Napisałem kod tworzący bazę danych którą zapisuje do pliku txt. (dodawanie osób, edytowanie, usuwanie i wyświetlanie listy osób). Mam problem z sortowaniem bąbelkowym wg. preferencji (imię, nazwisko, adres itp). Nigdzie nie moge znaleźć opisu jak to zrobić praktycznie.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>
#include <time.h>
#include <cstdlib>
using namespace std;
struct osoba
{
string imie;
string nazwisko;
string ulica;
string numer;
string kod;
string miejscowosc;
string kraj;
};
int n;
short ilosc_osob; // zmienna ilosci osob
short ile_razy_otwarty; // zmienna ilosci otwarc programu
osoba tablica_osob[100]; //tablica struktur
void Dodaj();
void Zobacz();
void Zapisz();
void Wczytaj();
void Usun();
void Edytuj();
int main()
{
cout << " BAZA DANYCH" << endl;
cout << "\n\n\n";
char wybor;
Wczytaj();
ile_razy_otwarty++;
cout << "Program otwarto " << ile_razy_otwarty << " raz" << endl;
do
{
cout << "\n\n\n";
cout << "Osob w bazie: " << ilosc_osob << endl;
cout << "\n\n";
cout << "Wybierz co chesz zrobic:" << endl;
cout << "1. Dodaj osobe " << endl;
cout << "2. Zobacz wszystkie osoby " << endl;
cout << "3. Usun osobe " << endl;
cout << "4. Edytuj osobe " << endl;
cout << "Podaj liczbe osob:";
cin >> n;
cout << "ESC koniec dzialania programu" << endl;
wybor = _getch();
switch (wybor)
{
case 49: Dodaj();
break;
case 50: Zobacz();
break;
case 51: Usun();
break;
case 52: Edytuj();
break;
}
} while (wybor != 27);
Zapisz();
return 0;
// system("pause");
} // koniec main
void Wczytaj()
{
ifstream plik("osoba.txt", ios::in);
plik >> ile_razy_otwarty;
plik >> ilosc_osob;
short j = 0;
do
{
plik >> tablica_osob[j].imie;
plik >> tablica_osob[j].nazwisko;
plik >> tablica_osob[j].ulica;
plik >> tablica_osob[j].numer;
plik >> tablica_osob[j].kod;
plik >> tablica_osob[j].miejscowosc;
plik >> tablica_osob[j].kraj;
j++;
} while (!plik.eof());
}
void Zapisz()
{
ofstream plik("osoba.txt", ios::out | ios::trunc);
plik << ile_razy_otwarty << "\n";
plik << ilosc_osob << "\n";
for (short j = 0; j < ilosc_osob; j++)
{
plik << " " << endl;
plik << "Osoba nr: " << j + 1 << endl;
plik << tablica_osob[j].imie << endl;
plik << tablica_osob[j].nazwisko << endl;
plik << tablica_osob[j].ulica << endl;
plik << tablica_osob[j].numer << endl;
plik << tablica_osob[j].kod << endl;
plik << tablica_osob[j].miejscowosc << endl;
plik << tablica_osob[j].kraj << endl;
}
}
void Dodaj()
{
cout << "Imie: \n";
cin >> tablica_osob[ilosc_osob].imie;
cout << "Nazwisko: \n";
cin >> tablica_osob[ilosc_osob].nazwisko;
cout << "Ulica: \n";
cin >> tablica_osob[ilosc_osob].ulica;
cout << "Numer domu: \n";
cin >> tablica_osob[ilosc_osob].numer;
cout << "Kod pocztowy: \n";
cin >> tablica_osob[ilosc_osob].kod;
cout << "Miejscowosc: \n";
cin >> tablica_osob[ilosc_osob].miejscowosc;
cout << "Kraj: \n";
cin >> tablica_osob[ilosc_osob].kraj;
cin.ignore();
ilosc_osob++;
Zapisz();
cout << "Dodano i zapisano" << endl;
}
void Zobacz()
{
if (ilosc_osob != 0) // i>0
{
for (short j = 0; j < ilosc_osob; j++) //kolejne zmienne
{
cout << " " << endl;
cout << " Osoba nr " << j + 1 << ": " << endl;
cout << " Imie: " << tablica_osob[j].imie << endl;
cout << " Nazwisko: " << tablica_osob[j].nazwisko << endl;
cout << " Ulica: " << tablica_osob[j].ulica << endl;
cout << " Numer domu: " << tablica_osob[j].numer << endl;
cout << " Kod pocztowy: " << tablica_osob[j].kod << endl;
cout << " Miejscowosc: " << tablica_osob[j].miejscowosc << endl;
cout << "Kraj: " << tablica_osob[j].kraj << endl;
cout << " " << endl;
}
}
else
cout << "Nie ma zadnych osob w bazie!";
}
void Usun()
{
short kogo;
if (ilosc_osob != 0)
{
cout << "Podaj numer osoby ktora chcesz usunac: ";
cin >> kogo;
cin.ignore();
if (kogo > ilosc_osob)
cout << "Brak osoby o takim numerze";
else
{
for (short k = kogo; k < ilosc_osob; k++)
{
tablica_osob[k - 1].imie = tablica_osob[k].imie;
tablica_osob[k - 1].nazwisko = tablica_osob[k].nazwisko;
tablica_osob[k - 1].ulica = tablica_osob[k].ulica;
tablica_osob[k - 1].numer = tablica_osob[k].numer;
tablica_osob[k - 1].kod = tablica_osob[k].kod;
tablica_osob[k - 1].miejscowosc = tablica_osob[k].miejscowosc;
tablica_osob[k - 1].kraj = tablica_osob[k].kraj;
}
ilosc_osob--;
cout << "Osoba o numerze " << kogo << " zostala usunieta!";
cout << " " << endl;
Zapisz();
}
}
else
{
cout << "Brak osoby w bazie!! Wcisnij ENTER!";
}
}
void Edytuj()
{
int kogo;
if (ilosc_osob != 0)
{
cout << "Podaj numer osoby ktora chcesz edytowac: ";
cin >> kogo;
cin.ignore();
if (kogo > ilosc_osob)
cout << "Brak osoby o takim numerze";
else
{
cout << " " << endl;
cout << "Podaj imie osoby: \n";
cin >> tablica_osob[kogo - 1].imie;
cout << "Podaj nazwisko osoby: \n";
cin >> tablica_osob[kogo - 1].nazwisko;
cout << "Podaj ulice: \n";
cin >> tablica_osob[kogo - 1].ulica;
cout << "Podaj numer domu: \n";
cin >> tablica_osob[kogo - 1].numer;
cout << "Podaj kod pocztowy: \n";
cin >> tablica_osob[kogo - 1].kod;
cout << "Podaj miejscowosc: \n";
cin >> tablica_osob[kogo - 1].miejscowosc;
cout << "Podaj kraj: \n";
cin >> tablica_osob[kogo - 1].kraj;
cout << "Osoba o numerze " << kogo << " zostala zedytowana!";
cout << " " << endl;
Zapisz();
}
}
else
{
cout << "Nie ma tej osoby w bazie!! Wcisnij ENTER!";
}
}
void Sortuj()
{ Wczytaj();
cout << " \n \n \n";
cout << "Wybierz kryterium sortowania" << endl;
cout << "61. Imie" << endl;
cout << "62. Nazwisko" << endl;
cout << "63. Ulica" << endl;
cout << "64. Numer domu" << endl;
cout << "65. Kod pocztowy" << endl;
cout << "66. Miejscowosc" << endl;
cout << "67. Kraj" << endl;
char pytanie1;
cin >> pytanie1;
if (pytanie1 == 61)
{
// sortowanie babelkowe
zapisz();
}
Edit1:
Zrobiłem coś takiego ale po wpisaniu przykładowych danych do tablicy program nie sortuje danych.
{
int a, b;
osoba t;
for (a = ilosc_osob - 2; a >= 0; a--)
{
for (b = 0; b <= a; b++)
{
if (tablica_osob[b].imie<tablica_osob[b + 1].imie)
{
t = tablica_osob[b];
tablica_osob[b] = tablica_osob[b + 1];
tablica_osob[b + 1] = t;
}
}
}
}
Zapisz();
Podejrzewam że zrobiłem gdzieś mały błąd ale nie moge go znaleźć