//Project31a.cpp
//Date 11/16/2001
// *Correction made on 12/07/2001
//Author: Us
////////////////////////////////////////////////////
// Changes made on 11/14/2001 ////////////////////
// count replaced with m_count
// items replaced with m_items
// member replaced with this->member
////////////////////////////////////////////////////
////////////////////////////////////////////////////
//includes
////////////////////////////////////////////////////
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
////////////////////////////////////////////////////
// constants
////////////////////////////////////////////////////
const int MAX_LEN = 20;
const int UNDEFINED = -99;
const char *testNames[] =
{
"Chair", "Table", "Spoon", "Knife",
"Phone", "Couch", "Drive", "Mouse",
"Clock", "Cable", "Plier", "Paper",
"Stand", "Stool"
};
const int testWeights[] =
{
11, 22, 33, 44, 55, 66,
77, 88, 99, 12, 13, 14,
15, 16
};
const int MAX_NAMES = sizeof(testNames)/sizeof(testNames[0]);
const int MAX_ITEMS = 30;
////////////////////////////////////////////////////
// test functions
////////////////////////////////////////////////////
void testInput(void);
void testSetName(void);
void testSetWeight(void);
void testConstructor(void);
void testConstructorCh(void);
void testConstructorCopy(void);
void testSet(void);
void testOperatorEqual(void);
void testGetName(void);
void testGetWeight(void);
void testOperatorLessThan(void);
void testOperatorAssign(void);
void testOperatorInsertion(void);
void testOperatorExtraction(void);
void testConstructorCInventory(void);
void testConstructor2CInventory(void);
void testConstructor3CInventory(void);
void testSortBubbleCInventory(void);
void testIsSortedCInventory(void);
void testShuffleCInventory(void);
void testOperatorAssignCInventory(void);
void testSortSelectionCInventory(void);
void testSortInsertionCInventory(void);
void testSortByCountingCInventory(void);
void testDisplayDistinctCInventory(void);
void testInsertCInventory(void);
void testRemoveCInventory(void);
void testRemoveDupesCInventory(void);
void testCopyConstructorCInventory(void); // 11/09/2001
void testOperatorEqualCInventory(void); // 11/09/2001
void testOperatorLessThanOrEqual(void); // 11/09/2001
void testOperatorGreaterThan(void); // 11/09/2001
void testOperatorGreaterThanOrEqual(void); // 11/09/2001
void testDisplaySummaryCountsCInventory(void);// 11/12/2001
void testIsEqualToDupesRemoved(void); // 11/16/2001
void testMergePurgeCInventory(void); // 11/16/2001
void testAll(void); // 11/16/2001
////////////////////////////////////////////////////
// CItem class
////////////////////////////////////////////////////
class CItem
{
private:
char m_name[MAX_LEN+1];
int m_weight;
public:
CItem(void);
CItem(char name[], int weight);
CItem(char ch);
CItem(const CItem &item);
void input(void);
void display(void) const;
void set(char name[], int weight);
void setName(char name[]);
void setWeight(int weight);
char * getName(void);
int getWeight(void);
bool operator < (const CItem &i2);
bool operator <= (const CItem &i2); // 11/09/2001
bool operator > (const CItem &i2); // 11/09/2001
bool operator >= (const CItem &i2); // 11/09/2001
CItem & operator = (const CItem &i2);
friend bool operator ==(const CItem &i1, const CItem &i2);
friend ostream & operator << (ostream &bob, const CItem &item);
friend istream & operator >> (istream &joe, CItem &item);
};
////////////////////////////////////////////////////
// CInventory class
////////////////////////////////////////////////////
class CInventory
{
private:
int m_count;
CItem m_items[MAX_ITEMS];
void swap(CItem &i1, CItem &i2)
{
CItem tempItem;
tempItem = i1;
i1 = i2;
i2 = tempItem;
};
public:
CInventory(void);
CInventory(int n);
CInventory(char ch);
CInventory(const CInventory &inv); // 11/09/2001
~CInventory(void){}
void sortBubble(void);
bool isSorted(void);
void shuffle(void);
void sortSelection(void); // 11/09/2001
void sortInsertion(void);
void sortByCounting(void);
void displayDistinct(void);
bool insert(const CItem &item); // 11/02/2001
bool remove(int index); // 11/05/2001
int removeDupes(void); // 11/07/2001
void displaySummaryCounts(void); // 11/12/2001
bool isEqualToDupesRemoved(const CInventory &inv);// 11/16/2001
int mergePurge(const CInventory &inv2); // 11/16/2001
CInventory & operator = (const CInventory &inv2);
bool operator == (const CInventory &inv2); // 11/09/2001
bool operator != (const CInventory &inv2);
friend ostream & operator << (ostream &bob, const CInventory &inv);
friend istream & operator >> (istream &joe, CInventory &inv);
};
////////////////////////////////////////////////////
// main function
////////////////////////////////////////////////////
void main(void)
{
//srand( (unsigned)time( NULL ) );
srand(4);
//testInput();
//testConstructor();
//testConstructorCh();
//testConstructorCopy();
//testSetName();
//testSetWeight();
//testSet();
//testOperatorEqual();
//testGetName();
//testGetWeight();
//testOperatorLessThan();
//testOperatorAssign();
//testOperatorInsertion();
//testOperatorExtraction();
//mainProject03();
//testConstructorCInventory();
//testConstructor2CInventory();
//testConstructor3CInventory();
//testSortBubbleCInventory();
//testIsSortedCInventory();
//testShuffleCInventory();
//testSortSelectionCInventory();
//testSortInsertionCInventory();
//testSortByCountingCInventory();
//testOperatorAssignCInventory();
//testDisplayDistinctCInventory();
//testInsertCInventory();
//testRemoveCInventory();
//testRemoveDupesCInventory();
//testCopyConstructorCInventory();
//testOperatorEqualCInventory();
//testOperatorLessThanOrEqual();
//testOperatorGreaterThan();
//testOperatorGreaterThanOrEqual();
//testDisplaySummaryCountsCInventory();
testIsEqualToDupesRemoved();
//testMergePurgeCInventory();
//testAll();
}
void testAll(void)
{
testInput();
testConstructor();
testConstructorCh();
testConstructorCopy();
testSetName();
testSetWeight();
testSet();
testOperatorEqual();
testGetName();
testGetWeight();
testOperatorLessThan();
testOperatorAssign();
testOperatorInsertion();
testOperatorExtraction();
testConstructorCInventory();
testConstructor2CInventory();
testConstructor3CInventory();
testSortBubbleCInventory();
testIsSortedCInventory();
testShuffleCInventory();
testSortSelectionCInventory();
testSortInsertionCInventory();
testSortByCountingCInventory();
testOperatorAssignCInventory();
testDisplayDistinctCInventory();
testInsertCInventory();
testRemoveCInventory();
testRemoveDupesCInventory();
testCopyConstructorCInventory();
testOperatorEqualCInventory();
testOperatorLessThanOrEqual();
testOperatorGreaterThan();
testOperatorGreaterThanOrEqual();
testDisplaySummaryCountsCInventory();
testIsEqualToDupesRemoved();
testMergePurgeCInventory();
}
////////////////////////////////////////////////////
//int mergePurge(const CInventory &inv2)
////////////////////////////////////////////////////
/* merges self with inv2 and removes duplicates
returns the number of duplicates removed in this
process
Algorithm 0:
Inserts all the items from inv2 to self
Deletes all duplicates from self
*/
////////////////////////////////////////////////////
int CInventory::mergePurge(const CInventory &inv2)
{
for (int i=0; i<=inv2.m_count-1; i++)
this->insert(inv2.m_items[i]);
return this->removeDupes();
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testMergePurgeCInventory(void);
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testMergePurgeCInventory(void)
{
for (int i=1; i<=10; i++)
{
CInventory inv1(rand()%MAX_ITEMS/2);
CInventory inv2(rand()%MAX_ITEMS/2);
cout << "inv1 =\n";
cout << inv1 << endl;
cout << "inv2 =\n";
cout << inv2 << endl;
int j = inv1.mergePurge(inv2);
cout << "After j = inv1.mergePurge(inv2);\n";
cout << "j = " << j << endl;
cout << "inv1 =\n";
cout << inv1 << endl;
cout << "inv2 =\n";
cout << inv2 << endl;
cout << "-----------------------------------\n";
}
}
////////////////////////////////////////////////////
// bool CInventory::isEqualToDupesRemoved(const CInventory &inv)
////////////////////////////////////////////////////
/*
test1. count of originalInv should be >= the distinctInv
test2. distinctInv should not have duplicate records
test3. for every record in originalInv there must be only
one matching record in distinctInv
test4. for every record in distinctInv there must one or
more matching records in originalInv
test5. sum of occurrences of matching records each record
from distinctInv in originalInv should be equal to
the total records in originalInv.
*/
////////////////////////////////////////////////////
bool CInventory::isEqualToDupesRemoved(const CInventory &inv)
{
bool allPassed = true;
bool thisPassed;
//test1. count of originalInv should be >= the distinctInv/
{
if (this->m_count >= inv.m_count)
cout << "test1: passed\n";
else
{
allPassed = false;
cout << "test1: failed\n";
}
}
//test2. distinctInv should not have duplicate records/
{
thisPassed = true;
int i, j;
for (i=0; i<inv.m_count-1; i++)
{
for (j=i+1; j<inv.m_count; j++) //correction on 12/07/2001
if (inv.m_items[i] == inv.m_items[j])
{
allPassed = false;
thisPassed = false;
break;
}
if (!thisPassed) break;
}
if (thisPassed)
cout << "test2: passed\n";
else
cout << "test2: failed\n";
}
//test3. for every record in originalInv there must be only
// one matching record in distinctInv
{
thisPassed = true;
int i, j, copies;
for (i=0; i<this->m_count; i++)
{
copies = 0;
for (j=0; j<inv.m_count; j++)
if (this->m_items[i] == inv.m_items[j])
copies++;
if (copies != 1)
{
thisPassed = false;
allPassed = false;
break;
}
}
if (thisPassed)
cout << "test3: passed\n";
else
cout << "test3: failed\n";
}
//test4. for every record in distinctInv there must one or
// more matching records in originalInv
{
thisPassed = true;
int i, j, copies;
for (i=0; i<inv.m_count; i++)
{
copies = 0;
for (j=0; j<this->m_count; j++)
if (inv.m_items[i] == this->m_items[j])
copies++;
if (copies < 1)
{
thisPassed = false;
allPassed = false;
break;
}
}
if (thisPassed)
cout << "test4: passed\n";
else
cout << "test4: failed\n";
}
//test5. sum of occurrences of matching records each record
// from distinctInv in originalInv should be equal to
// the total records in originalInv.
{
thisPassed = true;
int i, j, total;
total = 0;
for (i=0; i<inv.m_count; i++)
{
for (j=0; j<this->m_count; j++)
if (inv.m_items[i] == this->m_items[j])
total++;
}
if (total != this->m_count)
{
thisPassed = false;
allPassed = false;
}
if (thisPassed)
cout << "test5: passed\n";
else
cout << "test5: failed\n";
}
return allPassed;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testIsEqualToDupesRemoved(void);
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testIsEqualToDupesRemoved(void)
{
for (int i=1; i<=10; i++)
{
{
cout << "===================================\n";
cout << "Test Case#:" << i << endl;
cout << "===================================\n";
CInventory originalInv('r');
CInventory distinctInv(originalInv);
cout << "originalInv =\n";
cout << originalInv << endl;
distinctInv.removeDupes();
cout << "distinctInv=\n";
cout << distinctInv;
if (originalInv.isEqualToDupesRemoved(distinctInv))
cout << "distinctInv has only distinct records\n";
else
cout << "distinctInv does not have distinct records\n";
}
{
CInventory originalInv('r');
CInventory distinctInv('r');
cout << "\noriginalInv =\n";
cout << originalInv << endl;
cout << "distinctInv=\n";
cout << distinctInv;
if (originalInv.isEqualToDupesRemoved(distinctInv))
cout << "distinctInv has only distinct records\n";
else
cout << "distinctInv does not have distinct records\n";
}
cout << "-----------------------------------\n";
}
}
////////////////////////////////////////////////////
//void CInventory::displaySummaryCounts(void);
////////////////////////////////////////////////////
/*
displays the count and name of each item from the list
Input: [72, 34, 72, 45, 72, 34]
1 0 1 0 1 0
Output: 3 [72]
2 [34]
1 [45]
Algorithm 0:
Initialze the counts[] = 1
Initialze the visited[] = false
do the following for i=0 to count-1
//find the first value not yet visited
if visited[i] = false then
visited[i] = 1;
//find the duplicates on right of it
for j=i+1 to count-1 do
if items[i] == items[j] then
counts[i]++
visited[j] = true;
end if
end for j
Display counts[i] and items[i]
end if
end for
Algorithm 1:
Initialze the visited[] = false
do the following for i=0 to count-1
//find the first value not yet visited
if visited[i] = false then
visited[i] = true;
dupes = 1
//find the duplicates on right of it
for j=i+1 to count-1 do
if items[i] == items[j] then
dupes++
visited[j] = true;
end if
end for j
Display dupes and items[i]
end if
end for
*/
////////////////////////////////////////////////////
//void CInventory::displaySummaryCounts(void)
////////////////////////////////////////////////////
void CInventory::displaySummaryCounts(void)
{
int i, j;
//Initialze the visited[] = false
bool visited[MAX_ITEMS];
for (i=0; i<this->m_count; i++)
visited[i] = false;
int copies;
int grandCount=0;
for (i=0; i<this->m_count; i++)
//find the first value not yet visited
if (!visited[i])
{
visited[i] = true;
copies = 1;
//find the duplicates on right of it
for (j=i+1; j<=this->m_count-1; j++)
if (this->m_items[i] == this->m_items[j])
{
copies++;
visited[j] = true;
}
cout << copies << ' ' << this->m_items[i];
grandCount = grandCount + copies;
}
cout << "grandCount=" << grandCount << endl;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testDisplaySummaryCountsCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testDisplaySummaryCountsCInventory(void)
{
cout << "testDisplaySummaryCountsCInventory\n";
cout << "----------------------------------\n";
for (int i=1; i<=5; i++)
{
cout << "Case #" << i << endl;
CInventory myInv('r');
cout << myInv;
cout << "Summary counts\n";
myInv.displaySummaryCounts();
}
}
////////////////////////////////////////////////////
// bool CInventory::operator == (const CInventory &inv2)
////////////////////////////////////////////////////
bool CInventory::operator == (const CInventory &inv2)
{
if (this->m_count != inv2.m_count) return false;
for (int i=0; i<inv2.m_count; i++)
if (!(this->m_items[i] == inv2.m_items[i]))
return false;
return true;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorEqualCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorEqualCInventory(void)
{
cout << "testOperatorEqualCInventory\n";
cout << "---------------------------\n";
for (int i=1; i<=5; i++)
{
CInventory myInv('r');
CInventory yourInv(myInv);
cout << myInv << endl;
cout << yourInv << endl;
if (myInv == yourInv)
cout << "Are equal\n";
else
cout << "Are NOT equal\n";
}
}
////////////////////////////////////////////////////
// CInventory::CInventory(const CInventory &inv)
////////////////////////////////////////////////////
CInventory::CInventory(const CInventory &inv)
{
this->m_count = inv.m_count;
for (int i=0; i<inv.m_count; i++)
this->m_items[i] = inv.m_items[i];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testCopyConstructorCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testCopyConstructorCInventory(void)
{
cout << "testCopyConstructorCInventory\n";
cout << "-----------------------------\n";
for (int i=1; i<=5; i++)
{
CInventory myInv('r');
CInventory yourInv(myInv);
cout << myInv << endl;
cout << yourInv << endl;
if (myInv == yourInv)
cout << "Worked\n";
else
cout << "DID NOT WORK\n";
}
}
////////////////////////////////////////////////////
//int CInventory::removeDupes(void)
////////////////////////////////////////////////////
/*
Removes duplicate records from the object
returns the number of records removed
[12, 22, 19, 19, 22, 12]
[12, 22, 19, 22, 12]
[12, 22, 19]
Algorithm0:
Go from left to right deleting duplicates
Algorithm1:
i=0
Shoot dupes from j=i+1 to count-1
i=i+1
goto Shoot statement if i<count-1
Algorithm2:
i=0
while i < count-1
Shoot dupes from j=i+1 to count-1
i=i+1
end while
[66 25 19]
0 1 2
count=3
i j
0 1..2
1 2..2
2
Algorithm3:
i=0
countRemoved=0
while i < count-1
//Shoot dupes from j=i+1 to count-1
for j=i+1 to count-1
if items[i] = items[j] then
remove(j)
increase countRemoved by 1
end if
i=i+1
end while
*/
////////////////////////////////////////////////////
int CInventory::removeDupes(void)
{
int i=0, j;
int countRemoved = 0;
while (i < this->m_count-1)
{
//Shoot dupes from j=i+1 to count-1
j=i+1;
while (j<=this->m_count-1)
{
if (this->m_items[i] == this->m_items[j])
{
this->remove(j);
countRemoved++;
}
else
j++;
}
i++;
}
return countRemoved;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testRemoveCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testRemoveDupesCInventory(void)
{
cout << "testRemoveDupesCInventory\n";
cout << "=========================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << "Original\n";
cout << yourInv;
cout << "Removed " << yourInv.removeDupes() << endl;
cout << yourInv;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// CInventory::remove(int index)
////////////////////////////////////////////////////
/*
delete the item at index in range (0..count-1)
Possibilities:
index > count-1
index < 0
index >= 0 and <=count-1
Version 0:
if index is out of range then
return false
else
delete item at index position
return true
end if
Version 1:
if index <0 or index > count-1
return false
else
//delete item at index position
for i=index to count-2
items[i] = items[i+1]
end for
items[count-1] = nothing
count--
return true
end if
*/
////////////////////////////////////////////////////
bool CInventory::remove(int index)
{
if ((index <0) || (index > this->m_count-1))
return false;
else
//delete item at index position
{
for (int i=index; i<=this->m_count-2; i++)
this->m_items[i] = this->m_items[i+1];
CItem nullItem;
this->m_items[m_count-1] = nullItem;
this->m_count--;
return true;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testRemoveCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testRemoveCInventory(void)
{
cout << "testRemoveCInventory\n";
cout << "====================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << "Original\n";
cout << yourInv;
int index = rand()%10;
cout << "Attempting to remove item at "<< index << endl;
if(yourInv.remove(index))
cout << "Removed\n";
else
cout << "Not removed\n";
cout << yourInv;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// bool CInventory::insert(const CItem &item)
////////////////////////////////////////////////////
/*insert item to inventory
if count = MAX_ITEMS then return false
items[count] = item
count++
return true
*/
////////////////////////////////////////////////////
bool CInventory::insert(const CItem &item) //11/02/2001
{
if (MAX_ITEMS == this->m_count)
return false;
else
{
this->m_items[m_count] = item;
this->m_count++;
return true;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testInsertCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testInsertCInventory(void)
{
cout << "testInsertCInventory\n";
cout << "====================\n";
for (int i=0; i<=5; i++)
{
CInventory *invPtr;
if (rand()%2)
invPtr = new CInventory('r');
else
invPtr = new CInventory(MAX_ITEMS);
cout << "Original\n";
cout << *invPtr;
CItem item('r');
if(invPtr->insert(item))
cout << "success\n";
else
cout << "OVERFLOW\n";
cout << "After inserting " << item;
cout << *invPtr;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// void displayDistinct(void);
////////////////////////////////////////////////////
/*
input: [23, 21, 23, 13, 21, 21, 16, 13]
output:[23, 21, 13, 16]
Algorithm0:
display the first value
From 2nd to last display if not displayed
Algorithm1:
display items[0]
for i=1 to count-1 do the following
display items[i] if not displayed
Algorithm2:
display items[0]
for i=1 to count-1 do the following
display items[i] if it does not match with any previous value
Algorithm3:
display items[0]
for i=1 to count-1 do the following
if items[i] <> items[0..i-1] then display it
Algorithm4:
display items[0]
for i=1 to count-1 do the following
visited = false
for j=0 to i-1 do the following
if items[i] = items[j] then visited = true
end for
if not visited then display items[i]
end for
Algorithm5:
display items[0]
for i=1 to count-1 do the following
visited = false
for j=0 to i-1 do the following
if items[i] = items[j] then
visited = true
get out of this for loop
end if
end for
if not visited then display items[i]
end for
Algorithm6:
if count <= 0 exit function
display items[0]
for i=1 to count-1 do the following
visited = false
for j=0 to i-1 do the following
if items[i] = items[j] then
visited = true
get out of this for loop
end if
end for
if not visited then display items[i]
end for
Algorithm7:
for i=0 to count-1 do the following
visited = false
for j=0 to i-1 do the following
if items[i] = items[j] then
visited = true
get out of this for loop
end if
end for
if not visited then display items[i]
end for
*/
////////////////////////////////////////////////////
void CInventory::displayDistinct(void)
{
for (int i=0; i<=this->m_count-1; i++)
{
bool visited = false;
for(int j=0; j<=i-1; j++)
if (this->m_items[i] == this->m_items[j])
{
visited = true;
break;
}
if (!visited) cout << this->m_items[i];
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testDisplayDistinctCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testDisplayDistinctCInventory(void)
{
cout << "testDisplayDistinctCInventory\n";
cout << "=============================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << "Original\n";
cout << yourInv;
cout << "DIstinct\n";
yourInv.displayDistinct();
cout << "-------------------\n";
}
for (i=0; i<=5; i++)
{
CInventory *invPtr;
invPtr = new CInventory('r');
cout << "Original\n";
cout << invPtr << endl;
cout << *invPtr;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
//void sortByCounting(void);
////////////////////////////////////////////////////
//Sorting by counting
/*
items[] = [66, 37, 29, 28, 61, 98]
counts[]= { 0, 0, 0, 0, 0, 0}
[66, 37, 29, 28, 61, 98]
{ 0, 0, 0, 0, 0, 0}
[66, 37, 29, 28, 61, 98]
{ 4, 0, 0, 0, 0, 1}
[66, [37, 29, 28, 61, 98]
{ 4, [2, 0, 0, 1, 2}
[66, 37, [29, 28, 61, 98]
{ 4, 2, [1, 0, 2, 3}
[66, 37, 29, [28, 61, 98]
{ 4, 2, 1, [0, 3, 4}
[66, 37, 29, 28, [61, 98]
{ 4, 2, 1, 0, [3, 5}
[66, 37, 29, 28, 61, 98] is items[]
{ 4, 2, 1, 0, 3, 5} is counts[]
place values based on counts
[28, 29, 37, 61, 66, 98] is tItems[]
0 1 2 3 4 5
Version 0:
Initialize the counts[]
Update the counts[] by incrementing
Place values in a new list based on counts[]
Copy new list to old list
Version 1:
//Initialize the counts[]
for i=0 to count-1
counts[i] = 0
//Update the counts[] by incrementing
for i=0 to count-2
for j=i+1 to count-1
if items[i] > items[j] then
counts[i]++
else
counts[j]++
end if
end for
end for
//Place values in a tItems[] based on counts[]
for i=0 to count-1
tItems[counts[i]] = items[i]
end for
//Copy new list to old list
for i=0 to count-1
items[i] = tItems[i]
end for
*/
////////////////////////////////////////////////////
void CInventory::sortByCounting(void)
{
//Initialize the counts[]
int counts[MAX_ITEMS];
for (int i=0; i<=this->m_count-1; i++)
counts[i] = 0;
int k;
cout << "counts[]: ";
for (k=0; k<=this->m_count-1; k++)
cout << counts[k] << ' ';
cout << endl;
//Update the counts[] by incrementing
int j;
for (i=0; i<=this->m_count-2; i++) //because last value is lonely
for (j=i+1; j<=this->m_count-1; j++)
{
if (this->m_items[j] < this->m_items[i])
counts[i]++;
else
counts[j]++;
cout << "counts[]: ";
for (k=0; k<=this->m_count-1; k++)
cout << counts[k] << ' ';
cout << endl;
}
//Place values in a tItems[] based on counts[]
CItem tItems[MAX_ITEMS];
for (i=0; i<=this->m_count-1; i++)
tItems[counts[i]] = this->m_items[i];
//Copy new list to old list
for (i=0; i<=this->m_count-1; i++)
this->m_items[i] = tItems[i];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testSortByCountingCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testSortByCountingCInventory(void)
{
cout << "testSortByCountingCInventory\n";
cout << "============================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << yourInv;
cout << "After sortByCounting\n";
yourInv.sortByCounting();
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
//void CInventory::sortInsertion(void)
////////////////////////////////////////////////////
/*
/* Algorithm:
[66], 37, 29, 28, 61, 98
[37, 66], 29, 28, 61, 98
[29, 37, 66], 28, 61, 98
[28, 29, 37, 66], 61, 98
[28, 29, 37, 61, 66], 98
[28, 29, 37, 61, 66, 98]
Version 0:
---------
if count <= 1 then exit function
do the following count-1 times using i=1 to count-1
insert the ith value s.t. items[0..i] are sorted
Version 1:
---------
if count <= 1 then exit function
do the following count-1 times using i=1 to count-1
//insert the ith value s.t. items[0..i] are sorted
k = i
step1:
if item[k] >= items[k-1] then exit for
else
swap items[k], items[k-1]
k = k-1
if k > 0 then goto step1:
Version 2:
---------
if count <= 1 then exit function
do the following count-1 times using i=1 to count-1
//insert the ith value s.t. items[0..i] are sorted
k = i
do
{
if item[k] >= items[k-1] then
exit do (inner)
else
swap items[k], items[k-1]
k = k-1
end if
}
while (k>0)
end do (outer)
Version 3:
---------
if count <= 1 then exit function
do the following count-1 times using i=1 to count-1
//insert the ith value s.t. items[0..i] are sorted
k = i
while k > 0
if item[k] >= items[k-1] then
exit do (inner)
else
swap items[k], items[k-1]
k = k-1
end if
end while
end do (outer)
Version 4:
---------
do the following count-1 times using i=1 to count-1
//insert the ith value s.t. items[0..i] are sorted
k = i
while k > 0
if item[k] >= items[k-1] then
exit do (inner)
else
swap items[k], items[k-1]
k = k-1
end if
end while
end do (outer)
*/
////////////////////////////////////////////////////
void CInventory::sortInsertion(void)
{
int k;
for (int i=1; i<= this->m_count-1; i++)
{
k = i;
while (k > 0)
{
if (!(this->m_items[k] < this->m_items[k-1]))
break;
else
{
swap(this->m_items[k], this->m_items[k-1]);
k = k-1;
}
}
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testSortInsertionCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testSortInsertionCInventory(void)
{
cout << "testSortInsertionCInventory\n";
cout << "===========================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << yourInv;
cout << "After sortInsertion\n";
yourInv.sortInsertion();
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
//void CInventory::sortSelection(void)
/* Algorithm:
[66, 37, 29, 28, 61]
[61, 37, 29, 28] 66
[28, 37, 29,] 61 66
[28, 29,] 37, 61 66
[28,]29, 37, 61 66
Version #0
Given: items[0..count-1]
n = count
do the following count-1 times
put the index of the max value in iMax
swap items[iMax], items[n-1]
n = n-1
end do
Version #1
Given: items[0..count-1]
n = count
do the following count-1 times
//put the index of the max value in iMax
iMax = 0
do the following n-1 times using k=1 to n-1
if items[k] > items[iMax] then
iMax = k
end if
end do
swap items[iMax], items[n-1]
cout << *this
n = n-1
end do
testSortSelection
do the following 5 times
CInventory testInv('r')
display "Original inv"
display testInv
tetInv.sortSelection()
display "Sorted inv"
end do
*/
////////////////////////////////////////////////////
// sortSelection(void)
////////////////////////////////////////////////////
void CInventory::sortSelection(void)
{
int n = this->m_count;
int k;
for (int i=1; i<=this->m_count-1; i++)
{
//put the index of the max value in iMax
int iMax = 0;
for (k=1; k<=n-1; k++)
if (this->m_items[iMax] < this->m_items[k])
iMax = k;
swap(this->m_items[iMax], this->m_items[n-1]);
n = n-1;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testSortSelectionCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testSortSelectionCInventory(void)
{
cout << "testSortSelectionCInventory\n";
cout << "===========================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << yourInv;
cout << "After sortSelection\n";
yourInv.sortSelection();
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// operator =
////////////////////////////////////////////////////
CInventory & CInventory::operator = (const CInventory &inv2)
{
this->m_count = inv2.m_count;
for (int i=0; i<this->m_count; i++)
this->m_items[i] = inv2.m_items[i];
return *this;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorAssignCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorAssignCInventory(void)
{
cout << "testOperatorAssignCInventory\n";
cout << "============================\n";
for (int i=1; i<=5; i++)
{
CInventory yourInv('r');
CInventory myInv('R');
CInventory hisInv('r');
cout << "yourInv = " << yourInv << endl;
cout << "myInv = " << myInv << endl;
cout << "hisInv = " << hisInv << endl;
yourInv = myInv = hisInv;
cout << "After yourInv = myInv = hisInv;\n";
cout << "yourInv = " << yourInv << endl;
cout << "myInv = " << myInv << endl;
cout << "hisInv = " << hisInv << endl;
cout << "----------------------\n";
}
}
////////////////////////////////////////////////////
// shuffle function
////////////////////////////////////////////////////
void CInventory::shuffle(void)
{
if (this->m_count <= 1)
return;
CItem tempItem;
int pick1, pick2;
for (int i=1; i<=2*this->m_count; i++)
{
pick1 = rand()%this->m_count;
pick2 = rand()%this->m_count;
swap(this->m_items[pick1], this->m_items[pick2]);
/*
tempItem = this->m_items[pick1];
this->m_items[pick1] = this->m_items[pick2];
this->m_items[pick2] = tempItem;
*/
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testShuffleCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testShuffleCInventory(void)
{
cout << "testShuffleCInventory\n";
cout << "=====================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "After sortBubble\n";
yourInv.sortBubble();
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "After shuffle\n";
yourInv.shuffle();
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// isSorted function
////////////////////////////////////////////////////
bool CInventory::isSorted(void)
{
for (int i=0; i<=this->m_count-2; i++)
if (this->m_items[i+1] < this->m_items[i])
return false;
return true;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testIsSortedCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testIsSortedCInventory(void)
{
cout << "testIsSortedCInventory\n";
cout << "======================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "After sortBubble\n";
yourInv.sortBubble();
cout << yourInv;
if (yourInv.isSorted())
cout << "SORTED\n";
else
cout << "NOT SORTED NOT SORTED\n";
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// sortBubble function
////////////////////////////////////////////////////
void CInventory::sortBubble(void)
{
bool sorted;
int i;
CItem tempItem;
do
{
sorted = true;
for (i=0; i<=this->m_count-2; i++)
{
if (this->m_items[i+1] < this->m_items[i])
{
//use swap
tempItem = this->m_items[i];
this->m_items[i] = this->m_items[i+1];
this->m_items[i+1] = tempItem;
sorted = false;
}
}
}
while (!sorted);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testSortBubbleCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testSortBubbleCInventory(void)
{
cout << "testSortBubbleCInventory\n";
cout << "========================\n";
for (int i=0; i<=5; i++)
{
CInventory yourInv('r');
cout << yourInv;
cout << "After sortBubble\n";
yourInv.sortBubble();
cout << yourInv;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// construct inventory of random random items
////////////////////////////////////////////////////
CInventory::CInventory(char ch)
{
if (('r' == ch) || ('R' == ch))
{
this->m_count = rand()%MAX_ITEMS;
for (int i=0; i<=this->m_count-1; i++)
{
CItem item('r');
this->m_items[i] = item;
}
}
else
this->m_count =0;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testConstructor3CInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testConstructor3CInventory(void)
{
cout << "testConstructor3CInventory\n";
cout << "=========================\n";
for (int i=1; i<=5; i++)
{
CInventory yourInv('r');
CInventory myInv('R');
CInventory hisInv('s');
cout << yourInv;
cout << endl;
cout << myInv;
cout << endl;
cout << hisInv;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// construct inventory of n random items
////////////////////////////////////////////////////
CInventory::CInventory(int n)
{
if (n < 0)
n = -n;
this->m_count = n;
for (int i=0; i<=n-1; i++)
{
CItem item('r');
this->m_items[i] = item;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testConstructor2CInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testConstructor2CInventory(void)
{
cout << "testConstructor2CInventory\n";
cout << "=========================\n";
for (int i=-1; i<=5; i++)
{
CInventory yourInv(i);
cout << yourInv;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
// operator << overloaded for CInventory
////////////////////////////////////////////////////
ostream & operator << (ostream &bob, const CInventory &inv)
{
bob << "inventory(" << inv.m_count << ")=\n";
for (int i=0; i<=inv.m_count-1; i++)
bob << inv.m_items[i];
return bob;
}
////////////////////////////////////////////////////
// default constructor for CInventory
////////////////////////////////////////////////////
CInventory::CInventory(void)
{
m_count = 0;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testConstructorCInventory
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testConstructorCInventory(void)
{
cout << "testConstructorCInventory\n";
cout << "=========================\n";
for (int i=1; i<=5; i++)
{
CInventory yourInv;
cout << yourInv;
cout << "-------------------\n";
}
}
////////////////////////////////////////////////////
//overload >> for CItem
////////////////////////////////////////////////////
istream & operator >> (istream &joe, CItem &item)
{
cout << "item m_name: ";
joe >> item.m_name;
cout << "item m_weight: ";
joe >> item.m_weight;
return joe;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// test operator >>
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorExtraction(void)
{
cout << "Test operator >>\n";
cout << "=================\n";
for (int i=1; i<=5; i++)
{
CItem item1;
cin >> item1;
cout << item1;
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
//overload << for CItem
////////////////////////////////////////////////////
ostream & operator << (ostream &bob, const CItem &item)
{
bob << '[' << item.m_name << ", ";
bob << item.m_weight << ']' << endl;
return bob;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// test operator <<
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorInsertion(void)
{
cout << "Test operator <<\n";
cout << "=================\n";
for (int i=1; i<=5; i++)
{
CItem item1('r');
cout << "item1 = "; item1.display();
cout << "item1 = " << item1 << endl;
cout << item1 << item1;
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// operator = overloaded
////////////////////////////////////////////////////
CItem & CItem::operator = (const CItem &i2)
{
strcpy(m_name, i2.m_name);
this->m_weight = i2.m_weight;
return *this;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorAssign
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorAssign(void)
{
cout << "Test operator =\n";
cout << "===============\n";
for (int i=1; i<=5; i++)
{
CItem item1('r'), item2('r'), item3('r');
cout << "item1 = "; item1.display();
cout << "item2 = "; item2.display();
cout << "item3 = "; item3.display();
item1 = item2 = item3;
//item1.operator= (item2.operator= item3);
//item1.operator = (item2.operator = (item3));
item2.operator = (item3);
item1.operator = (item2);
cout << "After item1 = item2 = item3;\n";
cout << "item1 = "; item1.display();
cout << "item2 = "; item2.display();
cout << "item3 = "; item3.display();
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// operator >= overloaded for CItem class objects
// returns true if weight of i1 is >= that of i2
// else returns false
////////////////////////////////////////////////////
bool CItem::operator >= (const CItem &i2)
{
return !(*this < i2);
//return (this->m_weight >= i2.m_weight);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorGreaterThanOrEqual
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorGreaterThanOrEqual(void)
{
cout << "Test operator >=\n";
cout << "================\n";
for (int i=1; i<=5; i++)
{
CItem item1('r'), item2('r'), item3('r');
cout << "item1 = "; item1.display();
cout << "item2 = "; item2.display();
cout << "item3 = "; item3.display();
if (item1 >= item2)
cout << "item1 is >= item2\n";
else
cout << "item1 is not >= item2\n";
if (item1 >= item3)
cout << "item1 is >= item3\n";
else
cout << "item1 is not >= item3\n";
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// operator > overloaded for CItem class objects
// returns true if weight of i1 is > that of i2
// else returns false
////////////////////////////////////////////////////
bool CItem::operator > (const CItem &i2)
{
return (this->m_weight > i2.m_weight);
// return !(*this <= i2);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorGreaterThan
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorGreaterThan(void)
{
cout << "Test operator >\n";
cout << "===============\n";
for (int i=1; i<=5; i++)
{
CItem item1('r'), item2('r'), item3('r');
cout << "item1 = "; item1.display();
cout << "item2 = "; item2.display();
cout << "item3 = "; item3.display();
if (item1 > item2)
cout << "item1 is > item2\n";
else
cout << "item1 is not > item2\n";
if (item1 > item3)
cout << "item1 is > item3\n";
else
cout << "item1 is not > item3\n";
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// operator <= overloaded for CItem class objects
// returns true if weight of i1 is <= that of i2
// else returns false
////////////////////////////////////////////////////
bool CItem::operator <= (const CItem &i2)
{
return (this->m_weight <= i2.m_weight);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorLessThanOrEqual
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorLessThanOrEqual(void)
{
cout << "Test operator <=\n";
cout << "================\n";
for (int i=1; i<=5; i++)
{
CItem item1('r'), item2('r'), item3('r');
cout << "item1 = "; item1.display();
cout << "item2 = "; item2.display();
cout << "item3 = "; item3.display();
if (item1 <= item2)
cout << "item1 is <= item2\n";
else
cout << "item1 is not <= item2\n";
if (item1 <= item3)
cout << "item1 is <= item3\n";
else
cout << "item1 is not <= item3\n";
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// operator < overloaded for CItem class objects
// returns true if weight of i1 is less than that of i2
// else returns false
////////////////////////////////////////////////////
bool CItem::operator < (const CItem &i2)
{
return (this->m_weight < i2.m_weight);
/*
if (this->m_weight < i2.m_weight)
return true;
else
return false;
*/
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorLessThan
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorLessThan(void)
{
cout << "Test operator <\n";
cout << "===============\n";
for (int i=1; i<=5; i++)
{
CItem item1('r'), item2('r'), item3('r');
cout << "item1 = "; item1.display();
cout << "item2 = "; item2.display();
cout << "item3 = "; item3.display();
if (item1 < item2)
cout << "item1 is lighter than item2\n";
else
cout << "item1 is not lighter than item2\n";
if (item1 < item3)
cout << "item1 is lighter than item3\n";
else
cout << "item1 is not lighter than item3\n";
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// getWeight
// returns the weight
////////////////////////////////////////////////////
int CItem::getWeight(void)
{
return this->m_weight;
};
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testGetWeight
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testGetWeight(void)
{
cout << "test getWeight\n";
for (int i=1; i<=5; i++)
{
CItem i('r');
cout << "item = "; i.display();
cout << "weight = " << i.getWeight() << endl;
cout << "-----------------------------\n";
}
}
////////////////////////////////////////////////////
// getName
// returns the name
////////////////////////////////////////////////////
char * CItem::getName(void)
{
return this->m_name;
};
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testGetName
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testGetName(void)
{
cout << "test getName\n";
for (int i=1; i<=5; i++)
{
CItem i('r');
cout << "item = "; i.display();
cout << "name = " << i.getName() << endl;
cout << "-----------------------------\n";
}
}
////////////////////////////////////////////////////
// operator ==
// compares two items for equality
////////////////////////////////////////////////////
bool operator ==(const CItem &i1, const CItem &i2)
{
//return (c1&&c2);
if (i1.m_weight != i2.m_weight)
return false;
if (strcmp(i1.m_name, i2.m_name) != 0)
return false;
return true;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testOperatorEqual
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testOperatorEqual(void)
{
cout << "Test operator equal\n";
cout << "===================\n";
for (int i=1; i<=5; i++)
{
CItem item1('r'), item2('r'), item3(item1);
cout << "item1 = "; item1.display();
cout << "item2 = "; item2.display();
cout << "item3 = "; item3.display();
if (item1 == item2)
cout << "item1 is equal to item2\n";
else
cout << "item1 is not equal to item2\n";
if (item1 == item3)
cout << "item1 is equal to item3\n";
else
cout << "item1 is not equal to item3\n";
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// setWeight(int weight)
// sets the m_weight data member to weight
////////////////////////////////////////////////////
void CItem::setWeight(int weight)
{
this->m_weight = weight;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testSetWeight
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testSetWeight(void)
{
cout << "Test setWeight(weight)\n";
for (int i=1; i<=5; i++)
{
CItem item('r');
item.display();
int tWeight = rand()%100;
cout << "tWeight = " << tWeight << endl;
item.setWeight(tWeight);
cout << "After item1.setWeight(tWeight);\n";
item.display();
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
// setName(char name)
// sets the m_name data member to name
////////////////////////////////////////////////////
void CItem::setName(char name[])
{
strcpy(this->m_name, name);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testSetName
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testSetName(void)
{
cout << "Test setName(name)\n";
for (int i=1; i<=5; i++)
{
CItem item('r');
item.display();
int i = rand()%MAX_NAMES;
char tName[MAX_LEN+1];
strcpy(tName, testNames[i]);
cout << "tName = \"" << tName << "\"" << endl;
item.setName(tName);
cout << "After item1.setName(tName);\n";
item.display();
cout << "---------------------------\n";
}
}
////////////////////////////////////////////////////
//CItem (item) copy constructor
// constructs an object which is a copy given object
////////////////////////////////////////////////////
CItem::CItem(const CItem &item)
{
strcpy(this->m_name, item.m_name);
this->m_weight = item.m_weight;
//(*this).m_weight = item.m_weight;
//cout << "copy constructor called\n";
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testConstructorCopy
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testConstructorCopy(void)
{
cout << "Test copy Constructor\n";
for (int i=1; i<=5; i++)
{
CItem item1('r');
CItem item2(item1);
item1.display();
item2.display();
}
}
////////////////////////////////////////////////////
//CItem (ch) constructor
// constructs an object with random name and weight
////////////////////////////////////////////////////
CItem::CItem(char ch)
{
if ('r' == ch )
{
int i = rand()%MAX_NAMES;
strcpy(this->m_name, testNames[i]);
this->m_weight = testWeights[i];
}
else
{
strcpy(this->m_name, "");
this->m_weight = -99;
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testConstructorCh
//++++++++++++++++++++++++++++++++++++++++++++++++++
void testConstructorCh(void)
{
cout << "Test ConstructorCh\n";
CItem item1('r');
CItem item2('m');
item1.display();
item2.display();
}
////////////////////////////////////////////////////
//CItem (name, weight) constructor
// constructs an object with given name and weight
////////////////////////////////////////////////////
CItem::CItem(char name[], int weight)
{
strcpy(this->m_name, name);
this->m_weight = weight;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testConstructor
//31++++++++++++++++++++++++++++++++++++++++++++++++
void testConstructor(void)
{
cout << "Test Constructor(name, weight)\n";
CItem item("Chair", 150);
item.display();
}
////////////////////////////////////////////////////
// display
////////////////////////////////////////////////////
void CItem::display(void) const
{
cout << '[' << this->m_name << ", ";
cout << this->m_weight << ']' << endl;
}
////////////////////////////////////////////////////
//constructor default
////////////////////////////////////////////////////
CItem::CItem(void)
{
//cout << "Default Constructor called\n";
strcpy(this->m_name, "");
this->m_weight = -99;
}
////////////////////////////////////////////////////
//input function
// This is a member function for CItem class
// it gets the name and weight from the keyboard
// and sets the values of name and weight data members
////////////////////////////////////////////////////
void CItem::input(void)
{
cout << "item m_name: ";
cin >> this->m_name;
cout << "item m_weight: ";
cin >> this->m_weight;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testInput
//31++++++++++++++++++++++++++++++++++++++++++++++++
void testInput(void)
{
cout << "test input function\n";
CItem item1;
item1.display();
item1.input();
item1.display();
}
////////////////////////////////////////////////////
// set(name, weight)
////////////////////////////////////////////////////
void CItem::set(char name[], int weight)
{
strcpy(this->m_name, name);
this->m_weight = weight;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++
// testSet
//31++++++++++++++++++++++++++++++++++++++++++++++++
void testSet(void)
{
cout << "Test set(name, weight)\n";
for (int i=1; i<=5; i++)
{
CItem item('r');
item.display();
int i = rand()%MAX_NAMES;
char tName[MAX_LEN+1];
strcpy(tName, testNames[i]);
cout << "tName = \"" << tName << "\"" << endl;
int tWeight = rand()%100;
cout << "tWeight = " << tWeight << endl;
item.set(tName, tWeight);
cout << "After item.set(tName, tWeight);\n";
item.display();
cout << "------------------------------------\n";
}
}
|