Advertisement
Guest User

ENDLESS LOOP

a guest
Dec 17th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.34 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. class Artikel
  5. {
  6. private:
  7.     // Deklaration der Variablen
  8.     std::string artikel_gruppe;
  9.     std::string artikel_name;
  10.     int artikel_nummer;
  11.     int anzahl_artikel;
  12.     double einkaufs_preis;
  13.    
  14. public:
  15.     /**
  16.      * leerer Konstruktor zur Initialisierung der Attribute
  17.      */
  18.     Artikel ()
  19.     {
  20.         std::string artikel_gruppe = "";
  21.         std::string artikel_name = "";
  22.         int artikel_nummer = 0;
  23.         int anzahl_artikel = 0;
  24.         double einkaufs_preis = 0.0;
  25.     }
  26.    
  27.     /**
  28.      * Konstruktor mit Uebergabeparametern zur Initialisierung der Attribute
  29.      */
  30.     Artikel (std::string art_gruppe, std::string art_name, int art_nummer, int anz_artikel, double e_k)
  31.     {
  32.         std::string artikel_gruppe = art_gruppe;
  33.         std::string artikel_name = art_name;
  34.         int artikel_nummer = art_nummer;
  35.         int anzahl_artikel = anz_artikel;
  36.         double einkaufs_preis = e_k;
  37.     }
  38.    
  39.     ~Artikel ()
  40.     {
  41.     }
  42.    
  43.     /**
  44.      * Speichern der Artikelgruppe
  45.      */
  46.     void setArtikelGruppe(std::string gruppe)
  47.     {
  48.         artikel_gruppe = gruppe;
  49.     }
  50.    
  51.     /**
  52.      * Lesen der Artikelgruppe
  53.      * @return Artikelgruppe des Artikels
  54.      */
  55.     std::string getArtikelGruppe()
  56.     {
  57.         return artikel_gruppe;
  58.     }
  59.    
  60.     /**
  61.      * Speichern des Artikelnamens
  62.      */
  63.     void setArtikelName(std::string name)
  64.     {
  65.         artikel_name = name;
  66.     }
  67.    
  68.     /**
  69.      * Lesen des Artikelnamens
  70.      * @return Artikelname des Artikels
  71.      */
  72.     std::string getArtikelName()
  73.     {
  74.         return artikel_name;
  75.     }
  76.    
  77.     /**
  78.      * Speichern der Artikelnummer
  79.      */
  80.     void setArtikelNummer(int nummer)
  81.     {
  82.         artikel_nummer = nummer;
  83.     }
  84.    
  85.     /**
  86.      * Ermittlung der Artikelnummer
  87.      * @return Artikelnummer des Artikels
  88.      */
  89.     int getArtikelNummer()
  90.     {
  91.         return artikel_nummer;
  92.     }
  93.    
  94.     /**
  95.      * Speichern der Artikelanzahl
  96.      */
  97.     void setAnzahlArtikel(int nummer)
  98.     {
  99.         anzahl_artikel = nummer;
  100.     }
  101.    
  102.     /**
  103.      * Ermittlung des Bestands des Artikels
  104.      * @return Artikelanzahl des Artikels
  105.      */
  106.     int getAnzahlArtikel()
  107.     {
  108.         return anzahl_artikel;
  109.     }
  110.    
  111.     /**
  112.      * Speichern der Einkaufspreises
  113.      */
  114.     void setEinkaufsPreis(double preis)
  115.     {
  116.         einkaufs_preis = preis;
  117.     }
  118.    
  119.     /**
  120.      * Ermittlung der Einkaufspreises fuer den betreffenden Artikel
  121.      * @return Einkaufspreis des Artikels
  122.      */
  123.     double getEinkaufsPreis()
  124.     {
  125.         return einkaufs_preis;
  126.     }
  127. };
  128.  
  129. class ArtikelVerwaltung
  130. {
  131. private:
  132.     // Anzahl der einzugebenden Artikel
  133.     int anzahl_eingabe_artikel;
  134.     // das Array zum speichern der Artikelobjekte
  135.     Artikel* artikel_tabelle;
  136.     // 1x1 Array zum Zwischenspeichern
  137.     Artikel* temp_tabelle;
  138.    
  139.     /**
  140.      * Private Methode zum alphabetischen zyklischen Tauschen
  141.      * zweier Artikel nach der Artikelgruppe
  142.      */
  143.     void zyklischAlphabetischGruppeTauschen(int i)
  144.     {
  145.         for (int durchlauf = 1; durchlauf < i; ++durchlauf)
  146.         {
  147.             for (int spalte = 0; spalte < i - 1; ++spalte)
  148.             {
  149.                 if (artikel_tabelle[spalte].getArtikelName() > artikel_tabelle[spalte + 1].getArtikelName())
  150.                 {
  151.                     temp_tabelle[1] = artikel_tabelle[spalte];
  152.                     artikel_tabelle[spalte] = artikel_tabelle[spalte + 1];
  153.                     artikel_tabelle[spalte + 1] = temp_tabelle[1];
  154.                 }
  155.             }
  156.         }
  157.     }
  158.     /**
  159.      * Private Methode zum alphabetischen zyklischen Tauschen
  160.      * zweier Artikel nach dem Artikelnamen
  161.      */
  162.     void zyklischAlphabetischArtikelNamenTauschen(int i)
  163.     {
  164.         for (int durchlauf = 1; durchlauf < i; ++durchlauf)
  165.         {
  166.             for (int spalte = 0; spalte < i - 1; ++spalte)
  167.             {
  168.                 if (artikel_tabelle[spalte].getArtikelGruppe() > artikel_tabelle[spalte + 1].getArtikelGruppe())
  169.                 {
  170.                     temp_tabelle[1] = artikel_tabelle[spalte];
  171.                     artikel_tabelle[spalte] = artikel_tabelle[spalte + 1];
  172.                     artikel_tabelle[spalte + 1] = temp_tabelle[1];
  173.                 }
  174.             }
  175.         }
  176.     }
  177.    
  178. public:
  179.    
  180.     /**
  181.      * Die Werte für die Instanzvariablen werden initial gesetzt. Zudem wird ein
  182.      * Array von Artikeln im Heap erstellt. Dieses muss entsprechend im Destruktor
  183.      * manuell wieder freigegeben werden.
  184.      */
  185.     ArtikelVerwaltung()
  186.     {
  187.         anzahl_eingabe_artikel = 17;
  188.         artikel_tabelle = new Artikel[anzahl_eingabe_artikel];
  189.         temp_tabelle = new Artikel[1];
  190.     }
  191.    
  192.     /**
  193.      * Das Artikel-Array wird freigegeben um keinen Speicher unabsichtlich zu
  194.      * blockieren
  195.      */
  196.     ~ArtikelVerwaltung()
  197.     {
  198.         delete [] artikel_tabelle;
  199.         delete [] temp_tabelle;
  200.     }
  201.    
  202.     /**
  203.      * Die Laenge der Tabelle gibt hier Aufschluss
  204.      * ueber die Anzahl der verschiedenen Artikel im Bestand.
  205.      */
  206.     int verschiedeneArtikel()
  207.     {
  208.         return anzahl_eingabe_artikel;
  209.     }
  210.    
  211.     /**
  212.      * Aufsummieren der jeweiligen Anzahlen der einzelnen Artikel
  213.      */
  214.     int artikelBestand()
  215.     {
  216.         int gesamt_anzahl_artikel = 0;
  217.         for (int spalte = 0; spalte < anzahl_eingabe_artikel; ++spalte)
  218.         {
  219.             gesamt_anzahl_artikel = gesamt_anzahl_artikel + artikel_tabelle[spalte].getAnzahlArtikel();
  220.         }
  221.         return gesamt_anzahl_artikel;
  222.     }
  223.    
  224.     /**
  225.      * Aufsummiert wird der Einkaufswert aller im Kiosk befindlichen Artikel
  226.      */
  227.     double gesamtWert()
  228.     {
  229.         double gesamt_wert = 0;
  230.         for (int spalte = 0; spalte < anzahl_eingabe_artikel; ++spalte)
  231.         {
  232.             gesamt_wert = gesamt_wert + artikel_tabelle[spalte].getEinkaufsPreis();
  233.         }
  234.         return gesamt_wert;
  235.     }
  236.    
  237.     /**
  238.      * Methode zum Ermitteln der Anzahl der Artikelgruppen
  239.      * Diese Methode setzt voraus, dass der Bestand vorher nach den
  240.      * Artikelgruppen sortiert worden ist.
  241.      */
  242.     int anzahlArtikelGruppen()
  243.     {
  244.         int gruppen_anzahl = 1;
  245.         for (int spalte = 0; spalte < anzahl_eingabe_artikel - 1; ++spalte)
  246.         {
  247.             if (artikel_tabelle[spalte].getArtikelGruppe() != artikel_tabelle[spalte + 1].getArtikelGruppe())
  248.             {
  249.                 gruppen_anzahl = gruppen_anzahl + 1;
  250.             }
  251.         }
  252.         return gruppen_anzahl;
  253.     }
  254.    
  255.     /**
  256.      * Methode zum Ermitteln und der Ausgabe des Bestandes
  257.      * und des Bestandswertes in den einzelnen Artikelgruppen
  258.      * Diese Methode setzt voraus, dass der Bestand vorher nach den
  259.      * Artikelgruppen sortiert worden ist.
  260.      */
  261.     void artikelGruppenBestand()
  262.     {
  263.         int gruppen_bestand = 0;
  264.         double gruppen_wert = 0.0;
  265.         for (int spalte = 0; spalte < anzahl_eingabe_artikel - 1; ++spalte)
  266.         {
  267.             if (artikel_tabelle[spalte + 1].getArtikelGruppe() == artikel_tabelle[spalte].getArtikelGruppe())
  268.             {
  269.                 gruppen_bestand = gruppen_bestand + artikel_tabelle[spalte].getAnzahlArtikel();
  270.                 gruppen_wert = gruppen_wert + artikel_tabelle[spalte].getAnzahlArtikel() * artikel_tabelle[spalte].getEinkaufsPreis();
  271.             }
  272.             else
  273.             {
  274.                 gruppen_bestand = gruppen_bestand + artikel_tabelle[spalte].getAnzahlArtikel();
  275.                 gruppen_wert = gruppen_wert + artikel_tabelle[spalte].getAnzahlArtikel() * artikel_tabelle[spalte].getEinkaufsPreis();
  276.                 std::cout << "Der Bestand von " << artikel_tabelle[spalte].getArtikelGruppe() << " betraegt " << gruppen_bestand << " mit einem Wert von " << gruppen_wert << "." << std::endl;
  277.                 gruppen_bestand = 0;
  278.                 gruppen_wert = 0;
  279.             }
  280.         }
  281.     }
  282.    
  283.     /**
  284.      * Alphabetisches Sortieren des Warenbestandes nach den Artikelgruppen
  285.      */
  286.     void alphabetischGruppenSortieren()
  287.     {
  288.         zyklischAlphabetischGruppeTauschen(anzahl_eingabe_artikel);
  289.     }
  290.    
  291.     /**
  292.      * Alphabetisches Sortieren des Warenbestandes nach den Artikelnamen
  293.      */
  294.     void alphabetischArtikelNamenSortieren()
  295.     {
  296.         zyklischAlphabetischArtikelNamenTauschen(anzahl_eingabe_artikel);
  297.     }
  298.    
  299.     /**
  300.      * Fuenfspaltige Ausgabe der gesamten Tabelle
  301.      */
  302.     void ausgabeTabelle()
  303.     {
  304.         std::cout << "Ausgabe des Artikelbestandes: Artikelgruppe, Artikelname,  Artikelnummer, Artikel, EK in ?" << std::endl;
  305.         for (int i = 0; i < anzahl_eingabe_artikel; i++)
  306.         {
  307.             std::cout << artikel_tabelle[i].getArtikelGruppe() << "\t";
  308.             std::cout << artikel_tabelle[i].getArtikelName() << "\t";
  309.             std::cout << artikel_tabelle[i].getArtikelNummer() << "\t";
  310.             std::cout << artikel_tabelle[i].getAnzahlArtikel() << "\t";
  311.             std::cout << artikel_tabelle[i].getEinkaufsPreis() << std::endl;
  312.         }
  313.     }
  314.    
  315.     /**
  316.      * Einlesen der Artikel in die Tabelle
  317.      * Erzeugen eines Artikelobjektes durch Tastatureingabe von Artikelnummer
  318.      * und Anzahl als ganzzahlige Eingaben und dem Einkaufspreis
  319.      * als reeller Zahl.
  320.      * Das neue Artikelobjekt wird in der Tabelle gespeichert.
  321.      */
  322.     void einlesenTabellenWerte()
  323.     {
  324.         std::cout << "Eingabe von Artikelgruppe, Artikelname, Artikelnummer, Artikelanzahl, EK in €" << std::endl;
  325.         std::cout << "Alle Werte durch Leerzeichen getrennt in der Zeile" << std::endl;
  326.         for (int i = 0; i < anzahl_eingabe_artikel; i++)
  327.         {
  328.             std::cout << "Daten fuer den " << (i+1) << " - Artikel eingeben: " << std::endl;
  329.             Artikel* artikel = &artikel_tabelle[i];
  330.            
  331.             std::string eingabe_artikel_gruppe;
  332.             std::cin >> eingabe_artikel_gruppe;
  333.             artikel->setArtikelGruppe(eingabe_artikel_gruppe);
  334.            
  335.             std::string eingabe_artikel_name;
  336.             std::cin >> eingabe_artikel_name;
  337.             artikel->setArtikelName(eingabe_artikel_name);
  338.            
  339.             int eingabe_art_nr;
  340.             std::cin >> eingabe_art_nr;
  341.             artikel->setArtikelNummer(eingabe_art_nr);
  342.            
  343.             int eingabe_anzahl;
  344.             std::cin >> eingabe_anzahl;
  345.             artikel->setAnzahlArtikel(eingabe_anzahl);
  346.            
  347.             double eingabe_einkaufspreis;
  348.             std::cin >> eingabe_einkaufspreis;
  349.             artikel->setEinkaufsPreis(eingabe_einkaufspreis);
  350.         }
  351.     }
  352. };
  353.  
  354. /**
  355.  * main-Methode zum Starten des Programms.
  356.  * Zuerst wird hier das Objekt verwaltung vom Typ ArtikelVerwaltung erzeugt,
  357.  * um damit auf seine diversen Methoden zur Loesung der Aufgabenstellung
  358.  * zuzugreifen.
  359.  * @param argc Hier nicht verwendete Kommandozeilenparameter
  360.  */
  361. int main(int argc, const char** argv)
  362. {
  363.     // Instantiierung des Objektes verwaltung vom Typ ArtikelVerwaltung
  364.     ArtikelVerwaltung verwaltung;
  365.    
  366.     // Deklaration diverser Variablen
  367.     int artikel_gruppen = 0;
  368.     int anzahl_artikel_arten = 0;
  369.     int anzahl_artikel = 0;
  370.     double ek_preis_gesamt = 0.0;
  371.    
  372.     // Einlesen aller Artikel
  373.     verwaltung.einlesenTabellenWerte();
  374.     // Ausgabe aller Artikel
  375.     verwaltung.ausgabeTabelle();
  376.    
  377.     // Ermitteln der Anzahl der verschiedenen Artikel
  378.     anzahl_artikel_arten = verwaltung.verschiedeneArtikel();
  379.     // Ausgabe der Anzahl der verschiedenen Artikel
  380.     std::cout << "In der Tabelle befinden sich " << anzahl_artikel_arten  << " verschiedene Artikel." << std::endl;
  381.    
  382.     // Ermitteln des Gesamtbestandes an Artikeln
  383.     anzahl_artikel = verwaltung.artikelBestand();
  384.     // Ausgabe der gesamten Anzahl aller Artikel
  385.     std::cout << "Der Artikelbestand umfasst " << anzahl_artikel << " Artikel." << std::endl;
  386.    
  387.     // Ermitteln des Einkaufspreises für alle Artikel im Bestand
  388.     ek_preis_gesamt = verwaltung.gesamtWert();
  389.     // Ausgabe des Einkaufspreises aller Artikel im Bestand
  390.     std::cout << "Der Artikelbestand einen Einkaufswert von " << ek_preis_gesamt << " €" << std::endl;
  391.    
  392.     // Ermitteln der Anzahl der Artikelgruppen
  393.     artikel_gruppen = verwaltung.anzahlArtikelGruppen();
  394.     // Ausgabe der Anzahl der Artikelgruppen im Bestand
  395.     std::cout << "Es gibt " << artikel_gruppen << " Gruppen von Artikeln im Bestand." << std::endl;
  396.    
  397.     // Ermitteln des Bestandes und des Bestandswertes in jeder Artikelgruppe
  398.     // Ausgabe des Bestandes und des Bestandswertes in jeder Artikelgruppe
  399.     verwaltung.artikelGruppenBestand();
  400.    
  401.     // Aufsteigendes Sortieren des Bestandes nach den Artikelgruppen
  402.     verwaltung.alphabetischGruppenSortieren();
  403.     // Ausgabe des nach den Artikelgruppen aufsteigend sortierten Bestandes
  404.     std::cout << "Warenbestand sortiert nach den Artikelgruppen." << std::endl;
  405.     verwaltung.ausgabeTabelle();
  406.    
  407.     // Aufsteigendes Sortieren des Bestandes nach den Artikelnamen
  408.     verwaltung.alphabetischArtikelNamenSortieren();
  409.     // Ausgabe des nach den Artikelnamen aufsteigend sortierten Bestandes
  410.     std::cout << "Warenbestand sortiert nach den Artikelnamen." << std::endl;
  411.     verwaltung.ausgabeTabelle();
  412.    
  413.     return 0;
  414. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement