📄 phonebook.cpp
字号:
// Exercise 22.13: PhoneBook.cpp
// Stores in sorted order and displays phone book entries using
// overloaded operators
#include <iostream> // required to perform C++ stream I/O
#include <string> // required to access string functions
#include <iomanip> // required for parameterized stream manipulators
#include "PhoneNumber.h" // PhoneNumber class definition
// overloaded stream insertion operator
ostream &operator<<( ostream &, PhoneNumber & );
// overloaded stream extraction operator
istream &operator>>( istream &, PhoneNumber & );
int main()
{
const int ARRAY_SIZE = 10; // maximum number of phone book entries
// define variables
int count = 0; // stores the number of entries in the phone book
int selection = 0; // stores the user's menu selection
PhoneNumber numbers[ ARRAY_SIZE ]; // array of PhoneNumbers
string names[ ARRAY_SIZE ]; // array of phone book entry names
// repeat until the user chooses to exit
while ( selection != 3 )
{
// display menu
cout << "\nSelect one of the following options\n" << endl;
cout << "1 - Enter new phone number" << endl;
cout << "2 - View phone numbers" << endl;
cout << "3 - Exit the application" << endl;
cout << "Enter selection: ";
cin >> selection;
cout << endl;
// determine which option the user selected
switch ( selection )
{
// enter phone number
case 1:
// ensure that there is space in the array
if ( count < ARRAY_SIZE )
{
cin.ignore(); // remove newline
// prompt user for and store name and phone number
cout << "Enter name: ";
getline( cin, names[ count ] ); // get name
cout << "Enter phone number in the form (123) "
<< "456-7890: "; // input phone number
// use the overloaded stream extraction operator
cin >> numbers[ count ];
count++; // increment count
} // end if
else
{
cout << "Error: You cannot enter any more numbers."
<< endl;
} // end else
break;
// view numbers
case 2:
cout << "\nListing of phone numbers" << endl;
cout << "------------------------" << endl;
// display each name and number
for ( int i = 0; i < count; i++ )
{
// display name
cout << "Name: " << names[ i ] << endl;
// use the overloaded stream insertion operator
cout << "Number: " << numbers[ i ] << endl;
cout << "\n";
} // end for
break;
// exit
case 3:
cout << "Good-bye!" << endl << endl;
break;
default:
cout << "Error: Enter a valid menu selection";
} // end switch
} // end while
return 0; // indicate that program ended successfully
} // end main
// overloaded stream-insertion operator for PhoneNumber objects
ostream &operator<<( ostream &output, PhoneNumber &number )
{
output << "(" << number.getAreaCode() << ") "
<< number.getExchange() << "-" << number.getLine();
return output; // enables chaining: cout << a << b << c;
} // end function operator<<
// overloaded stream0extraction operator for PhoneNumber objects
istream &operator>>( istream &input, PhoneNumber &num )
{
// define variables
string inputAreaCode; // area code
string inputExchange; // exchange
string inputLine; // line
// read the phone number from cin
input.ignore(); // skip (
// input area code
input >> setw( 3 ) >> inputAreaCode;
// set the area code
num.setAreaCode( inputAreaCode );
input.ignore( 2 ); // skip ) and space
// input exchange
input >> setw( 3 ) >> inputExchange;
// set the exchange
num.setExchange( inputExchange );
input.ignore(); // skip dash (-)
// input line
input >> setw( 4 ) >> inputLine;
// set the line
num.setLine( inputLine );
return input; // enables chaining: cin >> a >> b >> c;
} // end function operator>>
/**************************************************************************
* (C) Copyright 1992-2005 by Deitel & Associates, Inc. and *
* Pearson Education, Inc. All Rights Reserved. *
* DISCLAIMER: The authors and publisher of this book have used their *
* best efforts in preparing the book. These efforts include the *
* development, research, and testing of the theories and programs *
* to determine their effectiveness. The authors and publisher make *
* no warranty of any kind, expressed or implied, with regard to these *
* programs or to the documentation contained in these books. The authors *
* and publisher shall not be liable in any event for incidental or *
* consequential damages in connection with, or arising out of, the *
* furnishing, performance, or use of these programs. *
**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -