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
}