Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- // Aufgabe 6 - Wintersemester 2017
- // Autoren: Jörg Schake, Dirk Seeber
- // Datum: 20. Dezember 2017
- #include "sechsteAufgabe.h"
- char DatenMenueDynamisch() {
- char Buchstabe;
- // Bietet das Untermenü "Haeuser dynamisch verwalten"
- // Eingabeparameter: keine
- // Rückgabewert: ausgewählter Menüpunkt
- cout << "Waehlen Sie zwischen folgenden Punkten:\n\n";
- cout << "(e)Daten eingeben\n";
- cout << "(a)Daten ausgeben\n";
- cout << "(r)Daten aus einer Datei lesen \n";
- cout << "(w)Daten in eine Datei schreiben\n";
- cout << "(d)Daten löschen\n";
- cout << "(x)Zurueck ins Hauptmenue\n";
- cin >> Buchstabe;
- return Buchstabe;
- }
- void DatenVerwaltenDynamisch()
- {
- //******* Variablendeklaration
- char hausMenu;
- int anzahl = 0;
- bool dateiLesen = false;
- bool dateiSchreiben = false;
- bool unterprogrammende = false;
- hausDyn *anfang = NULL;
- hausDyn *ende = NULL;
- string dateiname;
- do
- {
- hausMenu = DatenMenueDynamisch();
- // Fallunterscheidung
- switch (hausMenu)
- {
- case 'e':
- // **** Haus erfassen
- // Funktionsaufruf
- DatenErfassenDynamisch(&anfang, &ende);
- break;
- case 'a':
- // **** Häuserliste ausgeben
- // Funktionsaufruf
- DatenAusgebenDynamisch(anfang);
- break;
- case 'r':
- // **** Liest die Häuserliste aus einer Datei ein
- cout << "Bitte Name der Datei eingeben: ";
- cin >> dateiname;
- // Funktionsaufruf
- dateiLesen = WerteAusDateiLesenDynamisch(&anfang, &ende, dateiname);
- if (true == dateiLesen)
- {
- cout << "Alles gut beim Lesen der Datei" << endl;
- }
- else
- {
- cout << "FEHLER!!! beim Lesen der Datei" << endl;
- }
- break;
- case 'w':
- // **** Schreibt die Häuserliste in eine Datei
- cout << "Bitte Name der Datei eingeben: ";
- cin >> dateiname;
- // Funktionsaufruf
- dateiSchreiben = WerteInDateiSchreibenDynamisch(anfang, dateiname);
- if (true == dateiSchreiben)
- {
- cout << "Alles gut beim Schreiben der Datei" << endl;
- }
- else
- {
- cout << "FEHLER!!! beim Schreiben der Datei" << endl;
- }
- break;
- case 'd':
- // **** Liste löschen
- // Funktionsaufruf
- DatenLoeschenDynamisch(&anfang, &ende);
- break;
- case 'x':
- // **** Programm beenden
- cout << "*** U N T E R P R O G R A M M E N D E ***" << endl;
- unterprogrammende = true;
- break;
- default:
- // Warnhinweis
- cout << "Der eingegebene Wert " << hausMenu << " ist nicht gueltig!" << endl;
- break;
- } // endswitch
- } while (false == unterprogrammende);
- }
- /********************************************
- * Daten über Tastatur Eingeben
- ********************************************/
- void DatenErfassenDynamisch(hausDyn **anfang, hausDyn **ende)
- {
- hausDyn *h1 = new hausDyn;
- h1->next = NULL;
- if (*anfang == NULL) {
- *anfang= h1;
- *ende = h1;
- }
- //-----
- else {
- hausDyn *hausvorher = *ende;
- hausvorher->next = h1;
- *ende = h1;
- }
- cout << "Geben Sie die Kunden-Nr ein:\n";
- cin >> h1->kundennr;
- cout << "Geben Sie den PreisProMeter ein\n";
- cin >> h1->preisprometer;
- cout << "Geben Sie eine Strasse ein:\n";
- cin >> h1->adresse.strasse;
- cout << "Geben Sie einen Ort ein:\n";
- cin >> h1->adresse.ort;
- cout << "Geben Sie ihre Postleihzahl ein:\n";
- cin >> h1->adresse.plz;
- cout << "Geben Sie den Nachnamen ein :\n";
- cin >> h1->eigentuemer.nachname;
- cout << "Der Vorname :\n";
- cin >> h1->eigentuemer.vorname;
- cout << "Die Laenge\n";
- cin >> h1->Laenge;
- h1->Kosten = h1->Laenge * h1->preisprometer;
- }
- /********************************************
- * Werte aus Datei einlesen
- ********************************************/
- bool WerteAusDateiLesenDynamisch(hausDyn **anfang, hausDyn **ende,
- string dateiname)
- {
- // Variablen
- bool retWert = false;
- bool dateiEnde = false;
- ifstream eingabeDatei;
- string zeile;
- hausDyn *neuesHaus = NULL;
- // Datei öffnen
- eingabeDatei.open(dateiname, ios::in);
- if (true == eingabeDatei.is_open())
- {
- // solange Dateiende nicht erreicht
- while ((false == eingabeDatei.eof() )&& (false == dateiEnde))
- {
- getline(eingabeDatei, zeile, '\n');
- if (eingabeDatei.eof()) {
- break;
- }
- hausDyn *h1 = new hausDyn;
- h1->next = NULL;
- if (*anfang == NULL) {
- *anfang = h1;
- *ende = h1;
- }
- //-----
- else {
- hausDyn *hausvorher = *ende;
- hausvorher->next = h1;
- *ende = h1;
- }
- h1->kundennr = atoi(zeile.c_str()); // Atoi string in eine Zahl
- // Zeile einlesen
- getline(eingabeDatei, zeile, '\n');
- h1->preisprometer = atoi(zeile.c_str());
- getline(eingabeDatei, zeile, '\n');
- h1->adresse.strasse = zeile.c_str();
- getline(eingabeDatei, zeile, '\n');
- h1->adresse.ort = zeile.c_str();
- getline(eingabeDatei, zeile, '\n');
- h1->adresse.plz = atoi(zeile.c_str());
- getline(eingabeDatei, zeile, '\n');
- h1->eigentuemer.nachname = zeile.c_str();
- getline(eingabeDatei, zeile, '\n');
- h1->eigentuemer.vorname = zeile.c_str();
- getline(eingabeDatei, zeile, '\n');
- h1->Laenge = atoi(zeile.c_str());
- getline(eingabeDatei, zeile, '\n');
- h1->Kosten = atoi(zeile.c_str());
- // Hochzaehlen der Variable anzahl
- // siehe Beispielprogramme auf der Webseite
- } // end while ( false == eingabeDatei.eof() )
- // Datei schließen
- eingabeDatei.close();
- retWert = true;
- }
- else
- {
- retWert = false;
- }
- return retWert;
- }
- /********************************************
- * Werte in Datei ausgeben
- ********************************************/
- bool WerteInDateiSchreibenDynamisch(hausDyn *anfang, string dateiname)
- {
- // Variablen
- bool retWert = false;
- char dateiUeberschreiben = 'n';
- ofstream ausgabeDatei;
- hausDyn *hilfszeiger = anfang;
- if (NULL == hilfszeiger)
- {
- cout << endl;
- cout << "----------------------------" << endl;
- cout << " Die Liste ist leer!!!" << endl;
- cout << "----------------------------" << endl;
- }
- else
- {
- cout << "Bestehende Datei ueberschreiben? (j/n): ";
- cin >> dateiUeberschreiben;
- if ('j' == dateiUeberschreiben)
- {
- // Datei öffnen
- ausgabeDatei.open(dateiname, ios::out);
- }
- else
- {
- // oder zum Anhaengen an eine bestehende Datei
- ausgabeDatei.open(dateiname, ios::app);
- }
- if (true == ausgabeDatei.is_open())
- {
- while (NULL != hilfszeiger)
- {
- // Ausgabe in die Datei
- ausgabeDatei << hilfszeiger->kundennr << endl;
- ausgabeDatei << hilfszeiger->preisprometer << endl;
- ausgabeDatei << hilfszeiger->adresse.strasse << endl;
- ausgabeDatei << hilfszeiger->adresse.ort << endl;
- ausgabeDatei << hilfszeiger->adresse.plz << endl;
- ausgabeDatei << hilfszeiger->eigentuemer.nachname << endl;
- ausgabeDatei << hilfszeiger->eigentuemer.vorname << endl;
- ausgabeDatei << hilfszeiger->Laenge << endl;
- ausgabeDatei << hilfszeiger->Kosten << endl;
- // nächste Element in der Liste verarbeiten
- hilfszeiger = hilfszeiger->next;
- } // ende while
- // Datei schließen
- ausgabeDatei.close();
- retWert = true;
- }
- else
- {
- retWert = false;
- }
- }
- return retWert;
- }
- void DatenLoeschenDynamisch(hausDyn **anfang, hausDyn **ende)
- {
- hausDyn * hilfszeiger = *anfang;
- hausDyn * loeschzeiger = NULL;
- hausDyn *Akt_Haus = hilfszeiger;
- while (Akt_Haus != NULL) {
- loeschzeiger = Akt_Haus;
- Akt_Haus = Akt_Haus->next;
- delete loeschzeiger;
- }
- *anfang = NULL;
- *ende = NULL;
- }
- void DatenAusgebenDynamisch(hausDyn *anfang) {
- hausDyn *Akt_Haus = anfang;
- while (Akt_Haus != NULL) {
- cout << "Kunden-NR:\n";
- cout << Akt_Haus->kundennr;
- cout << endl;
- cout << "PreisProMeter\n";
- cout << Akt_Haus->preisprometer;
- cout << endl;
- cout << "Die Strasse:\n";
- cout << Akt_Haus->adresse.strasse;
- cout << endl;
- cout << "Der Ort:\n";
- cout << Akt_Haus->adresse.ort;
- cout << endl;
- cout << "Die Postleihzahl:\n";
- cout << Akt_Haus->adresse.plz;
- cout << endl;
- cout << "Der Nachname:\n";
- cout << Akt_Haus->eigentuemer.nachname;
- cout << endl;
- cout << "Der Vorname :\n";
- cout << Akt_Haus->eigentuemer.vorname;
- cout << endl;
- cout << "Die Laenge\n";
- cout << Akt_Haus->Laenge;
- cout << endl;
- cout << "Die Kosten \n";
- cout << Akt_Haus->Kosten;
- cout << endl;
- cout << "\n------------------------------------------------------------------\n";
- Akt_Haus = Akt_Haus->next;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement