Verzweifelt bin....

DunklerEngel

Mitglied
Ich hoffe so sehr, dass mir jemand helfen kann, sitze jetzt schon einige Stunden an ein paar Compiler-Fehlermeldungen, der Quelltext, bitte nicht erschrecken, beinhaltet Fehler, das weiss ich, aber ich poste mal folgende Aufgabe:

Erstellen Sie ein einfaches Programm zur Speicherung von Adressen und Telefonnummern. Die Daten sollen dabei nur zur Laufzeit des Programms gespeichert werden. Gehen Sie bei der Umsetzung wie dolgt vor:

1. Entwerfen Sie eine Struktur, in der ein Eintrag gespeichert wird. Die Struktur soll den Vor- und Nachnamen der Person sowie ihre Telefonnummer enthalten.
Das Telefonbuch soll max. 100 Einträge haben und in einem Feld gespeichert werden. Definieren Sie ein entsprechendes Feld als globale Variable.

2. Schreiben Sie eine Funktion Initialisierung(); die bei jedem Eintrag dem Namen einen leeren String zuweist.
3. Ihr Programm soll die Eingabe, Anzeige und das Löschen von Einträgen ermöglichen. Schreiben Sie für diese Aktionen jeweils eine eigene Funktion. Bei der Anzeige soll überprüft werden, ob der Eintrag existiert. Bei der Löschfunktion genügt es, nur den Namen zu löschen.
4. Schreiben Sie eine Funktion Nummereingabe(), welche den Benutzer nach einer Eintragnummer fragt. Als Rückgabewert sollte die Funktion die Eintragnummer oder
-1 zurückgeben, wenn die Eingabe ausserhalb des Bereiches lag. Verwenden Sie diese Funktion, um auf die einzelnen Einträge zuzugreifen. Überprüfen Sie ausserdem vor dem Zugriff, ob der Wert innerhalb der Feldgrenzen liegt.
5. Schreiben Sie schliesslich eine passende main()-Funktion. Main() soll ein Menü enthalten, mit dem die Aktionen ausgewählt werden können. Sie können dafür die switch-case-Konstruktion benutzen. Am Anfang von main() soll die Inititaliserung durchgeführt werden.


Und hier mal meinen Quelltext, der voller Fehler ist:
Code:
#include <iostream.h>
#include <string.h>


//Struktur global vereinbart
struct telefonseite
{
	int telefonnummer;
	char vorname[30];
	char nachname[30];
};
telefonseite telefonbuch[100];

void initialisiere();
void eingabe(int);
void anzeige();
void loeschen(int);
int nummereingabe(int);
int check(int);



