include.docx

上传人:b****5 文档编号:8230684 上传时间:2023-01-30 格式:DOCX 页数:43 大小:29.54KB
下载 相关 举报
include.docx_第1页
第1页 / 共43页
include.docx_第2页
第2页 / 共43页
include.docx_第3页
第3页 / 共43页
include.docx_第4页
第4页 / 共43页
include.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

include.docx

《include.docx》由会员分享,可在线阅读,更多相关《include.docx(43页珍藏版)》请在冰豆网上搜索。

include.docx

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);/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1