Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Purpose: Implement the simple Contact management application as a Windows consol

ID: 3856237 • Letter: P

Question

Purpose: Implement the simple Contact management application as a Windows console application.
Requirements: You are provided with three source files. Implement your code per below instructions for each file:
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.

###
#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);
};
###

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.

###
#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);
};
###

Main.cpp - This source file contains the implementation of the main() method. Do not modify this file. Include it in your project. Your ContactRecord and ContactDataManager classes will need to work with this source file.

###
#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;
}
###

Explanation / Answer

Given below is the implementation of the ContactRecord and ContactDataManager classes. Please use ContactRecord.h, ContactDataManager.h and main.cpp from your question.

compile: g++ ContactRecord.cpp ContactDataManager.cpp main.cpp

You can post a comment in case of any issues. Please rate the answer if it helped. Thank you.

ContactRecord.cpp

#include "ContactRecord.h"

ContactRecord::ContactRecord()

{

this->ContactID = 0;

this->FirstName = "";

this->LastName = "";

this->MiddleName = "";

this->PhoneNumber = "";

  

}

ContactRecord::ContactRecord(string firstName, string lastName, string middleName, string phoneNumber)

{

this->ContactID = 0;

this->FirstName = firstName;

this->LastName = lastName;

this->MiddleName = middleName;

this->PhoneNumber = phoneNumber;

}

ContactRecord::ContactRecord(const ContactRecord & src)

{

CopyData(src);

}

void ContactRecord::CopyData(const ContactRecord & src)

{

this->ContactID = src.ContactID;

this->FirstName = src.FirstName;

this->LastName = src.LastName;

this->MiddleName = src.MiddleName;

this->PhoneNumber = src.PhoneNumber;

}

const ContactRecord & ContactRecord::operator=(const ContactRecord & src)

{

CopyData(src);

return *this;

}

bool ContactRecord::operator==(const ContactRecord & src)

{

if(this->ContactID == src.ContactID)

return true;

else

return false;

}

void ContactRecord::Print() const

{

cout << ContactID << " " << FirstName << " " << MiddleName << " " << LastName << " " << PhoneNumber << endl;

}

ContactDataManager.cpp

#include "ContactDataManager.h"

int ContactDataManager::NextContactID = 1;

ContactDataManager::ContactDataManager()

{

}

ContactDataManager::ContactDataManager(const ContactDataManager & src)

{

CopyData(src);

}

size_t ContactDataManager::GetContactCount()

{

return ContactList.size();

}

int ContactDataManager::AddContact(string firstName, string lastName, string middleName, string phoneNumber)

{

ContactRecord rec(firstName, lastName, middleName, phoneNumber);

rec.SetContactID(NextContactID++);

ContactList.push_back(rec);

return rec.GetContactID();

}

bool ContactDataManager::EditContact(int nContactID, string firstName, string lastName, string middleName, string phoneNumber)

{

  

for(vector<ContactRecord>::iterator it = ContactList.begin(); it != ContactList.end(); ++it)

{

if((*it).GetContactID() == nContactID)

{

(*it).SetFirstName(firstName);

(*it).SetLastName(lastName);

(*it).SetMiddleName(middleName);

(*it).SetPhoneNumber(phoneNumber);

return true;

}

}

  

return false;

}

bool ContactDataManager::RemoveContact(int nContactID)

{

for(vector<ContactRecord>::iterator it = ContactList.begin(); it != ContactList.end(); ++it)

{

if((*it).GetContactID() == nContactID)

{

ContactList.erase(it);

return true;

}

}

return false;

}

bool ContactDataManager::RetrieveContact(int nContactID, ContactRecord & contact)

{

for(vector<ContactRecord>::iterator it = ContactList.begin(); it != ContactList.end(); ++it)

{

if((*it).GetContactID() == nContactID)

{

contact = *it;

return true;

}

}

return false;

}

vector<int> ContactDataManager::GetContactIDs()

{

vector<int> ids;

for(int i = 0; i < ContactList.size(); i++)

ids.push_back(ContactList[i].GetContactID());

  

return ids;

}

const ContactDataManager ContactDataManager::operator=(const ContactDataManager & src)

{

CopyData(src);

return *this;

}

void ContactDataManager::CopyData(const ContactDataManager & src)

{

ContactList = src.ContactList;

}

output

***** CONTACTS BEFORE EDIT *****

1   Peter       Nguyen   123456789

2   Kim   Hai   Vo   987654321

3   John   Jr.   Smith   112233445566

4   Hung       Bach   3344556677

***** CONTACTS AFTER EDIT *****

1   Peter   S.   Nguyen   66666666

2   Kim   Hai   Vo   987654321

3   John   Jr.   Smith   112233445566

4   Hung       Bach   3344556677

***** CONTACTS AFTER REMOVE *****

1   Peter   S.   Nguyen   66666666

3   John   Jr.   Smith   112233445566

4   Hung       Bach   3344556677

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at drjack9650@gmail.com
Chat Now And Get Quote