Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Beyond Big Data Using Social MDM To Drive Deep Customer Insight

Authors: Martin Oberhofer, Eberhard Hechler

1st Edition

0133509796, 9780133509793

More Books

Students also viewed these Databases questions