problem z bazą danych i jej odczytem

0

Zrobiłem bazę danych, kompiluje sie, ale jest problem. Sortowania wg wieku mi nie dziala i nie wiem, gdzie jest problem i dodatkowo odczyt bazy z pliku mi nie dziala, musze uzywac fwrite i fread do zapisu i odczytu. Proszę o szybka pomoc. O to mój kod:

#include <iostream>
#include <conio.h>

using namespace std;

struct struktura
{
	char imie[20];
	char nazwisko[30];
	int wiek;

};
struktura dane[100];
int main()

{
    int wybrano = 9;
    int a = 0;

    while (wybrano !=0)
    {
    system("cls");
    cout << "Program jest przewidziany na 100 osob" << endl << endl;
    cout << "Menu:" << endl << endl;
    cout << "1. Dodaj osobe " << endl;
    cout << "2. Wypisz osoby " << endl;
    cout << "3. Posortuj osoby wg wieku " << endl;
    cout << "4. Usun osobe " << endl;
    cout << "5. Zapisz " << endl;
    cout << "6. Wczytaj dane z pliku " << endl;
    cout << "0. Wyjdz! " << endl;
    cout << "Wybrano: ";
    cin >> wybrano;

    switch (wybrano)
    {
    case 1:
    if (a < 100)
    {
    system ("cls");
    cout << "Wprowadz dane: " << endl;
    cout << "Podaj imie: " << endl;
    cin >> dane[a].imie;
    cout << "Wprowadz nazwisko: " << endl;
    cin >> dane[a].nazwisko;
    cout << "Podaj wiek: " << endl;
    cin >> dane[a].wiek;
    a++;
    }
    else cout << " Brak wolnego miejsca! " << endl;
    break;

    case 2:
    system ("cls");
    cout << "Osoby w bazie:" << endl;

    for(int i=0; i<a; i++)
    {
        cout << dane[i].imie <<" "<< dane[i].nazwisko <<" "<< dane[i].wiek << " lat." << endl;
    }

    getch();
    break;

    case 3:
    system ("cls");
    cout << "Osoby sortowane wg wieku:" <<endl;

    struktura zmienna;
    for (int i=0; i<a;i++)
    {
        for(int j=0; j<a-1;j++)
        {
            if (dane[j].wiek>dane[j+1].wiek);
           {
            zmienna=dane[j+1];
            dane[j+1]=dane[j];
            dane[j]=zmienna;
           }
        }
    }
    for (int i=0; i<a;i++)
    {
    cout <<i+1<<" "<<dane[i].imie<<" "<<dane[i].nazwisko<<" "<<dane[i].wiek<<" "<<endl;
    }
    getch();
    break;

    case 4:
    system ("cls");
    cout<<"Wszystkie osoby w bazie: "<<endl;
    for(int i=0; i<a;i++)
    {
        cout<<i+1<<" "<<dane[i].imie<<" "<<dane[i].nazwisko<<" "<<dane[i].wiek<< "lat"<<endl;
    }

        int miejsce;
        cout<<"Ktora osobe chcesz usunac (0 = anuluj): ";
        cin>>miejsce;
        if (miejsce !=0)
        {
            for (int i = miejsce-1;i<a;i++)
            {
                dane[i]=dane[i+1];
            }
            a--;
        }
    break;

    case 5:
    system ("cls");
    FILE *zapis;
    zapis=fopen("baza danych.dat", "wb");
    fwrite(dane,sizeof(struct struktura),a,zapis);
    fclose(zapis);
    cout<<"Zapisano do pliku";
    getch();
    break;

    case 6:
    system ("cls");
    FILE *wczytaj;
    wczytaj=fopen("baza danych.dat","rb");
    fread (dane,sizeof(struct struktura),a,wczytaj);
    fclose(wczytaj);
    cout<<"Dane z pliku zostaly wczytane";
    getch();
    break;
        }
    }
    return 0;
    }
    }
0

Co do sortowania, to masz źle sortowanie bąbelkowe

int zmiana;
   do
   {
        zmiana = 0;
        for(int j=0; j<a-1;j++)
        {
            if (dane[j].wiek>dane[j+1].wiek);
           {
            zmienna=dane[j+1];
            dane[j+1]=dane[j];
            dane[j]=zmienna;
            zmiana = 1;
           }
        }
    }while(zmiana)

Sortowanie bąbelkowe należy powtarzać dopóty, dopóki zostało coś zamienione. Jeżeli nie, oznacza to, że tablica została posortowana

0

Czyli case 3 powinien tak wyglądać:? :

 case 3:
    system ("cls");
    cout << "Osoby sortowane wg wieku:" <<endl;

    struktura zmienna;
    for (int i=0; i<a;i++)
    {
        int zmiana;
   do
   {
        zmiana = 0;
        for(int j=0; j<a-1;j++)
        {
            if (dane[j].wiek>dane[j+1].wiek);
           {
            zmienna=dane[j+1];
            dane[j+1]=dane[j];
            dane[j]=zmienna;
            zmiana = 1;
           }
        }
    }while(zmiana)

    }
    for (int i=0; i<a;i++)
    {
    cout <<i+1<<" "<<dane[i].imie<<" "<<dane[i].nazwisko<<" "<<dane[i].wiek<<" "<<endl;
    }
    getch();
    break;

Jeśli tak to coś u mnie nie gra bo kompilator się wiesza w momencie próby posortowania.

0

O jeden for masz za dużo:

case 3:
    system ("cls");
    cout << "Osoby sortowane wg wieku:" <<endl;
 
    struktura zmienna;
    int zmiana;
    do
    {
        zmiana = 0;
        for(int j=0; j<a-1;j++)
        {
            if (dane[j].wiek>dane[j+1].wiek);
           {
            zmienna=dane[j+1];
            dane[j+1]=dane[j];
            dane[j]=zmienna;
            zmiana = 1;
           }
        }
    }while(zmiana)
    for (int i=0; i<a;i++)
    {
    cout <<i+1<<" "<<dane[i].imie<<" "<<dane[i].nazwisko<<" "<<dane[i].wiek<<" "<<endl;
    }
    getch();
    break;
0

a nie brakuje mi jakiejś biblioteki bo jak skopiowałem ten kod to jak ma sortować to jest puste pole i się wiesza program.

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