Question: #include name.h #include contact.h using namespace std; class ContactList; typedef class Node* NodePtr; class Node { Contact item; NodePtr next; friend class ContactList; }; class

#include "name.h"

#include "contact.h"

using namespace std;

class ContactList;

typedef class Node* NodePtr;

class Node

{

Contact item;

NodePtr next;

friend class ContactList;

};

class ContactList

{

public:

ContactList(char* clfile) ;

~ContactList();

void display (ostream & output) const;

int insert (Contact record_to_insert);

int insert (ContactList contact_list);

int remove (Contact record_to_delete);

int size () const;

int save () const;

void find_by_lname (ostream & output, string lname) const;

void find_by_fname (ostream & output, string fname) const;

void find (ostream & output, Contact record_to_find ) const;

int make_empty ();

private:

NodePtr head;

int num_items;

char clfile_pathname[512];

bool find( Contact item, NodePtr & where );

bool insert_at( NodePtr & prev, Contact new_item );

};

#include

#include

#include

#include "contactlist.h"

using namespace std;

bool ContactList::insert_at( NodePtr & prev, Contact new_item )

{

NodePtr tmpPtr = new Node;

if ( tmpPtr == NULL )

return false;

tmpPtr->item = new_item;

tmpPtr->next = prev;

prev = tmpPtr;

return true;

}

ContactList::ContactList(char* clfile)

{

ifstream fin;

char line[512];

Contact temp;

num_items = 0;

head = NULL;

strcpy(clfile_pathname, clfile);

fin.open(clfile);

if ( fin.fail()) {

throw "error";

}

while ( !fin.eof() ) {

fin.getline(line, 511);

if ( fin.bad() )

throw "error";

else if ( 0 == temp.set(line) )

continue;

else {

insert(temp);

}

}

}

ContactList::~ContactList()

{

make_empty();

}

void ContactList::find_by_lname (ostream & output,string lname) const

{

NodePtr current;

Name tempname;

if ( NULL == head )

return;

current = head;

while ( current != NULL ) {

current->item.get_name(tempname);

if ( tempname.last() < lname ) {

current = current->next;

}

else if ( tempname.last() > lname ) {

return;

}

else {

output << current->item;

current = current->next;

}

}

}

void ContactList::find_by_fname (ostream & output, string fname) const

{

NodePtr current;

Name tempname;

if ( NULL == head )

return;

current = head;

while ( current != NULL ) {

current->item.get_name(tempname);

if ( tempname.first() != fname ) {

current = current->next;

}

else {

output << current->item;

current = current->next;

}

}

}

void ContactList::find (ostream & output, Contact record_to_find ) const

{

NodePtr current;

if ( NULL != head ) { current = head;

while ( current != NULL && !(current->item > record_to_find)) {

if ( match(current->item, record_to_find) ) {

output << current->item << " ";

}

current = current->next;

}

}

}

int ContactList::remove( Contact item )

{

NodePtr current;

NodePtr prev;

int count = 0;

if ( NULL != head ) {

current = head;

prev = NULL;

while ( current != NULL ) {

if ( match(current->item, item) ) {

if ( NULL == prev ) {

head = current->next;

current->next = NULL;

delete current;

current = head;

count++;

}

else {

current = current->next;

prev->next->next = NULL;

delete prev->next;

prev->next = current;

count++;

}

}

else {

prev = current;

current = current->next;

}

}

}

num_items -= count;

return count;

}

int ContactList::insert( Contact new_item)

{

NodePtr current, previous;

bool success = false;

if ( NULL == head || head->item > new_item ) {

success = insert_at( head, new_item);

if (success)

num_items++;

return 1;

}

if ( head->item == new_item )

return 0;

previous = head;

current = head->next;

while ( current != NULL && !success ) {

if ( current->item < new_item ) {

previous = current;

current = current->next;

}

else if ( current->item > new_item ) {

if ( (success = insert_at(previous->next, new_item)) )

num_items++;

return 1;

}

else

return 0;

}

if ( (success = insert_at(previous->next, new_item)) )

num_items++;

return 1;

}

int ContactList::insert (ContactList contact_list)

{

NodePtr current = contact_list.head;

int count = 0;

while ( current != NULL ) { count += insert(current->item);

current = current->next;

}

return count;

}

void ContactList::display ( ostream & output) const

{

NodePtr current = head;

while ( current != NULL) {

cout << current->item << " ";

current = current->next;

}

}

int ContactList::size() const

{

return num_items;

}

int ContactList::make_empty()

{

NodePtr temp_ptr;

for ( int i = 1; i <= num_items; i++){

temp_ptr = head;

head = head->next;

temp_ptr->next = NULL;

delete temp_ptr;

}

return 1;

}

int ContactList::save() const

{

ofstream fout;

char backupfile[512];

char syscmmd[256];

int count = 0;

sprintf(backupfile, "%s.%s", clfile_pathname,"bkp");

sprintf(syscmmd, "mv -f %s %s", clfile_pathname, backupfile );

if ( system (syscmmd ) < 0 )

return -1;

fout.open(clfile_pathname);

if ( fout.fail() )

return -2;

NodePtr current = head;

while ( current != NULL) {

fout << current->item.convert2csv() << " ";

current = current->next;

count++;

}

fout.close();

return count;

} ------------------------------

1.Put the letters of the true statements on the answersheet with the reason. (a) The ContactList is a linked list data structure. (b) The ContactList is maintained in sorted order, by last name only. (c) The ContactList is not in sorted order. (d) The ContactList is in sorted order using the last name as a first key and the first name as a second key.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!