//p03books04
//author
//date 07/10/2001
//date 07/09/2001
//date 07/06/2001
//date 07/05/2001
// Project #3
// 07/10/2001 to 07/12/2001
// add member function sortBubbleByTitle (learn and use strcmp)
// add function shuffle
// at least 10 records
//
/*
do the following five times
//for (int i=1; i<=5; i++)
// {
Populate books with 10 random records // CBooks bc(10);
display with message "Original" // cout << "Original\n";
// bc.display();
sortBubbleByTitle // bc.sortBubbleByTitle();
display with message "Sorted by Title"// cout << "Sorted\n";
// bc.display();
shuffle // bc.shuffle();
display with message "After shuffling"// cout << "Shuffled\n";
// bc.display();
}
*/
// Project #2
//
// add function sortBubbleByTitle (learn and use strcmp)
// add function shuffle
// at least 10 records
//
/*
do the following five times
Populate books with 10 random records
display with message "Original"
sortBubbleByTitle
display with message "Sorted by Title"
shuffle
display with message "After shuffling"
*/
//////////////////////////////////////////////////////////////////////
//include files
//////////////////////////////////////////////////////////////////////
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
//////////////////////////////////////////////////////////////////////
//constants
//////////////////////////////////////////////////////////////////////
const int TITLE_LEN = 30;
const int AUTHOR_LEN = 30;
const int MAX_BOOKS = 15;
//////////////////////////////////////////////////////////////////////
//test values
//////////////////////////////////////////////////////////////////////
const char *testTitles[] =
{
"C++ with Pizza Flavor", "Java Learn Now", "COBOL How To Forget",
"FORTRAN 77", "DB2: An Introduction", "XML In 24 Hours",
"UNIX"
};
const int MAX_TITLES = sizeof(testTitles)/sizeof(testTitles[0]);
const char *testAuthors[] =
{
"John", "Adam", "Sumeer", "Natalie", "David", "Rustin"
};
const int MAX_AUTHORS = sizeof(testAuthors)/sizeof(testAuthors[0]);
const int testYears[] = {1977, 1988, 1989, 1991, 2000, 2001};
const int MAX_YEARS = sizeof(testYears)/sizeof(testYears[0]);
//////////////////////////////////////////////////////////////////////
//BookType class definition
//////////////////////////////////////////////////////////////////////
class CBook
{
private:
char title[TITLE_LEN+1];
char author[AUTHOR_LEN+1];
int year;
public:
CBook(void);
CBook(char t[], char a[], int y);
CBook(char ch);
void display(void) const;
void copy(const CBook &b2);
void swap(CBook &b2);
friend class CBooks;
};
/*
//BookType struct definition
struct BookType
{
char title[TITLE_LEN+1];
char author[AUTHOR_LEN+1];
int year;
};
*/
//////////////////////////////////////////////////////////////////////
//class CBooks
//////////////////////////////////////////////////////////////////////
class CBooks
{
private:
CBook books[MAX_BOOKS];
int count;
public:
CBooks(void);
CBooks(int n);
void display(void) const;
void displayRev(void) const;
void sortBubbleByYear(void);
};
/*
void display(BookType b);
void initialize(BookType &b, char t[], char a[], int y);
void input(BookType &b);
void copy(BookType &b1, BookType b2);
void display(BookType books[], int n);
void displayRev(BookType books[], int n);
void sortBubbleByYear(BookType books[], int n);
void populate(BookType books[], int n); //07/06/2001
void swap(BookType &b1, BookType &b2);
*/
//////////////////////////////////////////////////////////////////////
//main function
//////////////////////////////////////////////////////////////////////
void main(void)
{
srand(time(NULL));
//CBook b1;
//CBook b2("C++ in 10 Days", "John Smith", 2001);
//b1.display();
//b2.display();
//CBook b3('i');
//b3.display();
//b1.copy(b2);
//b1.display();
//b1.swap(b2);
//b1.display();
//b2.display();
//CBook b2[5];
CBooks bc(5);
cout << "Original\n";
bc.display();
bc.sortBubbleByYear();
cout << "Sorted\n";
bc.display();
}
/*
///main function
void main(void)
{
BookType b1, b2;
initialize(b1, "C++ The Hard Way", "Fowler", 2002);
display(b1);
copy(b2, b1);
display(b2);
srand(time(NULL));
BookType books[10];
populate(books, 5);
display(books, 5);
cout << "After sort\n";
sortBubbleByYear(books, 5);
display(books, 5);
}
*/
//////////////////////////////////////////////////////////////////////
//constructor CBooks()
//////////////////////////////////////////////////////////////////////
CBooks::CBooks(void)
{
count = 0;
/* don't need this (initialized by CBook())
for (int i=0; i<MAX_BOOKS; i++)
{
//strcpy(books[i].author, "-1");
//strcpy(books[i].title, "-1");
//books[i].year = -1;
}
*/
}
//////////////////////////////////////////////////////////////////////
//constructor CBooks(n)
//////////////////////////////////////////////////////////////////////
CBooks::CBooks(int n)
{
count = n;
for (int i=0; i<n; i++)
{
//get a random title
strcpy(books[i].title, testTitles[rand()%MAX_TITLES]);
//get a random author
strcpy(books[i].author, testAuthors[rand()%MAX_AUTHORS]);
//get a random year
books[i].year = testYears[rand()%MAX_YEARS];
}
}
/*
//function to populate array books[] with n records
void populate(BookType books[], int n) //07/06/2001
{
for (int i=0; i<n; i++)
{
//get a random title
strcpy(books[i].title, testTitles[rand()%MAX_TITLES]);
//get a random author
strcpy(books[i].author, testAuthors[rand()%MAX_AUTHORS]);
//get a random year
books[i].year = testYears[rand()%MAX_YEARS];
}
}
*/
//////////////////////////////////////////////////////////////////////
//function to display the contents of BookType variable
//////////////////////////////////////////////////////////////////////
void CBook::display(void) const
{
cout << title ;
cout << ", " << author;
cout << ", " << year << endl;
}
/*
//function to display the contents of BookType variable
void display(BookType b)
{
cout << "Title: " << b.title << endl;
cout << "Author: " << b.author << endl;
cout << "Year: " << b.year << endl;
}
*/
//////////////////////////////////////////////////////////////////////
//display()
//////////////////////////////////////////////////////////////////////
void CBooks::display(void) const
{
for (int i=0; i<count; i++)
{
cout << i << ':';
books[i].display();
}
}
/*
//function to display the contents of BookType array
void display(BookType books[], int n)
{
for (int i=0; i<=n-1; i++)
display(books[i]);
}
*/
//////////////////////////////////////////////////////////////////////
//displayRev()
//////////////////////////////////////////////////////////////////////
void CBooks::displayRev(void) const
{
for (int i=count-1; i>=0; i--)
{
cout << i << ':';
books[i].display();
}
}
/*
//function to display the contents of BookType array
void displayRev(BookType books[], int n)
{
for (int i=n-1; i>=0; i--)
display(books[i]);
}
*/
//////////////////////////////////////////////////////////////////////
//function to initialize the contents of CBook variable
//////////////////////////////////////////////////////////////////////
CBook::CBook(char t[], char a[], int y)
{
strcpy((*this).title, t);
strcpy(this->author, a);
year = y;
}
//////////////////////////////////////////////////////////////////////
//function to initialize the contents of CBook variable
//////////////////////////////////////////////////////////////////////
CBook::CBook(void)
{
strcpy((*this).title, "-1");
strcpy(this->author, "-1");
year = -1;
}
/*
//function to initialize the contents of BookType variable
void initialize(BookType &b, char t[], char a[], int y)
{
strcpy(b.title, t);
strcpy(b.author, a);
b.year = y;
}
*/
//////////////////////////////////////////////////////////////////////
//function to input the contents of BookType variable
//////////////////////////////////////////////////////////////////////
CBook::CBook(char ch)
{
if ('i' == ch)
{
cout << "Title: "; cin >> title;
cout << "Author: "; cin >> author;
cout << "Year: "; cin >> year;
}
}
/*
//function to input the contents of BookType variable
void input(BookType &b)
{
cout << "Title: "; cin >> b.title;
cout << "Author: "; cin >> b.author;
cout << "Year: "; cin >> b.year;
}
*/
//////////////////////////////////////////////////////////////////////
//function to copy b2 to self/me
//////////////////////////////////////////////////////////////////////
void CBook::copy(const CBook &b2)
{
strcpy(author, b2.author);
strcpy(title, b2.title);
year = b2.year;
}
/*
//function to copy b2 to b1
void copy(BookType &b1, BookType b2)
{
strcpy(b1.author, b2.author);
strcpy(b1.title, b2.title);
b1.year = b2.year;
}
*/
//////////////////////////////////////////////////////////////////////
//sortBubbleByYear()
//////////////////////////////////////////////////////////////////////
void CBooks::sortBubbleByYear(void)
{
bool sorted;
int i;
do
{
sorted = true;
for (i=0; i<=count-2; i++)
{
if (books[i].year > books[i+1].year)
{
// swap books[i], books[i+1]
books[i].swap(books[i+1]);
sorted = false;
}
}
}
while (!sorted);
}
//function to sort array books by title
/*
do the following
sorted = true
complete a pass (set sorted = false if swap took place)
until sorted
do the following
sorted = true
for i=0 to n-2 do the following
if books[i] > books[i+1] then
swap books[i], books[i+1]
sorted = false
end if
end for
until sorted
*/
/*
void sortBubbleByYear(BookType books[], int n)
{
bool sorted;
int i;
do
{
sorted = true;
for (i=0; i<=n-2; i++)
{
if (books[i].year > books[i+1].year)
{
// swap books[i], books[i+1]
swap(books[i], books[i+1]);
sorted = false;
}
}
}
//incorrect while (sorted);
while (!sorted); //correct
}
*/
//////////////////////////////////////////////////////////////////////
//swap(b)
//////////////////////////////////////////////////////////////////////
void CBook::swap(CBook &b2)
{
CBook temp;
temp.copy(*this);
this->copy(b2);
b2.copy(temp);
}
/*
void swap(BookType &b1, BookType &b2)
{
BookType temp;
copy(temp, b1);
copy(b1, b2);
copy(b2, temp);
}
*/
|