学生信息管理系统
getch();} fclose(fp);
printf(\成功删除\\n\}
§4.1.5 插入学生信息模块
插入学生信息模块的主要功能是在需要的位置插入新的学生信息,输入5时,进入插入学生信息模块,效果如图:
功能实现:
(1) 因为该系统的学生信息都及时的存储在磁盘文件中,所以每次操作都要先将
数据从文件中读取出来。
(2) 输入需要插入信息的位置,即可需要插入在哪个学生的学号后面,然后查找
该学号,从最后一条信息开始均向后移动一位,为新插入的信息提供位置。
(3) 设置好可以要输入的位置后,向该位置录入新学生的信息。然后该学生的信
息写入到磁盘文件中。
代码实现:
void insert()/*自定义插入函数*/ { FILE *fp;
int i,j,k,m=0,snum;
if((fp=fopen(\ { printf(\不能打开\\n\ while(!feof(fp))
16
图(4.1.5)-1
学生信息管理系统
if(fread(&stu[m],LEN,1,fp)==1) m++; if(m==0) {printf(\没有数据!\\n\ fclose(fp); return; }
printf(\请输入你想插入的位置(输入学号)\\n\ scanf(\输入要插入的位置*/ for(i=0;i if(snum==stu[i].num) break; for(j=m-1;j>i;j--) stu[j+1]=stu[j];/*从最后一条记录开始均向后移一位*/ printf(\现在请输入新的信息\\n\ printf(\学号:\ scanf(\ for(k=0;k if(stu[k].num==stu[m].num) { printf(\学生人数正在退出,按任意键继续\ getch(); fclose(fp); return; } printf(\姓名:\ scanf(\输入名字*/ printf(\选修课:\ scanf(\输入选修课成绩*/ printf(\实验课:\ 17 学生信息管理系统 scanf(\输入实验课成绩*/ printf(\必修课:\ scanf(\输入必修课成绩*/ printf(\修改成功\ stu[i].sum=stu[i].elec+stu[i].expe+stu[i].requ; if((fp=fopen(\ { printf(\ for(k=0;k<=m;k++) if(fwrite(&stu[k] ,LEN,1,fp)!=1)/*将修改后的记录写入磁盘文件中*/ { printf(\不能保存\ fclose(fp); } §4.1.6学生成绩排名模块 根据学生的总成绩将所有学生的信息按照从高到低进行排序,将排序后的信息写入到磁盘文件中保存。如图所示为排序后现实出来的效果 图(4.1.6)-1 再在主界面中输入数字8,就会把保存的排序输出出来如图: 图(4.1.6)-2 这里应用比较稳定简单的交换发排序对学生的成绩进行比较交换。学生成绩排名的实现过程是首先需要将录入的学生信息从磁盘文件中读取,然后将读出的学生信息按照成绩进行比较交换,从高到低排序,为学生排名次,然后再将拍好名次的学生信息保存写入到磁盘文件中。 代码实现: 18 学生信息管理系统 void order()/*自定义排序函数*/ { FILE *fp; struct student t; int i=0,j=0,m=0; if((fp=fopen(\ { printf(\不能打开!\\n\ return; } while(!feof(fp)) if(fread(&stu[m] ,LEN,1,fp)==1) m++; fclose(fp); if(m==0) { } if((fp=fopen(\ { printf(\不能打开\\n\ return;} printf(\没有数据!\\n\ return; for(i=0;i for(j=i+1;j { t=stu[i];stu[i]=stu[j];stu[j]=t;} if((fp=fopen(\ { printf(\不能打开\\n\ for(i=0;i 19 学生信息管理系统 if(fwrite(&stu[i] ,LEN,1,fp)!=1) { printf(\不能保存!\\n\ getch(); } fclose(fp); printf(\保存成功\\n\} §4.1.6学生人数统计模块 当在主界面输入7时,可以对学生的人数进行统计,显示出统计的人数。运行效果如图 代码实现: void total() { FILE *fp; int m=0; if((fp=fopen(\ { printf(\不能打开\\n\ while(!feof(fp)) if(fread(&stu[m],LEN,1,fp)==1) m++;/*统计记录个数即学生个数*/ 图(4.1.6)-1 if(m==0) {printf(\没有记录!\\n\ printf(\这个班级有 %d 个学生\\n\将统计的个数输出*/ fclose(fp); } 20