1: // Filenme: ISTRUCT.CPP
2: // Purpose: Illustrates a simple struct for representing an
3: // item in inventory.
5: #include <iostream>
6: #include <iomanip>
7: using namespace std;
9: struct ItemType
10: {
11: int numberInStock;
12: bool warrantyAvailable;
13: double price;
14: };
16: void InitItem(/* out */ ItemType& item,
17: /* in */ int numberInStock,
18: /* in */ bool warrantyAvailable,
19: /* in */ double price);
20: void UpdateItemCount(/* inout */ ItemType& item,
21: /* in */ int numberInOrOut);
22: void DisplayItemInfo(/* in */ const ItemType& item);
23: void Pause(/* in */ int indentLevel);
26: int main()
27: {
28: cout << endl
29: << "This program uses a struct to "
30: << "represent an item in inventory. " << endl
31: << "You should study the source code "
32: << "at the same time as the output. " << endl << endl;
34: ItemType item = {15, true, 29.95};
35: DisplayItemInfo(item); cout << endl;
36: UpdateItemCount(item, 7);
37: DisplayItemInfo(item); cout << endl;
38: Pause(0);
40: item.numberInStock = 10;
41: item.warrantyAvailable = false;
42: item.price = 45.50;
43: DisplayItemInfo(item); cout << endl;
44: UpdateItemCount(item, 5);
45: DisplayItemInfo(item); cout << endl;
46: Pause(0);
48: InitItem(item, 35, true, 100.00);
49: DisplayItemInfo(item); cout << endl;
50: UpdateItemCount(item, -15);
51: DisplayItemInfo(item); cout << endl;
52: Pause(0);
54: ItemType otherItem = item;
55: DisplayItemInfo(otherItem); cout << endl;
57: return 0;
58: }
61: //******************************************************************
62: void InitItem(/* out */ ItemType& item,
63: /* in */ int numberInStock,
64: /* in */ bool warrantyAvailable,
65: /* in */ double price)
66: // Pre: All in-parameters have been initialized.
67: // Post: The information in all in-parameters has been
68: // stored in item.
69: {
70: item.numberInStock = numberInStock;
71: item.warrantyAvailable = warrantyAvailable;
72: item.price = price;
73: }
76: //******************************************************************
77: void UpdateItemCount(/* inout */ ItemType& item,
78: /* in */ int numberInOrOut)
79: // Pre: item and numberInOrOut have been initialized.
80: // Post: The number available of item has been updated by the
81: // amount numberInOrOut, which may be positive or negative.
82: {
83: item.numberInStock += numberInOrOut;
84: }
88: //******************************************************************
89: void DisplayItemInfo(/* in */ const ItemType& item)
90: // Pre: item has been initialized.
91: // Post: The information in all fields of item has been displayed.
92: {
93: cout.setf(ios::fixed, ios::floatfield);
94: cout.setf(ios::showpoint);
95: cout << setprecision(2);
96: cout << "Number in stock: " << item.numberInStock << endl;
97: cout << "Current price: $" << item.price << endl;
98: cout << "Warranty Avaiable: "
99: << (item.warrantyAvailable ? "Yes" : "No") << endl;
100: }
103: //******************************************************************
104: void Pause(/* in */ int indentLevel)
105: // Pre: indentLevel has been initialized.
106: // The input stream cin is empty.
107: // Post: The program has paused and displayed a one-line message
108: // indented indentLevel spaces, after which the user has
109: // pressed the ENTER key.
110: {
111: cout << setw(indentLevel) << ""
112: << "Press return to continue ... ";
113: char returnChar;
114: cin.get(returnChar);
115: cout << endl;
116: }