数据结构课设任务内容

ⅰ亾dé卋堺 提交于 2020-02-12 23:09:42

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

【问题描述】

  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员工编号的信息。
在这里插入图片描述

个人觉的写的还不算好,但也能凑合着用。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!