Use C++ template mechanism and define a generic SortedList ADT. Implement the So
ID: 3848889 • Letter: U
Question
Use C++ template mechanism and define a generic SortedList ADT. Implement the SortedList ADT using a dynamically allocated array.
Use the Student.cpp, SortedList.cpp, SortedList.h to create a Student.h, implement a tester.cpp (included below) and text files
Implement tester.cpp. This program should test the SortedList ADT. The program will continue reading commands and data from the input file inFile until the command “Quit” is read. Commands are: (isEmpty, isFull, makeEmpty, getLength, get, insertItem, deleteItem, merge and printList) The program should write output to an output file outFile.txt.
Your test driver should define these lists:
SortedList integerList(5); // list of integers, default size.
SortedList charList; // a list of characters of size 20.
SortedList studentList(10); // Students list of size 10.
Your test driver should read list data type from the use in order to be able to test your implementation for the three types: int, char and Student (see the code below). make sure you are using the same commands and be aware of case sensitivity e.g. isEmpty not IsEmpty which will cause your program to fail the test.
Textfiles:
Test your program with 3 text file intcommands.txt, chcommands.txt and studcommands.txt each contains testing commands for specific data type your test driver should carefully associate the inFile with the corresponding commands file. Our command file for integer lists is called int intcommands.txt. Our commands file to test a list of characters is called chcommands.txt and our text file to test a list of student objects is called studcommands.txt. Make sure that the program will give the correct results and will not stop due to any run-time error
SortedList.h
#include
#include
#include
template
class SortedList
{
public:
SortedList();
bool isEmpty() const;
bool isFull() const;
int getLength() const;
void insertItem(ItemType newItem);
void deleteItem(ItemType item);
ItemType get(int index);
void makeEmpty();
void printList();
~SortedList();
private:
int length;
int MAX_ITEMS;
ItemType *info;
int findIndex(ItemType item);
};
SortedList.cpp
#include "SortedList.h"
#include
#include
template
SortedList::SortedList()
{
MAX_ITEMS = 50;
info = new ItemType[MAX_ITEMS];
length = 0;
}
template
bool SortedList::isEmpty() const
{
return (length == 0);
}
template
bool SortedList::isFull() const
{
return (length == MAX_ITEMS);
}
template
int SortedList::getLength() const
{
return length;
}
template
void SortedList::insertItem (ItemType newItem)
{
int location = 0;
while(location < length)
{
if(newItem break;
else
location++;
}
for (int index = length; index > location; index --)
info[index] = info [index - 1];
info[location] = newItem;
length++;
}
template
void SortedList::deleteItem (ItemType item)
{
int location = 0;
while (item != info[location])
location++;
for (int index = location + 1; index info [index-1] = info[index];
length--;
}
template
void SortedList::makeEmpty ()
{
delete []info; //deallocate previously allocated array
//create a new empty list
info = new ItemType[MAX_ITEMS];
length = 0;
}
template
ItemType SortedList::get(int index)
{
if(index <0 || index >= length)
throw std::out_of_range("Index out of range"); //throw out of range exception
return info[index];
}
template
void SortedList::printList()
{
for(int i = 0; i < length; i++)
std::cout << info[i] << std::endl;
}
template
SortedList::~SortedList()
{
delete []info; //deallocate the memory
}
Student.cpp
#include "SortedList.cpp"
using namespace std;
class Student
{
private:
int id;
string name;
public:
Student()
{
id = 0;
name = "";
}
Student(int id_in, string name_in)
{
id = id_in;
name = name_in;
}
void setId(int id_in)
{
id = id_in;
}
void setName(string name_in)
{
name = name_in;
}
int getId() const
{
return id;
}
string getName() const
{
return name;
}
bool operator == (const Student &other)
{
return id == other.id;
}
bool operator < (const Student &other)
{
return id < other.id;
}
bool operator > (const Student &other)
{
return id > other.id;
}
friend ostream & operator << (ostream &out, const Student &s)
{
out << s.getId() << " " << s.getName();
return out;
}
};
--------------------------
tester.cpp
#include #include
#include
Cout<< “Enter Elements Type 1 for integer 2 for character 3 for Student ”; cin>> datatype;
switch (datatype)
{ case 1: testIntegersList();
break;
}
void testIntegersList()
{
ifstream inFile;
ofstream outFile;
inFile.open(intcommands.txt); outFile.open(outFile.txt);
inFile>> command; // read commands from a text file SortedList list(30);
while (command != “Quit”)
{ if (command== isEmpty())
{
ifstream inFile;
ofstream outFile;
inFile.open(studcommands.txt); outFile.open(outFile.txt);
inFile>> command; // read commands from a text file
} ....
Explanation / Answer
Here is the set of modified files and sample input files as well. Please don't forget to rate the answer if it helped. Thank you very much.
SortedList.h
#include <iostream>
template <class ItemType>
class SortedList
{
public:
SortedList(int size = 50);
bool isEmpty() const;
bool isFull() const;
int getLength() const;
void insertItem(ItemType newItem);
void deleteItem(ItemType item);
ItemType get(int index);
void makeEmpty();
void printList();
void printList(std::ostream &out);
~SortedList();
private:
int length;
int MAX_ITEMS;
ItemType *info;
int findIndex(ItemType item);
};
SortedList.cpp
#include "SortedList.h"
template <class ItemType>
SortedList<ItemType>::SortedList(int size)
{
MAX_ITEMS = size;
info = new ItemType[MAX_ITEMS];
length = 0;
}
template <class ItemType>
bool SortedList<ItemType>::isEmpty() const
{
return (length == 0);
}
template <class ItemType>
bool SortedList <ItemType>::isFull() const
{
return (length == MAX_ITEMS);
}
template <class ItemType>
int SortedList< ItemType>::getLength() const
{
return length;
}
template <class ItemType>
void SortedList< ItemType>::insertItem (ItemType newItem)
{
int location = 0;
while(location < length)
{
if(newItem < info[location] )
break;
else
location++;
}
for (int index = length; index > location; index --)
info[index] = info [index - 1];
info[location] = newItem;
length++;
}
template <class ItemType>
void SortedList< ItemType>::deleteItem (ItemType item)
{
int location = 0;
int found = 0;
while (location < length )
{
if(info[location] == item)
{
found = 1;
break;
}
location++;
}
if(found)
{
for (int index = location; index < length - 1; index ++)
info [index] = info[index + 1];
length--;
}
}
template <class ItemType>
void SortedList< ItemType>::makeEmpty ()
{
delete []info; //deallocate previously allocated array
//create a new empty list
info = new ItemType[MAX_ITEMS];
length = 0;
}
template <class ItemType>
ItemType SortedList< ItemType>::get(int index)
{
if(index <0 || index >= length)
throw std::out_of_range("Index out of range"); //throw out of range exception
return info[index];
}
template <class ItemType>
void SortedList< ItemType>::printList()
{
printList(std::cout);
}
template <class ItemType>
void SortedList< ItemType>::printList(std::ostream &out)
{
for(int i = 0; i < length; i++)
out << info[i] << std::endl;
}
template <class ItemType>
SortedList< ItemType>::~SortedList()
{
delete []info; //deallocate the memory
}
Student.h
#include <iostream>
using namespace std;
class Student
{
private:
int id;
string name;
public:
Student();
Student(int id_in, string name_in);
void setId(int id_in);
void setName(string name_in);
int getId() const;
string getName() const;
bool operator == (const Student &other);
bool operator < (const Student &other);
bool operator > (const Student &other);
friend ostream & operator << (ostream &out, const Student &s);
};
Student.cpp
#include "SortedList.cpp"
#include "Student.h"
using namespace std;
Student::Student()
{
id = 0;
name = "";
}
Student::Student(int id_in, string name_in)
{
id = id_in;
name = name_in;
}
void Student::setId(int id_in)
{
id = id_in;
}
void Student::setName(string name_in)
{
name = name_in;
}
int Student::getId() const
{
return id;
}
string Student::getName() const
{
return name;
}
bool Student::operator == (const Student &other)
{
return id == other.id;
}
bool Student::operator < (const Student &other)
{
return id < other.id;
}
bool Student::operator > (const Student &other)
{
return id > other.id;
}
ostream & operator << (ostream &out, const Student &s)
{
out << s.getId() << " " << s.getName();
return out;
}
tester.cpp
#include "SortedList.cpp"
#include "Student.h"
#include <fstream>
using namespace std;
void testIntegersList();
void testCharactersList();
void testStudentsList();
int main()
{ int number;
string command;
int datatype;
// Prompt user to enter type of elements
cout<< "Enter Elements Type 1 for integer 2 for character 3 for Student ";
cin>> datatype;
switch (datatype)
{ case 1: testIntegersList();
break;
case 2: testCharactersList();
break;
case 3: testStudentsList();
break;
}
}
void testIntegersList()
{
ifstream inFile;
ofstream outFile;
SortedList<int> integerList(5);
int number;
int index;
string command;
inFile.open("intcommands.txt"); outFile.open("outFile.txt");
inFile>> command; // read commands from a text file SortedList list(30);
while (command != "Quit")
{
outFile << " command: " << command;
if (command== "isEmpty")
{
outFile << endl;
if( integerList.isEmpty())
outFile << "list is empty" << endl;
else
outFile << "list is not empty" << endl;
}
else if (command == "insertItem")
{
inFile>> number;
outFile << " " << number << endl;
integerList.insertItem(number);
}
else if (command == "deleteItem")
{
inFile>> number;
outFile << " " << number <<endl;
integerList.deleteItem(number);
}
else if (command == "get")
{
inFile>> index;
outFile << " " << index << endl;
try
{
number = integerList.get(index);
outFile << "The number at index " << index << " is " << number << endl;
}
catch(std::out_of_range &e)
{
outFile << e.what() << endl;
}
}
else if (command == "getLength")
{
outFile << " The length of the list is " << integerList.getLength() << endl;
}
else if(command == "isFull")
{
if(integerList.isFull())
{
outFile << " List is full " << endl;
}
else
{
outFile << " List is not full" << endl;
}
}
else if(command == "makeEmpty")
{
integerList.makeEmpty();
outFile << " List is emptied" << endl;
}
else if(command == "printList")
{
outFile << " The list contents are "<< endl;
integerList.printList(outFile);
}
inFile>> command;
} // while
inFile.close();
outFile.close();
cout << "please check outFile.txt for output" << endl;
} // testIntegersList
void testStudentsList()
{
ifstream inFile;
ofstream outFile;
SortedList<Student> studentList(10);
Student student;
int id;
string name;
int index;
string command;
inFile.open("studcommands.txt"); outFile.open("outFile.txt");
inFile>> command; // read commands from a text file SortedList list(30);
while (command != "Quit")
{
outFile << " command: " << command;
if (command== "isEmpty")
{
outFile << endl;
if( studentList.isEmpty())
outFile << "list is empty" << endl;
else
outFile << "list is not empty" << endl;
}
else if (command == "insertItem")
{
inFile>> id >> name;
student.setId(id);
student.setName(name);
outFile << " " << id << " " << name << endl;
studentList.insertItem(student);
}
else if (command == "deleteItem")
{
inFile>> id;
outFile << " " << id <<endl;
student.setId(id);
studentList.deleteItem(student);
}
else if (command == "get")
{
inFile>> index;
outFile << " " << index << endl;
try
{
student = studentList.get(index);
outFile << "The student at index " << index << " is " << student << endl;
}
catch(std::out_of_range &e)
{
outFile << e.what() << endl;
}
}
else if (command == "getLength")
{
outFile << " The length of the list is " << studentList.getLength() << endl;
}
else if(command == "isFull")
{
if(studentList.isFull())
{
outFile << " List is full " << endl;
}
else
{
outFile << " List is not full" << endl;
}
}
else if(command == "makeEmpty")
{
studentList.makeEmpty();
outFile << " List is emptied" << endl;
}
else if(command == "printList")
{
outFile << " The list contents are "<< endl;
studentList.printList(outFile);
}
inFile>> command;
} // while
inFile.close();
outFile.close();
cout << "please check outFile.txt for output" << endl;
} // testStudentList
void testCharactersList()
{
ifstream inFile;
ofstream outFile;
SortedList<char> charList;
char ch;
int index;
string command;
inFile.open("chcommands.txt"); outFile.open("outFile.txt");
inFile>> command; // read commands from a text file SortedList list(30);
while (command != "Quit")
{
outFile << " command: " << command;
if (command== "isEmpty")
{
outFile << endl;
if( charList.isEmpty())
outFile << "list is empty" << endl;
else
outFile << "list is not empty" << endl;
}
else if (command == "insertItem")
{
inFile>> ch;
outFile << " " << ch << endl;
charList.insertItem(ch);
}
else if (command == "deleteItem")
{
inFile>> ch;
outFile << " " << ch <<endl;
charList.deleteItem(ch);
}
else if (command == "get")
{
inFile>> index;
outFile << " " << index << endl;
try
{
ch = charList.get(index);
outFile << "The character at index " << index << " is " << ch << endl;
}
catch(std::out_of_range &e)
{
outFile << e.what() << endl;
}
}
else if (command == "getLength")
{
outFile << " The length of the list is " << charList.getLength() << endl;
}
else if(command == "isFull")
{
if(charList.isFull())
{
outFile << " List is full " << endl;
}
else
{
outFile << " List is not full" << endl;
}
}
else if(command == "makeEmpty")
{
charList.makeEmpty();
outFile << " List is emptied" << endl;
}
else if(command == "printList")
{
outFile << " The list contents are "<< endl;
charList.printList(outFile);
}
inFile>> command;
} // while
inFile.close();
outFile.close();
cout << "please check outFile.txt for output" << endl;
} // testCharactersList
input file intcommands.txt
insertItem 4
insertItem 8
insertItem 12
printList
isEmpty
isFull
get 1
getLength
insertItem 16
insertItem 20
isFull
printList
get 6
deleteItem 12
makeEmpty
printList
Quit
input file chcommands.txt
isEmpty
isFull
insertItem G
insertItem O
insertItem O
insertItem D
printList
deleteItem O
printList
getLength
get 5
get 2
makeEmpty
printList
Quit
input file studcommands.txt
isEmpty
isFull
insertItem 1 Michael
insertItem 2 Peter
insertItem 3 Julie
printList
getLength
insertItem 4 Donald
insertItem 5 Richard
printList
isEmpty
isFull
get 2
get 10
deleteItem 4
deleteItem 8
printList
insertItem 4 Henry
printList
makeEmpty
printList
Quit
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.