一.开发环境需求
操作系统:Windows 7,Windows 10,Windows 11。
开发环境工具:Cfree,Dev C++,VC6++。
开发语言:C语言。
二. 功能需求
制作一个学生信息管理系统。在制作的系统中,能录入学生信息、删除学生信息、修改学生信息,查询学生信息、排序学生信息。系统使用方法便捷,简单,功能容易实现。学生的信息包括:学号、姓名、班级、性别、英语成绩,C语言成绩,平均成绩,总成绩避免系统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 student temp; 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;j<m;j++) { if(stu[i].num>stu[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;j<m;j++) { if(stu[i].Eng_score>stu[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;j<m;j++) { if(stu[i].C_score>stu[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;j<m;j++) { if(stu[i].total>stu[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;j<m;j++) { if(stu[i].aver>stu[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;i<m;i++){if(stu[i].total>stu[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<m;i++) { if(stu[i].total>=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 <stdio.h>#include<string.h>#include <stdlib.h> #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 student temp; 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;j<m;j++) { if(stu[i].num>stu[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;j<m;j++) { if(stu[i].Eng_score>stu[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;j<m;j++) { if(stu[i].C_score>stu[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;j<m;j++) { if(stu[i].total>stu[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;j<m;j++) { if(stu[i].aver>stu[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;i<m;i++){if(stu[i].total>stu[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<m;i++) { if(stu[i].total>=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语言进行编译,在进行文件的的读和写操作后都要记得关闭文件,要理解各种函数的作用和意义,这样帮助我们更好的制作出想要的系统。