Problem: Adressverwaltungsprogramm

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem: Adressverwaltungsprogramm

    Hi,
    ich habe ein kleines Adressverwaltungsprogramm angefangen zu schreiben.
    Ich kann Adressen eingeben und sofort danach ausgeben. Aber wenn ich über das Menü Die Adressen anzeigen will wird mir nichts angezeigt.
    Hier der Quelltext:

    Quellcode

    1. /*Adressverwaltung*/
    2. /********************************************************************************************************
    3. * Noch zu machen: (noch alles) *
    4. * 1: Adressverwaltung mit Neue Adressen , Löschen, Verändern, Anzeigen.Angeben wo er das machen will. *
    5. * 2: Bei Neu eingabe suchen wo erste neue Stelle. *
    6. * 3: Programm sucht nach Namen und gibt Stelle aus. Bei mehr als 23 bei tastendruck weiter auflisten. *
    7. * 4: Programm soll alles nach namen Auflisten *
    8. ********************************************************************************************************/
    9. //WICHTIG:
    10. //BUGS:
    11. // Mann kann nix anzeigen.
    12. /*Die Includes*/
    13. #include <iostream>
    14. #include <string>
    15. using namespace std;
    16. /*strukturen*/
    17. struct TAdresse
    18. {
    19. char *Name;
    20. char *Adresse;
    21. char *PLZ;
    22. char *Ort;
    23. char *Telefon;
    24. char *Vorname;
    25. char *Hausnummer;
    26. };
    27. /*Deklarationen*/
    28. TAdresse Adresse[50];
    29. char ende = 'n';
    30. char auswahl;
    31. int i = 0; //Zählervariable
    32. int platz = 0; // Speicherplatz
    33. /*Das Programm*/
    34. int main()
    35. {
    36. while (ende != 'j')
    37. {
    38. /*Die Auswahl anfang*/
    39. cout << "Was wollen Sie tun?" <<endl;
    40. cout << "Adresse" << endl;
    41. cout << "[h]inzufügen::";
    42. cout << "[l]oeschen::" ;
    43. cout << "[v]eraendern::";
    44. cout << "[a]nzeigen" << endl;
    45. //Trennstrich
    46. cout << "--------------------------------------------------" << endl;
    47. cout << "Programm [b]eenden"<< endl;
    48. cin >> auswahl;
    49. /*die Auswahl ende*/
    50. /*Realativierung der eingabe anfang*/
    51. switch(auswahl)
    52. {
    53. case 'h':
    54. case 'H':
    55. auswahl = 'h';
    56. break;
    57. case 'l':
    58. case 'L':
    59. auswahl = 'l';
    60. break;
    61. case 'v':
    62. case 'V':
    63. auswahl = 'v';
    64. break;
    65. case 'a':
    66. case 'A':
    67. auswahl = 'a';
    68. break;
    69. case 'b':
    70. case 'B':
    71. auswahl = 'b';
    72. break;
    73. default:
    74. cout << "Ihre Eingabe war Mist!" << endl;
    75. cout << "Ich gehe davon aus das Sie das Programm beenden wollen." << endl;
    76. ende = 'j';
    77. break;
    78. }
    79. /*relativierung der eingabe ende*/
    80. /*Erstellen der Arrays*/
    81. for(i = 0 ; i < 50 ; i++)
    82. {
    83. Adresse[i].Name = new char[50];
    84. Adresse[i].Adresse = new char[50];
    85. Adresse[i].Ort = new char[80];
    86. Adresse[i].Telefon = new char[30];
    87. Adresse[i].PLZ = new char[15];
    88. Adresse[i].Vorname = new char[50];
    89. Adresse[i].Hausnummer = new char [5];
    90. }
    91. if(ende != 'j')
    92. {
    93. /*Ausführung*/
    94. switch(auswahl)
    95. {
    96. case 'h':
    97. i = 1;
    98. platz = 2; //darf nicht 0 sein!!!
    99. // auswählen: mit oder ohne Suche
    100. cout << "Wollen Sie automatisch nach einen Freien Platz suchen lassen? (j/n)" << endl;
    101. cin >> auswahl;
    102. switch(auswahl)
    103. {
    104. case 'j':
    105. case 'J':
    106. do
    107. {
    108. //finden eines freien Platzes
    109. i++;
    110. if(platz != 0)
    111. {
    112. platz = strlen(Adresse[i].Name);
    113. }
    114. }
    115. while(i < 50);
    116. break;
    117. case 'n':
    118. case 'N':
    119. cout << "Welchen Speicherplatz wollen Sie nutzen? (1-50)" << endl;
    120. cin >> platz;
    121. platz - 1;
    122. if(platz < 0 || platz > 49)
    123. {
    124. cout << "Ihre Auswahl war ungültig. ";
    125. cout << "Geben Sie einen neuen Speicherplatz ein (1-50)" << endl;
    126. cin >> platz;
    127. platz - 1;
    128. }
    129. break;
    130. default:
    131. cout << "Ihre Eingabe war Mist!" << endl;
    132. cout << "Ich gehe davon aus das Sie das Programm beenden wollen." << endl;
    133. ende = 'j';
    134. break;
    135. }
    136. //übergabe der platznummer
    137. i = platz;
    138. //eingeben der Adresse
    139. cout << "Bitte geben Sie den Nachnamen des Kontaktes ein:" << endl;
    140. cin >> Adresse[i].Name;
    141. cout << "Geben sie jetz den Vornamen ein:" << endl;
    142. cin >> Adresse[i].Vorname;
    143. cout << "In welchere Straße wohnt er?" << endl;
    144. cin >> Adresse[i].Adresse;
    145. cout << "Welche Nummer hat das Haus?" << endl;
    146. cin >> Adresse[i].Hausnummer;
    147. cout << "In welchen Ort?" << endl;
    148. cin >> Adresse[i].Ort;
    149. cout << "Welche PLZ hat der Ort" << endl;
    150. cin >> Adresse[i].PLZ;
    151. cout << "Welche Telefonnummer hat der Kontakt?" << endl;
    152. cin >> Adresse[i].Telefon;
    153. //Angeben des gerade eingegebenen
    154. cout << "Name : " << Adresse[i].Name << " " << Adresse[i].Vorname << endl;
    155. cout << "Strasse: " << Adresse[i].Adresse << " " << Adresse[i].Hausnummer << endl;
    156. cout << "Ort : " << Adresse[i].PLZ << " " << Adresse[i].Ort << endl;
    157. cout << "Telefon: " << Adresse[i].Telefon << endl;
    158. cout << "Diese Angaben wurde in Platz " << platz + 1 << " geschrieben" << endl;
    159. break;
    160. case 'l':
    161. cout << "'Adresse loeschen' ist noch nicht initialisiert" << endl;
    162. break;
    163. case 'v':
    164. cout << "'Adresse veraendern' ist noch nicht initialisiert" << endl;
    165. break;
    166. case 'a':
    167. i = 0;
    168. for(i; i < 50; i++)
    169. {
    170. cout << "Platz " << i + 1 << ":" << endl;
    171. cout << "Name : " << Adresse[i].Name << " " << Adresse[i].Vorname << endl;
    172. cout << "Strasse: " << Adresse[i].Adresse << " " << Adresse[i].Hausnummer << endl;
    173. cout << "Ort : " << Adresse[i].PLZ << " " << Adresse[i].Ort << endl;
    174. cout << "Telefon: " << Adresse[i].Telefon << endl;
    175. }
    176. break;
    177. case 'b':
    178. /*Hier gibts nix weil man ja auch nix machen will*/
    179. cout << "Wollen Sie das Programm wirklich beenden? (j/n)" << endl;
    180. cin >> ende;
    181. break;
    182. }
    183. }
    184. /*Ausführung Ende*/
    185. }
    186. for(i = 0 ; i < 50 ; i++)
    187. {
    188. delete Adresse[i].Name;
    189. delete Adresse[i].Adresse;
    190. delete Adresse[i].Ort;
    191. delete Adresse[i].Telefon;
    192. delete Adresse[i].PLZ;
    193. delete Adresse[i].Vorname;
    194. delete Adresse[i].Hausnummer;
    195. }
    196. return 0;
    197. }
    Alles anzeigen
    Dateien
    • main.cpp

      (5,9 kB, 302 mal heruntergeladen, zuletzt: )
  • ich würde das array mal for der while schleife erstellen
    zur zeit überschreibst du es ja nach jeder auswahl aufs neue

    Quellcode

    1. int main()
    2. {
    3. /*Erstellen der Arrays*/
    4. for(i = 0 ; i < 50 ; i++)
    5. {
    6. Adresse[i].Name = new char[50];
    7. Adresse[i].Adresse = new char[50];
    8. Adresse[i].Ort = new char[80];
    9. Adresse[i].Telefon = new char[30];
    10. Adresse[i].PLZ = new char[15];
    11. Adresse[i].Vorname = new char[50];
    12. Adresse[i].Hausnummer = new char [5];
    13. }
    14. while (ende != 'j')
    15. {
    Alles anzeigen
  • Außerdem solltest du vielleicht mal mit dem Gedanken spielen die (ziemlich geile) STL zu benutzen.
    Ich hatte vor n paar Wochen mal mit diesem Artikeleingabe Programm von der Jessy angefangen aber dann die Lust verloren.
    Falls es interessiert:

    Quellcode

    1. // manage.cpp
    2. #include <iostream>
    3. #include <iomanip>
    4. #include <string>
    5. #include <vector>
    6. #include <cstdlib>
    7. #include "article.h"
    8. using namespace std;
    9. #define CLS (cout << "\033[2J" << "\033[1;1H") // CLear Screen
    10. void welcome();
    11. int show(vector<article*> &r_v);
    12. int new_article(vector<article*> &r_v, article *p_r);
    13. int check_input(char *in);
    14. int main(void)
    15. {
    16. vector<article*> v;
    17. article *r;
    18. int choice;
    19. CLS;
    20. welcome();
    21. while(1)
    22. {
    23. cout << "Auswahl(0 für Hilfe): ";
    24. cin >> choice;
    25. CLS;
    26. switch(choice)
    27. {
    28. case 0:
    29. welcome();
    30. break;
    31. case 1:
    32. show(v);
    33. break;
    34. case 2:
    35. new_article(v, r);
    36. break;
    37. case 12:
    38. cout << "bye, bye..." << endl;
    39. exit(-1);
    40. default:
    41. cout << "Ungueltige Eingabe." << endl;
    42. welcome();
    43. break;
    44. }
    45. }
    46. return 0;
    47. }
    48. void welcome(void){
    49. cout << "Herzlich Willkommen in dem Programm\n";
    50. cout << "+++++++++++++++++++++++++++++++++++\n";
    51. cout << "Hier koennen Sie kostenlos Ihre Artikel verwalten\n";
    52. cout << "************************************************\n\n";
    53. cout << "Was gedenken Sie nun zu tun?\n\n";
    54. cout << "1. Artikeldaten anzeigen\n";
    55. cout << "2. Neue Artikel hinzufügen\n";
    56. // cout << "3. Loeschen von Artikeln\n";
    57. // cout << "4. In Datei speichern\n";
    58. // cout << "5. Aus Datei laden\n";
    59. // cout << "6. Nach einem Artikel suchen\n";
    60. // cout << "7. Sortieren nach Nummer\n";
    61. // cout << "8. Sortieren nach Name\n";
    62. // cout << "9. Sortieren nach Preis\n";
    63. // cout << "10. Sortieren nach Bestand\n";
    64. cout << "12. Beenden\n";
    65. }
    66. int show(vector<article*> &r_v)
    67. {
    68. if(!r_v.size())
    69. {cout << "Noch keine Daten vorhanden." << endl;return 0;}
    70. cout << "In der Datenbank:" << endl;
    71. for (unsigned int j=0; j< r_v.size(); ++j)
    72. {
    73. cout << left << setw(9) << "Nummer: " << r_v[j]->getNumber() << endl;
    74. cout << left << setw(9) << "Name: " << r_v[j]->getName() << endl;
    75. cout << left << setw(9) << "Preis: " << r_v[j]->getPrice() << endl;
    76. cout << left << setw(9) << "Bestand: " << r_v[j]->getConstancy() << endl;
    77. cout << endl;
    78. }
    79. return 0;
    80. }
    81. int new_article(vector<article*> &r_v, article *p_r)
    82. {
    83. string temp_str;
    84. int index;
    85. float temp;
    86. char ch = 'n', input[20];
    87. do
    88. {
    89. getline(cin, temp_str); // formatierte Eingabe laesst '\n' im Stream...
    90. // jaja, unschoen...
    91. cout << "Neue Artikel hinzufügen: " << endl;
    92. index = r_v.size();
    93. p_r = new article();
    94. r_v.push_back(p_r);
    95. r_v[index]->setNumber(index+1);
    96. cout << "Name: ";
    97. getline(cin, temp_str);
    98. r_v[index]->setName(temp_str);
    99. while(1)
    100. {
    101. cout << "Preis: ";
    102. cin >> input;
    103. if (check_input(input) > 0)
    104. {
    105. cout << "Bitte nur Zahlen eingeben!" << endl;
    106. continue;
    107. }
    108. temp = atof(input);
    109. r_v[index]->setPrice(temp);
    110. break;
    111. }
    112. while(1)
    113. {
    114. cout << "Bestand: ";
    115. cin >> input;
    116. if (check_input(input) > 0)
    117. {
    118. cout << "Bitte nur Zahlen eingeben!" << endl;
    119. continue;
    120. }
    121. temp = atof(input);
    122. r_v[index]->setConstancy(temp);
    123. break;
    124. }
    125. cout << "Artikel hinzugefügt." << endl;
    126. cout << "Noch einen?[j/n]: ";
    127. cin >> ch;
    128. ch = tolower(ch);
    129. }
    130. while(ch == 'j');
    131. return 0;
    132. }
    133. // Prueft ob Zeichen im String
    134. int check_input(char *in)
    135. {
    136. for (int i=0;(int)in[i]!='\0';i++)
    137. {
    138. if (in[i] == 44) // Wenn '.'
    139. {
    140. in[i] = 46; // Mach ','
    141. continue; // Naechste if ueberspringen, da sonst return 1;
    142. }
    143. if (in[i] < 47 || in[i] > 58) // wenn kein Zeichen
    144. return 1;
    145. }
    146. return 0;
    147. }
    Alles anzeigen

    Quellcode

    1. // article.h
    2. #include <string>
    3. class article{
    4. private:
    5. int number;
    6. float price, constancy;
    7. std::string name;
    8. public:
    9. article(){};
    10. article(int k_number, int k_price, int k_constancy, std::string k_name)
    11. {
    12. number = k_number;
    13. price = k_price;
    14. constancy = k_constancy;
    15. name = k_name;
    16. }
    17. ~article(){}
    18. int getNumber() const {return number;}
    19. float getPrice() const {return price;}
    20. float getConstancy() const {return constancy;}
    21. std::string getName() const {return name;}
    22. void setNumber(int n){number = n;}
    23. void setPrice(float p){price = p;}
    24. void setConstancy(float c){constancy = c;}
    25. void setName(std::string na){name = na;}
    26. };
    Alles anzeigen


    Edit: Code repariert
  • STL steht für "Standard Template Library", aber lass dich vom "Template" nicht zu sehr verwirren.
    Sie stellt standardisierte Klassen zur Verfügung die nicht im genormten ISO C++ Standard enthalten sind. Dies sind z.B. string (für ein komfortableres String-Handling statt strlen, strcpy, strcmp etc.), list (eine einfache, doppelt verkettete Liste), map (ein assoziatives Array), ....
    Um diese Typen generisch verwendbar zu machen (der eine will in seine Liste "int"s speichern, der nächste will "double"s speichern), wurden diese Typen mit Hilfe von Templates realisiert, d.h. der zu verwendende Typ ist offen gelassen und man kann jeden beliebigen Typ (auch einen anderen Template-Typ) einfügen.

    Sehr kurzes, inhaltlich schwachsinniges, Beispiel:

    Quellcode

    1. template <class T> // T ist der Name meines Typen-Platzhalters und kann beliebig gewählt sein
    2. class Dummy {
    3. public:
    4. T member; // public Variablen sollte man eigentlich nicht verwenden - nur zur Demonstration!
    5. };
    6. ....
    7. Dummy<int> firstDummy;
    8. // => firstDummy.member ist vom Typ "int"
    9. firstDummy.member = 4711; // OK
    10. Dummy<double> secondDummy;
    11. // => secondDummy.member ist vom Typ "int"
    12. secondDummy.member = 3.1415; // OK
    13. firstDummy.member = 3.1415; // Fehler -> Cast auf int benötigt
    14. secondDummy.member = 4711; // OK (int wird automatisch in double konvertiert)
    Alles anzeigen


    hth
  • Was stimmt hier nicht?

    Quellcode

    1. //Ausschnitt des Programms
    2. //Adresse suchen
    3. case 's':
    4. cout << "Nach welchen Namen wollen Sie suchen? ";
    5. cin >> Vergleich;
    6. i = 0;
    7. cout << "Die Suchergebnisse sind:" << endl;
    8. for(i; i < 50; i++)
    9. {
    10. if( strcmp(Vergleich ,Adresse[i].Name) = 0)
    11. {
    12. cout << " Name : " << Adresse[i].Name << " " << Adresse[i].Vorname << endl;
    13. cout << " Strasse: " << Adresse[i].Adresse << " " << Adresse[i].Hausnummer << endl;
    14. cout << " Ort : " << Adresse[i].PLZ << " " << Adresse[i].Ort << endl;
    15. cout << " Telefon: " << Adresse[i].Telefon << endl;
    16. }
    17. }
    Alles anzeigen


    Da kommt bei der if - Schleife : error: invalid lvalue in assignment