Programmfehler
-
Hallo,
ich versuche mir bei einer fernschule einblicke in C++/CLI zu verschaffen.
hierfür muss ich Programme schreiben unter anderem ein Lagerprogramm (hier sind sie wieder die Kisten!!).
Habe das auch soweit gemacht. Nur speichert mein Programm immer nur die letzte Kiste die eingegeben worden ist. Könnt Ihr mir einen Tipp geben ?
Danke.#include "stdafx.h"
using namespace System;
struct kiste {
Int32 kistenNummer;
Int32 hoehe;
Int32 breite;
Int32 laenge;
Int32 volumen;
};//Neue Funktion zum einlesen der Kisten
void einlesen(kiste kleineKiste[])
{
//Vereinbarung einer Variable
Int32 eingabe, datensatz;
Boolean gefunden = false;//Einlesen der "wunsch" nummer
Console::Write("Geben Sie die Nummer der Kiste ein: ");
eingabe = Convert::ToInt32(Console::ReadLine());//Durchlauf aller kistennummer und suche ob vorhanden
for(Int32 i = 0; i < 100; ++i){
if(eingabe == kleineKiste[i].kistenNummer) {
datensatz = i;
gefunden = true;
break;
}
}//Wenn ja
if (gefunden==false){kleineKiste[datensatz].kistenNummer=eingabe;
Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine());
Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine());
Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine());
kleineKiste[datensatz].volumen=kleineKiste[datensatz].hoehe * kleineKiste[datensatz].breite * kleineKiste[datensatz].laenge;
//eine leere Zeile ausgeben
Console::WriteLine();}
else
Console::WriteLine("Die Kiste ist schon vorhanden.");}
//Funktion zum Ändern
void aendern(kiste kleineKiste[])
{
//Vereinbarung einer Variable
Int32 eingabe, datensatz;
Boolean gefunden = false;//Einlesen der "wunsch" nummer
Console::Write("Geben Sie die Nummer der Kiste ein: ");
eingabe = Convert::ToInt32(Console::ReadLine());//Durchlauf aller kistennummer und suche ob vorhanden
for(Int32 i = 0; i < 100; ++i){
if(eingabe == kleineKiste[i].kistenNummer) {
datensatz = i;
gefunden = true;
break;
}
}//Wenn ja
if (gefunden==true){
Console::Write("Geben Sie die neue Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine());
Console::Write("Geben Sie die neue Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine());
Console::Write("Geben Sie die neue Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer);
kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine());
//eine leere Zeile ausgeben
Console::WriteLine();
}
elseConsole::WriteLine("Die Kiste ist nicht vorhanden");
}
// Löschen einer Kiste
void loeschen(kiste kleineKiste[]) {
//Vereinbarung einer Variable
Int32 eingabe, datensatz;
Boolean gefunden = false;//Einlesen der "wunsch" nummer
Console::Write("Geben Sie die Nummer der Kiste ein: ");
eingabe = Convert::ToInt32(Console::ReadLine());//Durchlauf aller kistennummer und suche ob vorhanden
for(Int32 i = 0; i < 100; ++i){
if(eingabe == kleineKiste[i].kistenNummer) {
datensatz = i;
gefunden = true;
break;
}
}//Wenn ja Datensatz auf 0 setzen/löschen sonst meldung
if(gefunden == true){
kleineKiste[datensatz].kistenNummer = 0;
Console::WriteLine("Kiste erfolgreich gelöscht!");
}
else
Console::WriteLine("Dieses Kiste gibt es nicht!");
}void anzeigen(kiste kleineKiste[])
{
Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen");
for(Int32 i = 0; i < 4; ++i){
if(kleineKiste[i].kistenNummer != 0)
Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[i].kistenNummer, kleineKiste[i].breite, kleineKiste[i].hoehe, kleineKiste[i].laenge, kleineKiste[i].volumen);
}
}void anzeigenEi(kiste kleineKiste[])
{
//Vereinbarung einer Variable
Int32 eingabe, datensatz;
Boolean gefunden = false;//Einlesen der "wunsch" nummer
Console::Write("Geben Sie die Nummer der Kiste ein: ");
eingabe = Convert::ToInt32(Console::ReadLine());//Durchlauf aller kistennummer und suche ob vorhanden
for(Int32 i = 0; i < 100; ++i){
if(eingabe == kleineKiste[i].kistenNummer) {
datensatz = i;
gefunden = true;
break;
}
}
if(eingabe==kleineKiste[datensatz].kistenNummer){
Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen");
//for(Int32 i = 0; i < 100; ++i){
//if(kleineKiste[i].kistenNummer != 0)
Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[datensatz].kistenNummer, kleineKiste[datensatz].breite, kleineKiste[datensatz].hoehe, kleineKiste[datensatz].laenge, kleineKiste[datensatz].volumen);
}
else
Console::WriteLine("Dieses Kiste gibt es nicht!");}
int main(array<System::String ^> ^args)
{
//Vereinbarung einer Strukturvariable mit 100 Elementen
kiste kleineKiste[100];
//Vereinbarung einer Char Variable
Char funktionAuswahl;Console::WriteLine(" Auswahl der Funktionen");
Console::WriteLine(" a Eingabe der Daten für die Kisten");
Console::WriteLine(" b Loeschen einer Kiste");
Console::WriteLine(" c Ändern der Daten für die Kisten");
Console::WriteLine(" e Anzeigen der Daten einer Kiste");
Console::WriteLine(" d Alle Kisten anzeigen");
Console::WriteLine(" q Programmende");//Das einlesen der Daten über die Funktion einlesen
//for (Int32 i=0; i<100; i++)
//kleineKiste[i]=einlesen(i+1);//Alle Elemente auf "NULL" bringen!
for(Int32 i = 0; i < 100; ++i){
kleineKiste[i].kistenNummer = 0;
kleineKiste[i].hoehe = 0;
kleineKiste[i].laenge = 0;
kleineKiste[i].breite = 0;
kleineKiste[i].volumen = 0;
}// Die Auswahl der einzelnen Funktionen
Console::WriteLine();
do {
Console::Write(" wählen Sie aus = ");//eine leere Zeile ausgeben
Console::WriteLine();funktionAuswahl = Convert::ToChar(Console::ReadLine());
switch (funktionAuswahl){
case 'a':
einlesen(kleineKiste);
break;
case 'b':
loeschen(kleineKiste);
break;
case 'c':
aendern(kleineKiste);
break;
case 'd':
anzeigen(kleineKiste);
break;
case 'e':
anzeigenEi(kleineKiste);
break;
case 'q':
Console::WriteLine("Programmende!");
break;
default:
Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben");
break;
}
}while(funktionAuswahl != 'q');return 0;
}Eine Frage noch: Wie kann ich den Code besser einfügen (habe es hier mit STR+C und STRG+V gemacht).
-
schue04 schrieb:
Eine Frage noch: Wie kann ich den Code besser einfügen (habe es hier mit STR+C und STRG+V gemacht).
Schau Dir mal die lustigen Buttons unter den Smilies an, auf denen "C/C++", "Code" usw. draufsteht. Und editier Deinen Beitrag entsprechend, so wird sich das kein Mensch durchlesen.
-
#include "stdafx.h" using namespace System; struct kiste { Int32 kistenNummer; Int32 hoehe; Int32 breite; Int32 laenge; Int32 volumen; }; //Neue Funktion zum einlesen der Kisten void einlesen(kiste kleineKiste[]) { //Vereinbarung einer Variable Int32 eingabe, datensatz; Boolean gefunden = false; //Einlesen der "wunsch" nummer Console::Write("Geben Sie die Nummer der Kiste ein: "); eingabe = Convert::ToInt32(Console::ReadLine()); //Durchlauf aller kistennummer und suche ob vorhanden for(Int32 i = 0; i < 100; ++i){ if(eingabe == kleineKiste[i].kistenNummer) { datensatz = i; gefunden = true; break; } } //Wenn ja if (gefunden==false){ kleineKiste[datensatz].kistenNummer=eingabe; Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine()); kleineKiste[datensatz].volumen=kleineKiste[datensatz].hoehe * kleineKiste[datensatz].breite * kleineKiste[datensatz].laenge; //eine leere Zeile ausgeben Console::WriteLine(); } else Console::WriteLine("Die Kiste ist schon vorhanden."); } //Funktion zum Ändern void aendern(kiste kleineKiste[]) { //Vereinbarung einer Variable Int32 eingabe, datensatz; Boolean gefunden = false; //Einlesen der "wunsch" nummer Console::Write("Geben Sie die Nummer der Kiste ein: "); eingabe = Convert::ToInt32(Console::ReadLine()); //Durchlauf aller kistennummer und suche ob vorhanden for(Int32 i = 0; i < 100; ++i){ if(eingabe == kleineKiste[i].kistenNummer) { datensatz = i; gefunden = true; break; } } //Wenn ja if (gefunden==true){ Console::Write("Geben Sie die neue Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die neue Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die neue Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine()); //eine leere Zeile ausgeben Console::WriteLine(); } else Console::WriteLine("Die Kiste ist nicht vorhanden"); } // Löschen einer Kiste void loeschen(kiste kleineKiste[]) { //Vereinbarung einer Variable Int32 eingabe, datensatz; Boolean gefunden = false; //Einlesen der "wunsch" nummer Console::Write("Geben Sie die Nummer der Kiste ein: "); eingabe = Convert::ToInt32(Console::ReadLine()); //Durchlauf aller kistennummer und suche ob vorhanden for(Int32 i = 0; i < 100; ++i){ if(eingabe == kleineKiste[i].kistenNummer) { datensatz = i; gefunden = true; break; } } //Wenn ja Datensatz auf 0 setzen/löschen sonst meldung if(gefunden == true){ kleineKiste[datensatz].kistenNummer = 0; Console::WriteLine("Kiste erfolgreich gelöscht!"); } else Console::WriteLine("Dieses Kiste gibt es nicht!"); } void anzeigen(kiste kleineKiste[]) { Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen"); for(Int32 i = 0; i < 4; ++i){ if(kleineKiste[i].kistenNummer != 0) Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[i].kistenNummer, kleineKiste[i].breite, kleineKiste[i].hoehe, kleineKiste[i].laenge, kleineKiste[i].volumen); } } void anzeigenEi(kiste kleineKiste[]) { //Vereinbarung einer Variable Int32 eingabe, datensatz; Boolean gefunden = false; //Einlesen der "wunsch" nummer Console::Write("Geben Sie die Nummer der Kiste ein: "); eingabe = Convert::ToInt32(Console::ReadLine()); //Durchlauf aller kistennummer und suche ob vorhanden for(Int32 i = 0; i < 100; ++i){ if(eingabe == kleineKiste[i].kistenNummer) { datensatz = i; gefunden = true; break; } } if(eingabe==kleineKiste[datensatz].kistenNummer){ Console::WriteLine("Nr.\tBreite\tHöhe\tLänge\tVolumen"); //for(Int32 i = 0; i < 100; ++i){ //if(kleineKiste[i].kistenNummer != 0) Console::WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", kleineKiste[datensatz].kistenNummer, kleineKiste[datensatz].breite, kleineKiste[datensatz].hoehe, kleineKiste[datensatz].laenge, kleineKiste[datensatz].volumen); } else Console::WriteLine("Dieses Kiste gibt es nicht!"); } int main(array<System::String ^> ^args) { //Vereinbarung einer Strukturvariable mit 100 Elementen kiste kleineKiste[100]; //Vereinbarung einer Char Variable Char funktionAuswahl; Console::WriteLine(" Auswahl der Funktionen"); Console::WriteLine(" a Eingabe der Daten für die Kisten"); Console::WriteLine(" b Loeschen einer Kiste"); Console::WriteLine(" c Ändern der Daten für die Kisten"); Console::WriteLine(" e Anzeigen der Daten einer Kiste"); Console::WriteLine(" d Alle Kisten anzeigen"); Console::WriteLine(" q Programmende"); //Das einlesen der Daten über die Funktion einlesen //for (Int32 i=0; i<100; i++) //kleineKiste[i]=einlesen(i+1); //Alle Elemente auf "NULL" bringen! for(Int32 i = 0; i < 100; ++i){ kleineKiste[i].kistenNummer = 0; kleineKiste[i].hoehe = 0; kleineKiste[i].laenge = 0; kleineKiste[i].breite = 0; kleineKiste[i].volumen = 0; } // Die Auswahl der einzelnen Funktionen Console::WriteLine(); do { Console::Write(" wählen Sie aus = "); //eine leere Zeile ausgeben Console::WriteLine(); funktionAuswahl = Convert::ToChar(Console::ReadLine()); switch (funktionAuswahl){ case 'a': einlesen(kleineKiste); break; case 'b': loeschen(kleineKiste); break; case 'c': aendern(kleineKiste); break; case 'd': anzeigen(kleineKiste); break; case 'e': anzeigenEi(kleineKiste); break; case 'q': Console::WriteLine("Programmende!"); break; default: Console::WriteLine(" Sie haben ein falsche Zeichen eingegeben"); break; } }while(funktionAuswahl != 'q'); return 0; }
-
Hallo
void einlesen(kiste kleineKiste[]) { Int32 eingabe, datensatz; Boolean gefunden = false; Console::Write("Geben Sie die Nummer der Kiste ein: "); eingabe = Convert::ToInt32(Console::ReadLine()); for(Int32 i = 0; i < 100; ++i) { if(eingabe == kleineKiste[i].kistenNummer) { //Hier bekommt die variable datensatz von dir einen wert //aber nur wenn die kiste nicht vorhanden ist datensatz = i; gefunden = true; break; } } if (gefunden==false) { //Hier nicht //also hat die variable datensatz einen zufälligen wert //hier allerdings 0 so das du immer in kleineKiste[0] schreibst kleineKiste[datensatz].kistenNummer=eingabe; Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].breite=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[datensatz].kistenNummer); kleineKiste[datensatz].laenge=Convert::ToInt32(Console::ReadLine()); kleineKiste[datensatz].volumen=kleineKiste[datensatz].hoehe * kleineKiste[datensatz].breite * kleineKiste[datensatz].laenge; Console::WriteLine(); } else Console::WriteLine("Die Kiste ist schon vorhanden."); }
Erstmal als kleiner Denkanstoss.
Ich mach auch den Kurs und hab das ganze noch etwas anders gelöst da es laut der Aufgabe glaube ich dir überlassen ist wie du die kleineKiste[].kistenNummer verteilst.
So war bei mir dann immer kiste[0] die erste, kiste[1] die zweite und so weiter.
So kann man sich die Schleife sparen wo man alle 100 kisten nach der nummer durchsuchen muss.void einlesen(kiste kleineKiste[]) { Int32 eingabe, datensatz; Boolean gefunden = false; Console::Write("Geben Sie die Nummer der Kiste ein: "); eingabe = Convert::ToInt32(Console::ReadLine()); if(kleineKiste[eingabe-1].kistenNummer!=0) { Console::WriteLine("Die Kiste ist schon vorhanden."); } else { kleineKiste[eingabe-1].kistenNummer=eingabe; Console::Write("Geben Sie die Höhe der {0}. Kiste ein: ", kleineKiste[eingabe-1].kistenNummer); kleineKiste[eingabe-1].hoehe=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die Breite der {0}. Kiste ein: ", kleineKiste[eingabe-1].kistenNummer); kleineKiste[eingabe-1].breite=Convert::ToInt32(Console::ReadLine()); Console::Write("Geben Sie die Länge der {0}. Kiste ein: ", kleineKiste[eingabe-1].kistenNummer); kleineKiste[eingabe-1].laenge=Convert::ToInt32(Console::ReadLine()); kleineKiste[eingabe-1].volumen=kleineKiste[eingabe-1].hoehe * kleineKiste[eingabe-1].breite * kleineKiste[eingabe-1].laenge; Console::WriteLine(); } }
Das sollte als Tip erstmal reichen.
Viel Spass beim bastelnEdit: Achso mein erster Post,
Hallo an alle ich bin der neueTschüss