哪位高手帮我解决一下这道题,不胜感激.~~~
编写一个程序:输入几个学生的姓名,英语和计算机成绩,然后按总分从高到低排序.(要求定义一个student类,用友元实现排序.)用C++sourcefile写的...
编写一个程序:输入几个学生的姓名,英语和计算机成绩,然后按总分从高到低排序.(要求定义一个student类,用友元实现排序.)
用C++ source file写的 展开
用C++ source file写的 展开
展开全部
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
#define N 60
int s;
//*****************************************************************************************
class student
{
public:
void get_in();
void displiy();
friend void scort() ;//友元
private:
string name;
float scor[2];
float sum;
}stu[N] ;
void student:: get_in() //录入学生信息
{
cout<<"姓名: ";
cin>>name;
cout<<"依次输入 英语和计算机成绩:";
for(int j=0;j<2;j++)
cin>>scor[j];
sum=scor[0]+scor[1];
int a=1;
while(a==1) //判断是否是输入的百分制成绩
{
for(j=0;j<2;j++)
if(scor[j]>100||scor[j]<0)
{
cout<<"\n\n\t请从新输入百分制成绩!!!\n";
for(int j=0;j<2;j++)
cin>>scor[j];
a=1;
}
else
a=0;
}
}
void student::displiy()
{
cout<<setw(10)<<name<<setw(10)<<sum;
}
//***********************************************************************************
void mainget_in() //主录入函数
{
char ch;
bool teap=true;
int i=0;
while(teap==true) //录入
{
stu[i].get_in();
cout<<"继续录入y,任意键结束录入!\n";
cin>>ch;
if(ch=='y'||ch=='Y')
;
else
teap=false;
i++;
s=i; //s来累计输入了多少人
}
}
//******************************************************************************
void scort() //各门成绩从高到底输出
{
cout<<"\t~~~~~~~~~成绩从高到低输出(相同成绩先录入先输出)~~~~~~~~~~~~\n";
cout<<"\n---------------------------------------------------------------------------\n";
cout<<setw(10)<<"姓名"<<setw(10)<<"总分"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<endl;
for(int k=0;k<s-1;k++)
for(int i=0;i<s-1-k;i++)
if(stu[i].sum<stu[i+1].sum)
{
string stu3;
stu3=stu[i].name;
stu[i].name=stu[i+1].name;
stu[i+1].name=stu3;
float t;
for(int j=0;j<2;j++)
{
t=stu[i].scor[j];
stu[i].scor[j]=stu[i+1].scor[j];
stu[i+1].scor[j]=t;
}
t=stu[i].sum;
stu[i].sum=stu[i+1].sum;
stu[i+1].sum=t;
//交换两个学生的全部信息
}
for(int i=0;i<s;i++)
{
stu[i].displiy();
for(int j=0;j<2;j++)
cout<<setw(10)<<stu[i].scor[j];
cout<<endl;
}
cout<<"\n---------------------------------------------------------------------------\n";
}
int main()
{
mainget_in();
scort() ;
return 0;
}
#include <string>
#include <iomanip>
using namespace std;
#define N 60
int s;
//*****************************************************************************************
class student
{
public:
void get_in();
void displiy();
friend void scort() ;//友元
private:
string name;
float scor[2];
float sum;
}stu[N] ;
void student:: get_in() //录入学生信息
{
cout<<"姓名: ";
cin>>name;
cout<<"依次输入 英语和计算机成绩:";
for(int j=0;j<2;j++)
cin>>scor[j];
sum=scor[0]+scor[1];
int a=1;
while(a==1) //判断是否是输入的百分制成绩
{
for(j=0;j<2;j++)
if(scor[j]>100||scor[j]<0)
{
cout<<"\n\n\t请从新输入百分制成绩!!!\n";
for(int j=0;j<2;j++)
cin>>scor[j];
a=1;
}
else
a=0;
}
}
void student::displiy()
{
cout<<setw(10)<<name<<setw(10)<<sum;
}
//***********************************************************************************
void mainget_in() //主录入函数
{
char ch;
bool teap=true;
int i=0;
while(teap==true) //录入
{
stu[i].get_in();
cout<<"继续录入y,任意键结束录入!\n";
cin>>ch;
if(ch=='y'||ch=='Y')
;
else
teap=false;
i++;
s=i; //s来累计输入了多少人
}
}
//******************************************************************************
void scort() //各门成绩从高到底输出
{
cout<<"\t~~~~~~~~~成绩从高到低输出(相同成绩先录入先输出)~~~~~~~~~~~~\n";
cout<<"\n---------------------------------------------------------------------------\n";
cout<<setw(10)<<"姓名"<<setw(10)<<"总分"<<setw(10)<<"英语"<<setw(10)<<"计算机"<<endl;
for(int k=0;k<s-1;k++)
for(int i=0;i<s-1-k;i++)
if(stu[i].sum<stu[i+1].sum)
{
string stu3;
stu3=stu[i].name;
stu[i].name=stu[i+1].name;
stu[i+1].name=stu3;
float t;
for(int j=0;j<2;j++)
{
t=stu[i].scor[j];
stu[i].scor[j]=stu[i+1].scor[j];
stu[i+1].scor[j]=t;
}
t=stu[i].sum;
stu[i].sum=stu[i+1].sum;
stu[i+1].sum=t;
//交换两个学生的全部信息
}
for(int i=0;i<s;i++)
{
stu[i].displiy();
for(int j=0;j<2;j++)
cout<<setw(10)<<stu[i].scor[j];
cout<<endl;
}
cout<<"\n---------------------------------------------------------------------------\n";
}
int main()
{
mainget_in();
scort() ;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询