C++ Projekt, bitte um Hilfe



  • Hey, ich habe von der Schule folgende Minimalanforderungen für ein Projekt:

    1. Eingabe von Werten über cin mit Eingabeüberprüfung
    2. Mindestens eine formatierte zweispaltige Ausgabe über cout (mit cout Methoden)
    3. Menüführung über Case- Anwendung
    4. Mindestens eine Feldvariable; keine Verwendung von globalen Variablen
    5. Mindestens einen Funktionsaufruf durch Call by Value oder Call by Reference

    Ich bin noch ziemlich die Anfängerin und versteh von vielem nur Bahnhof wenn ich ehrlich bin.
    Ich habe eine Art Prüfungsergebnisse für Realschüler erstellt. Bisher funktioniert es.
    Hat jemand eine Idee, was ich noch ändern/einfügen kann damit alle Minimalanforderungen erfüllt sind?
    Ich hätte gerne eine Tabelle eingefügt, hat jemand eine Idee/ Tipp wie und wo ich die am besten noch einfügen kann?

    Danke für eure Hilfe:)

    Liebe Grüße
    Valerie

    // Prüfungsergebnisse 
    
    #include "iostream"
    #include "math.h"
    #include "string.h"
    #include "windows.h"
    
    using namespace std;
    
    int main()
    {
    	int menueoption;
    	int ENDE = 3;
    	int Fach;
    	double Note;
    	double Summe = 0;
    	double Anzahl = 1;
    	double Punkte;
    	double Durchschnitt;
    
    
    	SetConsoleOutputCP(65001);
    
    	do
    	{
    
    		cout << "-------------------------------------------------------------------" << endl;
    		cout << endl;
    		cout << "Prüfungsergebnis für einen einzelnen Schüler                    - 1" << endl;
    		cout << "Gesamtdurchschnitt der einzelnen Prüfungen aller Schüler        - 2" << endl;
    		cout << "Programm beenden                                                - 3" << endl;
    		cout << endl;
    		cout << "-------------------------------------------------------------------" << endl;
    		cout << endl;
    
    		cout << "Geben Sie bitte den Menüpunkt ein:" << endl;
    		cout << endl;
    
    		cin >> menueoption;
    
    		switch (menueoption)
    		{
    		case 1:
    			cout << "                                     " << endl;
    			cout << "Wählen Sie das Fach aus" << endl;
    			cout << "Für Englisch wählen Sie           -1:" << endl;
    			cout << "Für Deutsch wählen Sie            -2:" << endl;
    			cout << "Für Mathematik wählen Sie         -3:" << endl;
    			cout << endl;
    			cin >> Fach;
    
    			switch (Fach)
    			{
    			case 1:
    				cout << endl;
    				cout << "Sie haben Englisch ausgewählt." << endl;
    
    				cout << endl;
    				cout << "Geben Sie die Punktezahl ein:     ";
    				cin >> Punkte;
    				cout << endl;
    				cout << "Englischnote:                     ";
    
    				if (Punkte >= 93 && Punkte <= 100)
    				{
    					cout << "sehrgut" << endl;
    
    				}
    				else if (Punkte >= 81 && Punkte < 91)
    				{
    					cout << "gut" << endl;
    				}
    				else if (Punkte >= 67 && Punkte < 80)
    				{
    					cout << "befriedigend" << endl;
    				}
    				else if (Punkte >= 50 && Punkte < 66)
    				{
    					cout << "ausreichend" << endl;
    				}
    				else if (Punkte >= 30 && Punkte < 49)
    				{
    					cout << "mangelhaft" << endl;
    				}
    				else if (Punkte >= 0 && Punkte < 29)
    				{
    					cout << "ungenügend" << endl;
    				}
    
    				break;
    
    			case 2:
    				cout << endl;
    				cout << "Sie haben Deutsch ausgewählt." << endl;
    
    				cout << endl;
    				cout << "Geben Sie die Punktezahl ein:     ";
    				cin >> Punkte;
    				cout << "Deutschnote:                      ";
    
    				if (Punkte >= 93 && Punkte <= 100)
    				{
    					cout << "sehrgut" << endl;
    
    				}
    				else if (Punkte >= 81 && Punkte < 91)
    				{
    					cout << "gut" << endl;
    				}
    				else if (Punkte >= 67 && Punkte < 80)
    				{
    					cout << "befriedigend" << endl;
    				}
    				else if (Punkte >= 50 && Punkte < 66)
    				{
    					cout << "ausreichend" << endl;
    				}
    				else if (Punkte >= 30 && Punkte < 49)
    				{
    					cout << "mangelhaft" << endl;
    				}
    				else if (Punkte >= 0 && Punkte < 29)
    				{
    					cout << "ungenügend" << endl;
    				}
    
    				break;
    
    			case 3:
    				cout << endl;
    				cout << "Sie haben Mathematik ausgewählt." << endl;
    
    				cout << endl;
    				cout << "Geben Sie die Punktezahl ein:        ";
    				cin >> Punkte;
    				cout << "Mathematiknote:                      ";
    
    				if (Punkte >= 93 && Punkte <= 100)
    				{
    					cout << "sehrgut" << endl;
    
    				}
    				else if (Punkte >= 81 && Punkte < 91)
    				{
    					cout << "gut" << endl;
    				}
    				else if (Punkte >= 67 && Punkte < 80)
    				{
    					cout << "befriedigend" << endl;
    				}
    				else if (Punkte >= 50 && Punkte < 66)
    				{
    					cout << "ausreichend" << endl;
    				}
    				else if (Punkte >= 30 && Punkte < 49)
    				{
    					cout << "mangelhaft" << endl;
    				}
    				else if (Punkte >= 0 && Punkte < 29)
    				{
    					cout << "ungenügend" << endl;
    				}
    
    				break;
    
    			}
    			break;
    
    		case 2:
    			cout << endl;
    			cout << "Durchschnitt aller Schüler für die einzelnen Prüfungen:" << endl;
    			cout << endl; 
    			cout << "Für welches Fach wollen Sie den Durchschnitt wissen?" << endl;
    			cout << "für Englisch:           - 1" << endl;
    			cout << "für Deutsch:            - 2" << endl;
    			cout << "für Mathematik:         - 3" << endl;
    			cout << endl;
    			cin >> Fach;
    
    			switch (Fach)
    			{
    			case 1:
    				cout << endl;
    				cout << "Sie haben Englisch ausgewählt." << endl;
    
    
    				while (Anzahl <= 10)
    				{
    					cout << endl;
    					cout << "Geben Sie die Noten der einzelnen Schüler ein:  ";
    					cin >> Note;
    					Summe = Summe + Note;
    					Anzahl = Anzahl + 1;
    				}
    
    				Durchschnitt = Summe / 10;
    
    				cout << "Die Durchschnittsnote ist:     " << Durchschnitt << endl;
    
    				break;
    			case 2:
    				cout << endl;
    				cout << "Sie haben Deutsch ausgewählt." << endl;
    
    
    				while (Anzahl <= 10)
    				{
    					cout << endl;
    					cout << "Geben Sie die Noten der einzelnen Schüler ein:  ";
    					cin >> Note;
    					Summe = Summe + Note;
    					Anzahl = Anzahl + 1;
    				}
    
    				Durchschnitt = Summe / 10;
    
    				cout << "Die Durchschnittsnote ist:     " << Durchschnitt << endl;
    
    				break;
    
    			case 3:
    				cout << endl;
    				cout << "Sie haben Mathematik ausgewählt." << endl;
    
    
    				while (Anzahl <= 10)
    				{
    					cout << endl;
    					cout << "Geben Sie die Note der einzelnen Schüler ein:  ";
    					cin >> Note;
    					Summe = Summe + Note;
    					Anzahl = Anzahl + 1;
    				}
    
    				Durchschnitt = Summe / 10;
    
    				cout << "Die Durchschnittsnote ist:    " << Durchschnitt << endl;
    
    				break;
    			}
    
    			break;
    
    
    
    
    
    
    		}
    
    
    
    	} while (menueoption != ENDE);
    
    
    	return 0;
    }
    


  • @valerriiie sagte in C++ Projekt, bitte um Hilfe:

    Eingabe von Werten über cin mit Eingabeüberprüfung

    Eingabe mit cin hast du. Aber du prüft nicht auf Korrektheit der Eingabe, sondern erwartest, dass der Nutzer schon das Richtige eingeben wird.

    Mindestens eine formatierte zweispaltige Ausgabe über cout (mit cout Methoden)

    Ausgabe über cout hast du auch, aber nicht groß formatiert oder so. Da musst du vlt noch mal ran.

    Menüführung über Case- Anwendung

    Switch Case - hast du

    Mindestens eine Feldvariable; keine Verwendung von globalen Variablen

    Feldvariable meint doch sowas wie ein Array oder Vector. Das fehlt dir noch.

    Mindestens einen Funktionsaufruf durch Call by Value oder Call by Reference

    hast du theoretisch auch: SetConsoleOutputCP(65001);
    Aber: Der Aufruf ist Windows only, und der Aufgabensteller hat das vermutlich anders gemeint. Du solltest vlt. einzelne Teile in Funktionen auslagern.



  • Danke für die Antwort, kannst du mir sagen wie und wo ich das noch einbauen kann? bin da ziemlich überfragt grade:(



  • Falls Deine Zuordnung von Punkten zu Noten für alle Fächer gleich sein soll, könntest Du zB eine Funktion schreiben, der Du die Punktzahl übergibst, und die die Note zurückliefert, das würde Deinen Code auch ein wenig entschlacken.



  • Generell: deine Funktion "main" ist viel zu lang. Du siehst, dass du ganz schön weit einrücken musst für die switch-cases und noch viel mehr für das verschachtelte switch (versteh mich nicht falsch: die Einrückung ist gut und wichtig, aber wenn du viel einrücken musst, ist das ein Zeichen dafür, dass der Code in der entsprechenden Funktion zu kompliziert/unübersichtlich ist). Damit alles übersichtlicher wird, könntest du zum Beispiel den Code aus den cases in jeweils eine neue Funktion verschieben.

    Auch ist dir vielleicht aufgefallen, dass du den Code

    				while (Anzahl <= 10)
    				{
    					cout << endl;
    					cout << "Geben Sie die Note der einzelnen Schüler ein:  ";
    					cin >> Note;
    					Summe = Summe + Note;
    					Anzahl = Anzahl + 1;
    				}
    

    mehrmals wiederholst. Das wäre doch auch eine tolle Gelegenheit für eine Funktion!



  • Du hast vielen Code doppelt. Das ist schlecht 😉 Don't Repeast yourself.

    Der einzige Unterschied zwischen den Fächern ist die Ausgabe "Sie haben XY ausgewählt". Die Sachen könnte man super in eine Funktion extrahieren.
    Dann sind es immer exakt 10 Schüler. Das könnte man steuerbar machen über eine Eingabe und dann die einzelnen Noten z.B. in einem std::vector ablegen. Dann ist auch die "Feld Variable" mit drinnen.

    Irgendwie scheint mir, dass dein Lehrer ein bisschen wenig auf Softwaredesign eingegangen ist.



  • wie findet ihr das?

    // Prüfungsergebnisse 
    
    #include "iostream"
    #include "math.h"
    #include "string.h"
    #include "windows.h"
    
    using namespace std;
    
    double durchschnitt(double);
    void bewertung(double);
    
    int main()
    {
    	int menueoption;
    	int ENDE = 3;
    	int Fach;
    	double Anzahl;
    	double Punkte;
    	double Durchschnitt;
    	
    
    
    	SetConsoleOutputCP(65001);
    
    	do
    	{
    
    		cout << "-------------------------------------------------------------------" << endl;
    		cout << endl;
    		cout << "Prüfungsergebnis für einen einzelnen Schüler                    - 1" << endl;
    		cout << "Gesamtdurchschnitt der einzelnen Prüfungen aller Schüler        - 2" << endl;
    		cout << "Programm beenden                                                - 3" << endl;
    		cout << endl;
    		cout << "-------------------------------------------------------------------" << endl;
    		cout << endl;
    
    		cout << "Geben Sie bitte den Menüpunkt ein:" << endl;
    		cout << endl;
    
    		while (!(cin >> menueoption))
    		{
    			cin.clear();
    			cin.ignore(100, '\n');
    			cout << endl;
    			cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    		}
    
    		system("cls");
    
    		switch (menueoption)
    		{
    		case 1:
    			cout << "                                     " << endl;
    			cout << "Wählen Sie das Fach aus" << endl;
    			cout << "Für Englisch wählen Sie           -1:" << endl;
    			cout << "Für Deutsch wählen Sie            -2:" << endl;
    			cout << "Für Mathematik wählen Sie         -3:" << endl;
    			cout << endl;
    
    			while (!(cin >> Fach))
    			{
    				cin.clear();
    				cin.ignore(100, '\n');
    				cout << endl;
    				cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    			}
    
    			switch (Fach)
    			{
    			case 1:
    				cout << endl;
    				cout << "Sie haben Englisch ausgewählt." << endl;
    
    				cout << endl;
    				cout << "Geben Sie die Punktezahl ein:     ";
    
    				while (!(cin >> Punkte))
    				{
    					cin.clear();
    					cin.ignore(100, '\n');
    					cout << endl;
    					cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    				}
    
    				cout << endl;
    				cout << "Englischnote:                     ";
    
    				bewertung(Punkte);
    
    				break;
    
    			case 2:
    				cout << endl;
    				cout << "Sie haben Deutsch ausgewählt." << endl;
    
    				cout << endl;
    				cout << "Geben Sie die Punktezahl ein:     ";
    
    				while (!(cin >> Punkte))
    				{
    					cin.clear();
    					cin.ignore(100, '\n');
    					cout << endl;
    					cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    				}
    
    				cout << endl;
    				cout << "Deutschnote:                      ";
    
    				bewertung(Punkte);
    
    				break;
    
    			case 3:
    				cout << endl;
    				cout << "Sie haben Mathematik ausgewählt." << endl;
    
    				cout << endl;
    				cout << "Geben Sie die Punktezahl ein:        ";
    
    				while (!(cin >> Punkte))
    				{
    					cin.clear();
    					cin.ignore(100, '\n');
    					cout << endl;
    					cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    				}
    
    				cout << endl;
    				cout << "Mathematiknote:                      ";
    
    				bewertung(Punkte);
    
    				break;
    
    
    			default:
    
    
    				//Text für Neueingabe, wegen falscher Werteingabe
    				cout << "Neueingabe" << endl;
    
    				break;
    			}
    
    
    			break;
    
    		case 2:
    			cout << endl;
    			cout << "Durchschnitt aller Schüler für die einzelnen Prüfungen:" << endl;
    			cout << endl; 
    			cout << "Für welches Fach wollen Sie den Durchschnitt wissen?" << endl;
    			cout << "für Englisch:           - 1" << endl;
    			cout << "für Deutsch:            - 2" << endl;
    			cout << "für Mathematik:         - 3" << endl;
    			cout << endl;
    
    			while (!(cin >> Fach))
    			{
    				cin.clear();
    				cin.ignore(100, '\n');
    				cout << endl;
    				cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    			}
    
    			switch (Fach)
    			{
    
    			case 1:
    				cout << endl;
    				cout << "Sie haben Englisch ausgewählt." << endl;
    
    
    				cout << "Anzahl der Schüler in der Klasse:" << endl;
    
    				do
    				{
    					while (!(cin >> Anzahl))
    					{
    						cin.clear();
    						cin.ignore(100, '\n');
    						cout << endl;
    						cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    					}
    				} while (Anzahl < 1);
    
    
    				Durchschnitt = durchschnitt(Anzahl);
    
    				
    				cout << endl;
    				cout << "Die Durchschnittsnote ist:     " << Durchschnitt << endl;
    				cout << endl;
    				cout << endl;
    				cout << endl;
    
    				break;
    
    
    			case 2:
    				cout << endl;
    				cout << "Sie haben Deutsch ausgewählt." << endl;
    
    
    				cout << "Anzahl der Schüler in der Klasse:" << endl;
    				
    				do
    				{
    					while (!(cin >> Anzahl))
    					{
    						cin.clear();
    						cin.ignore(100, '\n');
    						cout << endl;
    						cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    					}
    				} while (Anzahl < 1);
    
    
    				Durchschnitt = durchschnitt(Anzahl);
    
    
    				cout << endl;
    				cout << "Die Durchschnittsnote ist:     " << Durchschnitt << endl;
    				cout << endl;
    				cout << endl;
    				cout << endl;
    
    				break;
    
    
    			case 3:
    				cout << endl;
    				cout << "Sie haben Mathematik ausgewählt." << endl;
    
    
    				cout << "Anzahl der Schüler in der Klasse:" << endl;
    				
    				do
    				{
    					while (!(cin >> Anzahl))
    					{
    						cin.clear();
    						cin.ignore(100, '\n');
    						cout << endl;
    						cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    					}
    				} while (Anzahl < 1);
    
    				Durchschnitt = durchschnitt(Anzahl);
    
    
    				cout << endl;
    				cout << "Die Durchschnittsnote ist:     " << Durchschnitt << endl;
    				cout << endl;
    				cout << endl;
    				cout << endl;
    
    				break;
    
    
    			default:
    
    
    				//Text für Neueingabe, wegen falscher Werteingabe
    				cout << "Neueingabe" << endl;
    
    				break;
    			}
    
    			break;
    
    		default:
    
    
    			//Text für Neueingabe, wegen falscher Werteingabe
    			cout << "Neueingabe" << endl;
    
    			break;
    
    		}
    
    
    	} while (menueoption != ENDE);
    
    
    	return 0;
    }
    
    
    
    void bewertung(double punkte)
    {
    	double Punkte;
    
    	
    	if (punkte >= 93 && punkte <= 100)
    	{
    		cout << "sehrgut" << endl;
    
    	}
    	else if (punkte >= 81 && punkte < 91)
    	{
    		cout << "gut" << endl;
    	}
    	else if (punkte >= 67 && punkte < 80)
    	{
    		cout << "befriedigend" << endl;
    	}
    	else if (punkte >= 50 && punkte < 66)
    	{
    		cout << "ausreichend" << endl;
    	}
    	else if (punkte >= 30 && punkte < 49)
    	{
    		cout << "mangelhaft" << endl;
    	}
    	else if (punkte >= 0 && punkte < 29)
    	{
    		cout << "ungenügend" << endl;
    	}
    
    }
    
    
    double durchschnitt(double anz)
    {
    	double anzahl = 1;
    	double Note;
    	double Summe = 0;
    	double Durchschnitt;
    
    	while (anzahl <= anz)
    	{
    		cout << endl;
    		cout << "Geben Sie die Noten der einzelnen Schüler ein:  ";
    
    		do
    		{
    			while (!(cin >> Note))
    			{
    				cin.clear();
    				cin.ignore(100, '\n');
    				cout << endl;
    				cout << "Bitte eine Zahl eingeben, keine Buchstaben: \n";
    			}
    		} while (Note >= 7);
    
    		Summe = Summe + Note;
    		anzahl = anzahl + 1;	
    
    		
    
    	}
    
    	Durchschnitt = Summe / anz;
    
    	return Durchschnitt;
    }
    
    


  • Schon besser, aber auch deine Einlese-Schleifen könntest du in eine Funktion auslagern.
    Und wie @wob schon geschrieben hat, jeden Menüpunkt als eigene Funktion.

    Funktionen sollten möglichst gut (auf einem Blick) lesbar sein, daher sollten sie möglichst nur aus max. 10-20 (inhaltlich relevanten) Zeilen bestehen.

    Außerdem sind deine #include-Anweisungen nicht C++ konform.
    Nur lokale Header (des eigenen Projekts) werden mit "..."eingebunden:

    #include <iostream> // System-Header mit <...> einbinden
    #include <cmath> // aus C übernommener Header
    #include <string> // Header der Standard C++ Library ohne .h
    #include <windows.h> // ebenfalls ein System-Header
    

    (wobei du bisher keine Funktionalitäten aus <cmath> sowie <string> benutzt - diese also hier gelöscht werden können)

    PS: Deine Funktion bewertung hat bisher noch einige nicht zugewiesene Werte (Grenzwerte der Notenpunkte)...



  • @valerriiie sagte in C++ Projekt, bitte um Hilfe:

      		cout << endl;
      		cout << "Die Durchschnittsnote ist:     " << Durchschnitt << endl;
      		cout << endl;
      		cout << endl;
      		cout << endl;
    

    Zugegeben, ein sehr kleines "Problemchen" und es ist recht irrelevant hier, aber du musst es dir ja gar nicht erst angewöhnen. Und zwar schreibt std::endl einen Zeilenumbruch UND flusht danach. Das viele flushen ist aber absolut unnötig, d.h. "\n" tut es auch. Siehe auch: https://www.youtube.com/watch?v=GMqQOEZYVJQ


Log in to reply