#include #include #pragma warning (disable:4996) typedef struct Student { char id[20]; char clas[20]; char name[20]; double score1; double score2; double score3; double score; }Student; Student stu[50]={{"10001","11","Zhang",99.5,88.5,89.5,277.5},{"10002","12","Yang",77.9,56.5,87.5,221.9},{"10003","11","Liang",92.5,99.0,60.5,252.0}}; void start() { printf("\n以下为主菜单:\n"); printf(" 1.input\n"); printf(" 2.delete\n"); printf(" 3.select\n"); printf(" 4.order\n"); printf(" 5.output\n"); printf(" 6.quit\n"); printf("please input your option:\n"); }//开始显示主菜单的函数 void input() { int i;int flag=1; int len=lens(stu); scanf("%s %s %s %lf %lf %lf", stu[len].id,stu[len].clas,&stu[len].name,&stu[len].score1, &stu[len].score2, &stu[len].score3); char nul3=getchar(); stu[len].score = stu[len].score1 + stu[len].score2 + stu[len].score3; for(i=0;i stu[j + 1].score) { Student temp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = temp; } } } for( i=0;i 0) { court++; } if(stu[i].score3 <= 0) { break; } } return court; } //测学生数量 void order() { int i,j,k; int a[100] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; int c[100] = { 0 }; int number = 0; int len = lens(stu); for (i = 0;i < len;i++) { stu[i].score = stu[i].score1 + stu[i].score2 + stu[i].score3; } stu[len + 1].score = 0; for (i = 0;i < len;i++) { for (j = 0;j < len - i-1;j++) { if (strcmp(stu[j].clas, stu[j + 1].clas) > 0) { stu[len + 1] = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] =stu[len + 1]; } } } stu[len].score = 6458; for (i = 0;i < len;i++) { if (stu[i].score == stu[i + 1].score) { a[number]++; } if (stu[i].score != stu[i + 1].score) { a[number]++; c[number + 1] = i + 1; number++; } } for (k = 0;k < number;k++) { for (i = 0;i < a[k];i++) { for (j = c[k];j < a[k] - i;j++) { if (stu[j].score < stu[j + 1].score) { stu[len + 1] = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = stu[len + 1]; } } } } for (i = 0;i < len;i++) { printf("%s %s %.2f %.2f %.2f %.2f\n", stu[i].id, stu[i].clas, stu[i].score1, stu[i].score2, stu[i].score3, stu[i].score); } } //先按班级再按成绩排序 void delete() { int len = lens(stu);int flag = 0; int i,j,k; printf("请输入要删除学生的学号或者姓名:\n"); char a[10];//用来储存学号或者名字 scanf("%s", a); char nul2=getchar(); for (i = 0;i < len;i++) { if (strcmp(a, stu[i].id) == 0 || strcmp(a, stu[i].name) == 0) { flag = 1;//有的话删除并输出 for (k = i + 1;k < len;k++) { stu[k - 1] = stu[k];//相当于删除 } } } if (flag == 0)//没有的话输出原来的数据 { for (j = 0;j < len;j++) { printf("%s %s %s %.2f %.2f %.2f %.2f\n", stu[j].id,stu[j].clas, stu[j].name, stu[j].score1, stu[j].score2, stu[j].score3, stu[j].score); } } if (flag == 1)//有的话输出这个之外的(已删除这个学生) { len = lens(stu) - 1; for (j = 0;j < len;j++) { printf("%s %s %s %.2f %.2f %.2f %.2f\n", stu[j].id,stu[j].clas, stu[j].name, stu[j].score1, stu[j].score2, stu[j].score3, stu[j].score); } } } //删除 void select(char* a,char* b,int i,double k) { int len = lens(stu),j; if (i == 1) { for (j = 0;j < len;j++) { if (strcmp(stu[j].clas,a)>=0 && strcmp(stu[j].clas,b)<=0) { printf("%s %s %s %.2f %.2f %.2f %.2f\n", stu[j].id, stu[j].clas, stu[j].name, stu[j].score1, stu[j].score2, stu[j].score3, stu[j].score); } } } else if (i == 2) { for (j = 0;j < len;j++) { if (strcmp(stu[j].id,a)>=0 && strcmp(stu[j].id,b)<=0) { printf("%s %s %s %.2f %.2f %.2f %.2f\n", stu[j].id, stu[j].clas, stu[j].name, stu[j].score1, stu[j].score2, stu[j].score3, stu[j].score); } } } else if (i == 3) { for (j = 0;j < len;j++) { if(strcmp(stu[j].name,a)>=0 && strcmp(stu[j].name,b)<=0) { printf("%s %s %s %.2f %.2f %.2f %.2f\n", stu[j].id, stu[j].clas, stu[j].name, stu[j].score1, stu[j].score2, stu[j].score3, stu[j].score); } } } else if (i == 4) { for (j = 0;j < len;j++) { if (stu[j].score>=k) { printf("%s %s %s %.2f %.2f %.2f %.2f\n", stu[j].id, stu[j].clas, stu[j].name, stu[j].score1, stu[j].score2, stu[j].score3, stu[j].score); } } } } //a表示初始,b表示末尾 int main() { while(1) { start(); char g = getchar(); char nul=getchar(); if (g == '1') { printf("Please input info of a student(格式为id clas name score1 score2 score3):\n"); input(); } else if(g=='4') { order(); } else if(g=='5') { output(); } else if(g=='2') { delete(); } else if(g=='3') { char a[20],b[20]; int t; double k; printf("选择筛选的方式\n1.按班级\n2.按学号\n3.按姓名\n4.按总分\n"); scanf("%d",&t); nul=getchar(); if(t>=1&&t<=3) { printf("请输入要求的范围:\nbegin:"); scanf("%s",a); printf("end:"); scanf("%s",b); nul=getchar(); select(a,b,t,0); } else if(t==4) { printf("请输入要大于等于的总分\n"); scanf("%lf\n",k); nul=getchar(); select(a,b,t,k); } } else if(g=='6') { break; } else printf("输入错误"); printf("continue?\n"); char s[100]; scanf("%s",s); nul=getchar(); char* yes="yes"; if(strcmp(s,yes)==0){} else break; } return 0; }