单位员工通讯录管理系统(线性表的应用)
[问题描述]为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示]
可以采用单链表的存储结构,如可定义如下的存储结构:
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;
要点提示:单链表的基本操作。
源代码:
#include<iostream>
using namespace std;
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;
void CreateList_L(LinkList &L)
{//创建通讯录
int i,n;
ListNode *p;
L=(LinkList)malloc(sizeof(ListNode));
L->next=NULL;
cout<<"请输入员工人数:"<<endl;
cin>>n;
for(i=1;i<=n;++i)
{
cout<<endl<<"请输入第"<<i<<"个员工的信息:"<<endl;
p=(LinkList)malloc(sizeof(ListNode));
cout<<"编号";
cin>>p->data.num;
cout<<"姓名";
cin>>p->data.name;
cout<<"办公室电话号码";
cin>>p->data.phone;
cout<<"手机号码";
cin>>p->data.call;
cout<<"邮箱";
cin>>p->data.mail;
p->next=L->next;
L->next=p;
}
}
void GetdataList_L(LinkList &L)
{//查询员工信息
ListNode *p;
int j=0;
p=L->next;char numm[5];
cout<<"请输入员工编号:"<<endl;
cin>>numm;
while(p)
{
if(strcmp(p->data.num,numm)==0)
{j=1;break;}
p=p->next;
}
if(j)
{
cout<<"===编号==="<<"===姓名==="<<"===办公室电话号码==="<<"===手机号码==="<<"===邮箱==="<<endl;
cout<<" "<<p->data.num
<<" "<<p->data.name
<<" "<<p->data.phone
<<" "<<p->data.call
<<" "<<p->data.mail<<endl;
}
else
cout<<"编号为"<<numm<<"的员工不存在!"<<endl;
}
void ModifydataList_L(LinkList &L)
{//修改员工信息
ListNode *p;
int j=0;
p=L->next;char numm[5];
cout<<"请输入修改员工的编号:"<<endl;
cin>>numm;
while(p)
{
if(strcmp(p->data.num,numm)==0)
{j=1;break;}
p=p->next;
}
if(j)
{
cout<<"请输入修改后的员工信息"<<endl;
cout<<"姓名";
cin>>p->data.name;
cout<<"办公室电话号码";
cin>>p->data.phone;
cout<<"手机号码";
cin>>p->data.call;
cout<<"邮箱";
cin>>p->data.mail;
}
else
cout<<"编号为"<<numm<<"的员工不存在"<<endl;
}
void InsretdataList_L(LinkList &L)
{//插入员工信息
ListNode *p;
p=new ListNode[sizeof(ListNode)]; //创建一个新节点
cout<<"请输入待插入的员工信息:"<<endl;
cout<<"编号";
cin>>p->data.num;
cout<<"姓名";
cin>>p->data.name;
cout<<"办公室电话号码";
cin>>p->data.phone;
cout<<"手机号码";
cin>>p->data.call;
cout<<"邮箱";
cin>>p->data.mail;
p->next=L->next;
L->next=p;
}
void DeletedataList_L(LinkList &L)
{//指定位置删除元素
ListNode *p;
int j=0;
p=L;char numm[5];
cout<<"请输入删除员工的编号:"<<endl;
cin>>numm;
while(p->next)
{
if(strcmp(p->next->data.num,numm)==0)
{j=1;break;}
p=p->next;
}
if(j)
{
p->next=p->next->next;
cout<<"删除成功"<<endl;
}
else
cout<<"编号为"<<numm<<"的员工不存在"<<endl;
}
void PrintfList_L(LinkList &L)
{
ListNode *p;
int j=0;
p=L->next;
cout<<"===编号==="<<"===姓名==="<<"===办公室电话号码==="<<"===手机号码==="<<"===邮箱==="<<endl;
while(p)
{
cout<<" "<<p->data.num
<<" "<<p->data.name
<<" "<<p->data.phone
<<" "<<p->data.call
<<" "<<p->data.mail<<endl;
p=p->next;
}
}
void menu()
{
cout<<endl;
cout<<" ◆-------◆---------◆---------◆-------◆"<<endl;
cout<<" 通讯录管理系统"<<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;
cout<<endl;
cout<<"请选择功能:";
}
int main()
{
system("color 37");
cout<<endl;
cout<<" ◆-------◆---------◆---------◆-------◆"<<endl;
cout<<endl;
cout<<" ◇ 欢迎进入通讯录管理系统 ◇"<<endl;
cout<<endl;
cout<<" ◆-------◆---------◆---------◆-------◆"<<endl;
cout<<endl;
LinkList L;
cout<<"通讯录为空,建立员工通讯录:"<<endl;
CreateList_L(L);
int n;
while(1)
{
system("cls");
menu();
top: cin>>n;
if(n==1)
GetdataList_L(L),system("pause");
else if(n==2)
ModifydataList_L(L),system("pause");
else if(n==3)
InsretdataList_L(L),system("pause");
else if(n==4)
DeletedataList_L(L),system("pause");
else if(n==5)
PrintfList_L(L),system("pause");
else if(n==6)
break;
else
{
cout<<"输入有误,请重新输入!"<<endl;
goto top;
}
}
return 0;
}
/*
4
001
a
123
456
789
002
b
123
456
789
003
c 123
456
789
004
d
123
456
789
*/