综合百科

使用C语言怎么编写一个学生信息管理系统

本篇文章为大家展示了使用C语言怎么编写一个学生信息管理系统,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一.题目分析

1.功能概述

1)查询学生信息
2)添加学生信息
3)修改学生信息
4)删除学生信息
5)刷新学生信息
6)保存学生信息
7)输出当前学生信息

2.题目要求:

1)使用结构体建立学生信息体制
2)实现七大基本功能
3)采用文件存储学生信息

二.算法构造

1.难点解析----对文件的操作

1.1文件读取

FILE*fp;if((fp=fopen(filename,"r"))==NULL)return0;//从文件读取信息while(fscanf(fp,"%s%s%s%d%d%d%d",&stu[j].StudentId,&stu[j].StudentName,&stu[j].StudentAge,&stu[j].StudentSex,&stu[j].score[0],&stu[j].score[1],&stu[j].score[2])==7){j++;}

1.2文件写入

FILE*fp;fp=fopen(filename,"w");for(i=0;i<n;i++){fprintf(fp,"%s%s%d%c%.lf%.lf%.lf\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}

2.流程图

3.七大基本功能----函数实现

3.1菜单函数:通过菜单建立用户与程序之间的交流

voidmenu()/*界面*/{intnum;printf("\n\n\n\n");printf("******************************************************\n\n");printf("*学生信息管理系统*\n\n");printf("******************************************************\n\n");printf("*********************系统功能菜单*************************\n");printf("--------------------------------------------\n");printf("*********************************************\n");printf("*0.系统帮助及说明**1.刷新学生信息*\n");printf("*********************************************\n");printf("*2.查询学生信息**3.修改学生信息*\n");printf("*********************************************\n");printf("*4.增加学生信息**5.按学号删除信息*\n");printf("*********************************************\n");printf("*6.显示当前信息**7.保存当前学生信息*\n");printf("********************************************\n");printf("*8.退出系统*\n");printf("**********************\n");printf("--------------------------------------------\n");printf("请选择菜单编号:");scanf("%d",&num);switch(num){case0:help();break;case1:flush();break;case2:seek();break;case3:modify();break;case4:insert();break;case5:del();break;case6:display();break;case7:save();break;case8:k=0;printf("即将退出程序!\n");break;default:printf("请在0-8之间选择\n");}}

3.2系统帮助与说明函数:适用于初次接触学生信息管理系统的用户参考

voidhelp(){printf("\n0.欢迎使用系统帮助!\n");printf("\n1.初次进入系统后,请先选择增加学生信息;\n");printf("\n2.按照菜单提示键入数字代号;\n");printf("\n3.增加学生信息后,切记保存;\n");printf("\n4.谢谢您的使用!\n");}

3.3刷新学生信息函数

功能:调用刷新信息函数后,文件中再无学生信息

intflush(){charfilename[LEN+1];inti=0;printf("请输入要刷新学生信息的文件名:\n");scanf("%s",filename);intj=0;FILE*fp;if((fp=fopen(filename,"r"))==NULL)return0;//从文件读取信息while(fscanf(fp,"%s%s%s%d%d%d%d",&stu[j].StudentId,&stu[j].StudentName,&stu[j].StudentAge,&stu[j].StudentSex,&stu[j].score[0],&stu[j].score[1],&stu[j].score[2])==7){j++;}n=j;printf("刷新成功!!!");returnn;}

3.4查询学生信息函数

功能:通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在

查询方式:

1)按照学号查询
2)按照姓名查询

voidseek()/*查找*/{inti,item,flag;chars1[21];/*以姓名和学号最长长度+1为准*/printf("------------------\n");printf("-----1.按学号查询-----\n");printf("-----2.按姓名查询-----\n");printf("-----3.退出本菜单-----\n");printf("------------------\n");while(1){printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item){case1:printf("请输入要查询的学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(s1,stu[i].StudentId)==0){flag=1;printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");printf("--------------------------------------------------------------------\n");printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}if(0==flag)printf("该学号不存在!\n");break;case2:printf("请输入要查询的学生的姓名:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(stu[i].StudentName,s1)==0){flag=1;printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");printf("--------------------------------------------------------------------\n");printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}if(0==flag)printf("该姓名不存在!\n");break;case3:return;default:printf("请在1-3之间选择\n");}}}

3.5修改学生信息

功能:通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作;

