// // test of inventory system // // Described in Chapter 9 of // Data Structures in C++ using the STL // Published by Addison-Wesley, 1997 // Written by Tim Budd, budd@cs.orst.edu // Oregon State University // # include # include # include class Widget { public: // constructors Widget () : id_number (0) { } Widget (int a) : id_number (a) { } // operations int id () { return id_number; } void operator = (Widget & rhs) { id_number = rhs.id_number; } bool operator == (Widget & rhs) { return id_number == rhs.id_number; } bool operator < (Widget & rhs) { return id_number < rhs.id_number; } protected: int id_number; // widget identification number }; ostream & operator << (ostream & out, Widget & w) // output printable representation of widget { return out << "Widget " << w.id(); } class WidgetTester { public: WidgetTester (int id) { test_id = id; } int test_id; // define the function call operator bool operator () (Widget & wid) { return wid.id() == test_id; } }; // // class inventory // manage inventory control class inventory { public: void order (int wid); // process order for widget type wid void receive (Widget wid); // receive widget of type wid in shipment protected: list on_hand; list on_order; }; void inventory::receive (Widget wid) // process a widget received in shipment { cout << "Received shipment of widget " << wid << endl; list::iterator we_need = find (on_order.begin(), on_order.end(), wid.id()); if (we_need != on_order.end()) { cout << "Ship " << wid << " to fill back order" << endl; on_order.erase(we_need); } else on_hand.push_front(wid); } void inventory::order (int wid) // process an order for a widget with given id number { cout << "Received order for widget type " << wid << endl; WidgetTester wtest(wid); // create the tester object list::iterator we_have = find_if(on_hand.begin(), on_hand.end(), wtest); if (we_have != on_hand.end()) { cout << "Ship " << *we_have << endl; on_hand.erase(we_have); } else { cout << "Back order widget of type " << wid << endl; on_order.push_front(wid); } } // // driver program // void main() { inventory wworks; wworks.receive (Widget(1)); wworks.receive (Widget(2)); wworks.receive (Widget(3)); wworks.order (2); wworks.order (2); wworks.receive (Widget(3)); wworks.receive (Widget(2)); wworks.order (1); }