数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)
题目要求:
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
操作分为查询(query)、修改(modify)、添加(add)、删除(del)、打印(print)
- 查询:输入员工姓名,输出员工信息,若员工不存在,输出“NOT FOUND!”
- 修改:输入员工姓名、要修改的属性、修改信息。姓名为name、电话为tel、邮箱为email。
- 添加:输入员工编号、姓名、电话号码、邮箱。
- 删除:输入员工姓名,将其从通讯录中删除。
- 打印:输出通讯录。
[输入]
第一行是一个整数n(1<=n<=100),表示通讯录原有n个人。接下来n行是员工信息,每行有编号、姓名、电话号码、邮箱四个员工属性。
接下来输入一个整数m(1<=m<=100),表示有m次操作。接下来是m行操作,每行为一次操作,操作如题意所示。
数据保证编号、姓名不重复;编号小于200且升序给出,名字只由小写字母组成,电话只由数字组成,邮箱只由数字、小写字母、“@”、“.”组成;名字、电话、邮箱字符串长度都不超过20。
[输出]
对于每个query和print,输出查询或打印结果。
头文件
- 所需要的头文件;
#include <iostream>
using namespace std;
建立员工信息结构体和存储结构
- 先创建储存员工信息的结构体:员工编号、员工姓名、员工电话号码、员工邮箱;
typedef struct
{
int number;
string name;
string phoneNumber;
string e_mail;
}StaffInfo;
- 用单链表的存储结构存储员工信息:数据域和指针域;
typedef struct SNode
{
StaffInfo data;
struct SNode *next;
}SNode, *LinkList;
单链表初始化
- 初始化单链表;
void InitList(LinkList &L)
{
L = new SNode; //生成新结点作为头结点
L->next = NULL; //头结点指针域置空
}
添加信息
- 添加员工信息:while循环遍历链表,使r指向尾结点;将传进来的员工信息赋给新结点的数据域;使用尾插法建立员工信息链表;
void add_CinStaffInfo(LinkList &L, StaffInfo staffData)
{
LinkList r, s;
r = L;//尾指针r指向头结点
while(r->next && (r->next->data.number < staffData.number))
{
r = r->next;
}
if(r->next == NULL)
{
s = new SNode;//生成新结点
s->data = staffData;
s->next = NULL;
r->next = s;
}
}
- 输入员工编号姓名,while循环遍历链表,保证员工编号姓名唯一;继续输其他信息,之后调用添加函数,将员工信息传进函数,执行添加操作;
void add(LinkList &L<