天天看点

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

【题目描述】

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

操作分为查询(query)、修改(modify)、添加(add)、删除(del)、打印(print)

1. 查询:输入员工姓名,输出员工信息,若员工不存在,输出“NOT FOUND!”

2. 修改:输入员工姓名、要修改的属性、修改信息。姓名为name、电话为tel、邮箱为email。

3. 添加:输入员工编号、姓名、电话号码、邮箱。

4. 删除:输入员工姓名,将其从通讯录中删除。

5. 打印:输出通讯录 。

【输入】

第一行是一个整数n(1<=n<=100),表示通讯录原有n个人。接下来n行是员工信息,每行有编号、姓名、电话号码、邮箱四个员工属性。

接下来输入一个整数m(1<=m<=100),表示有m次操作。接下来是m行操作,每行为一次操作,操作如题意所示。

数据保证编号、姓名不重复;编号小于200且升序给出,名字只由小写字母组成,电话只由数字组成,邮箱只由数字、小写字母、“@”、“.”组成;名字、电话、邮箱字符串长度都不超过20。

输出

对于每个query和print,输出查询或打印结果。

样例输入 Copy

2

1 aaa 13579246811 [email protected]

2 csl 13579246833 [email protected]

9

del aaa

query aaa

query csl

modify csl email [email protected]

query csl

add 3 cnz 01234567890 [email protected]

modify cnz name cnznb

modify cnznb tel 13579246822

print

样例输出 Copy

NOT FOUND!

2 csl 13579246833 [email protected]

2 csl 13579246833 [email protected]

2 csl 13579246833 [email protected]

3 cnznb 13579246822 [email protected]

提示

样例中,

del aaa 表示删除aaa的信息

query aaa 查询aaa的信息,不存在,输出“NOT FOUND!”

query csl 表示查询csl的信息,输出“2 csl 13579246833 [email protected]”

modify csl email [email protected] 表示修改csl的邮箱为“[email protected]”

query csl 表示查询csl的信息,输出“2 csl 13579246833 [email protected]”

add 3 cnz 01234567890 [email protected] 添加一条员工信息

modify cnz name cnznb 修改cnz的name为cnznb

modify cnznb tel 13579246822 修改cnz的tel为13579246822

print 按编号顺序打印通讯录

代码示例

#include<iostream>
#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<cstring>
using namespace std;
typedef struct    //通讯录的数据存储类型
{
    int num;
    char name[10];
    char call[15];
    char mail[25];
} DataType;
typedef struct Node//链表的构造
{
    DataType data;//数据域
    struct Node *next;//指针域
} LNode,*LinkList;
void InitList(LinkList &L)//初始化
{
    L = new LNode;
    L->next = NULL;
}
void creatList(LinkList &L)       //头插法创建链表
{
    LNode *p, *r, *v;       //LinkList p;
    int i,n;
    cin>>n;
    L= new LNode;
    r= L;
    for(i = 0; i<n; i++)
    {
        p= new LNode;
        r->next= p;
        r= p;
        p->next= NULL;
loop:
        cin>> p->data.num>>p->data.name>>p->data.call>>p->data.mail;
        v=L;
        while(v)
        {
            if(v != p&&v->data.num==p->data.num)
                goto loop;
            else
                v= v->next;
        }
    }
}
void add(LinkList &L)
{
       LinkList p, s, v;
       p= L;
       while(p->next != NULL)
              p= p->next;
       s=new LNode;
       s->next= NULL;
loop:
       cin>> s->data.num;
       v= L;
       while(v)
       {
              if(v != s&&v->data.num==s->data.num)
                     goto loop;
              else
                     v= v->next;
       }
       cin>> s->data.name>>s->data.call>>s->data.mail;
       p->next= s;
       p= p->next;
}
void query(LinkList &L,char name[10])
{
    LNode *p;
    p = L->next;
    while (p != NULL)
    {
        if (strcmp(p->data.name,name) == 0)
        {
            cout<<p->data.num<<" "<<p->data.name<<" "<<p->data.call<<" "<<p->data.mail<<endl;
            return;
        }
        p = p->next;
    }
    if(p==NULL)
        cout << "NOT FOUND!"<<endl;
}
void modify(LinkList &L,char name[10])
{
    LNode *p;
    p = L->next;
    while (p != NULL)
    {
        if (strcmp(p->data.name,name) == 0)
        {
            char str[20],ch[20];
            int num1;
            char str1[]="num",str2[]="name",str3[]="tel",str4[]="email";
            cin>>str>>ch;
            if(strcmp(str,str1)==0)
            {
                cin>>num1;
                p->data.num=num1;;
            }
            else if(strcmp(str,str2)==0)
                strcpy(p->data.name,ch);
            else if(strcmp(str,str3)==0)
                strcpy(p->data.call, ch);
            else if(strcmp(str,str4)==0)
                strcpy(p->data.mail, ch);
        }
        p = p->next;
    }
}
void del(LinkList &L,char name[10])
{
    if (L != NULL)
    {
        LNode *p= new LNode;
        p = L;
        while (p->next != NULL)
        {
            if (strcmp(p->next->data.name, name) == 0)
            {
                LNode *q;
                q = p->next;
                p->next = q->next;
                free(q);
                q = NULL;
            }
            p = p->next;
        }
    }
}
void print(LinkList &L)
{
    LNode *p;
    p = L->next;
    while(p!=NULL)
    {
        cout<<p->data.num<<" "<<p->data.name<<" "<<p->data.call<<" "<<p->data.mail<<endl;
        p = p->next;
    }
}
int main()
{
    LinkList l;
    char str[10],name[10];
    char str1[]="add",str2[]="query",str3[]="modify",str4[]="del",str5[]="print";
    creatList(l);
    int m;
    cin>>m;
    while(m--)
    {
        cin>>str;
        if(strcmp(str1,str)==0)
            add(l);
        else if(strcmp(str2,str)==0)
        {
            cin>>name;
            query(l,name);
        }
        else if(strcmp(str3,str)==0)
        {
            cin>>name;
            modify(l,name);
        }
        else if(strcmp(str4,str)==0)
        {
            cin>>name;
            del(l,name);
        }
        else if(strcmp(str5,str)==0)
            print(l);
    }
    return 0;
}