单位员工通讯录管理系统(线性表的应用)
[问题描述]
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示]
可以采用单链表的存储结构,如可定义如下的存储结构:
/*员工通讯信息的结构类型定义*/
typedef struct {
char num[5]; /*员工编号*/
char name[10]; /*员工姓名*/
char phone[15]; /*办公室电话号码*/
char call[15]; /*手机号码*/
char mail[25]; /*邮箱*/
}DataType;
/*通讯录单链表的结点类型*/
typedef struct node{
DataType data;
struct node *next;
}ListNode,*LinkList;
[设计思路]
1、创建一个链表,存入员工工号、办公室电话、手机号、email的信息。
2、对此链表员工信息查询的操作,进行对链表遍历查询。
3、对链表进行员工信息修改的操作,遍历到所在位置进行修改。
4、对链表进行员工信息添加的操作,使用头插法。
5、对链表进行员工信息删除的操作,链表对应位置的节点删除。
[代码及注释]
#include<iostream>
#include<string>
using namespace std;
int flag=0; /*判断程序结束的标志*/
//结构
typedef struct{
string num; /*员工编号*/
string name; /*员工姓名*/
string phone; /*员工电话*/
string call; /*员工手机*/
string mail; /*员工邮箱*/
}DateType; /*结点类型*/
typedef struct LNode{
DateType d; /*一个员工*/
int length; /*员工总数*/
struct LNode *next; /*指针域*/
}LNode,*LinkList; /*结点类型,结点指针类型*/
//子函数
bool Judge(LinkList &L,string num); /*判断编号是否合法*/
void Add(LinkList &L); /*增加员工*/
void Creat(LinkList &L); /*创造通讯录*/
void SinglePrint(LinkList &L); /*查看单一员工*/
void Revise(LinkList &L); /*修改员工信息*/
void Delete(LinkList &L); /*删除员工*/
void Print(LinkList &L); /*查看整个通讯录*/
void Menu(LinkList &L); /*操作汇总*/
//具体内容
bool Judge(LinkList &L,string num)
{
LinkList p=L->next;
while(p)
{
if(p->d.num==num)return false; /*相等则不合法*/
p=p->next;
}
return true;
}
void Add(LinkList &L)
{
LinkList s=new LNode;
s->next=NULL;
cout<<"编号:";
cin>>s->d.num;
cout<<"姓名:";
cin>>s->d.name;
cout<<"电话:";
cin>>s->d.phone;
cout<<"手机:";
cin>>s->d.call;
cout<<"邮箱:";
cin>>s->d.mail;
if(Judge(L,s->d.num))
{
s->next=L->next;
L->next=s; /*使用头插法添加员工*/
L->length++;
cout<<"<<<<添加成功"<<endl;
}
else cout<<"<<<<编号重复,添加失败"<<endl;
}
void Creat(LinkList &L)
{
cout<<" <已经进入通讯录创建模式>"<<endl<<endl;
L=new LNode;
L->next=NULL;
L->length=0;
cout<<"输入要创建的通讯录人数:";
int n;cin>>n;
cout<<"依次输入各个员工信息"<<endl;
for(int i=1;i<=n;++i)Add(L);
}
void SinglePrint(LinkList &L)
{
cout<<"输入要查询员工的任一信息:";
string k;cin>>k;
LinkList p=L->next;
int vis=0; /*标记是否找到员工*/
while(p)
{
if(p->d.num==k||p->d.name==k||p->d.phone==k||p->d.call==k||p->d.mail==k)
{
vis=1; /*找到将标记置为1*/
cout<<endl;
cout<<"|编号:"<<p->d.num<<endl;
cout<<"|姓名:"<<p->d.name<<endl;
cout<<"|电话:"<<p->d.phone<<endl;
cout<<"|手机:"<<p->d.call<<endl;
cout<<"|邮箱:"<<p->d.mail<<endl;
cout<<"--------------------"<<endl;
}
p=p->next;
}
if(!vis)cout<<"<<<<查询失败,没有此员工!"<<endl;
}
void Revise(LinkList &L)
{
cout<<"输入要修改员工的编号:";
string k;cin>>k;
LinkList p=L->next;
while(p)
{
if(p->d.num==k)
{
cout<<"--------------------"<<endl;
cout<<"1--编号:"<<p->d.num<<endl;
cout<<"2--姓名:"<<p->d.name<<endl;
cout<<"3--电话:"<<p->d.phone<<endl;
cout<<"4--手机:"<<p->d.call<<endl;
cout<<"5--邮箱:"<<p->d.mail<<endl;
cout<<"--------------------"<<endl;
int op;
cout<<"输入你的选择:";
cin>>op;
string k;
if(op>=1&&op<=5)
{
cout<<"输入修改内容:";
cin>>k;
}
switch(op)
{
case 1:if(Judge(L,k)){p->d.num=k;cout<<"<<<<修改成功"<<endl;}
else cout<<"<<<<修改失败"<<endl;break;
case 2:p->d.name=k;cout<<"<<<<修改成功"<<endl;break;
case 3:p->d.phone=k;cout<<"<<<<修改成功"<<endl;break;
case 4:p->d.call=k;cout<<"<<<<修改成功"<<endl;break;
case 5:p->d.mail=k;cout<<"<<<<修改成功"<<endl;break;
default :cout<<"<<<<没有任何修改!"<<endl;
}
return;
}
p=p->next;
}
cout<<"<<<<没有此员工"<<endl;
}
void Delete(LinkList &L)
{
cout<<"输入要删除员工的编号:";
string k;
cin>>k;
LinkList p=L;
while(p->next)
{
if(p->next->d.num==k)
{
LinkList s=p->next;
p->next=s->next;
delete s;
L->length--;
cout<<"<<<<删除成功"<<endl;
return;
}
p=p->next;
}
cout<<"<<<<删除失败,通讯录没有此员工!"<<endl;
}
void Print(LinkList &L)
{
cout<<"<<<<通讯录总人数:"<<L->length<<endl;
LinkList p=L->next;
while(p)
{
cout<<endl;
cout<<"|编号:"<<p->d.num<<endl;
cout<<"|姓名:"<<p->d.name<<endl;
cout<<"|电话:"<<p->d.phone<<endl;
cout<<"|手机:"<<p->d.call<<endl;
cout<<"|邮箱:"<<p->d.mail<<endl;
cout<<"--------------------"<<endl;
p=p->next;
}
}
void Menu(LinkList &L)
{
cout<<" -----------------------------------"<<endl;
cout<<" | 欢迎来到通讯录管理系统 |"<<endl;
cout<<" |-----------------------------------|"<<endl;
cout<<" | 1--查询单一员工 |"<<endl;
cout<<" | 2--修改 |"<<endl;
cout<<" | 3--增加 |"<<endl;
cout<<" | 4--删除 |"<<endl;
cout<<" | 5--查询整个通讯录 |"<<endl;
cout<<" | 其他--退出 |"<<endl;
cout<<" -----------------------------------"<<endl;
int op;
cout<<"输入你的选择:";
cin>>op;
switch(op)
{
case 1:SinglePrint(L);break;
case 2:Revise(L);break;
case 3:Add(L);break;
case 4:Delete(L);break;
case 5:Print(L);break;
default:flag=1;cout<<"<<<<欢迎下次再来,再见!"<<endl;
}
}
int main()
{
LinkList L;
Creat(L);
while(1)
{
Menu(L);
if(flag)break;
system("pause");
system("cls");
}
return 0;
}
[简单展示]
