数据结构课程设计:1、单位员工通讯录管理系统(线性表的应用)

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

[问题描述]

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

[实现提示]

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

/*员工通讯信息的结构类型定义*/

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;

[设计思路]

   1、创建一个链表,存入员工工号、办公室电话、手机号、email的信息。

   2、对此链表员工信息查询的操作,进行对链表遍历查询。

   3、对链表进行员工信息修改的操作,遍历到所在位置进行修改。

   4、对链表进行员工信息添加的操作,使用头插法。

   5、对链表进行员工信息删除的操作,链表对应位置的节点删除。

[代码及注释]

#include<iostream>
#include<string>
using namespace std;
int flag=0;                                /*判断程序结束的标志*/
//结构
typedef struct{
    string num;                            /*员工编号*/
    string name;                           /*员工姓名*/
    string phone;                          /*员工电话*/
    string call;                           /*员工手机*/
    string mail;                           /*员工邮箱*/
}DateType;                                 /*结点类型*/
typedef struct LNode{
    DateType d;                            /*一个员工*/
    int length;                            /*员工总数*/
    struct LNode *next;                    /*指针域*/
}LNode,*LinkList;                          /*结点类型,结点指针类型*/
//子函数
bool Judge(LinkList &L,string num);        /*判断编号是否合法*/
void Add(LinkList &L);                     /*增加员工*/
void Creat(LinkList &L);                   /*创造通讯录*/
void SinglePrint(LinkList &L);             /*查看单一员工*/
void Revise(LinkList &L);                  /*修改员工信息*/
void Delete(LinkList &L);                  /*删除员工*/
void Print(LinkList &L);                   /*查看整个通讯录*/
void Menu(LinkList &L);                    /*操作汇总*/
//具体内容
bool Judge(LinkList &L,string num)
{
    LinkList p=L->next;
    while(p)
    {
        if(p->d.num==num)return false;     /*相等则不合法*/
        p=p->next;
    }
    return true;
}
void Add(LinkList &L)
{
    LinkList s=new LNode;
    s->next=NULL;
    cout<<"编号:";
    cin>>s->d.num;
    cout<<"姓名:";
    cin>>s->d.name;
    cout<<"电话:";
    cin>>s->d.phone;
    cout<<"手机:";
    cin>>s->d.call;
    cout<<"邮箱:";
    cin>>s->d.mail;
    if(Judge(L,s->d.num))
    {
        s->next=L->next;
        L->next=s;                         /*使用头插法添加员工*/
        L->length++;
        cout<<"<<<<添加成功"<<endl;
    }
    else cout<<"<<<<编号重复,添加失败"<<endl;
}
void Creat(LinkList &L)
{
    cout<<"                            <已经进入通讯录创建模式>"<<endl<<endl;
    L=new LNode;
    L->next=NULL;
    L->length=0;
    cout<<"输入要创建的通讯录人数:";
    int n;cin>>n;
    cout<<"依次输入各个员工信息"<<endl;
    for(int i=1;i<=n;++i)Add(L);
}
void SinglePrint(LinkList &L)
{
    cout<<"输入要查询员工的任一信息:";
    string k;cin>>k;
    LinkList p=L->next;
    int vis=0;                             /*标记是否找到员工*/
    while(p)
    {
        if(p->d.num==k||p->d.name==k||p->d.phone==k||p->d.call==k||p->d.mail==k)
        {
            vis=1;                         /*找到将标记置为1*/
            cout<<endl;
            cout<<"|编号:"<<p->d.num<<endl;
            cout<<"|姓名:"<<p->d.name<<endl;
            cout<<"|电话:"<<p->d.phone<<endl;
            cout<<"|手机:"<<p->d.call<<endl;
            cout<<"|邮箱:"<<p->d.mail<<endl;
            cout<<"--------------------"<<endl;
        }
        p=p->next;
    }
    if(!vis)cout<<"<<<<查询失败,没有此员工!"<<endl;
}
void Revise(LinkList &L)
{
    cout<<"输入要修改员工的编号:";
    string k;cin>>k;
    LinkList p=L->next;
    while(p)
    {
        if(p->d.num==k)
        {
            cout<<"--------------------"<<endl;
            cout<<"1--编号:"<<p->d.num<<endl;
            cout<<"2--姓名:"<<p->d.name<<endl;
            cout<<"3--电话:"<<p->d.phone<<endl;
            cout<<"4--手机:"<<p->d.call<<endl;
            cout<<"5--邮箱:"<<p->d.mail<<endl;
            cout<<"--------------------"<<endl;
            int op;
            cout<<"输入你的选择:";
            cin>>op;
            string k;
            if(op>=1&&op<=5)
            {
                cout<<"输入修改内容:";
                cin>>k;
            }
            switch(op)
            {
                case 1:if(Judge(L,k)){p->d.num=k;cout<<"<<<<修改成功"<<endl;}
                       else cout<<"<<<<修改失败"<<endl;break;
                case 2:p->d.name=k;cout<<"<<<<修改成功"<<endl;break;
                case 3:p->d.phone=k;cout<<"<<<<修改成功"<<endl;break;
                case 4:p->d.call=k;cout<<"<<<<修改成功"<<endl;break;
                case 5:p->d.mail=k;cout<<"<<<<修改成功"<<endl;break;
                default :cout<<"<<<<没有任何修改!"<<endl;
            }
            return;
        }
        p=p->next;
    }
    cout<<"<<<<没有此员工"<<endl;
}
void Delete(LinkList &L)
{
    cout<<"输入要删除员工的编号:";
    string k;
    cin>>k;
    LinkList p=L;
    while(p->next)
    {
        if(p->next->d.num==k)
        {
            LinkList s=p->next;
            p->next=s->next;
            delete s;
            L->length--;
            cout<<"<<<<删除成功"<<endl;
            return;
        }
        p=p->next;
    }
    cout<<"<<<<删除失败,通讯录没有此员工!"<<endl;
}
void Print(LinkList &L)
{
    cout<<"<<<<通讯录总人数:"<<L->length<<endl;
    LinkList p=L->next;
    while(p)
    {
        cout<<endl;
        cout<<"|编号:"<<p->d.num<<endl;
        cout<<"|姓名:"<<p->d.name<<endl;
        cout<<"|电话:"<<p->d.phone<<endl;
        cout<<"|手机:"<<p->d.call<<endl;
        cout<<"|邮箱:"<<p->d.mail<<endl;
        cout<<"--------------------"<<endl;
        p=p->next;
    }
}
void Menu(LinkList &L)
{
    cout<<"                       -----------------------------------"<<endl;
    cout<<"                      |       欢迎来到通讯录管理系统      |"<<endl;
    cout<<"                      |-----------------------------------|"<<endl;
    cout<<"                      |         1--查询单一员工           |"<<endl;
    cout<<"                      |         2--修改                   |"<<endl;
    cout<<"                      |         3--增加                   |"<<endl;
    cout<<"                      |         4--删除                   |"<<endl;
    cout<<"                      |         5--查询整个通讯录         |"<<endl;
    cout<<"                      |         其他--退出                |"<<endl;
    cout<<"                       -----------------------------------"<<endl;
    int op;
    cout<<"输入你的选择:";
    cin>>op;
    switch(op)
    {
        case 1:SinglePrint(L);break;
        case 2:Revise(L);break;
        case 3:Add(L);break;
        case 4:Delete(L);break;
        case 5:Print(L);break;
        default:flag=1;cout<<"<<<<欢迎下次再来,再见!"<<endl;
    }
}
int main()
{
    LinkList L;
    Creat(L);
    while(1)
    {
        Menu(L);
        if(flag)break;
        system("pause");
        system("cls");
    }
    return 0;
}

[简单展示]

标题

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值