永发信息网

c++ 综合考评优秀生选拔辅助系统

答案:2  悬赏:0  手机版
解决时间 2021-04-13 02:44

有某班三门课的成绩:语文,数学,英语,格式如下:

学号 语文 数学 英语
2008200901 70 65 76
2008200902 80 56 76
2008200903 70 34 67
2008200904 90 57 45
2008200905 88 56 56
2008200906 65 76 55
2008200907 70 66 76
2008200908 80 57 76
2008200909 70 32 67
2008200910 90 58 45
2008200911 87 57 56
2008200912 65 76 55

要求
1、在屏幕上输出如下格式成绩表,表格线可不要:
成绩表
学号 语文 数学 英语 总分 名次
2008200901 70 65 76 211 4
2008200902 80 56 76 212 3
2008200903 70 34 67 171 10
2008200904 90 57 45 192 9
2008200905 88 56 56 200 6
2008200906 65 76 55 196 7
2008200907 70 66 76 212 2
2008200908 80 57 76 213 1
2008200909 70 32 67 169 11
2008200910 90 58 45 193 8
2008200911 87 57 56 200 5
2008200912 65 76 55 196 7

其中的总分为每人三项成绩之和,名次按如下方式产生:
1)先按总分降序排名,总分高的排前面;
2)总分相同情况下,按数学成绩降序排名;
3)总分、数学成绩都相同者则名次并列。
2、按名次选拔总人数的20%作为优秀生,将其学号按名次保存到指定文件中去。
【输入】
输入文件名称为input3.txt,包含一组测试数据。第一行为一个整数C(1<=C<=200),
表示人数,接下来有C 行数据,每行数据分三列,分别对应语文,数学,英语成绩,各数据之间用空格分开。
【输出】
屏幕上输出上述格式成绩表,并且按名次输出优秀生学号到文件output3.txt 中去,每个学号一行。

最佳答案

帮你写了个. 你可以看看. 测试通过. 满意还请采纳..


#include <iostream>
#include <fstream>
#include <string>
using namespace std;


class student
{
public:

friend void Set_Input(int C,student stu[]);

friend void Print(int C,student stu[]);

friend void Taxis(int C,student stu[]);

friend void Set_Ranking(int C,student stu[]);

friend void Write(int C,student str[],string filename);


private:
int Sequence_number; //学号
int Ranking; //名次
float Total_score; //总分


float Chinese; //语文
float Math; //数学
float English; //英语
};


void change(student &stu1,student &stu2)
{
student t;
t=stu1; stu1=stu2; stu2=t;
}


void Set_Input(int C, student stu[]){

int xuehao=2008200901;
for(int i=0;i<C;++i)
{
cin>>stu[i].Chinese>>stu[i].Math>>stu[i].English;


stu[i].Sequence_number=xuehao+i;
stu[i].Total_score=stu[i].Chinese+stu[i].English+stu[i].Math;
}

}


void Print(int C, student stu[]){

cout<<"成绩表"<<endl
<<" 学号\t语文\t数学\t英语\t总分\t名次"<<endl;
for(int i=0;i<C;++i)
{
cout<<stu[i].Sequence_number<<'\t'<<stu[i].Chinese<<'\t'<<stu[i].Math<<'\t'<<stu[i].English
<<'\t'<<stu[i].Total_score<<'\t'<<stu[i].Ranking<<endl;
}
}


void Taxis(int C,student stu[]){


for(int i=0;i<C-1;++i)
{
for(int j=i+1;j<C;++j)
{
if(stu[i].Total_score==stu[j].Total_score)
{
if(stu[i].Math<stu[j].Math)
{
change(stu[i],stu[j]);
}
}
else if(stu[i].Total_score<stu[j].Total_score)
{
change(stu[i],stu[j]);
}
}
}
}


void Set_Ranking(int C, student stu[]){


int cnt=1;
for(int i=0;i<C;++i)
{
if(stu[i].Total_score==stu[i+1].Total_score)
{
if(stu[i].Math==stu[i+1].Math)
{
stu[i].Ranking=cnt;
stu[i+1].Ranking=cnt;
++i;
}
else
stu[i].Ranking=cnt;
}
else
stu[i].Ranking=cnt;
cnt++;
}
}


void Write(int C, student stu[], string filename){


ofstream ofs;
ofs.open(filename.c_str(),ostream::app);

ofs<<"优秀生名单:"<<endl
<<" 学号\t语文\t数学\t英语\t总分\t名次"<<endl;


for(int i=0;i<C*0.2;++i)
{

ofs<<stu[i].Sequence_number<<'\t'<<stu[i].Chinese<<'\t'<<stu[i].Math<<'\t'<<stu[i].English
<<'\t'<<stu[i].Total_score<<'\t'<<stu[i].Ranking<<endl;
}
ofs.close();
ofs.clear();
}


int main()
{
int C;
string filename;


cout<<"输入文件名:";
cin>>filename;


cout<<"输入学生人数:";
cin>>C;
student *stu=new student[C]; //根据输入的人数动态申请数组.


Set_Input(C,stu);
Taxis(C,stu);
Set_Ranking(C,stu);
Print(C,stu);
Write(C,stu,filename);
return 0;
}

全部回答
基础题,自己看书抄。。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
Ialwaysbethereforyou中文什么意思
爱表达不好意思的句子,有哪些表达感恩的诗句
液晶电视的屏幕碎了,谁知道具体在哪修啊!
下列各项中书写有误的一项是A.声音洪亮 哄堂
哪个月有28天?
诺基亚N97以后会便宜吗?
新亚铆钉地址有知道的么?有点事想过去
MH里这个武器值多少?
鉴赏诗歌的对仗特点,诗句哪些要对仗
qq会员家用24件套工具箱都有什么
独玉是什么?跟翡翠又有什麼区别?如何辨别独
AB之间与B和水平地面的摩擦力
怎么熄灭QQ英雄岛。三国图标啊。
单选题Everyyearthey________plansforr
绥化财联会计师事务所地址有知道的么?有点事
推荐资讯
请问有吉林省榆树市广播局的吗?我想请教问题
He in his English Test Paper. His teacher
对保险公司的生日祝福,客户过生日 保险代理人
地下城机械牛我没开,让人带可不可以进去啊
中航钛业有限公司怎么样
wow小牛再贫瘠之地怎么去奥格瑞
快捷键怎么才好用
若-3x+2y=-3,则9+6x-4y的值是______
我的腿很疼。
北京有到大连的直达火车吗
求问一加3和华为mate8哪个更好
已知命题P:函数y=loga(x+1)在(0,+∞)内
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?