Problem z tablicą, która przechowuje tylko ostatnio wprowadzone informacje

0

Mam problem ze swoim kodem, ponieważ potrzebuję zrobić aplikacje, która umożliwia dodanie, usuwanie, wyświetlanie i zmienianie stanowisk pracowników. Problem jest tylko taki, że tablice nie idą mi zbyt dobrze i zawsze mam podobny problem. Po uruchomieniu programu i dodaniu co najmniej dwóch pracowników program ten zapisuje tylko i wyłącznie ostatnią wpisaną informacje w tablicy, a ja nie mogę się doszukać rozwiązania..
Kod:





#include <iostream>

using namespace std;

struct Pracownik {

    string imie;
    string nazwisko;
    string stanowisko;
    float pensja_brutto;


};

int main()
{

    Pracownik Pracownicy[10];
    int b = 0;
    int warunek1;
    int warunek = 1;
    int warunek2;
    int liczbap = 0;



    do
    {
        cout << "MENU: " << endl;
        cout << "1. Dodaj Pracownika " << endl;
        cout << "2. Usun Pracownika " << endl;
        cout << "3. Wyswietl Pracownikow " << endl;
        cout << "4. Edytuj Stanowisko " << endl;

        cout << " " << endl;

        int wybor;

        cout << "Wpisz liczbe: ";

        cin >> wybor;

        switch (wybor)
        {
        case 1:
        {

            cout << "Ilu pracownikow masz zamiar dodac?" << endl;
            cin >> liczbap;
            do
            {
                b = 0;
                cout << "Wprowadz imie swojego pracownika: ";
                cin >> Pracownicy[b].imie;
                cout << "Wprowadz nazwisko swojego pracownika: ";
                cin >> Pracownicy[b].nazwisko;
                cout << "Wprowadz stanowisko swojego pracownika: ";
                cin >> Pracownicy[b].stanowisko;
                cout << "Wprowadz pensje brutto swojego pracownika: ";
                cin >> Pracownicy[b].pensja_brutto;

                b++;

                cout << "Aby kontynuowac wcisnij 0, aby zakonczyc wcisnij 1" << endl;


                cin >> warunek;

            } while (warunek == 0);
            break;
        }
        case 3:
        {
            cout << "Aktualni pracownicy:" << endl;
            do
            {
                b = 0;
                warunek2 = 0;

                cout << Pracownicy[b].imie << endl;
                cout << Pracownicy[b].nazwisko << endl;
                cout << Pracownicy[b].stanowisko << endl;
                cout << Pracownicy[b].pensja_brutto << endl;
                cout << "" << endl;
                b++;
                warunek2++;
            } while (warunek2 == liczbap);


            break;
        }
        default:
        {
            cout << "Podano bledna liczbe" << endl;
            break;
        }

        }

        cout << "Aby zakonczyc uzywanie menu kliknij 5, aby kontynuowac kliknij 0" << endl;
        cin >> warunek1;

    } while (warunek1 == 0);

}
5

b = 0; w 50. linii jest problemem. Nie powinieneś go zerować w pętli, bo wszystko wpisujesz pod index 0

2

Jeżeli masz taką możliwość to polecam użyć std::vector jako tablicę.

  • Zyskujesz wtedy większą elastyczność w dodawaniu nowych pracowników, nie jesteś ograniczona do z góry narzuconego ograniczenia jej rozmiaru ( tutaj nie możesz przekroczyć wartości 10 ).
  • Nie musisz zapamiętywać ostatniego indeksu pod który dodany został nowy pracownik ( tutaj zresztą tego nie robisz ). Używasz po prosto funkcji push_back().
  • Masz do dyspozycji łatwe w użyciu i czytelne pętle zakresowe for.
for( const auto& pracownik : pracownicy )
{
  // kod 
}

dzięki którym nie musisz używać dodatkowych zmiennych typu warunek2 - których swoją drogą nazwy nic sensownego nie znaczą.

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