Question
I have the following C++ code for a speaker, it uses the arraybag structure. At the moment it runs fine until a certain point. I
I have the following C++ code for a speaker, it uses the arraybag structure. At the moment it runs fine until a certain point. I am able to add multiple speakers up to 10. I can add the ID number for each, the name, the telephone, the topic and the entry fee. I can also display all the information I added for each speaker, there is no problem with that.
The problem I have is when I click option number 2 (change information), I select the index for the speaker I want to change (starting from 0) and then i select what part of the information i want to change, i do this, add new information and close it. Then I click on option number 3 (display information) and it still displays the old information i entered instead of the new one I edited.
I also need the option number 2 (change information) to work with the speaker ID instead of the index of its position in the array. (iE. Please enter the ID of the speaker you would like to change: XXXXXX > What do you want to change? 1. ID 2. Name 3. telephone 4. topic 5. fee)
///////////////////// speaker.cpp ///////////////////////
//speaker.cpp
#include
#include
#include "ArrayBag.h"
using namespace std;
struct Speaker
{
int id;
string name;
string telephone;
string topic;
double fee;
};
int main()
{
ArrayBag
Speaker sp[10];
for (int i = 0; i < 10; i++)
{
int option;
cout << "what you want to do Please select 1, 2 or 3:" << endl;
cout << " 1.Enter Data 2.Change content 3.Display 4. Exit" << endl;
string name, telephone, topic;
int id;
double fee;
vector
string newField; //Use for new name telephone and topic
int newId; //Use for new id
double newFee; //use to enter new fee from user
cin >> option;
cout << endl;
Speaker s;
switch (option)
{
case 1:
while (true)
{
cout << "Please enter ID number for Speaker:";
cin >> id;
cout << endl;
cout << "Please enter Name of Speaker:";
cin >> name;
cout << endl;
if (name.size() > 0)
break;
else
cout << "Please enter a valid Name of Speaker:";
}
cout << "Please enter telephone number of Speaker:";
cin >> telephone;
cout << endl;
cout << "Please enter topic of Speaker:";
cin >> topic;
cout << endl;
while (true)
{
cout << "Please enter fee of Speaker:";
cin >> fee;
cout << endl;
if (fee > 0)
break;
else
cout << "Please enter a right positive number as fee of Speaker:";
}
sp[i].id = id;
sp[i].telephone = telephone;
sp[i].name = name;
sp[i].topic = topic;
sp[i].fee = fee;
speakersArray.add(sp[i]);
break;
case 2:
cout << "Which element do you want to change? Enter index starting from 0:";
int i;
cin >> i;
cout << endl;
cout << "What do you want to change?: " << endl;
cout << "1: id 2: name 3:telephone 4:topic 5:fee" << endl;
int fieldTochange;
cin >> fieldTochange;
cout << endl;
v = speakersArray.toVector();
s = v.at(i);
switch (fieldTochange)
{
case 1:
cout << "Enter new id " << endl;
cin >> newId;
cout << endl;
s.id = newId;
case 2:
cout << "Enter new name " << endl;
cin >> newField;
cout << endl;
s.name = newField;
case 3:
cout << "Enter new telephone " << endl;
cin >> newField;
cout << endl;
s.telephone = newField;
case 4:
cout << "Enter new topic " << endl;
cin >> newField;
cout << endl;
s.topic = newField;
case 5:
cout << "Enter new fee " << endl;
cin >> newFee;
cout << endl;
s.fee = newFee;
default:
cout << "enter valid input" << endl;
break;
}
break;
case 3:
v = speakersArray.toVector();
for (auto it = v.begin(); it != v.end(); it++)
{
Speaker s = *it;
cout << "ID " << s.id << endl << "name " << s.name << endl << "telephone " << s.telephone << endl << "topic " << s.topic << endl << "fee " << s.fee << endl;
}
break;
case 4:
return 0;
default:
cout << "please enter a valid option" << endl;
break;
}
}
}
/////////////////////// ArrayBag.h /////////////////////////
#pragma once
//ArrayBag.h
#ifndef ARRAYBAG_H
#define ARRAYBAG_H
#include
using namespace std;
template
class BagInterface
{
public:
/** Gets the current number of entries in this bag.
@return The integer number of entries currently in the bag. */
virtual int getCurrentSize() const = 0;
/** Sees whether this bag is empty.
@return True if the bag is empty, or false if not. */
virtual bool isEmpty() const = 0;
/** Adds a new entry to this bag.
@post If successful, newEntry is stored in the bag and
the count of items in the bag has increased by 1.
@param newEntry The object to be added as a new entry.
@return True if addition was successful, or false if not. */
virtual bool add(const ItemType& newEntry) = 0;
/** Removes one occurrence of a given entry from this bag,
if possible.
@post If successful, anEntry has been removed from the bag
and the count of items in the bag has decreased by 1.
@param anEntry The entry to be removed.
@return True if removal was successful, or false if not. */
virtual bool remove(const ItemType& anEntry) = 0;
/** Removes all entries from this bag.
@post Bag contains no items, and the count of items is 0. */
virtual void clear() = 0;
/** Counts the number of times a given entry appears in bag.
@param anEntry The entry to be counted.
@return The number of times anEntry appears in the bag. */
virtual int getFrequencyOf(const ItemType& anEntry) const = 0;
/** Tests whether this bag contains a given entry.
@param anEntry The entry to locate.
@return True if bag contains anEntry, or false otherwise. */
virtual bool contains(const ItemType& anEntry) const = 0;
/** Empties and then fills a given vector with all entries that
are in this bag.
@return A vector containing all the entries in the bag. */
virtual vector
}; // end BagInterface
template
class ArrayBag : public BagInterface
{
private:
static const int DEFAULT_CAPACITY = 6; // Small size to test for a full bag
ItemType items[DEFAULT_CAPACITY]; // Array of bag items
int itemCount; // Current count of bag items
int maxItems; // Max capacity of the bag
// Returns either the index of the element in the array items that
// contains the given target or -1, if the array does not contain
// the target.
int getIndexOf(const ItemType& target) const;
public:
ArrayBag();
int getCurrentSize() const;
bool isEmpty() const;
bool add(const ItemType& newEntry);
bool remove(const ItemType& anEntry);
void clear();
bool contains(const ItemType& anEntry) const;
int getFrequencyOf(const ItemType& anEntry) const;
vector
bool operator ==(const ItemType &obj);
}; // end ArrayBag
template
ArrayBag
{
} // end default constructor
template
int ArrayBag
{
return itemCount;
} // end getCurrentSize
template
bool ArrayBag
{
return itemCount == 0;
} // end isEmpty
template
bool ArrayBag
{
bool hasRoomToAdd = (itemCount < maxItems);
if (hasRoomToAdd)
{
items[itemCount] = newEntry;
itemCount++;
} // end if
return hasRoomToAdd;
} // end add
/*
// STUB
template
bool ArrayBag
{
return false; // STUB
} // end remove
*/
template
bool ArrayBag
{
int locatedIndex = getIndexOf(anEntry);
bool canRemoveItem = !isEmpty() && (locatedIndex > -1);
if (canRemoveItem)
{
itemCount--;
items[locatedIndex] = items[itemCount];
} // end if
return canRemoveItem;
} // end remove
/*
// STUB
template
void ArrayBag
{
// STUB
} // end clear
*/
template
void ArrayBag
{
itemCount = 0;
} // end clear
template
int ArrayBag
{
int frequency = 0;
int curIndex = 0; // Current array index
while (curIndex < itemCount)
{
//if (items[curIndex] == anEntry)
{
frequency++;
} // end if
curIndex++; // Increment to next entry
} // end while
return frequency;
} // end getFrequencyOf
template
bool ArrayBag
{
return getIndexOf(anEntry) > -1;
} // end contains
/* ALTERNATE 1: First version
template
bool ArrayBag
{
return getFrequencyOf(target) > 0;
} // end contains
// ALTERNATE 2: Second version
template
bool ArrayBag
{
bool found = false;
int curIndex = 0; // Current array index
while (!found && (curIndex < itemCount))
{
if (anEntry == items[curIndex])
{
found = true;
} // end if
curIndex++; // Increment to next entry
} // end while
return found;
} // end contains
*/
template
vector
{
vector
for (int i = 0; i < itemCount; i++)
bagContents.push_back(items[i]);
return bagContents;
} // end toVector
// private
template
int ArrayBag
{
bool found = false;
int result = -1;
int searchIndex = 0;
// If the bag is empty, itemCount is zero, so loop is skipped
//while (!found && (searchIndex < itemCount))
//{
// //if (items[searchIndex] == target)
// {
// found = true;
// result = searchIndex;
// }
// else
// {
// searchIndex++;
// } // end if
//} // end while
return result;
} // end getIndexOf
template
bool ArrayBag
{
return (this->items[0] == obj);
}
#endif // !ARRAYBAG_H
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