You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
7.5 KiB
239 lines
7.5 KiB
#include<stdio.h>
|
|
#include<string.h>
|
|
struct student
|
|
{
|
|
char num[10];
|
|
float Math;
|
|
float Physic;
|
|
float English;
|
|
float sum;
|
|
float ave;
|
|
int class;
|
|
int inserted;//sign whether the student is inserted
|
|
char name[10];
|
|
int mod;//sign whether the student is modified
|
|
};
|
|
void menu()// print menu
|
|
{
|
|
for(int i=0;i<30;i++)
|
|
printf(" ");
|
|
printf("1.Input\n");
|
|
for(int i=0;i<30;i++)
|
|
printf(" ");
|
|
printf("2.Output\n");
|
|
for(int i=0;i<30;i++)
|
|
printf(" ");
|
|
printf("3.Order\n");
|
|
for(int i=0;i<30;i++)
|
|
printf(" ");
|
|
printf("4.Quit\n");
|
|
}
|
|
void OSmenu(char x)// operation on menu
|
|
{
|
|
if(x=='i')
|
|
printf("You are trying to Input info\n");
|
|
else if(x=='o')
|
|
printf("You are trying to Output info\n");
|
|
else if(x=='m')
|
|
printf("You are trying to Make things ordered\n");
|
|
else if(x=='q')
|
|
printf("You are about to Quit\n");
|
|
else
|
|
printf("Wrong input\n");
|
|
}
|
|
void inputstudent(struct student *t)//input info without class
|
|
{
|
|
scanf("%s %f %f %f",&(t->num),&(t->Math),&(t->Physic),&(t->English));
|
|
t->sum=t->Math+t->Physic+t->English;
|
|
t->ave=t->sum/3;
|
|
t->inserted=0;
|
|
t->mod=0;
|
|
}
|
|
void inputstudent2(struct student *t)//input info with class
|
|
{
|
|
scanf("%s %d %f %f %f",&(t->num),&(t->class),&(t->Math),&(t->Physic),&(t->English));
|
|
t->sum=t->Math+t->Physic+t->English;
|
|
t->ave=t->sum/3;
|
|
t->inserted=0;
|
|
t->mod=0;
|
|
}
|
|
void inputstudent3(struct student *t)//input info with class name
|
|
{
|
|
scanf("%s %d %s %f %f %f",&(t->num),&(t->class),&(t->name),&(t->Math),&(t->Physic),&(t->English));
|
|
t->sum=t->Math+t->Physic+t->English;
|
|
t->ave=t->sum/3;
|
|
t->inserted=0;
|
|
t->mod=0;
|
|
}
|
|
void insertstudent(struct student *t)//insert student
|
|
{
|
|
scanf("%s %d %f %f %f",&(t->num),&(t->class),&(t->Math),&(t->Physic),&(t->English));
|
|
t->sum=t->Math+t->Physic+t->English;
|
|
t->ave=t->sum/3;
|
|
t->inserted=1;
|
|
}
|
|
void outputstudent1(struct student *t)// output num and grade of all subject
|
|
{
|
|
printf("%s %.1f %.1f %.1f %.1f\n",t->num,t->Math,t->Physic,t->English,t->sum);
|
|
}
|
|
void outputstudent2(struct student *t)// output num,sum and ave
|
|
{
|
|
printf("%s %.1f %.1f\n",t->num,t->sum,t->ave);
|
|
}
|
|
void outputstudent3(struct student *t)// output num,class,whether inserted and grade of all subject
|
|
{
|
|
if(t->inserted==0)
|
|
printf("%s %d %.1f %.1f %.1f\n",t->num,t->class,t->Math,t->Physic,t->English);
|
|
else
|
|
printf("%s %d %.1f %.1f %.1f inserted\n",t->num,t->class,t->Math,t->Physic,t->English);
|
|
}
|
|
void outputstudent4(struct student *t)// output num,class,name,and grade of all subject
|
|
{
|
|
printf("%s %s %d %.1f %.1f %.1f\n",t->num,t->name,t->class,t->Math,t->Physic,t->English);
|
|
}
|
|
void outputstudent5(struct student*t)//output info by class
|
|
{
|
|
for(int i=0;i<3;i++)
|
|
{
|
|
if(i==0||(t+i)->class!=(t+i-1)->class)
|
|
{
|
|
if((t+i)->mod==1)
|
|
printf("%d %s %s %.1f %.1f %.1f modified\n",(t+i)->class,(t+i)->num,(t+i)->name,(t+i)->Math,(t+i)->Physic,(t+i)->English);
|
|
else
|
|
printf("%d %s %s %.1f %.1f %.1f\n",(t+i)->class,(t+i)->num,(t+i)->name,(t+i)->Math,(t+i)->Physic,(t+i)->English);
|
|
}
|
|
else
|
|
{
|
|
if((t+i)->mod==1)
|
|
printf(" %s %s %.1f %.1f %.1f modified\n",(t+i)->num,(t+i)->name,(t+i)->Math,(t+i)->Physic,(t+i)->English);
|
|
else
|
|
printf(" %s %s %.1f %.1f %.1f\n",(t+i)->num,(t+i)->name,(t+i)->Math,(t+i)->Physic,(t+i)->English);
|
|
}
|
|
}
|
|
}
|
|
void orderstudent(struct student *t,int n)//order without class
|
|
{
|
|
for(int i=0;i<n;i++)
|
|
{
|
|
for(int j=i;j<n;j++)
|
|
{
|
|
if((t+i)->sum>(t+j)->sum)
|
|
{
|
|
struct student m;
|
|
m=*(t+i);
|
|
*(t+i)=*(t+j);
|
|
*(t+j)=m;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
void orderstudent2(struct student *t,int n)//order with class
|
|
{
|
|
for(int i=0;i<n;i++)
|
|
{
|
|
for(int j=i;j<n;j++)
|
|
{
|
|
if((t+i)->class>(t+j)->class)
|
|
{
|
|
struct student m;
|
|
m=*(t+i);
|
|
*(t+i)=*(t+j);
|
|
*(t+j)=m;
|
|
}
|
|
}
|
|
}
|
|
for(int i=0;i<n;i++)
|
|
{
|
|
for(int j=i;j<n;j++)
|
|
{
|
|
if((t+i)->class==(t+j)->class&&(t+i)->sum<(t+j)->sum)
|
|
{
|
|
struct student m;
|
|
m=*(t+i);
|
|
*(t+i)=*(t+j);
|
|
*(t+j)=m;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
void removestudent(struct student *t)//remove student(num or name)
|
|
{
|
|
for(int i=0;i<3;i++)
|
|
outputstudent4(t+i);
|
|
char re[10];
|
|
char p;
|
|
scanf("%s",re);
|
|
for(int i=0;i<3;i++)
|
|
{
|
|
if(strcmp((t+i)->num,re)!=0&&strcmp((t+i)->name,re)!=0)
|
|
{
|
|
outputstudent4(t+i);
|
|
}
|
|
}
|
|
printf("Are you sure(yes/no)?\n");
|
|
scanf("%c",&p);
|
|
scanf("%c",&p);
|
|
if(p=='n')
|
|
{
|
|
for(int i=0;i<3;i++)
|
|
outputstudent4(t+i);
|
|
}
|
|
else
|
|
{
|
|
for(int i=0;i<3;i++)
|
|
{
|
|
if(strcmp((t+i)->num,re)==0||strcmp((t+i)->name,re)==0)
|
|
{
|
|
for(int j=i;j<2;j++)
|
|
{
|
|
*(t+j)=*(t+j+1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
void modstudent(struct student *t)//mod info according to num
|
|
{
|
|
struct student f;
|
|
inputstudent3(&f);
|
|
for(int i=0;i<3;i++)
|
|
{
|
|
if(strcmp((t+i)->num,f.num)==0)
|
|
{
|
|
*(t+i)=f;
|
|
(t+i)->mod=1;
|
|
}
|
|
}
|
|
}
|
|
int main()
|
|
{
|
|
struct student s[10];
|
|
strcpy(s[0].num,"10001");
|
|
strcpy(s[0].name,"Zhang");
|
|
s[0].class=11;
|
|
s[0].Math=99.5;
|
|
s[0].Physic=88.5;
|
|
s[0].English=89.5;
|
|
s[0].sum=s[0].Math+s[0].Physic+s[0].English;
|
|
s[0].inserted=0;
|
|
strcpy(s[1].num,"10002");
|
|
strcpy(s[1].name,"Yang");
|
|
s[1].class=12;
|
|
s[1].Math=77.9;
|
|
s[1].Physic=56.5;
|
|
s[1].English=87.5;
|
|
s[1].sum=s[1].Math+s[1].Physic+s[1].English;
|
|
s[1].inserted=0;
|
|
strcpy(s[2].num,"10003");
|
|
strcpy(s[2].name,"Liang");
|
|
s[2].class=11;
|
|
s[2].Math=92.5;
|
|
s[2].Physic=99.0;
|
|
s[2].English=60.5;
|
|
s[2].sum=s[2].Math+s[2].Physic+s[2].English;
|
|
s[2].inserted=0;
|
|
orderstudent2(&s[0],3);
|
|
modstudent(&s[0]);
|
|
outputstudent5(&s[0]);
|
|
return 0;
|
|
} |