Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- class Artikel
- {
- private:
- // Deklaration der Variablen
- std::string artikel_gruppe;
- std::string artikel_name;
- int artikel_nummer;
- int anzahl_artikel;
- double einkaufs_preis;
- public:
- /**
- * leerer Konstruktor zur Initialisierung der Attribute
- */
- Artikel ()
- {
- std::string artikel_gruppe = "";
- std::string artikel_name = "";
- int artikel_nummer = 0;
- int anzahl_artikel = 0;
- double einkaufs_preis = 0.0;
- }
- /**
- * Konstruktor mit Uebergabeparametern zur Initialisierung der Attribute
- */
- Artikel (std::string art_gruppe, std::string art_name, int art_nummer, int anz_artikel, double e_k)
- {
- std::string artikel_gruppe = art_gruppe;
- std::string artikel_name = art_name;
- int artikel_nummer = art_nummer;
- int anzahl_artikel = anz_artikel;
- double einkaufs_preis = e_k;
- }
- ~Artikel ()
- {
- }
- /**
- * Speichern der Artikelgruppe
- */
- void setArtikelGruppe(std::string gruppe)
- {
- artikel_gruppe = gruppe;
- }
- /**
- * Lesen der Artikelgruppe
- * @return Artikelgruppe des Artikels
- */
- std::string getArtikelGruppe()
- {
- return artikel_gruppe;
- }
- /**
- * Speichern des Artikelnamens
- */
- void setArtikelName(std::string name)
- {
- artikel_name = name;
- }
- /**
- * Lesen des Artikelnamens
- * @return Artikelname des Artikels
- */
- std::string getArtikelName()
- {
- return artikel_name;
- }
- /**
- * Speichern der Artikelnummer
- */
- void setArtikelNummer(int nummer)
- {
- artikel_nummer = nummer;
- }
- /**
- * Ermittlung der Artikelnummer
- * @return Artikelnummer des Artikels
- */
- int getArtikelNummer()
- {
- return artikel_nummer;
- }
- /**
- * Speichern der Artikelanzahl
- */
- void setAnzahlArtikel(int nummer)
- {
- anzahl_artikel = nummer;
- }
- /**
- * Ermittlung des Bestands des Artikels
- * @return Artikelanzahl des Artikels
- */
- int getAnzahlArtikel()
- {
- return anzahl_artikel;
- }
- /**
- * Speichern der Einkaufspreises
- */
- void setEinkaufsPreis(double preis)
- {
- einkaufs_preis = preis;
- }
- /**
- * Ermittlung der Einkaufspreises fuer den betreffenden Artikel
- * @return Einkaufspreis des Artikels
- */
- double getEinkaufsPreis()
- {
- return einkaufs_preis;
- }
- };
- class ArtikelVerwaltung
- {
- private:
- // Anzahl der einzugebenden Artikel
- int anzahl_eingabe_artikel;
- // das Array zum speichern der Artikelobjekte
- Artikel* artikel_tabelle;
- // 1x1 Array zum Zwischenspeichern
- Artikel* temp_tabelle;
- /**
- * Private Methode zum alphabetischen zyklischen Tauschen
- * zweier Artikel nach der Artikelgruppe
- */
- void zyklischAlphabetischGruppeTauschen(int i)
- {
- for (int durchlauf = 1; durchlauf < i; ++durchlauf)
- {
- for (int spalte = 0; spalte < i - 1; ++spalte)
- {
- if (artikel_tabelle[spalte].getArtikelName() > artikel_tabelle[spalte + 1].getArtikelName())
- {
- temp_tabelle[1] = artikel_tabelle[spalte];
- artikel_tabelle[spalte] = artikel_tabelle[spalte + 1];
- artikel_tabelle[spalte + 1] = temp_tabelle[1];
- }
- }
- }
- }
- /**
- * Private Methode zum alphabetischen zyklischen Tauschen
- * zweier Artikel nach dem Artikelnamen
- */
- void zyklischAlphabetischArtikelNamenTauschen(int i)
- {
- for (int durchlauf = 1; durchlauf < i; ++durchlauf)
- {
- for (int spalte = 0; spalte < i - 1; ++spalte)
- {
- if (artikel_tabelle[spalte].getArtikelGruppe() > artikel_tabelle[spalte + 1].getArtikelGruppe())
- {
- temp_tabelle[1] = artikel_tabelle[spalte];
- artikel_tabelle[spalte] = artikel_tabelle[spalte + 1];
- artikel_tabelle[spalte + 1] = temp_tabelle[1];
- }
- }
- }
- }
- public:
- /**
- * Die Werte für die Instanzvariablen werden initial gesetzt. Zudem wird ein
- * Array von Artikeln im Heap erstellt. Dieses muss entsprechend im Destruktor
- * manuell wieder freigegeben werden.
- */
- ArtikelVerwaltung()
- {
- anzahl_eingabe_artikel = 17;
- artikel_tabelle = new Artikel[anzahl_eingabe_artikel];
- temp_tabelle = new Artikel[1];
- }
- /**
- * Das Artikel-Array wird freigegeben um keinen Speicher unabsichtlich zu
- * blockieren
- */
- ~ArtikelVerwaltung()
- {
- delete [] artikel_tabelle;
- delete [] temp_tabelle;
- }
- /**
- * Die Laenge der Tabelle gibt hier Aufschluss
- * ueber die Anzahl der verschiedenen Artikel im Bestand.
- */
- int verschiedeneArtikel()
- {
- return anzahl_eingabe_artikel;
- }
- /**
- * Aufsummieren der jeweiligen Anzahlen der einzelnen Artikel
- */
- int artikelBestand()
- {
- int gesamt_anzahl_artikel = 0;
- for (int spalte = 0; spalte < anzahl_eingabe_artikel; ++spalte)
- {
- gesamt_anzahl_artikel = gesamt_anzahl_artikel + artikel_tabelle[spalte].getAnzahlArtikel();
- }
- return gesamt_anzahl_artikel;
- }
- /**
- * Aufsummiert wird der Einkaufswert aller im Kiosk befindlichen Artikel
- */
- double gesamtWert()
- {
- double gesamt_wert = 0;
- for (int spalte = 0; spalte < anzahl_eingabe_artikel; ++spalte)
- {
- gesamt_wert = gesamt_wert + artikel_tabelle[spalte].getEinkaufsPreis();
- }
- return gesamt_wert;
- }
- /**
- * Methode zum Ermitteln der Anzahl der Artikelgruppen
- * Diese Methode setzt voraus, dass der Bestand vorher nach den
- * Artikelgruppen sortiert worden ist.
- */
- int anzahlArtikelGruppen()
- {
- int gruppen_anzahl = 1;
- for (int spalte = 0; spalte < anzahl_eingabe_artikel - 1; ++spalte)
- {
- if (artikel_tabelle[spalte].getArtikelGruppe() != artikel_tabelle[spalte + 1].getArtikelGruppe())
- {
- gruppen_anzahl = gruppen_anzahl + 1;
- }
- }
- return gruppen_anzahl;
- }
- /**
- * Methode zum Ermitteln und der Ausgabe des Bestandes
- * und des Bestandswertes in den einzelnen Artikelgruppen
- * Diese Methode setzt voraus, dass der Bestand vorher nach den
- * Artikelgruppen sortiert worden ist.
- */
- void artikelGruppenBestand()
- {
- int gruppen_bestand = 0;
- double gruppen_wert = 0.0;
- for (int spalte = 0; spalte < anzahl_eingabe_artikel - 1; ++spalte)
- {
- if (artikel_tabelle[spalte + 1].getArtikelGruppe() == artikel_tabelle[spalte].getArtikelGruppe())
- {
- gruppen_bestand = gruppen_bestand + artikel_tabelle[spalte].getAnzahlArtikel();
- gruppen_wert = gruppen_wert + artikel_tabelle[spalte].getAnzahlArtikel() * artikel_tabelle[spalte].getEinkaufsPreis();
- }
- else
- {
- gruppen_bestand = gruppen_bestand + artikel_tabelle[spalte].getAnzahlArtikel();
- gruppen_wert = gruppen_wert + artikel_tabelle[spalte].getAnzahlArtikel() * artikel_tabelle[spalte].getEinkaufsPreis();
- std::cout << "Der Bestand von " << artikel_tabelle[spalte].getArtikelGruppe() << " betraegt " << gruppen_bestand << " mit einem Wert von " << gruppen_wert << "." << std::endl;
- gruppen_bestand = 0;
- gruppen_wert = 0;
- }
- }
- }
- /**
- * Alphabetisches Sortieren des Warenbestandes nach den Artikelgruppen
- */
- void alphabetischGruppenSortieren()
- {
- zyklischAlphabetischGruppeTauschen(anzahl_eingabe_artikel);
- }
- /**
- * Alphabetisches Sortieren des Warenbestandes nach den Artikelnamen
- */
- void alphabetischArtikelNamenSortieren()
- {
- zyklischAlphabetischArtikelNamenTauschen(anzahl_eingabe_artikel);
- }
- /**
- * Fuenfspaltige Ausgabe der gesamten Tabelle
- */
- void ausgabeTabelle()
- {
- std::cout << "Ausgabe des Artikelbestandes: Artikelgruppe, Artikelname, Artikelnummer, Artikel, EK in ?" << std::endl;
- for (int i = 0; i < anzahl_eingabe_artikel; i++)
- {
- std::cout << artikel_tabelle[i].getArtikelGruppe() << "\t";
- std::cout << artikel_tabelle[i].getArtikelName() << "\t";
- std::cout << artikel_tabelle[i].getArtikelNummer() << "\t";
- std::cout << artikel_tabelle[i].getAnzahlArtikel() << "\t";
- std::cout << artikel_tabelle[i].getEinkaufsPreis() << std::endl;
- }
- }
- /**
- * Einlesen der Artikel in die Tabelle
- * Erzeugen eines Artikelobjektes durch Tastatureingabe von Artikelnummer
- * und Anzahl als ganzzahlige Eingaben und dem Einkaufspreis
- * als reeller Zahl.
- * Das neue Artikelobjekt wird in der Tabelle gespeichert.
- */
- void einlesenTabellenWerte()
- {
- std::cout << "Eingabe von Artikelgruppe, Artikelname, Artikelnummer, Artikelanzahl, EK in €" << std::endl;
- std::cout << "Alle Werte durch Leerzeichen getrennt in der Zeile" << std::endl;
- for (int i = 0; i < anzahl_eingabe_artikel; i++)
- {
- std::cout << "Daten fuer den " << (i+1) << " - Artikel eingeben: " << std::endl;
- Artikel* artikel = &artikel_tabelle[i];
- std::string eingabe_artikel_gruppe;
- std::cin >> eingabe_artikel_gruppe;
- artikel->setArtikelGruppe(eingabe_artikel_gruppe);
- std::string eingabe_artikel_name;
- std::cin >> eingabe_artikel_name;
- artikel->setArtikelName(eingabe_artikel_name);
- int eingabe_art_nr;
- std::cin >> eingabe_art_nr;
- artikel->setArtikelNummer(eingabe_art_nr);
- int eingabe_anzahl;
- std::cin >> eingabe_anzahl;
- artikel->setAnzahlArtikel(eingabe_anzahl);
- double eingabe_einkaufspreis;
- std::cin >> eingabe_einkaufspreis;
- artikel->setEinkaufsPreis(eingabe_einkaufspreis);
- }
- }
- };
- /**
- * main-Methode zum Starten des Programms.
- * Zuerst wird hier das Objekt verwaltung vom Typ ArtikelVerwaltung erzeugt,
- * um damit auf seine diversen Methoden zur Loesung der Aufgabenstellung
- * zuzugreifen.
- * @param argc Hier nicht verwendete Kommandozeilenparameter
- */
- int main(int argc, const char** argv)
- {
- // Instantiierung des Objektes verwaltung vom Typ ArtikelVerwaltung
- ArtikelVerwaltung verwaltung;
- // Deklaration diverser Variablen
- int artikel_gruppen = 0;
- int anzahl_artikel_arten = 0;
- int anzahl_artikel = 0;
- double ek_preis_gesamt = 0.0;
- // Einlesen aller Artikel
- verwaltung.einlesenTabellenWerte();
- // Ausgabe aller Artikel
- verwaltung.ausgabeTabelle();
- // Ermitteln der Anzahl der verschiedenen Artikel
- anzahl_artikel_arten = verwaltung.verschiedeneArtikel();
- // Ausgabe der Anzahl der verschiedenen Artikel
- std::cout << "In der Tabelle befinden sich " << anzahl_artikel_arten << " verschiedene Artikel." << std::endl;
- // Ermitteln des Gesamtbestandes an Artikeln
- anzahl_artikel = verwaltung.artikelBestand();
- // Ausgabe der gesamten Anzahl aller Artikel
- std::cout << "Der Artikelbestand umfasst " << anzahl_artikel << " Artikel." << std::endl;
- // Ermitteln des Einkaufspreises für alle Artikel im Bestand
- ek_preis_gesamt = verwaltung.gesamtWert();
- // Ausgabe des Einkaufspreises aller Artikel im Bestand
- std::cout << "Der Artikelbestand einen Einkaufswert von " << ek_preis_gesamt << " €" << std::endl;
- // Ermitteln der Anzahl der Artikelgruppen
- artikel_gruppen = verwaltung.anzahlArtikelGruppen();
- // Ausgabe der Anzahl der Artikelgruppen im Bestand
- std::cout << "Es gibt " << artikel_gruppen << " Gruppen von Artikeln im Bestand." << std::endl;
- // Ermitteln des Bestandes und des Bestandswertes in jeder Artikelgruppe
- // Ausgabe des Bestandes und des Bestandswertes in jeder Artikelgruppe
- verwaltung.artikelGruppenBestand();
- // Aufsteigendes Sortieren des Bestandes nach den Artikelgruppen
- verwaltung.alphabetischGruppenSortieren();
- // Ausgabe des nach den Artikelgruppen aufsteigend sortierten Bestandes
- std::cout << "Warenbestand sortiert nach den Artikelgruppen." << std::endl;
- verwaltung.ausgabeTabelle();
- // Aufsteigendes Sortieren des Bestandes nach den Artikelnamen
- verwaltung.alphabetischArtikelNamenSortieren();
- // Ausgabe des nach den Artikelnamen aufsteigend sortierten Bestandes
- std::cout << "Warenbestand sortiert nach den Artikelnamen." << std::endl;
- verwaltung.ausgabeTabelle();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement