Write this program without using POINTERS #include #include #include using names
ID: 441861 • Letter: W
Question
Write this program without using POINTERS #include #include #include using namespace std; const int LINE_BUFF_SIZE = 256 + 1 ; const int FIRST_NAME_SIZE = 10 + 1; const int LAST_NAME_SIZE = 12 + 1; const int ID_SIZE = 6 + 1; const int TEST_SCORE_SIZE = 6 ; int main(int argc, char * argv[]) { //PROTOTYPES int lowestScore(int *); double averageDropOne(int *, int); char letterGrade(double); void printHeader(); void writeHeaderToFile(fstream &); void printResultToScreen(char *, char *, char *, int *, double, char); void writeResultToFile(char *, char *, char *, int *, double, char, fstream &); int getStudentInfo(const char *, char *, char *, char *, int *); //LOCAL DECLARATIONS fstream fin; fstream fout; char lineBuff[LINE_BUFF_SIZE]; char fName[FIRST_NAME_SIZE]; char lName[LAST_NAME_SIZE]; char iD[ID_SIZE]; int testScores[TEST_SCORE_SIZE]; int lowest; double average; char grade; //PROCEDURES //Open data file and create output result file fin.open("student_input.dat", ios::in); if (!fin) { cout << "Cannot open data file. Program aborting. "; exit(1); } fout.open("student_results.dat", ios::out); if (!fout) { cout << "Cannot open output file. Program aborting. "; exit(1); } //display and write header printHeader(); writeHeaderToFile(fout); //proceed while (fin.getline(lineBuff, LINE_BUFF_SIZE)) { //parse student info line int studentInfo = getStudentInfo(lineBuff, fName, lName, iD, testScores); if (!studentInfo) //if getting an error while parsing { cout << "Error: Negative score input. Program aborting. "; exit(1); } else //parsing successfully { //calculate lowest score, average score and letter grade lowest = -1; if (studentInfo > 5) lowest = lowestScore(testScores); average = averageDropOne(testScores, lowest); grade = letterGrade(average); //output result to screen and file printResultToScreen(lName, fName, iD, testScores, average, grade); writeResultToFile(lName, fName, iD, testScores, average, grade, fout); } } fout.close(); fin.close(); cin.get(); return 0; } //--------------------------------------------------------- // FUNCTION DEFINITIONS //--------------------------------------------------------- //split and parse student info //return number of test score (5 or 6) or 0 if getting an negative score or blank line int getStudentInfo(const char *line, char *fName, char *lName, char *iD, int *scores) { const char *PTR = line; char tempScore[10]; int tmpScr = 0; char *sPtr = tempScore; int scoreCount = 0; if (!*PTR) //empty line, return 0 return 0; //get first name while (*PTR != ' ' && *PTR != ' ') *fName++ = *PTR++; *fName = ''; while (*PTR == ' ' || *PTR == ' ') PTR++; //get last name while (*PTR != ' ' && *PTR != ' ') *lName++ = *PTR++; *lName = ''; while (*PTR == ' ' || *PTR == ' ') PTR++; //get id while (*PTR != ' ' && *PTR != ' ') *iD++ = *PTR++; *iD = ''; while (*PTR == ' ' || *PTR == ' ') PTR++; //get all the test scores while (*PTR) { while (*PTR && *PTR != ' ' && *PTR != ' ') *sPtr++ = *PTR++; *sPtr = ''; tmpScr = atoi(tempScore); if (tmpScr < 0) //negative score, return 0 return 0; *scores++ = atoi(tempScore); sPtr = tempScore; scoreCount++; while (*PTR == ' ' || *PTR == ' ') PTR++; } //if scoreCount is not 6, then we must fill in the last test score //with an invalid score -1 if (scoreCount != TEST_SCORE_SIZE) *scores = -1; return scoreCount; } //--------------------------------------------------------- int lowestScore(int *scores) { int *lowest = scores; for (int *ptr = scores + 1; ptr - scores < TEST_SCORE_SIZE; ptr++) { if (*ptr < *lowest) { lowest = ptr; } } return *lowest; } //--------------------------------------------------------- double averageDropOne(int *scores, int scoreToDrop) { double avg = 0.0; for (int *ptr = scores; ptr - scores < TEST_SCORE_SIZE; ptr++) { avg += *ptr; } return (avg - scoreToDrop) / (TEST_SCORE_SIZE - 1.0); } //--------------------------------------------------------- char letterGrade(double avg) { if (avg >= 89.5) return 'A'; if (avg >= 79.5) return 'B'; if (avg >= 69.5) return 'C'; if (avg >= 59.5) return 'D'; return 'F'; } //--------------------------------------------------------- void printHeader() { cout << setw(LAST_NAME_SIZE) << left << "Last Name" << " " << setw(FIRST_NAME_SIZE) << left << "First Name" << " " << setw(ID_SIZE) << right << "ID " << " " << setw(17) << "Test Scores" << setw(15) << "Average" << setw(8) << "Grade" << endl; int headerSize = LAST_NAME_SIZE + 1 + FIRST_NAME_SIZE + 1 + ID_SIZE + 3 + 17 + 15 +8; for (int i = 0; i < headerSize; i++) cout << "-"; cout << endl; } //--------------------------------------------------------- void writeHeaderToFile(fstream &fout) { fout << setw(LAST_NAME_SIZE) << left << "Last Name" << " " << setw(FIRST_NAME_SIZE) << left << "First Name" << " " << setw(ID_SIZE) << right << "ID " << " " << setw(17) << "Test Scores" << setw(15) << "Average" << setw(8) << "Grade" << endl; int headerSize = LAST_NAME_SIZE + 1 + FIRST_NAME_SIZE + 1 + ID_SIZE + 3 + 17 + 15 +8; for (int i = 0; i < headerSize; i++) fout << "-"; fout << endl; } //--------------------------------------------------------- void printResultToScreen(char *lName, char *fName, char *iD, int *scores, double avg, char grade) { cout << setw(LAST_NAME_SIZE) << left << lName << " " << setw(FIRST_NAME_SIZE) << left << fName << " " << setw(ID_SIZE) << right << iD << " "; for (int i = 0; i < TEST_SCORE_SIZE; i++) { cout << setw(3) << scores[i] << " "; } cout << fixed << setprecision(1) << setw(7) << avg << setw(7) << grade << endl; } //--------------------------------------------------------- void writeResultToFile(char *lName, char *fName, char *iD, int *scores, double avg, char grade, fstream &fout) { fout << setw(LAST_NAME_SIZE) << left << lName << " " << setw(FIRST_NAME_SIZE) << left << fName << " " << setw(ID_SIZE) << right << iD << " "; for (int i = 0; i < TEST_SCORE_SIZE; i++) { fout << setw(3) << scores[i] << " "; } fout << fixed << setprecision(1) << setw(7) << avg << setw(7) << grade << endl; }Explanation / Answer
//please rate
#include <iostream>
#include <fstream>
#include <iomanip>
#include<cstdlib>
using namespace std;
const int LINE_BUFF_SIZE = 256 + 1 ;
const int FIRST_NAME_SIZE = 10 + 1;
const int LAST_NAME_SIZE = 12 + 1;
const int ID_SIZE = 6 + 1;
const int TEST_SCORE_SIZE = 6 ;
//PROTOTYPES
int lowestScore(int[]);
double averageDropOne(int[], int);
char letterGrade(double);
void printHeader();
void writeHeaderToFile(fstream &);
void printResultToScreen(char *, char *, char *, int *, double, char);
void writeResultToFile(char lName[], char fName[], char iD[], int scores[], double avg, char grade, fstream &fout);
int getStudentInfo(const char *, char *, char *, char *, int *);
int main(int argc, char * argv[])
{
//LOCAL DECLARATIONS
fstream fin;
fstream fout;
char lineBuff[LINE_BUFF_SIZE];
char fName[FIRST_NAME_SIZE];
char lName[LAST_NAME_SIZE];
char iD[ID_SIZE];
int testScores[TEST_SCORE_SIZE];
int lowest;
double average;
char grade;
//PROCEDURES
//Open data file and create output result file
fin.open("student_input.dat", ios::in);
if (!fin)
{
cout << "Cannot open data file. Program aborting. ";
exit(1);
}
fout.open("student_results.dat", ios::out);
if (!fout)
{
cout << "Cannot open output file. Program aborting. ";
exit(1);
}
//display and write header
printHeader();
writeHeaderToFile(fout);
//proceed
while (fin.getline(lineBuff, LINE_BUFF_SIZE))
{
//parse student info line
int studentInfo = getStudentInfo(lineBuff, fName, lName, iD, testScores);
if (!studentInfo) //if getting an error while parsing
{
cout << "Error: Negative score input. Program aborting. ";
exit(1);
}
else //parsing successfully
{
//calculate lowest score, average score and letter grade
lowest = -1;
if (studentInfo > 5)
lowest = lowestScore(testScores);
average = averageDropOne(testScores, lowest);
grade = letterGrade(average);
//output result to screen and file
printResultToScreen(lName, fName, iD, testScores, average, grade);
writeResultToFile(lName, fName, iD, testScores, average, grade, fout);
}
}
fout.close();
fin.close();
cin.get();
return 0;
}
//---------------------------------------------------------
// FUNCTION DEFINITIONS
//---------------------------------------------------------
//split and parse student info
//return number of test score (5 or 6) or 0 if getting an negative score or blank line
int getStudentInfo(const char line[], char fName[], char lName[], char iD[], int scores[])
{
char tempScore[10];
int tmpScr = 0;
int scoreCount = 0;
int i=0,j=0,k=0;
if (!line[i]) //empty line, return 0
return 0;
//get first name
while (line[i] != ' ' && line[i] != ' ')
fName[j++] = line[i++];
fName[j] = '';
while (line[i] == ' ' || line[i] == ' ')
i++;
//get last name
j=0;
while (line[i] != ' ' && line[i] != ' ')
lName[j++] = line[i++];
lName[j] = '';
while (line[i] == ' ' || line[i] == ' ')
i++;
//get id
j=0;
while (line[i] != ' ' && line[i] != ' ')
iD[j++] = line[i++];
iD[j] = '';
while (line[i] == ' ' || line[i] == ' ')
i++;
//get all the test scores
j=0;
while (line[i])
{
while (line[i] && line[i] != ' ' && line[i] != ' ')
tempScore[j++] = line[i++];
tempScore[j] = '';
tmpScr = atoi(tempScore);
if (tmpScr < 0) //negative score, return 0
return 0;
scores[scoreCount] = atoi(tempScore);//scoreCount++?
j=0;
scoreCount++;
while (line[i] == ' ' || line[i] == ' ')
i++;
}
//if scoreCount is not 6, then we must fill in the last test score
//with an invalid score -1
if (scoreCount != TEST_SCORE_SIZE)
scores[scoreCount] = -1;
return scoreCount;
}
//---------------------------------------------------------
int lowestScore(int scores[]){
int lowest = scores[0];
for (int i = 1; i < TEST_SCORE_SIZE; i++){
if (scores[i] < lowest)
{
lowest = scores[i];
}
}
return lowest;
}
//---------------------------------------------------------
double averageDropOne(int scores[], int scoreToDrop)
{
double avg = 0.0;
for (int i = 0; i < TEST_SCORE_SIZE; i++)
{
avg += scores[i];
}
return (avg - scoreToDrop) / (TEST_SCORE_SIZE - 1.0);
}
//---------------------------------------------------------
char letterGrade(double avg)
{
if (avg >= 89.5)
return 'A';
if (avg >= 79.5)
return 'B';
if (avg >= 69.5)
return 'C';
if (avg >= 59.5)
return 'D';
return 'F';
}
//---------------------------------------------------------
void printHeader()
{
cout << setw(LAST_NAME_SIZE) << left << "Last Name" << " "
<< setw(FIRST_NAME_SIZE) << left << "First Name" << " "
<< setw(ID_SIZE) << right << "ID " << " "
<< setw(17) << "Test Scores"
<< setw(15) << "Average"
<< setw(8) << "Grade"
<< endl;
int headerSize = LAST_NAME_SIZE + 1 + FIRST_NAME_SIZE + 1 + ID_SIZE + 3 + 17 + 15 +8;
for (int i = 0; i < headerSize; i++)
cout << "-";
cout << endl;
}
//---------------------------------------------------------
void writeHeaderToFile(fstream &fout)
{
fout << setw(LAST_NAME_SIZE) << left << "Last Name" << " "
<< setw(FIRST_NAME_SIZE) << left << "First Name" << " "
<< setw(ID_SIZE) << right << "ID " << " "
<< setw(17) << "Test Scores"
<< setw(15) << "Average"
<< setw(8) << "Grade"
<< endl;
int headerSize = LAST_NAME_SIZE + 1 + FIRST_NAME_SIZE + 1 + ID_SIZE + 3 + 17 + 15 +8;
for (int i = 0; i < headerSize; i++)
fout << "-";
fout << endl;
}
//---------------------------------------------------------
void printResultToScreen(char lName[], char fName[], char iD[], int scores[], double avg, char grade){
cout << setw(LAST_NAME_SIZE) << left << lName << " "
<< setw(FIRST_NAME_SIZE) << left << fName << " "
<< setw(ID_SIZE) << right << iD << " ";
for (int i = 0; i < TEST_SCORE_SIZE; i++){
cout << setw(3) << scores[i] << " ";
}
cout << fixed << setprecision(1)<< setw(7) << avg<< setw(7) << grade<< endl;
}
//---------------------------------------------------------
void writeResultToFile(char lName[], char fName[], char iD[], int scores[], double avg, char grade, fstream &fout){
fout << setw(LAST_NAME_SIZE) << left << lName << " "
<< setw(FIRST_NAME_SIZE) << left << fName << " "
<< setw(ID_SIZE) << right << iD << " ";
for (int i = 0; i < TEST_SCORE_SIZE; i++){
fout << setw(3) << scores[i] << " ";
}
fout << fixed << setprecision(1)<< setw(7) << avg<< setw(7) << grade<< endl;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.