学生信息管理系统代码(使用C语言代码实现学生信息管理系统怎么写)

发布时间:2025-12-10 22:56:31 浏览次数:1

程序介绍

运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图所示。在主界面上输入0到8内的数字,实现相应的功能。

主界面输入1时,进入录入学生信息的界面,当没有存储记录时,根据提示对学生的信息进行输入,运行效果如图所示。

在存在学生信息的情况下继续添加学生信息时,会首先显示存在的学生信息,运行效果如图所示。

主界面输入2时,进入查询学生信息模块,根据学生学号,对学生信息进行查询。运行效果如图所示。

在主界面输入3时,进入到删除学生信息模块,输入需要删除的学生学号,即可在文件中将该学号的所有信息删除,运行效果如图所示。

当在主界面输入4时,系统进入到修改学生信息模块,首先会显示出所有学生的信息,输入要修改的学生学号,系统会对输入的学号进行匹配,若在显示出来的学生信息中存在,则会提示输入修改的内容。运行效果如图所示。

在主界面输入5时,可以插入学生信息,根据提示输入想要插入的位置,以及插入的学号等信息。运行效果如图所示。

在主界面输入6时,可以根据学生的总成绩从高到低进行排序。排序完成后,将排序结果保存,但是排序后的结果并不现实在该界面。运行效果如图所示。

当在主界面输入7时,可以对学生的人数进行统计,显示出统计的人数。运行效果如图所示。

当在主界面输入8时,可以对学生的信息进行显示,运行效果如图所示。该图为对成绩进行排序后的显示结果。

代码

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<dos.h>#include<string.h>#defineLENsizeof(structstudent)#defineFORMAT"%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"#defineDATAstu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum/***结构体*/structstudent/*定义学生成绩结构体*/{intnum;/*学号*/charname[15];/*姓名*/doubleelec;/*选修课*/doubleexpe;/*实验课*/doublerequ;/*必修课*/doublesum;/*总分*/};/***函数声明*/structstudentstu[50];/*定义结构体数组*/voidin();/*录入学生成绩信息*/voidshow();/*显示学生信息*/voidorder();/*按总分排序*/voiddel();/*删除学生成绩信息*/voidmodify();/*修改学生成绩信息*/voidmenu();/*主菜单*/voidinsert();/*插入学生信息*/voidtotal();/*计算总人数*/voidsearch();/*查找学生信息*/voidmain()/*主函数*/{system("colorf0\n");//白底黑字intn;menu();scanf("%d",&n);/*输入选择功能的编号*/while(n){switch(n){case1:in();break;case2:search();break;case3:del();break;case4:modify();break;case5:insert();break;case6:order();break;case7:total();break;case8:show();break;default:break;}getch();menu();/*执行完功能再次显示菜单界面*/scanf("%d",&n);}}voidin()/*录入学生信息*/{inti,m=0;/*m是记录的条数*/charch[2];FILE*fp;/*定义文件指针*/if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*/{printf("文件不存在!\n");return;//直接返回,不在执行}while(!feof(fp))//判断是否指向结束符{if(fread(&stu[m],LEN,1,fp)==1){m++;/*统计当前记录条数*/}}fclose(fp);if(m==0){printf("文件中没有记录!\n");}else{show();/*调用show函数,显示原有信息*/}if((fp=fopen("data.txt","wb"))==NULL){printf("文件不存在!\n");return;}printf("输入学生信息(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0)/*判断是否要录入新信息*/{printf("number:");scanf("%d",&stu[m].num);/*输入学生学号*/for(i=0;i<m;i++)if(stu[i].num==stu[m].num){printf("number已经存在了,按任意键继续!");getch();fclose(fp);return;}printf("name:");scanf("%s",stu[m].name);/*输入学生姓名*/printf("elective:");scanf("%lf",&stu[m].elec);/*输入选修课成绩*/printf("experiment:");scanf("%lf",&stu[m].expe);/*输入实验课成绩*/printf("requiredcourse:");scanf("%lf",&stu[m].requ);/*输入必修课成绩*/stu[m].sum=stu[m].elec+stu[m].expe+stu[m].requ;/*计算出总成绩*/if(fwrite(&stu[m],LEN,1,fp)!=1)/*将新录入的信息写入指定的磁盘文件*/{printf("不能保存!");getch();}else{printf("%s被保存!\n",stu[m].name);m++;}printf("继续?(y/n):");/*询问是否继续*/scanf("%s",ch);}fclose(fp);printf("OK!\n");}voidshow()//增加data.txt文件不存在或者文件内容为空时的显示{FILE*fp;inti,m=0;fp=fopen("data.txt","rb");//if((fp=fopen("data.txt","a+"))==NULL)/*打开指定文件*///{//printf("文件不存在!\n");//return;//}//fclose(fp);//if(m==0)//printf("文件中没有记录!\n");//return;while(!feof(fp)){if(fread(&stu[m],LEN,1,fp)==1)m++;}fclose(fp);printf("numbernameelectiveexperimentrequiredsum\t\n");for(i=0;i<m;i++){printf(FORMAT,DATA);/*将信息按指定格式打印*/}}voidmenu()/*自定义函数实现菜单功能*/{system("cls");printf("\n\n\n\n");printf("\t\t|---------------学生信息管理系统---------------|\n");printf("\t\t|\t\t\t\t\t|\n");printf("\t\t|\t\t1.录入学生信息\t|\n");printf("\t\t|\t\t2.查找学生信息\t|\n");printf("\t\t|\t\t3.删除学生信息\t|\n");printf("\t\t|\t\t4.修改学生信息\t|\n");printf("\t\t|\t\t5.插入学生信息\t|\n");printf("\t\t|\t\t6.排序\t\t|\n");printf("\t\t|\t\t7.统计学生总数\t|\n");printf("\t\t|\t\t8.显示所有学生信息\t|\n");printf("\t\t|\t\t0.退出系统\t\t|\n");printf("\t\t|\t\t\t\t\t|\n");printf("\t\t|----------------------------------------------|\n\n");printf("\t\t\t请选择(0-8):");}voidorder()/*自定义排序函数*/{FILE*fp;structstudentt;inti=0,j=0,m=0;if((fp=fopen("data.txt","r+"))==NULL){printf("文件不存在!\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("文件中没有记录!\n");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].sum<stu[j].sum){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("%s不能保存文件!\n");getch();}fclose(fp);printf("保存成功\n");}voiddel()/*自定义删除函数*//*逻辑:首先判断data.txt文件是否存在,如果存在,继续操作,判断文件是否为空,不为空,则输入要删除的学生学号;如果文件不存在返回“文件不存在”,文件内容为空则返回“文件中没有记录”输入学号----判断是否有这个学号。有:询问是否删除,y删除;n不删除,“找到了记录,选择不删除!”没有:“没有找到这名学生!”*/{FILE*fp;intsnum,i,j,m=0;charch[2];if((fp=fopen("data.txt","r+"))==NULL)//data.txt文件不存在{printf("文件不存在!\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("文件中没有记录!\n");//data.txt文件存在,但里面没有内容return;}printf("请输入学生学号");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--;/*记录的总个数减1*/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("cannotsave!\n");getch();}fclose(fp);printf("删除成功!\n");}else{printf("找到了记录,选择不删除!");}break;}else{printf("没有找到这名学生!\n");/*未找到要查找的信息*/}}voidsearch()/*自定义查找函数*///新增:搜索文件中没有的学号时的情况{FILE*fp;intsnum,i,m=0;if((fp=fopen("data.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("请输入number:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==stu[i].num)/*查找输入的学号是否在记录中*/{printf("numbernameelectiveexperimentrequiredsum\t\n");printf(FORMAT,DATA);/*将查找出的结果按指定格式输出*/break;}if(i==m)printf("没有找到这名学生!\n");/*未找到要查找的信息*/}voidmodify()/*自定义修改函数*///修正:要修改文件中没有记录的学号时,还是说“找到了。。。”{FILE*fp;structstudentt;inti=0,j=0,m=0,snum;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("请输入要修改的学生number:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==stu[i].num)/*检索记录中是否有要修改的信息*/{printf("找到了这名学生,可以修改他的信息!\n");printf("name:");scanf("%s",stu[i].name);/*输入名字*/printf("elective:");scanf("%lf",&stu[i].elec);/*输入选修课成绩*/printf("experiment:");scanf("%lf",&stu[i].expe);/*输入实验课成绩*/printf("requiredcourse:");scanf("%lf",&stu[i].requ);/*输入必修课成绩*/printf("修改成功!");stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ;if((fp=fopen("data.txt","wb"))==NULL){printf("cannotopen\n");return;}for(j=0;j<m;j++)/*将新修改的信息写入指定的磁盘文件中*/if(fwrite(&stu[j],LEN,1,fp)!=1){printf("cannotsave!");getch();}fclose(fp);break;}if(i==m)printf("没有找到这名学生!\n");/*未找到要查找的信息*/}voidinsert()/*自定义插入函数*/{FILE*fp;inti,j,k,m=0,snum;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;}printf("请输入要插入的位置(number):\n");scanf("%d",&snum);/*输入要插入的位置*/for(i=0;i<m;i++)//遍历if(snum==stu[i].num)//判断是否存在break;for(j=m-1;j>i;j--)//学号下面的内容stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/printf("现在请输入要插入的学生信息.\n");printf("number:");scanf("%d",&stu[i+1].num);for(k=0;k<m;k++)//判断是否存在if(stu[k].num==stu[m].num){printf("number已经存在,按任意键继续!");getch();fclose(fp);return;}printf("name:");scanf("%s",stu[i+1].name);printf("elective:");scanf("%lf",&stu[i+1].elec);printf("experiment:");scanf("%lf",&stu[i+1].expe);printf("requiredcourse:");scanf("%lf",&stu[i+1].requ);stu[i+1].sum=stu[i+1].elec+stu[i+1].expe+stu[i+1].requ;printf("插入成功!按任意键返回主界面!");if((fp=fopen("data.txt","wb"))==NULL){printf("不能打开!\n");return;}for(k=0;k<=m;k++)if(fwrite(&stu[k],LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/{printf("不能保存!");getch();}fclose(fp);}voidtotal(){FILE*fp;intm=0;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("norecord!\n");fclose(fp);return;}printf("这个班级一共有%d名学生!\n",m);/*将统计的个数输出*/fclose(fp);}
学生信息管理系统代码
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477