一.开发环境需求

操作系统:Windows 7,Windows 10,Windows 11。

开发环境工具:Cfree,Dev C++,VC6++。

开发语言:C语言。

二.功能需求

  1. 制作一个学生信息管理系统。
  2. 在制作的系统中,能录入学生信息、删除学生信息、修改学生信息,查询学生信息、排序学生信息。
  3. 系统使用方法便捷,简单,功能容易实现。
  4. 学生的信息包括:学号、姓名、班级、性别、英语成绩,C语言成绩,平均成绩,总成绩
  5. 避免系统bug的出现,优化系统。

三.功能说明

录入学生信息:将学生的信息输入到学生信息管理系统中。

删除学生信息:将学生信息管理系统中不需要的学生信息删除。

修改学生信息:在学生信息管理系统中修改学生的部分信息。

查询学生信息:在学生信息管理系统中输入需求显示查询结果。

显示学生信息:在学生信息管理系统中按需求显示所有学生信息。

排序学生信息:按一定规律对学生信息进行排序。

显示最好成绩:显示所有学生中总成绩最高的同学。

分组统计成绩:按照总成绩进行分组统计。

清屏:清除以上操作结果。

四.构造算法框架

1.构造功能框架

此步是将系统主要功能的算法框架建立出来(只是框架,不需要实现功能)

//学生信息结构体 struct student{int num; char name[20]; char clas[20]; char sex[5]; float Eng_score; float C_score; float total; float aver;};struct student stu[50];//主函数int main(){ void menu(); //功能函数的调用声明 void in(); void delet(); void updet(); void select(); void print(); void sort(); void max(); void cut(); void clea(); menu();int n;printf("请选择功能(1-9):\n");scanf("%d",&n);while(n){ if(n>=1&&n<=9){ switch(n){ case 1:in();break; case 2:delet();break;case 3:updet();break;case 4:select();break;case 5:print();break; case 6:sort();break; case 7:max();break; case 8:cut();break; case 9:clea();break; }if(n==9){menu();} printf("\n");printf("请选择功能(1-9):"); scanf("%d",&n);}else{ printf("\n");printf("请重新输入:");scanf("%d",&n); }}return 0;}//菜单界面void menu(){}//录入学生信息void in(){}//删除学生信息 void delet(){}//查找学生信息void updet(){}//修改学生信息void select(){}//显示所有学生信息void print(){}//排序void sort(){}//显示最大值void max(){}//分组统计void cut(){}//清屏void clea(){}

2.设计系统目录

按照学生信息管理系统的功能进行设计,将学生信息管理系统的功能呈现出来,供用户选择。

