Does anyone know why my GenerateReports function is not printing anything from the class/struct? Is it even set up right?
Code:
// Example for reading records from the input files for DB.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
const int Max_Stud = 30; //Max. no. of enrolled students
struct NameType
{
string last;
string first;
char middle;
};
struct CourseType
{
string name;
char grade;
int credits;
};
struct StudRecType
{
string ssno;
NameType name;
string tel;
char gender;
string level;
int totalCredit;
float cumGPA;
int noCo;
CourseType course[5];
int semCredit;
float semGPA;
};
typedef StudRecType StudDBType[Max_Stud];
// Type definition for an array of records
class DBType
{
public:
DBType( );
void Insert(StudRecType );
bool GetNext(StudRecType &);
void Reset( );
private:
StudDBType Stud;
int current;
int nost;
};
DBType::DBType( )
{
current = 0;
nost = 0;
}
void DBType:: Insert(StudRecType srec)
{
Stud[current] = srec;
current ++;
nost ++;
}
bool DBType::GetNext (StudRecType & srec)
{
if(current > nost)
return false;
else
{
srec = Stud[current];
current ++;
return true;
}
}
void DBType::Reset ( )
{
current = 0;
}
void Get_Inf (ifstream&, DBType&, int&);
void UpdateGPA(StudRecType&); // Calculate Sem. GPA and Cum GPA etc…
void GenerateReports(ofstream&, DBType&, int&);
void GenerateReports(ofstream& printFile, DBType& displayDB, int& noStud)
{
StudRecType student;
int i = 0;
for (i = 1; i < noStud; i++)
{
cout << "SS#: " << student.ssno << endl;
cout << "Name(last, first, mid): " << student.name.last << " " << student.name.last << " " << student.name.middle << endl;
cout << "Telphon Number: " << student.tel << endl;
cout << "Gender: " << student.gender;
cout << "Class Level: " << student.level;
if (student.noCo > 0)
{
cout << "Registration of Spring 2008: Yes" << endl;
int j = 0;
for (j = 0; j < student.noCo; j++)
{
cout << "Unoffical Report Card" << endl;
cout << "Course: " << j << endl;
cout << student.course[j].name;
cout << "Credits: " << endl;
cout << student.course[j].credits << endl;
cout << "Grade: " << endl;
cout << student.course[j].grade << endl;
displayDB.GetNext(student);
}
cout << "Credits for Spring: " << student.semCredit << endl;
cout << "Spring Semester GPA: " << student.semGPA << endl;
cout << "Total Credits: " << student.totalCredit + student.semCredit << endl;
cout << "New cumulative GPA: " << student.cumGPA << endl;
}
else
{
cout << "Registration of Spring 2008: No";
}
displayDB.GetNext(student);
}
}
void UpdateGPA(StudRecType& fGPA)
{
int count = 0;
int i = 0;
float gradeA = 4.0;
float gradeB = 3.0;
float gradeC = 2.0;
float gradeD = 1.0;
float gradeF = 0.0;
float heldGPA = 0.0;
float totalGPA = 0.0;
count = fGPA.noCo;
int amtClass = 0;
if (fGPA.noCo != 0)
{
for (i = 0; i < count; i++)
{
if (fGPA.course[i].grade == 'A')
{
heldGPA =gradeA * fGPA.course[i].credits;
amtClass= amtClass + fGPA.course[i].credits;
}
if (fGPA.course[i].grade == 'B')
{
heldGPA =gradeB * fGPA.course[i].credits;
amtClass= amtClass + fGPA.course[i].credits;
}
if (fGPA.course[i].grade == 'C')
{
heldGPA =gradeC * fGPA.course[i].credits;
amtClass= amtClass + fGPA.course[i].credits;
}
if (fGPA.course[i].grade == 'D')
{
heldGPA =gradeD * fGPA.course[i].credits;
amtClass= amtClass + fGPA.course[i].credits;
}
if (fGPA.course[i].grade == 'F')
{
heldGPA =gradeF * fGPA.course[i].credits;
amtClass= amtClass + fGPA.course[i].credits;
}
if (fGPA.course[i].grade == 'W')
totalGPA = (heldGPA + totalGPA);
}
fGPA.semGPA = (totalGPA / amtClass);
fGPA.cumGPA = (totalGPA + fGPA.cumGPA*fGPA.totalCredit)/ (amtClass+fGPA.totalCredit);
}
}
int main()
{
ifstream inStud;
ofstream outFile;
//int choice;
DBType StudDB;
int noStud = 0;
inStud.open("Stud.txt");
if (!inStud)
{
cout <<"**Can't open input file Stud**"<< endl;
return 1;
}
outFile.open("Echo.dat");
if(!outFile)
{
cout <<"** Can't open output file **"<< endl;
return 1;
}
Get_Inf(inStud, StudDB, noStud);
cout << "Total no. of Students is "<<noStud<<endl;
cout<<endl;
GenerateReports(outFile, StudDB, noStud);
return 0;
}
//*******************************************************************
void Get_Inf(
/* in */ ifstream& inF1,
/* out */ DBType& DB,
/* Number of students */ int& noStud)
{
int j;
int jco;
StudRecType SR;
noStud = 0;
while(!inF1.eof())
{
inF1>>SR.ssno;
inF1>>SR.name.last>>SR.name.first>>SR.name.middle;
inF1>>SR.tel>>SR.gender>>SR.level;
inF1>>SR.totalCredit>>SR.cumGPA;
//Echo input data on the screen
cout<<SR.ssno<<endl;
cout<<SR.name.last<<"*"<<SR.name.first;
cout<<"*"<<SR.name.middle<<endl;
cout<<SR.gender<<"*"<<SR.level<<endl;
cout<<SR.totalCredit<<"*"<<SR.cumGPA<<endl;
inF1>>jco;
SR.noCo = jco;
for (j = 0;j < jco; j++)
{
inF1>>SR.course[j].name;
inF1>>SR.course[j].credits;
inF1>>SR.course[j].grade;
cout<<SR.course[j].name
<<","<<SR.course[j].credits<<","
<<SR.course[j].grade<<endl;
}
noStud++;
UpdateGPA(SR);
DB.Insert (SR);
inF1.ignore(100,'\n');
cin.get();
}
}