Question
I'm only looking for Q4 (Remove_Checkup) & Q6 (PrintAll) according to their specific instructions hw09cpp : // READ BEFORE YOU START: // You are given
I'm only looking for Q4 (Remove_Checkup) & Q6 (PrintAll) according to their specific instructions
hw09cpp:
// READ BEFORE YOU START:
// You are given a partially completed program that creates a list of pets with their list of checkups.
// Each pet has the corresponding information: name, breed, and a linked list of checkups.
// To begin, you should trace through the given code and understand how it works.
// Please read the instructions above each required function and follow the directions carefully.
// If you modify any of the given code, the return types, or the parameters, you risk failing the automated test cases.
//
// You are to assume that all input is valid:
// Valid name: String containing alphabetical letters beginning with a capital letter
// Valid breed: String containing alphabetical letters beginning with a capital letter
// Valid date: String in the following format: "MM/DD/YYYY" ex: "01/01/2010"
// All input will be a valid length and no more than the allowed amount of memory will be used
//
// Q1 : CLASS METHODS Part 1 : Constructor and Accessor Methods for Pet class in Pet.cpp file ( 5 points)
// Q2 : CLASS METHODS Part 2 : Class methods for Pet class in Pet.cpp file (10 points)
// Q3 : Add Function in hw09.cpp file ( 5 points)
// Q4 : Search Function in hw09.cpp file (10 points)
// Q5 : Remove One Function in hw09.cpp file (15 points)
// Q6 : Implement cin / cout for the lines in main without modifying the functionality ( 5 points)
#include
#include
#include
#include "Container.h"
#include "Pet.h"
#include "Checkup.h"
using namespace std;
// forward declarations
void flush();
void branching(char);
void helper(char);
void add_pet(string, string);
Pet* search_pet(string, string);
void remove_pet(string, string);
void clean_up(Pet*);
void print_all(Container*);
void remove_all();
Container* list = NULL; // global list
int main()
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); // Use to check for memory leaks in VS
char ch = 'i';
do {
// Q6: Implement cin / cout for the lines below without modifying the functionality (5 points)
// (change all printf statements to cout and read the next char using cin)
printf("Please enter your selection ");
printf("\ta: add a new pet to the list ");
printf("\tc: add a new checkup for a pet ");
printf("\tr: remove a pet from the list ");
printf("\tp: print all pets on the list ");
printf("\tq: quit ");
ch = getchar();
// End Q6
flush();
branching(ch);
} while (ch != 'q');
remove_all();
list = NULL;
return 0;
}
void flush()
{
int c;
do c = getchar(); while (c != ' ' && c != EOF);
}
void branching(char c)
{
switch (c) {
case 'a':
case 'c':
case 'r':
case 'p':
helper(c);
break;
case 'q':
break;
default:
printf(" Invalid input! ");
}
}
// The helper function is used to determine how much data is needed and which function to send that data to.
// It uses pointers and values that are returned from some functions to produce the correct ouput.
// There is no implementation needed here, but you should study this function and know how it works.
// It is always helpful to understand how the code works before implementing new features.
// Do not change anything in this function or you risk failing the automated test cases.
void helper(char c)
{
string name, breed;
if (c == 'p')
print_all(list);
else
{
cout << endl << "Please enter the pet's name: " << endl;
cin >> name;
cout << "Please enter the pet's breed: " << endl;
cin >> breed; flush();
Pet* pet_result = search_pet(name, breed);
if (c == 'a') // add pet
{
if (pet_result == NULL)
{
add_pet(name, breed);
cout << endl << "Pet added." << endl << endl;
}
else
cout << endl << "Pet already on list." << endl << endl;
}
else if (c == 'c') // add checkup
{
if (pet_result == NULL)
{
cout << endl << "Pet not found." << endl << endl;
return;
}
string date;
cout << "Please enter the date of the checkup: " << endl;
cin >> date; flush();
pet_result->addCheckup(date);
cout << endl << "Checkup added." << endl << endl;
}
else if (c == 'r') // remove pet
{
if (pet_result == NULL)
{
cout << endl << "Pet not found." << endl << endl;
return;
}
remove_pet(name, breed);
cout << endl << "Pet removed from the list." << endl << endl;
}
}
}
// Q3: Add Pet (5 points)
// This function will be used to add a new pet to the head of you linked list of containers, no need for sorting.
// The search function is called before this function, therefore you can assume the pet is not already on the list.
void add_pet(string name, string breed)
{
}
// This function is already implemented for you.
// This function will be used to search for a pet on the list.
// Pets on the list may have the same name OR the same breed, but should not have the same name AND breed.
// Therefore, you must traverse the list and return a pointer to a 'Pet' with the desired name AND breed.
// If the pet does not exist on the list, return NULL. (See helper function for use of this function).
Pet* search_pet(string name, string breed)
{
Container *container_traverser = list;
while (container_traverser != NULL)
{
if (container_traverser->pet->getName() == name && container_traverser->pet->getBreed() == breed)
return container_traverser->pet;
container_traverser = container_traverser->next;
}
return NULL;
}
// Q4: Remove_checkup (5 points)
// Write a recursive function to implement the function.
// You will not receive any point if you use a while loop.
// This function will be used to remove all the checkups in the container.
// Use proper memory management to ensure no memory leaks.
void remove_checkups(Container *current_container, Checkup *top)
{
// Add your code
}
// Q5: Remove Pet (10 points)
// This function will be used to remove a pet from the list.
// Traverse the list and use the parameters to remove the pet.
// You must call the remove_checkups function to remove all the checkups.
// Use proper memory management to ensure no memory leaks.
void remove_pet(string name, string breed)
{
// Add your code
}
// This function is already implemented for you. It traverses the list and removes all pets to ensure no memory leaks.
void remove_all()
{
while (list != NULL)
{
Container* container_to_be_removed = list;
list = list->next;
while (container_to_be_removed->pet->checkups != NULL)
{
Checkup *checkup_to_be_removed = container_to_be_removed->pet->checkups;
container_to_be_removed->pet->checkups = container_to_be_removed->pet->checkups->next;
delete checkup_to_be_removed;
}
delete container_to_be_removed->pet;
delete container_to_be_removed;
}
}
// Question 6. Print_all (10 points for this question)
// Write a recursive function to implement the print_all function.
// You will not receive any point if you use a while loop. (6 points for the code)
// Please use comments to indicate the four steps (1 point each step):
// (1) size-n problem, (2) stopping condition and return value,
// (3) size-(n-1) problem, (4) construct the solution of size-n problem
void print_all(Container* top)
{
// Add your code
}
pet.cpp:
#include "Pet.h"
// Q1 : CLASS METHODS Part 1 : Constructor and Accessor Methods for Pet (5 points)
// Constructor
// Create a constructor for the class Pet which takes 2 string parameters (see helper function for use of constructor).
// Use the 2 string parameters to initialize the 2 private local variables name and breed.
// HINT: Don't forget to initialize your linked list of checkups to NULL.
Pet::Pet(string petName, string petBreed) {
name = petName;
breed = petBreed;
}
// Accessor Methods
// Create accessor methods for both private local strings name and breed (see print_all function for use of these methods).
string Pet::getName() {
return name;
}
string Pet::getBreed() {
return breed;
}
// Q2 : CLASS METHODS Part 2 : Class Methods for Pet (10 points)
// Create a method named "addCheckup" which has one string parameter and no return type (see helper function for use).
// This method is used to add a new date to the pet's linked list of checkups. The string parameter is the date of checkup.
// You should add the date to the tail of the linked list "checkups". Checkups will be added in chronological order.
void Pet::addCheckup(string checkDate) {
Checkup *check = new Checkup(checkDate);
check->next = checkups;
checkups = check;
}
// Create a method named "lastCheckup" which has no parameters and returns a string (see print_all function for use).
// This method will be used to return a string for the date of the last checkup for this pet.
// If the pet has not yet had a checkups, return an empty string.
string Pet::lastCheckup() {
if (checkups != NULL) return checkups->getDate;
return "";
}
Container.cpp:
#include "Container.h"
// Constructor for Container class
Container::Container(){
pet = NULL;
next = NULL;
}
checkup.cpp
#include "Checkup.h"
Checkup::Checkup(string new_date) {
date = new_date;
}
string Checkup::getDate() {
return date;
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started