赞
踩
[问题描述]
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示]
可以采用单链表的存储结构,如可定义如下的存储结构:
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;
一、需求分析
1.设计“员工信息管理系统”,使其实现对员工信息的建立、查询、删除、修改和遍历操作。
2.数据包括:员工编号、姓名、办公室电话号码、手机号码、邮箱等。
3.能够对其中的员工信息进行修改和删除。
4.能够实现对所有员工信息的遍历。
5.能够实现查找功能:
完成按员工的员工号查询员工的相关信息,并显示。
二、算法设计(算法思想,算法设计分析,流程图)
GetdataList_L(LinkList &L) //创建通讯录
ModifydataList_L(LinkList &L)//修改员工信息
InsretdataList_L(LinkList &L)//插入员工信息
DeletedataList_L(LinkList &L)//指定位置删除元素
PrintfList_L(LinkList &L)//输出通讯录
GetdataList_L(LinkList &L)//查询员工信息
1.算法思想
为建立单位员工通讯录系统,要实现多种功能,先要实现将员工的信息录入、保存等基本操作。需要把相应的信息录入对应的员工里,其次是实现这些信息的查询、修改、删除功能,并且能直接输出整个所有员工信息等。而这些所有的实现需要我们特别熟悉链表的基本操作。
2.算法设计分析
对于这个算法的设计,用链表解决此问题。所以我们要先建立一个链表,链表的节点信息保存的有员工姓名、员工编号、员工办公室电话号码、手机号、员工邮箱等信息。而链表的节点信息保存的有员工信息及其指针域。然后我们添加员工信息,对于刚来的员工我们将其放到节点的表尾。在添加之前我们要进行一项操作,及遍历链表找到其尾指针,然后开辟一个节点并将其加在链尾。我们还可以进行员工信息查询操作,在进行查询时我们先要遍历整个链表。然后在遍历的同时与关键字进行比较从而找到员工信息并输出,员工信息删除操作,也是如此,此操作首先要找到要删除的员工信息,然后将此节点的前一节点的后续指针直接指向要删除的结点的后续指针,并且释放要删除的结点空间即可。员工信息修改,首先找到要修改的员工,然后输入要修改的员工信息,将要修改的员工信息输入其中即可,这就是要完成的实验目的的过程。
四、课设总结(收获及体会)
当我第一次看到单位员工通讯管理系统时,感觉无从下手。然后看到是线性表的应用,就有头绪了,这也增进了我们算法设计的兴趣。就是把以前的代码改改就行了,BUT还是不行,问题出现了,线性表的基本操作代码data值只有一个,员工通讯录管理系统data值有好多,是结构体类型不是char类型。虽然其中有很大的困难,但是在自己和同学们的帮助下,有了不少的收获,理解了程序代码,完成了作业,对程序输出界面也根据别人的优秀代码改了改。对于一个问题的解决不一定局限于死的答案,只有对问题的思想有一个很好的了解才算真正的理解和学会,还有就是要善于向学习别人。
#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)); //生成新的结点p
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; //将新的结点*p插入到头结点之后
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)//strcmp(str1,str2),若str1=str2,则返回零;
//若str1>str2,则返回正数;若str1<str2,则返回负数。
{
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 27"); //[此项设置系统背景,默认黑框]
cout << endl;
cout << " -*-----------------*----------------*-" << endl;
cout << endl;
cout << " 欢迎进入通讯录管理系统 V1.01 " << endl;
cout << endl;
cout << " -*-----------------*----------------*-" << endl;
cout << endl;
LinkList L;
cout << "通讯录为空,建立员工通讯录:" << endl;
CreateList_L(L);
int n;
while (1)
{
system("cls"); //清除系统历史显示
menu();
cin >> n;
if (n == 1)
GetdataList_L(L), system("pause");
else if (n == 2)
PrintfList_L(L),
ModifydataList_L(L), system("pause");
else if (n == 3)
PrintfList_L(L),
InsretdataList_L(L), system("pause");
else if (n == 4)
PrintfList_L(L),
DeletedataList_L(L), system("pause");
else if (n == 5)
PrintfList_L(L), system("pause");
else if (n == 6)
break;
else
{
cout << "输入有误,请重新输入!" << endl;
}
}
return 0;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。