目录
一,简述二,注意三,代码1.结构体及函数声明menu函数in函数(录入)search_函数(查询)del函数(删除)modify函数(修改)insert函数(插入)show函数(查看全部学生)order函数(排序)showclass函数(按班级查看)showorder函数(查看排名)showflunk函数(查看不及格)order2函数(此函数是当初老师要求添加的函数,于整个程序可有可无)一,简述
学生成绩管理系统是很多C语言初学者在大一都会有机会接触到的一个大作业,其中会涉及到文件的读写和创建,作者在这里会放出本实验的相关代码,总代码量大概600多行,其题目本身不难,各个函数之中的代码重复度较高,只要熟练掌握运用“数组,排序,查找字段,文件的读写”,则本题即可轻松过关!!
二,注意
以下代码资源仅作为学习参考!!!
三,代码
1.结构体及函数声明
```c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<dos.h>#define LEN sizeof(struct student)#define FORMART "|%-7d|%-15s|%-10d|%-9d|%-10.1f|%-12.1f|%-12.1f|%-12.1f|%-12.1f|\n"#define DATA stu[i].num,stu[i].name,stu[i].term,stu[i].classnum,stu[i].chinese,stu[i].math,stu[i].engnish,stu[i].sum,stu[i].averagestruct student{int num;char name[20];int classnum;int term;float chinese;float math;float engnish;float average;float sum;};void in();//录入成绩信息void show();//输出全部学生信息以及不及格学生名单void order();//排序函数void del();//删除学生信息void menu();//菜单void modify();//修改学生信息void insert_();//插入学生信息void search_();//查询以一位学生信息void showclass();//按班输出学生信息void showorder();//查看排名信息void showflunk();//查看不及格名单void order2();struct student stu[1000];//定义一个容量为1000的临时存放文件内容
menu函数
void menu(){system("cls");printf("\n\n\n\n");printf("\t\t\t\t|-------------------学生成绩管理系统--------------------|\n");printf("\t\t|\t\t| \t\t\t\t\t\t|\n");printf("\t\t\t\t|1.录入学生信息\t\t\t\t\t\t|\n");printf("\t\t\t\t|2.查看全部学生信息\t\t\t\t\t|\n");printf("\t\t\t\t|3.修改学生信息\t\t\t\t\t\t|\n");printf("\t\t\t\t|4.查询学生信息\t\t\t\t\t\t|\n");printf("\t\t\t\t|5.删除学生信息\t\t\t\t\t\t|\n");printf("\t\t\t\t|6.查看不及格学生信息\t\t\t\t\t|\n");printf("\t\t\t\t|7.分班查看成绩\t\t\t\t\t\t|\n");printf("\t\t\t\t|8.查看排名情况\t\t\t\t\t\t|\n");printf("\t\t\t\t|0.退出系统\t\t\t\t\t\t|\n\t\t\t\t-------------------学生成绩管理系统----------------------\n\n");printf("\t\t\t\t|请选择您需要的操作:");}
in函数(录入)
void in(){int i,m=0;char ch[2];FILE *fp;if((fp=fopen("data.txt","ab+"))==NULL){printf("无法找到此文件\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1){m++;}}fclose(fp);if(m==0){printf("此文件为空!\n");}else{system("cls");show();}if((fp=fopen("data.txt","wb"))==NULL){printf("文件不存在!\n");return;}for(i=0;i<m;i++)fwrite(&stu[i],LEN,1,fp);printf("\n是否要录入学生信息?(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0){printf("学号:");scanf("%d",&stu[m].num);for(i=0;i<m;i++)if(stu[i].num==stu[m].num){printf("此学号已存在,按任意键继续");getch();fclose(fp);return;}printf("姓名:");scanf("%s",stu[m].name);printf("班级:");scanf("%d",&stu[m].classnum);printf("学年:");scanf("%d",&stu[m].term);printf("语文成绩:");scanf("%f",&stu[m].chinese);printf("数学成绩:");scanf("%f",&stu[m].math);printf("英语成绩:");scanf("%f",&stu[m].engnish);stu[m].sum=stu[m].chinese+stu[m].math+stu[m].engnish;stu[m].average=(stu[m].chinese+stu[m].math+stu[m].engnish)*1.0/3;if(fwrite(&stu[m],LEN,1,fp)!=1){printf("存储失败(任意键继续)");getch();}else{printf("保存成功!\n");m++;}printf("继续录入?\n");scanf("%s",ch);}fclose(fp);printf("全部操作已完成!\n");}
search_函数(查询)
void search_(){system("cls");FILE *fp;int snum,i,m=0;if((fp=fopen("data.txt","rb"))==NULL){printf("未找到该文件!(warning!)\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("文件为空!\n");return;}printf("………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………\n请输入需要查询学生学号:");scanf("%d",&snum);for(i=0;i<m;i++){if(stu[i].num==snum){printf("\n|学号 |姓名 |学年|班级|语文|数学 |英语 |总分 |平均分|\t\n");printf(FORMART,DATA);break;}}if(i==m){printf("未查找到此学生相关信息!\n");}}
del函数(删除)
void del(){system("cls");show();FILE *fp;int snum,i,j,m=0;char ch[2];if((fp=fopen("data.txt","r+"))==NULL){printf("此文件不存在!\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp))m++;}fclose(fp);printf("\n请输入您想要删除学生的学号:");scanf("%d",&snum);for(i=0;i<m;i++){if(snum==stu[i].num){printf("目标找到,确认删除?(y/n)");scanf("%s",ch);if(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0){for(j=i;j<m;j++)stu[j]=stu[j+1];m--;if((fp=fopen("data.txt","wb"))==NULL){printf("文件不存在!\n");return;}for(j=0;j<m;j++)if(fwrite(&stu[j],LEN,1,fp)!=1){printf("保存失败!\n");getch();}fclose(fp);printf("删除成功!");show();}else{printf("成功找到目标,取消删除操作!\n");}break;}}if(i==m){printf("已删除!\n");}getch();}
modify函数(修改)
void modify(){FILE *fp;int i=0,j=0,m=0,snum;struct student t;if((fp=fopen("data.txt","r+"))==NULL){printf("文件不存在!\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1){m++;}if(m==0){printf("此文件为空!\n");fclose(fp);return;}show();printf("请输入要修改信息学生的学号:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==stu[i].num){printf("目标查找成功!可以继续操作:\n");printf("姓名:");scanf("%s",stu[i].name);printf("学年:");scanf("%d",&stu[i].term);printf("语文:");scanf("%f",&stu[i].chinese);printf("数学:");scanf("%f",&stu[i].math);printf("英语:");scanf("%f",&stu[i].engnish);printf("\n修改成功!\n");if((fp=fopen("data.txt","wb"))==NULL){printf("无法正确打开文件!\n");return;}for(j=0;j<m;j++)if(fwrite(&stu[j],LEN,1,fp)!=1){printf("保存失败!\n");getch();}fclose(fp);break;}if(i==m){printf("没有找到这名学生信息!\n");}}
insert函数(插入)
void insert_(){FILE *fp;int i,j,k,m=0,snum;show();if((fp=fopen("data.txt","ab+"))==NULL){printf("文件不存在!\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1){m++;}fclose(fp);if(m==0){printf("此文件为空!\n");fclose(fp);return;}printf("\n\n\n\n请输入要插入的位置:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==stu[i].num)break;if(i<m){printf("查找到目标:可以继续!\n");printf("姓名:");scanf("%s",&stu[i+1].name);printf("班级:");scanf("%d",&stu[i+1].classnum);printf("学年:");scanf("%d",&stu[i+1].term);printf("语文:");scanf("%f",&stu[i+1].chinese);printf("数学:");scanf("%f",&stu[i+1].math);printf("英语:");scanf("%f",&stu[i+1].engnish);}else{printf("插入位置错误!\n");getch();return;}if((fp=fopen("data.txt","wb+"))==NULL);{printf("此文件无法打开!\n");return;}for(k=0;k<m+1;k++)if(fwrite(&stu[k],LEN,1,fp)!=1){printf("保存失败!\n");getch();}printf("插入成功!\n");fclose(fp);}
show函数(查看全部学生)
void show(){system("cls");order2();FILE *fp;int i,m=0,c=0,m1=0,e=0;fp=fopen("data.txt","rb");while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1)m++;}fclose(fp);printf("|学号 |姓名 |学年|班级|语文|数学 |英语 |总分 |平均分|\t\n");for(i=0;i<m;i++){printf(FORMART,DATA);}}
order函数(排序)
void order(){FILE *fp;int i=0,j=0,m=0;struct student t;if((fp=fopen("data.txt","r+"))==NULL){printf("文件不存在!\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1){m++;}if(m==0){printf("此文件为空!\n");fclose(fp);return;}if((fp=fopen("data.txt","wb"))==NULL){printf("此文件不存在!\n");return;}for(i=0;i<m-1;i++)for(j=i+1;j<m;j++)if(stu[i].average<stu[j].average){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data.txt","wb"))==NULL){printf("文件不存在!\n");return;}for(i=0;i<m;i++){if(fwrite(&stu[i],LEN,1,fp)!=1){printf("保存失败!\n");getch();}}fclose(fp);printf("保存成功!\n");show();}
showclass函数(按班级查看)
void showclass(){system("cls");FILE *fp;int i,j,m=0,c;if((fp=fopen("data.txt","r+"))==NULL){printf("此文件不存在!\n");return;}while(!feof(fp)){if((fread(&stu[m],LEN,1,fp))==1)m++;}if(m==0){printf("此文件为空!\n");fclose(fp);return;}if((fp=fopen("data.txt","rb"))==NULL){printf("文件不存在!\n");return;}printf("请输入您需要查看成绩的班级:");scanf("%d",&c);printf("\n%d班成绩如下:\n",c);printf("|学号 |姓名 |学年|班级|语文|数学 |英语 |总分 |平均分|\t\n");for(j=0;j<m;j++){if(stu[j].classnum==c)printf(FORMART,stu[j].num,stu[j].name,stu[j].term,stu[j].classnum,stu[j].chinese,stu[j].math,stu[j].engnish,stu[j].sum,stu[j].average);}}
showorder函数(查看排名)
void showorder(){order();system("cls");FILE *fp;int i,m=0,c=0,m1=0,e=0;fp=fopen("data.txt","rb");while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1)m++;}fclose(fp);printf("|排名 |学号 |姓名 |学年|班级|语文|数学 |英语 |总分 |平均分|\t\n");for(i=0;i<m;i++){printf("|%-7d|%-7d|%-15s|%-10d|%-9d|%-10.1f|%-12.1f|%-12.1f|%-12.1f|%-12.1f|\n",i+1,DATA);}}
showflunk函数(查看不及格)
void showflunk(){system("cls");FILE *fp;int i,m=0,c=0,m1=0,e=0;fp=fopen("data.txt","rb");while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1)m++;}fclose(fp);printf("\n\n\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^以下为各科不及格学生名单^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n\n\n\n\n语文不及格学生名单:\n_____________________________________________________________________________________________________________\n");printf("|学号 |姓名 |学年|班级|语文|数学 |英语 |总分 |平均分|\t\n");for(i=0;i<m;i++){if(stu[i].chinese<60){printf(FORMART,DATA);c++;}}if(c==0)printf("|无| 无 |无 | 无| 无| 无 | 无 |无| 无 |\n");//shuxprintf("\n数学不及格学生名单:\n\n_____________________________________________________________________________________________________________\n");printf("|学号 |姓名 |学年|班级|语文|数学 |英语 |总分 |平均分|\t\n");for(i=0;i<m;i++){if(stu[i].math<60){printf(FORMART,DATA);m1++;}}if(m1==0)printf("|无| 无 |无 | 无| 无| 无 | 无 |无| 无 |\n");//yinyprintf("\n英语不及格学生名单:\n\n_____________________________________________________________________________________________________________\n");printf("|学号 |姓名 |学年|班级|语文|数学 |英语 |总分 |平均分|\t\n");for(i=0;i<m;i++){if(stu[i].engnish<60){printf(FORMART,DATA);e++;}}if(e==0)printf("|无| 无 |无 | 无| 无| 无 | 无 |无| 无 |\n");}
order2函数(此函数是当初老师要求添加的函数,于整个程序可有可无)
void order2(){FILE *fp;int i=0,j=0,m=0;struct student t;if((fp=fopen("data.txt","r+"))==NULL){printf("文件不存在!\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1){m++;}if(m==0){printf("此文件为空!\n");fclose(fp);return;}if((fp=fopen("data.txt","wb"))==NULL){printf("此文件不存在!\n");return;}for(i=0;i<m-1;i++)for(j=i+1;j<m;j++)if(stu[i].num>stu[j].num){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data.txt","wb"))==NULL){printf("文件不存在!\n");return;}for(i=0;i<m;i++){if(fwrite(&stu[i],LEN,1,fp)!=1){printf("保存失败!\n");getch();}}fclose(fp);printf("保存成功!\n");}