Надо переделать программу для работы с файлом на программу для работы с динамической памятью. Язык: С

Надо переделать программу для работы с файлом на программу для работы с динамической памятью, язык программирования: С. А именно: что бы данные сохранялись в файл, а читались в массив в динамической памяти, все операции приведенные ниже должны выполняться в динамической памяти. Добавить в файл первую строку с количеством записей в файле(пустой файл = 0), запись и чтение выполнять через fwrite(), fread().

Задание: студенты заданы именем, группой и средним балом. Требуется вывести одногруппников и полную информацию про студента по его имени. Буду рад любой помощи по работе.Спасибо^_^

#include<stdio.h>
#define SZ 20
#include <string.h>

FILE* mfopen(char,char*,FILE*);
void zapoln (FILE*,char*);
int menu ();
void groupfind (FILE*,char*);
void namefind (FILE*,char*);
void printall (FILE*,char*);
void clear(FILE*,char*);

int main (){
    FILE *f;
    char *fname = "new.txt";
    fclose(f);
    while (11){
        switch (menu()){
        case 1: printall(f,fname);break;
        case 2: groupfind(f,fname);break;
        case 3: namefind(f,fname);break;
        case 4: zapoln(f,fname);break;
        case 5: clear(f,fname);break;
        case 6: return 0;break;
        case 7: printf ("This program has been made by student KN-207\nDima Paliyuk\nThx for using my program\n");break;
        }
    }
    return 0;
}

void zapoln (FILE *f,char *fname){
    f = mfopen('a',fname,f);
    int group=0;
    char name[SZ];
    float midm=0;
    printf("Please print information which will fill stucture\n-----If you want to stop filling print '/stop' in the NAME field----\n");
    while(11){
        printf ("Print the name of student\n");
        scanf("%s",name);
        getchar();
        if (strcmp("/stop",name)==0)break;
        printf ("Print the groupnumber of student\n");
        scanf("%i",&group);
        printf ("Print midmark of student\n");
        scanf("%f",&midm);
        fprintf(f,"%s %i %.1f\n",name,group,midm);
    }
    fclose(f);
    puts("File has been closed");
}

int menu (){
    int i,g;
    char *mitems[]={
        "Show all",
        "Find by group",
        "Find by name",
        "Fill",
        "Clean",
        "Exit",
        "About"
    };
    for(i=0;i<sizeof mitems/sizeof mitems[0];i++)
        printf ("%i - %s\n",i+1,mitems[i]);
    scanf("%i",&g);
    getchar();
    return g;  
}

void groupfind(FILE *f,char *fname){
    f = mfopen('r',fname,f);
    char name[SZ];
    float midm=0;
    int i,group=0;
    printf ("Print the groupnumber\n");
    scanf("%i",&i);
    while (feof(f)==0){
        fscanf(f,"%s %i %f", name, &group,&midm);
        if (i==group&&feof(f)==0)
            printf ("| %s | %i | %.1f |\n",name,group,midm);
    } 
    fclose(f);
    puts("File has been closed");
}

void namefind(FILE *f,char *fname){
    f = mfopen('r',fname,f);
    int group=0;
    float midm=0;
    char n[SZ],name[SZ];
    printf ("Print the student's name\n");
    scanf("%s", n);
    while (feof(f)==0) {
        fscanf(f,"%s %i %f", name, &group,&midm);
        if (strcmp(n,name)==0){
            printf ("| %s | %i | %.1f |\n",name,group,midm);
            break;
        }
    }
    fclose(f);
    puts("File has been closed");
}

void printall(FILE *f,char *fname){
    f = mfopen('r',fname,f);
    char str;
    while(11) {                  
        str = fgetc(f);         
        if(str==EOF)            
            break;             
        printf("%c", str);     
    }
    fclose(f);
    puts("File has been closed");
}

FILE* mfopen(char g,char *fname,FILE *f){
    if(g=='a'){
        f = fopen(fname,"a");
        puts("File has been open for writing and adding");
        return f;
    }
    if(g=='r'){
        f = fopen(fname,"r");
        puts("File has been open for reading");
        return f;
    }
    if(!f) {          
        printf("File open error: '%s'\n", fname);
        return 0;
    }
}

void clear (FILE *f,char *fname){
    f = fopen(fname,"w");
    printf("File '%s' has been cleared\n",fname);
    fclose(f)
}

Ответы (0 шт):