//*****************************************************************
// 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