Write a C++ program that prompts the user to enter a file name that contains the total mark of students. Each line in the input file contains a student name followed by the student's total mark. The program should ask the user for the passing threshold (i.e. student whose total mark is greater than or equal the threshold will pass the course) and copy the students who pass the course to a new file (the name of the output file is specified by the user). Moreover, the output file should be format so that all the marks are displayed with two digits after the decimal point. The width for the names and marks fields should be eight and seven, respectively. A sample input and output files are shown below (the passing mark in this sample is assumed to be 60). total.txt (sample) pass.txt (sample) Ahlam 80.123 Ahlam 80.12 Bader 83.1 Bader 83.10 Nabil 91.25 Nabil 91.25 Khoula 70 Khoula 70.00 Saif 55.333 Saif 65.33 Salem 50 Sultan 92.50 Sultan 92.5 Qais 77.20 Qais 77.2
num 3 in c ++
answer it as simple as possible with no complicated codes, please
A C++ program is as follows,
File name: “main.cpp”
//Define header files
#include<iostream>
#include<string>
#include<map>
#include<fstream>
#include<iomanip>
using namespace std;
int main () {
// store the names in a map
std::map<std::string, float> marks_db;
std::string in_file_name, out_file_name;
std::cout<<"Enter input file name: ";
//Get the input file name
std::cin>>in_file_name;
std::cout<<"Enter output file name: ";
//Get the output file name
std::cin>>out_file_name;
std::fstream in_file, out_file;
// open files for respective operations
in_file.open(in_file_name.c_str(), ios::in);
out_file.open(out_file_name.c_str(), ios::out);
// check for file opening status
if (!(in_file.is_open() && out_file.is_open()))
{
std::cout<<"Couldn't open file/files.\n";
return -1;
}
std::string name = "";
std::string marks = "";
// Read the file and store the details in the map
while (!in_file.eof())
{
in_file >> name;
in_file >> marks;
marks_db.insert(std::make_pair(name, stof(marks)));
}
// Close the input file
in_file.close();
float cut_off;
std::cout<<"Enter the threshold mark: ";
std::cin>>cut_off;
// apply the cut off for the given database
std::map<std::string, float> :: iterator it;
for (it = marks_db.begin(); it != marks_db.end(); ++it) {
//Check for the pass mark
if (it->second < cut_off) {
continue;
}
// print to output file with iomanip formatters
out_file.fill(' ');
//Set the width for the names to "8"
out_file.width(8);
out_file << it->first << " ";
//Set the width for the marks to "7"
out_file.width(7);
//Set the decimal digit to "2" and print to output file
out_file << setprecision (2) << fixed << it->second <<"\n";
}
// close the output file
out_file.close();
}
Input file: "total.txt"
Screenshot #1:
Screenshot #2:
Screenshot #3:
Step by step
Solved in 3 steps with 6 images