//修改学生信息voidmodify()/*修改信息*/{inti,item,num=-1;charsex1,s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/floatscore1;printf("请输入要要修改的学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++){if(strcmp(stu[i].StudentId,s1)==0){/*比较字符串是否相等*/num=i;printf("------------------\n");printf("1.修改姓名\n");printf("2.修改年龄\n");printf("3.修改性别\n");printf("4.修改C语言成绩\n");printf("5.修改高等数学成绩\n");printf("6.修改大学英语成绩\n");printf("7.退出本菜单\n");printf("------------------\n");while(1){printf("请选择子菜单编号:");scanf("%d",&item);switch(item){case1:printf("请输入新的姓名:\n");scanf("%s",s2);strcpy(stu[num].StudentName,s2);break;case2:printf("请输入新的年龄:\n");scanf("%d",stu[num].StudentAge);break;case3:printf("请输入新的性别:\n");scanf("%s",&sex1);stu[i].StudentSex=sex1;break;case4:printf("请输入新的C语言成绩:\n");scanf("%f",&score1);stu[num].score[0]=score1;break;case5:printf("请输入新的高等数学成绩:\n");scanf("%f",&score1);stu[num].score[1]=score1;break;case6:printf("请输入新的大学英语成绩:\n");scanf("%f",&score1);stu[num].score[2]=score1;break;case7:return;default:printf("请在1-7之间选择\n");}}printf("修改完毕!请及时保存!\n");}else{printf("没有该学生学号!!!");}}}

3.6添加学生信息函数

功能:添加学生信息,并保存至文件中

//添加学生信息函数voidinsert()/*插入函数*/{inti=n,j,flag;printf("请输入待增加的学生数:\n");scanf("%d",&m);if(m>0){do{flag=1;while(flag){flag=0;printf("请输入第%d位学生的学号:\n",i+1);scanf("%s",stu[i].StudentId);for(j=0;j<i;j++){if(strcmp(stu[i].StudentId,stu[j].StudentId)==0){printf("该学号已存在,请重新输入!\n");flag=1;break;}}}printf("请输入第%d个学生的姓名:\n",i+1);scanf("%s",stu[i].StudentName);printf("请输入第%d个学生的年龄:\n",i+1);scanf("%d",&stu[i].StudentAge);printf("请输入第%d个学生的性别:\n",i+1);scanf("%c",&stu[i].StudentSex);printf("请输入第%d个学生的C语言成绩\n",i+1);scanf("%f",&stu[i].score[0]);printf("请输入第%d个学生的高等数学成绩:\n",i+1);scanf("%f",&stu[i].score[1]);printf("请输入第%d个学生的大学英语成绩:\n",i+1);scanf("%f",&stu[i].score[2]);if(0==flag){i++;}}while(i<n+m);}n+=m;printf("学生信息增加完毕!!!\n");system("pause");}

3.7删除学生信息函数

功能:通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息;

//删除学生信息函数voiddel(){inti,j,flag=0;chars1[LEN+1];printf("请输入要删除学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++){if(strcpy(stu[i].StudentId,s1)==0){flag=1;//要删除学生后面的学生往前移一位for(j=i;j<n-1;j++){stu[j]=stu[j+1];}}}//查找失败if(0==flag){printf("该学号不存在!!!\n");}if(1==flag){printf("删除成功!!!");//删除成功,学生人数减1n--;}system("pause");}

3.8显示当前学生信息

功能:可以输出进行多种操作后的学生信息管理系统中的所有学生信息;

//显示全部数据信息voiddisplay(){inti;printf("共有%d位学生的信息:\n",n);if(0!=n){printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");printf("--------------------------------------------------------------------\n");for(i=0;i<n;i++){printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}}system("pause");}

3.8保存学生信息

功能:将进行某些操作后的学生信息保存到指定文件中

