数据结构(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

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)

{

StaffInfo data;

LinkList p = L->next;

cin>>data.number;

while(p)

{

if(data.number == p->data.number)

{

cout<

}

p = p->next;

}

cin>>data.name;

LinkList q = L->next;

while(q)

{

if(data.name == q->data.name)

{

cout<

}

q = q->next;

}

cin>>data.phoneNumber;

cin>>data.e_mail;

add_CinStaffInfo(L, data);

}

打印信息

打印输出员工信息函数;

void print(LinkList &L)

{

LinkList p = L->next;

while(p)

{

cout<data.number<data.name<data.phoneNumber<data.e_mail<

p = p->next;

}

}

查询信息

查询员工信息函数;将员工姓名传入函数,根据姓名是否相同遍历链表,若相同则输出相对应指针所指的员工信息,查询完毕;

void query(LinkList L, string name)//查询

{

LinkList p = L->next;

while(p && p->data.name != name)

{

p = p->next;

}

if(!p)

{

cout<

}

else

{

cout<data.number<data.name<data.phoneNumber<data.e_mail<

}

}

修改信息

修改员工信息函数;(由于题目要求输入员工姓名,对此姓名的员工信息进行修改,根据输入的信息判断修改哪个);这里写的有些繁琐,可根据自己想法调整算法(推荐switch语句)

void modify(LinkList &L, string name)//修改

{

LinkList p = L;

string str, sstr;

while(p->next)

{

if(name == p->next->data.name)

{

cin>>str;

if(str == "name")

{

cin>>sstr;

LinkList q = L;

while(q->next)

{

if(sstr == q->next->data.name)

{

cout<

break;

}

q = q->next;

}

if(q->next == NULL)

{

p->next->data.name = sstr;

break;

}

}

if(str == "tel")

{

cin>>sstr;

LinkList q = L;

while(q->next)

{

if(sstr == q->next->data.phoneNumber)

{

cout<

break;

}

q = q->next;

}

if(q->next == NULL)

{

p->next->data.phoneNumber = sstr;

break;

}

}

if(str == "email")

{

cin>>sstr;

LinkList q = L;

while(q->next)

{

if(sstr == q->next->data.e_mail)

{

cout<

break;

}

q = q->next;

}

if(q->next == NULL)

{

p->next->data.e_mail = sstr;

break;

}

}

}

else

{

p = p->next;

}

}

}

删除信息

删除员工信息函数;依旧用指针p遍历链表,若找到则借助指针q删除;

void del(LinkList &L, string name)//删除

{

LinkList p = L;

LinkList q;

while(p->next)

{

if(name == p->next->data.name)

{

q = p->next;

p->next = q->next;

delete q;

}

p = p->next;

}

if(!p)

{

cout<

}

}

主函数设计

main函数的设计;可根据自己想法调整算法。

int main()

{

LinkList L;

InitList(L);

int n, m;

string operate, nname;

cin>>n;

while(n--)

{

add(L);

}

cin>>m;

while(m--)

{

cin>>operate;

if(operate == "del")

{

cin>>nname;

del(L, nname);

}

else if(operate == "query")//chaxun

{

cin>>nname;

query(L, nname);

}

else if(operate == "modify")//修改

{

cin>>nname;

modify(L, nname);

}

else if(operate == "add")

{

add(L);

}

else if(operate == "print")

{

print(L);

}

}

return 0;

}

题目样例输入输出

样例输入

2

1 aaa 13579246811 aaa@gmail.com

2 csl 13579246833 cls@gmail.com

9

del aaa

query aaa

query csl

modify csl email clsnb@gmail.com

query csl

add 3 cnz 01234567890 cnznb@gmail.com

modify cnz name cnznb

modify cnznb tel 13579246822

print

样例输出

NOT FOUND!

2 csl 13579246833 cls@gmail.com

2 csl 13579246833 clsnb@gmail.com

2 csl 13579246833 clsnb@gmail.com

3 cnznb 13579246822 cnznb@gmail.com

运行结果图

运行结果图

题目样例数据解释

数据解释

样例中,

del aaa 表示删除aaa的信息

query aaa 查询aaa的信息,不存在,输出“NOT FOUND!”

query csl 表示查询csl的信息,输出“2 csl 13579246833 cls@gmail.com”

modify csl email clsnb@gmail.com 表示修改csl的邮箱为“clsnb@gmail.com”

query csl 表示查询csl的信息,输出“2 csl 13579246833 clsnb@gmail.com”

add 3 cnz 01234567890 cnznb@gmail.com 添加一条员工信息

modify cnz name cnznb 修改cnz的name为cnznb

modify cnznb tel 13579246822 修改cnz的tel为13579246822

print 按编号顺序打印通讯录

此博文只用于记录博主学习过程

c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...相关推荐

  1. 数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)

    数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...

  2. 数据结构课程设计:1、单位员工通讯录管理系统(线性表的应用)

                                        单位员工通讯录管理系统(线性表的应用) [问题描述] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话. ...

  3. 数据结构课程设计报告 单位员工通讯录管理系统(线性表的应用)

    题目1.单位员工通讯录管理系统(线性表的应用) [问题描述] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话.手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息的查 ...

  4. 数据结构员工通讯录管理系统 C语言,数据结构课程设计报告单位员工通讯录管理系统.doc...

    班级:计科112 学号: 201100814203 姓名:冯贵阳 PAGE PAGE 42 数 据 结 构 课 程 设 计 实 验 报 告 目录 1.单位员工通讯录管理系统(线性表的应用)---- - ...

  5. 数据结构c语言版第16页,数据结构c语言版

    数据结构c语言版[编辑] 概述 <数据结构C语言版>本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的各种实现方法及综合分析比较 出版信息 ...

  6. 江苏大学公交系统(数据结构与算法课设版C++)

    江苏大学公交系统(数据结构与算法课设版C++) 目录 江苏大学公交系统(数据结构与算法课设版C++) (1)题目要求 (2)功能要求 (3) 结构 (4) 不足 附录 (1)题目要求 为2022级新生 ...

  7. 单位员工通讯录管理系统

    #include<iostream> using namespace std; #include<windows.h> typedef struct { /*员工通讯信息的结构 ...

  8. verilog 自动售货机状态机实现_基于Verilog语言的简单自动售货机-数电课设报告(最终版)最新版...

    <基于Verilog语言的简单自动售货机-数电课设报告.docx>由会员分享,可免费在线阅读全文,更多与<基于Verilog语言的简单自动售货机-数电课设报告(最终版)>相关文 ...

  9. 基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计)

    基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计) 文章目录 基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计) 一.低功耗蓝牙(BLE)的配置和与FPGA通信代码 1.1 低功耗蓝牙的介 ...

最新文章

  1. 30分钟 Keras 创建一个图像分类器
  2. rust大油井频率怎么用_数据量大怎么搞?当然是用这个了!
  3. lisp压盖处理_一种压盖的制造方法
  4. 自我评价中专计算机600作文,自我评价作文600字
  5. c语言奇数阶换房,(完整版)C语言酒店管理系统.docx
  6. [Python学习] 专题六.局部变量、全局变量global、导入模块变量
  7. SAP CRM IBASE的archive方法
  8. React开发(183):ant design 中treeSelect控制选中
  9. 神结合!一招玩转K8s和微服务治理
  10. java mat转csv_MATLAB数据保存成其他格式文件(.csv .xlsx .txt等)通用函数[faruto版本]
  11. GUI练习——列出指定目录内容
  12. 九款优秀的企业项目协作工具推荐
  13. 27款优秀的Android逆向工程工具
  14. 安装使用 GoldenDict 查词神器 (Windows/Mac/Linux)
  15. WORD中插入三线制表格
  16. php 加减法,php加减法
  17. 组态王通过Modbus TCP与ESP32通讯
  18. python开源报表工具_12个最好的开源报表工具
  19. Ubuntu 20.04 LTS 查看 CPU 温度
  20. 学生们共被分为10个等级,包括学魔、学神、学霸、学痞、学弱^

热门文章

  1. 【英语学习】【Level 07】U06 First Time L5 A Different City
  2. Summed-Area Variance Soft Shadow Mapping(SAVSM):一
  3. 递归函数合式分解python_零基础学python-18.2 递归函数与分解递归函数的执行步骤
  4. 理解setState(),异步还是同步?
  5. 怎样实现一个非阻塞的超时重试任务队列
  6. salt实现lamp自动化部署
  7. JSON和JSONP的差别,以及用法
  8. Android集成支付宝支付
  9. 「前端」看懂前端脚手架你需要这篇webpack
  10. ictclas bug修复