文件读取及对信息排序

来源:互联网 发布:特斯拉电磁塔升级数据 编辑:程序博客网 时间:2024/06/06 21:06

 //第二周实验项目2+3,第(5)(6)暂时没做

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

struct Student 
 { 
     char num[14]; //原来为num[12],但不改的话在用strcoy()函数时提示内存不能为read。
  char name[10];
     int cpp; 
     int math; 
     int english; 
  int score;
 }; 
void change(int *max,int *min)//不引用的话传来的只是个分身,不在一个地址
{
 int temp;
 temp=*max;
 *max=*min;
 *min=temp;
}

int main()
{
 Student stu[180];
 fstream infile("score.txt",ios::in);
    if(!infile)
 {
  cerr<<"打开失败!"<<endl;
  exit(1);
 }
   
 for(int i=0;i<180;i++)
 {
  infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english;
  stu[i].score=stu[i].cpp+stu[i].math+stu[i].english;
  //cout<<stu[i].score<<" "<<stu[i].num<<" "<<stu[i].name<<" "<<stu[i].cpp<<" "<<stu[i].math<<" "<<stu[i].english<<endl;
 }
    for(int j=0;j<179;j++)
 {
  int max=j;
  char temp[14];
  char temp2[10];
  for(int k=j+1;k<180;k++)
  {
   if(stu[max].score<stu[k].score)
   {
   change(&stu[max].score,&stu[k].score);//方法太笨,做个函数尽量简化
            change(&stu[max].cpp,&stu[k].cpp);
            change(&stu[max].math,&stu[k].math);
            change(&stu[max].english,&stu[k].english);
   ////////////////交换学号//////////////////////
          strcpy(temp,stu[k].num);
     strcpy(stu[k].num,stu[max].num);
     strcpy(stu[max].num,temp);
     ////////////////交换姓名////////////////////////
           strcpy(temp2,stu[k].name);
     strcpy(stu[k].name,stu[max].name);
     strcpy(stu[max].name,temp2);
   }


  }
 }

    cout<<"总分"<<" "<<"学号"<<" "<<"姓名"<<" "<<"C++"<<" "<<"数学"<<" "<<"英语"<<endl;
    for(int l=0;l<180;l++)
 {
 cout<<stu[l].score<<" "<<stu[l].num<<" "<<stu[l].name<<" "<<stu[l].cpp<<" "<<stu[l].math<<" "<<stu[l].english<<endl;
 }
 infile.close();
 return 0;

}

 

原创粉丝点击