Tablice w strukturach (Baza-Danych)

0

Witam mam takie zadanie, że muszę stworzyć bazę danych. Mam problem z tablicami. Chciałabym by w funkcji kobietki program zliczał kobiety za pomocą ostatniej litery w imieniu. Do tego użyłam lenght() i zadeklarowałam w strukturze tablice string imie. Niestety wywala mi cały czas błąd i już sama nie wiem dlaczego?

#include <iostream>
#include<string>
using namespace std;
int pracownicy;

struct pracownik{
string imie[10];
char nazwisko[20];
char pesel[9];
int pensja_netto;
int ilosc_czlonkow_rodziny;
};
pracownik tablica[10];


void menu()
{
cout<<"[0] Wpisz pracownika do bazy"<<endl;
cout<<"[1] Wyswietl konkretnego pracownika"<<endl;
cout<<"[2] Wyswietl ilosc kobiet w firmie"<<endl;
cout<<"[3] Wyswietl pracownika, ktory ma w imieniu litere:"<<endl;
cout<<"[4] Wyswietl prcownikow, ktorym nalezy sie premia i w jakiej wysokosci"<<endl;
cout<<"[5] Wyswietl pracownikow starszych niz data urodzenia:"<<endl;
cout<<"[6] Wyswietl posortowanych pracownikow wzgledem wieku"<<endl;
cout<<"[7] Wyswietl srednia pensje kobiet"<<endl;
cout<<"[8] Wyswietl srednia pensje mezczyzn"<<endl;
cout<<"[9] Wyswietl pracownika z najwieksza iloscia czlonkow w rodzinie"<<endl;
cout<<"[10] Edycja danych konkretnego pracownika"<<endl;
cout<<endl;

}

int wpisz();
int drukuj();
int kobietki();
int wyszukaj();

int main()
{

    int Wybor_Z_Menu;


    cout << "  BAZA DANYCH PRACOWNIKOW" << endl;
    cout<<"----------------------------------------------------------------"<<endl;
    menu();
    cout<<"----------------------------------------------------------------"<<endl;

    cout<<"Wybierz numer:"<<endl;
    cin>>Wybor_Z_Menu;



    switch(Wybor_Z_Menu)
    {
    case 0:
        {

           wpisz();
           break;
        }

    case 1:
        {
            drukuj();
            break;
            }
    case 2:
        {
            kobietki();
            break;
        }
    default :
{
    cout<<"Zla liczba, podaj jeszcze raz :("<<endl;

    break;
}
    }






    return 0;
}
int wpisz()
{

    cout<<"Ilu pracownikow chcesz wpisac?"<<endl;
    cin>>pracownicy;

    for(int i=0;i<pracownicy;i++)
    {
        cout<<"Podaj imie:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].imie;
        cout<<"Podaj nazwisko:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].nazwisko;
        cout<<"Podaj pesel:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].pesel;
        cout<<"Podaj pensje netto:"<<i+1<<" pracowika"<<endl;
        cin>>tablica[i].pensja_netto;
        cout<<"Podaj ilosc czlonkow rodziny:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].ilosc_czlonkow_rodziny;

    }
    return main();
}

int drukuj()
{
    int b;
    cout<<"Podaj nr pracownika, ktorego dane chcesz wydrukowac"<<endl;
    cin>>b;
    cout<<"Dane pracownika nr: "<<b<<endl;
    cout<<"************************"<<endl;
    cout<<"Imie: "<<tablica[b].imie<<endl;
    cout<<"Nazwisko: "<<tablica[b].nazwisko<<endl;
    cout<<"Pesel: "<<tablica[b].pesel<<endl;
    cout<<"Pensja netto: "<<tablica[b].pensja_netto<<endl;
    cout<<"Ilosc czlonkow rodziny: "<<tablica[b].ilosc_czlonkow_rodziny<<endl;
return main();

}
int kobietki()
{
    int pracownicy;
    int nazwa=tablica[pracownicy].imie;
    int ilosc_kobiet=0;
    int dlugosc_imienia=nazwa.length();
    for(int i=0;i=pracownicy;i++)
    {
        if(imie[dlugosc_imienia]=='a')
            ilosc_kobiet++;

    }
cout<<"W firmie pracuje "<<ilosc_kobiet<<" kobiet";
return main();
}
int wyszukaj()
{
    int suma_pracownikow=0;
    string litera;
    int nazwa=tablica[pracownicy].imie;
    cout<<"Podaj litere jaka powinno zawierac imie szukanego pracownika: "<<endl;
    cin>>litera;
    size_t pozycja=nazwa.find(litera);
    for(int i=0; i<pracownicy;i++)
    {
        if(pozycja !=string::npos)
        {
            suma_pracownikow++;
            cout<<"************************"<<endl;
            cout<<"Dane pracownika nr. "<<suma_pracownikow<<endl;
            cout<<"Imie: "<<tablica[suma_pracownikow].imie<<endl;
        cout<<"Nazwisko: "<<tablica[suma_pracownikow].nazwisko<<endl;
        cout<<"Pesel: "<<tablica[suma_pracownikow].pesel<<endl;
        cout<<"Pensja netto: "<<tablica[suma_pracownikow].pensja_netto<<endl;
        cout<<"Ilosc czlonkow rodziny: "<<tablica[suma_pracownikow].ilosc_czlonkow_rodziny<<endl;
        cout<<"*******************************"<<endl;
        }
return main ();
    }



}
 

