Using C Read a data file and store all of the input data in
Using C++,
Read a data file and store all of the input data in a two dimensional array. perform calculations on the data and store the results in the 2 dimensional array. sort the array and print the results in a report.
Instructions
Read in the input file of the given input data , shown below. This 50 record file consists of a (8-digit numeric) student id, 8 assignment\'s points, midterm points, lab exercise points, CodeLab points, and final points. All of the input data, calculated totals, percents, and grades (and plus or minus) must be stored inonly one 2 dimensional array. One lowest assignment score should be dropped excet assignment number 8 and code lab points are considered to be extra points.
Your output reports should be \"very similar\" to the output shown below. The point totals, percents, and grades must be follow the exact calculations. Produce two output reports, one sorted by student id and one sorted by total points (in decending order). The two output reports must be written to separate files.
The Student Data Input File
Output Report Sorted by Student Id
Stdnt Id Ex ----- Assignments ----- Tot Mi Fin CL Pts Pct Gr
-------- -- ----------------------- --- -- --- -- --- --- --
01234567 57 16 14 20 8 10 19 11 9 99 53 21 16 246 62 D
12745220 55 20 17 16 18 19 15 20 4 114 22 64 19 274 69 D+
22645995 60 13 15 17 18 17 10 12 14 106 74 122 17 379 95 A
33339883 55 20 17 12 20 20 20 11 13 122 40 113 16 346 87 B
34029990 56 8 18 3 10 16 17 12 7 88 56 113 18 331 83 B
44576634 49 20 6 20 20 20 19 18 20 137 52 53 19 310 78 C+
46479276 39 20 7 13 16 7 15 18 10 99 26 52 18 234 59 F
47032460 60 18 18 14 11 17 18 19 6 110 61 101 20 352 88 B+
...
Output Report Sorted by Total Points (decending)
Stdnt Id Ex ----- Assignments ----- Tot Mi Fin CL Pts Pct Gr
-------- -- ----------------------- --- -- --- -- --- --- --
22645995 60 13 15 17 18 17 10 12 14 106 74 122 17 379 95 A
73528933 48 19 18 18 17 16 17 16 18 123 70 119 19 379 95 A
94958157 60 20 20 20 20 16 18 17 15 130 75 94 17 376 94 A
87305446 57 20 19 19 17 14 16 17 20 128 66 98 19 368 92 A
88258087 33 18 18 15 19 10 20 19 20 129 64 113 20 359 90 A-
90076387 57 20 16 9 9 19 17 20 17 118 67 97 18 357 89 B+
89168351 52 15 16 11 14 10 17 20 15 108 59 120 14 353 88 B+
92067579 45 19 16 15 17 19 19 8 9 114 51 122 20 352 88 B+
...
Program requirements
You must use a 2-dimensional array for all of the data.
Your solution must include at least 5 functions. And ...
At least one function must include a two dimensional array argument.
At least one function must include an argument that consists of one row of a two dimensional array.
At least one function must include an argument that consists of one element of a two dimensional array.
All files must be checked for a successful open.
Solution
#include \"stdafx.h\"
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
struct StudentData
{
int studentID;
string first_name;
string last_name;
int exam1;
int exam2;
int exam3;
int total;
char ch;
};
const int SIZE = 9;
const int INFO = 4;
// Function prototypes
void openInputFile(ifstream &, string);
void getTotal(StudentData[]);
void getGrade(StudentData[]);
void calcLowest(StudentData[], int &, int &, int &, int &, int[]);
void calcHighest(StudentData[], int &, int &, int &, int &, int[]);
void getAverage(StudentData[], int, double &, double &, double &, double &, double[]);
void getStd(StudentData[], double &, double &, double &, double &, double &, double &, double &, double &, double[]);
void print(StudentData[], int[], int[], double[], double[]);
void sort(StudentData[]);
int main()
{
// Variables
StudentData arr[SIZE];
int lowest1, lowest2, lowest3, lowest4; // Stores lowest exam scores
int highest1, highest2, highest3, highest4; // Holds highest exam scores
double average1 = 0, average2 = 0, average3 = 0, average4 = 0; // Represents average of each exam
double std1 = 0, std2 = 0, std3 = 0, std4 = 0; // Holds standard deviation for Exams 1-3 and Total
int lowest[INFO] = {};
int highest[INFO] = {};
double average[INFO] = {};
double standardDeviation[INFO] = {};
ifstream inFile;
string inFileName = \"C:\\\\Users\\\\Lisa\\\\Desktop\\\\scores.txt\";
// Call function to read data in file
openInputFile(inFile, inFileName);
// Read data into an array of structs
for(int count = 0; count < SIZE; count++)
{
inFile >> arr[count].studentID >> arr[count].first_name >> arr[count].last_name >> arr[count].exam1 >> arr[count].exam2 >> arr[count].exam3;
}
// Close input file
inFile.close();
// Get score total for each student
getTotal(arr);
// Determine grade for each student
getGrade(arr);
// Calculate lowest scores in each exam and total scores
calcLowest(arr, lowest1, lowest2, lowest3, lowest4, lowest);
// Calculate highest scores in each exam and total scores
calcHighest(arr, highest1, highest2, highest3, highest4, highest);
// Calculate average of each exam and the average of the total scores
getAverage(arr, SIZE, average1, average2, average3, average4, average);
// Calculate standard deviation of each category
getStd(arr, std1, std2, std3, std4, average1, average2, average3, average4, standardDeviation);
cout << \"\ \";
// Print unsorted data
print(arr, lowest, highest, average, standardDeviation);
cout << \"\ \";
// Sort data
sort(arr);
// Print sorted data
print(arr, lowest, highest, average, standardDeviation);
system(\"PAUSE\");
return 0;
}
/**
* Pre-condition:
* Post-condition:
*/
void openInputFile(ifstream &inFile, string inFileName)
{
//Open the file
inFile.open(inFileName);
//Input validation
if (!inFile)
{
cout << \"Error to open file.\" << endl;
cout << endl;
return;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getTotal(StudentData arr[])
{
for(int i = 0; i < SIZE; i++)
{
arr[i].total = arr[i].exam1 + arr[i].exam2 + arr[i].exam3;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getGrade(StudentData arr[])
{
for(int i = 0; i < SIZE; i++)
{
if(arr[i].total >= 270)
arr[i].ch = \'A\';
else if(arr[i].total >= 240)
arr[i].ch = \'B\';
else if(arr[i].total >= 210)
arr[i].ch = \'C\';
else if(arr[i].total >= 180)
arr[i].ch = \'D\';
else
arr[i].ch = \'F\';
}
}
/**
* Pre-condition:
* Post-condition:
*/
void calcLowest(StudentData arr[], int &lowest1, int &lowest2, int &lowest3, int &lowest4, int lowest[])
{
int smallest = 0;
lowest1 = arr[0].exam1;
lowest2 = arr[0].exam2;
lowest3 = arr[0].exam3;
lowest4 = arr[0].total;
// Loop to determine lowest score from Exam1, 2, 3, and Total
for (int i = 0; i < SIZE; i++)
{
if (lowest1 > arr[i].exam1)
{
lowest1 = arr[i].exam1;
smallest = i;
}
if (lowest2 > arr[i].exam2)
{
lowest2 = arr[i].exam2;
smallest = i;
}
if (lowest3 > arr[i].exam3)
{
lowest3 = arr[i].exam3;
smallest = i;
}
if (lowest4 > arr[i].total)
{
lowest4 = arr[i].total;
smallest = i;
}
}
// Loop lowest values into an array of size 4
for(int index = 0; index < INFO; index++)
{
if(index == 0)
lowest[0] = lowest1;
else if(index == 1)
lowest[1] = lowest2;
else if(index == 2)
lowest[2] = lowest3;
else if(index == 3)
lowest[3] = lowest4;
else
cout << \"Fail!\" << endl;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void calcHighest(StudentData arr[], int &highest1, int &highest2, int &highest3, int &highest4, int highest[])
{
int biggest = 0;
highest1 = arr[0].exam1;
highest2 = arr[0].exam2;
highest3 = arr[0].exam3;
highest4 = arr[0].total;
// Loop to determine highest score from Exam1, 2, 3, and Total
for (int i = 0; i < SIZE; i++)
{
if (highest1 < arr[i].exam1)
{
highest1 = arr[i].exam1;
biggest = i;
}
if (highest2 < arr[i].exam2)
{
highest2 = arr[i].exam2;
biggest = i;
}
if (highest3 < arr[i].exam3)
{
highest3 = arr[i].exam3;
biggest = i;
}
if (highest4 < arr[i].total)
{
highest4 = arr[i].total;
biggest = i;
}
}
// Loop highest values into an array of size 4
for(int index = 0; index < INFO; index++)
{
if(index == 0)
highest[0] = highest1;
else if(index == 1)
highest[1] = highest2;
else if(index == 2)
highest[2] = highest3;
else if(index == 3)
highest[3] = highest4;
else
cout << \"Fail!\" << endl;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getAverage(StudentData arr[], int size, double &average1, double &average2, double &average3, double &average4, double average[])
{
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
// Get sum of each category (Exam1, 2, 3, and Total)
for(int i = 0; i < SIZE; i++)
{
sum1 += arr[i].exam1;
sum2 += arr[i].exam2;
sum3 += arr[i].exam3;
sum4 += arr[i].total;
}
// Calculate average for each category
average1 += static_cast<double>(sum1)/size;
average2 += static_cast<double>(sum2)/size;
average3 += static_cast<double>(sum3)/size;
average4 += static_cast<double>(sum4)/size;
// Loop average values into an array of size 4
for(int index = 0; index < INFO; index++)
{
if(index == 0)
average[0] = average1;
else if(index == 1)
average[1] = average2;
else if(index == 2)
average[2] = average3;
else if(index == 3)
average[3] = average4;
else
cout << \"Fail!\" << endl;
}
}
/**
* Pre-condition:
* Post-condition:
*/
void getStd(StudentData arr[], double &std1, double &std2, double &std3, double &std4, double &average1, double &average2, double &average3, double &average4, double standardDeviation[])
{
double deviationSum1 = 0, deviationSum2 = 0, deviationSum3 = 0, deviationSum4 = 0;
for(int i = 0; i < SIZE; i++)
{
deviationSum1 += pow((arr[i].exam1 - average1), 2);
deviationSum2 += pow((arr[i].exam2 - average2), 2);
deviationSum3 += pow((arr[i].exam3 - average3), 2);
deviationSum4 += pow((arr[i].total - average4), 2);
}
std1 = sqrt(deviationSum1 / ((SIZE) - 1));
std2 = sqrt(deviationSum2 / ((SIZE) - 1));
std3 = sqrt(deviationSum3 / ((SIZE) - 1));
std4 = sqrt(deviationSum4 / ((SIZE) - 1));
// Loop average values into an array of size
for(int index = 0; index < INFO; index++)
{
if(index == 0)
standardDeviation[0] = std1;
else if(index == 1)
standardDeviation[1] = std2;
else if(index == 2)
standardDeviation[2] = std3;
else if(index == 3)
standardDeviation[3] = std4;
else
cout << \"Fail!\" << endl;
}
}
cout << \"\ \";
}
/**
* Pre-condition:
* Post-condition:
*/
void sort(StudentData arr[])
{
StudentData temp;
for (int i = 0; i < (SIZE - 1); i++)
{
for (int j = i + 1; j < SIZE; j++)
{
if (arr[i].last_name > arr[j].last_name)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
note:cange code as your requirements.Thank you






