第17週目項目6-ファイル読み込み成績処理


問題およびコード:
/* 
*Copyright (c)2014,               
*All rights reserved. 
*    :grades.cpp 
*      :    
*    :2014 12 21  
*     :v1.0 
* 
*    :          。
*    : 。
*    :            。
*/ 
#include <iostream>
#include <cstring>
#include <fstream>
#include<cstdlib>
using namespace std;
struct Student
{
    char num[13];
    char name[10];
    int cpp;
    int math;
    int english;
    int grade;
    double average;
};
void calculate(Student s[],int n);  //       ,   s   ,  n   
void sort(Student [],int);      //       
void output(Student [],int);     //     
void outputExcellent(Student [],int);  //        
int main()
{
    Student stu[200];
    //        ,             ;
    ifstream infile("score.txt",ios::in); 	//          
    if(!infile)   				//        
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i=0,stuNum=0;  //         
    while(infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english)
    {
        stu[i].grade=stu[i].cpp+stu[i].math+stu[i].english;
        ++stuNum;
        ++i;
    }
    infile.close();
    //          
    calculate(stu,stuNum);
    //          
    sort(stu,stuNum);
    cout<<"        :"<<endl;
    output(stu,stuNum);
    cout<<"        :"<<endl;
    outputExcellent(stu,stuNum);
    return 0;
}
void calculate(Student s[],int n)  //       ,   s   ,  n   
{
    int i;
    for(i=0; i<n; ++i)
    {
        s[i].grade=s[i].cpp+s[i].math+s[i].english;
        s[i].average=s[i].grade/3;
    }
}
void sort(Student s[],int n)      //       
{
    int i,j;
    Student t;
    for(j=0; j<n-2; j++)
        for(i=0; i<n-j-1; i++)
            if (s[i].grade<s[i+1].grade)
            {
                t=s[i];
                s[i]=s[i+1];
                s[i+1]=t;
            }
}
void output(Student s[],int n)   //     
{
    sort(s,n);
    int i;
    cout<<"  "<<'\t'<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<endl;
    for(i=0; i<n; ++i)
    {
        cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].grade<<'\t'<<s[i].average;
        cout<<endl;
    }
}
void outputExcellent(Student s[],int n)  //        
{
    int i;
    cout<<"  "<<'\t'<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<"  "<<'\t'<<endl;

    for(i=0; i<30; ++i)
    {
        if((s[i].cpp>=60)&&(s[i].math>=60)&&(s[i].english>=60))
        {

            cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].grade<<'\t'<<s[i].average<<endl;
        }
    }
    for(i=30; i<n; ++i)
    {
        if(s[i].grade==s[29].grade)
            cout<<s[i].num<<'\t'<<s[i].name<<'\t'<<s[i].grade<<'\t'<<s[i].average<<endl;
    }
}

実行結果:
知識ポイントのまとめ:
ファイル読み込み成績処理を行います.
学習の心得:
ソートの問題に注意してください.