Note that there are some explanatory texts on larger screens.

plurals
  1. POLinked List Array – Address Book
    primarykey
    data
    text
    <p>I'am having trouble with the "Change a name" function, but I can't seem to find anything wrong with it. The other functions, I.E. adding a name or deleting a name work fine. It may be the formatting or a error in the list. Any suggestions? Note: some of the formatting may have been skewed while copied into StackOverflow from Xcode, so please keep that in mind. </p> <pre><code>#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;sstream&gt; #include &lt;string&gt; #include &lt;time.h&gt; using namespace std; class Node { public: Node(string newName) { name = newName; nextNode = NULL; } string name; string address; time_t birthday; time_t anniversary; Node *nextNode; }; Node* pHeadNode; void DrawMenu() { cout &lt;&lt; "1. Enter a new name into the address book" &lt;&lt; endl; cout &lt;&lt; "2. Delete a name from the address book" &lt;&lt; endl; cout &lt;&lt; "3. Change a name or date in the address book" &lt;&lt; endl; cout &lt;&lt; "4. Generate birthday cards" &lt;&lt; endl; cout &lt;&lt; "5. Generate anniversary cards" &lt;&lt; endl; cout &lt;&lt; "6. Exit the card program" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "You choice: "; } Node* FindName(string name) { if (pHeadNode) { Node *pCurrentNode = pHeadNode; while(pCurrentNode &amp;&amp; pCurrentNode-&gt;name!=name) { if (pCurrentNode-&gt;name==name) return pCurrentNode; pCurrentNode = pCurrentNode-&gt;nextNode; } } return NULL; } enter code heretime_t MakeTime(int year, int month, int day) { tm tm1; tm1.tm_year = year-1900; tm1.tm_mon = month; tm1.tm_mday = day; tm1.tm_hour = 0; tm1.tm_isdst = 0; tm1.tm_min = 0; tm1.tm_sec = 0; tm1.tm_wday = 0; tm1.tm_yday = 0; return mktime(&amp;tm1); } void InsertNewNode(Node* pNewNode) { if (pNewNode-&gt;name &lt; pHeadNode-&gt;name) { pNewNode-&gt;nextNode = pHeadNode; pHeadNode = pNewNode; } else { Node *pCurrentNode = pHeadNode; Node *pPrevNode = pCurrentNode; while(pCurrentNode &amp;&amp; pCurrentNode-&gt;name &lt; pNewNode-&gt;name) { pPrevNode = pCurrentNode; pCurrentNode = pCurrentNode-&gt;nextNode; } pNewNode-&gt;nextNode = pPrevNode-&gt;nextNode; pPrevNode-&gt;nextNode = pNewNode; } } void AddNewEntry() { string name; string address; time_t birthday; time_t anniversary; cout &lt;&lt; "Enter name of new Entry: "; getline(cin, name); cin.clear(); cin.sync(); getline(cin, name); if (pHeadNode) { if (FindName(name)) { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Name already exists"; cout &lt;&lt; "" &lt;&lt; endl; return; } } cout &lt;&lt; "Enter address for new Entry: "; getline(cin, address); int bday, bmonth, byear; cout &lt;&lt; "Enter (day month year) of birthday: "; cin &gt;&gt; bday &gt;&gt; bmonth &gt;&gt; byear; birthday = MakeTime(byear, bmonth, bday); int aday, amonth, ayear; cout &lt;&lt; "Enter (day month year) of anniversary: "; cin &gt;&gt; aday &gt;&gt; amonth &gt;&gt; ayear; anniversary = MakeTime(ayear, amonth, aday); if (pHeadNode) { Node* pNewNode = new Node(name); pNewNode-&gt;address = address; pNewNode-&gt;birthday = birthday; pNewNode-&gt;anniversary = anniversary; InsertNewNode(pNewNode); } else { pHeadNode = new Node(name); pHeadNode-&gt;address = address; pHeadNode-&gt;birthday = birthday; pHeadNode-&gt;anniversary = anniversary; } cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "New Entry is added" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; } void DeleteEntry() { string name; if (pHeadNode) { cin.clear(); cin.sync(); cout &lt;&lt; "Enter name of Entry you want to delete: "; getline(cin, name); Node *pCurrentNode = pHeadNode; Node *pPrevNode = pCurrentNode; while(pCurrentNode &amp;&amp; pCurrentNode-&gt;name!=name) { if (pCurrentNode-&gt;name==name) break; pCurrentNode = pCurrentNode-&gt;nextNode; } if (pCurrentNode) { if (pCurrentNode==pHeadNode) { pHeadNode = pCurrentNode-&gt;nextNode; } else { pPrevNode-&gt;nextNode = pCurrentNode-&gt;nextNode; } delete pCurrentNode; } else { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Entry is not found" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; } } else { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Address book is empty already" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; return; } } void ChangeEntry() { string name; string address; time_t birthday; time_t anniversary; if (pHeadNode) { cin.clear(); cin.sync(); cout &lt;&lt; "Enter name of Entry you want to edit: "; getline(cin, name); Node *pCurrentNode = pHeadNode; Node *pPrevNode = pCurrentNode; while(pCurrentNode &amp;&amp; pCurrentNode-&gt;name!=name) { if (pCurrentNode-&gt;name==name) break; pCurrentNode = pCurrentNode-&gt;nextNode; } if (pCurrentNode) { cin.clear(); cin.sync(); cout &lt;&lt; "Enter name of new Entry: "; getline(cin, name); if (pHeadNode) { if (FindName(name)) { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Name already exists"; cout &lt;&lt; "" &lt;&lt; endl; return; } } if (pCurrentNode==pHeadNode) { pHeadNode = pCurrentNode-&gt;nextNode; } else { pPrevNode-&gt;nextNode = pCurrentNode-&gt;nextNode; } delete pCurrentNode; cout &lt;&lt; "Enter address for new Entry: "; getline(cin, address); int bday, bmonth, byear; cout &lt;&lt; "Enter (day month year) of birthday: "; cin &gt;&gt; bday &gt;&gt; bmonth &gt;&gt; byear; birthday = MakeTime(byear, bmonth, bday); int aday, amonth, ayear; cout &lt;&lt; "Enter (day month year) of anniversary: "; cin &gt;&gt; aday &gt;&gt; amonth &gt;&gt; ayear; anniversary = MakeTime(ayear, amonth, aday); Node* pNewNode = new Node(name); pNewNode-&gt;address = address; pNewNode-&gt;birthday = birthday; pNewNode-&gt;anniversary = anniversary; InsertNewNode(pNewNode); cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Entry is changed" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; } else { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Entry is not found" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; } } else { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Address book is empty " &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; return; } } void GenerateBirthdayCards() { Node *pCurrentNode = pHeadNode; time_t t = time(NULL); tm *tm1 = localtime(&amp;t); while(pCurrentNode) { tm *ct = localtime(&amp;pCurrentNode-&gt;birthday); if (ct-&gt;tm_mon==tm1-&gt;tm_mon &amp;&amp; ct-&gt;tm_mday==tm1-&gt;tm_mday) { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Dear " &lt;&lt; pCurrentNode-&gt;name &lt;&lt; "," &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Hope your birthday is really wonderful and this coming year is the best yet!" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Love," &lt;&lt; endl; cout &lt;&lt; "Joanne" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; } pCurrentNode = pCurrentNode-&gt;nextNode; } } void GenerateAnniversaryCards() { Node *pCurrentNode = pHeadNode; time_t t = time(NULL); tm *tm1 = localtime(&amp;t); while(pCurrentNode) { tm *ct = localtime(&amp;pCurrentNode-&gt;anniversary); if (ct-&gt;tm_mon==tm1-&gt;tm_mon &amp;&amp; ct-&gt;tm_mday==tm1-&gt;tm_mday) { cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Dear " &lt;&lt; pCurrentNode-&gt;name &lt;&lt; "," &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Hope your anniversary is really wonderful and this coming year is the best yet!" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; cout &lt;&lt; "Love," &lt;&lt; endl; cout &lt;&lt; "Joanne" &lt;&lt; endl; cout &lt;&lt; "" &lt;&lt; endl; } pCurrentNode = pCurrentNode-&gt;nextNode; } } void SaveListToFile() { ofstream outfile; outfile.open("list.txt"); Node* pCurrentNode = pHeadNode; while(pCurrentNode) { Node* pNode = pCurrentNode; pCurrentNode = pCurrentNode-&gt;nextNode; outfile &lt;&lt; pNode-&gt;name &lt;&lt; endl; outfile &lt;&lt; pNode-&gt;address &lt;&lt; endl; outfile &lt;&lt; pNode-&gt;birthday &lt;&lt; endl; outfile &lt;&lt; pNode-&gt;anniversary &lt;&lt; endl; } outfile.close(); } void LoadListFromFile() { ifstream infile; infile.open("list.txt"); string name; while (getline(infile, name)) { string address; getline(infile, address); time_t birthday; time_t anniversary; string strBirthday; getline(infile, strBirthday); istringstream iss1(strBirthday); iss1 &gt;&gt; birthday; string strAnniversary; getline(infile, strAnniversary); istringstream iss2(strAnniversary); iss2 &gt;&gt; anniversary; if (!pHeadNode) { pHeadNode = new Node(name); pHeadNode-&gt;address = address; pHeadNode-&gt;birthday = birthday; pHeadNode-&gt;anniversary = anniversary; } else { Node *pCurrentNode = pHeadNode; Node *pPrevNode = pCurrentNode; while(pCurrentNode) { pPrevNode = pCurrentNode; pCurrentNode = pCurrentNode-&gt;nextNode; } pPrevNode-&gt;nextNode = new Node(name); pPrevNode-&gt;nextNode-&gt;address = address; pPrevNode-&gt;nextNode-&gt;birthday = birthday; pPrevNode-&gt;nextNode-&gt;anniversary = anniversary; } //std::istringstream iss(line); //int a, b; //if (!(iss &gt;&gt; a &gt;&gt; b)) { break; } // error // process pair (a,b) } infile.close(); } int main() { int choice; bool stop = false; LoadListFromFile(); do { do { DrawMenu(); cin &gt;&gt; choice; if (choice&lt;1 || choice&gt;6) cout &lt;&lt; "Incorrect choice. Try again" &lt;&lt; endl &lt;&lt; endl; }while(choice&lt;1 || choice&gt;6); switch(choice) { case 1: AddNewEntry(); break; case 2: DeleteEntry(); break; case 3: ChangeEntry(); break; case 4: GenerateBirthdayCards(); break; case 5: GenerateAnniversaryCards(); break; case 6: stop = true; break; default: //it's impossible, break; } }while(!stop); SaveListToFile(); Node* pCurrentNode = pHeadNode; while(pCurrentNode) { Node* pNode = pCurrentNode; pCurrentNode = pCurrentNode-&gt;nextNode; delete pNode; } return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload