Lagerverwaltung Kisten

  • C++

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Sebastian.Pape.

    Lagerverwaltung Kisten

    Hallo,
    ich soll für mein Fernstudium einen Lagerverwaltung mit max. 50 Kisten erstellen, die ich eingeben, ändern, löschen und mir anzeigen kann. Leider kann ich meinen Code nicht ausführen und weis wirklich nicht woran es liegt.
    Hier der Code:

    C-Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. struct Lager
    4. {
    5. int nummer;
    6. double breite;
    7. double laenge;
    8. double hoehe;
    9. double volumen;
    10. int aktiv=0;
    11. }aKiste;
    12. Lager eingeben(Lager aKiste[50])
    13. {
    14. int i=0;
    15. cout << "Welche Kiste soll Angelegt werden?: \n" << "Es dürfen max. 50 Kisten angelegt werden.";
    16. cin >> i;
    17. if(((i<50)&&(i!=0)&&(aKiste[i].aktiv!=1)))
    18. {
    19. cout << "Bitte geben Sie die Hoehe der " << i << " Kiste: " << " ein.";
    20. cin >> aKiste[i].hoehe;
    21. cout << "Bitte geben Sie die Breite der " << i << " Kiste: " << " ein.";
    22. cin >> aKiste[i].breite;
    23. cout << "Bitte geben Sie die Laenge der " << i << " Kiste: " << " ein.";
    24. cin >> aKiste[i].laenge;
    25. aKiste[i].aktiv=1;
    26. aKiste[i].volumen=aKiste[i].hoehe*aKiste[i].breite*aKiste[i].laenge;
    27. cout << '\n';
    28. }
    29. else if(i>=50)
    30. {
    31. cout << "Es sind max. 50 Kisten erlaubt!\n";
    32. }
    33. else
    34. {
    35. cout << "Diese Kiste ist bereits belegt!\n";
    36. }
    37. return aKiste[i];
    38. }
    39. Lager Kisteanzeigen(Lager aKiste[50])
    40. {
    41. int i=0;
    42. cout << "Welche Kiste soll angezeigt werden?: ";
    43. cin >> i;
    44. if((aKiste[i].nummer <50) && (aKiste[i].aktiv==1))
    45. {
    46. cout << "Kiste Nr.:\t " << aKiste[i].nummer << '\n';
    47. cout << "Volumen: \t" << aKiste[i].volumen << '\n';
    48. cout << "Aktiv: \t\t" << aKiste[i].aktiv << '\n';
    49. }
    50. else if((aKiste[i].nummer <50) && (aKiste[i].aktiv!=1))
    51. {
    52. cout << "Die Kiste nr.: \t" << aKiste[i].nummer << " ist nicht belegt!\n";
    53. }
    54. else cout << "Falsche eingabe? Es sind max. 50 Kisten erlaubt\n";
    55. return aKiste[i];
    56. }
    57. Lager aendern(Lager aKiste[50])
    58. {
    59. int i=0;
    60. cout << "Bitte geben Sie die Nummer der Kiste ein die Sie aendern wollen: ";
    61. cin >> i;
    62. if((i<50)&&(aKiste[i].aktiv==1))
    63. {
    64. cout << "Bitte geben Sie die Hoehe der " << i << " Kiste: " << " ein.";
    65. cin >> aKiste[i].hoehe;
    66. cout << "Bitte geben Sie die Breite der " << i << " Kiste: " << " ein.";
    67. cin >> aKiste[i].breite;
    68. cout << "Bitte geben Sie die Laenge der " << i << " Kiste: " << " ein.";
    69. cin >> aKiste[i].laenge;
    70. aKiste[i].aktiv=1;
    71. aKiste[i].volumen=aKiste[i].hoehe*aKiste[i].breite*aKiste[i].laenge;
    72. cout << '\n';
    73. }
    74. else if(i>=50)
    75. {
    76. cout << "Es sind max. 50 Kisten erlaubt!\n";
    77. }
    78. return aKiste[i];
    79. }
    80. Lager loeschen(Lager aKiste[50])
    81. {
    82. int i=0;
    83. cout << "Bitte geben Sie die Nummer der zu loeschenden Kiste ein: ";
    84. cin >> i;
    85. if ((i<50)&&(aKiste[i].aktiv==1))
    86. {
    87. aKiste[i].aktiv=0;
    88. cout << '\n';
    89. cout << "Kiste nr.: " << i << " wurde geloescht!\n";
    90. }
    91. return aKiste[i];
    92. }
    93. Lager alleAnzeigen(Lager alleKisten[50])
    94. {
    95. cout <<"Kistennr.:\tVolumen:\tAktiv:\n";
    96. for (int i=0;i<50;i++)
    97. {
    98. cout << alleKisten[i].nummer << "\t\t" << alleKisten[i].volumen << "\t\t" << alleKisten[i].aktiv <<'\n';
    99. }
    100. return alleKisten[50];
    101. }
    102. int main()
    103. {
    104. Lager alleKisten[50];
    105. int auswahl;
    106. for(int i=0;i<50;i++)
    107. {
    108. alleKisten[i].volumen=0;
    109. alleKisten[i].aktiv=0;
    110. alleKisten[i].nummer=i+1;
    111. }
    112. do
    113. {
    114. cout << "Kistenlager\n";
    115. cout << '\n';
    116. cout << "Drücke (1) um eine Kiste anzulegen\n";
    117. cout << "Drücke (2) um eine Kiste anzuzeigen\n";
    118. cout << "Drücke (3) um eine Kiste zu aendern\n";
    119. cout << "Drücke (4) um eine Kiste zu loeschen\n";
    120. cout << "Drücke (5) um alle Kisten anzuzeigen\n";
    121. cout << "Drücke (6) um das Programm zu beenden\n";
    122. cin >> auswahl;
    123. switch(auswahl)
    124. {
    125. case 1:
    126. eingeben(alleKisten);
    127. break;
    128. case 2:
    129. KisteAnzeigen(alleKisten);
    130. break;
    131. case 3:
    132. aendern(alleKisten);
    133. break;
    134. case 4:
    135. loeschen(alleKisten);
    136. break;
    137. case 5:
    138. alleAnzeigen(alleKisten);
    139. break;
    140. case 6:
    141. cout << "Das Programm Kistenlager wird beendet.";
    142. exit(0);
    143. }
    144. }while (auswahl !=6);
    145. return 0;
    146. }


    Gleich beim ersten "cin" eingeben der Kiste bekomme ich den Fehler:no match for 'operator>>' in 'std::cin >> "i"'. Und ich kann mir nicht erklären woran es liegen könnte.
    Vielen Dank schon mal für eure Hilfe.

    Gruß
    Sebastian
    Edit @Sebastian.Pape

    Lager Kisteanzeigen(Lager aKiste[50])
    KisteAnzeigen(alleKisten);

    C++ ist case sensitive;


    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „NoIde“ ()

    Sebastian.Pape schrieb:

    Leider kann ich meinen Code nicht ausführen und weis wirklich nicht woran es liegt.
    Was passiert?
    Was soll passieren?
    Gibt der Compiler möglicherweise Hinweise, die Du uns vorenthältst?
    Wenn ja, welche?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Das ist es ja wenn ich das Programm Testen/ausführen will passiert nix. Mir wird in Zeile 20 sofort der Rote Punkt angezeigt mit:
    Warnung:non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
    und dem Fehler:
    Fehler:no match for 'operator>>' in 'std::cin >> "i"

    Ich stehe komplett auf dem schlauch und denk mir das die Lösung eigentlich ganz einfach ist.
    @Sebastian.Pape Dein Quellcode compiliert nicht, weil da noch Fehler drinne sind, die Du zunächst beheben musst.
    Ich nehme mal an, dass Du über die Console der Variable i einen Wert zuweisen willst.
    Probierma zunächst, die Variable direkt ohne cin zu belegen, damit Du Dich vom Laufen des Rest-Codes überzeugen kannst.
    Dann fragst Du mal Frau Google nach c++ cin und bekommst reichlich Lektüre angeboten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dein C++ ist sehr C lastig. Hier hab ich dir mal ein Beispiel gemacht mit Hinzufügen und Auflisten von Kisten. Guck dir das mal an und wenn etwas unverständlich ist dann nachfragen.
    Spoiler anzeigen

    C-Quellcode

    1. #include <iostream>
    2. #include <limits>
    3. #include <vector>
    4. #include <string>
    5. struct box
    6. {
    7. public:
    8. box() noexcept : id(++max_id), length(0), height(0), width(0) {}
    9. box(double _length, double _height, double _width) noexcept : id(++max_id), length(_length),
    10. height(_height), width(_width) {}
    11. int get_id() const noexcept { return id; }
    12. double get_length() const noexcept { return length; }
    13. double get_height() const noexcept { return height; }
    14. double get_width() const noexcept { return width; }
    15. double get_volume() const noexcept { return width * height * length; }
    16. void set_length(double l)
    17. {
    18. if (l <= 0)
    19. throw std::invalid_argument("length must be > 0");
    20. length = l;
    21. }
    22. void set_height(double l)
    23. {
    24. if (l <= 0)
    25. throw std::invalid_argument("height must be > 0");
    26. height = l;
    27. }
    28. void set_width(double l)
    29. {
    30. if (l <= 0)
    31. throw std::invalid_argument("width must be > 0");
    32. width = l;
    33. }
    34. static box box_from_cin()
    35. {
    36. double w, h, l;
    37. l = get_number("Enter length: ");
    38. w = get_number("Enter width: ");
    39. h = get_number("Enter height: ");
    40. return box(l, h, w);
    41. }
    42. private:
    43. static int max_id;
    44. int id;
    45. double width;
    46. double length;
    47. double height;
    48. static double get_number(const std::string& text)
    49. {
    50. double d;
    51. while (std::cout << text && !(std::cin >> d) || d <= 0)
    52. {
    53. std::cin.clear();
    54. std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    55. std::cout << "Invalid input" << std::endl;
    56. }
    57. return d;
    58. }
    59. };
    60. int box::max_id = 0;
    61. std::ostream& operator<<(std::ostream& str, const box& b)
    62. {
    63. return str << b.get_id() << "\t" << b.get_volume() << "\t";
    64. }
    65. int main()
    66. {
    67. const size_t max_boxes = 10;
    68. std::vector<box> boxes;
    69. int option = 0;
    70. while (option != 3)
    71. {
    72. std::cout << "Press (1) to add a box\n";
    73. if (boxes.size() != 0)
    74. std::cout << "Press (2) to list all boxes\n";
    75. std::cout << "Press (3) to exit\n";
    76. std::cin >> option;
    77. if (option == 1) // Bei mehr optionen ruhig den switch nehmen
    78. {
    79. if (boxes.size() >= max_boxes)
    80. {
    81. std::cout << "Maximum boxes reached" << std::endl;
    82. continue;
    83. }
    84. boxes.push_back(box::box_from_cin());
    85. std::cout << "Box has been added" << std::endl;
    86. }
    87. else if (option == 2 && boxes.size() != 0)
    88. {
    89. std::cout << "ID\tVolume" << std::endl;
    90. for (auto& b : boxes)
    91. std::cout << b << std::endl;
    92. }
    93. else if(option != 3)
    94. std::cout << "Unknown option" << std::endl;
    95. }
    96. return EXIT_SUCCESS;
    97. }

    Felder von structs/classes solltest du nach Möglichkeit private oder protected lassen. Public macht nur Sinn wenn's total egal ist was, wann in das Feld geschrieben wird. Arrays sind ziemlich über. Nimm std::array<> oder std::vector<> dafür.

    /PS
    Weiß einer warum der Quellcode so komisch formatiert ist ?( Ich hab den direkt aus VS eingefügt.
    @RodFromGermany
    Danke werde ich mir anschauen^^
    @Gonger96
    ich darf/soll nur das verwenden was im Studienheft vorkommt. Vector etc. kommt erst später dran. Habe schon ein paar mal festgestellt das es bei dieses Aufgaben viel einfache und schnellere Methoden gibt wenn man nicht das nimmt was im Studienheft steht sondern das was im über oder überübernächsten steht...
    @Sebastian.Pape Was ist denn das für ein Unterrichts- bzw. Studienfach?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!