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