用c语言编写学生成绩管理系统35261(8页).doc
-用c语言编写学生成绩管理系统35261-第 8 页#include<stdio.h>#include<string.h>#include<process.h>#include<conio.h>#define N 30#define M 3typedef struct studentchar number10;char name20;float scoreM;float aver;float total;STU;STU stuN;int n;void inputscore(void);void savescore(void);void avergescore(void);void total(void);void modifyscore(void);void lookscore(void);void searchscore(void);void statistic(void);void add(void);void modify(void);void delscore(void);void menu(void);void main()short int flag=0;menu();doflag=1;switch(getch()case '1' : inputscore();break; /*输入成绩*/case '2' : lookscore();break;/*查看成绩*/case '3' : searchscore();break;/*查找成绩*/case '4' : statistic();break;/*成绩统计*/case '5' : modify();break;/*修改成绩*/case '6' : add();break;/*添加成绩*/case '7' : delscore();break;/*删除成绩*/case '8' : savescore();break;/*保存成绩*/case '9' :exit(0);break;/*退出程序*/default : printf("输入有误n");printf("按任意键继续n");getch();menu();while (flag=1);void menu(void)system("cls"); /清屏printf("n");printf(" *欢迎进入学生会成绩管理系统*n");printf(" 菜单 n");printf(" 输入成绩-1n");printf(" 查看成绩及成绩排序-2n");printf(" 查询学生成绩-3n");printf(" 成绩统计-4n");printf(" 修改成绩-5n");printf(" 添加成绩-6n");printf(" 删除成绩-7n");printf(" 保存成绩-8n");printf(" 退出系统-9n");printf(" *n");printf(" 请输入您的选择(19)n");/*输入各个同学的学生信息*/void inputscore(void)int i,j;system("cls");printf(" 已经转到输入成绩菜单n");printf("请输入学生总数:n");scanf("%d",&n);printf("提示:输入学号时请输入由1位大写字母和8位数字组成的学号,如P01214000n");/*因二维表上下需对正故有此要求*/for(i=0;i<n;i+) printf("n");printf("请输入第%d位学生的学号:n",i+1); scanf("%s",stui.number);printf("姓名:n");scanf("%s",stui.name);printf("请输入学生成绩:n");printf("出勤分t值班分t贡献分n");for(j=0;j<M;j+)scanf("%f",&stui.scorej);printf(" 成功输入(按任意键继续后请输入8进行保存)n");/*计算各个同学的总分*/void total(void)int i,j; for(i=0;i<n;i+)stui.total=0;for(j=0;j<M;j+)stui.total+=stui.scorej;/*计算各个同学的平均分*/void avergescore(void)int i,j;for(i=0;i<n;i+)stui.aver=0;for(j=0;j<M;j+)stui.aver+=stui.scorej;stui.aver=stui.aver/M;/*查看学生成绩及根据平均分对学生进行排序*/void lookscore(void)int i,j,k;STU t;total();avergescore();system("cls");printf(" 已经转到查看成绩及成绩排序菜单n");for(i=0;i<n-1;i+)for(k=i,j=i+1;j<n;j+)if(stuj.aver>stuk.aver)k=j;if(k!=j)t=stuk;stuk=stui;stui=t;printf("名次t学号tt姓名tt出勤分t值班分t贡献分t总分t平均分n");for(i=0;i<n;i+)printf("%dt%st%st",i+1,stui.number,stui.name);for(j=0;j<M;j+)printf("%4.2ft",stui.scorej);printf("%4.2ft",stui.total);printf("%4.2f",stui.aver);printf("n");/*通过输入学号查找学生成绩*/void searchscore(void)char a10;int i,j;system("cls"); printf(" 已经转到查询学生成绩菜单n");printf("请输入需查询的学生学号n");scanf("%s",a);for(i=0;i<n;i+)if(strcmp(a,stui.number)=0)printf("名次t学号tt姓名tt出勤分t值班分t贡献分t总分t平均分n");printf("%dt%st%st",i+1,stui.number,stui.name);for(j=0;j<M;j+)printf("%4.2ft",stui.scorej);printf("%4.2ft",stui.total);printf("%4.2f",stui.aver);printf("n");break;/*找到该学生成绩信息后跳出for循环*/elseprintf("未找到该学生信息n");/*统计学生成绩信息,平均分及格率,优秀率*/void statistic(void)STU *p=stu;int i;float count=0.0,sum=0.0;system("cls");printf(" 已经转到成绩统计菜单n");for(i=0;i<n;i+)sum+=(p+i)->aver;printf("该学生会平均分为%4.2fn",sum/n);/*平均分计算*/for(i=0;i<n;i+)if(p+i)->aver>=60)count+;printf("该学生会及格率为%4.2f%n",count/n*100);/*及格率计算*/count=0.0;for(i=0;i<n;i+)if(p+i)->aver>=90)count+;printf("该学生会优秀率为%4.2f%n",count/n*100);/*优秀率计算*/printf("平均分低于60的学生会成员名单n");for(i=0;i<n;i+)if(stui.aver<60)printf("%sn",stui.name);/*统计不及格学生名单*/*修改学生成绩*/void modify(void)char a10;int i,j;system("cls"); printf(" 已经转到修改成绩菜单n");printf("请输入需要修改成绩的学生学号n");scanf("%s",a);for(i=0;i<n;i+)if(strcmp(a,stui.number)=0)printf("名次t学号tt姓名tt出勤分t值班分t贡献分t总分t平均分n");printf("%dt%st%st",i+1,stui.number,stui.name);for(j=0;j<M;j+)printf("%4.2ft",stui.scorej);printf("%4.2f",stui.total);printf("%4.2f",stui.aver);printf("n");printf("请重新输入该学生的学号:n");scanf("%s",stui.number);printf("姓名:n");scanf("%s",stui.name);printf("请重新输入学生成绩:n");printf("出勤分t值班分t贡献分n");for(j=0;j<M;j+)scanf("%f",&stui.scorej);/*找到该学生成绩后进行修改,跳出for循环*/printf("修改成功n");break;elseprintf("请确认该学生是否为学生会学生!n");/*添加学生成绩*/void add(void)int a,i,j;system("cls");printf(" 已经转到添加成绩菜单n");printf("请输入新增加的学生人数:n");scanf("%d",&a);n=n+a;for(i=n-a;i<n;i+) printf("n");printf("请输入第%d位学生的学号:n",i+1); scanf("%s",stui.number);printf("姓名:n");scanf("%s",stui.name);printf("请输入学生成绩:n");printf("出勤分t值班分t贡献分n");for(j=0;j<M;j+)scanf("%f",&stui.scorej);printf("添加成功n");/*删除学生成绩*/void delscore(void)int i,j,c;char m,a10;system("cls");printf(" 已经转到删除成绩菜单n");printf("请输入学生学号n");scanf("%s",a);for(i=0;i<n;i+)if(strcmp(a,stui.number)=0)printf("名次t学号tt姓名tt出勤分t值班分t贡献分t总分t平均分n");printf("%dt%st%st",i+1,stui.number,stui.name);for(j=0;j<M;j+)printf("%4.2ft",stui.scorej);printf("%4.2ft",stui.total);printf("%4.2f",stui.aver);printf("n");c=i;break;elseprintf("未找到该学生信息n");printf("是否删除该学生成绩(y/n)n");scanf("%s",&m);if(m='y')for(i=c;i<n-1;i+)stui=stui+1;/*结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/n=n-1;/*删除该学生信息后学生总数减一*/printf("删除成绩成功n");elseprintf("删除成绩失败n");/*保存学生成绩*/void savescore(void)FILE *fp;int i,flag=1;char m;system("cls");printf(" 已经转到保存成绩菜单n");puts("是否保存学生成绩(y/n)");scanf("%s",&m);if(m='y')if(fp=fopen("score.dat","wb")=NULL)printf("文件打开失败n");return;for(i=0;i<n;i+)if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf("保存失败n");flag=0;if(flag=1)printf("保存成功!n");fclose(fp);elsereturn;