Hallo. Und zwar muss ich fürs Studium ein Warenhaus in C programmieren. Ist vom Grunde her eigentlich auch alles kein Problem, ABER: Es soll möglich sein neue Nutzer anzulegen und diese in einer Datei zu speichern.
Folgende Daten sollen gespeichert werden:
- Name
- Vorname
- Strasse
- Hausnummer
- PLZ
- Ort
- Vorwahl
- Telefon
Hierbei ist mir folgendes klar:
- Name, Vorname, Strasse und Ort sind mit fgets zwecks leerzeichen einzulesen
- PLZ, Vorwahl und Telefon ist alles möglich als long bzw. integer zu speichern
Die frage die dabei bleibt ist: Was machen wir mit der Hausnummer, denn es könnte ja z.B. 7 b sein.
Aber mein eigentliches Problem liegt eigfentlich darin wie ich die datei wieder so auslese das alle Daten dort in der Struktur ankommen wo sie hingehören.
ich habe hier mal das was ich bis jetzt dazu habe. Würde mich freuen wenn mir schnell jemand helfen könnte.
C-Code:
PS: Wem das jetzt zu schlecht erklärt ist kann sich mal unter http://www.htw-dresden.de/~wacker/SS05/WWW-Seite_PinC/pdf/Praktikum/Belegaufgabe.pdf die genaue Aufgabe anschauen um etwas dahinter zu blicken.
MfG
Tazz85
Folgende Daten sollen gespeichert werden:
- Name
- Vorname
- Strasse
- Hausnummer
- PLZ
- Ort
- Vorwahl
- Telefon
Hierbei ist mir folgendes klar:
- Name, Vorname, Strasse und Ort sind mit fgets zwecks leerzeichen einzulesen
- PLZ, Vorwahl und Telefon ist alles möglich als long bzw. integer zu speichern
Die frage die dabei bleibt ist: Was machen wir mit der Hausnummer, denn es könnte ja z.B. 7 b sein.
Aber mein eigentliches Problem liegt eigfentlich darin wie ich die datei wieder so auslese das alle Daten dort in der Struktur ankommen wo sie hingehören.
ich habe hier mal das was ich bis jetzt dazu habe. Würde mich freuen wenn mir schnell jemand helfen könnte.
C-Code:
Code:
#define MAX 40
struct benutzer {
char name[MAX];
char vorname[MAX];
char strasse[MAX];
/*int nr;
char buchstabe;
long plz;
char ort[MAX];
char vorwahl[MAX];
char telefon[MAX];
char zusatz1_vor[MAX];
char zusatz1_tel[MAX];*/
struct benutzer *next;
};
struct benutzer *next = NULL;
struct benutzer *anfang = NULL;
void anhaengen(char *nach, char *vor, char *str) {
struct benutzer *zeiger;
if(anfang == NULL) {
if((anfang = (struct benutzer *)
malloc(sizeof(struct benutzer))) == NULL) {
fprintf(stderr, "Kein Speicherplatz vorhanden "
"für anfang\n");
return;
}
strcpy(anfang->name, nach);
strcpy(anfang->vorname, vor);
strcpy(anfang->strasse, str);
/* anfang->nr = num;
anfang->buchstabe=buch;
anfang->plz = post;
strcpy(anfang->ort, stadt);
strcpy(anfang->vorwahl, vwahl);
strcpy(anfang->telefon, tel);*/
anfang->next=NULL;
}
else {
zeiger=anfang; /* Wir zeigen auf das 1. Element */
while(zeiger->next != NULL)
zeiger=zeiger->next;
if((zeiger->next =(struct benutzer *)
malloc(sizeof(struct benutzer))) == NULL) {
fprintf(stderr,"Kein Speicherplatz für das "
"letzte Element\n");
return;
}
zeiger=zeiger->next; /* zeiger auf neuen Speicherplatz */
strcpy(zeiger->name, nach);
strcpy(zeiger->vorname, vor);
strcpy(zeiger->strasse, str);
/* zeiger->nr = num;
zeiger->buchstabe=buch;
zeiger->plz = post;
strcpy(zeiger->ort, stadt);
strcpy(zeiger->vorwahl, vwahl);
strcpy(zeiger->telefon, tel);*/
zeiger->next=NULL;
}
}
void eingabe(void) {
char nam[MAX],vorn[MAX],strasse[MAX],ort[MAX],vorw[MAX],tel[MAX],buchst;
int nr,buchst_j_n;
long plz;
clrscr();
printf("\nEingabe eines neuen Nutzers\n--------------------------------\n\n");
fflush(stdin);
printf("Name........................: ");
//scanf("%s",&nam);
fgets(nam, MAX, stdin);
fflush(stdin);
printf("Vorname.....................: ");
//scanf("%s",&vorn);
fgets(vorn, MAX, stdin);
fflush(stdin);
printf("Strasse (ohne Nummer).......: ");
//scanf("%s",&strasse);
fgets(strasse, MAX, stdin);
/* do
{
fflush(stdin);
printf("Hausnummer (ohne Buchstabe): ");
scanf("%d",&nr);
}while((nr<1)|(nr>1000));*/
nam[strlen(nam)-1]="";
vorn[strlen(vorn)-1]="";
strasse[strlen(strasse)-1]="";
anhaengen(nam, vorn, strasse);
fflush(stdin);
printf("\n\nDaten gespeichert. Weiter mit [ENTER]");
getchar();
}
void speichern(void) {
struct benutzer *zeiger = anfang;
FILE *datei;
datei = fopen("benutzer.db", "w");
while(zeiger != NULL) {
fprintf(datei,"%s %s %s %d\n",
zeiger->name,zeiger->vorname,zeiger->strasse);
zeiger=zeiger->next;
}
fclose(datei);
}
void dat_einlesen(void)
{
char nam[MAX],vorn[MAX],strasse[MAX],ort[MAX],vorw[MAX],tel[MAX],buchst;
int nr;
long plz;
FILE *datei;
datei = fopen("benutzer.db", "r");
if(datei != NULL){
while(!feof(datei)){
fflush(stdin);
fgets(nam, MAX, datei);
fgets(vorn, MAX, datei);
fgets(strasse, MAX, datei);
//fgets(nr,MAX,datei);
anhaengen(nam, vorn, strasse);
}
}
/*else{
printf("Fehler beim Öffnen der Datei");
}*/
fclose(datei);
}
void ausgabe(void) {
struct benutzer *zeiger = anfang;
while(zeiger != NULL) {
printf("%s %s %s %d\n",
zeiger->name,zeiger->vorname,zeiger->strasse);
zeiger=zeiger->next;
}
printf("\n");
}
C/C++ Code:
#define MAX 40
struct benutzer {
char name[MAX];
char vorname[MAX];
char strasse[MAX];
/*int nr;
char buchstabe;
long plz;
char ort[MAX];
char vorwahl[MAX];
char telefon[MAX];
char zusatz1_vor[MAX];
char zusatz1_tel[MAX];*/
struct benutzer *next;
};
struct benutzer *next = NULL;
struct benutzer *anfang = NULL;
void anhaengen(char *nach, char *vor, char *str) {
struct benutzer *zeiger;
if(anfang == NULL) {
if((anfang = (struct benutzer *)
malloc(sizeof(struct benutzer))) == NULL) {
fprintf(stderr, "Kein Speicherplatz vorhanden "
"für anfang\n");
return;
}
strcpy(anfang->name, nach);
strcpy(anfang->vorname, vor);
strcpy(anfang->strasse, str);
/* anfang->nr = num;
anfang->buchstabe=buch;
anfang->plz = post;
strcpy(anfang->ort, stadt);
strcpy(anfang->vorwahl, vwahl);
strcpy(anfang->telefon, tel);*/
anfang->next=NULL;
}
else {
zeiger=anfang; /* Wir zeigen auf das 1. Element */
while(zeiger->next != NULL)
zeiger=zeiger->next;
if((zeiger->next =(struct benutzer *)
malloc(sizeof(struct benutzer))) == NULL) {
fprintf(stderr,"Kein Speicherplatz für das "
"letzte Element\n");
return;
}
zeiger=zeiger->next; /* zeiger auf neuen Speicherplatz */
strcpy(zeiger->name, nach);
strcpy(zeiger->vorname, vor);
strcpy(zeiger->strasse, str);
/* zeiger->nr = num;
zeiger->buchstabe=buch;
zeiger->plz = post;
strcpy(zeiger->ort, stadt);
strcpy(zeiger->vorwahl, vwahl);
strcpy(zeiger->telefon, tel);*/
zeiger->next=NULL;
}
}
void eingabe(void) {
char nam[MAX],vorn[MAX],strasse[MAX],ort[MAX],vorw[MAX],tel[MAX],buchst;
int nr,buchst_j_n;
long plz;
clrscr();
printf("\nEingabe eines neuen Nutzers\n--------------------------------\n\n");
fflush(stdin);
printf("Name........................: ");
//scanf("%s",&nam);
fgets(nam, MAX, stdin);
fflush(stdin);
printf("Vorname.....................: ");
//scanf("%s",&vorn);
fgets(vorn, MAX, stdin);
fflush(stdin);
printf("Strasse (ohne Nummer).......: ");
//scanf("%s",&strasse);
fgets(strasse, MAX, stdin);
/* do
{
fflush(stdin);
printf("Hausnummer (ohne Buchstabe): ");
scanf("%d",&nr);
}while((nr<1)|(nr>1000));*/
nam[strlen(nam)-1]="";
vorn[strlen(vorn)-1]="";
strasse[strlen(strasse)-1]="";
anhaengen(nam, vorn, strasse);
fflush(stdin);
printf("\n\nDaten gespeichert. Weiter mit [ENTER]");
getchar();
}
void speichern(void) {
struct benutzer *zeiger = anfang;
FILE *datei;
datei = fopen("benutzer.db", "w");
while(zeiger != NULL) {
fprintf(datei,"%s %s %s %d\n",
zeiger->name,zeiger->vorname,zeiger->strasse);
zeiger=zeiger->next;
}
fclose(datei);
}
void dat_einlesen(void)
{
char nam[MAX],vorn[MAX],strasse[MAX],ort[MAX],vorw[MAX],tel[MAX],buchst;
int nr;
long plz;
FILE *datei;
datei = fopen("benutzer.db", "r");
if(datei != NULL){
while(!feof(datei)){
fflush(stdin);
fgets(nam, MAX, datei);
fgets(vorn, MAX, datei);
fgets(strasse, MAX, datei);
//fgets(nr,MAX,datei);
anhaengen(nam, vorn, strasse);
}
}
/*else{
printf("Fehler beim Öffnen der Datei");
}*/
fclose(datei);
}
void ausgabe(void) {
struct benutzer *zeiger = anfang;
while(zeiger != NULL) {
printf("%s %s %s %d\n",
zeiger->name,zeiger->vorname,zeiger->strasse);
zeiger=zeiger->next;
}
printf("\n");
}
C/C++ Code:
#define MAX 40
struct benutzer {
char name[MAX];
char vorname[MAX];
char strasse[MAX];
/*int nr;
char buchstabe;
long plz;
char ort[MAX];
char vorwahl[MAX];
char telefon[MAX];
char zusatz1_vor[MAX];
char zusatz1_tel[MAX];*/
struct benutzer *next;
};
struct benutzer *next = NULL;
struct benutzer *anfang = NULL;
void anhaengen(char *nach, char *vor, char *str) {
struct benutzer *zeiger;
if(anfang == NULL) {
if((anfang = (struct benutzer *)
malloc(sizeof(struct benutzer))) == NULL) {
fprintf(stderr, "Kein Speicherplatz vorhanden "
"für anfang\n");
return;
}
strcpy(anfang->name, nach);
strcpy(anfang->vorname, vor);
strcpy(anfang->strasse, str);
/* anfang->nr = num;
anfang->buchstabe=buch;
anfang->plz = post;
strcpy(anfang->ort, stadt);
strcpy(anfang->vorwahl, vwahl);
strcpy(anfang->telefon, tel);*/
anfang->next=NULL;
}
else {
zeiger=anfang; /* Wir zeigen auf das 1. Element */
while(zeiger->next != NULL)
zeiger=zeiger->next;
if((zeiger->next =(struct benutzer *)
malloc(sizeof(struct benutzer))) == NULL) {
fprintf(stderr,"Kein Speicherplatz für das "
"letzte Element\n");
return;
}
zeiger=zeiger->next; /* zeiger auf neuen Speicherplatz */
strcpy(zeiger->name, nach);
strcpy(zeiger->vorname, vor);
strcpy(zeiger->strasse, str);
/* zeiger->nr = num;
zeiger->buchstabe=buch;
zeiger->plz = post;
strcpy(zeiger->ort, stadt);
strcpy(zeiger->vorwahl, vwahl);
strcpy(zeiger->telefon, tel);*/
zeiger->next=NULL;
}
}
void eingabe(void) {
char nam[MAX],vorn[MAX],strasse[MAX],ort[MAX],vorw[MAX],tel[MAX],buchst;
int nr,buchst_j_n;
long plz;
clrscr();
printf("\nEingabe eines neuen Nutzers\n--------------------------------\n\n");
fflush(stdin);
printf("Name........................: ");
//scanf("%s",&nam);
fgets(nam, MAX, stdin);
fflush(stdin);
printf("Vorname.....................: ");
//scanf("%s",&vorn);
fgets(vorn, MAX, stdin);
fflush(stdin);
printf("Strasse (ohne Nummer).......: ");
//scanf("%s",&strasse);
fgets(strasse, MAX, stdin);
/* do
{
fflush(stdin);
printf("Hausnummer (ohne Buchstabe): ");
scanf("%d",&nr);
}while((nr<1)|(nr>1000));*/
nam[strlen(nam)-1]="";
vorn[strlen(vorn)-1]="";
strasse[strlen(strasse)-1]="";
anhaengen(nam, vorn, strasse);
fflush(stdin);
printf("\n\nDaten gespeichert. Weiter mit [ENTER]");
getchar();
}
void speichern(void) {
struct benutzer *zeiger = anfang;
FILE *datei;
datei = fopen("benutzer.db", "w");
while(zeiger != NULL) {
fprintf(datei,"%s %s %s %d\n",
zeiger->name,zeiger->vorname,zeiger->strasse);
zeiger=zeiger->next;
}
fclose(datei);
}
void dat_einlesen(void)
{
char nam[MAX],vorn[MAX],strasse[MAX],ort[MAX],vorw[MAX],tel[MAX],buchst;
int nr;
long plz;
FILE *datei;
datei = fopen("benutzer.db", "r");
if(datei != NULL){
while(!feof(datei)){
fflush(stdin);
fgets(nam, MAX, datei);
fgets(vorn, MAX, datei);
fgets(strasse, MAX, datei);
//fgets(nr,MAX,datei);
anhaengen(nam, vorn, strasse);
}
}
/*else{
printf("Fehler beim Öffnen der Datei");
}*/
fclose(datei);
}
void ausgabe(void) {
struct benutzer *zeiger = anfang;
while(zeiger != NULL) {
printf("%s %s %s %d\n",
zeiger->name,zeiger->vorname,zeiger->strasse);
zeiger=zeiger->next;
}
printf("\n");
}
PS: Wem das jetzt zu schlecht erklärt ist kann sich mal unter http://www.htw-dresden.de/~wacker/SS05/WWW-Seite_PinC/pdf/Praktikum/Belegaufgabe.pdf die genaue Aufgabe anschauen um etwas dahinter zu blicken.
MfG
Tazz85