一、 单位员工通讯录管理系统(线性表的应用)
[问题描述]
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
[实现提示]
可以采用单链表的存储结构,如可定义如下的存储结构:
typedef struct { /*员工通讯信息的结构类型定义*/
char num[5]; /*员工编号*/
char name[10]; /*员工姓名*/
charphone[15]; /*办公室电话号码*/
char call[15]; /*手机号码*/
char mail[25]; /*邮箱*/
}DataType;
/*通讯录单链表的结点类型*/
typedef struct node
{ DataType data; /*结点的数据域*/
struct node *next; /*结点的指针域*/
}ListNode,*LinkList;
一、算法设计
1.实现提示中已经给出了现成的存储结构,便于我们的实验。不同的是,我在ListNode的结构存储中多加了一项length,还有Datatype类型中的xulie。length用来判断方便计算员工人数。xulie用来存储员工当前在整个员工中排列的序列号。同时为了方便员工的插入,设置一个尾指针,始终接在最后一个结点的后面,并且让他的指针域指向NULL。而在实现员工的查询功能的时候采用查找的关键字是员工的编号,因为员工的编号是唯一可以确定的,其他信息都可以重复,查找不具有唯一确定性。另外再删除的过程中,要对员工所处的位置进行重新的编号,即改变本身的序列号。这样在输出员工信息的时候也比较整齐划一。
各个函数之间的调用关系如下图所示:
main() mainjiemian() |
|||||
write() |
display () |
find() |
update() |
insert() |
remove() |
Mainjiemian() |
2.本程序中包含11个模块
(1)主函数:int main();(2)退出界面:voidexit();
(3)插入员工信息函数:bool insert(Linklist &l);
(4)删除固定员工信息函数:bool remove(Linklist &l);
(5)修改指定员工信息函数:void update(Linklist &l);
(6)查找员工信息函数:void find(Linklist l);
(7)打印员工信息:void display(Linklist l);
(8)显示单个员工信息:void show(Linklist p);
(9)录入员工信息:void write(Linklist &l);
(10)构建一个空的链表:void initlist(Linklist &l);
(11)显示管理系统主界面的函数:void mainjiemian();
3.元素类型、结点类型和指针类型
typedefstruct /*员工通讯信息的结构来行定义*/
{ int xulie; /*员工所处序号*/
char num[50]; /*员工编号*/
char name[50]; /*员工姓名*/
char phone[50]; /*办公室电话号码*/
char call[50]; /*手机号码*/
char mail[50]; /*邮箱*/
}Datatype,*Data;
typedefstruct node /*通讯录单链表的节点类型*/
{ int length;