已解决问题

C++小问题

10
[ 标签:c++ ]

1. 假设单个学生信息由姓名、学号、成绩组成。编程,实

现以下操作。

1)输入10个学生的信息,按照成绩的降序排序。

2)将排好序的学生信息写入文件Score,并关闭文件。

3)打开Score文件,读取其中的内容,将其显示在屏幕上。

 

匿名 回答:2 人气:37 解决时间:2009-07-04 17:44
  
满意答案
#include<iostream>
#include<sstream>
#include<iomanip>
#include<fstream>
using namespace std;
ofstream out("Score.txt");
ifstream in("Score.txt");

struct student{
string name,number,result;
};
student s[15]; //最多可以输入15个同学的信息
void putin(int b){
for(int c=0;c<b;c++){
cout<<"输入学生"<<c+1<<" 名字:";
cin>>s[c].name;
cout<<"输入学生"<<c+1<<" 学号:";
cin>>s[c].number;
cout<<"输入学生"<<c+1<<" 成绩:";
cin>>s[c].result;
}
}
void paixu(int d){
string temp;
for(int e=0;e<d;e++)
for(int f=e+1;f<d;f++){
if(atoi(s[e].result.c_str() )<atoi(s[f].result.c_str ())){
temp=s[f].name ;
s[f].name =s[e].name ;
s[e].name =temp;
temp=s[f].number ;
s[f].number =s[e].number ;
s[e].number =temp;
temp=s[f].result ;
s[f].result =s[e].result ;
s[e].result =temp;
}
}
}
void putout(int h){
cout<<"经过按成绩降序排列后的结果如下:"<<endl;
out<<" 姓名 学好 成绩"<<endl;
for(int g=0;g<h;g++){
out<<setw(9)<<s[g].name<<setw(9)<<s[g].number<<setw(9)<<s[g].result<<endl;
}
for(string abc;getline(in,abc);){
cout<<abc<<endl;
}
}
void main(){
int a;
cout<<"请输入学生人数:";
cin>>a;
putin(a);
paixu(a);
putout(a);
}
测试结果如下,不知道满不满意!!!!!!!!!!!!!!!!!!!!!!!!!
请输入学生人数:5
输入学生1 名字:xiaohong
输入学生1 学号:2101
输入学生1 成绩:91
输入学生2 名字:daxiong
输入学生2 学号:2102
输入学生2 成绩:93
输入学生3 名字:feifei
输入学生3 学号:2103
输入学生3 成绩:94
输入学生4 名字:dada
输入学生4 学号:2104
输入学生4 成绩:95
输入学生5 名字:miaomiao
输入学生5 学号:2105
输入学生5 成绩:98
经过按成绩降序排列后的结果如下:
姓名 学好 成绩
miaomiao 2105 98
dada 2104 95
feifei 2103 94
daxiong 2102 93
xiaohong 2101 91
Press any key to continue
回答人的补充   2009-07-04 17:18
楼主我只是用5个同学来代替,你可以自己测试一下,但结果应该是对其的,不知道发到这上面怎么就变的不对其了。
YAN 回答采纳率:8.5% 2009-07-04 17:14
评价答案
  • 是否解决问题(参与评价0次)
  • 0
  • 0
  • 0
  • 是否原创答案(参与评价0次)
  • 0
  • 0
提问人的感言:
满意答案
//你自己测试下.
#include<iostream>
#include<fstream>
using namespace std;

struct Student
{
char name[100];
char num[100];
int grade;
}stu[11];

int main()
{
int i,j;
int n=10;
Student temp;
for(i=0;i<10;i++) cin>>stu[i].name>>stu[i].num>>stu[i].grade;
for(i=0;i<n;i++)
{
for(j=n-1;j>i;j--)
{
if(stu[j].grade>stu[j-1].grade)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}


fstream onfile;
onfile.open("Score",ios::out);
for(i=0;i<n;i++)
{
onfile<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].grade<<"\n";
}
onfile.close();
fstream infile;
infile.open("Score",ios::in);
n=0;
while(infile>>stu[n].name)
{
infile>>stu[n].num;
infile>>stu[n].grade;
n++;
}
infile.close();
return 0;

}
提问人的追问   2009-07-03 19:10
不够详细
独孤天
回答采纳率:49.8% 2009-07-03 18:27
问问团队来自问问团队编程小组
评价答案
  • 是否解决问题(参与评价0次)
  • 0
  • 0
  • 0
  • 是否原创答案(参与评价0次)
  • 0
  • 0

相关内容