Probleme mit kleinem C++ Programm

Datenmaulwurf

Cadet 4th Year
Registriert
Juni 2008
Beiträge
71
Hallo, ich habe für die Schule ein Programm geschrieben, welches wie so eine Art "Kassensystem (einfach) funktioniert, doch funktioniert es irgend wie nicht richtig!
Ich wäre wirklich froh wenn mir jemand helfen könnte!

#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,maxkunde;
char artikel[21][15],nocheinkunde,nochetwas, maxkundenr;
int bestellung,kunden,i,j;
//
// Auffuellen der Lagerbestaende
//
cout << "============================================================================\n";
cout << "Bitte taetigen sie alle geforderten eingaben ohne Umlaute sowie Leerzeichen!\n";
cout << "============================================================================\n\n";
cout << "Wieviele Produkte werden im Geschaeft verkauft: ";
cin >> anzahl;
for (j=1;j<=anzahl;j++)
{
cout << "\nBezeichnug des Artikels " << j << ": ";
cin >> artikel[j];
cout << "\nWieviel kostet " << artikel[j] << ": ";
cin >> preis[j];
cout << "\nWie gross ist der Vorrat von " << 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' )
{
nochmal:
cout << "\n\nBitte die Artikelnummer (1..." << anzahl <<") ingeben: ";
cin >> j;
if (j>anzahl){
cout << "\nFalsche Artikel-Nummer!\n";
goto nochmal;
}

cout << "\nWieviel" << artikel[j] << ": ";
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";
goto nochmal;
}

cout << "\Möchten SIe noch etwas bestellen? (j/n): ";
cin >> nochetwas;
cout << "\nIhre Rechnung lautet: " << summe << " EUR\n";
cout << "\nKommt noch ein Kunde?(j/n): ";
cin >> nocheinkunde;
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";
//
system("pause");
return 0;
}


MfG Dati!
 
Verzichte auf goto, davon wird seit Ende der 1960er abgeraten. Siehe C++ Primer S. 263.

Also ich habe es mir mal angeschaut:
Code:
#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 << "Bitte taetigen sie alle geforderten eingaben ohne Umlaute sowie Leerzeichen!\n";
cout << "============================================================================\n";
cout << "Wieviele Produkte werden im Geschaeft verkauft: ";
cin >> anzahl;
for (j=1;j<=anzahl;j++)
{
cout << "\nBezeichnug des Artikels " << j << ": ";
cin >> artikel[j];
cout << "\nWieviel kostet " << artikel[j] << ": ";
cin >> preis[j];
cout << "\nWie gross ist der Vorrat von " << 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 <<") ingeben: ";
cin >> j;
if (j>anzahl){
cout << "\nFalsche Artikel-Nummer!\n";

}

cout << "\nWieviel" << artikel[j] << ": ";
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 << "\nKommt 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";
//

return 0;
}
}
}
Ich habe das ganze nicht wirklich getestet. Daher kann ich nicht sicher sagen, ob es bei allen Eingaben funktioniert. Aber das wirst du schon machen....^^

Gruß,

badday
 
Zuletzt bearbeitet:
Was fehlt ?! (iostream is vorhanden)

#include<iostream.h>
#include<conio.h>

So müsste man auch
einfügen können, gerade zum abfangen des Konsole schließens.



am besten


dann kann man sich (soweit ich weiß) des Return am schluss sparen. Habe bis jetzt in Konsole nur mit "void main()" programmiert

bei
nochmal:
cout << "\n\nBitte die Artikelnummer (1..." << anzahl <<") ingeben: ";
cin >> j;
if (j>anzahl){
cout << "\nFalsche Artikel-Nummer!\n";
goto nochmal;
hier lieber:

x=0;
do
{
cout << "\n\nBitte die Artikelnummer (1..." << anzahl <<") ingeben: ";
cin >> j;
if (j>anzahl)
{
x=1;
}
cout << "\nFalsche Artikel-Nummer!\n";
}
while (x==1)

goto verursacht wie "badday" schon andeutete im worst case nen sehr schwer lesbaren Code, da besser mit Schleifen (Kopf/Fußgesteuert/...) arbeiten. Habe da aber auch im CT Unterricht schon eine auf den "Deckel" bekommen... Bei dem letzten teil, muss des x logischerweise deklariert werden, am besten als Integer/unsigned Integer.

Habe gerade kein Compiler da, sollte so aber funktionieren. Eine genaue fehlerbeschreibung wäre nicht schlecht, dann kann man schon weiterhelfen.
Sry für Rechtschreibfehler *duckundweg*
 
Zuletzt bearbeitet:
@AmW: Mir ist leider nicht ganz klar, was das Problem mit int main() sein soll?
Was du mit #include<conio.h> willst, weiß ich auch nicht ganz...
Aber vielleicht kannst du mich ja aufklären.

Gruß,

badday
 
Hm, mit "int main ()" hab ich kein Prinzipielles Problem, ich kenne es halt nur so (habe aber auch erst seit diesem Schuljahr C++), dass mit "void main()" keine variable ans Betriebssystem zurück gegeben wird. Sollte aber kein größeres Problem sein, Visual C++ bereitet den Dateiheader auch mit "int main()" vor.

Conio.h bindet die Bibliothek ein, wo der Befehl "getch();" (get charackter) drin ist. Damit fangen wir ein sofortiges Programmschließen ab. Gehe aber davon aus, dass des in dem Fall mit dem "System(pause)" gemacht wird.
 
Also int main() ist durchaus üblich, da man hier z. B. durch die Rückgabe von -1 einen Hinweis auf einen Fehler geben kann.

Zu conio.h: Das ist 1. C, 2. nicht Teil von ISO C und 3. was sollte er damit anfangen, das scheint mir hier nicht notwendig zu sein. Siehe auch: http://en.wikipedia.org/wiki/Conio.h

Ich lasse mich natürlich gerne eines Besseren belehren.

Gruß,

badday
 
Hm, sollte aber auch in C++ gehn, die Fehlerrückmeldung hat mer konkret no net.

Kanns nachher kurz mim Cisual C++ probiern...

was gibt der Compiler bei dem Quellcode für fehler aus?
 

Ähnliche Themen

W
Antworten
3
Aufrufe
1.447
Willüüü
W
Zurück
Oben