Programier-Problem

Datenmaulwurf

Cadet 4th Year
Registriert
Juni 2008
Beiträge
71
Mein Programm läuft nun relativ gut, doch leider nicht bis zum Ende durch, könntet ihr mir sagen woran das liegt (außerdem habe ich ein kleines Problem bei dem nächsten Kunden):

#include <iostream>
using namespace std;
int main()
{
int anzahl,vorrat[21],verkauf[21],maxverkauf,maxverkaufnr,maxumsatznr,menge[21][21];
float preis[21],umsatz[21],maxumsatz,summe[21],gesamt=0,maxkunde;
char artikel[21][15],nocheinkunde,nochetwas, maxkundenr;
int bestellung,kunden,i=0,j=0;
//
// Auffuellen der Lagerbestaende
//
cout << "===============================================================================\n" ;
cout << "Einweisung in das Kassenprogramm der Schuelerfirma:\n";
cout << "1. Taetigen sie alle geforderten eingaben ohne Umlaute!\n";
cout << "2. Verwenden sie keine Lehrzeichen!\n";
cout << "3. Alle Preise mit . eingeben (z.B.: 2.50)!\n";
cout << "4. Bestaetigen sie alle Eingaben mit Enter!\n";
cout << "===============================================================================\n\n";
cout << "Wieviele Artikel werden heute angeboten: ";
cin >> anzahl;
for (j=1;j<=anzahl;j++)
{
cout << "\nBezeichnug des Artikels " << j << " : ";
cin >> artikel[j];
cout << "\nWieviel kostet der Artikel " << artikel[j] << " : ";
cin >> preis[j];
cout << "\nWie gross ist der Vorrat des Artikels " << artikel[j] << " : ";
cin >> vorrat[j];
cout << "\n===============================================================================\n";
}
//
// Das Geschaeft oeffnet und die Kunden kommen
//
gesamt=0;
for (j=1;j<=anzahl;j++)verkauf[j]=0;umsatz[j]=0;
nocheinkunde = 'j';
i = 1;
while(nocheinkunde =='j')
{
summe = 0;
nochetwas = 'j';

while ( nochetwas == 'j' )
{

cout << "\n\nBitte die Artikelnummer (1 - " << anzahl <<") eingeben: ";
cin >> j;
if (j>anzahl){
cout << "\nFalsche Artikelnummer!\n";

}

cout << "\nWieviel des Artikels " << artikel[j] << " wird gewuenscht : ";
cin >> bestellung;
if (bestellung <= vorrat[j]) {
menge[j] = bestellung;
vorrat[j] = vorrat[j] - bestellung;
verkauf[j] = verkauf[j] + bestellung;
umsatz[j] = umsatz[j] + preis[j] * bestellung;
summe = summe + bestellung * preis[j];
}
else {
cout << "\n" << "Soviel " << artikel[j] << " haben wir nicht mehr\n";

}

cout << "Möchten Sie noch etwas bestellen? (j/n): ";
cin >> nochetwas;
cout << "\nIhre Rechnung lautet: " << summe << " EUR\n";
cout <<"Noch ein Kunde? (j/n): " ";
cin >> nocheinkund;
kunden = i;
gesamt = gesamt + summe;
i++;
}

//
// Abrechnung gesamt
//
cout << "\nAbrechnung gesamt";
cout << "\n===============================================================================\n";
cout << "\nHeute sind " << kunden << " Kunden gekommen\n";
cout << "\nDer Gesamtumsatz für heute betraegt: " << gesamt << "EUR\n";
//
// Abrechnung nach Artikeln
//
cout << "\n\nAbrechnung nach den einzelnen Artikeln";
cout << "\n===============================================================================\n\n";
cout << "\nNummer Bezeichnung verkauft Umsatz\n";
cout << "-----------------------\n\n";
for (j=1;j<=anzahl;j++) {
cout << j <<" " << artikel[j] << " " << verkauf[j] << " " << umsatz[j] << endl;
}
//
// die Top-Seller
//
maxverkauf=0;maxumsatz=0;maxverkaufnr=0;maxumsatznr=0;

for (j=1; j<=anzahl; j++) {
if(verkauf[j] > maxverkauf){
maxverkauf=verkauf[j];
maxverkaufnr=j;
}

if(umsatz[j] > maxumsatz) {
maxumsatz=umsatz[j];
maxumsatznr=j;
}
}

cout << "\nDer Artikel " << artikel[maxverkaufnr] << " wurde " << maxverkauf << " mal verkauft\n";
cout << "\nDer Artikel " << artikel[maxumsatznr] << " brachte den groesten Umsatz von " << maxumsatz << endl;
//

//
// Der beste Kunde
//
maxkunde = 0;
for (i=1;i<=kunden;i++) {
if(summe > maxkunde){
maxkunde = summe;
maxkundenr = i;
}
}
cout << "\nDer Kunde " << maxkundenr << " hat den groessten Umsatz von " << maxkunde << "EUR gebracht.\n";
//

return 0;
}
}
 
Wie wäre es, wenn du zuerst mal den Code ordentlich formatierst, da kriegt man ja Augenkrebs von! Und dein Programm läuft mit Sicherheit nicht gut, wenn es nicht terminiert!
 
Was ist denn der Fehler? Womit bricht das Programm ab? Debugger schon benutzt (Einzelschrittdruchlauf)?
 
Dein Programm läuft gar nicht erst...

erst wenn man diese beiden zeilen

Code:
           cout <<"Noch ein Kunde? (j/n): " ";
           cin >> nocheinkund;

in

Code:
           cout <<"Noch ein Kunde? (j/n): ";
           cin >> nocheinkunde;

abändert.

Aber all das sagt dir der Compiler auch....

PS: Das nächste mal bitte strukturierter code posten, dann machen sich auch mehr die mühe dir zu helfen... weil das ganze überschaubarer ist.
 
Ja, das "e" fehlt am Ende bei
cin >> nocheinkund;
(Zeile 71)

Der gesamte Code ist aber wirklich extrem unübersichtlich. Solltest vielleicht bisschen Struktur noch hineinbringen. (oder überhaupt Struktur ^^).

Wäre es nicht sinnvoller die einzelnen Programmabschnitte in eine Funktion zu packen und diese dann unten in "Main{ }" aufzurufen? Würde meiner Meinung nach auch zur Übersicht beitragen.
 
Meine kenntnisse sind nicht die besten, könnte mir jemand helfen ein bischen strucktur hinein zu bringen?

:confused_alt::confused_alt::confused_alt:


P.S. Nach der Eingabe der geforderten Daten läuft das Programm nicht weiter (Kundenbestellung ff.)
 
Zuletzt bearbeitet:
Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{  int anzahl, vorrat[21], verkauf[21], maxverkauf, maxverkaufnr, maxumsatznr, menge[21][21];
   float preis[21] ,umsatz[21], maxumsatz, summe[21], gesamt = 0, maxkunde;
   char artikel[21][15], nocheinkunde, nochetwas, maxkundenr;
   int bestellung, kunden, i = 0, j = 0;
   //
   // Auffuellen der Lagerbestaende
   //
   cout << "=============================================================================== \n" ;
   cout << "Einweisung in das Kassenprogramm der Schuelerfirma:\n";
   cout << "1. Taetigen sie alle geforderten eingaben ohne Umlaute!\n";
   cout << "2. Verwenden sie keine Lehrzeichen!\n";
   cout << "3. Alle Preise mit . eingeben (z.B.: 2.50)!\n";
   cout << "4. Bestaetigen sie alle Eingaben mit Enter!\n";
   cout << "=============================================================================== \n\n";
   cout << "Wieviele Artikel werden heute angeboten: ";
   cin >> anzahl;
   for (j=1;j<=anzahl;j++)
   {   cout << "\nBezeichnug des Artikels " << j << " : ";
       cin >> artikel[j];
       cout << "\nWieviel kostet der Artikel " << artikel[j] << " : ";
       cin >> preis[j];
       cout << "\nWie gross ist der Vorrat des Artikels " << artikel[j] << " : ";
       cin >> vorrat[j];
       cout << "\n============================================================================= ==\n";
   }
   //
   // Das Geschaeft oeffnet und die Kunden kommen
   //
   gesamt = 0;
   for (j=1;j<=anzahl;j++)
   {   verkauf[j]=0;
       umsatz[j]=0;
   }
   nocheinkunde = 'j';
   i            = 1;
   while(nocheinkunde =='j')
   {   summe[i] = 0;
       nochetwas = 'j';
       while ( nochetwas == 'j' )
       {   cout << "\n\nBitte die Artikelnummer (1 - " << anzahl <<") eingeben: ";
           cin >> j;
           if (j>anzahl)
           {   cout << "\nFalsche Artikelnummer!\n";
           }
           cout << "\nWieviel des Artikels " << artikel[j] << " wird gewuenscht : ";
           cin >> bestellung;
           if (bestellung <= vorrat[j]) 
           {   menge[i][j] = bestellung;
               vorrat[j]   = vorrat[j]  - bestellung;
               verkauf[j]  = verkauf[j] + bestellung;
               umsatz[j]   = umsatz[j]  + preis[j]   * bestellung;
               summe[i]    = summe[i]   + bestellung * preis[j];
           }
           else 
           {   cout << "\n" << "Soviel " << artikel[j] << " haben wir nicht mehr\n";
           }
           cout << "Möchten Sie noch etwas bestellen? (j/n): ";
           cin >> nochetwas;
           cout << "\nIhre Rechnung lautet: " << summe[i] << " EUR\n";
           cout <<"Noch ein Kunde? (j/n): ";
           cin >> nocheinkunde;
           kunden = i;
           gesamt = gesamt + summe[i];
           i++;
       }

       //
       // Abrechnung gesamt
       //
       cout << "\nAbrechnung gesamt";
       cout << "\n============================================================================= ==\n";
       cout << "\nHeute sind " << kunden << " Kunden gekommen\n";
       cout << "\nDer Gesamtumsatz für heute betraegt: " << gesamt << "EUR\n";
       //
       // Abrechnung nach Artikeln
       //
       cout << "\n\nAbrechnung nach den einzelnen Artikeln";
       cout << "\n============================================================================= ==\n\n";
       cout << "\nNummer Bezeichnung verkauft Umsatz\n";
       cout << "-----------------------\n\n";
       for (j=1;j<=anzahl;j++) 
       {   cout << j <<" " << artikel[j] << " " << verkauf[j] << " " << umsatz[j] << endl;
       }
       //
       // die Top-Seller
       //
       maxverkauf   = 0;
       maxumsatz    = 0;
       maxverkaufnr = 0;
       maxumsatznr  = 0;
       for (j=1; j<=anzahl; j++) 
       {   if(verkauf[j] > maxverkauf)
           {   maxverkauf=verkauf[j];
               maxverkaufnr=j;
           }
           if(umsatz[j] > maxumsatz) 
           {   maxumsatz=umsatz[j];
               maxumsatznr=j;
           }
       }
       cout << "\nDer Artikel " << artikel[maxverkaufnr] << " wurde " << maxverkauf << " mal verkauft\n";
       cout << "\nDer Artikel " << artikel[maxumsatznr] << " brachte den groesten Umsatz von " << maxumsatz << endl;
       //

       //
       // Der beste Kunde
       //
       maxkunde = 0;
       for (i=1;i<=kunden;i++) 
       {   if(summe[i] > maxkunde)
           {   maxkunde = summe[i];
               maxkundenr = i;
           }
       }
       cout << "\nDer Kunde " << maxkundenr << " hat den groessten Umsatz von " << maxkunde << "EUR gebracht.\n";
    }    
    system("PAUSE");
    return EXIT_SUCCESS;    
}

