C++ Programming Help Needed to program a rolodex utilizing (2) header files and
ID: 3857220 • Letter: C
Question
C++ Programming Help Needed to program a rolodex utilizing (2) header files and (3) cpp files provided in the body of the quesition. A screenshot of the expected output is also provided.
1. ContactRecord.h - This header file contains the class definition of the ContactRecord class. You need to provide the implementation for each of its member functions and constructors.
2. ContactDataManager.h - This header file contains the class definition of the ContactDataManager class. The ContactDataManager class manages the list (vector) of ContactRecord objects. You need to provide the implementation for each of its member functions and constructors.
3. Main.cpp - This source file contains the implementation of the main() method. DO NOT MODIFY. Include it in your project. ContactRecord.cpp and ContactDataManager.cpp classes will need to work with this source file.
4. ContactRecord.cpp - I started and can't get this class to work.
5. ContactDataManager.cpp - I started and can't get this class to work.
File: ContactRecord.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class ContactRecord
{
private:
int ContactID;
string FirstName;
string LastName;
string MiddleName;
string PhoneNumber;
private:
void CopyData(const ContactRecord & src);
public:
int GetContactID() { return this->ContactID; }
string GetFirstName() { return this->FirstName; }
string GetLastName() { return this->LastName; }
string GetMiddleName() { return this->MiddleName; }
string GetPhoneNumber() { return this->PhoneNumber; }
void SetContactID(int v) { this->ContactID = v;}
void SetFirstName(string v) { this->FirstName = v; }
void SetLastName(string v) { this->LastName = v; }
void SetMiddleName(string v) { this->MiddleName = v; }
void SetPhoneNumber(string v) { this->PhoneNumber = v; }
public:
void Print() const;
public:
ContactRecord();
ContactRecord(string firstName, string lastName, string middleName, string phoneNumber);
ContactRecord(const ContactRecord & src);
public:
const ContactRecord & operator=(const ContactRecord & src);
bool operator==(const ContactRecord & src);
};
_____________
File: ContactDataManager.h
#pragma once
#include <vector>
#include "ContactRecord.h"
class ContactDataManager
{
private:
static int NextContactID;
private:
vector<ContactRecord> ContactList;
private:
void CopyData(const ContactDataManager & src);
public:
ContactDataManager();
ContactDataManager(const ContactDataManager & src);
public:
size_t GetContactCount();
int AddContact(string firstName, string lastName, string middleName, string phoneNumber);
bool EditContact(int nContactID, string firstName, string lastName, string middleName, string phoneNumber);
bool RemoveContact(int nContactID);
bool RetrieveContact(int nContactID, ContactRecord & contact);
vector<int> GetContactIDs();
public:
const ContactDataManager operator=(const ContactDataManager & src);
};
_____________
File: Main.cpp
#include "ContactRecord.h"
#include "ContactDataManager.h"
int main(int argc, char *argv[], char *envp[])
{
ContactDataManager contactDataManager;
contactDataManager.AddContact("Peter", "Nguyen", "", "123456789");
contactDataManager.AddContact("Kim", "Vo", "Hai", "987654321");
contactDataManager.AddContact("John", "Smith", "Jr.", "112233445566");
contactDataManager.AddContact("Hung", "Bach", "", "3344556677");
vector<int> contactIds = contactDataManager.GetContactIDs();
cout << "***** CONTACTS BEFORE EDIT *****" << endl;
for (size_t i = 0; i < contactIds.size(); i++)
{
ContactRecord rec;
contactDataManager.RetrieveContact(contactIds[i], rec);
rec.Print();
}
cout << endl;
contactDataManager.EditContact(contactIds[0],
"Peter",
"Nguyen",
"S.",
"66666666");
cout << "***** CONTACTS AFTER EDIT *****" << endl;
for (size_t i = 0; i < contactIds.size(); i++)
{
ContactRecord rec;
contactDataManager.RetrieveContact(contactIds[i], rec);
rec.Print();
}
cout << endl;
contactDataManager.RemoveContact(contactIds[1]);
cout << "***** CONTACTS AFTER REMOVE *****" << endl;
contactIds = contactDataManager.GetContactIDs();
for (size_t i = 0; i < contactIds.size(); i++)
{
ContactRecord rec;
contactDataManager.RetrieveContact(contactIds[i], rec);
rec.Print();
}
cout << endl;
return 0;
}
_____________
File: ContactDataManager.cpp
#include "ContactDataManager.h"
int ContactDataManager::NextContactID = 0;
void ContactDataManager::CopyData(const ContactDataManager & src)
{
this->ContactList.clear();
for (size_t i = 0; i < src.ContactList.size(); i++)
{
this->ContactList.push_back(src.ContactList[i]);
}
}
ContactDataManager::ContactDataManager()
{
}
ContactDataManager::ContactDataManager(const ContactDataManager & src)
{
}
size_t ContactDataManager::GetContactCount()
{
return this->ContactList.size();
}
int ContactDataManager::AddContact(string firstName, string lastName, string middleName, string phoneNumber)
{
ContactRecord rec(firstName, lastName, middleName, phoneNumber);
rec.SetContactID(++ContactDataManager::NextContactID);
this->ContactList.push_back(rec);
return rec.GetContactID();
}
bool ContactDataManager::EditContact(int nContactID, string firstName, string lastName, string middleName, string phoneNumber)
{
for (size_t i = 0; i < this->ContactList.size(); i++)
{
ContactRecord & rec = this->ContactList[i];
if (rec.GetContactID() == nContactID)
{
rec.SetFirstName(firstName);
rec.SetLastName(lastName);
rec.SetMiddleName(middleName);
rec.SetPhoneNumber(phoneNumber);
return true;
}
}
return false;
}
bool ContactDataManager::RemoveContact(int nContactID)
{
for (std::vector<ContactRecord>::iterator it = this->ContactList.begin(); it != this->ContactList.end(); ++it)
{
ContactRecord & rec = *it;
if (rec.GetContactID() == nContactID)
{
this->ContactList.erase(it);
return true;
}
}
return false;
}
bool ContactDataManager::RetrieveContact(int nContactID, ContactRecord & contact)
{
for (size_t i = 0; i < this->ContactList.size(); i++)
{
if (this->ContactList[i].GetContactID() == nContactID)
{
contact = this->ContactList[i];
return true;
}
}
return false;
}
vector<int> ContactDataManager::GetContactIDs()
{
vector<int> contactIDs;
for (std::vector<ContactRecord>::iterator it = this->ContactList.begin(); it != this->ContactList)
{
ContactRecord & rec = *it;
contactIDs.push_back(rec.GetContactID());
}
return contactIDs;
}
const ContactDataManager ContactDataManager::operator=(const ContactDataManager & src)
{
CopyData(src);
return *this;
}
_____________
File: ContactRecord.cpp
#include "ContactRecord.h"
void ContactRecord::Print() const
{
cout << "ID: " << this->ContactID << ", "
<< "Last Name: " << this->LastName << ", "
<< "First Name: " << this->FirstName << ", "
<< "Middle Name: " << this->MiddleName << ", "
<< "Phone Number: " << this->PhoneNumber << endl;
}
ContactRecord::ContactRecord()
{
this->FirstName = "";
this->LastName = "";
this->MiddleName = "";
this->PhoneNumber = "";
this->ContactID = 0;
}
ContactRecord::ContactRecord(string firstName, string lastName, string middleName, string phoneNumber)
FirstName(firstName),
LastName(lastName),
MiddleName(middleName),
PhoneNumber(phoneNumber),
ContactID(0)
{
}
ContactRecord::ContactRecord(const ContactRecord & src)
{
CopyData(src);
}
void ContactRecord::CopyData(const ContactRecord & src)
{
this->FirstName = src.FirstName;
this->LastName = src.LastName;
this->MiddleName = src.MiddleName;
this->PhoneNumber = src.PhoneNumber;
this->ContactID = src.ContactID;
}
const ContactRecord & ContactRecord::operator=(const ContactRecord & src)
{
CopyData(src);
return *this;
}
bool ContactRecord::operator==(const ContactRecord & src)
{
return (this->ContactID == src.ContactID);
}
Expected Output:
CADevelopment National University Courses iCSc300 Assignments-W1RolodexDebug Rolodex CADevelopmentiNational University CoursesCSC300 AssignmentsHW1Rolodex Debug lRolodex.exe ****CONTACTS BEFORE EDIT ID 1, Last Name: Nguyen, First Name: Peter, Middle Name: , Phone Number: 123456789 ID: 2, Last Name: Vo, First Name: Kim, Middle Name: Hai, Phone Number 987654321 ID: 3, Last Name: Smith, First Name: John, Middle Name: Jr., Phone Number: 112233445566 ID: 4, Last Name: Bach, First Name: Hung, Middle Name: , Phone Number: 3344556677 *CONTACTS AFTER EDIT** ID: 1, Last Name: Nguyen, First Name: Peter, Middle Name: S., Phone Number: 66666666 ID: 2, Last Name: Vo, First Name: Kim, Middle Name: Hai, Phone Number: 987654321 ID: 3, Last Name: Smith, First Name: John, Middle Name: r., Phone Number: 112233445566 ID: 4, Last Name: Bach, First Name: Hung, Middle Name: Phone Number: 3344556677 CONTACTS AFTER REMOVE ** ID: 1, Last Name: Nguyen, First Name: Peter, Middle Name: S., Phone Number: 66666666 ID: 3, Last Name: Smith, First Name: John, Middle Name: Jr., Phone Number: 112233445566 ID: 4, Last Name: Bach, First Name: Hung, Middle Name: , Phone Number: 3344556677Explanation / Answer
Here is the program working without error and producing the same output as required :
1) ContactRecord.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class ContactRecord
{
private:
int ContactID;
string FirstName;
string LastName;
string MiddleName;
string PhoneNumber;
private:
void CopyData(const ContactRecord & src);
public:
int GetContactID() { return this->ContactID; }
string GetFirstName() { return this->FirstName; }
string GetLastName() { return this->LastName; }
string GetMiddleName() { return this->MiddleName; }
string GetPhoneNumber() { return this->PhoneNumber; }
void SetContactID(int v) { this->ContactID = v;}
void SetFirstName(string v) { this->FirstName = v; }
void SetLastName(string v) { this->LastName = v; }
void SetMiddleName(string v) { this->MiddleName = v; }
void SetPhoneNumber(string v) { this->PhoneNumber = v; }
public:
void Print() const;
public:
ContactRecord();
ContactRecord(string firstName, string lastName, string middleName, string phoneNumber);
ContactRecord(const ContactRecord & src);
public:
const ContactRecord & operator=(const ContactRecord & src);
bool operator==(const ContactRecord & src);
};
2) ContactDataManager.h
#pragma once
#include <vector>
#include "ContactRecord.h"
class ContactDataManager
{
private:
static int NextContactID;
private:
vector<ContactRecord> ContactList;
private:
void CopyData(const ContactDataManager & src);
public:
ContactDataManager();
ContactDataManager(const ContactDataManager & src);
public:
size_t GetContactCount();
int AddContact(string firstName, string lastName, string middleName, string phoneNumber);
bool EditContact(int nContactID, string firstName, string lastName, string middleName, string phoneNumber);
bool RemoveContact(int nContactID);
bool RetrieveContact(int nContactID, ContactRecord & contact);
vector<int> GetContactIDs();
public:
const ContactDataManager operator=(const ContactDataManager & src);
};
3) Main.cpp
#include "ContactRecord.h"
#include "ContactDataManager.h"
int main(int argc, char *argv[], char *envp[])
{
ContactDataManager contactDataManager;
contactDataManager.AddContact("Peter", "Nguyen", "", "123456789");
contactDataManager.AddContact("Kim", "Vo", "Hai", "987654321");
contactDataManager.AddContact("John", "Smith", "Jr.", "112233445566");
contactDataManager.AddContact("Hung", "Bach", "", "3344556677");
vector<int> contactIds = contactDataManager.GetContactIDs();
cout << "***** CONTACTS BEFORE EDIT *****" << endl;
for (size_t i = 0; i < contactIds.size(); i++)
{
ContactRecord rec;
contactDataManager.RetrieveContact(contactIds[i], rec);
rec.Print();
}
cout << endl;
contactDataManager.EditContact(contactIds[0],
"Peter",
"Nguyen",
"S.",
"66666666");
cout << "***** CONTACTS AFTER EDIT *****" << endl;
for (size_t i = 0; i < contactIds.size(); i++)
{
ContactRecord rec;
contactDataManager.RetrieveContact(contactIds[i], rec);
rec.Print();
}
cout << endl;
contactDataManager.RemoveContact(contactIds[1]);
cout << "***** CONTACTS AFTER REMOVE *****" << endl;
contactIds = contactDataManager.GetContactIDs();
for (size_t i = 0; i < contactIds.size(); i++)
{
ContactRecord rec;
contactDataManager.RetrieveContact(contactIds[i], rec);
rec.Print();
}
cout << endl;
return 0;
}
4) ContcatRecord.cpp
#include "ContactRecord.h"
void ContactRecord::Print() const
{
cout << "ID: " << this->ContactID << ", "
<< "Last Name: " << this->LastName << ", "
<< "First Name: " << this->FirstName << ", "
<< "Middle Name: " << this->MiddleName << ", "
<< "Phone Number: " << this->PhoneNumber << endl;
}
ContactRecord::ContactRecord()
{
this->FirstName = "";
this->LastName = "";
this->MiddleName = "";
this->PhoneNumber = "";
this->ContactID = 0;
}
ContactRecord::ContactRecord(string firstName, string lastName, string middleName, string phoneNumber):
FirstName(firstName),
LastName(lastName),
MiddleName(middleName),
PhoneNumber(phoneNumber),
ContactID(0)
{
}
ContactRecord::ContactRecord(const ContactRecord & src)
{
CopyData(src);
}
void ContactRecord::CopyData(const ContactRecord & src)
{
this->FirstName = src.FirstName;
this->LastName = src.LastName;
this->MiddleName = src.MiddleName;
this->PhoneNumber = src.PhoneNumber;
this->ContactID = src.ContactID;
}
const ContactRecord & ContactRecord::operator=(const ContactRecord & src)
{
CopyData(src);
return *this;
}
bool ContactRecord::operator==(const ContactRecord & src)
{
return (this->ContactID == src.ContactID);
}
5) ContactDataManager.cpp
#include "ContactDataManager.h"
int ContactDataManager::NextContactID = 0;
void ContactDataManager::CopyData(const ContactDataManager & src)
{
this->ContactList.clear();
for (size_t i = 0; i < src.ContactList.size(); i++)
{
this->ContactList.push_back(src.ContactList[i]);
}
}
ContactDataManager::ContactDataManager()
{
}
ContactDataManager::ContactDataManager(const ContactDataManager & src)
{
}
size_t ContactDataManager::GetContactCount()
{
return this->ContactList.size();
}
int ContactDataManager::AddContact(string firstName, string lastName, string middleName, string phoneNumber)
{
ContactRecord rec(firstName, lastName, middleName, phoneNumber);
rec.SetContactID(++ContactDataManager::NextContactID);
this->ContactList.push_back(rec);
return rec.GetContactID();
}
bool ContactDataManager::EditContact(int nContactID, string firstName, string lastName, string middleName, string phoneNumber)
{
for (size_t i = 0; i < this->ContactList.size(); i++)
{
ContactRecord & rec = this->ContactList[i];
if (rec.GetContactID() == nContactID)
{
rec.SetFirstName(firstName);
rec.SetLastName(lastName);
rec.SetMiddleName(middleName);
rec.SetPhoneNumber(phoneNumber);
return true;
}
}
return false;
}
bool ContactDataManager::RemoveContact(int nContactID)
{
for (std::vector<ContactRecord>::iterator it = this->ContactList.begin(); it != this->ContactList.end(); ++it)
{
ContactRecord & rec = *it;
if (rec.GetContactID() == nContactID)
{
this->ContactList.erase(it);
return true;
}
}
return false;
}
bool ContactDataManager::RetrieveContact(int nContactID, ContactRecord & contact)
{
for (size_t i = 0; i < this->ContactList.size(); i++)
{
if (this->ContactList[i].GetContactID() == nContactID)
{
contact = this->ContactList[i];
return true;
}
}
return false;
}
vector<int> ContactDataManager::GetContactIDs()
{
vector<int> contactIDs;
for (std::vector<ContactRecord>::iterator it = this->ContactList.begin(); it != this->ContactList.end();it++)
{
ContactRecord & rec = *it;
contactIDs.push_back(rec.GetContactID());
}
return contactIDs;
}
const ContactDataManager ContactDataManager::operator=(const ContactDataManager & src)
{
CopyData(src);
return *this;
}
Compile using the command :
g++ ContactRecord.cpp ContactDataManager.cpp Main.cpp -o main
Run using the command :
./main
Thanks
Nikhil Jain
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.