1.单位员工通讯录管理系统(线性表的应用)
【问题描述】
- 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示] 可以采用单链表的存储结构,如可定义如下的存储结构:
typedef struct { /员工通讯信息的结构类型定义/
char num[5]; /员工编号/
char name[10]; /员工姓名/
char phone[15]; /办公室电话号码/
char call[15]; /手机号码/
char mail[25]; /邮箱/## 标题 }
ElemType; /通讯录单链表的结点类型/
typedef struct
LNode { ElemType data; /结点的数据域/ struct LNode *next;
/结点的指针域/ }LNode,*LinkList;
2.算法设计思路
创建通讯录方法,录入员工信息,当记录第一个员工信息,头节点不再为空,把第一个节点赋予给下一个结点,继续录入,直到完成,把尾结点赋予成空。
创建多个方法
void CreateList(LinkList &L)//创建通讯录
void GetdataList(LinkList &L)//查询员工信息
void ModifydataList(LinkList &L)//修改员工信息
void InsertdataList(LinkList &L)//插入员工信息
void DeletedataList(LinkList &L)//指定位置删除元素
void PrintfList(LinkList &L)//打印员工信息
void Menu()//功能菜单
int main()//主函数
3.源代码(如下)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedef struct{
char num[5];//员工编号
char name[5];//员工姓名
char phone[15];//办公室电话
char call[15];//手机号码
char mail[25];//电子邮箱
}DataType; //数据信息,通讯录单链表的结点类型
typedef struct node{
DataType data;//结点的数据域
struct node *next;//结点的指针域
}ListNode,*LinkList;//ListNode是data结点的数据域类型,*LinkList是node *next结点的指针域类型
void CreateList(LinkList &L)//创建通讯录
{
int i,n;
ListNode *p,*tail;
L=(LinkList)malloc(sizeof(ListNode));
L->next=NULL;
printf("请输入员工的人数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("请输入第%d个员工的信息:",i);
p=(LinkList)malloc(sizeof(ListNode));
printf("员工编号:");
scanf("%s",&p->data.num);
printf("员工姓名:");
scanf("%s",&p->data.name);
printf("办公室电话号码:");
scanf("%s",&p->data.phone);
printf("手机号码:");
scanf("%s",&p->data.call);
printf("电子邮箱:");
scanf("%s",&p->data.mail);
if(i==1){
L->next=p;//插入到尾结点上
tail=p;
}else{
tail->next=p;//将已存入的指针传给L->next
tail=p;
}
}tail=NULL;
p->next=NULL;
}
void GetdataList(LinkList &L)//查询员工信息
{
ListNode *p;
int j=0;
p=L->next;
char number[5];
printf("请输入员工编号:");
scanf("%s",&number);
while(p)
{
if(strcmp(p->data.num,number)==0)
{j=1;break;}//找到了
p=p->next;//未找到接着下一个
}
if(j)
{
printf("===编号======姓名======办公室电话号码======手机号码======邮箱===\n");
printf(" %s| %s| %s| %s| %s|",p->data.num,p->data.name,p->data.phone,p->data.call
,p->data.mail);
}
else
printf("编号为%s的员工不存在!\n",number);
}
void ModifydataList(LinkList &L)
{//修改员工信息
ListNode *p;
int j=0;
p=L->next;char number[5];//头指针节点
printf("请输入修改员工的编号:");
scanf("%s",&number);
while(p)
{
if(strcmp(p->data.num,number)==0)
{j=1;break;}//找到了
p=p->next;//转换到下一个头指针节点
}
if(j)
{
printf("请输入修改后的员工信息");
printf("员工姓名\n");
scanf("%s",&p->data.name);
printf("办公室电话号码\n");
scanf("%s",&p->data.phone);
printf("手机号码\n");
scanf("%s",&p->data.call);
printf("电子邮箱\n");
scanf("%s",&p->data.mail);
}
else
printf("编号为%s的员工不存在",number);
}
void InsertdataList(LinkList &L)//插入员工信息
{//插入员工信息
ListNode *p;
p=new ListNode[sizeof(ListNode)]; //创建一个新节点
printf("请输入待插入的员工信息:");
printf("员工编号\n");
scanf("%s",&p->data.num);
printf("员工姓名\n");
scanf("%s",&p->data.name);
printf("办公室电话号码\n");
scanf("%s",&p->data.phone);
printf("手机号码\n");
scanf("%s",&p->data.call);
printf("电子邮箱\n");
scanf("%s",&p->data.mail);
p->next=L->next;
L->next=p;
}
void DeletedataList(LinkList &L)//指定位置删除元素
{
ListNode *p;
int j=0;
p=L;char number[5];
printf("请输入删除员工的编号:");
scanf("%s",&number);
while(p->next)
{
if(strcmp(p->next->data.num,number)==0)
{j=1;break;}
p=p->next;
}
if(j)
{
p->next=p->next->next;
printf("删除成功");
}
else
printf("编号为%s的员工不存在",number);
}
void PrintfList(LinkList &L)//打印员工信息
{
ListNode *p;
int j=0;
p=L->next;
printf("===编号======姓名======办公室电话号码======手机号码========邮箱===\n");
while(p)
{
printf(" %s| %s| %s| %s| %s|",p->data.num,p->data.name,p->data.phone,p->data.call
,p->data.mail);
p=p->next;
}
}
void Menu()//功能菜单
{
printf(" ◆-------◆---------◆---------◆-------◆\n");
printf(" 通讯录管理系统\n");
printf(" ◇ ◇\n");
printf(" 1、查询员工信息 \n");
printf(" ◇ 2、修改员工信息 ◇\n");
printf(" 3、插入员工信息\n");
printf(" ◇ 4、删除员工信息 ◇\n");
printf(" 5、输出通讯录\n");
printf(" ◇ 6、退出系统 ◇\n\n\n");
printf("\n ◆-------◆---------◆---------◆-------◆\n");
printf("请选择功能:\n");
}
int main()
{
printf("\n<< ◆-------◆---------◆---------◆-------◆---->>\n");
printf("<< ◇ 欢迎进入通讯录管理系统 ◇>>\n");
printf("<< ◆-------◆---------◆---------◆-------◆---->>\n");
LinkList L;
printf("通讯录为空,建立员工通讯录:\n");
CreateList(L);
int n,p=1;
while(p)
{
system("cls");
Menu();
scanf("%d",&n);
if(n==1)
GetdataList(L),system("pause");
else if(n==2)
ModifydataList(L),system("pause");
else if(n==3)
InsertdataList(L),system("pause");
else if(n==4)
DeletedataList(L),system("pause");
else if(n==5)
PrintfList(L),system("pause");
else if(n==6) p=0;
else printf("输入有误,请重新输入!");
}
return 0;
}
4.调试结果图
1.输入员工信息,查看员工信息
2.查询员工成功的信息截图
3.修改员工成功的信息截图
4.插入员工的信息
5.插入和修改成功后的通讯录
6.删除员工成功的信息截图
删除202 和200员工编号的信息。
个人觉的写的还不算好,但也能凑合着用。
来源:CSDN
作者:i_giao_u
链接:https://blog.csdn.net/i_giao_u/article/details/104286051