// File: ConversionProject.cpp
// Date: 4/27/2007
// Author: Mike Elms with modifications by Nicholas Duchon
// ND: my mods are commented with ND

#include < iostream >
   using namespace std;

   bool menu(); // proto

   int numberOfConversions = 0;

   double myCelsius   (double f) {
      return (f - 32) * 5.0 / 9.0;} // end myCelsius(double f)

   double myFahrenheit(double c) {
      return c * 9.0 / 5.0 + 32;}   // end myFahrenheit(double c)

   double myMile      (double k) {
      return k*1.61;}               // end myMile (double)

   double myKilometer (double m) {
      return m*0.62;}               // end myKilometer (double)
/*
1 kilometers is equal to 0.62 miles 
1 miles is equal to 1.61 kilometers
*/

   int celsiusToFahrenheit()
   {
      double celsius;
      double fahrenheit;
   
      cout << "Enter the temperature in celsius: ";
      cin >> celsius;
   
      fahrenheit = myFahrenheit(celsius);
      numberOfConversions++;
   
      cout << "The temperature in fahrenheit is " << fahrenheit << endl;
      return 0;
   }

   int fahrenheitToCelsius()
   {
      double celsius;
      double fahrenheit;
   
      cout << "Enter the temperature in fahrenheit: ";
      cin >> fahrenheit;
   
      celsius = myCelsius(fahrenheit);
      numberOfConversions++;
   
      cout << "The temperature in celsius is " << celsius << endl;
      return 0;
   }

   int kilometerToMile()
   {
      double kilometer;
      double mile;
      cout << "Enter the distance in kilometers: ";
      cin >> kilometer;
      mile= myMile(kilometer);
      numberOfConversions++;
      cout << "The distance in miles is " << mile << endl;
      return 0;
   }

   int mileToKilometer()
   {
      double kilometer;
      double mile;
      cout << "Enter the distance in miles: ";
      cin >> mile;
      kilometer = myKilometer(mile);
      numberOfConversions++;
      cout << "The distance in kilometers is " << kilometer << endl;
      return 0;
   }

// return value:
//   true = continue looping on this menu, false = stop
   bool tempMenu()
   {
      int x;
   
      cout << "Temperature:\n\n";
      cout << "1) Celsius to Fahrenheit" << endl;
      cout << "2) Fahrenheit to Celsius" << endl;
      cout << "3) Menu" << endl;
   
      cin >> x;
   
      if (x == 1)      celsiusToFahrenheit();
      else if (x == 2) fahrenheitToCelsius();
      else if (x == 3) 
         return false;
      else             cout << "Error" << endl;
   
      return true;
   } // end tempMenu

// return value:
//   true = continue looping on this menu, false = stop
   bool distMenu()
   {
      int x;
      cout << "Distance:\n\n";
      cout << "1) Kilometer to Mile" << endl;
      cout << "2) Mile to Kilometer" << endl;
      cout << "3) Menu" << endl;
      
      cin >> x;
      
      switch (x) {
         case 1:  kilometerToMile(); 
            break;
         case 2:  mileToKilometer(); 
            break;
         case 3:  
            return false;
         default: cout << "Error" << endl;
      } // end switching on menu selection   
      return true; // ND: use return value looping
   } // end distMenu

// return value:
//   true = continue looping on this menu, false = stop
   bool menu()
   {
      int x;
   
      cout << "Metric Conversion:\n\n";
      cout << "1) Temperature" << endl;
      cout << "2) Distance" << endl;
      cout << "3) Exit" << endl;
   
      cin >> x;
   
      switch(x) { // use return value looping
         case 1: 
            while (tempMenu()); 
            break;
         case 2: 
            while (distMenu()); 
            break;
         case 3: 
            return false; // no need for break!
         default: cout << "Error" << endl;
      } // end switch
   
      return true; // ND: USE the return value
   } // end menu - main menu

   int main()
   {
      cout << "Final" << endl;
      while (menu()); // ND: use the return value this way
      cout << numberOfConversions << " number of conversions." << endl;
      return 0;
   } // end main