通讯录
来源:互联网 发布:php mysql num rows 编辑:程序博客网 时间:2024/03/28 21:17
#include <iostream>
#include <cstring>
using namespace std;
struct Node // 节点
{
int id; // 记录的标号
char name[20]; // 存储姓名
int sex; // 性别
char birth[50]; // 出生日期
char address[100]; // 通讯地址
char telephone[20]; // 电话号码
Node * next;
};
void DataInput(Node * p); // 数据输入
void DataSearch(); // 数据查找
void DataDelete(); // 数据删除
void DataInsert(); // 数据插入
void DataShow(); // 数据显示
void DataID(); // 调整数据ID
Node * front = 0; // 头节点
Node * current = 0; // 当前节点
int count = 0; // 计数
int main()
{
int key = 0; // 功能控制变量
while (key != 6)
{
cout << "请选择操作: 1.浏览; 2.增加; 3.删除; 4.查询; 5.插入; 6.退出; ";
cin >> key;
if (key == 1)
{
DataShow();
}
else if (key == 2)
{
if (count == 0) // 当前资料为空
{
front = new Node;
current = front;
DataInput(current);
}
else
{
current->next = new Node;
current = current->next;
DataInput(current);
}
}
else if (key == 3)
DataDelete();
else if (key == 4)
DataSearch();
else if (key == 5)
DataInsert();
else if (key == 6)
break;
else
continue;
cout << endl;
}
cout << endl << endl << "程序结束,谢谢使用! ^O^/n/n";
return 0;
}
void DataInput(Node * p)
{
p->id = ++count;
cout << "/n请输入联系人姓名:";
cin >> p->name;
while (cin.get() != '/n')
continue;
while (1)
{
cout << "/n请选择联系人性别: 1.男性; 2.女性 ";
cin >> p->sex;
if (p->sex == 1 || p->sex == 2)
break;
else
{
while (cin.get() != '/n')
continue;
}
}
cout << "/n请输入联系人出生年月: ";
cin >> p->birth;
while (cin.get() != '/n')
continue;
cout << "/n请输入联系人通讯地址:";
cin >> p->address;
while (cin.get() != '/n')
continue;
cout << "/n请输入联系人电话号码:";
cin >> p->telephone;
while (cin.get() != '/n')
continue;
p->next = 0;
cout << endl << p->name << " 资料输入完毕!/n";
}
void DataSearch()
{
int keytemp = 0;
int idtemp = 0;
int success = 0;
char nametemp[20];
Node * temp = front;
while (1)
{
if (count == 0)
{
cout << "/n没有存储任何资料!/n";
break;
}
cout << "/n1.按ID查询; 2.按姓名查询 ";
cin >> keytemp;
if (keytemp == 1)
{
while (idtemp == 0 || idtemp > current->id)
{
cout << "/n请输入ID:";
cin >> idtemp;
if (idtemp > current->id)
cout << "/n当前只有 " << current->id << " 条资料!/n";
}
cout << "/n查询结果如下:/n";
while (temp != 0)
{
if (temp->id == idtemp)
{
cout <<"/n*****************************************/n/n";
cout << "ID: " << temp->id << " 姓名:" << temp->name << " 性别:";
if (temp->sex == 1)
cout << "男";
else
cout << "女";
cout << "/n/n出生日期:" << temp->birth << "/n/n通信地址:" << temp->address
<< "/n/n电话号码:" << temp->telephone << endl;
cout << "/n*****************************************/n";
}
temp = temp->next;
}
}
else if (keytemp == 2)
{
cout << "/n请输入姓名:";
cin >> nametemp;
while (temp != 0)
{
if (strcmp(temp->name, nametemp) == 0)
{
success = 1;
cout << "/n" << nametemp <<" 资料如下:/n";
cout <<"/n*****************************************/n/n";
cout << "ID: " << temp->id << " 姓名:" << temp->name << " 性别:";
if (temp->sex == 1)
cout << "男";
else
cout << "女";
cout << "/n/n出生日期:" << temp->birth << "/n/n通信地址:" << temp->address
<< "/n/n电话号码:" << temp->telephone << endl;
cout << "/n*****************************************/n";
}
temp = temp->next;
}
if (success == 0)
cout << "/n没有找到姓名为 " << nametemp << " 的资料./n";
}
break;
}
}
void DataDelete()
{
int keytemp;
int idtemp = 0;
char nametemp[20];
int success = 0; // 标记是否删除成功
Node * temp = front;
while (1)
{
if (count == 0)
{
cout << "/n没有存储任何资料!/n";
break;
}
cout << "/n1.按ID删除; 2.按姓名删除 ";
cin >> keytemp;
if (keytemp == 1)
{
while (idtemp == 0 || idtemp > current->id)
{
cout << "/n请输入ID:";
cin >> idtemp;
if (idtemp > current->id)
cout << "/n当前只有 " << current->id << " 条资料!/n";
}
if (front->id == idtemp)
{
Node * fronttemp = front;
front = front->next;
delete fronttemp;
success = 1;
count--;
if (count != 0) // 存储资料非空
DataID(); // 调整资料ID
cout << "ID为 " << idtemp <<" 的资料删除完毕!/n";
break;
}
while (temp != current && temp != 0)
{
if (temp->next->id == idtemp)
{
Node * nexttemp = temp->next;
if (nexttemp != current)
{
temp->next = temp->next->next;
delete nexttemp;
success = 1;
count--;
DataID(); // 调整ID
}
else // 删除的资料为最后一个节点
{
temp->next = 0;
current = temp;
delete nexttemp;
success = 1;
count--;
}
}
temp = temp->next;
}
cout << "ID为 " << idtemp <<" 的资料删除完毕!/n";
}
else if (keytemp == 2)
{
cout << "/n请输入姓名:";
cin >> nametemp;
if (strcmp(front->name, nametemp) == 0)
{
Node * fronttemp = front;
front = front->next;
delete fronttemp;
success = 1;
count--;
if (count != 0) // 存储资料非空
DataID(); // 调整资料ID
cout << "/n姓名为 " << nametemp << " 的资料删除完毕!/n";
break;
}
while (temp != current && temp != 0)
{
if (strcmp(temp->next->name, nametemp) == 0)
{
Node * nexttemp = temp->next;
if (nexttemp != current)
{
temp->next = temp->next->next;
delete nexttemp;
success = 1;
count--;
DataID(); // 调整ID
}
else // 删除的资料为最后一个节点
{
temp->next = 0;
current = temp;
delete nexttemp;
success = 1;
count--;
}
}
temp = temp->next;
}
if (success == 1)
cout << "/n姓名为 " << nametemp << " 的资料删除完毕!/n";
else
cout << "/n没有找到姓名为 " << nametemp << " 的资料./n";
}
break;
}
}
void DataInsert()
{
Node * temp = front;
int idtemp = 0;
int success = 0;
cout << "/n请输入要插入的资料:/n";
if (count == 0) // 当前资料为空
{
front = new Node;
current = front;
DataInput(current);
cout << "/n检测到没有存储任何资料,当前数据已被自动插入到 ID:1 位置/n";
success = 2;
}
else
{
current->next = new Node;
current = current->next;
DataInput(current);
}
while (1)
{
if (success == 2)
break;
cout << "/n输入即将插入的ID位置: ";
cin >> idtemp;
if ((idtemp > count) || (idtemp <= 0))
{
cout << "/n插入位置无效!/n";
while (cin.get() != '/n')
continue;
continue;
}
else if (idtemp == 1) // 插入位置为第一个节点
{
temp = current;
temp->next = front;
front = current; // 设置新的头节点
while (temp->next != current)
temp = temp->next;
temp->next = 0; // 设置新的尾节点
current = temp; // current指向尾节点
DataID(); // 调整ID
success = 1;
cout << "/n插入操作完成!/n";
}
else if (idtemp == count)
{
cout << "/n插入操作完成!/n"; // 所以此处不作任何处理即可, 自然符合当前情况
break;
}
else
{
if (count == 1) // 只有一个节点时候
{ // 由于插入位置只能是1或2,1的情况已经完成,2的情况为自然形成
cout << "/n插入操作完成!/n"; // 所以此处不作任何处理即可
break;
}
else
{
while (temp != current)
{
if (temp->next->id == idtemp)
{
current->next = temp->next;
temp->next = current;
}
temp = temp ->next;
}
while (temp->next != current)
temp = temp->next;
temp->next = 0; // 设置新的尾节点
current = temp; // current指向尾节点
DataID(); // 调整ID
success = 1;
cout << "/n插入操作完成!/n";
}
}
break;
}
}
void DataShow()
{
Node * temp = front;
cout << "/n当前共存储信息 " << count <<" 条:/n";
while (1)
{
if (count == 0) // 无节点
{
cout << "/n没有任何资料可以显示!/n";
break;
}
cout <<"/n*****************************************/n/n";
cout << "ID: " << temp->id << " 姓名:" << temp->name << " 性别:";
if (temp->sex == 1)
cout << "男";
else
cout << "女";
cout << "/n/n出生日期:" << temp->birth << "/n/n通信地址:" << temp->address
<< "/n/n电话号码:" << temp->telephone << endl;
cout << "/n*****************************************/n";
if (temp->next == 0)
break;
temp = temp->next;
}
}
void DataID()
{
Node * temp = front;
int counttemp = 0;
while (1)
{
temp->id = ++counttemp;
if (temp->next == 0)
break;
temp = temp->next;
}
}