第十七周实验报告一(所有同学的成绩表等用结构体做)

来源:互联网 发布:父母没有文化 知乎 编辑:程序博客网 时间:2024/05/22 03:51
 实验目的:学会利用结构体
实验内容:所有同学的成绩表等用结构体做
* 程序头部注释开始

* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生* All rights reserved.* 文件名称:                             * 作    者:冯珍珍                     * 完成日期: 2011年 12 月 18日* 版本号:         #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--; }} 


17周实验报告1

上级感言:这个程序对我来说真很难;