//grades.cpp
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
// Instead of making variables of how many students per grade, average and stand deviation
// per grade, i will just make 3 arrays and store them from 0=HD - 4=F
// When i had aStuGrades as aStuGrades[4] it created an error for the data that was
// in the 4th section (aStuGrades[4]) and changing it to 5 seemed to fix it.
int aStuGrades[5]; // Store how many students per grade in array
float aAv[5]; // Store the average of each grade in array
float aStndDev[5]; // Store the standard deviation of each grade in array
string aGrades[]={"H","D","C","P","F"};
string aHStuID[299];
float aHMark[299];
string aDStuID[299];
float aDMark[299];
string aCStuID[299];
float aCMark[299];
string aPStuID[299];
float aPMark[299];
string aFStuID[299];
float aFMark[299];
void CalculateGrade(string iStuID, float fStuMark){
int iGrade;
iGrade = 0;
if (fStuMark >= 85) {
aHStuID[aStuGrades[iGrade]] = iStuID;
aHMark[aStuGrades[iGrade]] = fStuMark;
iGrade = 0;
}else if ((fStuMark >= 75) && (fStuMark < 85)) {
aDStuID[aStuGrades[iGrade]] = iStuID;
aDMark[aStuGrades[iGrade]] = fStuMark;
iGrade = 1;
}else if ((fStuMark >= 65) && (fStuMark < 75)) {
aCStuID[aStuGrades[iGrade]] = iStuID;
aCMark[aStuGrades[iGrade]] = fStuMark;
iGrade = 2;
}else if ((fStuMark >= 50) && (fStuMark < 65)) {
aPStuID[aStuGrades[iGrade]] = iStuID;
aPMark[aStuGrades[iGrade]] = fStuMark;
iGrade = 3;
}else if (fStuMark < 50) {
aFStuID[aStuGrades[iGrade]] = iStuID;
aFMark[aStuGrades[iGrade]] = fStuMark;
iGrade = 4;
}
aAv[iGrade] = aAv[iGrade] + fStuMark;
aStuGrades[iGrade] = aStuGrades[iGrade] + 1;
cout << aGrades[iGrade] << " " << aStuGrades[iGrade] << " id " << iStuID << " m " << fStuMark << endl;
}
int ReadFromFile(const char * argv){
int fSuccess;
int i = 0;
string fFile;
fFile = argv;
cout << "Reading data from " << fFile << endl;
ifstream inFile;
inFile.open(argv);
string iStuID;
float fStuMark;
if (!inFile) {
fSuccess = 0;
}else{
fSuccess = 1;
// Set arrays values to 0
for(int x=0;x<=4;x++){
aStuGrades[x] = 0;
aAv[x] = 0;
aStndDev[x] = 0;
}
while (inFile >> iStuID >> fStuMark) {
CalculateGrade(iStuID, fStuMark);
}
inFile.close();
}
return fSuccess;
}
int main(int argc, char *argv[]){
if (argc == 2){
if (ReadFromFile(argv[1]) == 0){
cout << "Unable to open " << argv[1] << endl;
system("pause");
return 0;
}
}else{
int iEntData;
const char * c_str();
string sFiletoRead;
string iStuID;
float fStuMark;
cout << "How would you like to enter data [1/2] ?\n\t1 - Manual input\n\t2 - From data file" << endl;
cin >> iEntData;
switch (iEntData) {
case 1:
cout << "Manual Entry:\nPlease enter Student ID then mark as shown below\n-> 123456 99.9\nCTRL + Z to finish." << endl;
// Set arrays values to 0
for(int x=0;x<=4;x++){
aStuGrades[x] = 0;
aAv[x] = 0;
aStndDev[x] = 0;
}
while (!cin.eof()){
cin >> iStuID >> fStuMark;
if (!cin.eof()){
CalculateGrade(iStuID, fStuMark);
}
}
break;
case 2:
cout << "Please enter the file you would like to read" << endl;
cin >> sFiletoRead;
if (ReadFromFile(sFiletoRead.c_str()) == 0){
cout << "Unable to open " << sFiletoRead << endl;
system("pause");
return 0;
}
break;
default:
cout << "Invalid integer entered\n";
system("pause");
return 0;
break;
}
}
double tmp;
for(int x=0;x<=4;x++){
if (aStuGrades[x] != 0){
aAv[x] = aAv[x] / aStuGrades[x];
for(int i=0;i<aStuGrades[x];i++){
switch (x) {
case 0: // HD
aStndDev[x] = aStndDev[x] + pow((aHMark[i] - aAv[x]),2);
cout << aGrades[x] << " sd " << aStndDev[x] << " i " << i << " id " << aHStuID[i] << " m " << aHMark[i] << " av " << aAv[x] << endl;
break;
case 1: // D
aStndDev[x] = aStndDev[x] + pow((aDMark[i] - aAv[x]),2);
cout << aGrades[x] << " sd " << aStndDev[x] << " i " << i << " id " << aDStuID[i] << " m " << aDMark[i] << " av " << aAv[x] << endl;
break;
case 2: // C
aStndDev[x] = aStndDev[x] + pow((aCMark[i] - aAv[x]),2);
cout << aGrades[x] << " sd " << aStndDev[x] << " i " << i << " id " << aCStuID[i] << " m " << aCMark[i] << " av " << aAv[x] << endl;
break;
case 3: // P
aStndDev[x] = aStndDev[x] + pow((aPMark[i] - aAv[x]),2);
cout << aGrades[x] << " sd " << aStndDev[x] << " i " << i << " id " << aPStuID[i] << " m " << aPMark[i] << " av " << aAv[x] << endl;
break;
case 4: // F
aStndDev[x] = aStndDev[x] + pow((aFMark[i] - aAv[x]),2);
cout << aGrades[x] << " sd " << aStndDev[x] << " i " << i << " id " << aFStuID[i] << " m " << aFMark[i] << " av " << aAv[x] << endl;
break;
}
}
tmp = aStndDev[x] / aStuGrades[x];
//aStndDev[x] = pow(tmp,0.5);
cout << aStuGrades[x] << " students " << aGrades[x] << " av: " << aAv[x] << " sd: " << aStndDev[x] << " . " << tmp << endl;
}
}
system("pause");
return 0;
}