RolodexEntryManager.cpp
————————————-
#include <iostream>
#include “RolodexEntry.h”
#include <vector>
#include <climits>
#include <cctype>
using namespace std;
//function dec
void printMainMenu();
void printEditMenu(vector<RolodexEntry> & list);
void editContactSub(const short c, vector<RolodexEntry> & list);
void printSearchMenu(vector<RolodexEntry> & list);
void printList(vector<RolodexEntry> & list);
void eraseEntry(vector<RolodexEntry> & list, short index);
int main(void)
{
bool isRunning = true;
vector<RolodexEntry> list;
do
{
char c;
printMainMenu();
cin >> c;
cin.ignore(INT_MAX, ‘n’);
switch(tolower(c))
{
case ‘1’: case ‘a’:
{
RolodexEntry newEntry;
newEntry.readIn();
list.push_back(newEntry);
break;
}
case ‘2’: case ‘e’:
{
printEditMenu(list);
break;
}
case ‘3’: case ‘d’:
{
printList(list);
cout << “nSelect Contact to delete:”;
if(cin.fail())
{
cin.clear();
cin.ignore();
}
short c;
cin >> c;
eraseEntry(list, c-1);//resizes and moves back
break;
}
case ‘4’: case ‘s’:
{
printSearchMenu(list);
break;
}
case ‘5’: case ‘p’:
{
printList(list);
break;
}
case ‘6’: case ‘q’:
{
isRunning = false;
break;
}
default:
{
cout << “Invalid selection.”;
break;
}
}
}while(isRunning);
return 0;
}
void printMainMenu()
{
cout << “nMain Menunn”
<< “1. Add contactn”
<< “2. Edit contactn”
<< “3. Delete contactn”
<< “4. Search contactsn”
<< “5. Print all contactsn”
<< “6. Quitn”;
return;
}
void printEditMenu(vector<RolodexEntry> & list)
{
cout << “nn”;
printList(list);
cout << “nSelect Contact to edit:”;//read in choice
if(cin.fail())
{
cin.clear();
cin.ignore();
}
short c;
cin >> c;
cin.ignore(INT_MAX, ‘n’);
editContactSub(c, list);
return;
}
void editContactSub(const short c, vector<RolodexEntry> & list)//and work
{
short index = c;
if(index >= 0 && index < list.size())//it’s gooooood!
{
RolodexEntry edited = list[static_cast<short>(c)-1];
//edit menu
cout << “1. edit First namen”
<< “2. edit Last namen”
<< “3. edit Addressn”
<< “4. edit Phone numbern”
<< “5. edit Emailn”;
char sel;
cin >> sel;
cin.ignore(INT_MAX, ‘n’);
switch(tolower(sel))
{
case ‘1’: case ‘f’:
{
cout << “nEnter new first name: “;
string newName;
cin >> newName;
edited.setFName(newName);
break;
}
case ‘2’: case ‘l’:
{
cout << “nEnter new last name: “;
string newName;
cin >> newName;
edited.setLName(newName);
break;
}
case ‘3’: case ‘a’:
{
cout << “nEnter new street number and street: “;
string newStreet;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, newStreet);
edited.setStreet(newStreet);
cout << “nEnter new town: “;
string newtown;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, newtown);
edited.setTown(newtown);
cout << “nEnter new state: “;
string newstate;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, newstate);
edited.setState(newstate);
cout << “nEnter new zipcode: “;
long newzip;
cin >> newzip;
if(newzip > 99999)//long zip
{
edited.setZip(newzip);
edited.setSZipLong();//finds szip from long zip
}
else
{
edited.setSZip(newzip);
}
break;
}
case ‘4’: case ‘p’:
{
cout << “nEnter new areacode: “;
short newarea;
cin >> newarea;
edited.setArea(newarea);
cout << “nEnter new exchange number: “;
short newex;
cin >> newex;
edited.setExchange(newex);
cout << “nEnter new line: “;
short newLine;
cin >> newLine;
edited.setPLine(newLine);
break;
}
case ‘5’: case ‘e’:
{
cout << “nEnter new email: “;
string newemail;
cin >> newemail;
edited.setEmail(newemail);
break;
}
}
}
else
{
cout << “Contact at this index does not exist.”;
}
return;
}
void printSearchMenu(vector<RolodexEntry> & list)//and work
{
cout << “1. search by Namen”
<< “2. search by Addressn”
<< “3. search by Phone numbern”
<< “4. search by Emailn”
<< “5. Return to Main menun”;
char c;
cin >> c;
cin.ignore(INT_MAX, ‘n’);
switch(tolower(c))
{
case ‘1’: case ‘n’:
{
cout << “nEnter search term: “;
string search;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, search);
for(vector<RolodexEntry>::size_type i = 0; i < list.size(); i++)
{
if(list[i].getFName().find(search) != string::npos ||
list[i].getLName().find(search) != string::npos)
{
list[i].printEntry();
}
}
break;
}
case ‘2’: case ‘a’:
{
cout << “nEnter search term: “;
string search;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, search);
for(vector<RolodexEntry>::size_type i = 0; i < list.size(); i++)
{
if(list[i].getStreet().find(search) != string::npos ||
list[i].getTown().find(search) != string::npos ||
list[i].getState().find(search) != string::npos)
{
list[i].printEntry();
}
}
break;
}
case ‘3’: case ‘p’:
{
cout << “nEnter part of phone number (last four digits gives best results): “;
short search;
while(cin.fail())
{
cin.clear();
cin.ignore();
}
cin >> search;
for(vector<RolodexEntry>::size_type i = 0; i < list.size(); i++)
{
if(list[i].getArea() == search || list[i].getExchange() == search ||
list[i].getPLine() == search)
{
list[i].printEntry();
}
}
break;
}
case ‘4’: case ‘e’:
{
cout << “nEnter email: “;
string search;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, search);
for(vector<RolodexEntry>::size_type i = 0; i < list.size(); i++)
{
if(list[i].getEmail().find(search) != string::npos)
{
list[i].printEntry();
}
}
break;
}
case ‘5’: case ‘q’:
{
break;
}
default:
{
cout << “nInvalid seletion.”;
break;
}
}
}
void printList(vector<RolodexEntry> & list)
{
cout << ‘n’;
for(vector<RolodexEntry>::size_type i = 0; i < list.size(); i++)
{
cout << i+1 << “.”;
list[i].printEntry();
}
return;
}
void eraseEntry(vector<RolodexEntry> & list, short index) {
vector<RolodexEntry>::size_type pos = index – 1;
vector<RolodexEntry>::size_type k;
if (pos < list.size() && pos >= 0) {
for (k = pos + 1; k != list.size(); k++) {
list[k – 1] = list[k];
}
list.pop_back();
} else {
cout << “Out of bounds.”;
}
return;
}
—————————————————————–
RolodexEntry.cpp
——————————
#include “RolodexEntry.h”
#include <iostream>
using namespace std;
void RolodexEntry::printEntry()
{
cout << “nName: ” << fName << ” ” << lName;
cout << “nAddress: ” << street <<
“n” << town << “, ” <<
state << ‘ ‘;
if(zip != 0)
{
cout << zip;
}
else
{
cout << szip;
}
cout << “nPhone: (” << area << ‘)’ << exchange << ‘-‘ << line << “n”;
}
void RolodexEntry::readIn()
{
cout << “nEnter new contact’s first name:n”;
cin >> fName;
cout << “nEnter new contacts’s last name:n”;
cin >> lName;
cout << “nEnter new contacts’s address (number and street):n”;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, street);
cout << “nEnter new contacts’s town:n”;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, town);
cout << “nEnter new contacts’s state:n”;
cout.flush();
if (cin.peek() == ‘n’)
{
cin.ignore();
}
getline(cin, state);
cout << “nEnter new contacts’s zipcode:n”;
long tempZip;
cin >> tempZip;
if(tempZip > 99999)//long zip
{
zip = tempZip;
setSZipLong();//finds szip from long zip
}
else
{
szip = tempZip;
}
cout << “nEnter new contacts’s phone number (separated by spaces):n”;
cin >> area >> exchange >> line;
cout << “nEnter new contacts’s email:n”;
cin >> email;
}
———————————————————————-
RolodexEntry.h
—————————————–
#ifndef ROLODEXENTRY_H_INCLUDED
#define ROLODEXENTRY_H_INCLUDED
#include <string>
//using namespace std;
//base project only
class RolodexEntry
{
private:
std::string fName, lName, street, town, state;
long zip;
short szip, area, exchange, line;
std::string email;
public:
RolodexEntry(void):fName(), lName(), street(), town(),
state(), zip(000000000), szip(00000),
area(0), exchange(0), line(0), email() {}
RolodexEntry(std::string fname, std::string lname):street(), town(),
state(“”), zip(000000000),
szip(00000), area(0),
exchange(0), line(0), email() {}
RolodexEntry(const RolodexEntry & r):fName(r.fName), lName(r.lName),
street(r.street), town(r.town),
state(r.state), zip(r.zip), szip(r.szip),
area(r.area), exchange(r.exchange),
line(r.line), email(r.email) {}
std::string getFName() const {return fName;}
void setFName(std::string first){fName = first;}
std::string getLName() const {return lName;}
void setLName(std::string last){lName = last;}
std::string getStreet() const{return street;}
void setStreet(std::string str){street = str;}
std::string getTown() const {return town;}
void setTown(std::string newtown){town = newtown;}
std::string getState() const {return state;}
void setState(std::string newstate){state = newstate;}
long getZip() const {return zip;}
void setZip(long newzip){zip = newzip;}
short getSZip() const {return szip;}
void setSZipLong(){szip = zip / 10000;}
void setSZip(short newszip){szip = newszip;}
short getArea() const {return area;}
void setArea(short newarea){area = newarea;}
short getExchange() const {return exchange;}
void setExchange(short exch){exchange = exch;}
short getPLine() const {return line;}
void setPLine(short newline){line = newline;}
std::string getEmail(){return email;}
void setEmail(std::string Email){email = Email;}
void printEntry();//other fns
void readIn();
bool isEqual(RolodexEntry e){return e.fName == fName && e.lName == lName &&
e.street == street && e.town == town &&
e.state == state && e.zip == zip && e.szip == szip &&
e.area == area && e.exchange == exchange && e.line == line &&
e.email == email;}
};
#endif // ROLODEXENTRY_H_INCLUDED

