117 lines
2.7 KiB
C
117 lines
2.7 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
typedef struct eintrag {
|
|
char name[50];
|
|
int telefon;
|
|
struct eintrag *next_name;
|
|
struct eintrag *next_tel;
|
|
} Eintrag;
|
|
|
|
void einfuegen(Eintrag **kopf_name, Eintrag **kopf_tel, char *name, int tel) {
|
|
Eintrag *neu = malloc(sizeof(Eintrag));
|
|
|
|
strcpy(neu->name, name);
|
|
neu->telefon = tel;
|
|
neu->next_name = NULL;
|
|
neu->next_tel = NULL;
|
|
|
|
Eintrag **p = kopf_name;
|
|
while (*p && strcmp((*p)->name, name) < 0)
|
|
p = &(*p)->next_name;
|
|
neu->next_name = *p;
|
|
*p = neu;
|
|
|
|
p = kopf_tel;
|
|
while (*p && (*p)->telefon < tel)
|
|
p = &(*p)->next_tel;
|
|
neu->next_tel = *p;
|
|
*p = neu;
|
|
}
|
|
|
|
void liste_name_ausgeben(Eintrag *kopf) {
|
|
printf("\n...Liste nach Namen sortiert...\n");
|
|
while (kopf) {
|
|
printf("%s (Tel.: %d)\n", kopf->name, kopf->telefon);
|
|
kopf = kopf->next_name;
|
|
}
|
|
}
|
|
|
|
void liste_tel_ausgeben(Eintrag *kopf) {
|
|
printf("\n...Liste nach Telefonnummer sortiert...\n");
|
|
while (kopf) {
|
|
printf("%d (%s)\n", kopf->telefon, kopf->name);
|
|
kopf = kopf->next_tel;
|
|
}
|
|
}
|
|
|
|
void speicher_freigeben(Eintrag *kopf) {
|
|
Eintrag *temp;
|
|
while (kopf) {
|
|
temp = kopf->next_name;
|
|
free(kopf);
|
|
kopf = temp;
|
|
}
|
|
}
|
|
|
|
int main() {
|
|
Eintrag *kopf_name = NULL, *kopf_tel = NULL;
|
|
char name[50];
|
|
char eingabe[100];
|
|
int tel;
|
|
char wahl;
|
|
|
|
printf("Namens- und Telefonliste\n");
|
|
printf("========================\n");
|
|
|
|
do {
|
|
printf("\nN - Einfuegen neuer Namen mit Telefonnummer\n");
|
|
printf("A - Ausgeben der Liste\n");
|
|
printf("E - Ende\n");
|
|
printf("Deine Wahl:");
|
|
scanf("%c", &wahl);
|
|
getchar();
|
|
|
|
switch (wahl) {
|
|
case 'N':
|
|
case 'n':
|
|
while (1) {
|
|
printf("Name:");
|
|
fgets(name, sizeof(name), stdin);
|
|
name[strcspn(name, "\n")] = 0;
|
|
|
|
if (strlen(name) == 0)
|
|
break;
|
|
|
|
printf("Tel:");
|
|
fgets(eingabe, sizeof(eingabe), stdin);
|
|
tel = atoi(eingabe);
|
|
|
|
einfuegen(&kopf_name, &kopf_tel, name, tel);
|
|
}
|
|
break;
|
|
|
|
case 'A':
|
|
case 'a':
|
|
liste_name_ausgeben(kopf_name);
|
|
liste_tel_ausgeben(kopf_tel);
|
|
break;
|
|
|
|
case 'E':
|
|
case 'e':
|
|
// Ende
|
|
break;
|
|
|
|
default:
|
|
printf("Ungueltige Eingabe.\n");
|
|
}
|
|
} while (wahl != 'E' && wahl != 'e');
|
|
|
|
speicher_freigeben(kopf_name);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|