Node和LIst的定义与实现基本不改变,上篇已经详细给出,这里仅仅将部分改变的内容粘贴出来,要想完整实现通信录还需要把Node.h、Node.cpp、List.h、List.cpp补充完整,也可发挥自己创造实现一些新的东西。
Node.h 这里只是数据类型发生了变化
#ifndef NODE_H
#define NODE_H
#include"Person.h"
class Node
{
public:
//int data; //现在是Person类型,这里int注释掉
Person data;
Node *next;
void printNode();
};
#endif
Node.cpp见上篇,没什么改变
List.cpp 也只是由于数据类型发生变化所以赋值操作需要注释掉重载,其他的均不改变
#include<iostream>
#include"List.h"
using namespace std;
List::List()
{
m_pList = new Node;
//m_pList->data = 0; //现在是Person类型,需要赋值运算符重载
m_pList->next = NULL;
m_iLength = 0;
}
Person.h
#ifndef PERSON_H
#define PERSON_H
#include<string>
#include<ostream>
using namespace std;
class Person
{
friend ostream &operator<<(ostream &out, Person &person);
public:
string name;
string phone;
//赋值运算符重载
Person&operator=(Person &person);
//判等运算符重载
bool operator==(Person &person);
};
#endif
Person.cpp
#include"Person.h"
#include<iostream>
using namespace std;
ostream &operator<<(ostream &out, Person &person)
{
out << person.name << "-------" << person.phone << endl;
return out;
}
//赋值运算符重载
Person &Person::operator = (Person &person)
{
this->name = person.name;
this->phone = person.phone;
return *this;
}
//判等运算符重载
bool Person::operator==(Person &person)
{
if (this->name == person.name && this->phone == person.phone)
{
return true;
}
}
main.cpp
#include<iostream>
#include"List.h"
using namespace std;
//菜单函数
int menu()
{
//显示菜单
cout << "功能菜单" << endl;
cout << "1.新建联系人" << endl;
cout << "2.删除联系人" << endl;
cout << "3.浏览通信录" << endl;
cout << "4.退出通信录" << endl;
cout << "请输入:";
int order = 0;
cin >> order;
return order;
}
//新建联系人
void createPerson(List* pList)
{
Node node;
cout << "请输入姓名:";
cin >> node.data.name;
cout << "请输入电话:";
cin >> node.data.phone;
//两种方式都可以
/*Person person;
cout << "请输入姓名:";
cin >> person.name;
cout << "请输入电话:";
cin >> person.phone;
node.data = person;*/
pList->ListInsertTail(&node);
}
//删除联系人
void deletePerson(List* pList)
{
Node node;
int i = 0;
cout << "请输入所要删除联系人编号:";
cin >> i;
cout << "已经删除第" << i << "个联系人!" << endl;
pList->ListDelete(i-1, &node);
cout << "删除联系的姓名是:" << node.data.name << endl;
cout << "删除联系的电话是:" << node.data.phone << endl;
}
int main(void)
{
int userOder = 0;
List *pList = new List();
while (userOder!=4)
{
userOder = menu();
switch (userOder)
{
case 1:
cout << "用户指令---->>新建联系人:" << endl;
createPerson(pList);
break;
case 2:
cout << "用户指令---->>删除联系人:" << endl;
deletePerson(pList);
break;
case 3:
cout << "用户指令---->>浏览通信录:" << endl;
pList->ListTraverse();
break;
case 4:
cout << "用户指令---->>退出通信录:" << endl;
break;
default:
break;
}
}
delete pList;
pList = NULL;
return 0;
}