员工通讯录的实现其实就是单链表的简单应用,只要预先定义一个存放通讯录数据信息的结构体,以及相关的指针结点等,然后就是单链表的以希望简单应用用来实现创建、插入、查找、删除、以及其他的相关功能即可。
0x01 程序源码
//单位员工通讯录管理系统 #include<string.h> #include<ctype.h> #include<malloc.h> #include<limits.h> #include<stdio.h> #include<stdlib.h> #include<io.h> #include<math.h> #include<process.h> #include<iostream> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct { char name[25]; char num[5]; char call[15]; char phone[15]; char mail[25]; }DataType; typedef struct Node { DataType data; struct Node *next; struct Node *t; }Node,*LinkList; // 构造一个空链表并向其中插入数据 int Createlinklist(LinkList &L) { L = (LinkList)malloc(sizeof(Node)); int n; printf("请输入建立通讯录员工的人数:"); scanf_s("%d",&n); LinkList q; L->next = NULL; q = L; for (int i = 0; i < n;i++) { LinkList p; p = (LinkList)malloc(sizeof(Node)); printf(" 员工编号:"); cin >> p->data.num; printf(" 员工姓名:"); cin >> p->data.name; printf(" 手机号码:"); cin >> p->data.call; printf(" 办公室电话:"); cin>>p->data.phone; printf(" 邮箱地址:"); cin>>p->data.mail; p->next = NULL; q->next = p; q = p; } return 0; } //判断链表是否为空并输出p指针结点(查找的前段步骤) LinkList LinkEmpty(LinkList &L) { char number[5]; printf("请输入员工编号:"); scanf_s("%s",number,5); LinkList p = L; if (!(p->next)) { printf("通讯录为空,请先输入后再查询!"); return NULL; } else { while (p!=L->t) if (strcmp(p->next->data.num, number)) p = p->next; else return p; return p; } } //查找出员工 int Findperson(LinkList &L) { LinkList p; p = LinkEmpty(L); if (p->next) { printf("------------------------------------------------\n"); printf("|------------------员工信息--------------------|\n"); printf("| |\n"); printf("| 编号:%s |\n",p->next->data.num); printf("| 姓名:%s |\n",p->next->data.name); printf("| 手机号码:%s |\n",p->next->data.call); printf("| 办公室电话号码:%s |\n",p->next->data.phone); printf("| 邮箱地址:%s |\n",p->next->data.mail); printf("|----------------------------------------------|\n"); printf("|----------------------------------------------|\n"); return 1; } else { printf("对不起,你查无您输入的员工编号,请查证后再重新输入查找!"); return 0; } } //输出员工信息函数 void Showinformation(LinkList p) { printf("-----------------员工信息-----------------\n"); printf(" 编号:%s \n",p->next->data.num); printf(" 姓名:%s \n", p->next->data.name); printf(" 手机号码:%s \n", p->next->data.call); printf(" 办公室号码:%s \n", p->next->data.phone); printf(" 邮箱地址:%s \n", p->next->data.mail); printf("-------------------------------------------\n"); } //修改函数的选择菜单 void menu2() { printf("=============================================\n"); printf("========== 请选择需修改内容 ==========\n"); printf("========== 1.编号 ==========\n"); printf("========== 2.姓名 ==========\n"); printf("========== 3.手机号码 ==========\n"); printf("========== 4.办公室号码 ==========\n"); printf("========== 5.邮箱地址 ==========\n"); printf("=============================================\n"); printf("请输入需修改的选项:\n"); } //修改信息函数 void Modifyinformation(LinkList &L) { char extra[25]; LinkList p; p = LinkEmpty(L); if (p != L->t&&p) { int i; Showinformation(p); menu2(); scanf_s("%d",&i); printf("请输入新的员工信息:"); scanf_s("%s",extra,25); switch (i) { case 1:strcpy_s(p->next->data.num, extra); break; case 2:strcpy_s(p->next->data.name, extra); break; case 3:strcpy_s(p->next->data.call, extra); break; case 4:strcpy_s(p->next->data.phone, extra); break; case 5:strcpy_s(p->next->data.mail, extra); break; } } else { printf("对不起,您输入的编号不存在,请查证后再输入!"); } } //添加成员函数 LinkList Addmember(LinkList &L) { LinkList p; if (!(p = (LinkList)malloc(sizeof(LinkList)))) { printf("对不起,系统不识别,请待会儿重新输入!"); return NULL; } else { printf("===============================================\n"); printf("============请输入新添加的员工信息=============\n"); printf("============ 编号:"); cin >> p->data.num; printf("============ 姓名:"); cin>>p->data.name; printf("============ 手机号码:"); cin>>p->data.call; printf("============ 办公室号码:"); cin>>p->data.phone; printf("============ 邮箱地址:"); cin>>p->data.mail; p->next = L->next;//头插法 L->next = p; printf("添加成功!"); } } //删除成员函数 void Deletemember(LinkList &L) { LinkList p = LinkEmpty(L); LinkList q; if (p != L->t&&p->next != L->t) { q = p->next; p->next = q->next; free(q); printf("已删除!"); } else if (p->next == L->t) { q = p->next; p->next = NULL; L->t = p; free(q); printf("已删除!"); } else { printf("对不起,您输入的编号不存在,请查证后重新选择操作!"); } } //遍历链表输出所有员工信息 void Showall(LinkList &L) { LinkList p = L->next; if (p) { printf(" 编号 姓名 手机号码 办公室号码 邮箱地址 \n"); while (p) { printf("=====================================================================================\n"); printf(" %s %s %s %s %s \n", p->data.num, p->data.name, p->data.call, p->data.phone, p->data.mail); p = p->next; } } } //主函数的选择菜单 void menu() { printf("====================================================\n"); printf("| |\n"); printf("| 欢迎使用员工通讯录管理系统 |\n"); printf("| |\n"); printf("| 请输入您的选择 |\n"); printf("| |\n"); printf("| 1.建立员工通讯录系统 |\n"); printf("| 2.查找员工信息 |\n"); printf("| 3.修改员工信息 |\n"); printf("| 4.添加员工信息 |\n"); printf("| 5.删除员工信息 |\n"); printf("| 6.输出所有员工信息 |\n"); printf("| 0.退出系统 |\n"); printf("| |\n"); printf("| |\n"); printf("====================================================\n"); } //主函数 int main() { LinkList L; int i,j=0; do { system("CLS"); menu(); if (j == 0) { printf("请输入您的选择:"); j++; } else { printf("请继续您的选择;"); } scanf_s("%d",&i,1); switch (i) { case 1:Createlinklist(L); system("pause"); break; case 2:Findperson(L); system("pause"); break; case 3:Modifyinformation(L); system("pause"); break; case 4:Addmember(L); system("pause"); break; case 5:Deletemember(L); system("pause"); break; case 6:Showall(L); system("pause"); break; case 0:printf("已退出,谢谢使用!"); return 0; default:printf("对不起,您的输入错误,已强制退出,请重新登录!"); i = 0; system("pause"); break; } } while (i!=0); return 0; }