COSC 1337 – Programming Fundamentals II
Bob Comer, Professor of Computer Studies


Using Arrays of Objects

To try this program with your compiler, highlight the program text below, make a copy of it (ctrl-c in Windows), open a source code window in your compiler and paste the program code into the window (ctrl-v in Windows).

//**************************************************************
//*  Programmer: Bob Comer
//*
//*  This program allows the user to look up item prices
//*    at a store. The price information is loaded from
//*    a file and stored in an array of objects.
//**************************************************************

#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

class ItemRec
{
private:
   int itemNo;             // inventory item number
   char description[41];   // item description
   float price;            // item price
public:
   ItemRec();
   ItemRec(int, char [], float);
   void set(int, char [], float);
   int getItemNo();
   const char * getDesc();
   float getPrice();
};

ItemRec::ItemRec()
{
   itemNo = 0;
   strcpy( description, "" );
   price = 0;
}

ItemRec::ItemRec(int item, char desc[], float itemPrice)
{
   set(item, desc, itemPrice);
}

void ItemRec::set(int item, char desc[], float itemPrice)
{
   itemNo = item;
   strcpy( description, desc );
   price = itemPrice;
}

int ItemRec::getItemNo()
{
   return itemNo;
}

const char * ItemRec::getDesc()
{
   return description; 
}

float ItemRec::getPrice()
{
   return price;
}

const int MAX_ITEMS = 200;

void getItems( ifstream&, ItemRec [], int&);
int search( int, ItemRec [], int);

int main()
{
   ItemRec item[MAX_ITEMS];  // inventory items
   int numItems;             // number of items in the lists
   int srchItemNo;           // an item number to look up
   int position;             // position of an item in list
   ifstream itemFile;        // item price file

// open Item Price file
   itemFile.open("items.txt");
   if (!itemFile)
   {
      cout << "Can not open item file \"itemfile.txt\"" << endl;
      return 1;
   }

// load item price file
   getItems( itemFile, item, numItems);

// look up item prices
   cout << "Enter Item Number (or -1 to quit): ";
   cin >> srchItemNo;
   while (srchItemNo > 0)
   {
   // get price for item
      position = search( srchItemNo, item, numItems);
      if (position == -1)
      {
	      cout << "Item " << srchItemNo
              << " is not in the inventory" << endl;
      }
      else
         cout << "Price for item " << srchItemNo
		      << " " << item[position].getDesc()
              << " is  $ " << item[position].getPrice() << endl;

   // get next item
      cout << "Enter Item Number (or -1 to quit): ";
      cin >> srchItemNo;
   }

   return 0;
}

//**************************************************************
//* FUNCTION getItems
//*
//* Copies item information from file into an array
//**************************************************************

void getItems( ifstream &itemFile,   // in  - item price file
	            ItemRec   item[],    // out - list of items
	            int      &numItems)  // out - number of items
{
   int   oneItemNo;    // an item number
   char  oneDesc[41];  // description of item
   float onePrice;     // price for the item

   numItems = 0;
   itemFile >> oneItemNo >> onePrice;
   itemFile.ignore();                 // discard space before desc
   itemFile.getline( oneDesc, 41 );
   while (itemFile && numItems < MAX_ITEMS)
   {
   // move new item into array and increment item count
      item[numItems].set( oneItemNo, oneDesc, onePrice );
      numItems++;

   // get next item information
      itemFile >> oneItemNo >> onePrice;
      itemFile.ignore();                 // discard space
      itemFile.getline( oneDesc, 41 );
   }
}

//**************************************************************
//*  FUNCTION search
//*
//*  Find the location of an item in a list.
//*
//**************************************************************

int search( int srchVal,     // in - value to search for
		      ItemRec list[],  // in - list to search
		      int length)      // in - number of items in list
{
// search list for item and return its position if found
   int index = 0;
   while (index < length)
   {
      if (srchVal == list[index].getItemNo())
	      return index;
      index++;
   }

// item not found - return a flag
   return -1;
}


Return to Programming Fundamentals II Home Page

Copyright: © 2013 by the Austin Community College.
Department of Computer Studies. All rights reserved.
Comments to:
Bob Comer
Last updated: January 12, 2013