欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

单位员工通讯录管理系统(线性表的应用)

发布时间:2025/4/16 windows 60 豆豆
生活随笔 收集整理的这篇文章主要介绍了 单位员工通讯录管理系统(线性表的应用) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

[问题描述]

为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。

[实现提示]

可以采用单链表的存储结构,如可定义如下的存储结构:

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> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #include<cstring> using namespace std;typedef int Status;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; LinkList L; /*单链表的初始化*/ void InitList(LinkList &L){/*构造一个空的单链表L*/L=new ListNode;//生成的新的结点是头结点,L是指向结点的头指针 L->next=NULL;//头结点指针域为空 }/*输出全体员工的信息*/ void FindListAll(LinkList L){LinkList p=L;cout<<"员工编号"<<" "<<"员工姓名"<<" "<<"办公室电话"<<" "<<"手机号码"<<" "<<"邮箱"<<endl;while(p->next){//指针域不为空就输出 p=p->next;cout<<p->data.num<<"\t "<<p->data.name<<"\t "<<p->data.phone<<" "<<p->data.call<<"\t"<<p->data.mail<<endl;} }/*单链表的插入(插入某位员工的信息)尾插法*/ void ListInsert(LinkList &L){LinkList p=new ListNode;//申请一个结点空间 cout<<"PS:目前支持员工编号4位,员工姓名4位,电话9位,手机9位"<<endl;cout<<endl; cout<<"请输入员工的信息:员工编号,员工姓名,办公室电话,手机号,邮箱"<<endl;//单链表数据域是结构体类型 cin>>p->data.num>>p->data.name>>p->data.phone>>p->data.call>>p->data.mail;LinkList q=L;while(q->next){//检查该员工编号是否存在 q=q->next;if(strcmp(p->data.num,q->data.num)==0){cout<<"该员工信息已存在,请重新输入!"<<endl; ListInsert(L); }}LinkList m=L;//*找到最后一个结点 while(m->next){m=m->next;}m->next=p;p->next=NULL;cout<<"插入成功!"<<endl;FindListAll(L); system("pause");system("cls"); } /*单链表的删除(根据编号删除某位员工的全部信息)*/ void ListDelete(LinkList &L){char a[5];cout<<"请输入要删除的员工的编号:";cin>>a;LinkList p=L; if(p->next==NULL) exit(OVERFLOW);LinkList act=L;//保存p的前驱 Status b=ERROR;//设置一个标记,如果没有找到这个标记还是0 while(p->next){//从头结点开始找员工编号 act=p;p=p->next;if(strcmp(a,p->data.num)==0){//如果找到了就标记为1 b=OK;break;}}if(b){//删除操作 act->next=p->next;delete p;cout<<"删除成功!"<<endl; FindListAll(L); system("pause");system("cls");}else{cout<<"请输入正确的员工编号!"<<endl;//没有此员工(编号错误,重新输入) ListDelete(L); } }/*修改员工信息*/ Status ListChagneSpe(LinkList &p){Status chose;cout<<"*********2.姓名*********"<<endl;cout<<"*********3.办公室电话***"<<endl;cout<<"*********4.手机号码*****"<<endl;cout<<"*********5.邮箱*********"<<endl;cout<<"请选择您要修改的信息:";cin>>chose;switch(chose){//选择后直接输入即可 case 2: cin>>p->data.name; break; case 3: cin>>p->data.phone; break;case 4: cin>>p->data.call; break;case 5: cin>>p->data.mail; break;default: cout<<"请输入正确的选择!"<<endl; ListChagneSpe(p);} cout<<"是否需要继续修改?(y(是)/other(其他修改完成))";char is_continue;cin>>is_continue;if(is_continue=='y') ListChagneSpe(p);elsereturn OK; return OK; } /*单链表的修改(根据编号修改员工的某一项信息)*/ void ListChange(LinkList &L){char a[5];Status b=ERROR;cout<<"请输入要修改的员工的编号:";cin>>a;LinkList p=L;//找存储此员工信息的结点if(p->next==NULL) exit(OVERFLOW); while(p->next){p=p->next;if(strcmp(a,p->data.num)==0){b=ListChagneSpe(p);break;} }if(b){cout<<"修改成功!"<<endl;FindListAll(L);system("pause");system("cls");}else{cout<<"请输入正确的员工编号!"<<endl;//没有此员工(编号错误,重新输入) ListChange(L); } } /*输出某员工的信息*/ void FindListSome(LinkList L){char a[5];Status b=ERROR;cout<<"请输入员工编号:";cin>>a;LinkList p=L;if(p->next==NULL) exit(OVERFLOW);while(p->next){p=p->next;if(strcmp(a,p->data.num)==0){b=OK;break;}}if(b){cout<<"员工编号"<<" "<<"员工姓名"<<" "<<"办公室电话"<<" "<<"手机号码"<<" "<<"邮箱"<<endl;cout<<p->data.num<<"\t "<<p->data.name<<"\t "<<p->data.phone<<" "<<p->data.call<<"\t"<<p->data.mail<<endl;}else{cout<<"员工编号错误,请重新输入!"<<endl;FindListSome(L); } }/*单链表的查询(根据编号查询某员工信息/查询全部员工信息)*/ void FindList(LinkList L){cout<<"1.查询某员工的信息"<<endl;cout<<"2.查询全体员工的信息"<<endl; cout<<"请选择您要查询的操作:";Status chose;cin>>chose;switch(chose){case 1: FindListSome(L);break;case 2: FindListAll(L); break;default : cout<<"请输入正确的选择!"<<endl;FindList(L);} system("pause");system("cls"); }/*功能实现*/ void SystemMenu(LinkList &L){Status chose;cout<<"******************************************"<<endl; cout<<"**********欢迎进入×××员工系统**********"<<endl; cout<<"**************1.添加员工信息**************"<<endl;cout<<"**************2.删除员工信息**************"<<endl;cout<<"**************3.修改员工信息**************"<<endl;cout<<"**************4.查找员工信息**************"<<endl;cout<<"**************5.退出系统******************"<<endl;cout<<"******************************************"<<endl;cout<<"请输入您要选择的操作:";cin>>chose;switch(chose){case 1: {ListInsert(L);SystemMenu(L);}case 2: {ListDelete(L);SystemMenu(L);}case 3: {ListChange(L);SystemMenu(L);}case 4: {FindList(L);SystemMenu(L);}case 5: {exit(0);}default : {cout<<"输入异常!请重新输入!" <<endl;system("pause");system("cls");SystemMenu(L); } } } int main(){InitList(L);SystemMenu(L);return 0; }

 

转载于:https://www.cnblogs.com/zut-syp/p/10543708.html

总结

以上是生活随笔为你收集整理的单位员工通讯录管理系统(线性表的应用)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。