//*****************************************************************
// R. A. Hillyard
// fileAvg5.cpp
// March 2001
//
// This version lets the user enter the file names
//*****************************************************************
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
void setDecimalPoint(ostream& coutForMe, int places);
bool openFiles(ifstream& inFile, ofstream& outFile);
int main()
{
long int idnum; //variable for id number
int mid1, mid2, final; //variables for test scores
ifstream scoreFile; //declare an input file stream
ofstream avgFile;
if(!openFiles(scoreFile, avgFile)) //open files and exit if problem
{
exit(1);
}
setDecimalPoint(cout, 2); //set precision for output streams
setDecimalPoint(avgFile, 2);
//read data from file and process
while (scoreFile >> idnum >> mid1 >> mid2 >> final)
{
double avg = (mid1 + mid2 + 2*final) / 4.0; //calculate average
cout << idnum << setw(10) << avg << endl; //output result to screen
avgFile << idnum << setw(10) << avg << endl; //output result to file
}//endwhile
scoreFile.close(); //close files
avgFile.close();
return 0;
}
void setDecimalPoint(ostream& coutForMe, int places)
{
coutForMe.setf(ios::showpoint);
coutForMe.setf(ios::fixed);
coutForMe.precision(places);
}//end setDecimalPoint
bool openFiles(ifstream& inFile, ofstream& outFile)
{
char fileName[20];
cout << "File Name for input? ";
cin >> fileName;
inFile.open(fileName); //open the file
if(inFile.fail()) //check for success and exit if open failed
{
cout << "unable to open scores.dat file\n";
return false;
}
cout << "File Name for output? ";
cin >> fileName;
outFile.open(fileName); //open the file
if(outFile.fail()) //check for success and exit if open failed
{
cout << "unable to open average.dat\n";
return false;
}
return true;
}
//************************program output***************************
File Name for input? scores.dat
File Name for output? average.dat
123456 85.75 234564 85.00 976523 90.75 782346 81.50 987656 80.50 345876 80.25
//*********************contents of scores.dat**********************
123456 82 79 91 234564 88 78 87 976523 91 92 90 782346 77 85 82 987656 62 92 84 345876 77 74 85
//*********************contents of average.dat********************* 123456 85.75 234564 85.00 976523 90.75 782346 81.50 987656 80.50 345876 80.25