私の課題は、gradbook テキスト ファイルから読み取り、すべての学生のプログラム、中間および最終スコア、学生 ID、姓名を平均化することです。これまでのところ、コードはスコアを適切にコンパイルして計算できますが、studentID と姓名は読み取れません。
その理由は、main() の currentStudent 変数にパラメーターがなく、コンストラクターにデフォルト値を使用させるためだと確信しています。しかし、main() で Student クラスから currentStudent 値を与える方法がわかりません。私の最善の解決策は、ReadData からすべてを main() に移動することですが、私の課題の ReadData の説明から、必要なものはすべてそこにあると思います。
「生徒のデータを読み取る ReadData(istream&) というメソッド。ID 番号 (整数)、姓名 (文字列) をこの順序で読み取り、10 のプログラムの点数 (すべて整数)、中間および試験の点数 (およびすべてのデータが正常に読み取られた場合は true を返し、それ以外の場合は false を返します。"
説明が長くなって申し訳ありません。自分の状況を効果的に説明できるかどうかを確認しているだけです。ヘルプやアドバイスをいただければ幸いです。
クラス定義、コンストラクター、ReadData、およびメインのみを以下に含めました。他のすべては、すべてが機能すると確信している方程式と get/set にすぎないためです。終えた。誰かが完全なコードを見たい場合は、残りを投稿します。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Student
{
private:
int studentID;
string firstName,
lastName;
int score[ 10 ];
int midterm, final;
public:
Student ( int, string, string );
bool ReadData ( istream& );
//fstream WriteData ( ostream& ); // I need to clear up with professor first
void setStudentID ( int );
void setFirstName ( string );
void setLastName ( string );
void setMidterm ( int );
void setFinal (int );
const int getStudentID ( );
const string getFirstName ( );
const string getLastName ( );
const int getMidterm ( );
const int getFinal ( );
void setProgramScore ( int, int[ ] );
int getProgramScore ( int );
const double ProgramAvg( );
const double CourseAvg( );
~Student( );
};
Student::Student ( int id = 0, string f = "", string l = "" )
{
setStudentID ( id );
setFirstName ( f );
setLastName ( l );
};
bool Student::ReadData( istream &readStudent )
{
int id;
string first, last;
int x[ 10 ], mid, fin;
readStudent >> id >> first >> last;
for ( int i = 0; i <= 10 - 1; i++ )
{
readStudent >> x [ i ];
setProgramScore( i, x );
}
readStudent >> mid >> fin;
Student studentInfo ( id, first, last );
setMidterm( mid );
setFinal( fin );
if ( readStudent.good( ) )
return true;
else
return false;
};
// getter、setter、およびその間の計算
int main( )
{
ifstream readStudent;
int lineCount = 0;
double totalProgramAvg = 0
, totalFinalAvg = 0
, totalCourseAvg = 0;
Student currentStudent;
readStudent.open ( "gradebook.txt" );
if ( readStudent.is_open ( ) )
{
while ( currentStudent.ReadData ( readStudent ) == true )
{
totalProgramAvg += currentStudent.ProgramAvg();
totalFinalAvg += currentStudent.getFinal();
totalCourseAvg += currentStudent.CourseAvg();
cout << currentStudent.getStudentID() << " "
<< currentStudent.getFirstName() << " "
<< currentStudent.getLastName() << " ";
for ( int j = 0; j < 10; j++ )
cout << currentStudent.getProgramScore( j ) << " ";
cout << currentStudent.getMidterm() << " "
<< currentStudent.getFinal() << endl;
cout << totalProgramAvg << " " << totalCourseAvg << endl;
lineCount++;
};
readStudent.close( );
cout << lineCount << endl << totalProgramAvg / lineCount << "\n" << totalFinalAvg / lineCount << "\n" << totalCourseAvg / lineCount;
system ("pause");
};
};