Can someone please help me define my functions and correct my methods. Also can
ID: 3854997 • Letter: C
Question
Can someone please help me define my functions and correct my methods. Also can someone explain to me if i need to creat the Dates.out are is going to be created by the program and how the delivarables should look.
Programming Assignment 2
Your assignment is to write a program for a computer dating service. Each client gives you his or her name, phone number, and a list of interests. It is your job to maintain lists of men and women using the service and to match up the compatible couples. You will find more details about the assignment, including the inputs, outputs, and deliverables in the course environment.
Input
Data about current clients should be on file "Clients.mf". For each current client, the file contains the following information:
Sex 1 character, 'M' or 'F'
Name up to 20 characters, followed by comma
Phone Number 8 characters
Number of Interests an integer
List of Interests 10 characters each separated by commas with a period after the final interest.
Match up to 20 characters, followed by end-of-line.
From the keyboard: The user may enter on of the following commands.
Command
Processing
NEWCLIENT
Add the client to the appropriate list by storing the appropriate information. Attempt to match this new client with a member of the opposite sex. A match occurs when the clients have three or more of the same interests. (You only have to find the first match for each new client.) Make sure you then designate both persons as matched, as described in the section on data structures above. Print the name of the new client, the name of his or her match, and both phone numbers. If no match is found, print an appropriate message.
UNMATCH
Unmatch this name with his or her current match by removing from the matched person.
PRINTMATCH
Print a list of all matched pairs.
PRINTFREE
Print the names and phone numbers of clients who are not currently matched.
QUIT
Stop processing
Output
Echo print all screen input and output on file "Dates.out."
Data Structures
The problem requires you to maintain two lists of clients, one for men and one for women. When a new client is added to the list, he or she is added to the end of the appropriate list.
Each list element must include all the information for one client: name, phone number, number of interests (maximum number is 10), interests, and the name of this client's current match (empty string if not matched). You must use one of the list classes developed in Chapter 3.
Deliverables
Your design.
A listing of your program
A listing of your test plan as input to the program
A listing of the output file. Here is what I have.
#ifndef CLIENT_H
#define CLIENT_H
class Client
{
public:
enum Gender
{
male,
female
};
typedef std::function isMatchingClient;
client();
~client();
void set_name(isMatchingClient const& l);
void set_gender(isMatchingClient const& l);
void set_phone(isMatchingClient const& l);
void set_interest(reconnection const& l);
int get_NumInterest(isMatchingClient const& l);
private:
Client(client const& cl) {}
client_impl* m_impl;
};
#endif
ClientList.h
#ifndef CLIENTLIST_H
#define CLIENTLIST_H
#include "Client.h"
class ClientList
{
public:
ClientList();
~ClientList();
void ClientList(isMatchingClient const& l);
void get_length(isMatchingClient const& l);
void set_phone(isMatchingClient const& l);
void set_interest(reconnection const& l);
void new_ClientList(isMatchingClient const& l);
void delete_Client(isMatchingClient const& l);
void match_Client(isMatchingClient const& l);
void print_matchedClient(isMatchingClient const& l);
void get_MatchingClient(isMatchingClient const& l);
boolean isFull();
private:
Client(client const& cl) {};
client_impl* m_impl;
};
}
#endif
Client.cpp
#include "Client.h"
#include "ClientList.h"
# include
# include
# include
# include
# include
Client::Client()
{
numInterest = 0;
}
void Client::setGender(char gender)
{
sex = gender;
}
void Client::setName(string n)
{
name = n;
}
void Client::setPhone(string p)
{
phoneNum = p;
}
void Client::setInterest(string i)
{
for (int index = 0; index < 10; index++)
interest[index] = i;
}
bool Client::isMatchingClient(Client& otherClient)
{
int index = 0, length = 10;
bool found = false;
while (index < length && !found)
{
if (interest[index] == otherClient.interest[index])
{
found = true;
match = otherClient.getName();
numInterest++;
otherClient.match = name;
otherClient.numInterest++;
}
index++;
}
return found;
};
void Client::setMatch(string& m)
{
match = m;
};
relationType Client::compareTo(Client otherClient)
{
if (name < otherClient.name)
return LESS;
else if (name > otherClient.name)
return GREATER;
else
return EQUAL;
};
char Client::getGender() const
{
return sex;
};
string Client::getName() const
{
return name;
};
string Client::getPhone() const
{
return phoneNum;
}
string Client::getClientDescription() const
{
string desc;
desc = name + " " + sex + " " + phoneNum;
return desc;
}
int Client::getNumInterest() const
{
return numInterest;
}
string Client::getMatch() const
{
return match;
}
ClientList.cpp
#include "ClientList.h"
#include "Client.h"
# include
# include
# include
# include
# include
using namespace std;
ClientList::ClientList()
{
length = 0;
listData = NULL;
}
ClientList:: ~ClientList()
{
ClientNode* tempPtr;
while (listData != NULL)
{
tempPtr = listData;
listData = listData->next;
delete tempPtr;
}
}
void ClientList::makeEmpty()
{
ClientNode* tempPtr;
while (listData != NULL)
{
tempPtr = listData;
listData = listData->next;
delete tempPtr;
}
length = 0;
}
bool ClientList::isFull()
{
ClientNode* location;
try
{
location = new ClientNode;
delete location;
return false;
}
catch (std::bad_alloc exception)
{
return true;
}
}
int ClientList::getLength()
{
return length;
}
Client ClientList::getClient(Client person)
{
bool moreToSearch;
ClientNode* location;
location = listData;
bool found = false;
moreToSearch = (location != NULL);
while (moreToSearch && !found)
{
switch (person.compareTo(location->info))
{
case LESS:
case GREATER: location = location->next;
moreToSearch = (location != NULL);
break;
case EQUAL: found = true;
person = location->info;
break;
}
}
return person;
}
void ClientList::newClient(Client person)
{
ClientNode* location;
ClientNode* newNode;
newNode = new ClientNode;
newNode->info = person;
newNode->next = NULL;
if (!listData)
listData = newNode;
else
{
location = listData;
while (location->next)
location = location->next;
location->next = newNode;
}
length++;
}
void ClientList::deleteClient(Client person)
{
ClientNode* location = listData;
ClientNode* tempLocation;
if (person.compareTo(location->info) == EQUAL)
{
tempLocation = location;
listData = listData->next;
}
else
{
while (person.compareTo((location->next)->info) != EQUAL)
location = location->next;
tempLocation = location->next;
location->next = (location->next)->next;
delete tempLocation;
length--;
}
}
void ClientList::resetList()
{
currentPos = NULL;
}
Client ClientList::getNextItem()
{
if (currentPos = NULL)
currentPos = listData;
else
currentPos = currentPos->next;
return currentPos->info;
}
void ClientList::printFreeClients()
{
ClientNode* location = listData;
while (location != NULL)
{
if (location->info.getMatch() == " ")
{
location->info.getClientDescription();
cout << endl;
}
}
}
void ClientList::printMatches(ClientList& otherList)
{
ClientNode* location = listData;
ClientNode* otherLocation = otherList.listData;
while (location != NULL && otherLocation != NULL)
{
if (location->info.getMatch() != " ")
{
location->info.getClientDescription();
cout << endl;
}
if (otherLocation->info.getMatch() != " ")
{
otherLocation->info.getClientDescription();
cout << endl;
}
}
}
Client ClientList::getMatchingClient(Client& otherClient)
{
ClientNode* location = listData;
while (location != NULL)
{
if (location->info.isMatchingClient(otherClient))
{
otherClient = location->info;
return otherClient;
}
location = location->next;
}
Main.cpp
# include "Client.h"
# include "ClientList.h"
# include
# include
# include
# include
# include
using namespace std;
void displayMenu();
int main()
{
string choice;
ClientList femaleList, maleList;
Client member;
do
{
cout << " Enter one of the options from the menu. ";
displayMenu();
cin >> choice;
cin.ignore();
if (choice == "NEWCLIENT" || choice == "newclient")
{
char clientSex, repeat;
string clientName,
clientPhone,
clientInterest;
int numInterest;
bool found;
do
{
cout << "Enter the following information for each client: ";
cout << "Enter the gender of the client ('M' for male ";
cout << "or 'F' for female) ";
cin.get(clientSex);
cin.ignore();
while (toupper(clientSex) != 'M' && toupper(clientSex) != 'F')
{
cout << "Invalid entry. Enter 'm' or 'f'.";
cin.get(clientSex);
cin.ignore();
}
if (toupper(clientSex) == 'M')
member.setGender(clientSex);
else if (toupper(clientSex) == 'F')
member.setGender(clientSex);
cout << "Enter the name of the client (use only 21 letters) ";
getline(cin, clientName);
member.setName(clientName);
cout << "Enter the phone number of the client (use only 7 digits) ";
getline(cin, clientPhone);
member.setPhone(clientPhone);
cout << "Enter the number of interests for the client ";
cout << "(maximum of 10 interests per person) ";
cin >> numInterest;
cin.ignore();
for (int index = 0; index < numInterest; index++)
{
cout << "Enter interest " << (index + 1);
cout << ": (add a comma after each interest) ";
getline(cin, clientInterest);
member.setInterest(clientInterest);
}
if (member.getGender() == 'M' || member.getGender() == 'm')
{
maleList.newClient(member);
}
else if (member.getGender() == 'F' || member.getGender() == 'f')
femaleList.newClient(member);
cout << "Would you like to enter another client? (y/n)? ";
cin.get(repeat);
cin.ignore();
} while (toupper(repeat) != 'N');
}
else if (choice == "UNMATCH" || choice == "unmatch")
{
string empty = " ";
member.setMatch(empty);
}
else if (choice == "PRINTMATCH" || choice == "printmatch")
{
maleList.printMatches(femaleList);
femaleList.printMatches(maleList);
}
else if (choice == "PRINTFREE" || choice == "printfree")
{
femaleList.printFreeClients();
maleList.printFreeClients();
}
else if (choice == "QUIT" || choice == "quit")
{
return 0;
}
else
cout << "Invalid entry. Please try again. ";
} while (choice != "QUIT" || choice != "quit");
cin.get();
return 0;
}
void displayMenu()
{
cout << "NEWCLIENT: Add a new member to the database ";
cout << "UNMATCH: Removes the matching member from the client ";
cout << "PRINTMATCH: Prints a list of all matched members ";
cout << "PRINTFREE: Prints the name and phone numbers of members that "
<< "currenctly are not matched ";
cout << "QUIT: Ends program ";
}
Explanation / Answer
#ifndef CLIENT_H
#define CLIENT_H
class Client
{
public:
enum Gender
{
male,
female
};
typedef std::function isMatchingClient;
client();
~client();
void set_name(isMatchingClient const& l);
void set_gender(isMatchingClient const& l);
void set_phone(isMatchingClient const& l);
void set_interest(reconnection const& l);
int get_NumInterest(isMatchingClient const& l);
private:
Client(client const& cl) {}
client_impl* m_impl;
};
#endif
ClientList.h
#ifndef CLIENTLIST_H
#define CLIENTLIST_H
#include "Client.h"
class ClientList
{
public:
ClientList();
~ClientList();
void ClientList(isMatchingClient const& l);
void get_length(isMatchingClient const& l);
void set_phone(isMatchingClient const& l);
void set_interest(reconnection const& l);
void new_ClientList(isMatchingClient const& l);
void delete_Client(isMatchingClient const& l);
void match_Client(isMatchingClient const& l);
void print_matchedClient(isMatchingClient const& l);
void get_MatchingClient(isMatchingClient const& l);
boolean isFull();
private:
Client(client const& cl) {};
client_impl* m_impl;
};
}
#endif
Client.cpp
#include "Client.h"
#include "ClientList.h"
# include
# include
# include
# include
# include
Client::Client()
{
numInterest = 0;
}
void Client::setGender(char gender)
{
sex = gender;
}
void Client::setName(string n)
{
name = n;
}
void Client::setPhone(string p)
{
phoneNum = p;
}
void Client::setInterest(string i)
{
for (int index = 0; index < 10; index++)
interest[index] = i;
}
bool Client::isMatchingClient(Client& otherClient)
{
int index = 0, length = 10;
bool found = false;
while (index < length && !found)
{
if (interest[index] == otherClient.interest[index])
{
found = true;
match = otherClient.getName();
numInterest++;
otherClient.match = name;
otherClient.numInterest++;
}
index++;
}
return found;
};
void Client::setMatch(string& m)
{
match = m;
};
relationType Client::compareTo(Client otherClient)
{
if (name < otherClient.name)
return LESS;
else if (name > otherClient.name)
return GREATER;
else
return EQUAL;
};
char Client::getGender() const
{
return sex;
};
string Client::getName() const
{
return name;
};
string Client::getPhone() const
{
return phoneNum;
}
string Client::getClientDescription() const
{
string desc;
desc = name + " " + sex + " " + phoneNum;
return desc;
}
int Client::getNumInterest() const
{
return numInterest;
}
string Client::getMatch() const
{
return match;
}
ClientList.cpp
#include "ClientList.h"
#include "Client.h"
# include
# include
# include
# include
# include
using namespace std;
ClientList::ClientList()
{
length = 0;
listData = NULL;
}
ClientList:: ~ClientList()
{
ClientNode* tempPtr;
while (listData != NULL)
{
tempPtr = listData;
listData = listData->next;
delete tempPtr;
}
}
void ClientList::makeEmpty()
{
ClientNode* tempPtr;
while (listData != NULL)
{
tempPtr = listData;
listData = listData->next;
delete tempPtr;
}
length = 0;
}
bool ClientList::isFull()
{
ClientNode* location;
try
{
location = new ClientNode;
delete location;
return false;
}
catch (std::bad_alloc exception)
{
return true;
}
}
int ClientList::getLength()
{
return length;
}
Client ClientList::getClient(Client person)
{
bool moreToSearch;
ClientNode* location;
location = listData;
bool found = false;
moreToSearch = (location != NULL);
while (moreToSearch && !found)
{
switch (person.compareTo(location->info))
{
case LESS:
case GREATER: location = location->next;
moreToSearch = (location != NULL);
break;
case EQUAL: found = true;
person = location->info;
break;
}
}
return person;
}
void ClientList::newClient(Client person)
{
ClientNode* location;
ClientNode* newNode;
newNode = new ClientNode;
newNode->info = person;
newNode->next = NULL;
if (!listData)
listData = newNode;
else
{
location = listData;
while (location->next)
location = location->next;
location->next = newNode;
}
length++;
}
void ClientList::deleteClient(Client person)
{
ClientNode* location = listData;
ClientNode* tempLocation;
if (person.compareTo(location->info) == EQUAL)
{
tempLocation = location;
listData = listData->next;
}
else
{
while (person.compareTo((location->next)->info) != EQUAL)
location = location->next;
tempLocation = location->next;
location->next = (location->next)->next;
delete tempLocation;
length--;
}
}
void ClientList::resetList()
{
currentPos = NULL;
}
Client ClientList::getNextItem()
{
if (currentPos = NULL)
currentPos = listData;
else
currentPos = currentPos->next;
return currentPos->info;
}
void ClientList::printFreeClients()
{
ClientNode* location = listData;
while (location != NULL)
{
if (location->info.getMatch() == " ")
{
location->info.getClientDescription();
cout << endl;
}
}
}
void ClientList::printMatches(ClientList& otherList)
{
ClientNode* location = listData;
ClientNode* otherLocation = otherList.listData;
while (location != NULL && otherLocation != NULL)
{
if (location->info.getMatch() != " ")
{
location->info.getClientDescription();
cout << endl;
}
if (otherLocation->info.getMatch() != " ")
{
otherLocation->info.getClientDescription();
cout << endl;
}
}
}
Client ClientList::getMatchingClient(Client& otherClient)
{
ClientNode* location = listData;
while (location != NULL)
{
if (location->info.isMatchingClient(otherClient))
{
otherClient = location->info;
return otherClient;
}
location = location->next;
}
Main.cpp
# include "Client.h"
# include "ClientList.h"
# include
# include
# include
# include
# include
using namespace std;
void displayMenu();
int main()
{
string choice;
ClientList femaleList, maleList;
Client member;
do
{
cout << " Enter one of the options from the menu. ";
displayMenu();
cin >> choice;
cin.ignore();
if (choice == "NEWCLIENT" || choice == "newclient")
{
char clientSex, repeat;
string clientName,
clientPhone,
clientInterest;
int numInterest;
bool found;
do
{
cout << "Enter the following information for each client: ";
cout << "Enter the gender of the client ('M' for male ";
cout << "or 'F' for female) ";
cin.get(clientSex);
cin.ignore();
while (toupper(clientSex) != 'M' && toupper(clientSex) != 'F')
{
cout << "Invalid entry. Enter 'm' or 'f'.";
cin.get(clientSex);
cin.ignore();
}
if (toupper(clientSex) == 'M')
member.setGender(clientSex);
else if (toupper(clientSex) == 'F')
member.setGender(clientSex);
cout << "Enter the name of the client (use only 21 letters) ";
getline(cin, clientName);
member.setName(clientName);
cout << "Enter the phone number of the client (use only 7 digits) ";
getline(cin, clientPhone);
member.setPhone(clientPhone);
cout << "Enter the number of interests for the client ";
cout << "(maximum of 10 interests per person) ";
cin >> numInterest;
cin.ignore();
for (int index = 0; index < numInterest; index++)
{
cout << "Enter interest " << (index + 1);
cout << ": (add a comma after each interest) ";
getline(cin, clientInterest);
member.setInterest(clientInterest);
}
if (member.getGender() == 'M' || member.getGender() == 'm')
{
maleList.newClient(member);
}
else if (member.getGender() == 'F' || member.getGender() == 'f')
femaleList.newClient(member);
cout << "Would you like to enter another client? (y/n)? ";
cin.get(repeat);
cin.ignore();
} while (toupper(repeat) != 'N');
}
else if (choice == "UNMATCH" || choice == "unmatch")
{
string empty = " ";
member.setMatch(empty);
}
else if (choice == "PRINTMATCH" || choice == "printmatch")
{
maleList.printMatches(femaleList);
femaleList.printMatches(maleList);
}
else if (choice == "PRINTFREE" || choice == "printfree")
{
femaleList.printFreeClients();
maleList.printFreeClients();
}
else if (choice == "QUIT" || choice == "quit")
{
return 0;
}
else
cout << "Invalid entry. Please try again. ";
} while (choice != "QUIT" || choice != "quit");
cin.get();
return 0;
}
void displayMenu()
{
cout << "NEWCLIENT: Add a new member to the database ";
cout << "UNMATCH: Removes the matching member from the client ";
cout << "PRINTMATCH: Prints a list of all matched members ";
cout << "PRINTFREE: Prints the name and phone numbers of members that "
<< "currenctly are not matched ";
cout << "QUIT: Ends program ";
}