Работа С Бинарным Файлом.

Тема в разделе "C/C++/C#", создана пользователем Novice, 29 дек 2014.

Статус темы:
Закрыта.
  1. Novice

    Novice New Member

    Регистрация:
    7 дек 2014
    Сообщения:
    0
    Симпатии:
    0
    Мне необходимо из бинарного файла,содержащего информацию о студентах, удалить строку,или отредактировать её произвольным образом.В строках содержатся следующие данные:фамилия,балл за егэ по математике,по русскому,английскому и дополнительному испытанию.
    Выглядят строки примерно так:
    Петров 82 85 86 45
    Иванов 98 96 89 43
    То есть после удаления строка должна исчезнуть.
    Функция редактирования не должна спрашивать,что именно нужно редактировать,а просто пользователь должен ввести заново фамилию и все баллы.Соответственно в программе имеется и функция добавления нового абитуриента и функция просмотра списка.
    Была идея написания функций удаления и редактирования через создание нового файла и,соответственно,при редактировании переписывать всё до редактируемой строки,а затем ввести новые данные,поместить их в строку и записать всё остальное. При удалении же я просто хотел переписать всё,кроме удаляемой строки,но эта идея была отвергнута преподавателем. Была идея перенести все данные в массив и там их отредактировать,но эта идея так же была заблокирована.Подскажите,как произвести редактирование и удаление прямо в файле?
    Вот то,что у меня получилось:
    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct info
    {
    char sn[30];
    int mark[4];
    };

    int add(char*);
    int edit(char *);
    int show(char *);
    int delet(char *);
    void loosers(char *,int);
    void succes(char*,int);

    int main(int argc,char* argv[])
    {

    char filename[50]="data.bin";
    if(argc>1)
    strcpy(filename,argv[1]);
    else
    {
    printf("Enter file name\n");
    scanf("%s",filename);
    }
    char menu;
    int ball=240; /*проходной балл,переменная нужна для функции success */
    do
    {
    system("cls");
    puts("1 Add new");
    puts("2 Edit");
    puts("3 Show list");
    puts("4 Delete");
    puts("5 Looser");
    puts("6 Succes");
    puts("7 Exit");
    menu=getchar();
    switch(menu)
    {
    case '1' : add(filename);
    break;
    case '2' : edit(filename);
    break;
    case '3' : show(filename);
    break;
    case '4' : delet(filename);
    break;
    case '5' : loosers(filename,ball);
    break;
    case '6' : succes(filename,ball);
    }
    }
    while(menu!='7');
    return 0;
    }
    int add(char *file)
    {
    struct info puipl;
    FILE *f;
    f=fopen(file,"ab");
    if(!f)
    {
    printf("Opening Error\n");
    return 1;
    }

    system("cls");
    puts("Surname");
    scanf("%s",&puipl.sn);
    puts("Math");
    scanf("%d",&puipl.mark[0]);
    puts("Rus");
    scanf("%d",&puipl.mark[1]);
    puts("Engl");
    scanf("%d",&puipl.mark[2]);
    puts("Dop");
    scanf("%d",&puipl.mark[3]);
    if((puipl.mark[0]>100 || puipl.mark[1]>100 || puipl.mark[2]>100 || puipl.mark[3]>70) ||
    (puipl.mark[0]<0 || puipl.mark[1]<0 || puipl.mark[2]<0 || puipl.mark[3]<0))
    {
    printf("Error!\n");
    system("pause");
    fclose(f);
    return 1;
    }
    fwrite(&puipl,sizeof(puipl),1,f);
    fclose(f);
    return 0;
    }
    int show(char *file)
    {
    FILE *f;
    int k=0;
    struct info puipl;
    f=fopen(file,"rb");
    if(!f)
    {
    printf("Ошибка открытия файла\n");
    return 1;
    }
    system("cls");
    puts("  |Surname|    |Math.|        |Rus.|       |Engl.|      |Dop");
    while(fread(&puipl,sizeof(puipl),1,f))
    {
    printf("%-4d|%-14s|%-15d|%-15d|%-13d|%-12d\n",++k,puipl.sn,puipl.mark[0],puipl.mark[1],puipl.mark[2],puipl.mark[3]);
    }
    fclose(f);
    system("pause");
    return 0;
    }
     
Загрузка...
Похожие Темы - Работа Бинарным Файлом
  1. Andrey Kha
    Ответов:
    0
    Просмотров:
    33
  2. Hoasker
    Ответов:
    0
    Просмотров:
    65
  3. garri671
    Ответов:
    0
    Просмотров:
    74
  4. lelik200969
    Ответов:
    0
    Просмотров:
    55
  5. Kozolick
    Ответов:
    0
    Просмотров:
    146
Статус темы:
Закрыта.

Поделиться этой страницей