include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.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(int argc,char* argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char filename[50]="data.bin";
if(argc>1)
strcpy(filename,argv[1]);
else
{
printf("Введите имя файла\n");
scanf("%s",filename);
}
char menu;
int ball=240;
do
{
system("cls");
puts("1 Добавить ученика");
puts("2 Редактировать данные");
puts("3 Показать список");
puts("4 Удалить из списка ");
puts("5 Процент не прошедших конкурс");
puts("6 Прошедшие конкурс");
puts("7 Выход");
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("Ошибка открытия файла\n");
return 1;
}
system("cls");
printf("Максимальный балл за результаты ЕГЭ: 100,за дополнительный экзамен:70\n");
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]);
if((puipl.mark[0]>100 || puipl.mark[1]>100 || puipl.mark[2]>100 || puipl.mark[3]>70) ||
(puipl.mark[0]<0 || puipl.mark[1]<0 || puipl.mark[2]<0 || puipl.mark[3]<0))
{
printf("Произошла ошибка ввода!\n");
system("pause");
fclose(f);
return 1;
}
fwrite(&puipl,sizeof(puipl),1,f);
fclose(f);
return 0;
}
int show(char *file)
{
FILE *f;
int k=0;
struct info puipl;
f=fopen(file,"rb");
if(!f)
{
printf("Ошибка открытия файла\n");
return 1;
}
system("cls");
puts(" |Фамилия| |Матем.| |Рус.| |Англ.| |Доп.испытание");
while(fread(&puipl,sizeof(puipl),1,f))
{
printf("%-4d|%-14s|%-15d|%-15d|%-13d|%-12d\n",++k,puipl.sn,puipl.mark[0],puipl.mark[1],puipl.mark[2],puipl.mark[3]);
}
fclose(f);
system("pause");
return 0;
}
int edit(char* file)
{
FILE *f,*fout;
struct info puipl;
int num;
system("cls");
f=fopen(file,"r+b");
char temp[10]="temp.bin";
fout=fopen(temp,"a+b");
if(!f || !fout)
{
printf("opening error!!!\n");
system("pause");
return 1;
}
fseek(fout,0L,SEEK_SET);
printf("Введите номер ученика,чьи данные вы хотите изменить\n");
scanf("%d",&num);
while(fread(&puipl,sizeof(puipl),1,f))
{
if(ftell(f)==(num*sizeof(puipl)))
{
puts("Фамилия");
scanf("%s",&puipl.sn);
puts("Математика");
scanf("%d",&puipl.mark[0]);
puts("Русский");
scanf("%d",&puipl.mark[1]);
puts("Английский");
scanf("%d",&puipl.mark[2]);
puts("Доп.испытание");
scanf("%d",&puipl.mark[3]);
if((puipl.mark[0]>100 || puipl.mark[1]>100 || puipl.mark[2]>100 || puipl.mark[3]>70) ||
(puipl.mark[0]<0 || puipl.mark[1]<0 || puipl.mark[2]<0 || puipl.mark[3]<0))
{
printf("Произошла ошибка ввода!\n");
system("pause");
fclose(f);
return 1;
}
fwrite(&puipl,sizeof(puipl),1,f);
}
else
fwrite(&puipl,sizeof(puipl),1,f);
}
fclose(f);
fclose(fout);
/*remove(file);
rename(temp,file);*/
system("pause");
return 0;
}
void succes(char* file,int ball)
{
FILE *f;
struct info puipl;
int sum=0;
f=fopen(file,"rb");
if(!f)
{
printf("Ошибка открытия файла!!!\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("Ошибка открытия файла!\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,*fout;
struct info puipl;
int number;
f=fopen(file,"rb");
char temp[10]="temp.bin";
fout=fopen(temp,"a+b");
system("cls");
if(!f || !fout)
{
printf("Ошибка открытия файла!!!\n");
return 1;
}
printf("Введите номер ученика,которго вы хотите удалить\n");
scanf("%d",&number);
while(fread(&puipl,sizeof(puipl),1,f))
{
if(ftell(f)!=(number*sizeof(puipl)))
fwrite(&puipl,sizeof(puipl),1,fout);
}
fclose(f);
fclose(fout);
remove(file);
rename(temp,file);
system("pause");
return 0;
}