002
15.12.2007, 12:46 Uhr
Nils
|
Probiere mal das ihr ist eigentlich für Adressen ist aber ja fast das Gleiche
C++: |
#include <stdio.h> #include <string.h> #include <stdlib.h>
// Definition einer Adresse struct adresse { char name[50]; char vorname[50]; char Matrikelnummer[50]; int Note; } ;
int n; // Anzahl der Adressen struct adresse *adrs; // Adressenatei int BinSuche(char s[50]) { int unten=0,oben=n,mitte;
if (strcmp(s,adrs[unten].name)<=0) return 0; else { while(oben-unten>1) { mitte=(oben-unten)/2; if (strcmp(s,adrs[unten+mitte].name)==0) { unten+=mitte; oben=unten; } if (strcmp(s,adrs[unten+mitte].name)>0) unten+=mitte; else oben=unten+mitte;
} if (strcmp(s,adrs[oben-1].name)==0) oben--; return oben; } }
// Vergleich zweier Adressen nach dem Namen // für qsort int vgl(const void* p1,const void* p2) { struct adresse* adr1,*adr2; adr1=(struct adresse*)p1; adr2=(struct adresse*)p2; return strcmp(adr1->name,adr2->name); }
// Einlesen einer Adresse ueber die Tastatur struct adresse einlesen() { struct adresse adr;
printf("\n"); printf("Name : "); scanf("%s",&(adr.name)); printf("Vorname : "); scanf("%s",&(adr.vorname)); printf("Matrikelnummer : "); scanf("%s",&(adr.Matrikelnummer)); printf("Note : "); scanf("%d",&(adr.Note)); fflush(stdin);
return adr; }
// Ausgeben einer Adresse auf den Bildschirm void ausgeben(struct adresse adr) { printf("\nName : %s",adr.name); printf("\nVorname : %s",adr.vorname); printf("\nMatrikelnummer : %s",adr.Matrikelnummer); printf("\nNote : %d",adr.Note); }
// Abspeichern einer eingelesenen Adresse // in einer Datei void eingabe() { struct adresse adr;
adr=einlesen();
// falls die Datei nicht leer war if (n>0) { adrs=(struct adresse*)realloc(adrs,(n+1)*sizeof(adresse)); adrs[n]=adr; } // falls die Datei leer war else adrs[0]=adr;
n++; // Adressen neu sortieren qsort(adrs,n,sizeof (struct adresse), vgl); }
// Ausgabe der gesamten Datei void ausgabe() { int k;
if(n<=0) printf("Keine Name vorhanden\n"); else for (k=0;k<n;k++) ausgeben(adrs[k]); }
// Suchen einer Adresse void suchen() { char s[50]; int k=0;
printf("Name eingeben: "); scanf("%s",s); fflush(stdin);
k = BinSuche(s);
if (strcmp(adrs[k].name,s)==0) ausgeben( adrs[k]); else printf("Name %s nicht vorhanden\n",s); }
void loeschen() { int k=0; char s[50];
printf("Name eingeben: "); scanf("%s",&s); k=BinSuche(s);
if (strcmp(adrs[k].name,s)==0) { adrs[k]=adrs[n-1]; n--; // Adressen neu sortieren qsort(adrs,n,sizeof (struct adresse), vgl); } else printf("Name %s nicht vorhanden\n",s);
adrs=(struct adresse*)realloc(adrs,n*sizeof(struct adresse)); }
// laden der Datei in das Feld adrs void laden() { FILE* stream;
stream=fopen("Adressen.dat","r"); free(adrs);
// falls das Laden funktioniert hat if (stream!=NULL) { // Anzahl der Adressen einlesen fread(&n,sizeof( int ),1,stream);
// Speicher allokieren adrs=(struct adresse*)calloc(n,sizeof(struct adresse));
// Adressen einlesen fread(adrs,sizeof(struct adresse),n,stream);
fclose(stream); } // falls die Datei leer war else { printf("\nKeine Adressdatei gefunden!\n"); printf("\nGeben Sie eine Adresse ein\n\n"); n=0; adrs=(struct adresse*)calloc(1,sizeof(struct adresse)); eingabe(); } }
// speichern von adrs in der Datei void speichern() { FILE* stream; int k;
stream=fopen("Adressen.dat","w+"); fwrite(&n,sizeof( int ),1,stream);
for (k=0;k<=n-1;k++) { fwrite(&adrs[k],sizeof(struct adresse),1,stream); }
fclose(stream); }
// Auswahl der Programmunterpunkte int menue() { int a=0; char c[10];
while (a<1 || a>7) { printf("\n/****** Menue ******/\n\n"); printf("1. Neue eingeben\n"); printf("2. Suchen\n"); printf("3. Liste\n"); printf("4. Loeschen\n"); printf("5. Laden\n"); printf("6. Speichern\n"); printf("7. Ende\n\n");
printf("Ihre Eingabe : ");
scanf("%s",&c); fflush(stdin); printf("\n");
a=c[0]-48; }
return a; }
void main() { int a;
laden();
do { a=menue();
switch (a) { case 1: eingabe();break; case 2: suchen();break; case 3: ausgabe();break; case 4: loeschen();break; case 5: laden();break; case 6: speichern();break; } if (a==7) break;
printf("\nweiter mit Eingabetaste\n"); getchar(); } while (1);
speichern(); free(adrs); }
|
Gruß
Nils Dieser Post wurde am 15.12.2007 um 13:34 Uhr von FloSoft editiert. |