Figure 11.2

#include <iostream> 					// >>, <<, cin, cout
using namespace std;

#include "Temperature.h" 				// Temperature

int main()
{
   cout << "This program shows the Fahrenheit, Celsius, and\n"
	<< "Kelvin equivalents of a temperature.\n\n";
   char response;
   Temperature theTemperature; 				// construction
   do
   {
	cout << "Enter a temperature (e.g., 98.6 F): ";
	theTemperature.read(cin); 			// input
	cout << "--> "; 				// output
	theTemperature.inFahrenheit().print(cout);
	cout << " == ";
	theTemperature.inCelsius().print(cout);
	cout << " == ";
	theTemperature.inKelvin().print(cout);
	cout << endl;
	cout << "\nDo you have more temperatures to convert? ";
	cin >> response;
   }
   while (response == 'Y' || response == 'y');
}

 

 Sample Runs Figure 11.2

This program shows the Fahrenheit, Celsius, and
Kelvin equivalents of a temperature.

Enter a temperature (e.g., 98.6 F): 212 F
--> 212 F == 100 C == 373.15 K

Do you have more temperatures to convert? Y

Enter a temperature (e.g., 98.6 F): 0 C
--> 32 F == 0 C == 273.15 K

Do you have more temperatures to convert? Y

Enter a temperature (e.g., 98.6 F): 100 K
--> -279.67 F == -173.15 C == 100 K

Do you have more temperatures to convert? N

 

 

Figure 11.5

#include "Temperature.h" 		// class Temperature

// -------- Utility method -----------------------------------
bool Temperature::isValid(double degrees, char scale)
{
   switch (scale)
   {
   case 'F': case 'f': 			// Fahrenheit
	return degrees >= MIN_FAHRENHEIT;
   case 'C': case 'c': 			// Celsius
	return degrees >= MIN_CELSIUS;
   case 'K': case 'k': 			// Kelvin
	return degrees >= MIN_KELVIN;
   default: 				// otherwise, invalid
	return false;
   }
}

 

 

Figure 11.6

#include "Temperature.h" 			// class Temperature
#include <cctype> 				// islower(), toupper()
#include <cstdlib> 				// exit()
using namespace std;

// -------- Explicit-value constructor --------------------------
Temperature::Temperature(double initialDegrees, char initialScale)
{
   if ( isValid(initialDegrees, initialScale) )
   {
	if (islower(initialScale)) 			// if scale is lowercase
	   initialScale = toupper(initialScale); 	// convert it to uppercase
	myDegrees = initialDegrees; 			// proceed with
	myScale = initialScale; 			// initialization
   } 							// otherwise, error msg
   else
   {
	cerr << "\n*** Temperature constructor received invalid params "
	     << initialDegrees << ' ' << initialScale << endl;
	exit(1);
   }
}
 

 

 

Figure 11.8

void Temperature::read(istream& in)
{
   double inDegrees; 			// temporary variables to
   char inScale; 			// store the input values
   in >> inDegrees >> inScale; 		// read values from in
   if ( isValid(inDegrees, inScale) ) 	// if they're valid
   {
	if ( islower(inScale) ) 	// if scale is lower case
	    inScale = toupper(inScale); // convert it to upper case
	myScale = inScale; 		// assign input values
	myDegrees = inDegrees; 		// to instance variables
   }
   else 				// otherwise
	in.setstate(ios::failbit); 	// set fail bit in stream
}

 

 

Figure 11.9

Temperature Temperature::inFahrenheit() const
{
   switch (myScale)
   {
   case 'F':
	return Temperature(myDegrees, 'F');
   case 'C':
	return Temperature(myDegrees * 1.8 + 32.0, 'F');
   case 'K':
	return Temperature((myDegrees - 273.15) * 1.8 + 32.0, 'F');
   }
}

 

 

Figure 11.10

bool Temperature::operator<(const Temperature& rightOperand) const
{
Temperature localTemp; 			// the equivalent of rightOperand,
					// but in my scale
switch (myScale)
{
   case 'C': localTemp = rightOperand.inCelsius();
	break;
   case 'F': localTemp = rightOperand.inFahrenheit();
	break;
   case 'K': localTemp = rightOperand.inKelvin();
	break;
   }
   return myDegrees < localTemp.getDegrees();
}

 

 

Figure 11.11

bool Temperature::operator==(const Temperature& rightOperand) const
{
   Temperature localTemp; 		// the equivalent of rightOperand,
					// but in my scale
   switch (myScale)
   {
   case 'C': localTemp = rightOperand.inCelsius();
	break;
   case 'F': localTemp = rightOperand.inFahrenheit();
	break;
   case 'K': localTemp = rightOperand.inKelvin();
	break;
   }
   return myDegrees == localTemp.getDegrees();
}

 

 

Figure 11.12

#ifndef TEMPERATURE
#define TEMPERATURE

#include <iostream> 				// istream, ostream
using namespace std;

const double MIN_FAHRENHEIT = -459.67;
const double MIN_CELSIUS = -273.15;
const double MIN_KELVIN = 0.0;

class Temperature
{
   public: 					// The class interface
   Temperature();
   Temperature(double initialDegrees, char initialScale);
   double getDegrees() const;
   char getScale() const;
   Temperature inFahrenheit() const;
   Temperature inCelsius() const;
   Temperature inKelvin() const;
   bool operator< (const Temperature& rightOperand) const;
   bool operator== (const Temperature& rightOperand) const;
	// ... other relational operators omitted ...
   void print(ostream& out) const;
   void read(istream& in);
   static bool isValid(double degrees, char scale);

   private: 				// Class invariant:
   double myDegrees; 			// myScale == 'F' && myDegrees >= -459.67
   char myScale; 			// || myScale == 'C' && myDegrees >= -273.15
					// || myScale == 'K' && myDegrees >= 0.0
};

// ... Definitions of inline operations go here ...

#endif

 

 

Figure 11.13

#ifndef STUDENT // compile-once
#define STUDENT // wrapper

#include <iostream> // istream, ostream
#include <string> // string
using namespace std;
class Student
{
   public: 	// The Interface
		// constructors
   Student();
   Student(long idNumber, const string & firstName,
   const string & lastName, const string & year,
   double credits, double gpa);
		// accessors
   long getID() const;
   string getFirstName() const;
	// ... Add getLastName(), getYear(), getCredits(), and getGPA()
	// relational ops
   bool operator== (const Student& rightOperand) const;
   bool operator!= (const Student& rightOperand) const;
	// ... Add operators <, >, <=, and >=.
	// ... See the exercises at the end of this section for
	// ... information about these operators.
	// I/O
   void read(istream& in);
   void print(ostream& out) const;

   private: 	// Implementation Details
			// Examples:
   long myIDNumber; 	// 123456789
   string myFirstName, 	// Jane
   myLastName, 		// Doe
   myYear; 		// Senior
   double myCredits, 	// 15.0
   myGPA; 		// 3.75
};

// ** Put definitions of all accessors and relational operators here.
// ...
// ** Definitions of the constructors and the I/O methods are more
// ** complicated and should be put in Student.cpp.

#endif

 

 

Figure 11.14

// ... #includes go here ...

void fill(vector<Student>& sVec, const string& fileName);

int main()
{
   const string INPUT_FILE = "students.txt";
   cout << "This program provides an information retrieval system\n"
   	<<" by reading a series of student records from "
	<< '\'' << INPUT_FILE << '\''
	<< "\n and then allowing retrieval of any student's data.\n";
// 1. Declare studentVec and use fill() to read Students into it
// 2. Loop:
// a. Prompt for and read an integer studentID
// b. Search studentVec for Student with that studentID
// c. If such a Student object was found
// Display the Student object
// Otherwise
// Display a "not found" message
}

// ... Definition of fill() goes here

 

 

students.txt

111223333 Bill Board
Freshman 16.0 3.15

666554444 Jose CanuSee
Sophomore 16.0 3.25

777889999 Ben Dover
Junior 16.0 2.5

333221111 Stan Dupp
Senior 8.0 3.75

444556666 Ellie Kat
Senior 16.0 3.125

999887777 Isabelle Ringing
Junior 16.0 3.8

 

 

Sample Run Figure 11.14

This program provides an information retrieval system
by reading a series of student records from 'students.dat'
and then allowing retrieval of any student's data.
Enter the ID # of a student (eof to quit): 333221111
333221111 Stan Dupp
Senior 16.0000 3.7500

Enter the ID # of a student (eof to quit): 123456789
There is no student with ID # 123456789.

Enter the ID # of a student (eof to quit): 999887777
999887777 Ringing, Isabelle
Junior 8.0000 3.8000

Enter the ID # of a student (eof to quit): ^D

 

 

Figure 11.19

#include <iostream> 			// >>, <<, cin, cout
using namespace std;

#include "Temperature.h" 		// Temperature

int main()
{
   cout << "This program shows the Fahrenheit, Celsius, and\n"
 	<<"Kelvin equivalents of a temperature.\n\n";
   char response;
   Temperature theTemperature; 		// construction
   do
   {
	cout << "Enter a temperature (e.g., 98.6 F): ";
	cin >> theTemperature; 		// input
	cout << "--> " 			// output
	     << theTemperature.inFahrenheit()
	     << " == "
	     << theTemperature.inCelsius()
	     << " == "
	     << theTemperature.inKelvin()
	     << endl;
	cout << "\nDo you have more temperatures to convert? ";
	cin >> response;
   }
   while (response == 'Y' || response == 'y');
}