In: Computer Science
C++ Only
Create a function named PrintStudents, which takes a string input filename and an integer minimum score value and a string output file name as a parameters. The function will read the student scores and names from the file and output the names of the students with scores greater than or equal to the value given. This function returns the integer number of entries read from the file. If the input file cannot be opened, return -1 and do not print anything to the file.
Read each line from the given filename, parse the data, process the data, and write the required information to the file.
Each line of the file contains <FIRST-NAME LAST-NAME>, <SCORE>, <SUBJECT> . Read and parse the data, then write to the output file the names and classes for scores matching the criteria.
Example: With the following data and value of 80:
Constance Shelton, 67, APPM 2002 Charlotte Edwards, 85, CSCI 1300 Alyssa Hill, 78, MATH 1000 Pat Owens, 75, HUMN 1342 Shannon Jimenez, 96, LING 2000 Kristen Swanson, 80, PSYC 1001 Jim Schwartz, 60, CVEN 3241
Your function should return 7 and output to the file should contain:
Charlotte Edwards, CSCI 1300 Shannon Jimenez, LING 200 Kristen Swanson, PSYC 1001
You only need to write the function code for PrintStudents. The split() function is provided, and functions as it does in the homework assignments, to make parsing the output easier. Recall that split takes a string s and splits it at the input delimiter sep, to fill the array words[] up to a capacity of max_words. The return value of split is the number of actual words the string is split into.
int split(string s, char sep, string words[], int max_words);
THE BELOW CODE REPRESENTS THE CODE FOR C++;
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// function declaration
int PrintStudents(string inputFile, int min_score,string outputFile);
int split(string s,char sep, string words[], int max_words );
int main() {
// test the function
int n = PrintStudents("students.txt",80,"outStudents.txt");
if(n != -1)
cout<<"\n No. of students : "<<n<<endl;
else
cout<<"\n No such file exists";
return 0;
}
// function to write the details of the students whose score >= min_score
// inputs : input file, minimum score and output file
// output : number of records read, -1 if error
int PrintStudents(string inputFile, int min_score,string outputFile)
{ // open the input file
ifstream fin(inputFile.c_str());
// if input file can be opened
if(fin.is_open())
{ // open the output file for writing
ofstream fout(outputFile.c_str());
int n=0,score;
string line;
string words[3];
// read till the end of file
while(!fin.eof())
{
getline(fin,line);
n++;
// get the score from the record read
score = split(line,',',words,3);
// check if score>=min_score, then write to output file
if(score >= min_score)
fout<<words[0]<<", "<<words[2]<<"\n";
if(fin.eof())
break;
}
// close the files
fin.close();
fout.close();
return n; // return the number of records read
}else
{
fin.close();
return -1; // file not found
}
}
// function to split a string on a given separator and return the score
// inputs : string , word separator, array of words and max_words
// output is the score
int split(string s,char sep, string words[], int max_words )
{
int index=0,i=0 ;
//loop to extract the words from the line
while(s.find(sep,index+1)!= -1){
words[i] = s.substr(index,s.find(sep,index+1)-index);
i++;
index = s.find(sep,index+1)+2;
}
words[i] = s.substr(index); // extract the last word
// convert to integer and return the score
return(stoi(words[1]));
}
INPUT:
OUTPUT:
CONSOLE: