So I have most of my code down the problem is when I try and add a new node to my list as seen in my main it doesn't seem to work. Ill add it but then when I try to print it nothing comes out. Also on a side not I need to be able to put in names and age and then search for like one or the other as shown in the question I have below. Can anyone give me an idea or hint or just flat up tell me how to go about doing it because I have no idea how to make a single string take first and last name and then have its own separate area for age. It boggles my mind. [Note: A lot of my gui code doesnt work cause i was just copying and pasting from other parts of my code].
Write an object oriented C++ program to create a doubly linked. Each node should be
able to store a person's first and last names, along with their respective age. Initialize the
list with 5 nodes. The program should include a member function that allows the user to
print out all the nodes whose age is less than a value input by the user (in either
direction). It should also allow the user to search for a particular person's name. It should
be able to output the lists average age. Finally it should allow for a name to be removed.
The program should allow the user to take choices from a menu.
Write an object oriented C++ program to create a doubly linked. Each node should be
able to store a person's first and last names, along with their respective age. Initialize the
list with 5 nodes. The program should include a member function that allows the user to
print out all the nodes whose age is less than a value input by the user (in either
direction). It should also allow the user to search for a particular person's name. It should
be able to output the lists average age. Finally it should allow for a name to be removed.
The program should allow the user to take choices from a menu.
#include <iostream> #include <string> using namespace std; typedef string Elem; // list element type class DNode { // doubly linked list node private: Elem elem; // node element value DNode* prev; // previous node in list DNode* next; // next node in list friend class DLinkedList; // allow DLinkedList access }; class DLinkedList { // doubly linked list public: DLinkedList(); // constructor ~DLinkedList(); // destructor bool empty() const; // is list empty? const Elem& front() const; // get front element const Elem& back() const; // get back element void addFront(const Elem& name); // add to front of list void addBack(const Elem& name); // add to back of list void removeFront(); // remove from front void removeBack(); // remove from back void displayViaAge(); void displayViaName(); private: // local type definitions DNode* header; // list sentinels DNode* trailer; protected: // local utilities void add(DNode* v, const Elem& name); // insert new node before v void remove(DNode* v); // remove node v }; DLinkedList::DLinkedList() { // constructor header = new DNode; // create sentinels trailer = new DNode; header->next = trailer; // have them point to each other trailer->prev = header; } DLinkedList::~DLinkedList() { // destructor while (!empty()) removeFront(); // remove all but sentinels delete header; // remove the sentinels delete trailer; } // insert new node before v void DLinkedList::add(DNode* v, const Elem& name) { DNode* u = new DNode; u->elem = name; // create a new node for e u->next = v; // link u in between v u->prev = v->prev; // ...and v->prev v->prev->next = v->prev = u; } void DLinkedList::addFront(const Elem& name) // add to front of list { add(header->next, name); } void DLinkedList::addBack(const Elem& name) // add to back of list { add(trailer, name); } void DLinkedList::remove(DNode* v) { // remove node v DNode* u = v->prev; // predecessor DNode* w = v->next; // successor u->next = w; // unlink v from list w->prev = u; delete v; } void DLinkedList::removeFront() // remove from font { remove(header->next); } void DLinkedList::removeBack() // remove from back { remove(trailer->prev); } bool DLinkedList::empty() const // is list empty? { return (header->next == trailer); } const Elem& DLinkedList::front() const // get front element { return header->next->elem; } const Elem& DLinkedList::back() const // get back element { return trailer->prev->elem; } void DLinkedList::displayViaAge() { //Displays person via age DNode*temp = header; while(temp!=trailer) { //if(howold = age) cout << temp->elem <<endl; temp = temp -> next; } cout << temp->elem<<endl; } int main(){ char input = 'z'; string entry; int age; DLinkedList person; person.addFront("Takkun Bradly"); person.addFront("Devindra Ardnived"); person.addFront("SeboY Wang"); person.addFront("DoubleX Slash"); person.addFront("Uncle Jelly"); cout << "What would you like to do?" << endl; cout << "Enter 'A' to: Add a new person" << endl; cout << "Enter 'B' to: Remove a person" << endl; cout << "Enter 'C' to: Search for people via age" << endl; cout << "Enter 'D' to: Search for people via name" << endl; cout << "Enter 'E' to: Average all the total ages" << endl; cout << "Enter 'F' to: Quit" << endl; while(input != 'f') { cin >> input; cout << endl; while ((input != 'a')&&(input != 'b')&&(input != 'c')&&(input != 'd')&&(input != 'e')&&(input != 'f')) { cout << "Please enter a valid selection" << endl; cin >> input; } if ((input == 'a')){ cout << "Please enter their name: "; cin.ignore(); getline(cin, entry); cout << "Please enter their age: "; cin >> age; person.addFront(entry); } if ((input == 'b')){ cout << "Who would you like to remove: "; cin.ignore(); getline(cin, entry); person.removeFront(); } if ((input == 'c')){ cout << "What is the age of the person you are looking for?: "; person.displayViaAge(); } if ((input == 'd')){ cout << "What is the name of the person you are looking for?: "; cin.ignore(); getline(cin, entry); person.addFront(entry); } if ((input == 'e')){ return 0; } cout << endl; } }