单位员工通讯录管理系统

#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;
 }
}

posted @ 2013-12-20 10:54  迷雾森林-  阅读(632)  评论(0编辑  收藏  举报