C++ Can someone help my adjust my program to the prompt given? RolodexEntryManag
ID: 3886150 • Letter: C
Question
C++ Can someone help my adjust my program to the prompt given?
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, ' ');
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 << " Select 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 << " Main Menu "
<< "1. Add contact "
<< "2. Edit contact "
<< "3. Delete contact "
<< "4. Search contacts "
<< "5. Print all contacts "
<< "6. Quit ";
return;
}
void printEditMenu(vector<RolodexEntry> & list)
{
cout << " ";
printList(list);
cout << " Select Contact to edit:";//read in choice
if(cin.fail())
{
cin.clear();
cin.ignore();
}
short c;
cin >> c;
cin.ignore(INT_MAX, ' ');
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 name "
<< "2. edit Last name "
<< "3. edit Address "
<< "4. edit Phone number "
<< "5. edit Email ";
char sel;
cin >> sel;
cin.ignore(INT_MAX, ' ');
switch(tolower(sel))
{
case '1': case 'f':
{
cout << " Enter new first name: ";
string newName;
cin >> newName;
edited.setFName(newName);
break;
}
case '2': case 'l':
{
cout << " Enter new last name: ";
string newName;
cin >> newName;
edited.setLName(newName);
break;
}
case '3': case 'a':
{
cout << " Enter new street number and street: ";
string newStreet;
cout.flush();
if (cin.peek() == ' ')
{
cin.ignore();
}
getline(cin, newStreet);
edited.setStreet(newStreet);
cout << " Enter new town: ";
string newtown;
cout.flush();
if (cin.peek() == ' ')
{
cin.ignore();
}
getline(cin, newtown);
edited.setTown(newtown);
cout << " Enter new state: ";
string newstate;
cout.flush();
if (cin.peek() == ' ')
{
cin.ignore();
}
getline(cin, newstate);
edited.setState(newstate);
cout << " Enter 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 << " Enter new areacode: ";
short newarea;
cin >> newarea;
edited.setArea(newarea);
cout << " Enter new exchange number: ";
short newex;
cin >> newex;
edited.setExchange(newex);
cout << " Enter new line: ";
short newLine;
cin >> newLine;
edited.setPLine(newLine);
break;
}
case '5': case 'e':
{
cout << " Enter 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 Name "
<< "2. search by Address "
<< "3. search by Phone number "
<< "4. search by Email "
<< "5. Return to Main menu ";
char c;
cin >> c;
cin.ignore(INT_MAX, ' ');
switch(tolower(c))
{
case '1': case 'n':
{
cout << " Enter search term: ";
string search;
cout.flush();
if (cin.peek() == ' ')
{
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 << " Enter search term: ";
string search;
cout.flush();
if (cin.peek() == ' ')
{
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 << " Enter 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 << " Enter email: ";
string search;
cout.flush();
if (cin.peek() == ' ')
{
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 << " Invalid seletion.";
break;
}
}
}
void printList(vector<RolodexEntry> & list)
{
cout << ' ';
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 << " Name: " << fName << " " << lName;
cout << " Address: " << street <<
" " << town << ", " <<
state << ' ';
if(zip != 0)
{
cout << zip;
}
else
{
cout << szip;
}
cout << " Phone: (" << area << ')' << exchange << '-' << line << " ";
}
void RolodexEntry::readIn()
{
cout << " Enter new contact's first name: ";
cin >> fName;
cout << " Enter new contacts's last name: ";
cin >> lName;
cout << " Enter new contacts's address (number and street): ";
cout.flush();
if (cin.peek() == ' ')
{
cin.ignore();
}
getline(cin, street);
cout << " Enter new contacts's town: ";
cout.flush();
if (cin.peek() == ' ')
{
cin.ignore();
}
getline(cin, town);
cout << " Enter new contacts's state: ";
cout.flush();
if (cin.peek() == ' ')
{
cin.ignore();
}
getline(cin, state);
cout << " Enter new contacts's zipcode: ";
long tempZip;
cin >> tempZip;
if(tempZip > 99999)//long zip
{
zip = tempZip;
setSZipLong();//finds szip from long zip
}
else
{
szip = tempZip;
}
cout << " Enter new contacts's phone number (separated by spaces): ";
cin >> area >> exchange >> line;
cout << " Enter new contacts's email: ";
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
Explanation / Answer
Hi,
I am not sure if you understand the difference between C-string and string class.
to used C-string, you need to include #include<cstring> and for string class in c++ we use namespace std.
since you are already using std::string, you are good with this one,
And coming to array, you are already using Vector for list i.e vector<RolodexEntry>
hence you are good with this one too, so you are already satisfying the extra level. good work.
Thumsb up if this was helpful, otherwise let me know in comments.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.