Поменять местами в файле записи о первых двух спортсменах - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Используя функции и режим меню, создать двоичный файл из 10 записей, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, поменять местами в файле записи о первых двух спортсменах(При обмене используйте промежуточную переменную типа структура).

Решение задачи: «Поменять местами в файле записи о первых двух спортсменах»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
FILE *f;
 
struct Person
{
    char Name[50]; // Имя
    int  N;             // номер
    int  P;             // к-во очков
};
 
// Создать базу
 
int CreateBase(char *Fname) 
{
  if (f=fopen(Fname,"wb+"))
     return 0;
  else
     printf("Error by create file");
  return 1;   
}     
 
// Переставить в базе записи n1 и n2
 
void SwapPerson(int n1, int n2)
{
     struct Person C1;   
     struct Person C2;
     int i;
     long Fsize,Fpos,Pos1,Pos2;
     fseek(f,0,SEEK_END);
     Fsize=ftell(f);
     fseek(f,0,SEEK_SET);
 
     Pos1=sizeof(struct Person)*(n1-1);
     Pos2=sizeof(struct Person)*(n2-1);
 
     for (i=0; i<50; i++) {C1.Name[i]=0; C2.Name[i]=0; };
     
     fseek(f,Pos1,SEEK_SET); 
     fread(&C1,sizeof(struct Person),1,f);
 
     fseek(f,Pos2,SEEK_SET); 
     fread(&C2,sizeof(struct Person),1,f);
 
     fseek(f,Pos1,SEEK_SET); 
     fwrite(C2.Name,1,sizeof(struct Person),f);
     
     fseek(f,Pos2,SEEK_SET); 
     fwrite(C1.Name,1,sizeof(struct Person),f);
     
}
 
// Печать базы
 
void PrintBase()
{
     struct Person C;
     int i;
     long Fsize,Fpos;
     fseek(f,0,SEEK_END);
     Fsize=ftell(f);
     fseek(f,0,SEEK_SET);
     
     while (1)
     {
       for (i=0; i<50; i++) C.Name[i]=0;
       fread(&C,sizeof(struct Person),1,f);
       printf("%s %d %d\n",C.Name,C.N,C.P);
       Fpos=ftell(f);  
       if (Fpos >= Fsize) break;
     }           
}
 
// Главная
    
int main(int argc, char *argv[])
{
 
  struct Person X;
  int i,k,j;
  
  k=CreateBase("base.txt");
  if (k==0) 
  {
     for (j=1; j<=3; j++)
     { 
       printf("%d ",j);             
       for (i=0; i<50; i++) X.Name[i]=0;  
       printf("Name= ");
       scanf("%s",X.Name);
       X.N=j;
       printf("Count= ");
       scanf("%d",&X.P);
       fwrite(X.Name,1,sizeof(X),f);
     }       
 
     printf("Initial base:\n\n");
     
     PrintBase();
 
     SwapPerson(1,3);
     
     printf("Base after swaping:\n\n");
     
     PrintBase();
     
     fclose(f);            
  }          
  system("PAUSE");  
  return 0;
}

Объяснение кода листинга программы

  1. Создание файла с базой данных
  2. Ввод данных о трех спортсменах
  3. Печать базы данных до перестановки
  4. Перестановка записей о спортсменах под номерами 1 и 3
  5. Печать базы данных после перестановки
  6. Закрытие файла базы данных
  7. Завершение работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы