单位员工通讯录管理系统(线性表的应用)
生活随笔
收集整理的這篇文章主要介紹了
单位员工通讯录管理系统(线性表的应用)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
[問題描述]
為某個單位建立一個員工通訊錄管理系統,可以方便查詢每一個員工的辦公室電話、手機號、及電子郵箱。其功能包括通訊錄鏈表的建立、員工通訊信息的查詢、修改、插入與刪除、以及整個通訊錄表的輸出。
[實現提示]
可以采用單鏈表的存儲結構,如可定義如下的存儲結構:
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
總結
以上是生活随笔為你收集整理的单位员工通讯录管理系统(线性表的应用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow中tensor的索引
- 下一篇: 如何保存Tensorflow中的Tens