数据结构课设——单位员工通讯录管理系统

问题描述

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

算法思想

建立一个结构体储存员工信息,作为链表的数据域。将每个功能分别写到一个函数里,供主函数调用。建立通讯录是从键盘输入信息,使用后插法储存在链表里;查找信息时从前往后遍历链表,使用字符串比较法进行比较来找到信息;删除信息的第一步就是查找到该信息,方法与查找信息相同,找到信息后定义一个结点保存其前驱,用删除结点的前驱直接指向它的后继,再把结点删除;插入结点使用前插法插入;修改结点信息时即是查找到该结点,然后重新输入该结点信息。主函数中使用while循环和switch对功能进行调用。

算法设计

1、新建通讯录Status CreatList(LinkList &L)——先从键盘输入要存入的员工个数,以便控制for循环的结束,然后按照提示从键盘依次输入员工信息,利用后插法插入链表中。

2、查找员工信息Status GetData(LinkList L)——从键盘输入员工编号或姓名,从前往后遍历链表,使用字符串比较法进行比较来找到信息。

3、删除员工信息Status DeleteData(LinkList &L)——从键盘输入员工编号或姓名,然后第一步就是查找到该信息,方法与查找信息相同,找到信息后定义一个结点保存其前驱,用删除结点的前驱直接指向它的后继,再把结点删除。

4、添加员工信息Status InsertData(LinkList &L)——依次输入新的员工信息,使用前插法插入到链表中。

5、修改员工信息Status ChangeData(LinkList &L)——查找到该结点,然后重新输入该结点信息。

6、输出全部信息Status AllPrint(LinkList L)——输出全部员工信息。

7、主函数int main()——使用while循环和switch对功能进行调用,使用清屏函数,使界面更理想。

代码实现

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
typedef int Status;
#define OK 1
#define ERROR 0
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;
Status CreatList(LinkList &L)//创建通讯录
{
    L=new ListNode;
    L->next=NULL;
    printf("请输入目前通讯录中将要存入的员工个数:\n");
    LinkList p,r;
    DataType d;
    int n;
    scanf("%d",&n);
    r=L;
    printf("请分别输入该员工的编号、姓名、办公室电话、手机号码和邮箱号:\n");
    for(int i=0;i<n;i++){//后插法
        p=new ListNode;
        scanf("%s",d.num);
        scanf("%s",d.name);
        scanf("%s",d.phone);
        scanf("%s",d.call);
        scanf("%s",d.mail);
        p->data=d;//赋值颠倒导致出错
        p->next=NULL;
        r->next=p;
        r=p;
    }
    return OK;
}
Status GetData(LinkList L)//查找员工信息
{
    printf("请输入该员工的编号或姓名:\n");
    char c[10];
    scanf("%s",c);
    LinkList p;
    p=L->next;
    DataType da;
    while(p){
        da=p->data;
        if(strcmp(c,da.num)==0||strcmp(c,da.name)==0)//搞错strcmp的用法
        {
            printf("该员工的信息如下:\n");
            printf("编号:%s\n",da.num);
            printf("姓名:%s\n",da.name);
            printf("办公室电话:%s\n",da.phone);
            printf("手机号码:%s\n",da.call);
            printf("邮箱:%s\n",da.mail);
            return OK;
        }
        p=p->next;
    }
    printf("查无此人\n");
    return OK;
}
Status DeleteData(LinkList &L){//删除员工信息
    printf("请输入该员工的编号或姓名:\n");
    char c[10];
    scanf("%s",c);
    LinkList p,q;
    p=L;
    DataType da;
    while(p->next){
        q=p;
        p=p->next;
        da=p->data;
        if(strcmp(c,da.num)||strcmp(c,da.name))//字符串比较
        {
            q->next=p->next;
            delete p;
            return OK;
        }
    }
    return ERROR;
}
Status InsertData(LinkList &L)//添加员工信息
{
    LinkList p;
    printf("请分别输入该员工的编号、姓名、办公室电话、手机号码和邮箱号:\n");
    p=new ListNode;
    scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.phone,p->data.call,p->data.mail);
    p->next=L->next;
    L->next=p;
    return OK;
}
Status ChangeData(LinkList &L){//修改员工信息
    printf("请输入该员工的编号或姓名:\n");
    char c[10];
    scanf("%s",c);
    printf("请输入该员工的新信息\n");
    LinkList p;
    p=L->next;
    while(p){
        if(strcmp(c,p->data.num)==0||strcmp(c,p->data.name)==0)
        {
            scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.phone,p->data.call,p->data.mail);
            return OK;
        }
        p=p->next;
    }
    return ERROR;
}
Status AllPrint(LinkList L){//全部输出员工信息
    LinkList p;
    p=L->next;
    printf("全部员工的信息如下:\n");
    while(p){
     printf("编号:%s\n",p->data.num);
     printf("姓名:%s\n",p->data.name);
     printf("办公室电话:%s\n",p->data.phone);
     printf("手机号码:%s\n",p->data.call);
     printf("邮箱:%s\n",p->data.mail);
     p=p->next;
    }
    return OK;
}
int main(){
    LinkList L;
    int m;
    while(m!=0)
    {
    printf("-----------员工通讯录系统-----------\n");
    printf("0、退出系统\n");
    printf("1、新建通讯录\n");
    printf("2、查询员工信息\n");
    printf("3、添加员工信息\n");
    printf("4、删除员工信息\n");
    printf("5、修改员工信息\n");
    printf("6、输出全部员工信息\n");
    printf("请输入您的选择:\n");
    scanf("%d",&m);
    switch(m){
    case 0:
        printf("感谢您的使用!\n");
        return 0;
    case 1:
        if(CreatList(L))
            printf("新建成功!\n");
        else
            printf("创建失败\n");
        break;
    case 2:
        GetData(L);
        break;
    case 3:
        if(InsertData(L))
            printf("添加成功!\n");
        else
            printf("添加失败\n");;
        break;
    case 4:
        if(DeleteData(L))
            printf("删除成功!\n");
        else
            printf("查无此人\n");
        break;
    case 5:
        if(ChangeData(L))
            printf("修改成功!\n");
        else
            printf("查无此人\n");
        break;
    case 6:
        AllPrint(L);
        break;
    default:
        printf("没有该选项!\n");
        break;
    }
    system("pause");//清屏
    system("cls");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/DEAR_CXN/article/details/86556050
今日推荐