|
|
|
| Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию , применяя режим прямого доступа.
Структура имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах.
Все сделал, а как поменять местами в файле записи о первых двух спортсменах понятия не имею. Помогите кто может. Заранее благодарен.
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct sport{char name[10];int number;int kol;}sp;
void input(FILE *);
void print(FILE *);
void app(FILE *);
void find(FILE *);
main()
{ char c;
FILE *tf;
while (1)
{
puts("1-novuy fail");
puts("2-prosmotr faila");
puts("3-dobavlenie v fail");
puts("4-poisk i izmenenie");
puts("0-vyhod");
c=getch();
switch(c)
{case '1':input(tf); break;
case '2':input(tf);break;
case '3':input(tf);break;
case '4':input(tf);break;
case '0':input(tf);break;
default : puts("nevernuy regim");
}
}
}
void input(FILE *tf)
{char ch;
tf=fopen("FILE1.dat","wb");
printf("\n vvedite informaciu o sportcmene \n");
do
{ printf("\n familiya: "); scanf("%s",sp.name);
printf(" nomer: "); scanf("%d",&sp.number);
printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
fwrite(&sp,sizeof(sp),1,tf);
printf("\n Zakonchity ? y/n");
ch=getch();
}
while (ch != 'y');
fclose(tf);
}
void print(FILE*tf)
{ int i;
tf=fopen("file.dat","rb");
i=1;
fread(&sp,sizeof(sp),1,tf);
while(!feof(tf))
{printf("\n %3d familiya %10s number %6d kolichestvo ochkov %4d ",i,sp.name,sp.number,sp.kol);
fread(&sp,sizeof(sp),1,tf);
i++;
}
getch();
}
void app(FILE *tf)
{char ch;
tf=fopen("file1.dat","ab");
printf("\n vvedite informaciu o sportcmene \n");
do
{ printf("\n familiya: "); scanf("%s",sp.name);
printf(" nomer: "); scanf("%d",&sp.number);
printf(" kolichestvo ochkov: "); scanf("%d",&sp.kol);
fwrite(&sp,sizeof(sp),1,tf);
printf("\n Zakonchity ? y/n");
ch=getch();
}
while (ch != 'y');
fclose(tf);
}
void FIND(FILE*tf)
{char c, sport[10];
long int i;
tf=fopen("file1.dat","rb+");
puts(" Familiya sportcmena: ");
gets(sport);
fread(&sp,sizeof(sp),1,tf);
while (!feof(tf))
{if (strcmp(sp.name,sport)==0)
{printf(" familya %10s number %6.2d kolichestvo ochkov %d",sp.name,sp.number,sp.kol);
printf("/n Izmenity ? y/n");
c=getch();
if (c=='y')
{printf("\n kolichestvo: "); scanf("%d",&sp.kol);
printf("\n number: "); scanf("%d",&sp.number);
i=sizeof(sp);
fseek(tf,-i,1);
fwrite(&sp,sizeof(sp),1,tf);
}
}
fread(&sp,sizeof(sp),1,tf);
}
fclose(tf);
}
|
| |
|
|
|
|
|
|
|
для: AI\EKCAH^P
(29.05.2009 в 19:24)
| | Не совсем понятно меню - что не выбираешь, попадаешь в одну и ту же ф-цию.
В чем разница функций input и app?
В каком месте должна быть замена записей? | |
|
|
|
|
|
|
|
для: AI\EKCAH^P
(29.05.2009 в 19:24)
| | INPUT-СОЗДАНИЕ ФАЙЛА
APP-ДОБАВЛЕНИЕ В ФАЙЛ
Подскажите как поменять местами в файле записи первых двух спортсменов.
Я думаю,что сначало надо
считывать 1-го спортсмена. Считывать 2-го. Возвращать указатель к первому (fseek). Писать данные о втором. Писать данные о первом (т.к. указатель уже сместился ко второму). А как это написать незнаю. Помоги. | |
|
|
|
|
|
|
|
для: AI\EKCAH^P
(01.06.2009 в 11:48)
| | По коду обе функции различаются лишь одним символом, как то нецелесообразно их разделять.
Нелогично используете указатель на файл. Объявляете его без инициализации в основном теле и этот неинициализированный указатель передаете дальше. Зачем? Он в каждой функции используется локально, там можно его и объявлять.
Логика в целом верная. Ща код накидаю | |
|
|
|
|
|
|
|
для: GeorgeIV
(01.06.2009 в 12:00)
| | Примерно так:
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include "locale.h"
struct sport
{
char name[10];
int number;
int kol;
}sp;
void input();
void print();
void app();
void findsport();
void smena();
int main()
{
char c = 'a';
setlocale(LC_ALL,"Russian");
while (c!='0')
{
puts("1-novuy fail");
puts("2-prosmotr faila");
puts("3-dobavlenie v fail");
puts("4-poisk i izmenenie");
puts("5-Смена спортсмена");
puts("0-vyhod");
c = getch();
switch(c)
{
case '1':input(); break;
case '2':print();break;
case '3':app();break;
case '4':findsport();break;
case '5':smena();break;
case '0':break;
default : puts("nevernuy regim");
}
}
}
void input()
{
char ch;
int res=0;
FILE *tf=fopen("file1.dat","wb");
printf("\n vvedite informaciu o sportcmene \n");
do
{
printf("\n familiya: ");
scanf("%s",sp.name);
printf(" nomer: ");
scanf("%d",&sp.number);
printf(" kolichestvo ochkov: ");
scanf("%d",&sp.kol);
res = fwrite(&sp,sizeof(sp),1,tf);
printf("\n Zakonchity ? y/n");
ch=getch();
}while (ch != 'y');
fclose(tf);
}
void app()
{
char ch;
FILE *tf=fopen("file1.dat","ab");
printf("\n vvedite informaciu o sportcmene \n");
do
{
printf("\n familiya: ");
scanf("%s",sp.name);
printf(" nomer: ");
scanf("%d",&sp.number);
printf(" kolichestvo ochkov: ");
scanf("%d",&sp.kol);
fwrite(&sp,sizeof(sp),1,tf);
printf("\n Zakonchity ? y/n");
ch=getch();
} while (ch != 'y');
fclose(tf);
}
void print()
{
int i;
FILE *tf=fopen("file1.dat","rb");
i=1;
fread(&sp,sizeof(sp),1,tf);
printf("\n \tfamiliya \tnumber \tkolichestvo ochkov ");
while(!feof(tf))
{
printf("\n %3d \t%10s \t%6d \t%4d ",i,sp.name,sp.number,sp.kol);
fread(&sp,sizeof(sp),1,tf);
i++;
}
getch();
printf("\n");
fclose(tf);
}
void findsport()
{
char c, sport[10];
long int i;
FILE *tf=fopen("file1.dat","rb+");
puts(" Familiya sportcmena: ");
gets(sport);
fread(&sp,sizeof(sp),1,tf);
while (!feof(tf))
{
if (strcmp(sp.name,sport)==0)
{
printf(" familya %10s number %6.2d kolichestvo ochkov %d",sp.name,sp.number,sp.kol);
printf("/n Izmenity ? y/n");
c=getch();
if (c=='y')
{
printf("\n kolichestvo: ");
scanf("%d",&sp.kol);
printf("\n number: ");
scanf("%d",&sp.number);
i=sizeof(sp);
fseek(tf,-i,1);
fwrite(&sp,sizeof(sp),1,tf);
}
}
fread(&sp,sizeof(sp),1,tf);
}
fclose(tf);
}
void smena()
{
struct sport sportsmans[2];
FILE *tf=fopen("file1.dat","rb+");
fread(&sportsmans, sizeof(sp), 2, tf);
fseek(tf,0,SEEK_SET);
fwrite(&sportsmans[1],sizeof(sp), 1, tf);
fwrite(&sportsmans[0],sizeof(sp), 1, tf);
fclose(tf);
} |
| |
|
|
|
|
|
|
|
для: GeorgeIV
(01.06.2009 в 12:29)
| | Огромное Вам пасибо ! | |
|
|
|
|
|
|
|
для: AI\EKCAH^P
(01.06.2009 в 12:32)
| | Да на здоровье! :-)
Тем, кто сам пытается разобраться сначала, я помогаю. А тех, кто тупо просит написать за него код, я игнорирую. | |
|
|
|
|