当前位置:文档之家› 学生成绩管理系统C语言版

学生成绩管理系统C语言版

#include<stdio.h> /*常用的标准输入输出函数*/ #include<process.h> /*access函数原型包含*/#include<io.h> /*exit函数原型包含*/#include<string.h> /*strcmp函数原型包含*/#include<conio.h>#include<stdlib.h>#include <string>#define N 100 /*最多的学生人数*/struct student /*学生结构体定义*/{char clas[15]; /*班级*/char no[13]; /*学号,最多为12位*/char name[20]; /*姓名*/char sex[8]; /*性别*/char addr[30]; /*地址*/char phone[15]; /*电话*/float score[5]; /*存储五门课成绩*/float ave; /*平均分*/}stu[N];int num;void init();void weihu();void tongji();void tongji1();void tongji2();void sort1();void find1();void save();void newfile();void read1();void newfile();void new1();void delete1();void modify();void sortscore();int findname(char cname[]);void main(){int choice=1;system("COLOR 2f");printf("~~~~~~~~~~~~~~~~~ 学生信息管理系统~~~~~~~~~~~~~~~~\n");printf(" **** ****\n");printf(" *** 欢迎进入***\n");printf(" * *\n");printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");init();while(choice!=5){system("COLOR 1F");printf(" *******************************\n");printf(" ** **\n");printf(" ** 主菜单**\n");printf(" ** 1:学生成绩维护**\n");printf(" ** 2:学生成绩统计**\n");printf(" ** 3:学生成绩排序**\n");printf(" ** 4:学生成绩查询**\n");printf(" ** 5:退出**\n");printf(" ** **\n");printf(" *******************************\n");printf(" 请选择:");scanf("%d",&choice);switch(choice){case 1:weihu();break;case 2:tongji();break;case 3:sort1();break;case 4:find1();break;case 5:save();printf("谢谢使用本系统!!\n");break;default:printf("选择错误,请重新选择!");}}}//1)输出学生成绩(公共函数)void output() /*输出学生数据*/{int i,j;for(i=0;i<num;i++){printf("班级姓名学号性别地址电话\n ");printf("%s %s %s %s %s %s\n",stu[i].clas,stu[i].name,stu[i].no,stu[i].s ex,stu[i].addr,stu[i].phone);printf("\n");printf("C语言大学物理网页设计高数英语\n");for(j=0;j<5;j++)printf("%-12.f",stu[i].score[j]);printf("\n");printf("\n");}}//2)系统初始化代码void init(){if(access("stu[i].dat",0)) /*判断文件是否存在*/newfile(); /*不存在创建新的数据文件*/ elseread1(); /*若存在,从文件中读取数据*/}//3)创立新的数据文件void newfile() /*从键盘输入学生成绩并保存到文件中*/ {int i;FILE *fp;if((fp=fopen("F:\\stu.dat","wb"))==NULL) /*创建二进制文件*/{printf("文件创建失败!请重新运行程序。

\n");exit(0); /*终止程序运行*/}printf("请输入学生人数:");scanf("%d",&num);for(i=0;i<num;i++){printf("班级:");getchar();gets(stu[i].clas);printf("姓名:");gets(stu[i].name);printf("请输入第%d位学生的学号:",i+1);gets(stu[i].no); printf("性别:");gets(stu[i].sex);printf("地址:");gets(stu[i].addr);printf("电话:");gets(stu[i].phone);printf("C语言:");scanf("%f",&stu[i].score[0]);printf("大学物理:");scanf("%f",&stu[i].score[1]);printf("网页设计:");scanf("%f",&stu[i].score[2]);printf("高数:");scanf("%f",&stu[i].score[3]);printf("英语:");scanf("%f",&stu[i].score[4]);fwrite(&stu,sizeof(stu),1,fp);printf("请输入下一条学生信息\n"); /*把第i+1名学生成绩写入文件*/}fclose(fp);printf("你刚刚输入的数据共有%d个学生成绩。

详细数据为:\n",num);output();}//4)从数据文件中读取成绩void read1(){FILE *fp;num=0; /*num为数据文件实际存储成绩人数*/ fp=fopen("stu.dat","r");if(fp==NULL) /*文件不存在*/{printf("文件打开失败!请重新运行程序。

\n");exit(0); /*终止程序运行*/}while(!feof(fp)){fread(&stu[num],1,sizeof(struct student),fp);num++;}num--;fclose(fp);printf("现在共有%d个学生成绩,初始数据为:\n",num);output(); /*输出读取结果*/}//5)学生成绩维护void weihu(){int choice1;system("COLOR 2F");printf(" *******************************************\n");printf(" ** **\n");printf(" ** 学生成绩维护子菜单**\n");printf(" ** 1.新增**\n");printf(" ** 2.删除(按学号)**\n");printf(" ** 3.修改**\n");printf(" ** **\n");printf(" ********************************************\n");printf(" 请选择");scanf("%d",&choice1);switch(choice1){case 1:new1();break;case 2:delete1();break;case 3:modify();break;default:printf("选择错误,请重新选择!\n");}}//6)新增一个学生成绩void new1(){printf("请输入班级:");getchar();gets(stu[num].clas);printf("请输入学号:");gets(stu[num].no);printf("姓名:");gets(stu[num].name);printf("性别:");gets(stu[num].sex);printf("地址:");gets(stu[num].addr);printf("电话:");gets(stu[num].phone);printf("C语言:");scanf("%f",&stu[num].score[0]);printf("大学物理:");scanf("%f",&stu[num].score[1]);printf("网页设计:");scanf("%f",&stu[num].score[2]);printf("高数:");scanf("%f",&stu[num].score[3]);printf("英语:");scanf("%f",&stu[num].score[4]);num++;printf("现在共有%d个学生成绩,数据为:\n",num);output();}//7)按学号查找int find(char sno[]){int i;for(i=0;i<num;i++)if(strcmp(stu[i].no,sno)==0) /*判断两个字符串相等*/return i; /*查找成功*/return -1; /*查找失败*/}//删除学生信息void delete1(){char cno[13];int i,j;printf("请输入要删除的学号:\n");getchar();gets(cno);i=find(cno);if(i==-1){printf("不存在该学号!!!!\n");}else{for(j=i;j<num;j++)stu[j]=stu[j+1];num--;printf("删除后还有%d个学生成绩,数据为:\n",num);output();}}//修改学生信息void modify(){char cno[13];int i,j;printf("请输入要修改学生的学号:\n");getchar();gets(cno);i=find(cno);printf("班级:");gets(stu[i].clas);printf("姓名:");gets(stu[i].name);printf("性别:");gets(stu[i].sex);printf("地址:");gets(stu[i].addr);printf("电话:");gets(stu[i].phone);printf("C语言:");scanf("%f",&stu[i].score[0]);printf("大学物理:");scanf("%f",&stu[i].score[1]);printf("网页设计:");scanf("%f",&stu[i].score[2]);printf("高数:");scanf("%f",&stu[i].score[3]);printf("英语:");scanf("%f",&stu[i].score[4]);printf("修改后为:\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",stu[i].clas,stu[i].name,stu[i].no,stu[i].sex,stu[i].addr, stu[i].phone);printf("C语言大学物理网页设计高数英语\n");for(j=0;j<5;j++)printf("%-12.f",stu[i].score[j]);printf("\n");}//10)统计void tongji(){int choice2;system("COLOR 3F");printf(" ***************************************************\n");printf(" *** ***\n");printf(" *** 统计子菜单***\n");printf(" *** 1.计算每门课程平均分***\n");printf(" *** 2.计算每个学生平均分***\n");printf(" *** ***\n");printf(" ***************************************************\n");printf(" 请选择:");scanf("%d",&choice2);if(choice2==1)tongji1();else if(choice2==2)tongji2();elseprintf("选择错误,请重新选择!\n");}//11)计算每个学生平均分void tongji1(){int i,j;float sum;float avec[5]; /*存储每门课程的平均分*/for(j=0;j<5;j++){sum=0;for(i=0;i<num;i++)sum+=stu[i].score[j];avec[j]=sum/num;}printf("各门课平均分:\n");printf("C语言大学物理网页设计高数英语\n");for(i=0;i<5;i++)printf("%-10.2f",avec[i]);printf("\n");}//12)计算每个人的平均分void tongji2(){int i,j;float sum;for(j=0;j<num;j++){sum=0;for(i=0;i<5;i++)sum+=stu[j].score[i];stu[j].ave=sum/5;printf("第%d个人的平均分:%.2f\n",j+1,stu[j].ave);}}//13)排序void sort1(){int choice3;system("COLOR 6F");printf(" *****************************************\n");printf(" \n");printf(" ***** 排序子菜单*****\n");printf(" ***** *****\n");printf(" ***** 1.按成绩*****\n");printf(" \n");printf(" *****************************************\n");printf(" 请选择:\n");scanf("%d",&choice3);if("choice3==1")sortscore();elseprintf("选择错误,请重新选择!\n");}//14)按学生平均分排序void sortscore() /*按平均成绩从高到低冒泡法排序*/{int i,j;struct student temp;tongji2(); /* 先计算每个学生的平均分*/for(i=0;i<=num-2;i++){for(j=0;j<num-i-1;j++)if(stu[j].ave<stu[j+1].ave){temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp;}}for(i=0;i<num;i++)printf("%.2f ",stu[i].score[1]);printf("排序后的学生成绩为:\n");output();}//15)查找void find1(){int choice4;char cno[13],cname[20];int i,j;system("COLOR 5F");printf("*********************************************************\n");printf("********* ************\n");printf("********* 查找子菜单************\n");printf("********* 1.按学号************\n");printf("********* 2.按姓名************\n");printf("********* ************\n");printf("*********************************************************\n");printf(" 请选择:");scanf("%d",&choice4);if(choice4==1){printf("输入要查找学生的学号:");getchar();gets(cno);puts(cno);i=find(cno);}else if(choice4==2){printf("请输入要查找学生的姓名:");getchar();gets(cname);i=findname(cname);}else{printf("选择错误,请重新选择!\n");return;}if(i==-1)printf("要查找的学生不存在。

相关主题