Поменять местами первую и последнюю записи в файле

Тема в разделе "C/C++/C#", создана пользователем AILEKCAHdP, 3 янв 2011.

  1. AILEKCAHdP

    AILEKCAHdP Гость

    Структура имеет вид: номер читательского билета, автор книги, название, дата заказа. Вывести на экран содержимое файла. Поменять местами первую и последнюю записи в файле.*

    * При обмене введите промежуточную переменную типа структура.

    Код (C++):
     /*
    Структура имеет вид: номер читательского билета,
    автор книги, название, дата заказа. Вывести на экран
    содержимое файла. Поменять местами первую и последнюю
    записи в файле.*
    */

    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include "locale.h"

    struct book
    {
    char name[10];
    char nazv[10];
    char data[10];
    char number[10];
    }bk;
    void input();
    void print();
    void app();
    void findbook();
    //void smena();

    int main()
    {
    char c = 'a';
    setlocale(LC_ALL,"Russian");
    while (c!='0')
    {
    puts("1-новый файл");
    puts("2-просмотр файла");
    puts("3-добавление в файл");
    puts("4-поиск и изменение");
    puts("5-смена книги");
    puts("0-выход");
    c = getch();
    switch(c)
    {
    case '1':input(); break;
    case '2':print();break;
    case '3':app();break;
    case '4':findbook();break;
    // case '5':smena();break;
    case '0':break;
    default : puts("неверный режим");
    }
    }
    }

    void input()
    {
    char ch;
    int res=0;
    FILE *tf=fopen("file1.dat","wb");
    printf("\n Введите информацию о книге \n");
    do
    {
    printf("\n Номер читательского билета: ");
    scanf("%s",bk.number);
    printf(" Автор книги: ");
    scanf("%s",&bk.name);
    printf(" Название: ");
    scanf("%s",&bk.nazv);
    printf(" Дата заказа: ");
    scanf("%s",&bk.data);
    res = fwrite(&bk,sizeof(bk),1,tf);
    printf("\n Закончить ? y/n \n");
    ch=getch();
    }
    while (ch != 'y');
    fclose(tf);
    }

    void app()
    {
    char ch;
    FILE *tf=fopen("file1.dat","ab");
    printf("\n Введите информацию о книге \n");
    do
    {
    printf("\n Номер читательского билета: ");
    scanf("%s",bk.number);
    printf(" Автор книги: ");
    scanf("%s",&bk.name);
    printf(" Название: ");
    scanf("%s",&bk.nazv);
    printf(" Дата заказа: ");
    scanf("%s",&bk.data);
    fwrite(&bk,sizeof(bk),1,tf);
    printf("\n Закончить ? y/n \n");
    ch=getch();
    }
    while (ch != 'y');
    fclose(tf);
    }


    void print()
    {
    int n;
    FILE *tf=fopen("file1.dat","rb");
    n=1;
    fread(&bk,sizeof(bk),1,tf);
    printf("\n \tНомер \tАвтор \tНазвание \tДата \n");
    while(!feof(tf))
    {
    printf("\n%d \t%s \t%s \t%s \t%10s ",n,bk.number,bk.name,bk.nazv,bk.data);
    fread(&bk,sizeof(bk),1,tf);
    n++;
    }
    getch();
    printf("\n");
    fclose(tf);
    }

    void findbook()
    {
    char c, BOOK[10];
    long int i;
    FILE *tf=fopen("file1.dat","rb+");
    puts(" Введите автора книги: ");
    gets(BOOK);
    fread(&bk,sizeof(bk),1,tf);
    while (!feof(tf))
    {
    if (strcmp(bk.name,BOOK)==0)
    {
    printf(" Номер %10s Автор %6s Название %s Дата %6s",bk.number,bk.name,bk.nazv,bk.data);
    printf("\n Изменить ? y/n \n");
    c=getch();
    if (c=='y')
    {
    printf("\n Автор: ");
    scanf("%s",&bk.name);
    printf("\n Номер: ");
    scanf("%s",&bk.number);
    i=sizeof(bk);
    fseek(tf,-i,1);
    fwrite(&bk,sizeof(bk),1,tf);
    break;
    }
    }
    fread(&bk,sizeof(bk),1,tf);
    }
    fclose(tf);
    }


    /* void smena()
    {  
    int n;     
    struct book read[n];
    FILE *tf=fopen("file1.dat","rb+");
    fread(&read, sizeof(bk),2, tf);
    fseek(tf,0,SEEK_SET);
    fwrite(&read[n-1],sizeof(bk), 1, tf);
    fwrite(&read[0],sizeof(bk), 1, tf);
    fclose(tf);
    }
    */
    Все функции работают , а вот как поменять местами не могу сделать.
    Эту функцию я закомментировал -> void smena()
     
  2. RiCrO

    RiCrO Гость

    Если я понял условие, то тебе необходимы указатели на первый и последний элемент \ запись файла. Создаёшь цикл пробега по элементам файла и запоминаешь последний. После этого меняешь местами первый и последний.
     
Загрузка...

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