C_testat_8
Home Nach oben

 

Home
Nach oben
C_testat_1
C_testat_2
C_testat_3
C_testat_4
C_testat_5
C_testat_6
C_testat_7
C_testat_8

Aufgabenstellung von Herren Grams

Standard-Bibliothek (ANSI Runtime Library)

8.1 Schreiben Sie ein Programm zur Verwaltung einer Telefondatei (siehe Einführung in die Informatik). Funktionen: Einfügen neuer Eintrag, Suchen, Anzeigen und Entfernen von Einträgen. Hinweis: Arbeiten Sie mit der Methode des indirekten Zeigers. Wahlen Sie den Listenkopf vom ListenTyp. auf diese Weise kann man sich ein paar Fallunterscheidungen sparen.

8.2 Schreiben Funktionen zum Sichern und Lesen von Textdateien mit angefügter Checksum. Die Lesefunktion soll eine Überprüfung der Checksum durchrühren und das Ergebnis mitteilen.

Lösungsansätze:

Aufgabe 8.1 und 8.2

/*Hauptprogramm*/

/*liste.h*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define liste struct listen

/*Struktur Festlegen*/
liste {char Vorname[15],Nachname[15];char Vor[6],Tel[9];liste *Next;};

/*Externe Befehle der Liste.c*/
extern void wart (void);
extern liste* einfuegen (liste* ptr);
extern liste* loeschen (liste* clr);
extern void anzeigen (liste* anz);
extern liste* sortieren (liste* sort);
extern int less (liste* l1,liste* l2,int n);
extern void suchen (liste* ptr);
extern void speichern (liste* save);
extern void laden (liste* load);
extern long int checksumme (liste* sum);

/*liste.c*/
#include "liste.h"
#include <stdlib.h>

void wart (void) 
{
    char *c;
    printf("\nWeiter mit [ENTER]");
    gets(c);
}

liste* einfuegen (liste* ptr) 
{
    liste* cur=(liste*) malloc(sizeof(liste));
    cur->Next=ptr;
    printf("Vorname: ");gets(cur->Vorname);
    printf("Nachname: ");gets(cur->Nachname);
    printf("Vorwahl: ");gets(cur->Vor);
    printf("Tel.Nr.: ");gets(cur->Tel);
    return cur;
}

liste* loeschen (liste *clr) 
{
    liste* back=clr;
    if (!clr) 
    {
        printf("\nListe ist leer! ");
    } 
    else 
    {
        back=back->Next;
        free(clr);
        printf("\nErstes Element geloescht");
    }
    wart();
    return back;
}

void anzeigen (liste *anz) 
{
    if (!anz) 
    {
        printf("\nListe ist leer");
    }
    else 
    {
        printf("\n Vorname Nachname Telefonnummer\n");
        while (anz) 
        {
            printf("\n%-15.15s",anz->Vorname);
            printf(" %-15.15s:",anz->Nachname);
            printf(" %-5.5s-",anz->Vor);
            printf("%-8.8s",anz->Tel);
            anz=anz->Next;
        }
    }
    printf("Checksumme = %d",s);
    wart();
}

void suchen (liste* ptr) 
{
    unsigned char *c;
    liste* such;
    int n;
    printf("\nSuchen nach (V)orname (N)achname ");
    gets(c);
    printf("\nName eingeben: ");
    if (c[0]=='V'||c[0]=='v') 
    {
        n=1;
        gets(such->Vorname);
    } 
    else 
    {
        n=0;
        gets(such->Nachname);
    }
    printf("\nVorname Nachname Tel.:");
    while (ptr) 
    {
        if (!(less(such,ptr,n))) 
        {
            printf("\n%-15.15s ",ptr->Vorname);
            printf(" %-15.15s ",ptr->Nachname);
            printf("%-5.5s-",ptr->Vor);
            printf("%-8.8s",ptr->Tel);
        }
        ptr=ptr->Next;
    }
    printf("\nEnde der Liste");
    wart();
}

liste* sortieren (liste *sort) 
{
    int n;
    unsigned char *jn;
    printf("\nNach (V)or- oder (N)achnahme sortieren? ");
    gets(jn);
    if ((jn[0]=='V')||(jn[0]=='v')) n=1; 
    else n=0;
    if (sort) 
    {
        liste *cur=sort,*hilf;
        while (cur->Next) 
        {
            while (less(cur,cur->Next,n)>0) 
            {
                hilf=cur->Next->Next;
                cur->Next->Next=sort;
                sort=cur->Next;
                cur->Next=hilf;
                cur=sort;
            }
            cur=cur->Next;
        }
    }
    printf("\nSortierten fertig!");
    wart();
    return sort;
}

int less(liste* l1,liste* l2,int n) 
{
    return n? strcmp(l1->Vorname,l2->Vorname): strcmp(l1->Nachname,l2->Nachname);
}

long int checksumme (liste* sum) 
{
    unsigned int s=0,i;
    for (;(sum);sum=sum->Next) 
    {
        for(i=0;i<6&&sum->Vor[i];i++) s=s+(sum->Vor[i]);
        for(i=0;i<9&&sum->Tel[i];i++) s=s+(sum->Tel[i]);
        for(i=0;i<15&&sum->Nachname[i];i++) s=s+(sum->Nachname[i]);
        for(i=0;i<15&&sum->Vorname[i];i++)s=s+(sum->Vorname[i]);
    }
    return s;
}

void laden(liste* load) 
{
    //Checksumme aus Datei laden
    //Laden der liste
    //Checksumme berechnen
    //Checksummen vergleichen
}

void speichern(liste* save) 
{
    long int s;
    s=checksumme(save);
    //Speichern der Checksumme
    //Programmteil zum speichern der Liste einfügen
}