voidsave(){inti;FILE*fp;charfilename[LEN+1];printf("请输入要保存的文件名:\n");scanf("%s",filename);fp=fopen(filename,"w");for(i=0;i<n;i++){fprintf(fp,"%s%s%d%c%.lf%.lf%.lf\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}printf("保存成功!!!\n");fclose(fp);system("pause");}

三.源程序代码

#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>/*I/O函数*/#include<stdlib.h>/*其它说明*/#include<string.h>/*字符串函数*/#defineLEN15/*学号和姓名最大字符数,实际请更改*/#defineN50/*最大学生人数,实际请更改*/intk=1,n=0,m=0;/*n代表当前记录的学生人数*///函数声明voidreadfile();voidseek();voidmodify();voidinsert();voiddel();voiddisplay();voidsave();voidmenu();//结构体保存学生信息structstudent{charStudentId[LEN+1];charStudentName[LEN+1];intStudentAge;charStudentSex;floatscore[3];}stu[N];//主函数intmain(){while(k){menu();}system("pause");return0;}//系统帮助函数voidhelp(){printf("\n0.欢迎使用系统帮助!\n");printf("\n1.初次进入系统后,请先选择增加学生信息;\n");printf("\n2.按照菜单提示键入数字代号;\n");printf("\n3.增加学生信息后,切记保存;\n");printf("\n4.谢谢您的使用!\n");}//刷新文件intflush(){charfilename[LEN+1];inti=0;printf("请输入要刷新学生信息的文件名:\n");scanf("%s",filename);intj=0;FILE*fp;if((fp=fopen(filename,"r"))==NULL)return0;//从文件读取信息while(fscanf(fp,"%s%s%s%d%d%d%d",&stu[j].StudentId,&stu[j].StudentName,&stu[j].StudentAge,&stu[j].StudentSex,&stu[j].score[0],&stu[j].score[1],&stu[j].score[2])==7){j++;}n=j;printf("刷新成功!!!");returnn;}//查找学生信息voidseek()/*查找*/{inti,item,flag;chars1[21];/*以姓名和学号最长长度+1为准*/printf("------------------\n");printf("-----1.按学号查询-----\n");printf("-----2.按姓名查询-----\n");printf("-----3.退出本菜单-----\n");printf("------------------\n");while(1){printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item){case1:printf("请输入要查询的学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(s1,stu[i].StudentId)==0){flag=1;printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");printf("--------------------------------------------------------------------\n");printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}if(0==flag)printf("该学号不存在!\n");break;case2:printf("请输入要查询的学生的姓名:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(stu[i].StudentName,s1)==0){flag=1;printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");printf("--------------------------------------------------------------------\n");printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}if(0==flag)printf("该姓名不存在!\n");break;case3:return;default:printf("请在1-3之间选择\n");}}}//修改学生信息voidmodify()/*修改信息*/{inti,item,num=-1;charsex1,s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/floatscore1;printf("请输入要要修改的学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++){if(strcmp(stu[i].StudentId,s1)==0){/*比较字符串是否相等*/num=i;printf("------------------\n");printf("1.修改姓名\n");printf("2.修改年龄\n");printf("3.修改性别\n");printf("4.修改C语言成绩\n");printf("5.修改高等数学成绩\n");printf("6.修改大学英语成绩\n");printf("7.退出本菜单\n");printf("------------------\n");while(1){printf("请选择子菜单编号:");scanf("%d",&item);switch(item){case1:printf("请输入新的姓名:\n");scanf("%s",s2);strcpy(stu[num].StudentName,s2);break;case2:printf("请输入新的年龄:\n");scanf("%d",stu[num].StudentAge);break;case3:printf("请输入新的性别:\n");scanf("%s",&sex1);stu[i].StudentSex=sex1;break;case4:printf("请输入新的C语言成绩:\n");scanf("%f",&score1);stu[num].score[0]=score1;break;case5:printf("请输入新的高等数学成绩:\n");scanf("%f",&score1);stu[num].score[1]=score1;break;case6:printf("请输入新的大学英语成绩:\n");scanf("%f",&score1);stu[num].score[2]=score1;break;case7:return;default:printf("请在1-7之间选择\n");}}printf("修改完毕!请及时保存!\n");}else{printf("没有该学生学号!!!");}}}voidsort()//按学号排序{inti,j,k,*p,*q,s;chartemp[LEN+1],ctemp;floatftemp;for(i=0;i<n-1;i++){for(j=n-1;j>i;j--)if(strcmp(stu[j-1].StudentId,stu[j].StudentId)>0){strcpy(temp,stu[j-1].StudentId);strcpy(stu[j-1].StudentId,stu[j].StudentId);strcpy(stu[j].StudentId,temp);strcpy(temp,stu[j-1].StudentName);strcpy(stu[j-1].StudentName,stu[j].StudentName);strcpy(stu[j].StudentName,temp);ctemp=stu[j-1].StudentSex;stu[j-1].StudentSex=stu[j].StudentSex;stu[j].StudentSex=ctemp;p=&stu[j-1].StudentAge;q=&stu[j].StudentAge;s=*q;*q=*p;*p=s;for(k=0;k<3;k++){ftemp=stu[j-1].score[k];stu[j-1].score[k]=stu[j].score[k];stu[j].score[k]=ftemp;}}}}//添加学生信息函数voidinsert()/*插入函数*/{inti=n,j,flag;printf("请输入待增加的学生数:\n");scanf("%d",&m);if(m>0){do{flag=1;while(flag){flag=0;printf("请输入第%d位学生的学号:\n",i+1);scanf("%s",stu[i].StudentId);for(j=0;j<i;j++){if(strcmp(stu[i].StudentId,stu[j].StudentId)==0){printf("该学号已存在,请重新输入!\n");flag=1;break;}}}printf("请输入第%d个学生的姓名:\n",i+1);scanf("%s",stu[i].StudentName);printf("请输入第%d个学生的年龄:\n",i+1);scanf("%d",&stu[i].StudentAge);printf("请输入第%d个学生的性别:\n",i+1);scanf("%c",&stu[i].StudentSex);printf("请输入第%d个学生的C语言成绩\n",i+1);scanf("%f",&stu[i].score[0]);printf("请输入第%d个学生的高等数学成绩:\n",i+1);scanf("%f",&stu[i].score[1]);printf("请输入第%d个学生的大学英语成绩:\n",i+1);scanf("%f",&stu[i].score[2]);if(0==flag){i++;}}while(i<n+m);}n+=m;printf("学生信息增加完毕!!!\n");system("pause");}//删除学生信息函数voiddel(){inti,j,flag=0;chars1[LEN+1];printf("请输入要删除学生的学号:\n");scanf("%s",s1);for(i=0;i<n;i++){if(strcpy(stu[i].StudentId,s1)==0){flag=1;//要删除学生后面的学生往前移一位for(j=i;j<n-1;j++){stu[j]=stu[j+1];}}}//查找失败if(0==flag){printf("该学号不存在!!!\n");}if(1==flag){printf("删除成功!!!");//删除成功,学生人数减1n--;}system("pause");}//显示全部数据信息voiddisplay(){inti;printf("共有%d位学生的信息:\n",n);if(0!=n){printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");printf("--------------------------------------------------------------------\n");for(i=0;i<n;i++){printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}}system("pause");}voidsave(){inti;FILE*fp;charfilename[LEN+1];printf("请输入要保存的文件名:\n");scanf("%s",filename);fp=fopen(filename,"w");for(i=0;i<n;i++){fprintf(fp,"%s%s%d%c%.lf%.lf%.lf\n",stu[i].StudentId,stu[i].StudentName,stu[i].StudentAge,stu[i].StudentSex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);}printf("保存成功!!!\n");fclose(fp);system("pause");}voidmenu()/*界面*/{intnum;printf("\n\n\n\n");printf("******************************************************\n\n");printf("*学生信息管理系统*\n\n");printf("******************************************************\n\n");printf("*********************系统功能菜单*************************\n");printf("--------------------------------------------\n");printf("*********************************************\n");printf("*0.系统帮助及说明**1.刷新学生信息*\n");printf("*********************************************\n");printf("*2.查询学生信息**3.修改学生信息*\n");printf("*********************************************\n");printf("*4.增加学生信息**5.按学号删除信息*\n");printf("*********************************************\n");printf("*6.显示当前信息**7.保存当前学生信息*\n");printf("********************************************\n");printf("*8.退出系统*\n");printf("**********************\n");printf("--------------------------------------------\n");printf("请选择菜单编号:");scanf("%d",&num);switch(num){case0:help();break;case1:flush();break;case2:seek();break;case3:modify();break;case4:insert();break;case5:del();break;case6:display();break;case7:save();break;case8:k=0;printf("即将退出程序!\n");break;default:printf("请在0-8之间选择\n");}}

四.调试、测试以及实验结果

1.调试:

2.测试:

输入数据类型与定义时不符合,程序运行过程中会出现错误

3.实验结果:

(1)~(9)是一个连续的运行实验结果

(1)运行菜单

(2)添加学生信息

(3)保存学生信息

(4)显示全部信息

(5)修改学生信息

(6)显示修改后全部信息

(7)刷新学生信息

(8)保存学生信息

(9)显示刷新后的全部信息

上述内容就是使用C语言怎么编写一个学生信息管理系统,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。