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].chineseif(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].mathif(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].englishif(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;jp[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);/