数据冒险之单链表(简易通信录)

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值