Lagerverwaltung /Struktur



  • Huhu,

    Ich bin Anfänger in C++ und möchte/muss eine Aufgabe lösen
    mit "namespace System."(damit ich es besser verstehe)

    Ich soll eine Lagerverwaltung erstellen.
    Es sollen Kisten gespeichert werden (max 100)
    sowie die hohe ,breite,laenge und das Volumen
    berechnet werden.

    Soweit habe ich den code auch schon fertig.

    Alles soll in Funktionen einzeln abgelegt werden
    und folgende Funktionen anbieten:

    -neue Kiste eingeben
    -löschen von Kisten
    -ändern der Daten vorhandener Kisten
    -anzeigen der Daten einer vorhanden Kiste
    -listenfunktion welche die Daten aller Kisten anzeigt

    Die Daten sollen nur zur Laufzeit gespeichert werden
    Beim löschen, aendern und anzeigen soll der Zugriff auf die Daten
    der Kiste(n) über eine Nummer erfolgen(Index)
    und alle Aufgaben sollen am anfang zur auswahl stehen.
    (1) Druecken sie die eins um eine neue Kiste einzugeben...oder so aehnlich)

    Ich kann mir zur Zeit nicht wirklich vorstellen wie das
    gehen soll/kann.

    Ich bitte um Hilfe.
    Ein Tip oder ein kleiner Rat würde mir
    selbstverständlich auch reichen:)

    Vielen dank schonmal.



  • Nyoko schrieb:

    Ich bin Anfänger in C++ und möchte/muss eine Aufgabe lösen
    mit "namespace System."(damit ich es besser verstehe)

    namespace System? Was nun ANSI C++ oder C++/CLI? [Letzteres zählt als eigene Sprache, und hat auch ein separates Unterforum, einen Namensraum System kenne ich von .Net (und daher auch C++/CLI), nicht aber von ANSI C++]

    Nyoko schrieb:

    Ich kann mir zur Zeit nicht wirklich vorstellen wie das
    gehen soll/kann.

    In einer Schleife:
    1. Ausgeben eines Menüs mit den durchnummerierten Einzelpunkten
    2. Warten auf Tasteneingabe, wenn ein Menüpunkt gewählt wurde die entsprechende Funktion aufrufen, im Falle des Punktes für den Abbruch die Schleife verlassen.

    cu André



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Der Moderator hats rausgefunden^^
    Sry wusste nicht das es dazu gehört.

    Es nennt sich
    Objektorientiertes Programmieren mit Net Framework.

    Danke für den Tip, ich werd es mal versuchen.



  • Hallo!
    Ich habe heute gerade die selbe Aufgabe gelöst und bei mir funktioniert alles:)
    Es gehört zum CPBS 4B, falls du auch an diesem Studium teilnimmst.

    Was genau verstehst du nicht?



  • Hehe genau die Aufgabe^^

    Ja die eigendliche aufteilung ist schwer.
    Weill es im Heft nur um theorien geht
    wie man was definiert, Felder, Arrays etc
    aber keine wirklichen Bsp die sich darauf beziehen--.

    In dem Sinne die eigendliche Struktur,
    Da weis man nie so genau woman ansetzen kann.

    Bist du zufaellig anno?^^Hehe genau die Aufgabe^^



  • HAF oder ILS?

    C++ oder C#?

    Weil CPBS 4B kenne ich nicht!?



  • Iss bestimmt C++ 😃



  • juhu 2 leidensgenossen^^:pp

    Ja ist C++ und Ils^^
    Huhu Anno^^



  • huhu du 😃
    wie klein die Welt doch ist 🙂



  • hab ich auch gemacht... 😉



  • Leidensgenosse?? 😮

    Es ist freiwillig und ich liebe es!

    Ja es handelt sich um C++ im .NET und CLI

    Also wenn du Probleme mit Strukturen hast kann ich dir schon weiterhelfen bei der Aufgabe.

    Du sollst eine Struktur erstellen, die folgende Elemente hat:

    struct beispielstruct
    {
    Int32 hoehe;
    Int32 breite;
    Int32 laenge;
    Int32 volumen;
    };
    

    Jetzt musst du dir noch überlegen welche Nummerierung du für deine "Kisten" haben willst.

    Erstelle ein Array( oder in den Heften auch Feld genannt) vom Typ deiner Structur.

    Um auf dieses Beispiel einzugehen:

    beispielstruct feld[100];
    

    Jetzt erstellst du dir z.B. eine Funktion

    einlesen();
    

    Hier ein Beispielcode für die Funktion einlesen():

    Void einlesen(beispielstruct feld[100])
    {
    Int32 breie;
    Console:WriteLine("Bitte geben sie die Breite an");
    breite = Convert:ToInt32(Console:ReadLine());
    //Jetzt kommt der Zugriff auf die Struktur:
    feld[1].breite = breite;
    }
    

    Dies ist natürlich nur ein Beispiel für die breite und nur auf feld[1] bezogen.
    Zum Einlesen musst du auch überprüfen ob nicht feld[1] schon belegt ist etc..

    (Ich habe mich vorhin in einem anderen Thread nochmal über den Zugriff von Funktionen auf die Struktur informiert, obwohl ich schon fertig war und es funktioniert, damit ich auch keinen Schmarn rede.)



  • Es ist freiwillig ja, aber man zahlt auch gut eine Stange Geld.
    Und ich mag es auch(wenn ich auch andere Ziele verfolge,
    mal abgesehen von Vba(nicht mein Fall^^))
    aber wenns nicht weitergeht und man sich den Kopf zerbricht
    ists nicht mehr so schön.

    Aber ein dickes Danke für die Hilfe, auch wenn das so auch
    schon im Heft steht^^Soweit hab iche s ja verstanden.
    Mir gehts ehr darum alles zusammenzubringen,
    d.h. alle 5 Funktionen.

    Habs Heft jetzt 4 mal gelesen aber sonderlich Helfen tut es nicht.

    naja und wenn ich es 10 mal lese, i-wie muss es ja gehen.



  • Hier der Quellcode meiner Aufgabe:

    Ich habe diesen schon eingeschickt, wenn du ihn kopierst bist du ja selbst Schuld:)

    Wenn du Fragen hast poste bitte den Teil des Quellcodes der unklar ist.

    FÜR ALLE ANDEREN:

    Der Quellcode ist keinesfalls optimiert! Er beinhaltet nur Syntax die von mir und diesem Kollegen bereits durchgenommen wurde und schließt Fehlerhandling etc aus.

    /* ###################################################
    
    Einsendeaufgabe 4
    
    #################################################### */
    
    #include "stdafx.h"
    
    using namespace System;
    
    //Legt für das Programm die maximal Anzahl an zu verwalteten Kisten fest
    const Int32 MAXKISTEN = 100;
    
    struct kistenlager
    {
    	Int32 kistennummer;
    	Int32 aktiv;
    	Int32 hoehe;
    	Int32 laenge;
    	Int32 breite;
    	Int32 volumen;
    };
    
    //Funktionsdeklarationen*******************************************************************
    //Alle Funktionen sind für das Management des Kistenlagers zuständig und greifen auf die Struktur “kistenlager” zu
    
    Void kisteAnlegen(kistenlager kisten[MAXKISTEN])
    {
    	for(Int32 i=0;i<MAXKISTEN;i++)
    	{
    		if(kisten[i].aktiv==0)
    		{
    		Console::WriteLine("Geben sie bitte die Höhe der Kiste ein");
    		kisten[i].hoehe = Convert::ToInt32(Console::ReadLine());
    
    		Console::WriteLine("Geben sie bitte die Breite der Kiste ein");
    		kisten[i].breite = Convert::ToInt32(Console::ReadLine());
    
    		Console::WriteLine("Geben sie bitte die Länge der Kiste ein");
    		kisten[i].laenge = Convert::ToInt32(Console::ReadLine());
    
    		kisten[i].aktiv = 1;
    		kisten[i].volumen = kisten[i].hoehe * kisten[i].breite * kisten[i].laenge; 
    		break;		
    		}
    		else
    			Console::WriteLine("Keine Kiste mehr frei");
    	}
    }
    
    Void anzeigen(kistenlager kisten[MAXKISTEN])
    {
    	Int32 nummer;
    	Console::WriteLine("Welche Kiste wollen sie Anzeigen? Geben sie eine Nummer von 1-100 ein!");
    	nummer = Convert::ToInt32(Console::ReadLine()) -1 ;
    	if(nummer <= 100 && nummer >= 0)
    	{
    	if(kisten[nummer].aktiv==1)
    	Console::WriteLine("Kistennummer: {0} > Höhe: {1},Breite: {2}, Länge: {3},Volumen: {4}",kisten[nummer].kistennummer,kisten[nummer].hoehe, kisten[nummer].breite, kisten[nummer].laenge, kisten[nummer].volumen);
    	else
    	Console::WriteLine("Kistennummer: {0} NICHT BELEGT",kisten[nummer].kistennummer);
    	}
    	else
    		Console::WriteLine("Inkorrekte Eingabe\n");
    }
    
    Void löschen(kistenlager kisten[MAXKISTEN])
    {
    	Int32 nummer;
    	Console::WriteLine("Welche Kiste wollen sie löschen? Geben sie eine Nummer von 1-100 ein!");
    	nummer = Convert::ToInt32(Console::ReadLine()) -1 ;
    
    	if(nummer <= 100 && nummer >= 0)
    	{
    	if(kisten[nummer].aktiv==0)
    		{
    			Console::WriteLine("Die Kiste ist bereits gelöscht");
    		}
    	if(kisten[nummer].aktiv==1)
    		{	
    			kisten[nummer].aktiv=0;
    			kisten[nummer].hoehe=0;
    			kisten[nummer].breite=0;
    			kisten[nummer].laenge=0;
    			kisten[nummer].volumen=0;
    			Console::WriteLine("Kistennummer: {0} GELÖSCHT",kisten[nummer].kistennummer);
    		}
    	}
    	else
    		Console::WriteLine("Inkorrekte Eingabe");
    
    }
    
    Void ändern(kistenlager kisten[MAXKISTEN])
    {
    		Int32 nummer;
    		Console::WriteLine("Welche Kiste wollen sie ändern? Geben sie eine Nummer von 1-100 ein!");
    		nummer = Convert::ToInt32(Console::ReadLine()) -1 ;
    		if(nummer <= 100 && nummer >= 0)
    	{
    		if(kisten[nummer].aktiv==1)
    		{
    		Console::WriteLine("Geben sie bitte die Höhe der Kiste ein");
    		kisten[nummer].hoehe = Convert::ToInt32(Console::ReadLine());
    
    		Console::WriteLine("Geben sie bitte die Breite der Kiste ein");
    		kisten[nummer].breite = Convert::ToInt32(Console::ReadLine());
    
    		Console::WriteLine("Geben sie bitte die Länge der Kiste ein");
    		kisten[nummer].laenge = Convert::ToInt32(Console::ReadLine());
    
    		kisten[nummer].volumen = kisten[nummer].hoehe * kisten[nummer].breite * kisten[nummer].laenge;
    		}
    		else
    			Console::WriteLine("Die Kiste existiert nicht");
    		}
    		else
    		Console::WriteLine("Inkorrekte Eingabe");
    
    }
    
    Void listAll(kistenlager kisten[MAXKISTEN])
    {
    for(Int32 i=0;i<MAXKISTEN;i++)
    	{
    		if(kisten[i].aktiv == 1)
    		Console::WriteLine("Kistennummer: {0} > Höhe: {1},Breite: {2}, Länge: {3},Volumen: {4}",kisten[i].kistennummer,kisten[i].hoehe, kisten[i].breite, kisten[i].laenge, kisten[i].volumen);
    		else
    		Console::WriteLine("Kistennummer: {0} NICHT BELEGT",kisten[i].kistennummer);
    	}
    
    }
    
    //Funktionsdeklarationen ENDE***************************************************************************
    
    //Hauptprogramm*******************************************************************************
    
    int main(array<System::String ^> ^args)
    {
    	Int32 switchvar = 0;
    	kistenlager kisten[MAXKISTEN];
    
    	//Alle Kistennummern auf 1-100 setzen, damit die erste Kiste nicht mit 0 angesprochen wird
    	//Status Aktiv auf 0 setzen um die Existenz der Kisten zu verwalten
    
    	for(Int32 i=0;i<MAXKISTEN;i++)
    		{
    			kisten[i].kistennummer=i+1;
    			kisten[i].aktiv=0;
    		}
    
    	//Auswahlmenü Schleife
    	while(switchvar!=6)
    	{
    
    		Console::WriteLine("[1] Kiste anlegen");
    		Console::WriteLine("[2] Alle Kisten auflisten");
    		Console::WriteLine("[3] Eine bestimmte Kiste auflisten");
    		Console::WriteLine("[4] Kiste löschen");
    		Console::WriteLine("[5] Kiste ändern");
    		Console::WriteLine("[6] Programm beenden\n");
    
    		switchvar = Convert::ToInt32(Console::ReadLine());
    	switch (switchvar)
    	{
    	case 1:
    		kisteAnlegen(kisten);
    		break;
    	case 2:
    	listAll(kisten);
    	break;
    	case 3:
    	anzeigen(kisten);
    	break;
    	case 4:
    	löschen(kisten);
    	break;
    	case 5:
    	ändern(kisten);
    	break;
    	case 6:
    	break;
    	default:
    		Console::WriteLine("Falsche Eingabe");
    	}
    	}
    
    }
    


  • Der Post ist im Onlinestudienzentrum gemeldet. Also bitte nehmt die Aufgabe nur als Lösungshilfe und kopiert sie nicht 🙂



  • Erstmal danke, aber ich wollte nur Tips, keinen Code.
    Hatte aber schon erste Ansaetze:)
    (Auch wenns nur 2 Funktionen waren)

    Btw:
    Würde ich den Code kopieren, schade ich mir nur selbst
    und es ist unfair anderen Gegenüber die das gleiche machen.
    Drum werd ich weitergrübeln.

    Aber nochmal danke für die herzliche Hilfestellung.:)

    PS:
    Mich wuerde aber mal interessieren wie du darauf kammst?
    Also, von der Struktur her...
    Weil ich aus den Heften 1-4 nicht wirklich schlau wurde...
    Bestimmte Befehle stehen da gar nicht drin-.-



  • Huhu,

    ich habe nun alle Befehle und die Struktuir die ich für den
    Code brauche, verstanden und bin jetzt soweit gekommen
    das ich nur noch 4 Fehler habe(von 32^^)...nur weil eine
    Klammer umgedreht war-.-

    Aber ich weis nicht was ich gegen die anderen Fehler machen
    kann.
    Kann viell. jemand helfen?

    Danke.

    Oh und nochwas:
    Wie kann ich die Code zeilen zahlen zur besseren Übersicht wieder
    einblenden?

    Die Fehler sind:

    .\Cpbs 4.cpp(61) : error C2143: syntax error : missing ')' before ';'
    .\Cpbs 4.cpp(72) : error C2146: syntax error : missing ';' before identifier 'AlleKisten'
    .\Cpbs 4.cpp(84) : error C2664: 'eingabe' : cannot convert parameter 1 from 'Lager' to 'Lager []'
    No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    .\Cpbs 4.cpp(87) : error C2664: 'anzeigen' : cannot convert parameter 1 from 'Lager' to 'Lager []'
    No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

    #include "stdafx.h"
    
    using namespace System;
    
    const Int32 AlleKisten = 100;
    
    struct Lager
    {
        Int32 kistennummer;
        Int32 hoehe;
        Int32 laenge;
        Int32 breite;
        Int32 volumen;
    
    };
    
    //neue Kiste
    void eingabe(Lager Lagerraum[AlleKisten])
    {
    
    	for (Int32 i = 0; i < AlleKisten;i++)
    	{
    		if(Lagerraum[i].kistennummer != 0) 
    		{
    			Console::WriteLine("Bitte geben Sie die Kistenhoehe ein: ");
    			Lagerraum[i].hoehe = Convert::ToInt32(Console::ReadLine()); 
    
    			Console::WriteLine("Bitte geben Sie die Kistenbreite ein: ");
    			Lagerraum[i].breite = Convert::ToInt32(Console::ReadLine());
    
    			Console::WriteLine("Bitte geben Sie die Kistenlaenge ein: ");
    			Lagerraum[i].laenge = Convert::ToInt32(Console::ReadLine());
    
    			Lagerraum[i].volumen = Lagerraum[i].hoehe * Lagerraum[i].breite * Lagerraum[i].laenge;
    			 break;
    		}
    		else
    			Console::WriteLine("Keine Kiste mehr frei! ");
    	}	
    }
    
    void anzeigen(Lager Lagerraum[AlleKisten]) 
    { 
    	Console::WriteLine(); 
    	Console::WriteLine("\t Nr.\tLänge\tBreite\tHöhe\tVolumen"); 
    	Console::WriteLine("\t-------------------------------------------"); 
    	for(Int32 i = 0; i < AlleKisten; i++) 
    		{ 
    		if(Lagerraum[i].kistennummer != 0) 
    		Console::WriteLine(("\t {0}^\t{1}\t{2}\t{3}\t{4:N} m³)", Lagerraum[i].kistennummer, Lagerraum[i].laenge,Lagerraum[i].breite, Lagerraum[i].hoehe, Lagerraum[i].breite * Lagerraum[i].hoehe * Lagerraum[i].laenge); 
    		} 
    }
    
    int main(array<System::String ^> ^args)
    {
    
    	Int32 switchvar = 0; 
    	Lager Lagerraum AlleKisten;
    
    	while(switchvar!=2)
        {
    
            Console::WriteLine("[1] Kiste anlegen");
            Console::WriteLine("[2] Eine bestimmte Kiste auflisten");
    
            switchvar = Convert::ToInt32(Console::ReadLine());
        switch (switchvar)
        {
        case 1:
        eingabe(Lagerraum);
        break;
        case 2:
        anzeigen(Lagerraum);
        break;
        default:
            Console::WriteLine("Falsche Eingabe");
        }
      }
    }
    


  • Hi,

    eigentlich gibt dir der Debugger schon sehr hilfreiche Fehlermeldungen an die Hand, ma muss sie manchmal nur richtig deuten.

    .\Cpbs 4.cpp(61) : error C2143: syntax error : missing ')' before ';'
    

    Hier mekcert er das ihm eine ')' fehlt, Zeile 61 passt nicht ganz, der Fehler liegt darüber in Zeile 54.

    Die 3 anderen Fehler hängen mit Zeile 65 zusammen, wobei mich hier wundert das der Debugger erst in Zeile 72 Alarm schlägt er hätte sofort in Zeile 65 meckern müssen.

    So die fehlerhaften Zeilen hab ich dir nun genannt, die Fehler wirst du wohl selbst finden.

    Nyoko schrieb:

    Wie kann ich die Code zeilen zahlen zur besseren Übersicht wieder einblenden?

    In der IDE Menü Extras->Optionen, dort dann Text-Editor->Alle Sprachen, unter dem Unterpunkt 'Anzeigen' das erste Feld aktivieren.

    MfG
    Marco



  • Jap:)
    Die Fehlermeldungen sind mir eindeutig, nur seh ich
    die Fehler nicht.
    Ich meine, alle Klammern und Simikolons liegen korrekt.

    Aber das bekomm ich schon hin und vielen Dank für
    deine Hilfe:)

    Oh und eine weitere Sache die mich die ganze Zeit schon wundert:

    Ich kann manchmal bestimmte Projekte nicht öffnen und
    ich weis nicht warum, bzw. ich weis es doch aber ich kann
    es nicht äaendern.

    Das erste mal war es der Pfad, da musst ich komplett neu installieren.
    (Wo ich mit Cpbs anfing).
    Aber jetzt stimmt eigendlich alles und trotzdem kann ich 2-3 Projekte
    meistens nicht öffnen.
    Dann versuch ich meistens, andere im Ordner befindliche Dateien
    zu öffnen.
    Irgendwann klappt es dann auch wieder, dass ich diese Projekte öffnen
    kann.
    Woran "koennte" das liegen?
    (Es ist nichts verschoben oder umgestellt worden.
    Das einzige was ich mir vorstellen kann ist, dass mein System
    auf chinesisch gestellt ist.
    D.h. manche Codezeilen muss ich extra in das Unicode format bringen.)

    Gleiches Problem hatte ich mit VBA.Das ging auf meinem Rechner
    gar nicht^^.
    (Sollte es daran liegen: Nein, das System bleibt auf chinesisch/englisch/deutsch)

    Sry fuer soviel Text aber besser ausführlich als zu wenig.

    Danke:)

    PS: mist...ich lag richtig-.-
    Sollte aber nicht schlimm sein, da es im code eigendlich nur die
    Umlaute sind die stören.

    .\Cpbs 4.cpp(56) : warning C4566: character represented by universal-character-name '\u00E4' cannot be represented in the current code page (936)
    .\Cpbs 4.cpp(56) : warning C4566: character represented by universal-character-name '\u00F6' cannot be represented in the current code page (936)

    Omg hat sich erledigt...nach ewiger Suche hab ich alle Fehler gefunden-.-

    Der erste kam weil ich ein " " " hinter die Klammer gesetzt habe...
    Der 2 u.3 Feher kam weil ich hier "Lager Lagerraum [AlleKisten];"
    in der main die "[]" vergass-.-

    Bloede schlussligkeitsfehler...



  • Wenn du in Visual C++ die Zeile mit dem Fehler doppelklickst, springt der Cursor meist genau in die Zeile des Fehlers (bei solch kleinen Syntaxfehlern und kleinen Programmen).
    Natürlich musst du mit dem 1. vorkommenden Fehler beginnen, da die anderen Fehler meist aus Folge entstehen.

    Du hast dich ja immer selbst verbessert...

    Läuft dein Prog jetzt?

    Am besten stellst du alles auf Englisch, dadurch hast du am wenigsten Schwierigkeiten. Die Dokumentation kannst du ja (k.a. obs die in Chinesisch gibt)
    auf chinesisch nutzen.

    Die Pfade in:

    Extras -> Optionen -> Projekte und Projektmappen -> VC++ Verzeichnisse
    

    müssen die gleiche Bezeichnung haben wie die Pfade deiner Sprachversion.

    z.B.:
    C:.../Dokumente und Einstellungen/... deutsch
    C:.../documents and settings/... englisch


Anmelden zum Antworten