Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Telefonverwaltung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.10.2005, 22:32 Uhr
~skizi
Gast


Hi, hab ne bitte.
Habe dieses Programm geschrieben alles Funktioniert bis auf die Suche.
Nur ich weiß nicht wie ich es ausgeben soll.
Wenn er den richtigen namen gesucht hat soll man beruf und telefonnummer auch ausgeben und das versteh ich nicht.

Die Aufgabenstellung:

Schreiben Sie ein Programm, das Telefonnummern verwaltet. Von den Telefonteilnehmern werden Name (Vor- und Zuname) und Telefonnummer, sowie der Beruf angegeben. Nach Eingabe der Informationen von beliebig vielen Telefonteilnehmern in eine Datei (nur 1x durchzuführen) soll nach dem Namen gesucht werden können, wobei die Informationen dieser Person am Bildschirm ausgegeben werden sollen. Ein weiterer Menüpunkt soll den Beruf einer beliebigen Person ändern können. Ein weiterer Punkt soll die Möglichkeit bieten, eine Telefonliste auszugeben, wobei nur Name und Telefonnummer angezeigt werden sollen.

Anleitung: Zum Auslesen der Datei lesen sie so lange Personen in ein Array von Strukturen ein, so lange Personen in der Datei gespeichert sind (bis das Dateiende erreicht ist). Danach arbeiten Sie ausschließlich auf diesem Array, bis der Menüpunkt „Daten in Datei schreiben“ oder „Programm beenden“ aufgerufen wird.

Menüpunkte:

< Daten von Datei einlesen ........................................ 1 >
< Telefonliste ausgeben ............................................. 2 >
< Nach Daten einer Person suchen ............................ 3 >
< Beruf einer Person ändern ..................................... 4 >
< Daten in Datei schreiben ........................................ 5 >
< Programm beenden ................................................. 6 >

Das ist der Quelltext zu diesem Programm:


C++:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//#include "ConsoleFunctions.h"

typedef struct{
    char name[40];
    int telenr;
    char beruf[40];
    char suche[50];
    
}persondaten;

int anz(int anzahl);
void eingabe(persondaten *personen, int anzahl);
void lesen(persondaten *personen);
void tele_out(persondaten *personen, int anzahl);
void suchen(persondaten *personen, int anzahl);
//void BailOut(const char *szMessage);




int main(int argc, char *argv[]){

    int size=0;
    char hilf[50], *eptr=NULL;
    int menu=0;
    persondaten dat[50];

    
    if(argc!=1){
        //BailOut("\nError: Fehler\n");
    }

    size=anz(size);

    eingabe(&dat[0], size);

    printf("Menuepunkt(1-6): ");
    fflush(stdin);
    gets(hilf);
    menu=strtol(hilf,&eptr,10);
    if((eptr==hilf)||(*eptr!='\0')){
        //BailOut("\nError: Fehler\n");
    }

    

    switch(menu){
    case 1:
        lesen(dat);
        break;        
    case 2:
        tele_out(dat,size);
        break;
    case 3:
        suchen(dat,size);
        break;
    }



    return 0;
}

int anz(int anzahl){

    printf("Wie viele Datensaetze wollen Sie eingeben: ");
    scanf("%d", &anzahl);
    clrscr();

    return anzahl;

}

void eingabe(persondaten *personen, int anzahl){

    FILE *eingabe=NULL;
    int i=0;
    
    if((eingabe=fopen("daten.txt","wt"))==NULL){
        //BailOut("\nError: Fehler\n");
    }
    
    else{
        for(i=0;i<anzahl;i++){
            
            printf("Name: ");
            scanf("%s", personen[i].name);
            fprintf(eingabe,"Name: %s\n", personen[i].name);
            fflush(stdin);
            printf("Telefonnummer: ");
            scanf("%d", &personen[i].telenr);
            fprintf(eingabe,"Telefonnummer: %d\n", personen[i].telenr);
            fflush(stdin);
            printf("Beruf: ");
            scanf("%s", personen[i].beruf);
            fprintf(eingabe,"Beruf: %s\n", personen[i].beruf);
        }
    }

    fclose(eingabe);
    
    

}

void lesen(persondaten *personen){

    FILE *eingabe=NULL;
    char zeile[100];

    clrscr();

    if((eingabe=fopen("daten.txt","rt"))==NULL){
        //BailOut("\nError: Fehler\n");
    }
    else{
        while((fgets(zeile,sizeof(zeile)-1,eingabe)!=NULL)){
            printf("%s", zeile);
        }
    }

    fclose(eingabe);

}

void tele_out(persondaten *personen, int anzahl){

    int i=0;

    clrscr();

    printf("Telefonliste: \n");
    for(i=0;i<anzahl;i++){
        printf("Telefonnummer von %s: %d\n", personen[i].name, personen[i].telenr);
    }

}

void suchen(persondaten *personen, int anzahl){

    int i=0;
    
    clrscr();

    printf("Bitte geben Sie als Suchbegriff den Namen ein: ");
    gets(personen->suche);

    for(i=0;i<anzahl;i++){
        if(personen->suche==personen->name){
            printf("Gefunden.");    //Nur zum Test
            //Hier will ich noch Beruf , Telefonnummer ausgeben
        }
    }
    
}

    









/* BailOut: Ausgabe einer Fehlermeldung und Beenden des Programmes  */
/*void BailOut(const char *szMessage){
    if (szMessage != (const char *) 0){
        (void) fprintf(stderr,"%s\n",szMessage);
    }
    exit(EXIT_FAILURE);
}*/





mod edit: benutze die CPP Tags selber

Dieser Post wurde am 08.10.2005 um 00:30 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.10.2005, 02:08 Uhr
imhotep
followed the white rabbit


Erstmal musst du deine struct persondaten ändern, da in der Aufgabenstellung Vor- und Nachname gefordert sind. Dann solltest du die Telefonnummer als String speichern, weil sie auch mit 0 beginnen kann und die Grenzen von int überschreiten.
Ansonsten ist doch die Suche einfach. Du vergleicht Vor- und Nachnamen der eingegeben Person mit allen Personen in deiner Liste, wenn du eine Übereinstimmung hast gibst du die Telefonnummer und den Beruf aus.


C++:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//#include "ConsoleFunctions.h"

typedef struct{
    char name[40];
    char vorname[40];
    char telenr[20]; // Telefonnummer als char*
    char beruf[40];
}persondaten;

/* ...... */

void suchen(persondaten *personen, int anzahl){
    int i=0, gefunden = 0;
    char suchname[40], suchvorname[40];
    clrscr();

    printf("Bitte geben Sie als Suchbegriff den Namen (\"Vorname Nachname\") ein: \n");
    scanf("%s %s", &suchvorname, &suchname);

    for(i=0;i<anzahl;i++){
        if ( ( strncmp( personen[i]->name, suchname, 40 ) == 0 ) && ( strncmp( personen[i]->vorname, suchvorname, 40 ) ) ){
            printf("\ngefunden\n");
            printf("Name: %s %s\n", personen[i]->name, personen[i]->vorname);
            printf("Telefon: %s\n", personen[i]->telenr);
            printf("Beruf: %s\n", personen[i]->beruf);
            gefunden = 1;
            break;
        }
    }
    if (gefunden == 0) printf("\nName nicht gefunden\n");
}



Deine lese Funktion würde ich noch die Anzahl der eingelesenen Werte zurückgeben lassen und in der main-Funktion als size speichern.


C++:
   size = size + lesen(dat);


Dieser Post wurde am 08.10.2005 um 02:10 Uhr von imhotep editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: