CSCI 152                          Simple Structures

 

//  GLOBAL TYPE DECLARATIONS                                                           

 

  1    struct Date                      

  2    {                                

  3       int month;             

  4       int day;                     

  5       int year;                    

  6    };                               

 

  7    struct Machine                   

  8    {                                

  9       int   id;                      

 10       bool  serviceContract;   

 11       float failRate;               

 12       int   downDays;               

 13       float cost,                   

 14             deprValue;              

 15    };                               

 

 //  LOCAL VARIABLE DECLARATIONS

 

 16    Date yesterday;        

 17    Date today = { 3, 2, 2004 };   // compile-time initialization                                   

 18    Machine press;                 

 19    Machine station [100];         

 

The following statements demonstrate references to fields (fully qualified names must be used for all field identifiers).  You can do anything with a field that you can do with a single variable of the same type.

 

 20  cout << "Date: " << today.month << "/"

          << today.day << "/"

          << today.year << endl;

 21  cout << "Machine #  " << press.id << endl;

 22  cout << "Original cost = $" << setiosflags(ios::showpoint)

          << setprecision(2) << press.cost << endl;

 23  cout << "Depreciation value = $" << press.deprValue << endl;

 24  cout << "# down days since purchase = " << press.downDays << endl;

 25  if (press.failRate > MAX_FAIL_RATE)

 26      cout << "Excessive downtime\n";

 27  if (press.serviceContract == false) // or if(!press.serviceContract)

 28      cout << "Service contract has expired\n";

 

 

The only defined operations for structure variables (the entire structure) of the same type are:

 

 29  yesterday = today;

 

         is equivalent to these three statements:

 

 30  //   yesterday.month = today.month;

 31  //   yesterday.day   = today.day;

 32  //   yesterday.year  = today.year;


Another example of structure assignments:

 

  1  station[5] = press;

 

     is equivalent to:

 

  2    station[5].id = press.id;

  3    station[5].serviceContract = press.serviceContract;

  4    station[5].failRate = press.failRate;

  5    station[5].downDays = press.downDays;

  6    station[5].cost = press.cost;

  7    station[5].deprValue = press.deprValue;

 

The following statements demonstrate references to elements of an array of structures.  Values are input from a text file to be assigned to successive elements of the station array.

 

     char contractCode;

     int  stationNbr, n;

     bool found;

 

  1  stationNbr = 0;   // number of elements currently assigned in array

                       // and subscript of next available array element

 

  2  while (inFile >> station[stationNbr].id >> contractCode))

     {

  3     if (contractCode == 'Y')

  4        station[stationNbr].serviceContract = true;

  5     else station[stationNbr].serviceContract = false;

  6     inFile >> station[stationNbr].failRate;

  7     inFile >> station[stationNbr].downDays;

  8     inFile >> station[stationNbr].cost

               >> station[stationNbr].deprValue;

  9     stationNbr ++ ;    

     }                        

 

 // After the station array has been loaded, it can be searched to see if

 // a particular machine is represented in the array.  For example, the

 // following code will search the array to see if there is a match on

 // press (assume the press structure variable has been assigned values).

 

 10  n = 0;

 11  found = false;

 12  while (n < stationNbr  &&  ! found)

 13     if (station[n].id == press.id)

 14         found = true;

 15     else n++;

 

 // If press is not in the array, insert it into the array in the next

 // available position, assuming there is space in the array.

 

 16  if (! found)

     {

 17    station[stationNbr] = press;  // structure-to-structure assignment

 18    stationNbr++;

     }