modularisierung von strukturen
-
hallo habe hier ein kleines telefonbuch programmiert und möchte dieses jetzt modularisieren,
unzwar hab ich ein modul der hauptfunktion:
/*################################### Hauptfunktion des Telefonbuchs ###################################*/ #include <iostream.h> #include <string.h> #include "Funktionenmodul.h" void main() { initialisierung(); char auswahl; while(auswahl!='q') { //Hauptmenü mit Auswahlmöglichkeit cout<<endl; cout<<"-------Telefonbuch-------"<<endl; cout<<"b Eintrag bearbeiten"<<endl; cout<<"a Eintrag anzeigen"<<endl; cout<<"l Eintrag loeschen"<<endl; cout<<"q Programm beenden"<<endl; cout<<"Treffen Sie Ihre Auswahl: "; cin>>auswahl; switch(auswahl) { case 'b': eingabe(); break; case 'a': anzeige(); break; case 'l': loeschen(); break; default: cout<<"Es wurde keine zutreffende Wahl getroffen!!"<<endl; }; }; }
und dann ein modul mit den funktionen:
/*################################## Alle Funktionen als Modul ##################################*/ #include <iostream.h> #include <string.h> void initialisierung() { //Initialisierung der Einträge 1 bis 100 for(int i=0;i<100;i++) { strcpy(telefonbuch[i].vorname, " "); strcpy(telefonbuch[i].nachname, " "); }; } void eingabe() { //Funktion zum Eingeben und Bearbeiten von Einträgen int nummereingabe(); int i = nummereingabe(); cin.clear(); cin.ignore(); if (i<100&&i>=0) { cout<<"Bearbeiten von Eintrag "<<i+1<<endl; cout<<"Geben Sie den Vornamen ein: "; cin.getline(telefonbuch[i].vorname, 30); cout<<"Geben Sie den Nachnamen ein: "; cin.getline(telefonbuch[i].nachname, 30); cout<<"Geben Sie die Telefonnummer ein: "; cin>>telefonbuch[i].nummer; }; } void anzeige() { //Funktion zum Anzeigen von Einträgen int nummereingabe(); int i = nummereingabe(); if (i<100&&i>=0) { if (strcmp(telefonbuch[i].vorname," ")&&strcmp(telefonbuch[i].nachname," ")) { cout<<"Anzeige von Eintrag "<<i+1<<endl; cout<<"Vorname: "<<telefonbuch[i].vorname<<endl; cout<<"Nachname: "<<telefonbuch[i].nachname<<endl; cout<<"Telefonnummer: "<<telefonbuch[i].nummer<<endl<<endl; } else { cout<<"Der Eintrag existiert nicht!!"<<endl; } }; cout<<endl; } void loeschen() { //Funktion zum Loeschen von Einträgen int nummereingabe(); int i=nummereingabe(); if (i<100&&i>=0) { strcpy(telefonbuch[i].vorname," "); strcpy(telefonbuch[i].nachname," "); cout<<"Der "<<i+1<<". Eintrag wurde soeben geloescht."<<endl; } else { cout<<"Der Eintrag ist noch nicht belegt!"<<endl; }; cout<<endl; } int nummereingabe() { //Überprüfung ob ein ausgewählter Eintrag zwischen 1 und 100 liegt int i; cout<<"Bitte waehlen Sie einen Eintrag zwischen 1 und 100 aus: "; cin>>i; i=i-1; if (i<100&&i>=0) { return i; } else { cout<<"Ihre Eingabe lag nicht zwischen 1 und 100!!"<<endl; return (-1); }; }
und zum funktionenmodul noch die entsprechende headerdatei:
//--------------------------------------------------------------------------- #ifndef FunktionenmodulH #define FunktionenmodulH void initialisierung(); void eingabe(); void anzeige(); void loeschen(); int nummereingabe(); //--------------------------------------------------------------------------- #endif
so und wie ihr jetzt vielleicht gemerkt habt fehlt mir die strukturen definition und die lautet wie folgt:
struct eintrag { int nummer; char vorname[30]; char nachname[30]; }; eintrag telefonbuch[100];
Meine Frage ist jetzt wie modularisiere ich jetzt die Struktur, also wenn ich sie einfach in jedem modul deklariere dann läuft es zwar nur dann krieg ich eine meldung dass es zweimal deklariert wurde und es eventuell zu fehlern kommen kann, wie binde ich also die struktur ein und mache aus der auch eine headerdatei?
Danke for alle antworten im voraus!!!
-
Ich hab hier mal ein paar Punkte, die mir so ins Auge gefallen sind, aber zuerst mal zu deinem Problem: Die Deklaration der Struktur bracuhst in deinem "Hauptmodul" garnicht, da du dort keinerlei Bezug darauf nimmst. Es reicht also, die Struktur in der .cpp mit deinen Funktionen zu definieren, oder sie in einem eigenen header zu definieren, den du per #include in die Funktionenmodul.cpp einbindest.
Jetzt zu den Punkten die mir aufgefallen sind:
- Die header <string.h>, <iostream.h> usw. sind veraltet, es ist dringend geraten, die header <cstring>, <iostream> usw. zu verwenden, wenn du einen aktuellen Compiler verwendest sollte er dich auch darauf hinweisen.
- es fehlt ein case 'q': in deiner main, da sonst auch bei 'q' eine Fehlermeldung ausgegeben wird.
3)Du verwendest c-strings und c-funktionen wie strcpy & Co in deinem Programm, eventuell solltest du dich mal mit der Klasse string aus der Standardbibliothek auseinandersetzen, die behebt viele nachteile der c-strings (z.B. ist sie nicht auf die 30 Zeichen begrenzt, die du in deinem struct angegeben hast) - Du verwendest eine Funktionensammlung, die du eventuell in einer Klasse kapseln koenntest. (wenn du bereits mit cin und cout bekanntschaft gemacht hast duerftest du das Konzept von KLassen in C++ ja kennen, sonst wirds hoechste Zeit.
- Deine Abfrage if (i<100&&i>=0) ist doppelt gemoppelt, naemlich einmal in der funktion "Nummerneingabe()" und einmal danach.
Insgesamt beschleicht mich der Eindruck, dass du gerade erst mit C++ angefangen hast (was nicht schlimm ist), und zwar mit einem jener unsaeglichen Buecher, die versuchen, einem C++ beizubringen indem sie mit C anfangen und dann einzelne C++ elemente wie cout einfuehren, aber sonst weiter im C-Stil bleiben. Sollte das der Fall sein, besorg dir ein anderes Buch! C++ ist naemlich sehr viel mehr und was voellig anderes als C mit einigen zusaetzlichen Sprachkonstrukten. Auch wenn C-Programme in C++ funktionieren, sind sie meistens jenseits dessen, was man unter gutem C++ versteht.