指针

来源:互联网 发布:Java. swing论坛 编辑:程序博客网 时间:2024/05/20 18:54
 

#include <fstream>
#include<iostream>
#include <iomanip>                                                                                                                                                                                                                                                                                                                                      
#include <string>
using namespace std;
struct student
{
 char num[12];
 string name;
 int grade[3];
 int sum;
};

int main( )
{
    void open_file(student *p); 
    void select_score(student *p); 
    void show_score(student *p);
    void school_reward(student *p);
    student student[180],score,*p;
    p=student;
    open_file(p);
    select_score(p);
 cout<<"学号为"<<setw(16)<<"人名"<<setw(8)<<"c++"<<setw(8)<<"高数"<<setw(8)<<"英语"<<setw(8)<<"总成绩"<<endl;
    show_score(p);
    cout<<"获得奖学金的同学名单为:"<<endl;
    school_reward(p);
     return 0;
}
void open_file(student *p)
{
 int j;
 ifstream infile("score.txt",ios::in);
 if(!infile)
 {
  cerr<<"open error!"<<endl;
  exit(1);
 }
 for(j=0;j<180;j++)
 {
  infile>>(p+j)->num>>(p+j)->name>>(p+j)->grade[0]>>(p+j)->grade[1]>>(p+j)->grade[2];//读入学生成绩;
  (p+j)->sum=((p+j)->grade[0]+(p+j)->grade[1]+(p+j)->grade[2]);
 }
 infile.close();
}
void show_score(student *p)
{
 for(int j=0;j<180;j++)
 
  cout<<(p+j)->num<<"   "<<setw(8)<<(p+j)->name<<setw(8)<<(p+j)->grade[0]
   <<"    "<<(p+j)->grade[1]<<"    "<<(p+j)->grade[2]<<"\t"<<(p+j)->sum<<endl; 
 }
 cout<<endl;
}
void select_score(student *p)
{
 int i,j;
student score;
 for(i=0;i<179;i++)
  for(j=0;j<179-i;j++)
  {
   if((p+j)->sum<(p+j+1)->sum)
   {
    score=*(p+j);
   *(p+j)=*(p+j+1);
    *(p+j+1)=score;
   }
  }
}
void school_reward(student *p)
{
 for(int j=0;j<30;j++)
 {
 
  if((p+j)->grade[0]>=60&&(p+j)->grade[1]>=60&&(p+j)->grade[2]>=60)
  {
   if(j%5==0)
    cout<<endl;
   cout<<setw(8)<<(p+j)->name<<"  "<<setiosflags(ios::left);
  }
  else j--;
 }

}