利用线性表实现通讯录管理
来源:互联网 发布:软件国产化 概念 编辑:程序博客网 时间:2024/06/07 06:35
//实现通讯录的建立、增加、删除、修改、查询等功能
// 能够实现简单的菜单交互,即可以根据用户输入的命令,选择不同的操作。
#include<iostream>#include<cstring>
using namespace std;
struct DataType
{
int ID; //编号
char name[10];//姓名
char ch; //性别
char phone[13];//电话
char addr[31];//地址
DataType *prior;
DataType *next;
};
int m = 0; //全局变量,记录通讯录内数据个数
class Contacts
{
DataType *first; //定义头结点
public:
Contacts(); //建立
void Insert(); //增加
void Delete(); //删除
void Revise(); //修改
void Search(); //查找
void Show(); //浏览
void Print(DataType *p); //输出
void MENU(); //菜单
~Contacts();
};
//构造函数,建立头结点
Contacts::Contacts()
{
first = new DataType;
first->next = first->prior = first;
first->ID = 0;
}
//析构函数
Contacts::~Contacts()
{
DataType *p = first->prior;
DataType *q;
if (p == first)
delete p;
else
{
do
{
q = p;
p = p->prior;
delete q;
} while (p != first);
delete p;
}
}
//添加联系人(头插法)
void Contacts::Insert()
{
DataType *data = new DataType;
data->next = first->next;
data->prior = first;
first->next = data;
data->next->prior = data;
m++;
data->ID = m;
//录入信息
cout << "请输入联系人姓名:";
cin >> data->name; cin.sync();
flag1:cout << endl << "请输入联系人性别( M(男) or W(女) ):";
cin >> data->ch; cin.sync();
if (data->ch != 'M'&&data->ch != 'W'&&data->ch != 'm'&&data->ch != 'w')
{
cout << "输入有误!" << endl;
goto flag1;
}
cout << endl << "请输入联系人电话号码:";
cin >> data->phone; cin.sync();
cout << endl << "请输入联系人地址:";
cin >> data->addr;
cout << endl << "添加完成!" << endl;
system("pause");
system("cls");
}
//输出单个联系人信息
void Contacts::Print(DataType *p)
{
cout << "编号:" << p->ID << endl;;
cout << "姓名:" << p->name << endl;
cout << "性别:";
if (p->ch == 'm' || p->ch == 'M')
cout << "男" << endl;
else
cout << "女" << endl;
cout << "号码:" << p->phone << endl;
cout << "住址:" << p->addr << endl;
}
//查找联系人(按姓名)
void Contacts::Search()
{
cout << "请输入要查找的联系人的姓名:";
char aname[10];
cin >> aname;
DataType *p = first->next;
while (p)
{
//找到则输出信息
if (strcmp(p->name, aname) == 0)
{
Print(p);
system("pause");
system("cls");
break;
}
p = p->next;
//找不到就输出“查无此人”
if (p == first)
{
cout << "查无此人!" << endl;
system("pause");
system("cls");
break;
}
}
}
//删除联系人
void Contacts::Delete()
{
cout << "请输入要删除的联系人的姓名:";
char aname[10];
cin >> aname;
DataType *p = first->next;
while (p != first)
{
//找到该联系人后确认删除
if (strcmp(p->name, aname) == 0)
{
Print(p);
cout << "确定删除该联系人?(Y or N)" << endl;
flag2:char s;
cin >> s;
//确认则删除
if (s == 'Y' || s == 'y')
{
DataType *q = p->prior;
//之后的联系人编号减一
while (q != first)
{
q->ID = q->ID - 1;
q = q->prior;
}
//删除节点
p->next->prior = p->prior;
p->prior->next = p->next;
delete p;
m--;
cout << "删除完成!" << endl;
system("pause");
system("cls");
break;
}
//取消删除
else if (s == 'N' || s == 'n')
{
system("cls");
}
else
{
cout << "输入有误,请重新输入:";
goto flag2;
}
}
else
p = p->next;
//找不到该联系人
if (p == first)
{
cout << "查无此人!" << endl;
system("pause");
system("cls");
break;
}
}
}
//修改联系人
void Contacts::Revise()
{
cout << "请输入要修改的联系人的姓名:";
char aname[10];
cin >> aname;
DataType *p = first->next;
while (p)
{
//找到后录入新信息
if (strcmp(p->name, aname) == 0)
{
cout << "请输入联系人姓名:";
cin >> p->name; cin.sync();
flag3:cout << endl << "请输入联系人性别( M(男) or W(女)):";
cin >> p->ch; cin.sync();
if (p->ch != 'M'&&p->ch != 'W'&&p->ch != 'm'&&p->ch != 'w')
{
cout << "输入有误!" << endl;
goto flag3;
}
cout << endl << "请输入联系人电话号码:";
cin >> p->phone; cin.sync();
cout << endl << "请输入联系人地址:";
cin >> p->addr;
cout << "修改完成!" << endl;
system("pause");
system("cls");
break;
}
p = p->next;
//找不到联系人
if (p == first)
{
cout << "查无此人" << endl;
system("pause");
system("cls");
break;
}
}
}
//浏览通讯录
void Contacts::Show()
{
if (m == 0)
{
cout << "通讯录空!" << endl;
system("pause");
system("cls");
}
//循环输出联系人信息
else
{
DataType *p = first->prior;
while (p)
{
Print(p);
cout << endl;
p = p->prior;
if (p == first)
{
system("pause");
system("cls");
break;
}
}
}
}
//菜单(主界面)
void Contacts::MENU()
{
bool exitFlag = false; //退出标识符
do
{
cout << endl << endl << endl;
cout << "***********************************************************************" << endl;
cout << "* 通讯录(C++版) *" << endl;
cout << "* *" << endl;
cout << "* 1.添加联系人 *" << endl;
cout << "* 2.删除联系人 *" << endl;
cout << "* 3.修改联系人 *" << endl;
cout << "* 4.查找联系人 *" << endl;
cout << "* 5.浏览通讯录 *" << endl;
cout << "* 6.退出通讯录 *" << endl;
cout << "* *" << endl;
cout << "***********************************************************************" << endl;
cout << endl << "请输入您要完成的操作序号:";
int k;
flag4:cin >> k;
switch (k)
{
case 1:
system("cls");
Insert();
break;
case 2:
system("cls");
Delete();
break;
case 3:
system("cls");
Revise();
break;
case 4:
system("cls");
Search();
break;
case 5:
system("cls");
Show();
break;
case 6:
exitFlag = true;
break;
default:
cout << endl << "输入有误,请重新输入:";
goto flag4;
}
} while (!exitFlag);
cout << "谢谢使用!" << endl;
}
//主函数(测试)
void main()
{
Contacts MyContacts;
MyContacts.MENU();
}
0 0
- 利用线性表实现通讯录管理
- 用线性表实现的通讯录管理 C++代码
- 利用链表实现通讯录
- 单位员工通讯录管理系统(线性表的应用)
- 利用SQL实现通讯录
- 利用文件流实现通讯录
- java 实现通讯录管理系统
- 利用 双向循环链表 实现通讯录的功能
- C语言通讯录(利用链表实现)
- 利用链式存储结构实现线性表
- 数据结构课设--1单位员工通讯录管理系统(线性表的应用)
- 利用可变数组实现简单通讯录操作
- 利用结构体实现建议通讯录
- C语言通讯录(利用数组实现)
- 利用c语言结构体实现通讯录
- 【XML解析】(3)利用DOM解析技术在XML文档下实现一个《通讯录管理系统》
- 【XML解析】(6)利用XML+DOM4j+Xpath+MD5加密+图形界面(Jtabe+Vector)实现《通讯录管理系统》
- 二茶树实现通讯录管理系统
- 使用maven profile实现多环境可移植构建
- LeetCode---ZigZag Conversion
- android获取手机信息大全
- WORD、DWORD、int区别
- 选择排序java版本
- 利用线性表实现通讯录管理
- C#中的委托和Lambda表达式
- 商业模式思考——便利店风波
- android学习之六·是用系统nofity实现系统消息推送
- 如何在eclipse中运行launcher4.2代码(修改包名)
- 真逗!ubuntu14无法识别无线网络的问题居然这样就解决了!
- XML概述
- TCP服务端和客户端(1)
- 句法结构中的语义分析