版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
针对每一项功能,有着相应的实现方法。第一项功能,实现对两个文件数据进行合并,生成新文件3.txt。调用函数Unitedfile()来实现,函数以读的方式打开1.txt文件,以写的方式打开3.txt文件,从1.txt读入一个数据并写入3.txt文件,直到遇到1.txt文件结束。关闭1.txt文件,再以读的方式打开2.txt文件,用上述方式直到遇到2.txt文件结束。关闭2.txt,3.txt文件。实现对于文件的合并。voidUnitedfile()//合并1.txt和2.txt为3.txt{ FILE*fp,*p; Studentstudd; fp=fopen("1.txt","r");//以读的方式打开1.txt p=fopen("3.txt","w");//以写的方式打开3.txt while(fscanf(fp,"%s%s%d%d%d",,studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF) { fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",,studd.id,studd.chinese,studd.math,studd.english); }//读取1.txt的数据进入结构体中,写入3.txt,继续读取直结束 fclose(fp);//关闭文件1.txt fp=fopen("2.txt","r");//以写的方式打开2.txt while(fscanf(fp,"%s%s%d%d%d",,studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF) { fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",,studd.id,studd.chinese,studd.math,studd.english); } fclose(fp); fclose(p);}第二项功能,抽取出三科成绩中有补考的学生并保存在一个新文件4.txt。调用函数findout()来实现。函数以读的方式打开3.txt文件,以写的方式打开4.txt文件。读入3.txt文件的一个数据到结构体studd中,判断学生信息中语、数和英语中是否具有不及格的,如果有,则将数据写入4.txt中,直至遇到3.txt文件结束。voidfindout()//抽取出三科成绩中有补考的学生并保存在一个新文件4.txt{ FILE*fp,*p; Studentstudd; fp=fopen("3.txt","r"); p=fopen("4.txt","w");//从3.txt中读入学生数据进结构体,判断是否有不及格的课程,如果有,则写入文件4.txt中 while(fscanf(fp,"%s%s%d%d%d",,studd.id,&studd.chinese,&studd.math,&studd.english)!=EOF) { if(studd.chinese<60||studd.english<60||studd.math<60) { fprintf(p,"%-6s%-6s%-6d%-6d%-6d\n",,studd.id,studd.chinese,studd.math,studd.english); } } fclose(fp); fclose(p);}第三项功能,对合并后的文件3.txt中的数据按总分降序排序。调用函数sortfile()来实现。函数提供了两种排序方法,通过调用函数kuaisu()来实现快速排序,通过调用函数xuanze()来实现选择排序。voidsortfile()//提供两种排序方法{ charc; cout<<"请选择排序方法:"<<endl; cout<<"1.选择排序"<<endl; cout<<"2.快速排序"<<endl; cin>>c; switch(c) { case'1': xuanze();//选择排序 break; case'2': kuaisu();//快速排序 break; }}选择排序voidxuanze()//对合并后的文件3.txt中的数据按总分降序排序{ intj,k,max1,sum1,sum2,q; i=0; Studenttemp; FILE*fp; fp=fopen("3.txt","r"); i=0; while(fscanf(fp,"%s%s%d%d%d",stud[i].name,stud[i].id,&stud[i].chinese,&stud[i].math,&stud[i].english)!=EOF) { i++; }//从3.txt中读入数据进结构体数组stud中 fclose(fp); for(j=0;j<i-1;j++)//对结构体数组中的数据进行选择排序 { max1=j; sum1=stud[j].math+stud[j].english+stud[j].chinese; for(k=j+1;k<i;k++) { sum2=stud[k].math+stud[k].english+stud[k].chinese; if(sum1<sum2) { max1=k; sum1=sum2; } } if(max1!=j) { temp=stud[max1]; stud[max1]=stud[j]; stud[j]=temp; } stud[j].sum=sum1; } fp=fopen("3.txt","w");//将排序后的数据写入3.txt中 for(q=0;q<i;q++) { fprintf(fp,"%-8s%-8s%-8d%-8d%-8d%-8d\n",stud[q].name,stud[q].id,stud[q].chinese,stud[q].math,stud[q].english,stud[q].sum); } fclose(fp);}快速排序intPartition(intlow,inthigh){ intpivotkey; Studenttemp; temp=stud[low]; pivotkey=stud[low].sum; while(low<high) { while(low<high&&stud[high].sum<=pivotkey)--high; stud[low]=stud[high]; while(low<high&&stud[low].sum>=pivotkey)++low; stud[high]=stud[low]; } stud[low]=temp; returnlow;}voidQSort(intlow,inthigh)//快速排序{ intprivotloc; if(low<high) { privotloc=Partition(low,high); QSort(low,privotloc-1); QSort(privotloc+1,high); }}voidkuaisu()//读取文件,快速排序,将结果写入3.txt{ inti,low,high; FILE*fp; fp=fopen("3.txt","r"); i=0; while(fscanf(fp,"%s%s%d%d%d",stud[i].name,stud[i].id,&stud[i].chinese,&stud[i].math,&stud[i].english)!=EOF) { stud[i].sum=stud[i].english+stud[i].chinese+stud[i].math; i++; }//从文件3.txt中读入数据进结构体数组stud中 fclose(fp); low=0; high=i-1; QSort(low,high);//快速排序 fp=fopen("3.txt","w");//将排序后的数据写入3.txt中 for(intj=0;j<i;j++) { fprintf(fp,"%-8s%-8s%-8d%-8d%-8d%-8d\n",stud[j].name,stud[j].id,stud[j].chinese,stud[j].math,stud[j].english,stud[j].sum); } fclose(fp);}第四项功能,输入一个学生姓名后,能查找到此学生的信息并输出结果。调用函数findoutstudent()来实现。函数也提供了两种查找方法,通过调用函数derectfindoutstudent()实现从文件从3.txt中逐个读入数据,再进行查找判断,如果找到所需要的数据,则查找结束,否则继续查找直至文件结束。autofindoutstudent()在进行第三步的过程中,已经把3.txt中的学生数据读入了结构体数组当中,调用函数autofindoutstudent()直接从结构体中进行查找。voidderectfindoutstudent()//输入一个学生姓名,查找到此学生的信息并输出结果{ charNAME[30]; intflag=0; FILE*fp; fp=fopen("3.txt","r"); cin>>NAME; while(fscanf(fp,"%s%s%d%d%d%d",stud[1].name,stud[1].id,&stud[1].chinese,&stud[1].math,&stud[1].english,&stud[1].sum)!=EOF) { if(strcmp(stud[1].name,NAME)==0) { flag=1; cout<<"-------姓名-------学号-------语文-------数学-------英语-------总分--------"<<endl; cout<<""<<stud[1].name<<""<<stud[1].id<<""; cout<<stud[1].chinese<<""<<stud[1].math<<""<<stud[1].english<<""<<stud[1].sum<<endl; break; } } if(flag==0) cout<<"无此学生相关信息"<<endl; fclose(fp);}voidautofindoutstudent()//从结构体数组中查找{ intn,flag=0,k; charName[30]; n=i-1; cin>>Name; for(k=1;k<=n;k++) { if(strcmp(stud[k].name,Name)==0) { flag=1; cout<<"-------姓名-------学号-------语文-------数学-------英语-------总分--------"<<endl; cout<<""<<stud[k].name<<""<<stud[k].id<<""; cout<<stud[k].chinese<<""<<stud[k].math<<""<<stud[k].english<<""<<stud[k].sum<<endl; break; } }if(flag==0) cout<<"无此学生相关信息"<<endl;}voidfindoutstudent()//提供两种查找方法{ charc; cout<<"请选择查找方法"<<endl; cout<<"1.从文件3中直接查找"<<endl; cout<<"2.在运行第三步的基础上查找"<<endl; cin>>c; cout<<"请输入学生姓名:"; if(sign1==0&&c=='2') { cout<<"请执行操作3后再执行此项操作!"<<endl; return; } switch(c) { case'1': derectfindoutstudent();//从文件3中直接查找 break; case'2': autofindoutstudent();//从结构体数据中直接查找 break; }}第五项功能,通过调用函数exit()退出。main()Unitedfile()fmain()Unitedfile()findoutstudent()sortfile()derectfindoutstudent()findout()exit(0)autofindoutstudent()xuanze()kuaisu()4调试问题在调用derectfindoutstudent()实现查找的功能时,出现错误信息:原因,文件名使用错误:voidderectfindoutstudent()//输入一个学生姓名,查找到此学生的信息并输出结果{ c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床心房颤动生活管理到规范诊疗等科学管理要点
- 婺城区2022年张六线局部拓宽改造工程招标文件
- 项目负责人考核情况
- (辅导班)2026年新高三数学暑假讲义(基础班)第04讲 对数与对数函数(原卷版)
- 南通市2026年高三3月份第一次模拟考试语文试卷含解析
- 化工总控工职业技能鉴定考试复习题库(附答案)
- 【我国上市公司股价波动率对公司债收益率的影响实证研究11000字(论文)】
- 【2025】肇庆市四会市龙甫镇专职消防队人员招聘考试真题
- 26年银发持续改进能力考核标准课件
- 26年居家照护核心原则课件
- 2025年高考(海南卷)地理试题(学生版+解析版)
- 2025年兵工杯知识竞赛题库及答案
- 2025年《检验检测不确定度评定》知识考试题库及答案解析
- 福建医卫系统事业单位招聘《护理学专业知识》近年考试真题题库资料及答案
- 山水游记类-课外短小文言文阅读常考考点 预测练 2025年中考语文三轮复习备考
- 2025广西国控集团秋季招聘笔试考试备考试题及答案解析
- 2025农村集体土地使用权买卖合同范本
- 气管镜健康宣教
- 人力资源管理数字化操作手册
- 澄迈县2025年中医确有专长和出师考核(中医医师资格考试)历届真题及答案
- ST段抬高型心肌梗死诊断治疗指南汇编
评论
0/150
提交评论