Bardzo dziękuję za jakiekolwiek wskazówki :)

2
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Zapoznaj się z operatorami inkrementacji bo ich nie rozumiesz: http://4programmers.net/Forum/1101404
  3. Zapoznaj się z indeksacją tablic jest od 0 dla napisów również.
  4. Rekurencyjne wywołanie main - WTF? Zaraz @Endrju cię ochrzani za UB - może w końcu zapamiętam numerek z dokumentacji ;P
  5. Mylisz typy zmiennych: tablica char, string, int - dla ciebie to wszystko to samo?
0

Co do 5 podpunktu. Sądziłam, że na początku zadeklarowałam tablice imie jako string i następnie próbowałam się do niej odwołać. Np. w funkcji kobietki, gdzie chciałam sprawdzić ostatnią literę za pomocą length(), to jak powinnam potraktować tablicę ze struktury imie??? Już sama się gubię
A jeżeli chodzi o 4 podpunkt chciałam, by program chodził cały czas, bez użycia pętli. Nie wiedziałam, że to jest błąd

0
koralina19 napisał(a):

Co do 5 podpunktu. Sądziłam, że na początku zadeklarowałam tablice imie jako string i następnie próbowałam się do niej odwołać.
A z int'em to jakim cudem pomyliłaś?

koralina19 napisał(a):

... gdzie chciałam sprawdzić ostatnią literę za pomocą length() ...
szukaj: strlen()

0

<quote="1214590">

koralina19 napisał(a):

Co do 5 podpunktu. Sądziłam, że na początku zadeklarowałam tablice imie jako string i następnie próbowałam się do niej odwołać.
A z int'em to jakim cudem pomyliłaś?

Rozróżniam int i string :P tyle,że nie wiem w którym momencie deklaruję tablice imie jako int

0
koralina19 napisał(a):

... nie wiem w którym momencie deklaruję tablice imie jako int
int nazwa=tablica[pracownicy].imie;

0

Aha rzeczywiście przepraszam.

Starałam się zmienić, by dla odpowiednich tablic były wszędzie odpowiedni typ. Ale chyba coś mi nie wyszło, bo wyświetliło mi bardzo dużo błędów. Gdzie jeszcze się mylę.

 
#include <iostream>
#include<string>
using namespace std;
int pracownicy;

struct pracownik{
string imie[10];
char nazwisko[20];
char pesel[9];
int pensja_netto;
int ilosc_czlonkow_rodziny;
};
pracownik tablica[100];


void menu()
{
cout<<"[0] Wpisz pracownika do bazy"<<endl;
cout<<"[1] Wyswietl konkretnego pracownika"<<endl;
cout<<"[2] Wyswietl ilosc kobiet w firmie"<<endl;
cout<<"[3] Wyswietl pracownika, ktory ma w imieniu litere:"<<endl;
cout<<"[4] Wyswietl prcownikow, ktorym nalezy sie premia i w jakiej wysokosci"<<endl;
cout<<"[5] Wyswietl pracownikow starszych niz data urodzenia:"<<endl;
cout<<"[6] Wyswietl posortowanych pracownikow wzgledem wieku"<<endl;
cout<<"[7] Wyswietl srednia pensje kobiet"<<endl;
cout<<"[8] Wyswietl srednia pensje mezczyzn"<<endl;
cout<<"[9] Wyswietl pracownika z najwieksza iloscia czlonkow w rodzinie"<<endl;
cout<<"[10] Edycja danych konkretnego pracownika"<<endl;
cout<<endl;

}

int wpisz();
int drukuj();
int kobietki();
int wyszukaj();
int premia();

