Advertisement
Guest User

Untitled

a guest
Jan 18th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.34 KB | None | 0 0
  1. #include "stdafx.h"
  2. // Aufgabe 6 - Wintersemester 2017
  3. // Autoren: Jörg Schake, Dirk Seeber
  4. // Datum: 20. Dezember 2017
  5. #include "sechsteAufgabe.h"
  6. char DatenMenueDynamisch() {
  7. char Buchstabe;
  8. // Bietet das Untermenü "Haeuser dynamisch verwalten"
  9. // Eingabeparameter: keine
  10. // Rückgabewert: ausgewählter Menüpunkt
  11. cout << "Waehlen Sie zwischen folgenden Punkten:\n\n";
  12. cout << "(e)Daten eingeben\n";
  13. cout << "(a)Daten ausgeben\n";
  14. cout << "(r)Daten aus einer Datei lesen \n";
  15. cout << "(w)Daten in eine Datei schreiben\n";
  16. cout << "(d)Daten löschen\n";
  17. cout << "(x)Zurueck ins Hauptmenue\n";
  18.  
  19. cin >> Buchstabe;
  20.  
  21. return Buchstabe;
  22. }
  23. void DatenVerwaltenDynamisch()
  24. {
  25. //******* Variablendeklaration
  26. char hausMenu;
  27. int anzahl = 0;
  28. bool dateiLesen = false;
  29. bool dateiSchreiben = false;
  30. bool unterprogrammende = false;
  31. hausDyn *anfang = NULL;
  32. hausDyn *ende = NULL;
  33. string dateiname;
  34. do
  35. {
  36. hausMenu = DatenMenueDynamisch();
  37. // Fallunterscheidung
  38. switch (hausMenu)
  39. {
  40. case 'e':
  41. // **** Haus erfassen
  42. // Funktionsaufruf
  43. DatenErfassenDynamisch(&anfang, &ende);
  44. break;
  45. case 'a':
  46. // **** Häuserliste ausgeben
  47. // Funktionsaufruf
  48. DatenAusgebenDynamisch(anfang);
  49. break;
  50. case 'r':
  51. // **** Liest die Häuserliste aus einer Datei ein
  52. cout << "Bitte Name der Datei eingeben: ";
  53. cin >> dateiname;
  54. // Funktionsaufruf
  55. dateiLesen = WerteAusDateiLesenDynamisch(&anfang, &ende, dateiname);
  56. if (true == dateiLesen)
  57. {
  58. cout << "Alles gut beim Lesen der Datei" << endl;
  59. }
  60. else
  61. {
  62. cout << "FEHLER!!! beim Lesen der Datei" << endl;
  63. }
  64. break;
  65. case 'w':
  66. // **** Schreibt die Häuserliste in eine Datei
  67. cout << "Bitte Name der Datei eingeben: ";
  68. cin >> dateiname;
  69. // Funktionsaufruf
  70. dateiSchreiben = WerteInDateiSchreibenDynamisch(anfang, dateiname);
  71. if (true == dateiSchreiben)
  72. {
  73. cout << "Alles gut beim Schreiben der Datei" << endl;
  74. }
  75. else
  76. {
  77. cout << "FEHLER!!! beim Schreiben der Datei" << endl;
  78. }
  79. break;
  80. case 'd':
  81. // **** Liste löschen
  82. // Funktionsaufruf
  83. DatenLoeschenDynamisch(&anfang, &ende);
  84. break;
  85. case 'x':
  86. // **** Programm beenden
  87. cout << "*** U N T E R P R O G R A M M E N D E ***" << endl;
  88. unterprogrammende = true;
  89. break;
  90. default:
  91. // Warnhinweis
  92. cout << "Der eingegebene Wert " << hausMenu << " ist nicht gueltig!" << endl;
  93. break;
  94. } // endswitch
  95. } while (false == unterprogrammende);
  96. }
  97. /********************************************
  98. * Daten über Tastatur Eingeben
  99. ********************************************/
  100. void DatenErfassenDynamisch(hausDyn **anfang, hausDyn **ende)
  101. {
  102. hausDyn *h1 = new hausDyn;
  103. h1->next = NULL;
  104.  
  105.  
  106. if (*anfang == NULL) {
  107. *anfang= h1;
  108. *ende = h1;
  109. }
  110.  
  111. //-----
  112. else {
  113. hausDyn *hausvorher = *ende;
  114. hausvorher->next = h1;
  115. *ende = h1;
  116. }
  117.  
  118. cout << "Geben Sie die Kunden-Nr ein:\n";
  119. cin >> h1->kundennr;
  120.  
  121. cout << "Geben Sie den PreisProMeter ein\n";
  122. cin >> h1->preisprometer;
  123.  
  124. cout << "Geben Sie eine Strasse ein:\n";
  125. cin >> h1->adresse.strasse;
  126.  
  127. cout << "Geben Sie einen Ort ein:\n";
  128. cin >> h1->adresse.ort;
  129.  
  130. cout << "Geben Sie ihre Postleihzahl ein:\n";
  131. cin >> h1->adresse.plz;
  132.  
  133. cout << "Geben Sie den Nachnamen ein :\n";
  134. cin >> h1->eigentuemer.nachname;
  135.  
  136. cout << "Der Vorname :\n";
  137. cin >> h1->eigentuemer.vorname;
  138.  
  139. cout << "Die Laenge\n";
  140. cin >> h1->Laenge;
  141.  
  142. h1->Kosten = h1->Laenge * h1->preisprometer;
  143. }
  144.  
  145. /********************************************
  146. * Werte aus Datei einlesen
  147. ********************************************/
  148. bool WerteAusDateiLesenDynamisch(hausDyn **anfang, hausDyn **ende,
  149. string dateiname)
  150. {
  151. // Variablen
  152. bool retWert = false;
  153. bool dateiEnde = false;
  154. ifstream eingabeDatei;
  155. string zeile;
  156. hausDyn *neuesHaus = NULL;
  157. // Datei öffnen
  158. eingabeDatei.open(dateiname, ios::in);
  159. if (true == eingabeDatei.is_open())
  160. {
  161. // solange Dateiende nicht erreicht
  162. while ((false == eingabeDatei.eof() )&& (false == dateiEnde))
  163. {
  164. getline(eingabeDatei, zeile, '\n');
  165.  
  166. if (eingabeDatei.eof()) {
  167. break;
  168. }
  169. hausDyn *h1 = new hausDyn;
  170. h1->next = NULL;
  171.  
  172.  
  173. if (*anfang == NULL) {
  174. *anfang = h1;
  175. *ende = h1;
  176. }
  177.  
  178. //-----
  179. else {
  180. hausDyn *hausvorher = *ende;
  181. hausvorher->next = h1;
  182. *ende = h1;
  183. }
  184. h1->kundennr = atoi(zeile.c_str()); // Atoi string in eine Zahl
  185. // Zeile einlesen
  186.  
  187. getline(eingabeDatei, zeile, '\n');
  188. h1->preisprometer = atoi(zeile.c_str());
  189.  
  190. getline(eingabeDatei, zeile, '\n');
  191. h1->adresse.strasse = zeile.c_str();
  192.  
  193. getline(eingabeDatei, zeile, '\n');
  194. h1->adresse.ort = zeile.c_str();
  195.  
  196. getline(eingabeDatei, zeile, '\n');
  197. h1->adresse.plz = atoi(zeile.c_str());
  198.  
  199. getline(eingabeDatei, zeile, '\n');
  200. h1->eigentuemer.nachname = zeile.c_str();
  201.  
  202. getline(eingabeDatei, zeile, '\n');
  203. h1->eigentuemer.vorname = zeile.c_str();
  204.  
  205. getline(eingabeDatei, zeile, '\n');
  206. h1->Laenge = atoi(zeile.c_str());
  207.  
  208. getline(eingabeDatei, zeile, '\n');
  209. h1->Kosten = atoi(zeile.c_str());
  210. // Hochzaehlen der Variable anzahl
  211.  
  212. // siehe Beispielprogramme auf der Webseite
  213. } // end while ( false == eingabeDatei.eof() )
  214. // Datei schließen
  215. eingabeDatei.close();
  216. retWert = true;
  217. }
  218. else
  219. {
  220. retWert = false;
  221. }
  222. return retWert;
  223. }
  224. /********************************************
  225. * Werte in Datei ausgeben
  226. ********************************************/
  227. bool WerteInDateiSchreibenDynamisch(hausDyn *anfang, string dateiname)
  228. {
  229. // Variablen
  230. bool retWert = false;
  231. char dateiUeberschreiben = 'n';
  232. ofstream ausgabeDatei;
  233. hausDyn *hilfszeiger = anfang;
  234. if (NULL == hilfszeiger)
  235. {
  236. cout << endl;
  237. cout << "----------------------------" << endl;
  238. cout << " Die Liste ist leer!!!" << endl;
  239. cout << "----------------------------" << endl;
  240. }
  241. else
  242. {
  243. cout << "Bestehende Datei ueberschreiben? (j/n): ";
  244. cin >> dateiUeberschreiben;
  245. if ('j' == dateiUeberschreiben)
  246. {
  247. // Datei öffnen
  248. ausgabeDatei.open(dateiname, ios::out);
  249. }
  250. else
  251. {
  252. // oder zum Anhaengen an eine bestehende Datei
  253. ausgabeDatei.open(dateiname, ios::app);
  254. }
  255. if (true == ausgabeDatei.is_open())
  256. {
  257. while (NULL != hilfszeiger)
  258. {
  259. // Ausgabe in die Datei
  260. ausgabeDatei << hilfszeiger->kundennr << endl;
  261.  
  262. ausgabeDatei << hilfszeiger->preisprometer << endl;
  263.  
  264. ausgabeDatei << hilfszeiger->adresse.strasse << endl;
  265.  
  266. ausgabeDatei << hilfszeiger->adresse.ort << endl;
  267.  
  268. ausgabeDatei << hilfszeiger->adresse.plz << endl;
  269.  
  270. ausgabeDatei << hilfszeiger->eigentuemer.nachname << endl;
  271.  
  272. ausgabeDatei << hilfszeiger->eigentuemer.vorname << endl;
  273.  
  274. ausgabeDatei << hilfszeiger->Laenge << endl;
  275.  
  276. ausgabeDatei << hilfszeiger->Kosten << endl;
  277. // nächste Element in der Liste verarbeiten
  278. hilfszeiger = hilfszeiger->next;
  279. } // ende while
  280. // Datei schließen
  281. ausgabeDatei.close();
  282. retWert = true;
  283. }
  284. else
  285. {
  286. retWert = false;
  287. }
  288. }
  289. return retWert;
  290. }
  291.  
  292. void DatenLoeschenDynamisch(hausDyn **anfang, hausDyn **ende)
  293. {
  294. hausDyn * hilfszeiger = *anfang;
  295. hausDyn * loeschzeiger = NULL;
  296.  
  297.  
  298. hausDyn *Akt_Haus = hilfszeiger;
  299. while (Akt_Haus != NULL) {
  300. loeschzeiger = Akt_Haus;
  301. Akt_Haus = Akt_Haus->next;
  302. delete loeschzeiger;
  303. }
  304.  
  305. *anfang = NULL;
  306. *ende = NULL;
  307. }
  308.  
  309. void DatenAusgebenDynamisch(hausDyn *anfang) {
  310.  
  311. hausDyn *Akt_Haus = anfang;
  312. while (Akt_Haus != NULL) {
  313.  
  314. cout << "Kunden-NR:\n";
  315. cout << Akt_Haus->kundennr;
  316. cout << endl;
  317. cout << "PreisProMeter\n";
  318. cout << Akt_Haus->preisprometer;
  319. cout << endl;
  320. cout << "Die Strasse:\n";
  321. cout << Akt_Haus->adresse.strasse;
  322. cout << endl;
  323. cout << "Der Ort:\n";
  324. cout << Akt_Haus->adresse.ort;
  325. cout << endl;
  326. cout << "Die Postleihzahl:\n";
  327. cout << Akt_Haus->adresse.plz;
  328. cout << endl;
  329. cout << "Der Nachname:\n";
  330. cout << Akt_Haus->eigentuemer.nachname;
  331. cout << endl;
  332. cout << "Der Vorname :\n";
  333. cout << Akt_Haus->eigentuemer.vorname;
  334. cout << endl;
  335. cout << "Die Laenge\n";
  336. cout << Akt_Haus->Laenge;
  337. cout << endl;
  338.  
  339.  
  340. cout << "Die Kosten \n";
  341. cout << Akt_Haus->Kosten;
  342. cout << endl;
  343. cout << "\n------------------------------------------------------------------\n";
  344.  
  345. Akt_Haus = Akt_Haus->next;
  346. }
  347. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement