学生成绩管理系统完整版 C程序设计源代码 不用链表 有添加 删除 查找 修改等功能

/*4. 定义一个结构体数组,存放 10 个学生的学号,姓名,三门课的成绩,编写 定义一个结构体数组, 个学生的学号,姓名,三门课的成绩, 一程序。应用简单菜单和子函数调用方式实现下面的功能: 一程序。应用简单菜单和子函数调用方式实现下面的功能: 个学生的以上内容, (1)从键盘输入 10 个学生的以上内容,存入文件 stud.txt ) (2)浏览显示成绩表(要求显示格式成绩时,格式较规范) )浏览显示成绩表(要求显示格式成绩时,格式较规范) 个学生按照平均分数从高到低进行排序, (3)将 10 个学生按照平均分数从高到低进行排序,结果存入文件 stud1.txt ) (4)输入任意的一个课程名,分数从高到低进行排序,结果存入文件 stud2.txt )输入任意的一个课程名,分数从高到低进行排序, 中插入一个记录,成绩排序不变, (5)向文件 stud1.txt 中插入一个记录,成绩排序不变,结果存入文件 stud1.txt ) */

#include "stdio.h" /*头文件名 头文件名*/ 头文件名 #include "stdlib.h" /*头文件名,因为程序中用到了 exit(结束程序 和函数 头文件名, 结束程序)和函数 头文件名 结束程序 和函数*/ #include "string.h" /*头文件名,因为程序中用到了字符串函数 头文件名, 头文件名 因为程序中用到了字符串函数*/ #define N 1000 /******************************************************************** *****************************/ /***************************************** 定 义 结 构 体 模 块 ******************************************/ struct student { long num; /*定义学生学号为长整型 定义学生学号为长整型*/ 定义学生学号为长整型 char name[20]; /*定义姓名为字符型,占 12 个字符 定义姓名为字符型, 个字符*/ 定义姓名为字符型 float math,English,physics,total,average; float TOT_math,TOT_English,TOT_physics,TOT_total,TOT_aver; float aver_math,aver_English,aver_physics,aver_total,aver_average; }student; /*定义结构体名称为 student*/ 定义结构体名称为 /******************************************************************** *****************************/ /**************************************** 输 入 初 始 值 模 块 *******************************************/ void input(struct student *p,int size){ int i; for(i=0;i<size;i++){ printf("请输入学号 请输入学号:"); 请输入学号 while(1){scanf("%ld",&p[i].num); if(long(p[i].num)!=p[i].num||long(p[i].num)<=0){ /*输入 输入 判断*/ 判断 printf("输入错误 学号必须为整数 请重新输入 "); 输入错误,学号必须为整数 请重新输入: 输入错误 学号必须为整数,请重新输入 fflush(stdin);} else{break;}} printf("请输入姓名 请输入姓名:");scanf("%s",p[i].name); 请输入姓名 printf("请输入数学成绩 请输入数学成绩:"); 请输入数学成绩

while(1){scanf("%f",&p[i].math); if(float(p[i].math)!=p[i].math||float(p[i].math)<=0||p[i].math>100||p[i].math <0){ printf("输入错误 数学成绩必须为 0~100 之间的数 请重新输入 "); 输入错误,数学成绩必须为 之间的数,请重新输入: 输入错误 fflush(stdin);} else{break;}} printf("请输入英语成绩 请输入英语成绩:"); 请输入英语成绩 while(1){scanf("%f",&p[i].English); if(float(p[i].English)!=p[i].English||float(p[i].English)<=0||p[i].English>100||p[i ].English<0){ printf("输入错误 英语成绩必须为 0~100 之间的数 请重新输入 "); 输入错误,英语成绩必须为 之间的数,请重新输入 请重新输入: 输入错误 fflush(stdin); } else{break;}} printf("请输入物理成绩 请输入物理成绩:"); 请输入物理成绩 while(1){scanf("%f",&p[i].physics); if(float(p[i].physics)!=p[i].physics||float(p[i].physics)<=0||p[i].physics>100||p[ i].physics<0){ printf("输入错误 英语成绩必须为 0~100 之间的数 请重新输入 "); 输入错误,英语成绩必须为 之间的数,请重新输入 请重新输入: 输入错误 fflush(stdin);} else{break;}} printf("\n"); } printf("信息录入成功 信息录入成功!\n\n"); 信息录入成功 } /******************************************************************** ****************************************/ /*************************************保存初始值到 初始二进制值 保存初始值到"初始二进制值 保存初始值到 初始二进制值.txt"模 模 块*************************************/ void save(struct student *p,int size){ /*保存模块 保存模块*/ 保存模块 FILE *fp;int i; if((fp=fopen("初始值二进制值 初始值二进制值.txt","wb+"))==NULL){ /*建立文件 初始值二进制值 建立文件 */ printf("cannot open the file\n"); } for(i=0;i<size;i++){ fwrite(&p[i],sizeof(student),1,fp);} /*快写函数, 快写函数, 写到磁盘中为二进制数*/ 快写函数 写到磁盘中为二进制数 fclose(fp); /*关闭文件 关闭文件*/ 关闭文件 }

/******************************************************************** ****************************************/ /*************************************保存初始值到 初始二进制值 保存初始值到"初始二进制值 保存初始值到 初始二进制值.txt"模 模 块*************************************/ void save0(struct student *p,int size){ /*保存模块 保存模块*/ 保存模块 FILE *fp;int i; if((fp=fopen("初始值二进制值 1.txt","ab+"))==NULL){ /*建立文件 初始值二进制值 建立文件 */ printf("cannot open the file\n"); } for(i=0;i<size;i++){ fwrite(&p[i],sizeof(student),1,fp);} /*快写函数, 快写函数, 写到磁盘中为二进制数*/ 快写函数 写到磁盘中为二进制数 fclose(fp); /*关闭文件 关闭文件*/ 关闭文件 }

/******************************************************************** ****************************************/ /******************************************保存初始值到可浏览文件模块 保存初始值到可浏览文件模块 ****************************************/ void SAVE(struct student *p,int size){ FILE *fp; int i,b=0; char name[20]; printf("请输入保存初始值的可浏览文件名 "); 请输入保存初始值的可浏览文件名: 请输入保存初始值的可浏览文件名 scanf("%s",name); if((fp=fopen(name,"w+"))==NULL){ printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } fprintf(fp,"\n\t\t----------------------------------------------------------\n"); fprintf(fp,"\t\t 序号 学号 姓名 数学 物理\n"); 物理 fprintf(fp,"\t\t----------------------------------------------------------"); fprintf(fp,"\n" ); for(i=0;i<size;i++) {b++;

英语

fprintf(fp,"\t\t %-6d%-12d%-12s%-8.2f%-8.2f%-8.2f\n",b,p[i].num,p[i].name,p[ i].math,p[i].English,p[i].physics); fprintf(fp,"\t\t----------------------------------------------------------\n"); } fclose(fp); printf("\n 文件保存成功 文件保存成功!\n\n");

} /******************************************************************** ****************************************/ /****************************************** 读 取 初 始 值 模 块 ****************************************************/ int read(struct student *p,int size){ FILE *fp;int i,n=0; if((fp=fopen("初始值二进制值 初始值二进制值.txt","rb+"))==NULL){ 初始值二进制值 printf("文件名输入错误 文件名输入错误!!\n");} 文件名输入错误 for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} fclose(fp); return n; } /******************************************************************** ****************************************/ /****************************************** 读 取 输 出 初 始 值 模 块 ************************************************/ void read_print(struct student *p,int size){ FILE *fp;int i,n=0,b=0; if((fp=fopen("初始值二进制值 初始值二进制值.txt","rb+"))==NULL){ 初始值二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } printf("\n\t\t----------------------------------------------------------\n"); printf("\t\t 序号 学号 姓名 数学 英语 理\n"); printf("\t\t----------------------------------------------------------\n"); for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} for(i=0;i<n;i++) {b++;



printf("\t\t %-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].math,p[i]. English); printf("%-8.2f\n",p[i].physics); printf("\t\t----------------------------------------------------------\n"); } printf("\n\n"); fclose(fp); } /******************************************************************** ****************************************/ /********************************************* 计 算 总 分 和 平 均 分 模 块

*******************************************/ void total_average(struct student *p,int size){ /*求每位同学的总分和平均分 求每位同学的总分和平均分 模块*/ 模块 int i; for(i=0;i<size;i++){ /*循环,从第一个同学开始计算到最后一个 循环, 循环 同学*/ 同学 p[i].total=p[i].math+p[i].English+p[i].physics; /*每个同学的总分等于三科成绩之和 每个同学的总分等于三科成绩之和 */ p[i].average=p[i].total/3; /*每个同学的平均分等于总分的 每个同学的平均分等于总分的 1/3*/ } } /******************************************************************** ****************************************/ /************************************** 输 出 初 始 值 总 分 和 平 均 分 模 块 *******************************************/ void read_print1(struct student *p,int size){ void total_average(struct student *p,int size); FILE *fp;int i,n=0,b=0; if((fp=fopen("初始值二进制值 初始值二进制值.txt","rb+"))==NULL){ 初始值二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 序号 学号 姓名 数学 英语 物理 平均分\n"); 总分 平均分 printf("\t---------------------------------------------------------------------------\n"); for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n); for(i=0;i<n;i++) {b++; printf("\t %-6d%-12d%-12s%-8.2f%-8.2f",b,p[i].num,p[i].name,p[i].math,p[i].E nglish); printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average); printf("\t---------------------------------------------------------------------------\n"); } printf("\n\n"); fclose(fp); } /******************************************************************** ****************************************/

/*************************************** 将 初 始 值 按 平 均 分 排 序 模 块 *********************************************/ void range(struct student *p,int size){ /*所有同学的成绩按平均分由高到低 所有同学的成绩按平均分由高到低 排序模块*/ 排序模块 int i,j,k; struct student temp; /*定义一个 student 类型的变量备用 类型的变量备用*/ 定义一个 for(i=0;i<size;i++){ /*用选择排序法进行排序 用选择排序法进行排序*/ 用选择排序法进行排序 k=i; for(j=i+1;j<size;j++) if(p[k].average<p[j].average){ temp=p[k]; p[k]=p[j]; p[j]=temp;} } } /******************************************************************** ****************************************/ /************************************输出初始值按平均分排序的结果模块 输出初始值按平均分排序的结果模块 ****************************************/ int read_print2(struct student *p,int size){ void total_average(struct student *p,int size); void range(struct student *p,int size); FILE *fp;int i,n=0,b=0; if((fp=fopen("初始值二进制值 初始值二进制值.txt","rb+"))==NULL){ 初始值二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 学号 姓名 数学 英语 物理 总分 名次\n"); 平均分 名次 printf("\t---------------------------------------------------------------------------\n"); for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n); range(p,n); for(i=0;i<n;i++) {b++; printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b); printf("\t---------------------------------------------------------------------------\n"); } printf("\n\n");

fclose(fp); return n; } /******************************************************************** ****************************************/ /********************保存初始值按平均分排序后结果到 初始值按平均分排 保存初始值按平均分排序后结果到"初始值按平均分排 保存初始值按平均分排序后结果到 序二进制值.txt"模块 模块**********************************/ 序二进制值 模块 void save1(struct student *p,int size){ /*保存模块 保存模块*/ 保存模块 FILE *fp;int i; if((fp=fopen("按平均分排序二进制值 按平均分排序二进制值.txt","wb+"))==NULL){ /*建 按平均分排序二进制值 建 立文件*/ 立文件 printf("cannot open the file\n"); } for(i=0;i<size;i++){ fwrite(&p[i],sizeof(student),1,fp);} /*快写函数, 快写函数, 写到磁盘中为二进制数*/ 快写函数 写到磁盘中为二进制数 fclose(fp); /*关闭文件 关闭文件*/ 关闭文件 } /******************************************************************** ****************************************/ /****************************************** 读 取 排 序 后 结 果 模 块 ************************************************ int read1(struct student *p,int size){ FILE *fp;int i,n=0; if((fp=fopen("按平均分排序二进制值 按平均分排序二进制值.txt","r+"))==NULL){ 按平均分排序二进制值 printf("文件名输入错误 文件名输入错误!!\n");} 文件名输入错误 for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} fclose(fp); return n; } /******************************************************************** ****************************************/ /*******************************保存初始值按平均分排序后结果到可浏览 保存初始值按平均分排序后结果到可浏览 文件模块*********************************/ 文件模块 void SAVE1(struct student *p,int size){ FILE *fp; int i,b=0; char name[20]; printf("请输入保存排序结果的文件名 "); 请输入保存排序结果的文件名: 请输入保存排序结果的文件名

scanf("%s",name); if((fp=fopen(name,"w+"))==NULL){ printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } fprintf(fp,"\n\t---------------------------------------------------------------------------\n"); fprintf(fp,"\t 学号 姓名 数学 英语 物理 名次\n"); 总分 平均分 名次 fprintf(fp,"\t---------------------------------------------------------------------------\n"); fprintf(fp,"\n" ); for(i=0;i<size;i++) {b++; fprintf(fp,"\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].Englis h); fprintf(fp,"%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b); fprintf(fp,"\t---------------------------------------------------------------------------\n"); } fclose(fp); printf("\n 文件保存成功 文件保存成功!\n\n"); } /******************************************************************** ****************************************/ /*********************************************** 科 目 选 择 模 块 *************************************************/ int choose(){ system("color B1 "); system("cls"); printf("\n\t************ 请 选 择 按 成 绩 从 高 到 低 排 序 的 科 目 ******************\n\n"); printf("\t\t\t 查看数学成绩排序请输入 数学 查看数学成绩排序请输入(数学 数学)\n\n"); printf("\t\t\t 查看英语成绩排序请输入 英语 查看英语成绩排序请输入(英语 英语)\n\n"); printf("\t\t\t 查看物理成绩排序请输入 物理 查看物理成绩排序请输入(物理 物理)\n\n"); printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); printf("\t\t 请输入科目名称 "); 请输入科目名称: int a; char str1[]="数学 数学",str2[]="英语 英语",str3[]="物理 物理"; 数学 英语 物理 char str[20]; scanf("%s",str); if(strcmp(str1,str)==0){a=1;} else{if(strcmp(str2,str)==0){a=2;}

else{if(strcmp(str3,str)==0){a=3;} else{printf("\n 输入错误 请重新输入 输入错误,请重新输入 请重新输入!!\n\n"); system("pause");}} } return(a); } /******************************************************************** ****************************************/ /*******************************所有同学的成绩按数学成绩由高到低排序 所有同学的成绩按数学成绩由高到低排序 模块*************************************/ 模块 void range1(struct student *p,int size){ int i,j,k; struct student temp; for(i=0;i<size;i++){ /*用选择排序法进行排序 用选择排序法进行排序*/ 用选择排序法进行排序 k=i; for(j=i+1;j<size;j++) if(p[k].math<p[j].math){ temp=p[k]; p[k]=p[j]; p[j]=temp;} }

} /******************************************************************** ****************************************/ /*******************************所有同学的成绩按英语成绩由高到低排序 所有同学的成绩按英语成绩由高到低排序 模块*************************************/ 模块 void range2(struct student *p,int size){ int i,j,k; struct student temp; for(i=0;i<size;i++){ /*用选择排序法进行排序 用选择排序法进行排序*/ 用选择排序法进行排序 k=i; for(j=i+1;j<size;j++) if(p[k].English<p[j].English){ temp=p[k]; p[k]=p[j]; p[j]=temp;} }

} /********************************************************************

****************************************/ /*******************************所有同学的成绩按物理成绩由高到低排序 所有同学的成绩按物理成绩由高到低排序 模块*************************************/ 模块 void range3(struct student *p,int size){ int i,j,k; struct student temp; for(i=0;i<size;i++){ /*用选择排序法进行排序 用选择排序法进行排序*/ 用选择排序法进行排序 k=i; for(j=i+1;j<size;j++) if(p[k].physics<p[j].physics){ temp=p[k]; p[k]=p[j]; p[j]=temp;} }

} /******************************************************************** ****************************************/ /**************************************** 输 出 按 数学 科 目排序 结 果 模块 *****************************************/ int read_print31(struct student *p,int size){ void total_average(struct student *p,int size); void range1(struct student *p,int size); FILE *fp;int i,n=0,b=0; if((fp=fopen("按平均分排序二进制值 按平均分排序二进制值.txt","rb+"))==NULL){ 按平均分排序二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 学号 姓名 数学 英语 物理 总分 名次\n"); 平均分 名次 printf("\t---------------------------------------------------------------------------\n"); for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n); range1(p,n); for(i=0;i<n;i++) {b++; printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b); printf("\t---------------------------------------------------------------------------\n"); } printf("\n\n");

fclose(fp); return n; } /******************************************************************** ****************************************/ /**************************************** 输 出 按 英语 科 目排序 结 果 模块 *****************************************/ int read_print32(struct student *p,int size){ void total_average(struct student *p,int size); void range2(struct student *p,int size); FILE *fp;int i,n=0,b=0; if((fp=fopen("按平均分排序二进制值 按平均分排序二进制值.txt","rb+"))==NULL){ 按平均分排序二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 学号 姓名 数学 英语 物理 总分 名次\n"); 平均分 名次 printf("\t---------------------------------------------------------------------------\n"); for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n); range2(p,n); for(i=0;i<n;i++) {b++; printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b); printf("\t---------------------------------------------------------------------------\n"); } printf("\n\n"); fclose(fp); return n; } /******************************************************************** ****************************************/ /**************************************** 输 出 按 物理 科 目排序 结 果 模块 *****************************************/ int read_print33(struct student *p,int size){ void total_average(struct student *p,int size); void range3(struct student *p,int size); FILE *fp;int i,n=0,b=0;

if((fp=fopen("按平均分排序二进制值 按平均分排序二进制值.txt","rb+"))==NULL){ 按平均分排序二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 学号 姓名 数学 英语 物理 总分 名次\n"); 平均分 名次 printf("\t---------------------------------------------------------------------------\n"); for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n); range3(p,n); for(i=0;i<n;i++) {b++; printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b); printf("\t---------------------------------------------------------------------------\n"); } printf("\n\n"); fclose(fp); return n; } /******************************************************************** ****************************************/ /******************************************* 保 存 按 科 目 排 序 结 果 模 块 *******************************************/ void SAVE2(struct student *p,int size){ FILE *fp; int i,b=0; char name[20]; printf("请输入保存科目排序后的文件名 "); 请输入保存科目排序后的文件名: 请输入保存科目排序后的文件名 scanf("%s",name); if((fp=fopen(name,"w+"))==NULL){ printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } fprintf(fp,"\n\t---------------------------------------------------------------------------\n"); fprintf(fp,"\t 学号 姓名 数学 英语 物理 名次\n"); 总分 平均分 名次 fprintf(fp,"\t---------------------------------------------------------------------------\n"); fprintf(fp,"\n" ); for(i=0;i<size;i++) {b++;

fprintf(fp,"\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].Englis h); fprintf(fp,"%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b); fprintf(fp,"\t---------------------------------------------------------------------------\n"); } fclose(fp); printf("\n 文件保存成功 文件保存成功!\n\n"); } /******************************************************************** ****************************************/ /************************************输出所有值按平均分排序的结果模块 输出所有值按平均分排序的结果模块 ****************************************/

/******************************************************************** ****************************************/ /************************************输出所有值按平均分排序的结果模块 输出所有值按平均分排序的结果模块 ****************************************/

int read_print3(struct student *p,int size){ void total_average(struct student *p,int size); void range(struct student *p,int size); FILE *fp;int i,n=0,b=0; if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){ 初始值二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 学号 姓名 数学 英语 物理 总分 名次\n"); 平均分 名次 printf("\t---------------------------------------------------------------------------\n"); for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0){n++;}} total_average(p,n); range(p,n); for(i=0;i<n;i++) {b++; printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f %d\n",p[i].physics,p[i].total,p[i].average,b); printf("\t---------------------------------------------------------------------------\n"); }

printf("\n\n"); fclose(fp); return n; } /******************************************************************** ****************************************/ /*************************************** 查 找 模 块 ************************************************************/ void search(struct student *p,int size){ void total_average(struct student *p,int size); char str[20]; long c; int i,a,flag=0,n=0; printf("\n\t******************** 查 找 某 位 同 学 的 成 绩 *********************\n\n"); printf("\t\t\t 按学号查找请输入 学号 按学号查找请输入(学号 学号)\n\n"); printf("\t\t\t 按姓名查找请输入 姓名 按姓名查找请输入(姓名 姓名)\n\n"); printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* =*\n"); char str1[]="学号 学号",str2[]="姓名 姓名"; 学号 姓名 char str3[20]; while(1){ printf("\t\t 请输入查找方式 "); 请输入查找方式: scanf("%s",str3); if(strcmp(str1,str3)==0){a=1;break;} else{if(strcmp(str2,str3)==0){a=2;break;} else{printf("\n 输入错误 请重新输入 输入错误,请重新输入 请重新输入!!\n\n");} } } switch(a){ case 1: printf("\n\t 请输入学号 "); 请输入学号: scanf("%s",str); c=strtol(str,NULL,0); FILE *fp; if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){ 初始值二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } for(i=0;i<size;i++) { if(fread(&p[i],sizeof(struct student),1,fp)!=0)n++;} total_average(p,n); for(i=0;i<n;i++) if(p[i].num==c){ flag=1;

printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 学号 姓名 数学 平均分\n"); 物理 总分 平均分 printf("\t---------------------------------------------------------------------------\n"); printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average); printf("\t---------------------------------------------------------------------------\n\n"); break;} if(flag==0){printf("输入学号错误 输入学号错误!!\n");}break; 输入学号错误 case 2: printf("\n\t 请输入姓名 "); 请输入姓名: scanf("%s",str); if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){ 初始值二进制值 printf("文件名输入错误 文件名输入错误!!\n"); 文件名输入错误 } for(i=0;i<size;i++){ if(fread(&p[i],sizeof(struct student),1,fp)!=0)n++;} total_average(p,n); for(i=0;i<n;i++) if(strcmp(str,p[i].name)==0){ flag=1; printf("\n\t---------------------------------------------------------------------------\n"); printf("\t 学号 姓名 数学 平均分\n"); 物理 总分 平均分 printf("\t---------------------------------------------------------------------------\n"); printf("\t%-12d%-12s%-8.2f%-8.2f",p[i].num,p[i].name,p[i].math,p[i].English); printf("%-8.2f%-10.2f%-8.2f\n",p[i].physics,p[i].total,p[i].average); printf("\t---------------------------------------------------------------------------\n\n"); break;} if(flag==0){printf("输入姓名错误 输入姓名错误!!\n");}break; 输入姓名错误 } }

英语

英语

/******************************************************************** ****************************/

/************************************* 。 。 。 *******************************************/





。 。 。

void correct(struct student *p,int size){ void input(struct student *p,int size); int i,a=0,flag=0; FILE *fp; if((fp=fopen("初始值二进制值 1.txt","r+"))==NULL){ 初始值二进制值 printf("不能打开文件 不能打开文件\n");} 不能打开文件 printf("请输入需要修改人的学号进行修改 修改后将自动计算总分和平均分 请输入需要修改人的学号进行修改,修改后将自动计算总分和平均分 请输入需要修改人的学号进行修改 并排序!!\n"); 并排序 printf("\n\t 请输入需要修改学生的学号 "); 请输入需要修改学生的学号: scanf("%ld",&p[N].num); for(i=0;fread(&p[i],sizeof(struct student),1,fp)!=0;i++){a++;} for(i=0;i<a;i++) if(p[i].num==p[N].num){flag=1; printf("请输入新的信息 请输入新的信息!!\n\n"); 请输入新的信息 printf("请输入学号 请输入学号:"); 请输入学号 while(1){scanf("%ld",&p[i].num); if(long(p[i].num)!=p[i].num||long(p[i].num)<=0){ /*输入 输入 判断*/ 判断 printf("输入错误 学号必须为整数 请重新输入 "); 输入错误,学号必须为整数 请重新输入: 输入错误 学号必须为整数,请重新输入 fflush(stdin);} else{break;}} printf("请输入姓名 请输入姓名:");scanf("%s",p[i].name); 请输入姓名 printf("请输入数学成绩 请输入数学成绩:"); 请输入数学成绩 while(1){scanf("%f",&p[i].math); if(float(p[i].math)!=p[i].math||float(p[i].math)<=0||p[i].math>100||p[i].math <0){ printf("输入错误 数学成绩必须为 0~100 之间的数 请重新输入 "); 输入错误,数学成绩必须为 之间的数,请重新输入 请重新输入: 输入错误 fflush(stdin);} else{break;}} printf("请输入英语成绩 请输入英语成绩:"); 请输入英语成绩 while(1){scanf("%f",&p[i].English); if(float(p[i].English)!=p[i].English||float(p[i].English)<=0||p[i].English>100||p[i ].English<0){ printf("输入错误 英语成绩必须为 0~100 之间的数 请重新输入 "); 输入错误,英语成绩必须为 之间的数,请重新输入 请重新输入: 输入错误 fflush(stdin); } else{break;}} printf("请输入物理成绩 请输入物理成绩:"); 请输入物理成绩 while(1){scanf("%f",&p[i].physics); if(float(p[i].physics)!=p[i].physics||float(p[i].physics)<=0||p[i].physics>100||p[

i].physics<0){ printf("输入错误 英语成绩必须为 0~100 之间的数 请重新输入 "); 输入错误,英语成绩必须为 之间的数,请重新输入 请重新输入: 输入错误 fflush(stdin);} else{break;}}} if((fp=fopen("初始值二进制值 1.txt","w+"))==NULL){ 初始值二进制值 printf("不能打开文件 不能打开文件\n"); 不能打开文件 exit(0); } for(i=0;i<a;i++){ fwrite(&p[i],sizeof(struct student),1,fp);} fclose(fp); if(flag==0){printf("对不起 没有查找到您所输的学号 对不起!!没有查找到您所输的学号 对不起 没有查找到您所输的学号!!\n");} } /******************************************************************** ****************************/ /************************************* 。 。 。 删 除 。 。 。 *****************************************/ void delite (struct student *p,int size){ int i,a=0,flag=0; FILE *fp; printf("请输入需要删除的学号进行查找后, 请输入需要删除的学号进行查找后, 请输入需要删除的学号进行查找后 该项将自动删除并自动计算总分 和平均分及排序!!\n"); 和平均分及排序 if((fp=fopen("初始值二进制值 1.txt","rb+"))==NULL){ 初始值二进制值 printf("不能打开文件 不能打开文件\n");} 不能打开文件 printf("\n\t 请输入需要删除学生的学号 "); 请输入需要删除学生的学号: scanf("%ld",&p[N].num); for(i=0;fread(&p[i],sizeof(struct student),1,fp)!=0;i++){a++;} for(i=0;i<a;i++){ if(p[i].num==p[N].num){ for(i=i;i<a;i++){ p[i]=p[i+1];} if((fp=fopen("初始值二进制值 1.txt","w+"))==NULL){ 初始值二进制值 printf("不能打开文件 不能打开文件\n"); 不能打开文件 exit(0); } for(i=0;i<a-1;i++){ fwrite(&p[i],sizeof(struct student),1,fp);} fclose(fp); flag=1;break; } } if(flag==0){ printf("对不起 没有你找到你想删除的人 对不起!!没有你找到你想删除的人 对不起 没有你找到你想删除的人!!\n");system("pause"); }

} /******************************************************************** ****************************************/ /******************************************** 菜 单 函 数 ********************************************************/ int menu(){ int a; system("color 9F"); /*改变输出框字体和背景的颜色 改变输出框字体和背景的颜色*/ 改变输出框字体和背景的颜色 system("cls"); /*运行前清屏 运行前清屏*/ 运行前清屏 printf("\n"); printf("\t===============成绩 成绩*=*=*=*=*=*=*处理 处理=*=*=*=*=*=*=*系统 成绩 处理 系统 ===============\n"); printf("\n\t 作者 卢荣盼 作者:卢荣盼 班级:计本 班级 计本 102 学 号:1018014052\n\n"); printf("\t 此程序具有以下功能:\n"); 此程序具有以下功能: printf("\t============================================================= =========\n"); printf("\n\t |***| (1)输入同学的相关信息 |***| (7)查找某位 输入同学的相关信息 查找某位 同学的成绩 \n\n"); printf("\t |=*=| (2)浏览初始学生信息 |=*=| (8)按学号修改 浏览初始学生信息 按学号修改 某位同学的成绩\n\n"); 某位同学的成绩 printf("\t |===| (3)求初始学生总分及平均分 |===| (9)按学号删除 求初始学生总分及平均分 按学号删除 某位同学的信息\n\n"); 某位同学的信息 printf("\t |=*=| (4)查看初始学生平均分排序 |=*=| (0)浏览所有同 查看初始学生平均分排序 浏览所有同 学的信息及排名\n\n"); 学的信息及排名 printf("\t |===| (5)按科目排序存入所有成绩 |===| (10)退出程序 按科目排序存入所有成绩 退出程序 \n\n"); printf("\t |***| (6)插入新的成绩 \n\n"); 插入新的成绩 printf("\t=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= *=*=*=*=*\n"); printf("\t 请选择操作序号 请选择操作序号(0-7):"); /*选择操作项 选择操作项*/ 选择操作项 scanf("%d",&a); /*输入选择项 输入选择项*/ 输入选择项 return a; } /******************************************************************** ****************************************/ /********************************************* 主 函 数 ********************************************************/ void main(){

int b=0,n; struct student p[N]; while(1){ switch(menu()){ case 1: system("color B0 "); system("cls"); printf("请输入要保存的初始数据的个数 "); 请输入要保存的初始数据的个数: 请输入要保存的初始数据的个数 while(1){scanf("%d",&n); if(int(n)!=n||long(n)<=0){ /*输入判断 输入判断*/ 输入判断 printf("输入错误 个数必须为整数 请重新输入 "); 输入错误,个数必须为整数 请重新输入: 输入错误 个数必须为整数,请重新输入 fflush(stdin);} else{break;}} input(p,n); /*输入初始同学信息 输入初始同学信息*/ 输入初始同学信息 save(p,n);save0(p,n);SAVE(p,n); /*保存初始同学信息 保存初始同学信息 */ system("pause"); 续运行*/ 续运行 break; case 2: system("color F9"); system("cls"); printf("\n\n 读取数据如下 读取数据如下:\n"); read_print(p,N); /*读取并输出初始值数据 读取并输出初始值数据*/ 读取并输出初始值数据 system("pause");break; case 3: system("color d0 "); system("cls"); printf("\n\n\n\n 录入初始学生的总分平均分如下表 \n"); 录入初始学生的总分平均分如下表: read_print1(p,N); /*输出初始值每位同学的总分和平均 输出初始值每位同学的总分和平均 分*/ system("pause");break; case 4: system("color F0 "); system("cls"); printf("\n\n\n\n 录入初始学生成绩按平均分由高到低排序如下 录入初始学生成绩按平均分由高到低排序如下: \n\n"); SAVE1(p,read_print2(p,N)); 排名*/ 排名 save1(p,read(p,N)); system("pause");break; case 5:switch(choose()){ case 1: printf("\n 所有同学的成绩按数学成绩由高到低排 所有同学的成绩按数学成绩由高到低排 序如下:\n\n"); 序如下 /*输出和保存初始值每位同学的平均分 输出和保存初始值每位同学的平均分 /*程序运行至此暂停,然后按任意键可继 程序运行至此暂停, 程序运行至此暂停

SAVE2(p,read_print31(p,N)); 模块*/ 模块

/*保存输出 保存输出

system("pause");break; case 2: printf("\n 所有同学的成绩按英语成绩由高到低 排序如下:\n\n"); 排序如下 SAVE2(p,read_print32(p,N)); 模块*/ 模块 system("pause");break; case 3: printf("\n 所有同学的成绩按英语成绩由高到低排序 如下:\n\n"); 如下 SAVE2(p,read_print33(p,N)); 模块*/ 模块 system("pause");break;}break; case 6: system("color d0 "); system("cls"); printf("插入前学生信息如下 插入前学生信息如下:\n"); 插入前学生信息如下 read_print3(p,N); printf("请输入插入学生信息 请输入插入学生信息:\n\n"); 请输入插入学生信息 input(p,1);save0(p,1); printf("插入后学生信息如下 插入后学生信息如下:\n"); 插入后学生信息如下 SAVE1(p,read_print3(p,N)); system("pause"); break; case 7:system("color fc "); system("cls"); search(p,N); system("pause");break; case 8: system("color E0 "); system("cls"); printf("修改前学生信息如下 修改前学生信息如下:\n"); 修改前学生信息如下 read_print3(p,N); correct(p,N); printf("修改后学生信息如下 修改后学生信息如下:\n"); 修改后学生信息如下 SAVE1(p,read_print3(p,N)); system("pause");break; case 9:system("color A0 "); system("cls"); printf("删除前学生信息如下 删除前学生信息如下:\n"); 删除前学生信息如下 read_print3(p,N); delite(p,N); printf("删除后学生信息如下 删除后学生信息如下:\n"); 删除后学生信息如下 SAVE1(p,read_print3(p,N)); /*保存输出 保存输出 /*保存输出 保存输出

system("pause");break; case 0: system("color e0 "); system("cls"); printf("读取数据如下 读取数据如下:\n"); 读取数据如下 read_print3(p,N); system("pause");break; case 10:system("color E0 ");{printf("\n 谢 谢 使 用 程 序 , 谢 /*程序终止 谢 !!\n\n");}system("pause");exit(0); 程序终止 */ default: system("color fc ");{printf("\n 菜 单 选 择 错 误 , 请 重 新 选 择!!\n\n");}system("pause");break; } } }


相关文档

通讯录管理 C程序设计源代码不用链表 完整版 有添加 删除 查找 修改等功能
学生成绩管理系统链表版C代码包含所有功能适合初学者借鉴
学生成绩管理系统源代码 用单向链表实现
学生成绩管理系统(链表版)
C语言程序设计源程序:学生成绩管理
C语言程序设计 学生成绩管理系统源代码
C语言学生成绩管理系统链表版
学生成绩管理系统(链表)
C语言单向链表的建立删除插入查找交换逆序输出释放等代码
循环链表C++代码 含注释级程序图解 实现信息管理系统 插入,删除,查询,文件读取,存储,有序归并,输出
电脑版