#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Windows.h>
struct pupil{
char sn[50];
int marks[4];
};
typedef struct pupil pupil;
/*-------------------------------------------------------------------------------------------------------*/
void addnew(pupil* mas,int* size){
printf("Фамилия\n");
scanf("%s",mas[*size].sn);
printf("Английский\n");
scanf("%d",&mas[*size].marks[0]);
printf("Рус.\n");
scanf("%d",&mas[*size].marks[1]);
printf("Матем.\n");
scanf("%d",&mas[*size].marks[2]);
printf("Доп.\n");
scanf("%d",&mas[*size].marks[3]);
(*size)++;
}
/*----------------------------------------------------------------------------------------------------------*/
void showlist(pupil* mas, int size){
int i;
int num=1;
printf(" Фамилия | Англ. | Рус. | Матем. | Доп. \n");
for(i=0;i<size;i++){
printf("%3d|%15s|%15d|%15d|%15d|%11d\n",num,mas[i].sn,mas[i].marks[0],mas[i].marks[1],mas[i].marks[2],mas[i].marks[3]);
num++;
}
system("pause");
}
/*-------------------------------------------------------------------------------------------------------------*/
void showmax(pupil* mas,int size){
int i;
double max=0,sum;
for(i=0;i<size;i++){
sum=(mas[i].marks[0]+mas[i].marks[1]+mas[i].marks[2]+mas[i].marks[3])/4;
if(sum>max)
max=sum;
}
for(i=0;i<size;i++){
sum=(mas[i].marks[0]+mas[i].marks[1]+mas[i].marks[2]+mas[i].marks[3])/4;
if(sum==max)
printf("%s\n", mas[i].sn);
}
system("pause");
}
/*-------------------------------------------------------------------------------------------------------------*/
void loosers(pupil* mas, int size,double proh){
int k=0,i;
float sum;
for(i=0;i<size;i++){
sum=(mas[i].marks[0]+mas[i].marks[1]+mas[i].marks[2]+mas[i].marks[3])/4;
if(sum<proh)
k++;
}
printf("%d\n",k);
float percent=(float)k/size;
printf("%f\n", percent);
system("pause");
}
/*---------------------------------------------------------------------------*/
void delet(pupil* mas,int* size,int num){
int i;
printf("Введите номер студента из списка,которого вы хотите удалить\n");
scanf("%d",&num);
for(i=num-1;i<*size;i++){/*начиная с удаляемого элемента сдвигаем массив на 1 влево */
mas[i]=mas[i+1];
}
(*size)--;/*уменьшаем размер */
}
/*------------------------------------------------------------------------- */
void change(pupil* mas,int num){
int n;
printf("Введите номер ученика из списка,чьи даныне вы хотите изменить\n");
scanf("%d",&num);
while(1){
system("cls");
printf("1.Изменить оценку по англ\n");
printf("2.Изменить оценку по рус\n");
printf("3.Изменить оценку по мат\n");
printf("4.Изменить оценку по доп\n");
printf("5.Изменить фамилию\n");
printf("6. Выход\n");
scanf("%d",&n);
system("cls");
switch(n){
case 1:
printf("Новая оценка\n");
scanf("%d",mas[num].marks);
break;
case 2:
printf("Новая оценка\n");
scanf("%d",mas[num].marks+1);
break;
case 3:
printf("Новая оценка\n");
scanf("%d",mas[num].marks+2);
break;
case 4:
printf("Новая оценка\n");
scanf("%d",mas[num].marks+3);
break;
case 5:
printf("Фамилия\n");
scanf("%s",mas[num].sn);
break;
case 6: break;
}
if(n>5||n<0) break;
}
}
/*-----------------------------------------------------------------------*/
int main(int argc,char* argv[]){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
FILE* f;
char data[50]="data.bin";
int size=0,n,i,num;
pupil mas[100];
if(argc>1){
strcpy(data,argv[1]);
}
else scanf("%s", data);
f=fopen(data,"rb");
if(!f)
{
printf("opening error!\n");
return 1;
}
while(fread(&mas[size], sizeof(pupil), 1, f)==1)
size++;
fclose(f);
do{ system("cls");
printf("1. Добавить ученика\n");
printf("2. Лучший средний балл\n");
printf("3. Показать список\n");
printf("4. Не прошедшие\n");
printf("5. Удалить из списка\n");
printf("6. Изменить данные\n");
printf("7. Выход\n");
scanf("%d",&n);
system("cls");
switch(n){
case 1:
addnew(mas,&size);
break;
case 2:
showmax( mas,size);
break;
case 3:
showlist(mas,size);
break;
case 4:
loosers(mas,size,67.5);
break;
case 5:
delet(mas,&size,num);
break;
case 6:
change(mas,size);
break;
case 7: f=fopen(data,"w");
for(i=0;i<size;i++)
fwrite(&mas[i], sizeof(pupil), 1, f);
break;
}
}
while(n!=7);
return 0;
}