|
//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); } */ |