×
Samples Blogs Make Payment About Us Reviews 4.9/5 Order Now

Program To Create Various Classes Using Concepts of Inheritance in C++ Assignment Solution

July 08, 2024
Dr. Benjamin Hughes
Dr. Benjamin
🇬🇧 United Kingdom
C++
Dr. Benjamin Hughes holds a Ph.D. in Computer Science from the University of Cambridge and has over 10 years of experience in software development and programming education. With expertise in Templated Linked Lists, he has completed over 800 assignments with precision and efficiency, helping students across the globe excel in their programming coursework.
Key Topics
  • Instructions
  • Requirements and Specifications
Tip of the day
Familiarize yourself with OCaml's pattern matching; it simplifies handling recursive data structures like lists and trees, making your code concise and easier to debug.
News
In 2024, Girls Who Code introduced a Data Science + AI track in their free summer programs for high school students, fostering skills in cybersecurity and creative coding​

Instructions

Objective

Write a program to create various classes using concepts of inheritance in C++ language.

Requirements and Specifications

Description

This goal of this project is to build an information manager similar to a rolodex (see http://en.wikipedia.org/wiki/Rolodex). A physical rolodex is made up of cards arranged in alphabetical order by [Last Name, First Name]. Each card contains some information, usually name, address, phone number and type of business (why the person is in the rolodex). The physical mechanism of using a rolodex is turning the group of cards and flipping through them. When the last card is read, the rolodex is then at the start of the list since a rolodex is built on a circular track.

Design Notes

For this project you'll implement a Card class (in Card.h and Card.cpp), a Rolodex class (in Rolodex.h and Rolodex.cpp), and a main() function (in main.cpp). The code in main() reads interactive commands that perform actions on its Rolodex object (like add a card, search for a card, list the rolodex cards, etc).

The Card class is used to represent a single Rolodex card. This class has std::string data members for First name, Last name, Occupation, Address (entire address can be in one string), and Phone number. It has get/set member functions to allow getting and setting of the member data values (e.g. first name), and a show(ostream& os) function that knows how to display the card on the supplied ostream parameter. This class does not know about Rolodex functionality, it just encapsulates a single card's information.

Source Code

CARD #include "Card.h" using namespace std; Card::Card() { firstName = '\0'; lastName = '\0'; Address = '\0'; Occupation = '\0'; mPhone = '\0'; } Card::Card( string first, string last, string occ, string add, string phone ) { firstName = first; lastName = last; Occupation = occ; Address = add; mPhone = phone; } void Card::setLast(const string last) { lastName = last; } string Card::getLast() { return lastName; } void Card::setFirst(const string first) { firstName = first; } string Card::getFirst() { return firstName; } void Card::setOcc(const string occup) { Occupation = occup; } string Card::getOcc() { return Occupation; } void Card::setAddress(const string add) { Address = add; } string Card::getAddress() { return Address; } void Card::setPhone(const string phone) { mPhone = phone; } string Card::getPhone() { return mPhone; } void Card::show(ostream& os) { os << "\nName: " << getLast() << ", " << getFirst() << "\nOccupation: " << getOcc() << "\nAddress: " << getAddress() << "\nPhone Number: " << getPhone() << endl; } RODEX #include "Rolodex.h" #include "Card.h" #include #include #include using namespace std; bool compare( Card first, Card second ) { if (first.getLast() != second.getLast()) { return first.getLast() < second.getLast(); } return first.getFirst() <= second.getFirst(); } bool matches(string who, Card card) { stringstream s(who); string s1; string s2; s >> s1; if (s >> s2) { // cout << "!" << s1 << "!" << s2 << "!" << endl; // cout << "!" << card.getFirst() << "!" << card.getLast() << "!" << endl; return card.getLast() == s2 && card.getFirst() == s1; } else { return card.getLast() == s1; } } void Rolodex::cardAdd(Card obj) { int n = rolo.size();

for (int i = 0;i Card front = rolo.front(); Card back = rolo.back(); if (compare(front, back)) { break; } rolo.pop_front(); rolo.push_back(front); }

for (int i = 0;i Card front = rolo.front(); if (compare(obj, front)) { break; } rolo.pop_front(); rolo.push_back(front); } rolo.push_front(obj); } Card Rolodex::cardRemove() { Card temp = rolo.front(); rolo.pop_front(); return temp; } Card Rolodex::getCurrentCard() { return rolo.front(); } Card Rolodex::flip() { Card front = rolo.front(); rolo.pop_front(); rolo.push_back(front); return rolo.front(); } bool Rolodex::search(string who) { int n = rolo.size();

for (int i = 0; i Card front = rolo.front(); if (matches(who, front)) { return true; } rolo.pop_front(); rolo.push_back(front); } cout << "Name not found: " << who << endl << endl; return false; // list< Card >::iterator tempit = roloit; // roloit = rolo.begin(); // while ( roloit != rolo.end() ) // { // if ( (roloit->getLast()).compare(who) ) // return true; // else // roloit++; // } // for ( roloit = rolo.begin(); roloit != rolo.end(); roloit++ ) // for ( i = 0; tolower(roloit->getLast()[0]) > tolower(who[0]); i++ ) // if ( tolower(roloit->getLast()[i]) < tolower(who[i])) // break; // else if (roloit->getLast()[i] == who[i]); // else if (roloit->getLast()[i] > who[i] && !roloit->getLast()[0] ) // return true; // cout << "Name not found: " << who << endl << endl; // return false; } void Rolodex::show(ostream& os) { int n = rolo.size(); for (list< Card >::iterator it = rolo.begin(); it != rolo.end(); it++) { it->show(os); } } MAIN #include "Card.h" #include "Rolodex.h" #include #include using namespace std; void search(Rolodex& temp) { string who; cout << "\nEnter the last name of the person you are looking for: "; getline(cin, who); if (temp.search(who)) { temp.getCurrentCard().show(cout); } } void add(Rolodex& temp) { string first; cout << "Please enter First Name: "; getline(cin, first); string last; cout << "Please enter Last Name: "; getline(cin, last); string occ; cout << "Please enter Occupation: "; getline(cin, occ); string add; cout << "Please enter Address: "; getline(cin, add); string phone; cout << "Please enter Phone: "; getline(cin, phone); temp.cardAdd(Card(first, last, occ, add, phone)); } char showMenu() { string line; while (true) { cout << "Please, choose on of the options:" << endl; cout << "List (L)" << endl; cout << "View (V)" << endl; cout << "Flip (F)" << endl; cout << "Add (A)" << endl; cout << "Remove (R)" << endl; cout << "Search (S)" << endl; cout << "Quit the program (Q)" << endl; getline(cin, line); char choice = toupper(line[0]); if (choice == 'L') { return 'L'; } else if (choice == 'V') { return 'V'; } else if (choice == 'F') { return 'F'; } else if (choice == 'A') { return 'A'; } else if (choice == 'R') { return 'R'; } else if (choice == 'S') { return 'S'; } else if (choice == 'Q') { return 'Q'; } else { cout << "Invalid input. Please, try again" << endl; cout << endl; } } } int main(void) { Rolodex mainrolo; int i; Card card[10]; card[0].setFirst("Tony"); card[0].setLast("Hansen"); card[0].setAddress("12 E. St.\nNY, NY 33333"); card[0].setOcc("Writer"); card[0].setPhone("555-9999"); card[1].setFirst("Jon"); card[1].setLast("Smyth"); card[1].setAddress("CMU Computer Services Pittsburg, PA"); card[1].setOcc("Computer Hardware"); card[1].setPhone("555-1324"); card[2].setFirst("Alonza"); card[2].setLast("Heard"); card[2].setAddress("123 Anyplace Ave\nMalden, MA"); card[2].setOcc("Mechanic"); card[2].setPhone("555-5678"); card[3].setFirst("Jen"); card[3].setLast("Reyes"); card[3].setAddress("325 Oak Rd\nWilmington, MA"); card[3].setOcc("Graphic Artist"); card[3].setPhone("555-4950"); card[4].setFirst("Alan"); card[4].setLast("Lupine"); card[4].setAddress("1 Bigelow Ave.\nLawrence, MA"); card[4].setOcc("Vet"); card[4].setPhone("555-7654"); card[5].setFirst("Jewel"); card[5].setLast("Proverb"); card[5].setAddress("34 Washington St.\nWaltham, MA"); card[5].setOcc("Landscaper"); card[5].setPhone("555-3333"); card[6].setFirst("Paul"); card[6].setLast("Revere"); card[6].setAddress("45 Commonwealth Ave.\nBoston, MA"); card[6].setOcc("Radical Revolutionary"); card[6].setPhone("555-1776"); card[7].setFirst("Adolf"); card[7].setLast("Coors"); card[7].setAddress("Boston, MA"); card[7].setOcc("Beer Manufacturer"); card[7].setPhone("555-2337"); card[8].setFirst("Seymour"); card[8].setLast("Papert"); card[8].setAddress("MIT"); card[8].setOcc("Lego Professor"); card[8].setPhone("555-1111"); card[9].setFirst("Fred"); card[9].setLast("Milton"); card[9].setAddress("12 Freedom Way\nNashua, NH"); card[9].setOcc("Sales"); card[9].setPhone("555-9981"); for ( i = 0; i < 10; i++ ) mainrolo.cardAdd(card[i]); bool isOver = false; while (!isOver) { switch(showMenu()) { case 'L': mainrolo.show(cout); break; case 'V': mainrolo.getCurrentCard().show(cout); break; case 'F': mainrolo.flip().show(cout); break; case 'A': add(mainrolo); break; case 'R': mainrolo.cardRemove(); break; case 'S': search(mainrolo); break; case 'Q': isOver = true; break; } cout << endl; } cout << "Good Bye!" << endl; return 0; }

Related Samples

Explore our repository of free C++ assignment samples crafted to aid your learning process. These samples offer detailed solutions and insights, enhancing your understanding of complex programming concepts.