dein exit war in der whileschleife.

Edit: Aber deswegen sind trotzdem noch paar andere Fehler drin... abbruchbedingungen funktionieren wohl nicht so wie sie sollten..
 
Zuletzt bearbeitet:
könnte mir jemand helfen ein bischen strucktur hinein zu bringen?

Stichwort "Einrücken"?

Z.B.:
Code:
//
// Das Geschaeft oeffnet und die Kunden kommen
//
gesamt=0;

for (j=1;j<=anzahl;j++)verkauf[j]=0;
			// <= ÜBRIGENDS HIER FEHLT WOHL AUCH NOCH EINE MENGENKLAMMER!! "{"
umsatz[j]=0;

nocheinkunde = 'j';

i = 1;

while(nocheinkunde =='j')
{
	summe[i] = 0;
	nochetwas = 'j';

	while ( nochetwas == 'j' )
	{
		cout << "\n\nBitte die Artikelnummer (1 - "
		     << anzahl 
			 <<") eingeben: ";
			 
		cin >> j;
		
		if (j>anzahl)
		{
			cout << "\nFalsche Artikelnummer!\n";
		}
		
		cout << "\nWieviel des Artikels "
		     << artikel[j]
			 << " wird gewuenscht : ";
			 
		cin >> bestellung;
		
		if (bestellung <= vorrat[j])
		{
			menge[i][j] = bestellung;
			vorrat[j] = vorrat[j] - bestellung;
			verkauf[j] = verkauf[j] + bestellung;
			umsatz[j] = umsatz[j] + preis[j] * bestellung;
			summe[i] = summe[i] + bestellung * preis[j];
		}
		else
		{
			cout << "\n" << "Soviel " << artikel[j] << " haben wir nicht mehr\n";
		}
	...
	}
...
}
 
Hast du nicht schon mal fast den selben Code in einem anderen Thread geschrieben?
Zudem ist ein Titel wie "Programmier--Problem" ist wenig aussagekräftig.

Gruß,

badday
 
Also ich würde da echt erstmal aufräumen, so findest Du ja nie die Fehler. Da braucht ja nur ein Semikolon irgendwo zwischen sitzen und schon geht nix mehr.

Und sowas hier:

Code:
int anzahl,vorrat[21],verkauf[21],maxverkauf,maxverkaufnr,maxumsatznr,menge[21][21];

Ist zwar ein "löblicher" Versuch code-Zeilen zu sparen, allerdings übernimmt das Zusammenstauchen des codes der compiler im Nachhinein.

Also lieber um es übersichtlich zu halten so:

Code:
int anzahl, maxverkauf, maxverkaufnr, maxumsatznr;
int vorrat[21], verkauf[21];
int menge[21][21];

So erkennt man doch viel besser, um was für Art von Variablen es sich genau handelt.
 
Zurück
Oben