Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Rechnung
- {
- friend class MonatListe;
- friend class Kategorie;
- private:
- int Betrag;// Rechnungsbetrag
- int Nummer; //Nummer der Rechnung
- string Kategorie;//Kategorie der Rechnung
- const int Jahr=2017; //Wird nicht verwendet, aber in Aufgabenstellung verlangt
- Rechnung *nachfolger;
- public:
- Rechnung(){} //Defaultkonstruktor
- Rechnung(int betrag, int nummer, string kategorie):Betrag(betrag),Nummer(nummer),Kategorie(kategorie)
- {
- nachfolger=0;
- }
- int get_Betrag() //getter Methode fuer den Betrag
- {
- return Betrag;
- }
- int get_Nummer()//getter Methode fuer die Nummer
- {
- return Nummer;
- }
- string get_Kategorie()//getter Methode fuer die Kategorie
- {
- return Kategorie;
- }
- void data_out()
- { cout<<"Methode data_out"<<endl;
- cout<<"Rechnungs Betrag: "<<get_Betrag()<<endl;
- cout<<"Rechnungs Nummer: "<<get_Nummer()<<endl;
- cout<<"Rechnungs Kategorie: "<<get_Kategorie()<<endl;
- }
- };
- // Grundgerüst
- class MonatListe //Liste welche alle Rechnungen hineinschreibt
- {
- friend class Rechnung;
- friend class Kategorie;
- // Listenkopf
- Rechnung *kopf;
- // Listenende
- Rechnung *ende;
- private:
- int BudgetWert=500; //Monatsbudget fuer jeden Monat gleich
- MonatListe *nachfolger;
- public:
- // Konstruktor
- MonatListe()
- {
- kopf = ende = NULL;
- }
- // Destruktor
- ~MonatListe()
- {
- cout << "Liste gelöscht" << endl;
- }
- void Ausgabenchecker(int Bet)
- {
- BudgetWert-=Bet;
- if(BudgetWert<=0)
- {
- cout<<"AUSGABENLIMIT UEBERSCHRITTEN"<<endl;
- }
- }
- // eine Rechnung in die Liste einfügen
- void hinzufuegen(Rechnung rechnung)
- {
- // Ein neues Listenelement erstellen und mit 'rechnung' initialisieren
- Rechnung *neuesListenelement = new Rechnung(rechnung);
- // liste ist leer
- if(istLeer())
- ende = kopf = neuesListenelement;
- else
- {
- // das letzte Element zeigt auf das neue Element
- ende->nachfolger = neuesListenelement;
- // das neue Element wird zum Letzten
- ende = neuesListenelement;
- // der Nachfolger vom Ende ist NULL
- ende->nachfolger = NULL;
- }
- }
- // prüft ob die Liste leer ist
- bool istLeer()
- {
- return (kopf == NULL); //? true : false;
- }
- // Liste löschen
- void loeschen()
- {
- if(istLeer())
- return;
- // solange der Zeiger nicht Null ist, also noch Elemente vorhanden sind...
- while(kopf->nachfolger != NULL)
- {
- // ...suche das vorletzte ELement
- Rechnung *vorletztesElement = kopf;
- while(vorletztesElement->nachfolger != ende)
- {
- vorletztesElement = vorletztesElement->nachfolger;
- }
- // lösche das letzte Element
- delete ende;
- // das vorletzte Element wird zum Letzten
- vorletztesElement->nachfolger = NULL;
- ende = vorletztesElement;
- }
- // zuletzt noch den Listenkopf löschen
- delete kopf;
- }
- // zeigt alle Listenelemente
- void elementeAnzeigen()
- {
- // aktueller Knoten
- Rechnung *p = kopf;
- // solange der Knoten nicht Null ist, also das Ende nicht erreicht ist...
- while(p != NULL)
- {
- // ...Inhalt ausgeben
- cout << "Kategorie: "<< p->Kategorie
- << "\tRechnungsnummer: " << p->Nummer
- << "\tBetrag: " << p->Betrag
- << "\tJahr: " << p->Jahr << endl;
- // der Nachfolger wird zum aktuellen Knoten
- p = p->nachfolger;
- }
- }
- };
- // Grundgerüst
- class Kategorie
- {
- private:
- int Summe; //enthaelt die summe der kategorie
- public:
- // Konstruktor
- Kategorie()
- {
- }
- // Destruktor
- ~Kategorie()
- {
- cout << "Liste gelöscht" << endl;
- }
- void Summation(int Betr) //Addiert fuer die Kategorien auf
- {
- Summe+=Betr;
- }
- //getter-Methode SUmme
- int get_sum()
- {
- return Summe;
- }
- };
- void rechnung_detail(string *ka,int *be, int *reNr) //Hole mir die rechnung details
- {
- cout<<"Creating"<<endl;
- int RechnungsNr;
- int Betrag;
- int KategorieAuswahl;//Kategorie der Rechnung
- string Kategorie;
- cout<<"Nummer der Rechnung"<<endl;
- cin>>RechnungsNr;
- cout<<"Rechnungsbetrag?"<<endl;
- cin>>Betrag;
- cout<<"Aus welcher Kategorie stammt die Rechnung?"<<endl;
- cout<<"[1] Klettern"<<endl;
- cout<<"[2] Essen"<<endl;
- cout<<"[3] Trinken"<<endl;
- cout<<"[4] Auto"<<endl;
- cout<<"[5] Freundin"<<endl;
- cout<<"[6] Kaffee"<<endl;
- cout<<"[7] Studium"<<endl;
- cout<<"[8] Haustier"<<endl;
- cin>>KategorieAuswahl;
- switch(KategorieAuswahl)
- {
- case 1: Kategorie="Klettern";
- break;
- case 2: Kategorie="Essen";
- break;
- case 3: Kategorie="Trinken";
- break;
- case 4: Kategorie="Auto";
- break;
- case 5: Kategorie="Freundin";
- break;
- case 6: Kategorie="Kaffee";
- break;
- case 7: Kategorie="Studium";
- break;
- case 8: Kategorie="Haustier";
- break;
- default: cout<<"Falsche Auswahl"<<endl;
- break;
- }
- cout<<"RechnungsNr: "<<RechnungsNr<<endl;
- cout<<"Betrag: "<<Betrag<<endl;
- cout<<"Kategorie: "<<Kategorie<<endl;
- cout<<"Rechnung successfully created"<<endl;
- *ka=Kategorie;
- *be=Betrag;
- *reNr=RechnungsNr;
- }
- //Global definierte Listen
- MonatListe Januar; //Erstelle das Objekt der Klasse MonatListe mit dem Namen Januar
- MonatListe Februar; //Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe Maerz; //Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe April; //Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe Mai;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe Juni;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe Juli;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe August;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe September;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe Oktober;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe November;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- MonatListe Dezember;//Erstelle das Objekt der Klasse MonatListe mit dem Namen...
- Kategorie Klettern;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- Kategorie Essen;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- Kategorie Trinken;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- Kategorie Auto;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- Kategorie Freundin;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- Kategorie Kaffee;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- Kategorie Studium;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- Kategorie Haustier;//Erstelle das Objekt der Klasse KategorieListe mit dem Namen...
- void KategorieChooser(string Kat, Rechnung *obj,int betr)//Entscheidet zu welcher Kategorie die Rechnung hinzuzufuegen ist und wohin der betrag summiert wird
- {
- if(Kat=="Klettern")
- {
- // Klettern.hinzufuegen(*obj);
- Klettern.Summation(betr);
- }
- else if(Kat=="Essen")
- {
- // Essen.hinzufuegen(*obj);
- Essen.Summation(betr);
- }
- else if(Kat=="Trinken")
- {
- // Trinken.hinzufuegen(*obj);
- Trinken.Summation(betr);
- }
- else if(Kat=="Auto")
- {
- // Auto.hinzufuegen(*obj);
- Auto.Summation(betr);
- }
- else if(Kat=="Freundin")
- {
- // Freundin.hinzufuegen(*obj);
- Freundin.Summation(betr);
- }
- else if(Kat=="Kaffee")
- {
- // Kaffee.hinzufuegen(*obj);
- Kaffee.Summation(betr);
- }
- else if(Kat=="Studium")
- {
- // Studium.hinzufuegen(*obj);
- Studium.Summation(betr);
- }
- else if(Kat=="Haustier")
- {
- // Haustier.hinzufuegen(*obj);
- Studium.Summation(betr);
- }
- }
- int Auswahl() //Liefert mir die momentane Moeglichkeit zuruck
- {
- int Moeglichkeiten;
- cout<<"Was moechten sie tun?"<<endl;
- cout<<"[1] Rechnung anlegen"<<endl;
- cout<<"[2] Alle Ausgaben, sortiert nach Monat ausgeben"<<endl;
- cout<<"[3] Summe der Ausgaben pro Kategorie ausgeben"<<endl;
- cout<<"[4] Rechnung loeschen"<<endl;
- cout<<"[5] Programmende"<<endl;
- cin >>Moeglichkeiten;
- system("cls");
- string kat;//Kategorie
- int reNr; //rechnungsnr
- int be; //betrag
- switch(Moeglichkeiten)
- {
- case 1: //Rechnung anlegen
- int Monat;
- cout<<"Fuer welchen Monat soll die Rechnung erfasst werden?"<<endl;
- cout<<"[1] Januar"<<endl;
- cout<<"[2] Februar"<<endl;
- cout<<"[3] Maerz"<<endl;
- cout<<"[4] April"<<endl;
- cout<<"[5] Mai"<<endl;
- cout<<"[6] Juni"<<endl;
- cout<<"[7] Juli"<<endl;
- cout<<"[8] August"<<endl;
- cout<<"[9] September"<<endl;
- cout<<"[10] Oktober"<<endl;
- cout<<"[11] November"<<endl;
- cout<<"[12] Dezember"<<endl;
- cin>> Monat;
- switch(Monat)
- {
- case 1: //Januar Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Januar.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Januar.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 2: //Februar Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Februar.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Februar.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 3: //Maerz Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Maerz.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Maerz.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 4: //April Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- April.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- April.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 5: //Mai Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Mai.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Mai.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 6: //Juni Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Juni.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Juni.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 7: //Juli Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Juli.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Juli.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 8: //August Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- August.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- August.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 9: //September Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- September.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- September.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 10: //Oktober Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Oktober.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Oktober.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 11: //November Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- November.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- November.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- case 12: //Dezember Rechnung erstellen
- {
- rechnung_detail(&kat,&be, &reNr); //gehe mir mit diesen adressen in die funktion rechnungdetail und weise den adressen entsprechende werte zu
- Rechnung *created_Rechnung= new Rechnung(be,reNr,kat); //Die Rechnung wurde erstellt und kann nun in die Liste eingegliedert werden
- created_Rechnung->data_out();
- Dezember.hinzufuegen(*created_Rechnung);
- KategorieChooser(kat,created_Rechnung,be);
- system("cls");
- Dezember.Ausgabenchecker(be);
- delete(created_Rechnung);
- }
- break;
- default: //Falsche Auswahl
- cout<<"Falsche Auswahl"<<endl;
- Auswahl();
- }
- break;
- case 2: //Alles Ausgaben nach Monat sortiert ausgeben
- system("cls");
- cout<<"Alles Ausgaben nach Monat ausgeben"<<endl;
- cout<<"---Januar---"<<endl;
- Januar.elementeAnzeigen();
- cout<<"---Februar---"<<endl;
- Februar.elementeAnzeigen();
- cout<<"---Maerz---"<<endl;
- Maerz.elementeAnzeigen();
- cout<<"---April---"<<endl;
- April.elementeAnzeigen();
- cout<<"---Mai---"<<endl;
- Mai.elementeAnzeigen();
- cout<<"---Juni---"<<endl;
- Juni.elementeAnzeigen();
- cout<<"---Juli---"<<endl;
- Juli.elementeAnzeigen();
- cout<<"---August---"<<endl;
- August.elementeAnzeigen();
- cout<<"---September---"<<endl;
- September.elementeAnzeigen();
- cout<<"---Oktober---"<<endl;
- Oktober.elementeAnzeigen();
- cout<<"---November---"<<endl;
- November.elementeAnzeigen();
- cout<<"---Dezember---"<<endl;
- Dezember.elementeAnzeigen();
- break;
- case 3: //Summe der Ausgaben pro Kategorie ausgeben
- system("cls");
- cout<<"Summe der Ausgaben pro Kategorie ausgeben"<<endl;
- cout<<"---Klettern---"<<endl;
- // Klettern.elementeAnzeigen();
- cout<<"Klettersumme: "<<Klettern.get_sum()<<endl;
- cout<<"---Essen---"<<endl;
- // Essen.elementeAnzeigen();
- cout<<"Essensumme: "<<Essen.get_sum()<<endl;
- cout<<"---Trinken---"<<endl;
- // Trinken.elementeAnzeigen();
- cout<<"Trinken: "<<Trinken.get_sum()<<endl;
- cout<<"---Auto---"<<endl;
- // Auto.elementeAnzeigen();
- cout<<"Auto: "<<Auto.get_sum()<<endl;
- cout<<"---Freundin---"<<endl;
- // Freundin.elementeAnzeigen();
- cout<<"Freundin: "<<Freundin.get_sum()<<endl;
- cout<<"---Kaffee---"<<endl;
- // Kaffee.elementeAnzeigen();
- cout<<"Kaffee: "<<Kaffee.get_sum()<<endl;
- cout<<"---Studium---"<<endl;
- // Studium.elementeAnzeigen();
- cout<<"Studium: "<<Studium.get_sum()<<endl;
- cout<<"---Haustier---"<<endl;
- // Haustier.elementeAnzeigen();
- cout<<"Haustier: "<<Haustier.get_sum()<<endl;
- break;
- case 4: //Rechnung loeschen
- system("cls");
- cout<<"Rechnung loeschen"<<endl;
- int delete_Rechnung;
- cout<<"Welche Rechnung soll geloescht werden?"<<endl;
- cout<<"[1] Januar"<<endl;
- cout<<"[2] Februar"<<endl;
- cout<<"[3] Maerz"<<endl;
- cout<<"[4] April"<<endl;
- cout<<"[5] Mai"<<endl;
- cout<<"[6] Juni"<<endl;
- cout<<"[7] Juli"<<endl;
- cout<<"[8] August"<<endl;
- cout<<"[9] September"<<endl;
- cout<<"[10] Oktober"<<endl;
- cout<<"[11] November"<<endl;
- cout<<"[12] Dezember"<<endl;
- cin>>delete_Rechnung;
- switch(delete_Rechnung)
- {
- case 1:
- {
- Januar.loeschen();
- break;
- }
- case 2:
- {
- Februar.loeschen();
- break;
- }
- case 3:
- {
- Maerz.loeschen();
- break;
- }
- case 4:
- {
- April.loeschen();
- break;
- }
- case 5:
- {
- Mai.loeschen();
- break;
- }
- case 6:
- {
- Juni.loeschen();
- break;
- }
- case 7:
- {
- Juli.loeschen();
- break;
- }
- case 8:
- {
- August.loeschen();
- break;
- }
- case 9:
- {
- September.loeschen();
- break;
- }
- case 10:
- {
- Oktober.loeschen();
- break;
- }
- case 11:
- {
- November.loeschen();
- break;
- }
- case 12:
- {
- Dezember.loeschen();
- break;
- }
- default:
- cout<<"Falsche Auswahl"<<endl;
- Auswahl();
- }
- break;
- case 5:
- cout<<"Programmende"<<endl;
- break;
- default: //Falsche Auswahl
- cout<<"Falsche Auswahl"<<endl;
- Auswahl();
- }
- return Moeglichkeiten;
- }
- int main()
- {
- int programstate;
- do{
- programstate=Auswahl();
- }
- while(programstate!=5);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement