Bitte um Hilfe bei einer C++ Aufgabe



  • Hallo zusammen,

    sorry schon mal wegen dem vielen Text. Ich bin gerade dabei im Rahmen einer Aufgabe ein Programm zu schreiben und komme bei zwei Punkten nicht so richtig weiter.

    • Eingabe der Tage, wenn der Mitarbeiter Urlaub nehmen möchte (muss mehrfach möglich sein)
    • Mitarbeiter, die zum 01.01. des laufenden Kalenderjahrs das 50 Lebensjahr bereits vollendet haben, erhalten 32 Tage Urlaub

    Mein Problem ist nun, dass bei der mehrfachen Beantragung des Urlaubes immer der Ursprungswert für die Urlaubstage genommen wird. Meine Vermutung ist, dass ich entweder meine Formel komplett ändern muss oder den Ursprungswert überschreiben lasse. Nur bekomme ich das nicht so richtig hin.

    Zudem verstehe ich nicht ganz wie ich anstatt des Alters der Person, das Geburtsdatum als Anhaltspunkt zur Berechnung der Verfügbaren Urlaubstage nehmen kann. Muss ich den Tag, Monat und Jahr jeweils als separate Werte nehmen und dann abziehen oder gibt es eine einfachere Möglichkeit die ich übersehe?

    //Funktion zum anlegen eines neuen Mitarbeiters
    void Mitarbeiter::MA_anlegen(void)
    {
        cout << "--Mitarbeiter anlegen--" << endl << endl;
        cout << "Personalnummer: ";
        cin >> personalnummer;
        cout << "Vorname: ";
        cin >> vorname;
        cout << "Nachname: ";
        cin >> name;
        cout << "Alter: ";
        cin >> alter;
        cout << endl;
        cout << "Neuer Mitarbeiter wurde erfasst." << endl << endl;
    
        Bestand=true;
    
    };
    //Funktion zur Berechnung der Verfügbaren Urlaubstage
    void Mitarbeiter::MA_berechnen_urlaubstage()
    {
    
        if (alter > 50) // Wer vor dem 1.1.1971 geboren wurde, ist älter als 50 und hat somit 32 Tage Urlaub
            {
                urlaubstage = 32;
            }
        else if (alter <= 50)   // Wer ab 1.1.1971 geboren wurde, ist 50 oder jünger und hat somit 30 Tage Urlaub
            {
                urlaubstage =30;
            }
    
    }
    //Funktion zum Beantragen des Urlaubs
    int Mitarbeiter::MA_urlaubsantrag()
    {
        cout << "An welchem Tag soll der Urlaub beginnen?" << endl;
        cin >> a;                                                           //erster Urlaubstag
    
        cout << "An welchem Tag soll der Urlaub enden" << endl;
        cin >> e;                                                           //letzter Urlaubstag
    
        anzahl = e - a;                                                 //Anzahl der beantragten Tage Urlaub
        resturlaub=urlaubstage-anzahl-1;                                //Anzahl der beantragten Tage Urlaub vom gesamten Urlaubskontingent abziehen
    
    
        if(resturlaub >= 0)//Wenn der Mitarbeiter noch Urlaub hat, wird dieser genehmigt und der Resturlaub ausgegeben.
        {
            cout << "Antrag genehmigt! Es stehen noch " << resturlaub << " " << "Urlaubstage zur Verf\x81gung" << endl << endl;
            return urlaubstage=resturlaub;                              //Nach erfolgreicher Beabtragung wird Urlaubstage überschrieben und der Wert für Resturlaub sind die zur Verfügung stehenden Urlaubstage
        }
        else if (resturlaub <= 0)//Wenn der Mitarbeiter keinen Urlaub mehr übrig hat, wird der Antrag abgelehnt
        {
            cout << "Antrag abgeleht! Keine Urlaubstage mehr zur Verf\x81gung" << endl << endl;
            return resturlaub = 0; //damit bei Resturlaub nicht minus angezeigt wird
        }
    }
    // Teil der Switch Abfrage vom Hauptprogramm
    case 2: //Mitarbeiter soll Urlaubswünsche eintragen, muss mehrfach möglich sein
                {
                    system("cls");
                    cout << "Geben Sie Ihre Personalnummer ein: ";
                    cin >> ID;
                    cout << endl;
    
                    bool vorhanden=false;
    
    
                    for (int j=0; j<i; j++)
                    {
                        if (MA[j].get_Nr()==ID && MA[j].get_Bestand()==1)
                        {
                            MA[j].MA_berechnen_urlaubstage();
                            MA[j].MA_urlaubsantrag();
                            vorhanden=true;
                        }
                    }
    
                    if (!vorhanden)
                    {
                        cout << "Personalnummer " << ID << " nicht im Verzeichnis vorhanden." << endl << endl;
                    }
    
                    system ("pause");
                    system("cls");
                    break;
    
                }
    
    

    Das sind nur die Teile des Codes bei denen ich nicht so richtig weiterkomme, falls gewünscht kann ich auch alles hochladen.

    Ich befasse mich noch nicht so lange mit C++, daher bin ich für jede Kritik und Hilfe Dankbar.



  • Scheint ja gerade eine angesagte (und schwierige Aufgabe) zu sein, s.a. C++ Programm Brauche im Umfang einer Schularbeit dringend unterstützung !!

    Wenigstens hast du deinen Beitrag besser formuliert und formatiert. 😉

    Du rufst MA_berechnen_urlaubstage() ja jedesmal vor MA_urlaubsantrag() im Hauptprogramm auf. Dies solltest du nur einmalig beim Anlegen des MA machen (bzw. bei einer Funktion jahreswechsel() o.ä.).

    Und die 2. Frage bzgl. des Geburtsdatums verstehe ich so, daß du das Geburtsdatum erfragen (und abspeichern) sollst und dann das aktuelle Jahr zur Abfrage heranziehen sollst (in dem Code des anderen Links gibt es ja die Struktur Datum).
    Die Abfrage sollte aber alter >= 50 lauten ("50 Lebensjahr bereits vollendet haben").



  • @Th69

    Vielen Dank für die schnelle Hilfe. Manchmal sieht man aber auch den Wald vor lauter Bäumen nicht 😅 . Bei der Aufgabe handelt es sich um eine Einsendearbeit im Rahmen des Vhb Kurses C++. Bin scheinbar nicht der Einzige der da auf dem Schlauch steht. Probiere das heute Abend dann mal gleich aus.



  • Hallo zusammen,

    anscheinend bin ich wohl nicht der einzige, der bei der Suche nach Antworten im Rahmen der Einsendeaufgabe in diesem Forum gelandet ist 🙂

    Da ich dir @scabzn leider keine persönliche Nachricht schreiben kann wollte ich dich hier fragen, ob du (auch hinsichtlich der nächsten Aufgabe) Lust hättest, dass wir uns über zB. den Forendiscord (https://discord.gg/EPFvDHh) austauschen. Würde mich sehr freuen 😊


Anmelden zum Antworten