The entire question is:
You are given a file named phonedir that consists of many lines containing three strings :
lastname firstname emailaddress.
Write a utility program that reads commands (from stdin). Each command has one of two possible forms:
lookup string
add lastname firstname emailaddress
In the case of the first command (lookup), the program looks for a line in the phonedir file where either the firstname or lastname matches thestring given . If it finds such a line it prints out all three parts of the line, separated by spaces:
lastname firstname emailaddress
If it does not find a match in the file it prints out the string it was looking for, followed by a colon followed by a space followed by themessage "not found":
string : not found
In the case of the second command (add), the program appends the three strings given to the file phonedir.
Hints and suggestions:
(1) Define and use two functions named lookup and add. When yourprogram reads the string lookup, your lookup function is called; when the program reads the string add, your add function is called. When either of these two functions are called, they then read whatever else is necessary for their command (one string for lookup and three strings -- lastname, firstname, and emailaddress-- for add). And then these functions do... whatever it takes to carry out the command.
(2) When doing a lookup or an add, open up the file phonedir ... carry out the operation .. and then close up the file.
EXAMPLE:
suppose the phonedir file looked like this:
arnow david arnow@panix.com
bush george president@whitehouse.gov
gates bill bill@microsoft.com
here then is a sample session with the program (program output is in bold):
lookup david
arnow david arnow@panix.com
lookup joe
joe: not found
add theplumber joe joetheplumber@nowhere.com
lookup arnow
arnow david arnow@panix.com
lookup joe
theplumber joe joetheplumber@nowhere.com
and the phonedir file would now be:
arnow david arnow@panix.com
bush george president@whitehouse.gov
gates bill bill@microsoft.com
theplumber joe joetheplumber@nowhere.com
Now I need the code to put out the error message of:
firstName lastName email
My code below only puts out "not found"
What am I missing?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void lookup();
void add();
int main(){
string type;
while (cin >> type){
if (type == "lookup")
lookup();
else
add();
}
return 0;
}
void lookup()
{ifstream fin;
bool check = false;
string name,firstName,lastName,email;
cin >> name;
fin.open("phonebook");
if ( !fin )
{
cerr << "Unable to open phonebook.\n" ;
}
while (fin >> firstName >> lastName >> email){
if (firstName.compare(name)==0 || lastName.compare(name)==0){
cout <<firstName<< " "<<lastName<< " "<<email<< " " << ": not found"
<<endl;
check=true;
}
}
if(!check)
cout<<firstName<<" "<<lastName<<" "<<email<< " " << ": not found"
<<endl;
fin.close();
}
void add()
{ofstream fout;
string name;
getline(cin, name);
fout.open("phonebook", ios::app);
fout << name << endl;
fout.close();
}
|