学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能.docx
- 文档编号:9645425
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:32
- 大小:20.74KB
学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能.docx
《学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统完整版C程序设计源代码不用链表有添加删除查找修改等功能.docx(32页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统完整版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"/*头文件名,因为程序中用到了字符串函数*/
#defineN1000
/*************************************************************************************************/
/*****************************************定义结构体模块******************************************/
structstudent{
longnum;/*定义学生学号为长整型*/
charname[20];/*定义姓名为字符型,占12个字符*/
floatmath,English,physics,total,average;
floatTOT_math,TOT_English,TOT_physics,TOT_total,TOT_aver;
floataver_math,aver_English,aver_physics,aver_total,aver_average;
}student;/*定义结构体名称为student*/
/*************************************************************************************************/
/****************************************输入初始值模块*******************************************/
voidinput(structstudent*p,intsize){
inti;
for(i=0;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"模块*************************************/ voidsave(structstudent*p,intsize){/*保存模块*/ FILE*fp;inti; if((fp=fopen("初始值二进制值.txt","wb+"))==NULL){/*建立文件*/ printf("cannotopenthefile\n"); } for(i=0;i fwrite(&p[i],sizeof(student),1,fp);}/*快写函数,写到磁盘中为二进制数*/ fclose(fp);/*关闭文件*/ } /************************************************************************************************************/ /*************************************保存初始值到"初始二进制值.txt"模块*************************************/ voidsave0(structstudent*p,intsize){/*保存模块*/ FILE*fp;inti; if((fp=fopen("初始值二进制值1.txt","ab+"))==NULL){/*建立文件*/ printf("cannotopenthefile\n"); } for(i=0;i fwrite(&p[i],sizeof(student),1,fp);}/*快写函数,写到磁盘中为二进制数*/ fclose(fp);/*关闭文件*/ } /************************************************************************************************************/ /******************************************保存初始值到可浏览文件模块****************************************/ voidSAVE(structstudent*p,intsize){ FILE*fp; inti,b=0; charname[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 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"); } /************************************************************************************************************/ /******************************************读取初始值模块****************************************************/ intread(structstudent*p,intsize){ FILE*fp;inti,n=0; if((fp=fopen("初始值二进制值.txt","rb+"))==NULL){ printf("文件名输入错误! ! \n");} for(i=0;i if(fread(&p[i],sizeof(structstudent),1,fp)! =0){n++;}} fclose(fp); returnn; } /************************************************************************************************************/ /******************************************读取输出初始值模块************************************************/ voidread_print(structstudent*p,intsize){ FILE*fp;inti,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 if(fread(&p[i],sizeof(structstudent),1,fp)! =0){n++;}} for(i=0;i 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); } /************************************************************************************************************/ /*********************************************计算总分和平均分模块*******************************************/ voidtotal_average(structstudent*p,intsize){/*求每位同学的总分和平均分模块*/ inti; for(i=0;i p[i].total=p[i].math+p[i].English+p[i].physics; /*每个同学的总分等于三科成绩之和*/ p[i].average=p[i].total/3;/*每个同学的平均分等于总分的1/3*/ } } /************************************************************************************************************/ /**************************************输出初始值总分和平均分模块*******************************************/ voidread_print1(structstudent*p,intsize){ voidtotal_average(structstudent*p,intsize); FILE*fp;inti,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 if(fread(&p[i],sizeof(structstudent),1,fp)! =0){n++;}} total_average(p,n); for(i=0;i printf("\t%-6d%-12d%-12s%-8.2f%-8.2f",b,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"); } printf("\n\n"); fclose(fp); } /************************************************************************************************************/ /***************************************将初始值按平均分排序模块*********************************************/ voidrange(structstudent*p,intsize){/*所有同学的成绩按平均分由高到低排序模块*/ inti,j,k; structstudenttemp;/*定义一个student类型的变量备用*/ for(i=0;i k=i; for(j=i+1;j if(p[k].average temp=p[k]; p[k]=p[j]; p[j]=temp;} } } /************************************************************************************************************/ /************************************输出初始值按平均分排序的结果模块****************************************/ intread_print2(structstudent*p,intsize){ voidtotal_average(structstudent*p,intsize); voidrange(structstudent*p,intsize); FILE*fp;inti,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 if(fread(&p[i],sizeof(structstudent),1,fp)! =0){n++;}} total_average(p,n); range(p,n); for(i=0;i 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); returnn; } /************************************************************************************************************/ /********************保存初始值按平均分排序后结果到"初始值按平均分排序二进制值.txt"模块**********************************/ voidsave1(structstudent*p,intsize){/*保存模块*/ FILE*fp;inti; if((fp=fopen("按平均分排序二进制值.txt","wb+"))==NULL){/*建立文件*/ printf("cannotopenthefile\n"); } for(i=0;i fwrite(&p[i],sizeof(student),1,fp);}/*快写函数,写到磁盘中为二进制数*/ fclose(fp);/*关闭文件*/ } /************************************************************************************************************/ /******************************************读取排序后结果模块************************************************ intread1(structstudent*p,intsize){ FILE*fp;inti,n=0; if((fp=fopen("按平均分排序二进制值.txt","r+"))==NULL){ printf("文件名输入错误! ! \n");} for(i=0;i if(fread(&p[i],sizeof(structstudent),1,fp)! =0){n++;}} fclose(fp); returnn; } /************************************************************************************************************/ /*******************************保存初始值按平均分排序后结果到可浏览文件模块*********************************/ voidSAVE1(structstudent*p,intsize){ FILE*fp; inti,b=0; charname[20]; printf("请输入保存排序结果的文件名: "); scanf("%s",name); if((fp=fopen(name,"w+"))==NULL){ printf("文件名输入错误! ! \n"); } fprintf(fp,"\n\t-----------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 完整版 程序设计 源代码 不用 链表有 添加 删除 查找 修改 功能