1: // Filenme: BSTRUCT.CPP
2: // Purpose: Illustrates a simple struct for representing a bank account.
4: #include <iostream>
5: #include <iomanip>
6: using namespace std;
9: struct Person // Must be defined first so that
10: { // it can be used in BankAccount
11: char firstInitial;
12: char lastInitial;
13: int idNumber;
14: };
16: struct BankAccount
17: {
18: Person owner; // This field is itself a struct.
19: double balance;
20: };
23: void InitAccount(/* out */ BankAccount& account,
24: /* in */ int idNum,
25: /* in */ char first,
26: /* in */ char last,
27: /* in */ double balance);
28: void UpdateBalance(/* inout */ BankAccount& account,
29: /* in */ double amount);
30: void DisplayAccountInfo(/* in */ const BankAccount& account);
31: void Pause(/* in */ int indentLevel);
34: int main()
35: {
36: cout << endl
37: << "This program uses a struct "
38: << "to represent a bank account. " << endl
39: << "You should study the source code "
40: << "at the same time as the output. " << endl
41: << endl;
42: Pause(0);
44: BankAccount account = { {'P', 'S', 123}, 148.37};
45: DisplayAccountInfo(account); cout << endl;
46: UpdateBalance(account, 12.59);
47: DisplayAccountInfo(account); cout << endl;
48: Pause(0);
50: account.owner.firstInitial = 'W';
51: account.owner.lastInitial = 'C';
52: account.owner.idNumber = 321;
53: account.balance = -175.50;
54: DisplayAccountInfo(account); cout << endl;
55: UpdateBalance(account, -345.20);
56: DisplayAccountInfo(account); cout << endl;
57: Pause(0);
59: InitAccount(account, 246, 'B', 'C', 100.00);
60: DisplayAccountInfo(account); cout << endl;
61: UpdateBalance(account, 150);
62: DisplayAccountInfo(account); cout << endl;
63: Pause(0);
65: return 0;
66: }
70: //******************************************************************
71: void InitAccount(/* out */ BankAccount& account,
72: /* in */ int idNum,
73: /* in */ char first,
74: /* in */ char last,
75: /* in */ double balance)
76: // Pre: All in-parameters have been initialized.
77: // Post: The information in each in-parameter has been
78: // stored in account.
79: {
80: account.owner.idNumber = idNum;
81: account.owner.firstInitial = first;
82: account.owner.lastInitial = last;
83: account.balance = balance;
84: }
87: //******************************************************************
88: void UpdateBalance(/* inout */ BankAccount& account,
89: /* in */ double amount)
90: // Pre: account and amount have been initialized.
91: // Post: The balance in account has been updated by the
92: // quantity amount, which may be positive or negative.
93: {
94: account.balance += amount;
95: }
98: //******************************************************************
99: void DisplayAccountInfo(/* in */ const BankAccount& account)
100: // Pre: "account" has been initialized.
101: // Post: The information in "account" has been displayed.
102: {
103: cout.setf(ios::fixed, ios::floatfield);
104: cout.setf(ios::showpoint);
105: cout << setprecision(2);
106: cout << "Owner: " << account.owner.firstInitial
107: << account.owner.lastInitial << endl;
108: cout << "Owner's ID#: " << account.owner.idNumber << endl;
109: cout << "Current balance: $" << account.balance << endl;
110: }
114: //******************************************************************
115: void Pause(/* in */ int indentLevel)
116: // Pre: indentLevel has been initialized.
117: // The input stream cin is empty.
118: // Post: The program has paused and displayed a one-line message
119: // indented indentLevel spaces, after which the user has
120: // pressed the ENTER key.
121: {
122: cout << setw(indentLevel) << ""
123: << "Press return to continue ... ";
124: char returnChar;
125: cin.get(returnChar);
126: cout << endl;
127: }