Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2011, 14:21   #1
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию записи в файле си++

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

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

Код:
 /*
Структура имеет вид: номер читательского билета, 
автор книги, название, дата заказа. Вывести на экран 
содержимое файла. Поменять местами первую и последнюю 
записи в файле.*
*/
#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()
Напишите плз.
Изображения
Тип файла: gif Снимок.GIF (24.0 Кб, 80 просмотров)
ai\ekcah^p вне форума Ответить с цитированием
Старый 02.01.2011, 20:39   #2
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

очень надо, подскажите...
ai\ekcah^p вне форума Ответить с цитированием
Старый 03.01.2011, 12:45   #3
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

ai\ekcah^p вне форума Ответить с цитированием
Старый 03.01.2011, 13:02   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

читаешь структуры из файла и кладешь их в массив, меняешь местами 0 и n-1 элемент и пишешь обратно
NiCola999 вне форума Ответить с цитированием
Старый 03.01.2011, 19:59   #5
ai\ekcah^p
Форумчанин
 
Аватар для ai\ekcah^p
 
Регистрация: 03.05.2009
Сообщений: 112
По умолчанию

Вот переделал,но при смене книг абракадабра получается...
Код:
/*
Структура имеет вид: номер читательского билета, 
автор книги, название, дата заказа. Вывести на экран 
содержимое файла. Поменять местами первую и последнюю 
записи в файле.*
*/
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include "locale.h"
int i;  
struct book
{
char name[10];
char nazv[10];
char data[10];
char number[10];
}bk[20];
void input(int *i);
void print(int *i);
void app(int *i);
void findbook( int *i);
void smena(int *i);
 
 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(&i); break;
          case '2':print(&i);break;
          case '3':app(&i);break;
          case '4':findbook(&i);break;
          case '5':smena(&i);break;
          case '0':break;
          default : puts("неверный режим");
       }
      }
  }
 
  void input(int *i)
  {
  char ch;
  int res=0; 
      FILE *tf=fopen("file1.dat","wb");
      printf("\n Введите информацию о книге \n");
      do
      { 
        printf("\n Номер читательского билета: "); 
        scanf("%s",bk[*i].number);
        printf(" Автор книги: "); 
        scanf("%s",&bk[*i].name);
        printf(" Название: "); 
        scanf("%s",&bk[*i].nazv);
        printf(" Дата заказа: "); 
        scanf("%s",&bk[*i].data);
        res = fwrite(&bk[*i],sizeof(bk[*i]),1,tf);        
        printf("\n Закончить ? y/n \n");
        *i++;
        ch=getch();
      }
      while (ch != 'y');
      fclose(tf);
   }
   
  void app(int *i)
  {
  char ch;

      FILE *tf=fopen("file1.dat","ab");
      printf("\n Введите информацию о книге \n");
      do
      { 
         printf("\n Номер читательского билета: "); 
         scanf("%s",bk[*i].number);
         printf(" Автор книги: "); 
         scanf("%s",&bk[*i].name);
         printf(" Название: "); 
         scanf("%s",&bk[*i].nazv);
         printf(" Дата заказа: "); 
         scanf("%s",&bk[*i].data);
         fwrite(&bk[*i],sizeof(bk[*i]),1,tf);
         printf("\n Закончить ? y/n \n");
         ch=getch();
       }
       while (ch != 'y');
       fclose(tf);
  }
   
  
  void print(int *i)
  { 
  int n; 
      FILE *tf=fopen("file1.dat","rb");
      n=1;
      fread(&bk[*i],sizeof(bk[*i]),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[*i].number,bk[*i].name,bk[*i].nazv,bk[*i].data);
          fread(&bk[*i],sizeof(bk[*i]),1,tf);
          n++;
      }
      getch();
  printf("\n");
  fclose(tf);
   }
   
  void findbook(int *i)
  {
  char c, BOOK[10];
      long int j;
      FILE *tf=fopen("file1.dat","rb+");
      puts(" Введите автора книги: ");
      gets(BOOK);
      fread(&bk,sizeof(bk[*i]),1,tf);
      while (!feof(tf))
      {
  if (strcmp(bk[*i].name,BOOK)==0)
          {
  printf(" Номер %10s Автор %6s Название %s  Дата %6s",bk[*i].number,bk[*i].name,bk[*i].nazv,bk[*i].data);
              printf("\n Изменить ? y/n \n");
              c=getch();
              if (c=='y')
              {
  printf("\n Автор: "); 
  scanf("%s",&bk[*i].name);
                  printf("\n Номер: "); 
  scanf("%s",&bk[*i].number);
                  j=sizeof(bk[*i]);
                  fseek(tf,-j,1);
                  fwrite(&bk[*i],sizeof(bk[*i]),1,tf);
                  break;
              }
           }
           fread(&bk,sizeof(bk),1,tf);
       }
      fclose(tf);
   }
 
 
  void smena(int *i)
  {   
            
    struct book read[*i];
    FILE *tf=fopen("file1.dat","rb+");
    fread(&read, sizeof(bk[*i]),*i, tf);
    fseek(tf,0,SEEK_SET);
    fwrite(&read[*i-1],sizeof(bk[*i]), 1, tf);
    fwrite(&read[0],sizeof(bk[*i]), 1, tf);
    fclose(tf);
  }
Изображения
Тип файла: gif Снимок.GIF (10.6 Кб, 60 просмотров)
ai\ekcah^p вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск данных в текстовом файле (в самом файле! а не в Memo и не загружая всю инфу из файла в одну строку glagoff Помощь студентам 1 05.05.2010 13:00
информация о файле xakkkkker Общие вопросы Delphi 5 19.01.2010 14:21
Обращение к нужной записи в файле Impuls1989 Общие вопросы C/C++ 17 20.10.2009 22:29
БД в файле vitamin.rulez Помощь студентам 2 28.01.2009 17:20
Поиск в файле asale Microsoft Office Excel 1 15.05.2007 23:33