void main()
{
	char auswahl;
        char confirm;

	int eintragnummer = 0, i = 0;
        for(int i=0;i>100;i++)  {
        cout<<i+1<<endl;

               {
        if (i!=0) break;

	else initialisiere();


	{

void initialisiere()
{
                for (int zvar=0; zvar1<100; zvar1++)
	{
		telefonbuch[zvar1].vorname[0] = ' ';
		telefonbuch[zvar1].nachname[0] = ' ';
		telefonbuch[zvar1].telefonnummer = 0;
	}

}
cout <<"Dieses Programm simuliert ein Telefonbuch, in das Sie\n";
cout <<"100 Eintraege schreiben koennen, jeweils mit dem Vornamen, Nachnamen\n";
cout <<"und Telefonnummer.\n";
cout <<"Jedoch werden die Eintraege nicht dauerhaft auf der Festplatte\n";
cout <<"gespeichert!\n";
cout <<"Sie haben folgende Auswahlmoeglichkeiten:\n";
cout <<"a: Anzeige eines Eintrages\n";
cout <<"b: Eingabe eines neuen Eintrages\n";
cout <<"c: Loeschen eines Eintrags\n";
cout <<"d: Nummer fuer einen Eintrag ergaenzen/ueberschreiben\n";
cout <<"e: Beenden des Programms\n";
cin >> auswahl;

		switch(auswahl){
		case 'a':
                cout<<"Bitte geben Sie die Nummer des gewuenschten Eintrages\n";
                cout<<"an:\n";
                        cin>>eintragnummer;
                        if(check(eintragnummer))  {

                        anzeige(eintragnummer);
                        }
                        break;

                case 'b':
                cout<<"Bitte geben Sie die Nummer des gewuenschten neuen\n";
                cout<<"Eintrages\n";
                        cin>>eintragnummer;
                        if(check(eintragnummer)) {

                        eingabe(eintragnummer);
                        }
                        break;

		case 'c':
                cout <<"Bitte geben Sie die Nummer ein, die sie loeschen\n";
                cout <<"moechten: ";
			cin >> eintragnummer;
			if(check(eintragnummer))       {
                        			{
				loeschen(eintragnummer);
			}

			break;

		case 'd':
                cout <<"Bitte geben Sie die Nummer des Eintrags ein,\n ";
                cout <<"dessen Telefonnummer sie ergaenzen moechten:\n ";
			cin >> eintragnummer;
			if (check(eintragnummer))   {
                        			{
                if ((i = nummereingabe(eintragnummer)) == -1)
				{
                cout <<"Nummereingabe schlug fehl! Nummer liegt ausserhalb\n";
                cout <<"des Bereichs!"<<endl;
                        break;
				}
				else
				{
                cout <<"Die Telefonnummer des Eintrags Nr. " << i <<" wurde\n";
                cout <<"uebernommen!"<<endl;
                        break;
				}
			}

		case 'e':
			cout <<"Moechten sie wirklich das Programm\n";
                        cout <<"beenden?(j/n)"<<endl;
			cin >> confirm;
			if ((confirm == 'j') || (confirm == 'J'))
			{
				break;
			}
			else
			{
				cout <<"Waehlen sie eine neue Option: ";
			}
			break;
		default:
cout <<"Bitte geben sie einen der Buchstaben a bis e ein!"<<endl;
			break;
		}
	}
}



void anzeigen()
{
	for (int zvar2=0; zvar2<100;zvar2++)
	{
		if(telefonbuch[zvar2].vorname[0] != ' ')
		{
                cout << "\n" << zvar2 << " Vorname: ";
                cout << telefonbuch[zvar2].vorname << " Nachname: ";
                cout << telefonbuch[zvar2].nachname << " Telefonnummer: 0";
                cout << telefonbuch[zvar2].telefonnummer <<" \n";

	}
}

void loeschen(int eintragnummer)
{

	if (telefonbuch[eintragnummer].vorname[0] == ' ')
	{
		cout <<"\nEintrag ist gar nicht vorhanden!\n";
	}
	else
	{
		telefonbuch[eintragnummer].vorname[0] = ' ';
                telefonbuch[eintragnummer].nachname[0] =  ' ';
		telefonbuch[eintragnummer].telefonnummer = 0;
	}
	cout <<"\nEintrag geloescht!\n";
}

void eingabe(int eintragsnummer)
{
	char confirm;


	if (telefonbuch[eintragsnummer].vorname[0] != ' ')
	{
		cout <<"\nEintrag existiert bereits! Ueberschreiben?  (j/n)";
		cin >> confirm;
		if ((confirm == 'n') || (confirm == 'N'))
		{
			cout <<"\nBitte waehlen Sie eine neue Option!\n";

		}
	}
	if(bWeiter)
	{
        cout <<"\nBitte geben Sie den Vornamen ein: ";
		cin >> telefonbuch[eintragsnummer].vorname;
		cout <<"\nBitte geben Sie den Nachnamen ein: ";
		cin >> telefonbuch[eintragsnummer].nachname;
		cout <<"\nBitte geben Sie die Telefonnummer ein: ";
		cin >> telefonbuch[eintragsnummer].telefonnummer;
		cout <<"\nEintrag wurde aufgenommen!\n";
	}

}

int nummereingabe(int eintragsnummer);
{
	char confirm;
	if (telefonbuch[eintragsnummer].vorname[0] == ' ')
	{
cout <<"\nEintrag existiert noch nicht! Wollen sie ihn neu anlegen? (j/n) ";
		cin >> confirm;
		if ((confirm == 'j') || (confirm == 'J'))
		{
			eingabe(eintragsnummer);
			return eintragsnummer;
		}
		else
		{
			cout <<"\nBitte waehlen sie eine neue Option!\n";
			return -1;
		}
	}

    cout <<"Bitte geben sie die Telefonnummer an: ";
	cin >> telefonbuch[eintragsnummer].telefonnummer;
	cout <<"Telefonnummer wurde uebernommen!\n";
	
}
int check(int eintragsnummer);
{
	if ((eintragsnummer>100) || (Eintragsnummer<0))
	{
		cout <<"Eingabe ungueltig\n";
		return 0;
	}
	else
		return 1;
}

char p[50];
cin.getline(p,50);

}


Kann mir jemand helfen?:( :(
 
Kann das sein das du Versuchst all deine Funktionen in der main() zu deklarieren ? Dann ist es kein wunder das es nicht geht -> lokale Funktiosndefinitionen sind unzulässig...
 
Du hast auf den ersten Blick einige Klammerfehler - nicht vergessen, wenn du eine Klammer aufmachst, auch mal wieder eine zumachen!

Wie sollen wir dir denn helfen - etwa deine syntaktischen Fehler im Quelltext verbessern?! :rolleyes:

lg D;-]c
 
Ich glaube kaum, dass da nur syntaktische Fehler sind! Und lass mal die Klammern weg. Das ganze Programm läuft so nicht mehr.

Aber ist nicht schlimm, wenn Ihr keine Zeit oder Lust habt, werde ich weiter knobeln...

Trotzdem danke....

Der traurige Engel
 
Ich könnte dir schon helfen - nur hab ich nicht genug Zeit, mich in das Programm einzuarbeiten, dann noch die Fehler auszubessern, und dann noch die Funktionalität herzustellen, da ich leider in der Arbeit bin.

Wenn du willst, könntest du ja etwas präzisere Fragen stellen.

Ach ja, du solltest auf etwas achten:

void funktion_egal();

int main(void)
{
int irgendwas=0;
float something=0;
funktion_egal();
return 0;
}

void funktion_egal()
{
printf("GarNichts");
}

Am Anfang eines Programmes werden die Bibliotheken und Konstanten definiert. Anschließend solltest du die Prototypen deiner Funktionen bzw Unterprogramme einfügen (Prototyp = Name der Funktion bzw UP und die Parameterliste, begrenzt von einem Semikolon).
Danach kommt der main()-Teil, in dem du die Funktionen aufrufen kannst.
Und nach dem main() kommen die Funktionen selber.

lg D;-]c
 
Hallo,
also ich habe nun spontan keine Antwort aber ich möchte mir auch ein Telefonbuch programmieren aber möchte das die Daten dauerhaft gespeichert werden, sprich wenn ich einen neuen Eintrag vornehme dann soll dieser auch drin bleiben.
Geht das evt. nur über eine DB weil ich .txt daten eigentlich nicht wollte.

Mfg
Kevin
 
@ Kevin:
Mit C muss die Dateiendung nicht unbedingt auf *.txt lauten, du kannst diese beliebig wählen!

Natürlich geht das auch mit einer DB, aber dann wäre es fast sinnvoller bzw zu viel Aufwand, dass in C zu machen, wenn es auch in VBA möglich wäre.

lg D;-]c
 
Also, da ich zur Zeit viel zu viel Zeit habe gebe ich dir ein Paar Tipps:

In der struct telefonseite würde ich statt int lieber unsigned long für die Nummer nehmen, damit man auch längere Nummern abspeichern kann.
Code:
struct telefonseite
{
	unsigned long telefonnummer;
	char vorname[30];
	char nachname[30];
};

Dann, die Funktionen eingabe, anzeige und loeschen sind alle mit einer festen Eintragsnummer verbunden, sie speichern, zeigen an und löschen Einträge an einer bestimmten Position im Array, deswegen müssen die Funktionen auch die Nummer des zu bearbeitenden Eintrags als Parameter kriegen:
Code:
void eingabe(int eintragsnummer);
void anzeige(int eintragsnummer);
void loeschen(int eintragsnummer);

Die Funktion nummereingabe Fragt den Benutzer nach der Eintragsnummer und gibt sie dem Programm zurück
Code:
int nummereingabe();
Die funktion check wird nicht gebraucht, weil die Nummer ein der o.g Funktion (nummereingabe) überprüft wird.

Die Main-Funktion hat folgenden Aufbau:
Code:
int main(int argc, char **argv)
{
...
	char auswahl = 0;
	int eintragsnummer = 0;
	initialisiere();
...
	while( (auswahl != 'e') && (auswahl != 'E') ) {
		cout << endl;
		cout << "Auswahl: ";
		cin >> auswahl;

		switch(auswahl) {
			case 'a':
			case 'A':
				eintragsnummer = nummereingabe();
				if(eintragsnummer != -1)
					anzeige(eintragsnummer);
				break;
			case 'b':
			case 'B':
...
		}
	}
	return 0;
}
So, ich hoffe das hat ein bisschen geholfen.
Hier noch mal das ganze Programm als ZIP-Archiv:
 

Anhänge

unsigned long telefonnummer;
Nee, das ist nicht gut! Telefonnummern können theoretisch beliebig viele Ziffern haben. Deshalb sollte man einen String einsetzen. Mit Telefonnummern wird ja auch nicht gerechnet, deshalb ist es unnötig, einen numerischen Typ zu verwenden. Darüberhinaus wäre es denkbar, innerhalb der Nummern auch '-' oder '/' zuzulassen.

Aber ansonsten stimme ich zu, stimme ich zu.
 
Ja an Strings habe ich auch gedacht. Aber ich habe versucht, ihren Code so wenig wie möglich zu verändern. Aber du hast schon Recht.
 
Zurück