include.docx
- 文档编号:8230684
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:43
- 大小:29.54KB
include.docx
《include.docx》由会员分享,可在线阅读,更多相关《include.docx(43页珍藏版)》请在冰豆网上搜索。
include
#include
#include
#include
#include
usingnamespacestd;
stringstr[5];//定义一个str字符串来吸收文件2.txt中重复的标题
intaNum=0;//使用全局变量定义学生的人数
structadent//构建结构体
{
charname[10];//姓名
intid;
intchinese;
intmath;
intenglish;
intsum;
}a[50],temp;
//实现对文件1.txt和文件2.txt数据的合并,生成文件3.txt
voidMerge()
{
char*f1="d:
\\1.txt";
char*f2="d:
\\2.txt";
char*f3="d:
\\3.txt";
ifstreaminFile1(f1);//从磁盘读取文件1.txt
ifstreaminFile2(f2);//从磁盘读取文件2.txt
ofstreamoutFile(f3);//写入信息到文件3.xtx
outFile< for(inti=0;! inFile2.eof()==true;i++)//遍历文件2.txt的所有数据 { stringstr; getline(inFile2,str);//读取第一行信息放到str中 if(i==0)continue;//跳过第一行 outFile< } inFile1.close();//关闭文件f1 inFile2.close(); outFile.close(); ifstreamf(f3); cout<<"**文件已生成,合并后数据如下**"< cout< }; //把文件3.txt中的数据读出到结构体中,便于对数据的操作 voidFillStruct(adent*p) { inti=aNum,j=0;//这里让i=aNum,假如先添加数据,后合并,则结构体下标中人数i不是从0开始计,而是从先输入的数据的个数aNum开始的 ifstreaminfile("D: \\3.txt",ios: : in);//以读的方式打开文件3.txt if(! infile)//测试是否成功打开 { cerr<<"openerror! "< exit (1); } while(! infile.eof())//遍历infile,只把数据写入进去,过滤掉第一行的头标题 { while(j<5)//用一个str数组把文件3.txt中的头标题给吸收进去 {infile>>str[j]; j++; } //把磁盘中的文件读出来写入到结构体中 infile>>p[i].name>>p[i].id>>p[i].chinese>>p[i].math>>p[i].english; aNum++; i++; } aNum=aNum-1;//数据读完后因光标移到下一行,等于是多读了一行,所以真实的人数要比计数减一(不知道理解的对不? ) infile.close();//关闭文件 }; //抽取出三科成绩中有补考的学生并保存在一个新文件4.txt intFailList(adent*p) { /*如果先开始进行的操作不是合并或者添加数据,那么其他的操作将无法进行,因为结构体中没有学生数据,返回主菜单*/ if(aNum==0) { cout<<"请先合并或者输入数据"< return0; } ofstreamin; in.open("d: \\4.txt",ios: : trunc);//如不空则清空 in<<"补考名单"< for(inti=0;i { if(p[i].chinese<60||p[i].english<60||p[i].math<60) { in< } } }; voidsum(adent*p)//求总和 { for(inti=0;i { p[i].sum=p[i].chinese+p[i].english+p[i].math; } } voidtraversal(adent*p)//遍历输出学生数据 { cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"语文"<<'\t'<<"数学"<<'\t'<<"英语"<<'\t'<<"总分"< for(inti=0;i { cout< } } //对学生总分按照从高到低的顺序排列 intSort(adent*p) { if(aNum==0) { cout<<"请先合并或者输入数据"< return3; } sum(p); intflag=0;//设标识位 do{ cout<<"请输入排序方式,输入“1”冒泡排序,输入“2”直接插入排序"< cin>>flag; if(flag==1)//冒泡 { for(inti=0;i { for(intk=i;k { if(p[k].sum { temp=p[k]; p[k]=p[k+1]; p[k+1]=temp; } } } traversal(p);//输出排序后的结果 return1; } if(flag==2)//直接插入 { for(inti=1;i { temp=p[i];//将要比较的关键数赋给哨兵temp intj=i-1; while(j>=0&&temp.sum>p[j].sum)//直到越界或者把哨兵的值和j的值进行比较 { p[j+1]=p[j];//如果J的值比哨兵的值小,则把j的值向后移动 j--;//j向前移,循环进行比较 } p[j+1]=temp;//直到找到temp的值比j的值小,就把哨兵里的值放在j得后面 } traversal(p); return1; } if(flag! =1&&flag! =2) { cout<<"输入错误,请重新输入"; flag=3; } }while(flag=3); } //输入一个学生姓名后,能查找到此学生的信息并输出结果 intSelect(adent*p) { if(aNum==0) { cout<<"请先合并或者输入数据"< return3; } inti=0; cout<<"请输入查询的姓名: "; charsname[10]; cin>>sname; while(i { if(strcmp(sname,p[i].name)==0)//通过字符串的比较来搜索要查找的姓名 { cout<<"姓名"<<'\t'<<"学号"<<'\t'<<"语文"<<'\t'<<"数学"<<'\t'<<"英语"< cout< return1; } else { i++; if(i==aNum) { cout<<"无此学生返回主菜单"< return0; } } }//while } //统计输出各门课程的平均分,最高分、最低分 //统计各门课程优秀、良好、中等、及格、不及格的人数及百分比 intStatistics(adent*p) {if(aNum==0) { cout<<"请先合并或者输入数据"< return0; } intflag=0; cout<<"请输入您想进行统计的科目,语文输入“1”,数学输入“2”,英语输入“3”"< cin>>flag; if(flag==1) { floattempmax=0,tempmin=100,tempsum=0,tempgood=0,tempnormal=0,tempbad=0; for(inti=0;i { if(p[i].chinese>tempmax)tempmax=p[i].chinese;//找到最高分 if(p[i].chinese if(p[i].chinese>=85)tempgood++;//找到优秀的人数 if(p[i].chinese>=60&&p[i].chinese<85)tempnormal++;//中等的人数 if(p[i].chinese<60)tempbad++;//不及格的人数 tempsum=tempsum+p[i].chinese;//语文的总分 } cout<<"语文成绩平均分为: "< "< "< cout<<"优秀的人数: "< "< "< cout<<"优秀(大于等于85)百分比为: "< "< "< } if(flag==2) { floattempmax=0,tempmin=100,tempsum=0,tempgood=0,tempnormal=0,tempbad=0; for(inti=0;i { if(p[i].math>tempmax)tempmax=p[i].math; if(p[i].math if(p[i].math>=85)tempgood++; if(p[i].math>=60&&p[i].math<85)tempnormal++; if(p[i].math<60)tempbad++; tempsum=tempsum+p[i].math; } cout<<"数学成绩平均分为: "< "< "< cout<<"优秀的人数: "< "< "< cout<<"优秀(大于等于85)百分比为: "< "< "< } if(flag==3) { floattempmax=0,tempmin=100,tempsum=0,tempgood=0,tempnormal=0,tempbad=0; for(inti=0;i { if(p[i].english>tempmax)tempmax=p[i].english; if(p[i].english if(p[i].english>=85)tempgood++; if(p[i].english>=60&&p[i].english<85)tempnormal++; if(p[i].english<60)tempbad++; tempsum=tempsum+p[i].english; } cout<<"英语成绩平均分为: "< "< "< cout<<"优秀的人数: "< "< "< cout<<"优秀(大于等于85)百分比为: "< "< "< } }; //添加数据 voidadda(adent*p) { intaid=0,ac=0,am=0,ae=0;charaname[10]; cout<<"请输入学号: "< cin>>aid; p[aNum].id=aid; cout<<"请输入姓名: "< cin>>aname; strcpy(p[aNum].name,aname); cout<<"请输入语文成绩: "< cin>>ac; p[aNum].chinese=ac; cout<<"请输入数学成绩: "< cin>>am; p[aNum].math=am; cout<<"请输入英语成绩: "< cin>>ae; p[aNum].english=ae; cout<<"录入成功"< aNum++;//学生人数 } //删除数据 intdela(adent*p) { if(aNum==0) { cout<<"请先合并或者输入数据"< return3; } inti=0,aid=0; cout<<"请输入要删除学生的学号"< cin>>aid; while(i { if(p[i].id==aid)//找到要删除的id { for(intj=i;j p[i]=p[i+1];//向前移动一位 aNum--;//人数减一 cout<<"删除成功"< return1; } else { i++; if(i==aNum) { cout<<"无此学生返回主菜单"< return0; } } }//while } //修改数据 intaltera(adent*p) { if(aNum==0) { cout<<"请先合并或者输入数据"< return3; } intaid=0,ac=0,am=0,ae=0,i=0;charaname[10]; cout<<"请输入要修改学生的学号"< cin>>aid; while(i { if(p[i].id==aid) { cout<<"请输入新姓名: "< cin>>aname; strcpy(p[aNum].name,aname); cout<<"请输入新语文成绩: "< cin>>ac; p[aNum].chinese=ac; cout<<"请输入新数学成绩: "< cin>>am; p[aNum].math=am; cout<<"请输入新英语成绩: "< cin>>ae; p[aNum].english=ae; cout<<"修改成功"< return1; } else { i++; if(i==aNum) { cout<<"无此学生返回主菜单"< return0; } } }//while } //菜单 voidmenu() { cout<<"-------------------------------学生成绩管理系统---------------------------------"< cout<<"1: 对文件进行合并生成3.txt(在D盘下)"< cout<<"2: 添加数据"< cout<<"3: 修改数据"< cout<<"4: 删除数据"< cout<<"5: 按姓名查找某一学生成绩"< cout<<"6: 生成需补考学生名单4.txt(在D盘下)"< cout<<"7: 对学生成绩进行排序"< cout<<"8: 进行各科成绩的统计(平均分,最高分,最低分,成绩层次分布)"< cout<<"9: 退出"< cout<<"--------------------------------------------------------------------------------"< } //主函数 voidmain(){ system("color79");//系统颜色 intchoice; do { menu(); cout<<"请输入您需要操作对应阿拉伯数字(1~9)"< cin>>choice; switch(choice) { case1: Merge(); FillStruct(a); break; case2: adda(a); break; case3: altera(a); break; case4: dela(a); break; case5: Select(a); break; case6: FailList(a); break; case7: Sort(a); break; case8: Statistics(a); break; case9: exit(0); break; }//switch }while (1); } #include #include #include #include usingnamespacestd; stringstr[5];//定义一个str字符串来吸收文件2.txt中重复的标题 intaNum=0;//使用全局变量定义学生的人数 structadent//构建结构体 { charname[10];//姓名 intid; intchinese; intmath; intenglish; intsum; }a[50],temp; //实现对文件1.txt和文件2.txt数据的合并,生成文件3.txt voidMerge() { char*f1="d: \\1.txt"; char*f2="d: \\2.txt"; char*f3="d: \\3.txt"; ifstreaminFile1(f1);//从磁盘读取文件1.txt ifstreaminFile2(f2);//从磁盘读取文件2.txt ofstreamoutFile(f3);//写入信息到文件3.xtx outFile< for(inti=0;! inFile2.eof()==true;i++)//遍历文件2.txt的所有数据 { stringstr; getline(inFile2,str);//读取第一行信息放到str中 if(i==0)continue;//跳过第一行 outFile< } inFile1.close();//关闭文件f1 inFile2.close(); outFile.close(); ifstreamf(f3); cout<<"**文件已生成,合并后数据如下**"< cout< }; //把文件3.txt中的数据读出到结构体中,便于对数据的操作 voidFillStruct(adent*p) { inti=aNum,j=0;//这里让i=aNum,假如先添加数据,后合并,则结构体下标中人数i不是从0开始计,而是从先输入的数据的个数aNum开始的 ifstreaminfile("D: \\3.txt",ios: : in);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- include