一、题目要求
二、实现
定义一个用来存放姓名和成绩的结构体类型,然后定义一个结构体数组。分别实现上述功能。
1.计算总成绩 2.显示单科成绩平均分3.总名次表4.单科成绩排名5.显示详细成绩6.重新选择模式初始化方式7.退出
三、全部代码如下
#include#include #include #include int flag = 0; //全局变量 typedef struct student_score { char name[16]; float score[3]; //语文成绩 数学成绩 英语成绩 float total_score; }STUS; int initialization_method_selection(int i); void main_menu(); void printf_score_menu(STUS *stu); void score_sum(STUS *stu); void avarage_score(STUS *stu); void total_score_sort(STUS *stu); void single_subject_score_sort(STUS *stu,int k); int single_subiect_score(STUS *stu); void pint_snge_sbjct_scre_sort_menu(); int main() { int choose; char str[32] = {0}; while(1) { printf("请选择数据初始化方式n"); printf("[1、使用初始数据]n[2、从键盘获取数据]nnn"); printf("请输入你的方式:"); char str[32]; fflush(stdin); choose = atoi(gets(str)); switch(choose) { case 1:initialization_method_selection(0);break; case 2:initialization_method_selection(1);break; default:system("cls");printf("===参数错误,返回当前菜单===nn");system("pause");break; } } return 0; } int initialization_method_selection(int i) { char str[32]; int choose; int j; STUS stu[5]; if(i == 0) { stu[0] = (STUS){"Alex",98.50,97.50,87.50}; stu[1] = (STUS){"Peter",77.50,44.50,81.50}; stu[2] = (STUS){"Marry",86.50,76.00,91.00}; stu[3] = (STUS){"Clis",77.00,100.00,96.50}; stu[4] = (STUS){"Harry",94.00,63.50,89.50}; } else if(i == 1) { system("cls"); printf("请分别输入五位学生的姓名,语文成绩,数学成绩,英语成绩n"); for(j = 0;j < 5;j++) { scanf("%s%f%f%f",stu[j].name,&stu[j].score[0],&stu[j].score[1],&stu[j].score[2]); } } system("cls"); STUS *p = stu; printf_score_menu(p); system("pause"); while(1) { system("color 0e"); fflush(stdin); main_menu(); choose = atoi(gets(str)); switch(choose) { case 1:score_sum(p);break; case 2:avarage_score(p);break; case 3:total_score_sort(p);break; case 4:single_subiect_score(p);break; case 5:system("cls");printf_score_menu(p);system("pause");break; case 6:system("cls");return 0;break; case 7:system("cls");exit(0);break; default:system("cls");printf("===参数错误,返回当前菜单===nn");system("pause");break; } } } void printf_score_menu(STUS *stu) { int i; system("color 09"); printf(" Name Chinese Math Englishn"); printf(" =====================================n"); for(i = 0;i < 5;i++) { printf(" %s %.2f %.2f %.2fn",stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]); } printf("nn"); } void main_menu() { system("cls"); system("color 0e"); printf(" __________________________n"); printf(" | 1.计算总成绩 |n"); printf(" | 2.显示单科成绩平均分 |n"); printf(" | 3.总名次表 |n"); printf(" | 4.单科成绩排名 |n"); printf(" | 5.显示详细成绩 |n"); printf(" | 6.重新选择模式初始化方式 |n"); printf(" | 7.退出 |n"); printf(" |__________________________|n"); printf("请输入序号:"); } void score_sum(STUS *stu) { flag = 1; system("cls"); int i; for(i = 0;i < 5;i++) { stu[i].total_score = stu[i].score[0] + stu[i].score[1] +stu[i].score[2]; } system("color 05"); printf("#总分计算完毕n"); printf(" Name Total Scoren"); printf(" ====================n"); for(i = 0;i < 5;i++) { printf(" %s %.2fn",stu[i].name,stu[i].total_score); } printf("nn"); system("pause"); } void avarage_score(STUS *stu) { system("cls"); int i; float aver[3]; for(i = 0;i < 3;i++) { aver[i] = (stu[0].score[i] + stu[1].score[i] +stu[2].score[i] +stu[3].score[i] +stu[4].score[i])/5.0; } system("color 05"); printf(" ======平均分======n"); printf("Chinese: %.2fn",aver[0]); printf("Math : %.2fn",aver[1]); printf("English: %.2fnnn",aver[2]); system("pause"); } void total_score_sort(STUS *stu) { system("cls"); int i,j; STUS temp; STUS stu_cpy[5]; for(i = 0;i < 5;i++) { stu_cpy[i] = stu[i]; } for(i = 0;i < 4;i++) { for(j = i+1;j < 5;j++) { if(stu_cpy[j].total_score > stu_cpy[i].total_score) { temp = stu_cpy[j]; stu_cpy[j] = stu_cpy[i]; stu_cpy[i] = temp; } } } if(flag == 1) { system("color 05"); printf(" NO. Name Total Scoren"); printf(" ============================n"); for(i = 0;i < 5;i++) { printf(" %d %s %.2fn",i+1,stu_cpy[i].name,stu_cpy[i].total_score); } printf("nn"); system("pause"); } else if(flag == 0){ system("color 04"); printf("总成绩未获取,无法进行排名nn"); system("pause"); } } void single_subject_score_sort(STUS *stu,int k) { int i,j; STUS temp; STUS stu_cpy[5]; char str[16] = {0}; int choose; for(i = 0;i < 5;i++) { stu_cpy[i] = stu[i]; } for(i = 0;i < 4;i++) { for(j = i+1;j < 5;j++) { if(stu_cpy[j].score[k] > stu_cpy[i].score[k]) { temp = stu_cpy[j]; stu_cpy[j] = stu_cpy[i]; stu_cpy[i] = temp; } } } system("cls"); printf(" NO. Name %sn",k==0?strcpy(str,"Chinese"):(k==1?strcpy(str,"Math"):strcpy(str,"English"))); printf(" ============================n"); for(i = 0;i < 5;i++) { printf(" %d %s %.2fn",i+1,stu_cpy[i].name,stu_cpy[i].score[k]); } printf("nn"); system("pause"); system("cls"); } int single_subiect_score(STUS *stu) { STUS *stu_cpy; char str[32] = {0}; int choose; while(1) { fflush(stdin); pint_snge_sbjct_scre_sort_menu(); choose = atoi(gets(str)); switch(choose) { case 1:single_subject_score_sort(stu,0);break; case 2:single_subject_score_sort(stu,1);break; case 3:single_subject_score_sort(stu,2);break; case 4:system("cls");return 0;break; default:system("cls");printf("===参数错误,返回当前菜单===nn");system("pause");break; } } } void pint_snge_sbjct_scre_sort_menu() { system("color 0e"); system("cls"); printf(" _______________n"); printf(" | 1.语文 |n"); printf(" | 2.数学 |n"); printf(" | 3.英语 |n"); printf(" | 4.返回 |n"); printf(" |_______________|n"); printf("请输入想要查询的单科成绩的序号:"); }



