Question
Can you help me with this code C++ Starter code: grader.cpp can you finsh the code // ----------------------------------------------------------------------- // grader.cpp // ----------------------------------------------------------------------- #include #include #include
Can you help me with this code
C++
Starter code:
grader.cpp
can you finsh the code
// -----------------------------------------------------------------------
// grader.cpp
// -----------------------------------------------------------------------
#include
#include
#include
#include
using namespace std;
// -----------------------------------------------------------------------
// global constants
const string INFILE_PREFIX = "rawgrades-";
const string OUTFILE_PREFIX = "grade-report-";
const string IN_FILE_EXT = ".csv"
const string OUT_FILE_EXT = ".txt";
const size_t LEN_PREFIX = INFILE_PREFIX.length();
const size_t LEN_F_EXT = IN_FILE_EXT.length();
///this will be used for extra space between fields in the output file
const string SPACER = " ";
const double A_GRADE = 90.0;
const double B_GRADE = 80.0;
const double C_GRADE = 70.0;
const double D_GRADE = 60.0;
// anything below D_GRADE is an 'F'
// output field widths
const int FW_NAME = 24;
const int FW_SCORE = 4;
const int FW_LOW = 3;
const int FW_TOTAL = 5;
const int FW_AVG = 7;
const int FW_GRADE = 3;
const int FW_SCORE_X4 = FW_SCORE * 4;
// -----------------------------------------------------------------------
// function prototypes
// top-level functions
string getInputFilename();
string deriveOutputFilename(const string &inFname);
bool openFiles(const string &inName, const string &outName, ifstream &fin, ofstream &fout);
void processGradeFile(ifstream &fin, ofstream &fout);
// helper functions
// TODO (0): declare function prototypes for the helper functions
// -----------------------------------------------------------------------
// program entry point
int main() {
// main() has been implemented for you; no need to change anything here
ifstream fin;
ofstream fout;
string inFilename = getInputFilename();
string outFilename = deriveOutputFilename(inFilename);
if (!openFiles(inFilename, outFilename, fin, fout)) {
return EXIT_FAILURE;
}
cout
processGradeFile(fin, fout);
cout
fin.close();
fout.close();
return EXIT_SUCCESS;
}
// -----------------------------------------------------------------------
// helper function definitions
// Returns true if `fname` of the form "rawgrades-
bool validInputFilename(const string &fname) {
size_t nameLen = fname.length();
// TODO (1): implement validation on the given filename
///look for the presence of INFILE_PREFIX
///look for the presence of IN_FILE_EXT
/// ensure the name length is MORE than just the prefix and extension
// currently this assumes that all names are valid
// but this will fail the unit tests
return true;
}
// Parses a record, placing the substrings into `name`, `id`, and `s1...s4`
void parseStudentRecord(const string &line,
string &name, string &id, int &s1, int &s2, int &s3, int &s4) {
// TODO (2): carve up the input line into substrings
// placing the results into the appropriate reference variables
}
// Returns the smaller of the two values
int min(int a, int b) {
// TODO (3): return minimum value
return 0;
}
// Returns the smallest of all the values
int min(int a, int b, int c, int d) {
// TODO (4): return minimum value
// HINT: use min(int, int)
return 0;
}
// Returns a letter grade for the given score
char gradeFromScore(double score) {
char grade = 'F';
// TODO (5): adjust grade based on score
return grade;
}
// Processes a line read from the raw-grades input file
void processLine(ostream &out, const string &line) {
string studentName, studentId, scores;
int score1, score2, score3, score4;
int total, lowest;
double average;
char letterGrade;
// TODO (6): process the raw record...
parseStudentRecord(line, studentName, studentId, score1, score2, score3, score4);
// - compute total (but subtract the lowest score)
// - compute the average (of 3 scores)
letterGrade = gradeFromScore(average);
// TODO (7): write the formatted record to the report file
//For the low score field, use:
}
// Writes the report header to the given output stream
void writeReportHeader(ofstream &out) {
// Lucky you! I've implemented this one for you. Don't change it! :)
out
out
out
out
out
}
// -----------------------------------------------------------------------
// top-level function definitions
// Returns a validated input filename from the user
string getInputFilename() {
string fname;
// TODO (8): Repeatedly prompt the user for a filename
// until it matches the required form.
return fname;
}
// Derives the output filename from the given input filename
string deriveOutputFilename(const string &inFname) {
// TODO (9): Generate the output file name
///grade-report-
///use .replace to replace the prefix and the extension
return "FIXME-" + inFname;
}
// Returns true only if both files opened without error
bool openFiles(const string &inName, const string &outName, ifstream &fin, ofstream &fout) {
// TODO (10): open input and output files, associate with the given streams
// HINT:
// open input; if fails, write message and return false
// open output; if fails, write message and return false
// return true
return false;
}
// Read input records, process, write formatted output records
void processGradeFile(ifstream &fin, ofstream &fout) {
// This function, too, has been implemented for you... nothing to do here
string rawLine;
writeReportHeader(fout);
while (getline(fin, rawLine)) {
processLine(fout, rawLine);
}
}
// -----------------------------------------------------------------------
7.20 Assignment: Grade Processor Your task for this lab is to complete the implementation of a program that processes a.csv file containing raw grade data, and produces a report file as a .txt. Starter Code The framework of the program has been given to you in the starter code, including useful constants, function prototypes, and the main() function. The parts of the program that you need to complete have been marked with comments: // TODO (n) : Input File Format The input file will be formatted as follows: Columns, also known as fields, are separated by commas and rows, also known as records, are separated by newlines Note: files formatted in this way can be opened and viewed as a table with a program such as MS Excel or Open Office The first row will be a header for the file containing titles for each field and should be ignored All other rows will be student records consisting of comma-separated fields: o student name o student ID o test scores The test scores will be a comma-separated list of 4 test results For example, the beginning of such a file might look like this: Name, ID, score1, score2, score3, score4 Fred Flintstone, 955630, 70, 82,55,80 Barney Rubble, 95771x, 65, 62,0,71 You will have to parse, or separate out, each field from a given line of text. Output File Format The output file will be a neatly formatted report showing the student name, their four scores, the lowest score (dropped), the total score, average, and resulting grade letter For example, given the input above, the report would look like this: Name Scores (Low) Total Average Grade ---- Fred Flintstone Barney Rubble 70 65 82 62 55 0 80 (55) 71 (0) 232 198 77.33 66.00 D Note that various field widths have been defined as constants near the top of the source file. Be sure to use these named constants, rather than hard-coding 'magic numbers' when you get to writing the code to output the formatted record. Implementing the helper functions The program is written in a modular way, using functions to 'abstract' away details, so that the overall flow of the program is easy to understand. The main function calls other functions to do the actual work. Your job is to fill in the details by implementing many of these "helper" functions. The Top-Level Functions string getInputFilename() The program starts by asking the user for the name of the input file. To do this it invokes the getInputFilename() function. This function should Prompt the user to enter a filename. Validate that the filename has the form: o "rawgrades-
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started