brett vorm kopf? datensatz speichern geht nett?!



  • hi, habe hier mal versucht nen paar daten zu speichern aber es funzt net kann mir einer sagen warum ?
    habe natürlich weiter geprogt nun is nen 2. fehler gekommen ... 😕

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /*  Strukturdeklarationen  */
    
    typedef struct {
    	  int tag;
    	  int monat;
    	  int jahr;
    	}  DATUM;
    
    typedef struct {
    	  int   persnr;
    	  char  name[12];
    	  char  vorname[15];
    	  char  wohnort[20];
    	  DATUM eintritt;
    	  float gehalt;
       } PERSONAL;
    
    /* Funktionsprototypen */
    
    PERSONAL satz_ein (void);
    void satz_aus (const PERSONAL *);
    void aufnahme (const char *);
    void ausgabe(const char *);
    //void aendern(const char *, int);
    void suchen (const char *, const char *);
    float mittel(const char *);
    
    main()
    {  int wahl,suchnr;
       char datname[80]="persdat.dat_linux",suchname[12];
       printf("\n\n\npflege von personaldaten\n\n");
     /* printf("dateiname :  ");
       gets(datname);
     */  
       do {
         printf("\n\n\naufnahme........................... < 1 >\n");
         printf("ausgabe ........................... < 2 >\n");
         printf("suchen  ........................... < 3 >\n");
         printf("update  ........................... < 4 >\n");
         printf("mittelwert ........................ < 5 >\n");
         printf("ENDE    ........................... < 0 >\n");
         printf("ihre wahl  :   ");
         scanf("%d",&wahl);
         getchar();
         switch (wahl) {
            case 1:  aufnahme(datname);
                     break;
            case 2:  ausgabe(datname);
                     break;
            case 3:  printf("suchname:   ");
                     gets(suchname);
    	         suchen(datname,suchname);
    	         break;
            //case 4:  printf("personalnummer :  ");
              //       scanf("%d",&suchnr);
    	        // getchar();
    	         //aendern(datname,suchnr);
    	         //break;
            case 5:  printf("mittleres gehalt : %.2f\n",mittel(datname)); 
                     break;	       
            case 0:  printf("programmende\n");
                     break;
            default: printf("falsche wahl\n");
          }                          /* Ende von switch */
         fflush(stdin);
         printf("\n\nweiter mit return  ");
         getchar();
       }
       while (wahl);
    }
    
    void suchen (const char bla[80], const char such[12])
    {
    	PERSONAL datensatz;
    	long i=0,j,k;
    	while(such[i]!='\0')
    		i++;
    	FILE *dz;// warum darf ich das nu net mehr machen ?!
    	dz=fopen(bla,"rb");
    	if (dz==NULL)
    	  {
    	    printf("laden funzt net!");
    	    exit(EXIT_FAILURE);
    	  }
    	  while (!feof(dz))
    		{
    
    			fread(&datensatz,sizeof (PERSONAL),1,dz);
    				for(j=0;j<=i;j++)
    				{
    					if (such[j]==datensatz.name[j])
    						k++;
    				}
    				if (i==k)
    					satz_aus(&datensatz);
    		}
    }
    
    float mittel(const char bla[80])
    {
    	PERSONAL datensatz;
    	long i=0;
    	float erg=0;
    	FILE *dz;
    	dz=fopen(bla,"rb");
    	if (dz==NULL)
    	  {
    	    printf("laden funzt net!");
    	    exit(EXIT_FAILURE);
    	  }
    	  while (!feof(dz))
    		{
    
    			fread(&datensatz,sizeof (PERSONAL),1,dz);
    			erg=erg+datensatz.gehalt;
    			i++;
    		}
    		fclose(dz);
    		erg=erg/i;
    		printf("i gleich %ld\n\n",i);
    	return erg;
    }
    
    void aufnahme (const char bla[80])
    {
      FILE *dz;
      PERSONAL datensatz;
      long a=1;
      dz=fopen(bla,"a");
      if (dz==NULL)
      {
        printf("laden funzt net!");
        exit(EXIT_FAILURE);
      }
      datensatz=satz_ein();
      while (a==1)
      {
        fwrite(datensatz,sizeof (PERSONAL),1,dz);// 1. fehler ... warum ?
        printf("weitere datensätze eingeben mit 1");
        scanf("%ld",&a);
      }
      fclose(dz);
    
    }
    
    PERSONAL satz_ein (void)
    {
      PERSONAL pers1;
    	printf("persNr?");
    	scanf("%i%*c",&pers1.persnr);
    	printf("vorname?");
    	scanf("%S",&pers1.vorname);
    	printf("name?");
    	scanf("%S",&pers1.name);
    	printf("einstellungsdatum,tag?");
    	scanf("%i",&pers1.eintritt.tag);
    	printf("einstelungsdatum,monat?");
    	scanf("%i",&pers1.eintritt.monat);
    	printf("einstellungsdatum,jahr?");
    	scanf("%i",&pers1.eintritt.jahr);
    	printf("gehalt?");
    	scanf("%f%*c",&pers1.gehalt);
    	printf("wohnort?");
    	gets(pers1.wohnort);
    	return pers1;
    }
    void satz_aus (const  PERSONAL *pers1)
    {
    	printf("persNR:%i\n",pers1->persnr);
    	printf("Name %s ,Vorname %s\n",pers1->name,pers1->vorname);
    	printf("einstellungsdatum  : %i:%i:%i\n",pers1->eintritt.tag,pers1->eintritt.monat,pers1->eintritt.jahr);
    	printf("gehalt ist : %.2f\n",pers1->gehalt);
    	printf("wohnort:%s\n",pers1->wohnort);
    }
    void  ausgabe (const char datname[80] )
    {
    	FILE *dz;
        PERSONAL datensatz;
    	dz=fopen(datname, "rb");
    	if (dz==NULL)
    	{
    		printf("laden funzt net!");		exit(EXIT_FAILURE);
    	}
    	fread(&datensatz,sizeof ( PERSONAL),1,dz);
    		while (!feof(dz))
    		{
    			satz_aus(&datensatz);
    			fread(&datensatz,sizeof (PERSONAL),1,dz);
    		}
    
    }
    

    thx



  • ich glaube du hast vergessen einzugeben ob du die datei nur zum lesen oder zum schreiben öffnest.

    pfile = fopen (Filename, "w"); /*also am schluss "w" für write und "r" für read*/
    

    mfg C-Progger



  • mmh ich habe gesagt weiterschreiben -.-

    dz=fopen(bla,"a");
    


  • fehler 1. hat sich erledigt ^^ nen & vergessen 😉



  • hat sich erledigt habe das prog nun erst mal am laufen ^^
    naja bis auf eine sache, da weiss ich aber nicht wie das geht ^^ deswegen mach ich nichts mehr dran.
    hier zum gucken wie ich es gelöst habe

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    /*  Strukturdeklarationen  */
    
    typedef struct {
    	  int tag;
    	  int monat;
    	  int jahr;
    	}  DATUM;
    
    typedef struct {
    	  int   persnr;
    	  char  name[12];
    	  char  vorname[15];
    	  char  wohnort[20];
    	  DATUM eintritt;
    	  float gehalt;
       } PERSONAL;
    
    /* Funktionsprototypen */
    
    PERSONAL satz_ein (void);
    void satz_aus (const PERSONAL *);
    void aufnahme (const char *);
    void ausgabe(const char *);
    //void aendern(const char *, int);
    void suchen (const char *, const char *);
    float mittel(const char *);
    
    main()
    {  int wahl,suchnr;
       char datname[80]="persdat.dat_linux",suchname[12];
       printf("\n\n\npflege von personaldaten\n\n");
     /* printf("dateiname :  ");
       gets(datname);
     */  
       do {
         printf("\n\n\naufnahme........................... < 1 >\n");
         printf("ausgabe ........................... < 2 >\n");
         printf("suchen  ........................... < 3 >\n");
         printf("update  ........................... < 4 >\n");
         printf("mittelwert ........................ < 5 >\n");
         printf("ENDE    ........................... < 0 >\n");
         printf("ihre wahl  :   ");
         scanf("%d",&wahl);
         getchar();
         switch (wahl) {
            case 1:  aufnahme(datname);
                     break;
            case 2:  ausgabe(datname);
                     break;
            case 3:  printf("suchname:   ");
                     gets(suchname);
    	         suchen(datname,suchname);
    	         break;
            //case 4:  printf("personalnummer :  ");
              //       scanf("%d",&suchnr);
    	        // getchar();
    	         //aendern(datname,suchnr);
    	         //break;
            case 5:  printf("mittleres gehalt : %.2f\n",mittel(datname)); 
                     break;	       
            case 0:  printf("programmende\n");
                     break;
            default: printf("falsche wahl\n");
          }                          /* Ende von switch */
         fflush(stdin);
         printf("\n\nweiter mit return  ");
         getchar();
       }
       while (wahl);
    }
    
    void suchen (const char bla[80], const char such[12])
    {
    	PERSONAL datensatz;
    	long i=0,j,k=0;
    
    	FILE *dz;
    	dz=fopen(bla,"rb");
    
    	if (dz==NULL)
    	  {
    	    printf("laden funzt net!");
    	    exit(EXIT_FAILURE);
    	  }
    	  while(such[i]!='\0')
    		i++;
    
    	  while (!feof(dz))
    		{
    
    			fread(&datensatz,sizeof (PERSONAL),1,dz);
    				for(j=0;j<i;j++)
    				{
    					if (such[j]==datensatz.name[j])
    						k++;
    				}
    
    				if (i==k)
    					satz_aus(&datensatz);
    				k=0;
    		}
    }
    
    float mittel(const char bla[80])
    {
    	PERSONAL datensatz;
    	long i=0;
    	float erg=0;
    	FILE *dz;
    	dz=fopen(bla,"rb");
    	if (dz==NULL)
    	  {
    	    printf("laden funzt net!");
    	    exit(EXIT_FAILURE);
    	  }
    	  while (!feof(dz))
    		{
    
    			fread(&datensatz,sizeof (PERSONAL),1,dz);
    			erg=erg+datensatz.gehalt;
    			i++;
    		}
    		fclose(dz);
    		erg=erg/i;
    		printf("i gleich %ld\n\n",i);
    	return erg;
    }
    
    void aufnahme (const char bla[80])
    {
      FILE *dz;
      PERSONAL datensatz;
      long a=1;
      dz=fopen(bla,"a");
      if (dz==NULL)
      {
        printf("laden funzt net!");
        exit(EXIT_FAILURE);
      }
      datensatz=satz_ein();
      while (a==1)
      {
        fwrite(&datensatz,sizeof (PERSONAL),1,dz);
        printf("weitere datensätze eingeben mit 1");
        scanf("%ld",&a);
      }
      fclose(dz);
    
    }
    
    PERSONAL satz_ein (void)
    {
      PERSONAL pers1;
    	printf("persNr?");
    	scanf("%i%*c",&pers1.persnr);
    	printf("vorname?");
    	gets(pers1.vorname);
    	printf("name?");
    	gets(pers1.name);
    	printf("einstellungsdatum,tag?");
    	scanf("%i",&pers1.eintritt.tag);
    	printf("einstelungsdatum,monat?");
    	scanf("%i",&pers1.eintritt.monat);
    	printf("einstellungsdatum,jahr?");
    	scanf("%i",&pers1.eintritt.jahr);
    	printf("gehalt?");
    	scanf("%f%*c",&pers1.gehalt);
    	printf("wohnort?");
    	gets(pers1.wohnort);
    	return pers1;
    }
    void satz_aus (const  PERSONAL *pers1)
    {
    	printf("persNR:%i\n",pers1->persnr);
    	printf("Name %s ,Vorname %s\n",pers1->name,pers1->vorname);
    	printf("einstellungsdatum  : %i:%i:%i\n",pers1->eintritt.tag,pers1->eintritt.monat,pers1->eintritt.jahr);
    	printf("gehalt ist : %.2f\n",pers1->gehalt);
    	printf("wohnort:%s\n",pers1->wohnort);
    }
    void  ausgabe (const char datname[80] )
    {
    	FILE *dz;
        PERSONAL datensatz;
    	dz=fopen(datname, "rb");
    	if (dz==NULL)
    	{
    		printf("laden funzt net!");		exit(EXIT_FAILURE);
    	}
    	fread(&datensatz,sizeof ( PERSONAL),1,dz);
    		while (!feof(dz))
    		{
    			satz_aus(&datensatz);
    			fread(&datensatz,sizeof (PERSONAL),1,dz);
    		}
    
    }
    

Anmelden zum Antworten