#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(void)
{
char filename[50];
char menu;
int ball=300;
puts("Enter file name");
gets(filename);
do
{
system("cls");
puts("1 Add new puipl");
puts("2 Edit");
puts("3 Show list");
puts("4 Delet ");
puts("5 Loosers");
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]);
fwrite(&puipl,sizeof(puipl),1,f);
fclose(f);
return 1;
}
int show(char *file)
{
FILE *f;
int k=0;
struct info puipl;
f=fopen(file,"rb");
if(!f)
{
printf("opening error!");
return 1;
}
system("cls");
puts(" |Surname| |Math| |Rus| |English| |Dop |");
while(fread(&puipl,sizeof(puipl),1,f))
{
printf("%-4d|%-14s|%-15d|%-15d|%-15d|%-4d|\n",++k,puipl.sn,puipl.mark[0],puipl.mark[1],puipl.mark[2],puipl.mark[3]);
}
fclose(f);
system("pause");
return 1;
}
int edit(char* file) /*функция редактирования */
{
FILE *f;
struct info puipl;
int num;
system("cls");
f=fopen(file,"a+b"); /*открытие файла в режиме записи */
if(!f)
{
printf("opening error!!!\n");
return 1;
}
printf("Enter number of puipl whose results you want to sort\n");
scanf("%d",&num);
fseek(f,0L,SEEK_SET);
fseek(f,(num-1)*sizeof(puipl),SEEK_SET);
/*смещаю курсор на начало той строки,которую хочу редактировать */
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]);
fwrite(&puipl,sizeof(puipl),1,f);/*по идее должен записать,но выходит лажа */
fclose(f);
return 0;
}
void succes(char* file,int ball)
{
FILE *f;
struct info puipl;
int sum=0;
f=fopen(file,"rb");
if(!f)
{
printf("opening error!!!\n");
return 1;
}
system("cls");
while(fread(&puipl,sizeof(puipl),1,f))
{
sum=(puipl.mark[0] + puipl.mark[1]+puipl.mark[2]+puipl.mark[3]);
if(sum>ball)
printf("%s\n",puipl.sn);
}
fclose(f);
system("pause");
}
void loosers(char* file,int ball)
{
FILE *f;
int sum=0;
double percesnt=0,k=0,vsego=0;
struct info puipl;
f=fopen(file,"rb");
system("cls");
if(!f)
{
printf("opening error!\n");
return 1;
}
while(fread(&puipl,sizeof(puipl),1,f))
{
sum=(puipl.mark[0] + puipl.mark[1]+puipl.mark[2]+puipl.mark[3]);
vsego++;
if(sum<ball)
k++;
}
percesnt=k/vsego;
printf("%lf\n",percesnt);
system("pause");
fclose(f);
}
int delet(char *file)
{
FILE *f;
struct info puipl;
int number;
f=fopen(file,"wb");
if(!f)
{
printf("opening error!!!\n");
return 1;
}
printf("Enter number of puipl form list,who you want to delete\n");
scanf("%d",&number);
fseek(f,(number-1)*sizeof(puipl),SEEK_SET);
while(fread(&puipl,sizeof(puipl),1,f))
{
*(puipl.sn)=*(puipl.sn+1);
}
fwrite(&puipl,sizeof(puipl),1,f);
fclose(f);
system("pause");
return 0;
}