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