单位员工通讯录管理系统
#include<iostream>//数据结构课程设计 3、单位员工通讯录管理系统(*)
#include<string>
#include<iomanip>
using namespace std;
typedef struct LNode{//结点结构体定义
string name,bgs,sj,yx;//姓名、办公室电话、手机号码、电子邮箱
LNode *next;
}LNode;//,*LinkList;
struct List{//链表
LNode *LinkList;
int length;//储存链表长度
};
void menu();//显示菜单
void InitList(List &l);//初始化链表
void show(List &l);//打印链表所有结点
void search(List &l);//查询员工信息
void revise(List &l);//修改员工信息
void add(List &l);//增加员工信息
void remove(List &l);//删除员工信息
int main()
{
List l;
int i;
InitList(l);//初始化
while(true)
{
menu();
cin>>i;
switch(i)
{
case 1:show(l);break;//打印所有员工信息
case 2:search(l);break;//查询员工信息
case 3:revise(l);break;//查询员工信息
case 4:add(l);break;//增加员工信息
case 5:remove(l);break;//删除员工信息
case 6:system("cls");break;//清屏
default:return 0;
}
}
show(l);
return 0;
}
void menu()//显示菜单
{
cout<<"╔═════════════主菜单═════════════╗\n";
cout<<"║请选择操作: ║\n";
cout<<"║1、打印所有员工信息; ║\n";
cout<<"║2、查询员工信息; ║\n";
cout<<"║3、修改员工信息; ║\n";
cout<<"║4、增加员工信息; ║\n";
cout<<"║5、删除员工信息; ║\n";
cout<<"║6、清屏。 ║\n";
cout<<"║输入其它数字可退出系统。 ║\n";
cout<<"╚═════════════════════════════╝\n";
}
void InitList(List &l)//初始化链表
{
LNode *p;
p=new LNode;//创建头结点
p->next=NULL;
l.LinkList=p;
l.length=0;//链表长度为0
}
void show(List &l)//打印链表所有结点
{
int i=0;
LNode *p;
p=l.LinkList->next;//指向结点1(头结点之后)
system("cls");//清屏
cout<<setw(4)<<"序号"<<setw(10)<<"姓名"<<setw(15)<<"办公室电话"<<setw(15)<<"手机号码"
<<setw(15)<<"电子邮箱\n";
while(p)//p为空时结束
{
i++;//计数
cout<<setw(4)<<i<<setw(10)<<p->name<<setw(15)<<p->bgs<<setw(15)<<p->sj<<setw(15)<<p->yx<<endl;
p=p->next;
}
cout<<"【当前共有"<<l.length<<"位员工】\n";
}
void search(List &l)//查询员工信息
{
int i,m;
string str;
cout<<"╔═══════════查询员工信息════════════╗\n";
cout<<"║请选择操作: ║\n";
cout<<"║1、输入序号查询; ║\n";
cout<<"║2、输入姓名查询; ║\n";
cout<<"║输入其它数字可返回主菜单。 ║\n";
cout<<"╚═════════════════════════════╝\n";
cin>>i;
LNode *p=l.LinkList;
switch(i)
{
case 1:
cout<<"请输入序号:";
cin>>i;
cout<<setw(4)<<"序号"<<setw(10)<<"姓名"<<setw(15)<<"办公室电话"<<setw(15)<<"手机号码"
<<setw(15)<<"电子邮箱\n";
if(i<1||i>l.length)//序号不存在
{
cout<<"【共有0个查询结果】\n";
return;
}
for(m=0;m<i;m++)
p=p->next;
cout<<setw(4)<<i<<setw(10)<<p->name<<setw(15)<<p->bgs<<setw(15)<<p->sj<<setw(15)<<p->yx<<endl;
cout<<"【共有1个查询结果】\n";
break;
case 2:
cout<<"请输入姓名:";
cin>>str;
cout<<setw(4)<<"序号"<<setw(10)<<"姓名"<<setw(15)<<"办公室电话"<<setw(15)<<"手机号码"
<<setw(15)<<"电子邮箱\n";
m=0;
i=1;
while(p->next)
{
if(p->next->name==str)
{
cout<<setw(4)<<i<<setw(10)<<p->next->name<<setw(15)<<p->next->bgs<<setw(15)<<p->next->sj
<<setw(15)<<p->next->yx<<endl;
m++;//结果计数
}
p=p->next;
i++;
}
cout<<"【共有"<<m<<"个查询结果】\n";
break;
default:return;
}
}
void revise(List &l)//修改员工信息
{
int i,m;
string str;
cout<<"╔═══════════修改员工信息════════════╗\n";
cout<<"║请选择操作: ║\n";
cout<<"║1、输入序号修改; ║\n";
cout<<"║2、输入姓名修改; ║\n";
cout<<"║输入其它数字可返回主菜单。 ║\n";
cout<<"╚═════════════════════════════╝\n";
cin>>i;
LNode *p=l.LinkList;
switch(i)
{
case 1:
cout<<"请输入序号:";
cin>>i;
if(i<1||i>l.length)//序号不存在
{
cout<<"您输入的序号不存在!\n";
return;
}
for(m=0;m<i;m++)
p=p->next;//p指向要修改的结点
break;
case 2:
cout<<"请输入姓名:";
cin>>str;
while(p->next)
{
if(p->next->name==str)
{
p=p->next;//p指向要修改的结点
break;
}
p=p->next;
i++;
}
break;
default:return;
}
cout<<"请输入员工的姓名:";
cin>>str;
p->name=str;
cout<<"请输入员工的办公室电话:";
cin>>str;
p->bgs=str;
cout<<"请输入员工的手机号码:";
cin>>str;
p->sj=str;
cout<<"请输入员工的电子邮箱:";
cin>>str;
p->yx=str;
system("cls");
cout<<"修改员工信息成功!\n";
}
void add(List &l)//增加员工信息
{
LNode *p=l.LinkList,*p2;
string str;
while(p->next)//p指向尾结点时结束
p=p->next;
p2=new LNode;
cout<<"请输入新增员工的姓名:";
cin>>str;
p2->name=str;
cout<<"请输入新增员工的办公室电话:";
cin>>str;
p2->bgs=str;
cout<<"请输入新增员工的手机号码:";
cin>>str;
p2->sj=str;
cout<<"请输入新增员工的电子邮箱:";
cin>>str;
p2->yx=str;
p->next=p2;
p2->next=NULL;
l.length++;
system("cls");
cout<<"增加员工信息成功!\n";
}
void remove(List &l)//删除员工信息
{
int i,m;
string str;
cout<<"╔═══════════删除员工信息════════════╗\n";
cout<<"║请选择操作: ║\n";
cout<<"║1、输入序号删除; ║\n";
cout<<"║2、输入姓名删除; ║\n";
cout<<"║输入其它数字可返回主菜单。 ║\n";
cout<<"╚═════════════════════════════╝\n";
cin>>i;
LNode *p=l.LinkList,*p2;
switch(i)
{
case 1:
cout<<"请输入序号:";
cin>>i;
if(i<1||i>l.length)//序号不存在
{
cout<<"【删除0条符合条件的记录】\n";
return;
}
for(m=0;m<i;m++)
{
p2=p;//p2指向p的前驱
p=p->next;
}
p2->next=p->next;
l.length--;
delete p;
cout<<"【删除1条符合条件的记录】\n";
break;
case 2:
cout<<"请输入姓名:";
cin>>str;
i=m=0;
while(p->next)
{
if(p->next->name==str)
{
p->next=p->next->next;//删除p->next指向的结点
m++;//结果计数
}else
p=p->next;
i++;
}
l.length-=m;
cout<<"【删除"<<m<<"条符合条件的记录】\n";
break;
default:return;
}
}