天天看點

機關員工通訊錄管理系統(線性表的應用)

【題目描述】

為某個機關建立一個員工通訊錄管理系統,可以友善查詢每一個員工的手機号、及電子郵箱。其功能包括通訊錄連結清單的建立、員工通訊資訊的查詢、修改、插入與删除、以及整個通訊錄表的輸出。

操作分為查詢(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;
}