Code:
#include <iostream.h>
#include <string.h>
#include <windows.h>
class person // class of persons
{
private:
enum {SIZE=40}; // size of name buffer
char name[SIZE]; // person's name
char book[SIZE];
int age; // person's age
public:
person() {}
person(char* na, char* bk, int nu) : age(nu)
{ strcpy(name, na), strcpy(book, bk); }
char* get_name() { return name; }
char* get_book() { return book; }
int get_age() const { return age; }
void getData() // get data from keyboard
{
cout << "\n Enter name: ";
cin >> name;//cin.getline(name, SIZE);
cout << "\n Enter book: "; cin >> book;
cout << " Enter age: "; cin >> age;
cin.ignore(10, '\n');
}
void putData() const // display data on screen
{
cout << "\n Name = " << name;
cout << "\n Book = " << book;
cout << "\n Age = " << age;
}
person operator+(const person & second);
bool operator==(person&);
class Borrowb {
private:
enum {SIZE=100}; // size of array
person* arr[SIZE]; // define array
int total; // number of objects in array
public:
Borrowb() : total(0) { }
person* operator[](int) const;
void insert(person*);
person* search_name(char *); //bug
person* search_age(int);
};
person* Borrowb::operator[](int n) const
{ return arr[n]; }
void Borrowb::insert(person* data)
{
int j = 0;
// find correct place
while(j < total && data->get_age() > arr[j]->get_age() )
j++;
for(int k=total; k>j; k--) // move higher elements up
arr[k] = arr[k-1];
arr[j] = data; // insert new data
total++; // now it has one more element
}
person* Borrowb::search_age(int num_to_find)
{
for(int i = 0; i < 10; i++) {
person* ptr = arr; // get ptr to person
int num = ptr ->get_age();
if(num == num_to_find)
return ptr;
}
return NULL;
}
//this is a big bug that I can't find, why can't return it's ptr
person* Borrowb::search_name(char* name_to_find)
{
//person per1(name_to_find," ",24),per2(" "," ",25);
for(int i = 0; i < 10; i++) {
person* ptr = arr[i]; // get ptr to person
//per2.name = ptr -> get_name();
char* name = ptr ->get_name();
if(name == name_to_find)
return ptr;
}
return NULL;
}
person person::operator+(const person& second)
{
person temp;
int i = 0, j = 0;
//char* a = new char[40];
char a[40];
char b[40];
char* string3;
cout << "input first string" << endl;
cin >> a ;
cout << "input second string" << endl;
cin >> b ;
string3 = strcat(a, b);
cout << string3;
return temp;
}
bool person::operator==(person& second)
{
return(strcmp(this -> name, second.name) == 0);
}
void main(void)
{
Borrowb sa;
person* pemp;
char name[30], choice;
int num;
//search_ name, search_book, search_age
// array of persons //overloading []
person perarr[10] =
{ person("Webley", "Mfc book" , 46),
person("Suzuki", "Math book" , 67),
person("Smith", "Chinese book" ,37),
perrson("Gonzalez", "English book", 27),
person("Wong", "Computer book", 43),
person("LeMonde", "Science book", 78),
person("Weinstein", "Art book" , 14),
person("DeCarlo", "Physical book" , 22),
person("Nguyen", "Philophy book" , 39),
person("O'Grady", "Algorithm book" , 57) };
//insert ten data
for(int j=0; j<10; j++) // insert address of each
sa.insert(perarr+j); // person into SortedArray
//display ten data
for(int i=0; i<10; i++) // display data in order
{
cout << "\nperson " << (i+1);
sa[i]->putData();
}
do {
cout << "\n 'N'search_age \n 'M'search_name \n 'Q'exit " << endl;
cout << "Which is your choice?" ;
cin >> choice; choice = toupper(choice);
if (choice == 'Q') break;
switch(choice)
{
case 'N':
cout << "enter query num" << endl ; //query age
cin >> num;
pemp = sa.search_age(num);
if(pemp != NULL)
{
cout << "\nPerson with that number is";
pemp->putData();
}
else
cout << "\n No such peson name in database.";
break;
case 'M':
//query name
cout << "enter query name" << endl ; cin >> name;
pemp = sa.search_name(name);
if(pemp != NULL)
{
cout << "\nPerson with that name is";
pemp->putData();
}
else
cout << "\n No such peson name in database.";
break;
default: break;
}
}while (true);
}