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

2023-05-16

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

运行结果图

运行结果图

af30b13ce5dc139706d368f02b0bec7e.png

题目样例数据解释

数据解释

样例中,

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 按编号顺序打印通讯录

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • iOS 录音,播放并上传

    1 界面布局 xff0c 以及相关功能 点击中间开始录音 xff0c 点击左上角播放或暂停播放 xff0c 点击右上角移除文件 2 定义相关属性 import 34 SendVoiceController h 34 import impor
  • 【Python基础】request.post()方法

    00 序言 爬取懂che帝的车型信息时 xff0c 没太整明白request post 里面的参数是干什么用的 xff0c 所以写篇学习笔记提醒一下自己 url 61 39 https www dongchedi com motor bra
  • 老虎证券web端PWA实践总结

    历时两个月 xff0c PWA功能终于在web端稳定落地使用 xff0c 网站 web itiger com 从最新研究到落地上线 xff0c 遇到不少坑 xff1b 开发过程中也参考了不少资料 xff0c 但总有那么几个是没有答案 xff
  • 硬盘inode节点简单介绍

    一 inode是什么 xff1f 理解inode xff0c 要从文件储存说起 文件储存在硬盘上 xff0c 硬盘的最小存储单位叫做 34 扇区 34 xff08 Sector xff09 每个扇区储存512字节 xff08 相当于0 5K
  • NoMachine 远程桌面控制

    它是一个基于企业级对比套装的开源的终端服务器 它允许用户在连接速度缓慢或者窄带宽的情况下 xff0c 对X11会话进行远程访问 NX项目提供一整套的运行库文件以及优化的来自X11 xff0c SMB xff0c IPP xff0c HTTP
  • Angular之路--带你来搭建Webpack 2 + Angular 4项目

    上个月Angular发布了4 0 0版本 xff0c 少年们 xff0c 赶快学起来吧 xff0c 这篇文章带领大家搭建一个简单的Angular应用 xff0c 会尽量详细的把每个点都解释到 首先我选择了用webpack2来作为打包工具 x
  • C- unsigned :1之位域分析

    1 首先回忆结构体 我们都知道定义一个结构体可以这样的方式定义 struct Point float x float y point 等价于 struct Point point 除此之外 如果不想声明结构体 只想定义结构体的话 还可以这样
  • ShareSDK自定义UI的方法

    说明 xff1a 我们的分享菜单可以修改背景 xff0c 里面的图标以及文字 xff0c 颜色等 xff0c 另外可以自己自定义UI xff0c 用自己的方法写界面 xff0c 写好了之后可以调用我们以下无UI的分享方法 xff0c 另外我
  • HttpServletRequest & HttpServletResponse 中 Body 的获取

    为什么80 的码农都做不了架构师 xff1f gt gt gt 获取 HttpServletRequest 中的请求体 HttpServletRequest getInputStream 获取到请求的输入流 xff0c 从该输入流中可以读取
  • 图像学习之如何理解方向梯度直方图(Histogram Of Gradient)

    特征描述子 Feature Descriptor 特征描述子就是图像的表示 xff0c 抽取了有用的信息 xff0c 丢掉了不相关的信息 通常特征描述子会把一个w h 3 宽高3 xff0c 3个channel 的图像转换成一个长度为n的向
  • SQL查询语句练习题27道

    练习环境为 xff1a XP 43 SQL2000 数据库 练习使用的数据库为 xff1a 学生管理数据库 数据库下载地址为 http download csdn net download friendan 4648150 说明 这是我在学
  • 使用IDEA社区版如何创建SpringBoot项目?

    Spring Boot 就是 Spring 框架的脚 架 xff0c 它就是为了快速开发 Spring 框架 诞 的 首先谈谈SpringBoot的优点 xff1a 1 快速集成框架 xff0c Spring Boot 提供了启动添加依赖的
  • 从零转行数据分析的亲身经历

    作者 xff1a xiaoyu 微信公众号 xff1a Python数据科学 知乎 xff1a python数据分析师 快两周没更新了 xff0c 先跟大家说一下抱歉 最近生活上确实有点忙 xff0c 不过后续将恢复正常 今天和大家聊一个非
  • NodeBB搭建,维护,discuz!数据迁移

    为什么选择了NodeBB 无法回答 NodeBB官方Github NodeBB中文论坛 NodeBB官方文档 NodeBB中文文档 安装 此处的方式是Docker安装部署 https hub docker com r nodebb dock
  • _vimrc

    为什么80 的码农都做不了架构师 xff1f gt gt gt code 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34
  • ubuntu编译qemu报错:‘ERROR: pixman >= 0.21.8 not present.’

    在ubuntu14 04中用源码方式编译安装qemu时 xff0c 执行 configure步骤提示错误 xff1a configure ERROR pixman gt 61 0 21 8 not present Your options
  • mysql my.conf 配置_Mysql my.conf配置说明

    MySQL配置文件my cnf 例子最详细翻译 可以保存做笔记用 BEGIN CONFIG INFO DESCR 4GB RAM 只使用InnoDB ACID 少量的连接 队列负载大 TYPE SYSTEM END CONFIG INFO
  • [译]使用 Rust 编写快速安全的原生 Node.js 模块

    原文地址 xff1a Writing fast and safe native Node js modules with Rust原文作者 xff1a Peter Czibik译文出自 xff1a 掘金翻译计划本文永久链接 xff1a gi
  • Discuz搭建论坛报错:advice_mysqli_connect

    环境说明 xff1a Ubuntu 12 04 3 四块硬盘RAID5 半个月前由于内部办公服务器由于RAID5两块盘出现问题 xff0c 导致部分数据丢失 xff0c 好在SVN数据是实时备份 xff0c 否则就真的哭了 xff0c 由于
  • c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...

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