int main()
{

    int Wybor_Z_Menu;


    cout << "  BAZA DANYCH PRACOWNIKOW" << endl;
    cout<<"----------------------------------------------------------------"<<endl;
    menu();
    cout<<"----------------------------------------------------------------"<<endl;

    cout<<"Wybierz numer:"<<endl;
    cin>>Wybor_Z_Menu;



    switch(Wybor_Z_Menu)
    {
    case 0:
        {

           wpisz();
           break;
        }

    case 1:
        {
            drukuj();
            break;
            }
    case 2:
        {
            kobietki();
            break;
        }
    case 3:
        {
            wyszukaj();
            break;
        }
    case 4:
        {
            premia();
            break;
        }
    default :
{
    cout<<"Zla liczba, podaj jeszcze raz :("<<endl;

    break;
}
    }

   return 0;
}
int wpisz()
{

    cout<<"Ilu pracownikow chcesz wpisac?"<<endl;
    cin>>pracownicy;

    for(int i=0;i<pracownicy;i++)
    {
        cout<<"Podaj imie:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].imie;
        cout<<"Podaj nazwisko:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].nazwisko;
        cout<<"Podaj pesel:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].pesel;
        cout<<"Podaj pensje netto:"<<i+1<<" pracowika"<<endl;
        cin>>tablica[i].pensja_netto;
        cout<<"Podaj ilosc czlonkow rodziny:"<<i+1<<" pracownika"<<endl;
        cin>>tablica[i].ilosc_czlonkow_rodziny;

    }
    return main();
}

int drukuj()
{
    int b;
    cout<<"Podaj nr pracownika, ktorego dane chcesz wydrukowac"<<endl;
    cin>>b;
    cout<<"Dane pracownika nr: "<<b<<endl;
    cout<<"************************"<<endl;
    cout<<"Imie: "<<tablica[b].imie<<endl;
    cout<<"Nazwisko: "<<tablica[b].nazwisko<<endl;
    cout<<"Pesel: "<<tablica[b].pesel<<endl;
    cout<<"Pensja netto: "<<tablica[b].pensja_netto<<endl;
    cout<<"Ilosc czlonkow rodziny: "<<tablica[b].ilosc_czlonkow_rodziny<<endl;
return main();

}
int kobietki()
{
    string nazwa=tablica[pracownicy].imie;
    int ilosc_kobiet=0;
    string dlugosc_imienia=nazwa.length();
    for(int i=0;i=pracownicy;i++)
    {
        if(imie[dlugosc_imienia-1]=='a')
            ilosc_kobiet=ilosc_kobiet+1;

    }
cout<<"W firmie pracuje "<<ilosc_kobiet<<" kobiet";
return main();
}
int wyszukaj()
{
    int suma_pracownikow=0;
    string litera;
    string nazwa=tablica[pracownicy].imie;
    cout<<"Podaj litere jaka powinno zawierac imie szukanego pracownika: "<<endl;
    cin>>litera;
    size_t pozycja=nazwa.find(litera);
    for(int i=0; i<pracownicy;i++)
    {
        if(pozycja !=string::npos)
        {
            suma_pracownikow=suma_pracownikow+1;
            cout<<"************************"<<endl;
            cout<<"Dane pracownika nr. "<<suma_pracownikow<<endl;
            cout<<"Imie: "<<tablica[suma_pracownikow].imie<<endl;
        cout<<"Nazwisko: "<<tablica[suma_pracownikow].nazwisko<<endl;
        cout<<"Pesel: "<<tablica[suma_pracownikow].pesel<<endl;
        cout<<"Pensja netto: "<<tablica[suma_pracownikow].pensja_netto<<endl;
        cout<<"Ilosc czlonkow rodziny: "<<tablica[suma_pracownikow].ilosc_czlonkow_rodziny<<endl;
        cout<<"*******************************"<<endl;
        }
    }



}
int premia()
{

    for(int i=0;i<pracownicy;i++)
    {
        if((tablica[i].pensja_netto/tablica[i].ilosc_czlonkow_rodziny)<=800)
        {
            cout<<"Pracownikowi"<<tablica[i].imie<<" "<<tablica[i].nazwisko<<"przysluguje premia w wysokosci 200zl"<<endl;
        }
    }
    return main();
}



0
  1. Zapoznaj się z operatorami inkrementacji bo ich nie rozumiesz: http://4programmers.net/Forum/1101404
  2. Albo przejdź całkiem na string albo używaj c-string z funkcjami strlen(), strchr()
  3. Znacznie prościej zrobić menu w ten sposób: http://4programmers.net/Forum/1100492

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