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

本文介绍了一个基于单链表实现的员工通讯录管理系统。系统能够完成员工信息的查询、修改、插入与删除等功能,并实现了通讯录的整体输出。通过具体源代码展示了如何进行数据结构的设计与操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单位员工通讯录管理系统(线性表的应用)
[问题描述]
        为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示]
         可以采用单链表的存储结构,如可定义如下的存储结构:
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;

要点提示:单链表的基本操作。

源代码:

#include<iostream>
using namespace std;
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;

void CreateList_L(LinkList &L)    
{//创建通讯录
	int i,n;
	ListNode *p;
	L=(LinkList)malloc(sizeof(ListNode));
	L->next=NULL;
	cout<<"请输入员工人数:"<<endl;
	cin>>n;
	for(i=1;i<=n;++i)
	{
		cout<<endl<<"请输入第"<<i<<"个员工的信息:"<<endl;
		p=(LinkList)malloc(sizeof(ListNode));
		cout<<"编号";
		cin>>p->data.num; 
		cout<<"姓名";
		cin>>p->data.name;
		cout<<"办公室电话号码";
		cin>>p->data.phone;
		cout<<"手机号码";
		cin>>p->data.call;
		cout<<"邮箱";
		cin>>p->data.mail;
		p->next=L->next;
		L->next=p;
	}
}

void GetdataList_L(LinkList &L)
{//查询员工信息
	ListNode *p;
	int j=0;
	p=L->next;char numm[5];
	cout<<"请输入员工编号:"<<endl;
	cin>>numm;
	while(p)
	{
		if(strcmp(p->data.num,numm)==0)
		{j=1;break;}
		p=p->next;
	}
	if(j)
	{
		cout<<"===编号==="<<"===姓名==="<<"===办公室电话号码==="<<"===手机号码==="<<"===邮箱==="<<endl;
		cout<<"   "<<p->data.num
		<<"       "<<p->data.name
		<<"          "<<p->data.phone
		<<"                "<<p->data.call
		<<"            "<<p->data.mail<<endl;
	}
	else
		cout<<"编号为"<<numm<<"的员工不存在!"<<endl;
}

void ModifydataList_L(LinkList &L)
{//修改员工信息
	ListNode *p;
	int j=0;
	p=L->next;char numm[5];
	cout<<"请输入修改员工的编号:"<<endl;
	cin>>numm;
	while(p)
	{
		if(strcmp(p->data.num,numm)==0)
		{j=1;break;}
		p=p->next;
	}
	if(j)
	{
		cout<<"请输入修改后的员工信息"<<endl;
		cout<<"姓名";
		cin>>p->data.name;
		cout<<"办公室电话号码";
		cin>>p->data.phone;
		cout<<"手机号码";
		cin>>p->data.call;
		cout<<"邮箱";
		cin>>p->data.mail;
	}
	else
		cout<<"编号为"<<numm<<"的员工不存在"<<endl;
}

void InsretdataList_L(LinkList &L)
{//插入员工信息
	ListNode *p;
	p=new ListNode[sizeof(ListNode)];	//创建一个新节点
	cout<<"请输入待插入的员工信息:"<<endl;
	cout<<"编号";
	cin>>p->data.num; 
	cout<<"姓名";
	cin>>p->data.name;
	cout<<"办公室电话号码";
	cin>>p->data.phone;
	cout<<"手机号码";
	cin>>p->data.call;
	cout<<"邮箱";
	cin>>p->data.mail;
	p->next=L->next;
	L->next=p;
}

void DeletedataList_L(LinkList &L)
{//指定位置删除元素
	ListNode *p;
	int j=0;
	p=L;char numm[5];
	cout<<"请输入删除员工的编号:"<<endl;
	cin>>numm;
	while(p->next)
	{
		if(strcmp(p->next->data.num,numm)==0)
		{j=1;break;}
		p=p->next;
	}
	if(j)
	{
		p->next=p->next->next;
		cout<<"删除成功"<<endl;
	}
	else
		cout<<"编号为"<<numm<<"的员工不存在"<<endl;
}

void PrintfList_L(LinkList &L)
{
	ListNode *p;
	int j=0;
	p=L->next;
	cout<<"===编号==="<<"===姓名==="<<"===办公室电话号码==="<<"===手机号码==="<<"===邮箱==="<<endl;
	while(p)
	{
		cout<<"   "<<p->data.num
		<<"       "<<p->data.name
		<<"          "<<p->data.phone
		<<"                "<<p->data.call
		<<"            "<<p->data.mail<<endl;
		p=p->next;
	}
}

void menu()
{
	cout<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<"                         通讯录管理系统"<<endl;
	cout<<"           ◇                                      ◇"<<endl;
	cout<<"                        1、查询员工信息"<<endl;
	cout<<"           ◇           2、修改员工信息            ◇"<<endl;
	cout<<"                        3、插入员工信息"<<endl;
	cout<<"           ◇           4、删除员工信息            ◇"<<endl;
	cout<<"                        5、输出通讯录"<<endl;
	cout<<"           ◇           6、退出系统                ◇"<<endl;
	cout<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<endl;
	cout<<endl;
	cout<<"请选择功能:";
}

int main()
{
	system("color 37");
	cout<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<endl;
	cout<<"           ◇        欢迎进入通讯录管理系统        ◇"<<endl;
	cout<<endl;
	cout<<"           ◆-------◆---------◆---------◆-------◆"<<endl;
	cout<<endl;
	LinkList L;
	cout<<"通讯录为空,建立员工通讯录:"<<endl;
	CreateList_L(L);
	int n;
	while(1)
	{
		system("cls");
		menu();
top:		cin>>n;
		if(n==1)
			GetdataList_L(L),system("pause");
		else if(n==2)
			ModifydataList_L(L),system("pause");
		else if(n==3)
			InsretdataList_L(L),system("pause");
		else if(n==4)
			DeletedataList_L(L),system("pause");
		else if(n==5)
			PrintfList_L(L),system("pause");
		else if(n==6)
		break;
		else
		{
			cout<<"输入有误,请重新输入!"<<endl;
			goto top;
		}
	}
	return 0; 
}

/*
4
001 
a 
123 
456 
789
002 
b 
123 
456 
789
003 
c 123 
456 
789
004 
d 
123 
456 
789
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值