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

题目要求:

为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。
操作分为查询(query)、修改(modify)、添加(add)、删除(del)、打印(print)

1.查询:输入员工姓名,输出员工信息,若员工不存在,输出“NOT FOUND!”
2.修改:输入员工姓名、要修改的属性、修改信息。姓名为name、电话为tel、邮箱为email。
3.添加:输入员工编号、姓名、电话号码、邮箱。
4.删除:输入员工姓名,将其从通讯录中删除。
5.打印:输出通讯录。

[输入]
第一行是一个整数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)
{StaffInfo data;LinkList p = L->next;cin>>data.number;while(p){if(data.number == p->data.number){cout<<"error"<<endl;}p = p->next;}cin>>data.name;LinkList q = L->next;while(q){if(data.name == q->data.name){cout<<"error"<<endl;}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<<p->data.number<<" "<<p->data.name<<" "<<p->data.phoneNumber<<" "<<p->data.e_mail<<endl;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<<"NOT FOUND!"<<endl;}else{cout<<p->data.number<<" "<<p->data.name<<" "<<p->data.phoneNumber<<" "<<p->data.e_mail<<endl;}
}

修改信息

  • 修改员工信息函数;(由于题目要求输入员工姓名,对此姓名的员工信息进行修改,根据输入的信息判断修改哪个);这里写的有些繁琐,可根据自己想法调整算法(推荐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<<"NOT FOUND!"<<endl;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<<"NOT FOUND!"<<endl;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<<"NOT FOUND!"<<endl;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<<"NOT FOUNT!"<<endl;}
}

主函数设计

  • 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语言)课设1——单位员工通讯录管理系统(线性表应用)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. 数据结构课设——单位员工通讯录管理系统

    问题描述 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话.手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息的查询.修改.插入与删除.以及整个通讯录表的输出. 算法 ...

  7. 单位员工通讯录管理系统(线性表的应用)

    [问题描述] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话.手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息的查询.修改.插入与删除.以及整个通讯录表的输出. ...

  8. 内部排序算法比较-数据结构C语言课设

    名称:内部排序算法比较 内容:在教科书中,各种内部排序算法的时间复杂的分析结果只给出了算法执行时间的阶,或大概执行时间.试通过随机数据比较各种算法的关键字比较次数和关键字移动次数,以取得直观感受. 任 ...

  9. 空气质量等级c语言编程,华中科技大学C语言课设 空气质量检测信息管理系统.docx...

    华中科技大学 计算机科学与技术学院PAGE PAGE \* MERGEFORMAT 128 华中科技大学 计算机科学与技术学院 PAGE \* MERGEFORMAT 1 华中科技大学计算机科学与技术 ...

最新文章

  1. domdocument php charset gbk,PHP DomDocument无法处理utf-8字符(☆)
  2. C++中.lib静态库、.dll动态库的生成及调用2
  3. 故障解决:没有未桥接的主机网络适配器
  4. 记录Nginx模块开发
  5. 服务器修改密码复杂性,【已解决】在windows server 2008域环境中如何禁用密码复杂性要求?...
  6. redo日志写入为什么“俩阶段提交”
  7. wxpython和tkinter哪个好_为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?...
  8. CACHECLOUDV1.0慢日志定时任务创建流程分析
  9. 谈谈C#中的事件注册和注销
  10. matlab调用C语言
  11. 工具类官网Web原型制作分享-Adobe
  12. git 镜像下载和基本使用
  13. 个所税服务器没有企业信息,【重要】企业纳税申报一定要看进来!
  14. 爬虫出现Forbidden by robots.txt
  15. 洛谷P5385 [Cnoi2019]须臾幻境
  16. 安卓一键清理内存_雨点清理安卓版下载-雨点清理官方版下载v1.0
  17. 手机淘宝自动加好友及聊天实现
  18. 达梦数据库修改字段(列)(基表修改语句)
  19. (三)市场调查大赛系列——抽样调查的误差分析和质量控制
  20. pl2303hax已停产_Win10提示“PL2303HXA自2012已停产,请联系供货商”的解决方法

热门文章

  1. python 蓝桥杯--数的读法
  2. 等保测评之安全区域边界
  3. Python websocket之 websocket-client 库的使用
  4. Emby Server入库影片信息推送功能实现
  5. 带负载转矩前馈补偿的永磁同步电机FOC 1.采用滑模负载转矩观测器,可快速准确观测到负载转矩。 赠送龙伯格负载转矩观测器用于对比分析
  6. 谷歌真被ChatGPT搞慌了!两位创始人紧急回归制定战术,搜索广告根基不容有失...
  7. 不能卸载java_java不能完全卸载了,怎么处理???跪求高手指教11
  8. 如何用python画函数曲线_python 画函数曲线示例 用python 怎么画函数图像
  9. AngularJS学习之 ngTable 翻页 功能以及利用angular service准备测试数据
  10. 74161功能表_74161引脚功能表