数据结构课程设计之员工通讯录

0x00 主要思想

     员工通讯录的实现其实就是单链表的简单应用,只要预先定义一个存放通讯录数据信息的结构体,以及相关的指针结点等,然后就是单链表的以希望简单应用用来实现创建、插入、查找、删除、以及其他的相关功能即可。


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;
}
   
  
 

猜你喜欢

转载自HEADS43.iteye.com/blog/2348549