void menu(){ printf("\n\n\n"); printf("\t\t-------------------------------------------------\n"); printf("\t\t||---------------- ||\n");printf("\t\t||**************学生信息管理系统***************||\n"); printf("\t\t||---------------- ||\n"); printf("\t\t|| ||\n"); printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n"); printf("\t\t|| ||\n"); printf("\t\t||*********************************************||\n");} 

运行结果

五.在框架的基础上一一实现各项功能

1.录入学生信息:将学生的信息输入到学生信息管理系统中,并保存到文件中。

//录入学生信息 void in(){void print();FILE *fp;int i, m=0;char ch[2];if((fp=fopen("stu.txt","rb"))==NULL)//文件不存在先使用wb创建文件,再将其改为rb;反之使用直接使用rb。{ printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1) { m++;}}//m指代文件中学生的数量。fclose(fp);if(m==0){ printf("文件没有内容\n");}else {print();} if((fp=fopen("stu.txt","ab+"))==NULL){ printf("文件打开失败\n"); return; }printf("输入学生信息(y/n);\n"); scanf("%s",ch); while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) {printf("number:\n"); scanf("%3d",&stu[m].num); for(i=0;i<m;i++) {if(stu[i].num==stu[m].num){printf("您的信息已存在\n");fclose(fp); getchar();return;}}printf("name:\n");scanf("%s",stu[m].name);printf("class:\n");scanf("%s",stu[m].clas);printf("sex:\n");scanf("%s",stu[i].sex);printf("Eng_score:\n");scanf("%f",&stu[m].Eng_score);printf("C_score:\n");scanf("%f",&stu[m].C_score);stu[i].total=stu[i].C_score+stu[i].Eng_score;stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2; if(fwrite(&stu[m],LEN,1,fp)!=1)//录入数据,并保存到文件中。{printf("不能保存\n");getchar(); } else{ printf("信息保存成功\n");m++;}printf("是否继续录入学生信息(y/n):");scanf("%s",ch); }fclose(fp);//注意,打开文件后,操作完成后,必须关闭文件} 

运行结果

2.删除学生信息:将学生信息管理系统中不需要的学生信息删除,在删除完成后需将学生人数进行减一。

//删除学生信息 void delet(){ void print();FILE *fp;int num,m=0;int i,j;int flag=0; char ch[2];if((fp=fopen("stu.txt","rb"))==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1){m++;}} fclose(fp);if(m==0){printf("文件中没有学生信息\n");}else{print();printf("请输入需要删除学生信息的学号:");scanf("%d",&num); }for(i=0;i<m;i++){if(stu[i].num==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--;//删除该学生后,需要对学生人数减一 flag=1;//标记已经进行了删除操作if((fp=fopen("stu.txt","wb"))==NULL){printf("文件打开失败\n");return;}for(j=0;j<m;j++){if(fwrite(&stu[j],LEN,1,fp)!=1){printf("不能保存\n");getchar();}}fclose(fp);printf("删除成功!\n");break;}else{ printf("学生信息存在,不需要删除。"); break; }} }if(m==i&&flag==0) {printf("未找到该学生");}}

运行结果

3.修改学生信息:在学生信息管理系统中修改学生的部分信息。

//修改学生信息 void updet(){void print();int num;char name[10]; char clas[20];char sex[5];float Eng_score;float C_score;FILE *fp;int m=0,a;int i,j;if((fp=fopen("stu.txt","rb"))==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1){m++;}}fclose(fp);if(m==0){printf("文件中没有学生信息\n");} else{ print(); printf("请输入需要修改学生信息的学号:"); scanf("%d",&num); }//通过学号找到需要修改信息的学生。for(i=0;i<m;i++){ if(num==stu[i].num) {printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");printf("该学生已被找到,请选择需要修改的内容(1-5):");scanf("%d",&a);while(a){switch (a) {case 1:printf("将%d学生的学号修改为:",num); scanf("%d",&num);stu[i].num=num;for(j=i+1;j<m;j++){if(stu[j].num==num){printf("您修改的学号已存在\n");getchar();return;}} break;case 2:printf("将%d学生的姓名修改为:",num); scanf("%s",name);strcpy(stu[i].name,name);break;case 3:printf("将%d学生的班级修改为:",num); scanf("%s",clas);strcpy(stu[i].clas,clas);break;case 4:printf("将%d学生的性别修改为:",num); scanf("%s",sex);strcpy(stu[i].sex,sex); break;case 5:printf("将%d学生的英语成绩修改为:",num); scanf("%f",&Eng_score);stu[i].Eng_score=Eng_score;stu[i].total=stu[i].C_score+stu[i].Eng_score;stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;break;case 6:printf("将%d学生的C语言成绩修改为:",num);scanf("%f",&C_score);stu[i].C_score=C_score;stu[i].total=stu[i].C_score+stu[i].Eng_score;stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2; break;default:printf("选择错误,请重新选择需要修改的内容:");scanf("%d",&a); break;}printf("请选择需要修改的内容(如果已修改完成请按0):");scanf("%d",&a);}if((fp=fopen("stu.txt","wb"))==NULL){printf("文件打开失败\n");return;}for(j=0;j<m;j++){if(fwrite(&stu[j],LEN,1,fp)!=1){printf("不能保存\n");getchar();}}fclose(fp);printf("修改成功!\n");break; }}if(m==i){printf("未找到该学生\n"); }}

运行结果

4.查询学生信息:在学生信息管理系统中输入需求显示查询结果。

//查询学生信息 void select(){int num,m=0;int i;FILE *fp;if((fp=fopen("stu.txt","rb"))==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1){m++;} } fclose(fp);if(m==0){printf("文件没有内容\n");return;} printf("请输入学生学号进行查询:");scanf("%d",&num);//通过输入学号进行查找。for(i=0;i<m;i++){if(num==stu[i].num){printf("\n");printf("该学生信息已被查到;\n");printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver); break; }}if(m==i){printf("该学生信息不存在\n");return;}}

运行结果

5.显示学生信息:在学生信息管理系统中按需求显示所有学生信息。

//显示学生信息 void print(){ int i,m=0;FILE *fp;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; }while(!feof(fp)) {if(fread(&stu[m],LEN,1,fp)==1)//将文件中的学生信息读取出来,并按照定义的结构体数组呈现。{ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");} printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n"); for(i=0;i<m;i++) { printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);}}

运行结果

6.排序学生信息:按一定规律对学生信息进行排序。

//排序 void sort(){int i,j,m=0;int ch;FILE *fp;struct studenttemp;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1){ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");}printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");printf("请选择显示形式:"); scanf("%d",&ch); switch (ch){ case 1: for(i=0;i<m;i++) { for(j=i+1;jstu[j].num) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; }} } break; case 2: for(i=0;i<m;i++){ for(j=i+1;jstu[j].Eng_score){temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break; case 3:for(i=0;i<m;i++){ for(j=i+1;jstu[j].C_score) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break;case 4:for(i=0;i<m;i++){ for(j=i+1;jstu[j].total) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break;case 5:for(i=0;i<m;i++){ for(j=i+1;jstu[j].aver) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break; } printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n"); for(i=0;i<m;i++) { printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);}}

运行结果

7.显示最好成绩:显示所有学生中总成绩最高的同学。

//最大值 void max(){int i,j=0;FILE *fp;int m=0;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1){ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");}for(i=0;istu[j].total)j=i;}printf("总成绩成绩最高的同学是:\n");printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);}

运行结果

8.分组统计成绩:按照总成绩进行分组统计。

//分组统计void cut(){int i,j;float n;FILE *fp;int m=0;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1){ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");}printf("请输入按总成绩分组的值:");scanf("%f",&n);printf("总成绩大于%.2f的同学有:\n",n);printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n"); for(i=0;i=n)printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);}printf("总成绩小于%.2f的同学有:\n",n);printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");for(j=0;j<m;j++){if(stu[j].total<n)printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);} } 

运行结果

9.清屏:清除以上操作结果。

//清屏 void clea() { system("cls"); } 

六.源代码

#include #include#include  #define LEN sizeof(struct student)//学生信息结构体 struct student{int num; char name[20]; char clas[20]; char sex[5]; float Eng_score; float C_score; float total; float aver;};struct student stu[50];//系统操作 int main(){ void menu();void in(); void delet(); void updet(); void select(); void print(); void sort(); void max(); void cut(); void clea(); menu();int n;printf("请选择功能(1-9):\n");scanf("%d",&n);while(n){ if(n>=1&&n<=9){ switch(n){ case 1:in();break; case 2:delet();break;case 3:updet();break;case 4:select();break;case 5:print();break; case 6:sort();break; case 7:max();break; case 8:cut();break; case 9:clea();break; }if(n==9){menu();} printf("\n");printf("请选择功能(1-9):"); scanf("%d",&n);}else{ printf("\n");printf("请重新输入:");scanf("%d",&n); }}return 0;}//目录 void menu(){ printf("\n\n\n"); printf("\t\t-------------------------------------------------\n"); printf("\t\t||---------------- ||\n");printf("\t\t||**************学生信息管理系统***************||\n"); printf("\t\t||---------------- ||\n"); printf("\t\t|| ||\n"); printf("\t\t||~~~~~~~~~~~~~~~1.录入学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~2.删除学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~3.修改学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~4.查询学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~5.显示学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~6.排序学生信息~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~7.显示最好成绩~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~8.分组统计成绩~~~~~~~~~~~~~~~~||\n"); printf("\t\t||~~~~~~~~~~~~~~~9.清屏~~~~~~~~~~~~~~~~~~~~~~~~||\n"); printf("\t\t|| ||\n"); printf("\t\t||*********************************************||\n");} //录入学生信息 void in(){void print();FILE *fp;int i, m=0;char ch[2];if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1) { m++;}}fclose(fp);if(m==0){ printf("文件没有内容\n");}else {print();} if((fp=fopen("stu.txt","ab+"))==NULL){ printf("文件打开失败\n"); return; }printf("输入学生信息(y/n);\n"); scanf("%s",ch); while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0) {printf("number:\n"); scanf("%3d",&stu[m].num); for(i=0;i<m;i++) {if(stu[i].num==stu[m].num){printf("您的信息已存在\n");fclose(fp); getchar();return;}}printf("name:\n");scanf("%s",stu[m].name);printf("class:\n");scanf("%s",stu[m].clas);printf("sex:\n");scanf("%s",stu[i].sex);printf("Eng_score:\n");scanf("%f",&stu[m].Eng_score);printf("C_score:\n");scanf("%f",&stu[m].C_score);stu[i].total=stu[i].C_score+stu[i].Eng_score;stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2; if(fwrite(&stu[m],LEN,1,fp)!=1){printf("不能保存\n");getchar(); } else{ printf("信息保存成功\n");m++;}printf("是否继续录入学生信息(y/n):");scanf("%s",ch); }fclose(fp);} //删除学生信息 void delet(){ void print();FILE *fp;int num,m=0;int i,j;int flag=0; char ch[2];if((fp=fopen("stu.txt","rb"))==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1){m++;}} fclose(fp);if(m==0){printf("文件中没有学生信息\n");}else{print();printf("请输入需要删除学生信息的学号:");scanf("%d",&num); }for(i=0;i<m;i++){if(stu[i].num==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--; flag=1;if((fp=fopen("stu.txt","wb"))==NULL){printf("文件打开失败\n");return;}for(j=0;j<m;j++){if(fwrite(&stu[j],LEN,1,fp)!=1){printf("不能保存\n");getchar();}}fclose(fp);printf("删除成功!\n");break;}else{ printf("学生信息存在,不需要删除。"); break; }} }if(m==i&&flag==0) {printf("未找到该学生");}}//修改学生信息 void updet(){void print();int num;char name[10]; char clas[20];char sex[5];float Eng_score;float C_score;FILE *fp;int m=0,a;int i,j;if((fp=fopen("stu.txt","rb"))==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1){m++;}}fclose(fp);if(m==0){printf("文件中没有学生信息\n");} else{ print(); printf("请输入需要修改学生信息的学号:"); scanf("%d",&num); }for(i=0;i<m;i++){ if(num==stu[i].num) {printf("1:学号,2:姓名,3:班级,4:性别,5:英语成绩,6:C语言成绩\n");printf("该学生已被找到,请选择需要修改的内容(1-5):");scanf("%d",&a);while(a){switch (a) {case 1:printf("将%d学生的学号修改为:",num); scanf("%d",&num);stu[i].num=num;for(j=i+1;j<m;j++){if(stu[j].num==num){printf("您修改的学号已存在\n");getchar();return;}} break;case 2:printf("将%d学生的姓名修改为:",num); scanf("%s",name);strcpy(stu[i].name,name);break;case 3:printf("将%d学生的班级修改为:",num); scanf("%s",clas);strcpy(stu[i].clas,clas);break;case 4:printf("将%d学生的性别修改为:",num); scanf("%s",sex);strcpy(stu[i].sex,sex); break;case 5:printf("将%d学生的英语成绩修改为:",num); scanf("%f",&Eng_score);stu[i].Eng_score=Eng_score;stu[i].total=stu[i].C_score+stu[i].Eng_score;stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2;break;case 6:printf("将%d学生的C语言成绩修改为:",num);scanf("%f",&C_score);stu[i].C_score=C_score;stu[i].total=stu[i].C_score+stu[i].Eng_score;stu[i].aver=(stu[i].C_score+stu[i].Eng_score)/2; break;default:printf("选择错误,请重新选择需要修改的内容:");scanf("%d",&a); break;}printf("请选择需要修改的内容(如果已修改完成请按0):");scanf("%d",&a);}if((fp=fopen("stu.txt","wb"))==NULL){printf("文件打开失败\n");return;}for(j=0;j<m;j++){if(fwrite(&stu[j],LEN,1,fp)!=1){printf("不能保存\n");getchar();}}fclose(fp);printf("修改成功!\n");break; }}if(m==i){printf("未找到该学生\n"); }}//查询学生信息 void select(){int num,m=0;int i;FILE *fp;if((fp=fopen("stu.txt","rb"))==NULL){printf("文件打开失败\n");return;}while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1){m++;} } fclose(fp);if(m==0){printf("文件没有内容\n");return;} printf("请输入学生学号进行查询:");scanf("%d",&num);for(i=0;i<m;i++){if(num==stu[i].num){printf("\n");printf("该学生信息已被查到;\n");printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver); break; }}if(m==i){printf("该学生信息不存在\n");return;}}//显示学生信息 void print(){ int i,m=0;FILE *fp;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; }while(!feof(fp)) {if(fread(&stu[m],LEN,1,fp)==1){ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");} printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n"); for(i=0;i<m;i++) { printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);}}//排序 void sort(){int i,j,m=0;int ch;FILE *fp;struct studenttemp;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1){ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");}printf("1:学号升序,2:英语成绩升序,3:C语言升序,4:总成绩升序,5:平均成绩升序\n");printf("请选择显示形式:"); scanf("%d",&ch); switch (ch){ case 1: for(i=0;i<m;i++) { for(j=i+1;jstu[j].num) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp; }} } break; case 2: for(i=0;i<m;i++){ for(j=i+1;jstu[j].Eng_score){temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break; case 3:for(i=0;i<m;i++){ for(j=i+1;jstu[j].C_score) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break;case 4:for(i=0;i<m;i++){ for(j=i+1;jstu[j].total) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break;case 5:for(i=0;i<m;i++){ for(j=i+1;jstu[j].aver) {temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;}} } break; } printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n"); for(i=0;i<m;i++) { printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);}}//最大值 void max(){int i,j=0;FILE *fp;int m=0;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1){ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");}for(i=0;istu[j].total)j=i;}printf("总成绩成绩最高的同学是:\n");printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);}//分组统计void cut(){int i,j;float n;FILE *fp;int m=0;if((fp=fopen("stu.txt","rb"))==NULL){ printf("文件打开失败\n"); return; } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1){ m++; }}fclose(fp);if(m==0){printf("文件中没有内容\n");}printf("请输入按总成绩分组的值:");scanf("%f",&n);printf("总成绩大于%.2f的同学有:\n",n);printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n"); for(i=0;i=n)printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[i].num,stu[i].name,stu[i].clas,stu[i].sex,stu[i].Eng_score,stu[i].C_score,stu[i].total,stu[i].aver);}printf("总成绩小于%.2f的同学有:\n",n);printf("学号\t姓名\t班级\t性别\t英语成绩\tC语言成绩\t总成绩\t平均成绩\n");for(j=0;j<m;j++){if(stu[j].total<n)printf("%3d\t%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\t %.2f\n",stu[j].num,stu[j].name,stu[j].clas,stu[j].sex,stu[j].Eng_score,stu[j].C_score,stu[j].total,stu[j].aver);} }//清屏 void clea() { system("cls"); } 

七.总结

以上就是使用C语言编写的学生信息管理系统,在制作系统的过程中也遇到过很多的问题。

可能在第一次制作系统的时候,很可能是没有头绪的,这个时候我们不要放弃,开始没有头绪是正常的,此时我们应该静下心来去分析系统的功能,将思路打开,画出流程图,将系统的基本框架算法编译出来,然后逐个功能去分析去实现,大胆的将自己想到的算法编译出来,然后再逐个优化,最后一定能制作出一个非常好的系统。

在制作学生管理系统时,各项功能的实现一定要在心中有一个大概的流程,然后再使用C语言进行编译,在进行文件的的读和写操作后都要记得关闭文件,要理解各种函数的作用和意义,这样帮助我们更好的制作出想要的系统。