需求分析:

1.设计题目:学生成绩管理系统

2.系统功能需求分析:实现对学生各科成绩总分及平均分的排序,和成绩的查找

概要设计

1.功能模块图

详细设计

1.流程图

测试结果:列出所有功能的运行界面,并作文字说明。

1.录入成绩:录入3个人的学号和各科成绩

2.每门课程的总分平均分;计算各科的平均分

3.学生总分:计算3个学生的总分

4.学生总分的排序由高到低:对3个学生成绩进行排序

5.按学号由小到大排出成绩表;按学号排成绩

6.按姓名的字典顺序排出成绩表:按姓名顺序排成绩

7.学号查询学生排名和考试成绩:通过学生学号查找排名和各科成绩

8.按姓名查询学生排名及其考试成绩;通过输入姓名查找排名和成绩

9.每门课程分别统计每个类别的人数以及所占百分比;看各科评级人数和所占百分比

10.输出学生的学号,姓名考试成绩,总分和平均分;输出学生各项数据

11.将数据存入文件:保存数据

#include #include #include #define N 3 //定义学生人数 typedef struct{float mat;//高数 float eng;//英语 float com;//计算机无名结构体的变量定义 float phy;//大物 float ele;//电路 }SUB; //科目 typedef struct Student{char xuehao[100];//学号 char name[100];//姓名 char sex[100];//性别无名结构体的变量定义SUB score;//科目分数 float num;// 总分 float ave;//平均分 }AA;//信息 void save(AA *p){//文件存入int i;FILE *fp;//定义一个指针变量 fp=fopen("student.txt","w"); //打开以上创建的”student" 文件,"w"表示“只写” if((fp=fopen("student.txt","w"))==NULL)//检查文件是否正确打开,即:判断 fopen()的函数值 是否为空指针NULL {printf("cannot open file\n");//打开文件的操作出现错误, fopen()函数的返回值为空指针NULL,即:该文件打开失败 exit(0);//关闭所有打开的文件,终止正在执行的程序 }for(i=0;i<N;i++)//控制循环3次 {fprintf(fp,"%s\t",p[i].xuehao);//输出学号 fprintf(fp,"%s\t",p[i].name);//姓名 fprintf(fp,"%s\t",p[i].sex);//性别 fprintf(fp,"%.2f\t",p[i].score.mat);//高数fprintf(fp,"%.2f\t",p[i].score.eng);//英语 fprintf(fp,"%.2f\t",p[i].score.com);//计算机 fprintf(fp,"%.2f\t",p[i].score.phy);//大物 fprintf(fp,"%.2f\t",p[i].score.ele);//电路 fprintf(fp,"%.2f\t",p[i].num);//总分 fprintf(fp,"%.2f\t",p[i].ave);//均分 fprintf(fp,"\n");}fclose(fp);//关闭文件 }void menu(int *n)//主菜单 {printf("\t\t\t\t*************************************************\n");printf("\t\t\t\t\t1.手动录入数据\n");//手动录入数据 printf("\t\t\t\t\t2.计算每门课程的总分和平均分 \n");//计算每门课程的总分和平均分 printf("\t\t\t\t\t3.计算每个学生的总分和平均分 \n");//计算每个学生的总分和平均分 printf("\t\t\t\t\t4.按学生的总分由高到低排出名次表\n");//按学生的总分由高到低排出名次表 printf("\t\t\t\t\t5.按学号由小到大排出成绩表\n");//按学号由小到大排出成绩表 printf("\t\t\t\t\t6.按姓名的字典顺序排出成绩表 \n");//按姓名的字典顺序排出成绩表 printf("\t\t\t\t\t7.按学号查询学生排名及其考试成绩\n");//按学号查询学生排名及其考试成绩 printf("\t\t\t\t\t8.按姓名查询学生排名及其考试成绩 \n");//按姓名查询学生排名及其考试成绩 printf("\t\t\t\t\t9.对每门课程分别统计每个类别的人数以及所占百分比\n");/*对每门课程分别统计每个类别的人数以及所占百分比*/ printf("\t\t\t\t\t10.输出每个学生的学号,姓名,各科考试成绩,总分和平均分 \n");//输出每个学生的学号,姓名,各科考试成绩,总分和平均分 printf("\t\t\t\t\t11.将数据存入文件\n");//将数据存入文件 printf("\t\t\t\t\t0.退出程序 \n");//退出程序 printf("\t\t\t\t*************************************************\n");printf("Please input your choice:");scanf("%d",n);}void scanfstudent(AA*p)//信息录入 {int i;for(i=0;i<N;i++)//控制人数为3 {printf("请输入第%d学生的信息:\n",i+1);printf("学号:");scanf("%s",p[i].xuehao);printf("姓名:");scanf("%s",p[i].name);printf("性别:");scanf("%s",p[i].sex);printf("高数得分:");scanf("%f",&p[i].score.mat);printf("英语得分:");scanf("%f",&p[i].score.eng);printf("计算机得分:");scanf("%f",&p[i].score.com);printf("大物得分:");scanf("%f",&p[i].score.phy);printf("电路得分:");scanf("%f",&p[i].score.ele);p[i].num=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele);//计算总成绩 printf("总成绩:%.2f",p[i].num);p[i].ave=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele)/5.0; //计算总平均分printf("平均分:%.2f",p[i].ave);}}void studentave(AA *p)//计算并输出总分、平均分 {int i;for(i=0;i<N;i++){p[i].num=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele);//计算个人总分 p[i].ave=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele)/5.0;//计算个人平均分 printf("第%d个学生的总分:%.2f\t\t平均分:%.2f",i+1,p[i].num,p[i].ave);//输出 printf("\n");}}void printfstudent(AA*p)//汇总个人成绩 {int i;printf("学号\t\t姓名\t性别\t高数\t英语\t计算机\t大物\t电路\t总分\t平均分\n\n");//for (i=0;i=90)b1++;if(p[i].score.mat=80)b2++;if(p[i].score.mat=70)b3++;if(p[i].score.mat>=60&&p[i].score.mat<70)b4++;if(p[i].score.mat=90)c1++;if(p[i].score.eng=80)c2++;if(p[i].score.eng=70)c3++;if(p[i].score.eng>=60&&p[i].score.eng<70)c4++;if(p[i].score.eng=90)d1++;if(p[i].score.com=80)d2++;if(p[i].score.com=70)d3++;if(p[i].score.com>=60&&p[i].score.com<70)d4++;if(p[i].score.com=90)e1++;if(p[i].score.phy=80)e2++;if(p[i].score.phy=70)e3++;if(p[i].score.phy>=60&&p[i].score.phy<70)e4++;if(p[i].score.phy=90)f1++;if(p[i].score.ele=80)f2++;if(p[i].score.ele=70)f3++;if(p[i].score.ele>=60&&p[i].score.ele<70)f4++;if(p[i].score.ele<60)f5++;}printf("高 数: 优秀人数:%d\t优秀人数占比:%.2f\n",b1,b1*1.00/N); printf("\t良好人数:%d\t良好人数占比:%.2f\n",b2,b2*1.00/N); printf("\t中等人数:%d\t中等人数占比:%.2f\n",b3,b3*1.00/N); printf("\t及格人数:%d\t及格人数占比:%.2f\n",b4,b4*1.00/N); printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",b5,b5*1.00/N); printf("英 语: 优秀人数:%d\t优秀人数占比:%.2f\n",c1,c1*1.00/N); printf("\t良好人数:%d\t良好人数占比:%.2f\n",c2,c2*1.00/N); printf("\t中等人数:%d\t中等人数占比:%.2f\n",c3,c3*1.00/N); printf("\t及格人数:%d\t及格人数占比:%.2f\n",c4,c4*1.00/N); printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",c5,c5*1.00/N); printf("计算机: 优秀人数:%d\t优秀人数占比:%.2f\n",d1,d1*1.00/N); printf("\t良好人数:%d\t良好人数占比:%.2f\n",d2,d2*1.00/N); printf("\t中等人数:%d\t中等人数占比:%.2f\n",d3,d3*1.00/N); printf("\t及格人数:%d\t及格人数占比:%.2f\n",d4,d4*1.00/N); printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",d5,d5*1.00/N); printf("大 物: 优秀人数:%d\t优秀人数占比:%.2f\n",e1,e1*1.00/N); printf("\t良好人数:%d\t良好人数占比:%.2f\n",e2,e2*1.00/N); printf("\t中等人数:%d\t中等人数占比:%.2f\n",e3,e3*1.00/N); printf("\t及格人数:%d\t及格人数占比:%.2f\n",e4,e4*1.00/N); printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",e5,e5*1.00/N); printf("电 路: 优秀人数:%d\t优秀人数占比:%.2f\n",f1,f1*1.00/N); printf("\t良好人数:%d\t良好人数占比:%.2f\n",f2,f2*1.00/N); printf("\t中等人数:%d\t中等人数占比:%.2f\n",f3,f3*1.00)/N; printf("\t及格人数:%d\t及格人数占比:%.2f\n",f4,f4*1.00/N); printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",f5,f5*1.00/N); }int main(void){/*char a[]="1234";char b[10];printf("请输入密码:\n");scanf("%s",b);if(strcmp(b,a)==0)printf("密码正确\n");else{printf("密码错误\n");exit(1);} system("pause");system("CLS");*/ int n;AA p[1024];while(1){menu(&n);switch(n){case 1:scanfstudent(p);break;case 2:courseave(p);break;case 3:studentave(p);break;case 4:pxnum(p);break;case 5:px1(p);break;case 6:px2(p);break;case 7:chazhaoxuehao(p);break;case 8:chazhaoname(p);break; case 9:kandscore(p);break; case 10:printfstudent(p);break; case 11:save(p);break;case 0:printf("谢谢您的使用!\n\n");break;default:printf("输入有误重新输入!\n\n");break;}if(n == 0)break;system("pause");system("CLS");}return 0;}