基于顺序表基础实现通讯录项目
基于顺序表基础实现通讯录项目
- 前言
- 通讯录的实现
前言
Hello,亲爱的CSDN的小伙伴们,你们好!基于上一篇博客的基础上,今天我来带领大家实现通讯录项目,上一篇博客在这里哦!顺序表的实现
通讯录的实现
顺序表的实现在上一篇博文中,这里就不再过多讲解了。
我们知道顺序表可以插入内置类型,也可以插入自定义类型。实现通讯录项目,我们要自定义联系人系列内容,再一条一条的插入顺序表中,就构成了我们所知的通讯录。
接下来是代码的实现
通讯录的头文件
#define NAME_MAX 20
#define GENDER_MAX 10
#define AGE_MAX 20
#define TEL_MAX 20
#define ADDR_MAX 100
typedef struct personInfo
{char name[NAME_MAX];char gender[GENDER_MAX];int age[AGE_MAX];char tel[TEL_MAX];char addr[ADDR_MAX];
}personInfo;typedef struct SeqList Contract;//通讯录的初始化
void ContractInit(Contract* con);
//通讯录的销毁
void ContractDeatory(Contract* con);
//通讯录的添加
void ContractAdd(Contract* con);
//通讯录的删除
void ContractDel(Contract* con);
//通讯录的修改
void ContractModefy(Contract* con);
//通讯录的展示
void ContractShow(Contract* con);
//通讯录的查找
void ContractFind(Contract* con);
通讯录的源文件
#include"Contract.h"
#include"SeqList.h"
void ContractInit(Contract* con)
{SLInit(con);
}void ContractDeatory(Contract* con)
{SLDestory(con);
}void ContractAdd(Contract* con)
{personInfo info;printf("请输入要添加的联系人姓名\n");scanf("%s", info.name);printf("请输入要添加的联系人性别\n");scanf("%s", info.gender);printf("请输入要添加的联系人年龄\n");scanf("%s", &info.age);printf("请输入要添加的联系人电话\n");scanf("%s", info.tel);printf("请输入要添加的联系人地址\n");scanf("%s", info.addr);SLPushback(con, info);}int FindByName(Contract* con, char name[])
{for (int i = 0; i < con->size; i++){if (0 == strcmp(con->arr[i].name, name)){return i;}elsereturn -1;}
}void ContractDel(Contract* con)
{//要删除的数据必须要存在、//查找char name[NAME_MAX];printf("请输入要删除的联系人姓名:\n");scanf("%s", name);int find = FindByName(con, name);if (find < 0){printf("要删除的数据不存在\n");return;}SLErase(con, find);printf("删除成功\n");
}
void ContractShow(Contract* con)
{printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");for (int i = 0; i < con->size; i++){printf("%s %s %d %s %s\n",con->arr[i].name,con->arr[i].gender,con->arr[i].age,con->arr[i].tel,con->arr[i].addr);}
}void ContractModefy(Contract* con)
{char name[NAME_MAX];printf("请输入要修改的联系人姓名:\n");scanf("%s", name);int find = FindByName(con, name);if (find < 0){printf("要修改的数据不存在\n");return;}printf("请输入新的联系人姓名:\n");scanf("%s", con->arr[find].name);printf("请输入新的联系人性别:\n");scanf("%s", con->arr[find].gender);printf("请输入新的联系人年龄:\n");scanf("%d", con->arr[find].age);printf("请输入新的联系人电话:\n");scanf("%s", con->arr[find].tel);printf("请输入新的联系人地址:\n");scanf("%s", con->arr[find].addr);printf("修改成功\n");
}void ContractFind(Contract* con)
{//查找char name[NAME_MAX];printf("请输入要查找的联系人姓名:\n");scanf("%s", name);int find = FindByName(con, name);if (find < 0){printf("要查找的数据不存在\n");return;}printf("%s %s %s %s %s\n", "姓名", "性别", "年龄", "电话", "地址");printf("%s %s %d %s %s\n", con->arr[find].name, con->arr[find].gender, con->arr[find].age, con->arr[find].tel, con->arr[find].addr);}
需要注意的是,这里的头文件和源文件需要结合顺序表的实现一起写,大家可以翻稳定主页寻找码源。
(完)
相关文章:
基于顺序表基础实现通讯录项目
基于顺序表基础实现通讯录项目 前言通讯录的实现 前言 Hello,亲爱的CSDN的小伙伴们,你们好!基于上一篇博客的基础上,今天我来带领大家实现通讯录项目,上一篇博客在这里哦!顺序表的实现 通讯录的实现 顺序表的实现在…...
加班的员工,循环的电池
宁德时代回应"896" 6月17日,宁德时代因内部宣告「实行 895 工作制,大干 100 天,外籍人员不强制」冲上热搜,虽后来辟谣 只是发出号召,并无强制员工实行"895"工作制,但舆论并无消退。 昨…...

windows安装Nacos并使用
Nacos(前身为阿里巴巴的Nacos Config和Nacos Discovery)是一个开源的动态服务发现、配置和服务管理平台,由阿里巴巴开发并维护。它提供了一种简单且易于使用的方式来管理微服务架构中的服务注册、发现和配置管理。 主要功能包括:…...

准备篇(三)网页相关知识
Java script小脚本 - 爬取 bilibili 表情Java script 小脚本 - 爬取 bilibili 表情 随便点开一个视频,注意这个页面 URL 对应的 HTML 代码中没有表情的代码, 需要先点一下评论区,然后再在这个页面 URL 对应的元素中找到表情所在的源码。(但是我不知道这个带表情 <pic…...

基于SSM的医药垃圾分类管理系统
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的医药垃圾分类管理系统,java项目…...
web 应用防火墙的作用是什么
产品定义 Web应用防火墙(原生版)(CT-WAF,Web Application Firewall,简称WAF)为用户Web应用提供一站式安全防护,对Web业务流量进行智能全方位检测,有效识别恶意请求特征并防御&#…...
搜索框回车刷新表格(解决搜索框回车刷新页面问题)
问题:解决搜索框回车刷新页面问题 在 Vue 中,keyup.enter.native 用于监听键盘的回车事件并调用 handleQuery 方法。如果页面在按下回车键后整个刷新,这通常不是 Vue 组件内部行为导致的,而是可能由于以下原因: 表单默…...

洞察用户需求,Xinstall数据统计App让你的App运营如虎添翼
在互联网时代,App推广和运营面临着前所未有的挑战。流量红利逐渐衰退,用户获取成本不断攀升,如何确保在多变的互联网环境下,迅速搭建起能时刻满足用户需求的运营体系,成为众多企业急待解决的问题。今天,我们…...
如何正确的报考志愿
高考,作为中国学子人生中的一次重要考验,不仅关系到学生的未来发展方向,也关系到家庭和社会的期待。在高考分数受限的条件下,选择一个心仪的专业还是选择一个知名度更高的学校,成为了许多考生和家长面临的难题。本文将…...
go的reflect实战
架构设计,有处设计,需要将string类型转为instance的实际类型,不更改业务代码的前提下,修改接口数据 因为涉及到unmarshal,因此要先判断instance中的存储的值是否已经是一个指针 如果不是,则需要包装为一个指…...
【学习】常用的分类网络
1. LeNet 提出时间:1998年最新版本:原始版本使用的数据集格式:MNIST(28x28灰度图像)优点: 结构简单,易于理解和实现。对于小规模图像数据集(如MNIST)有很好的表现。缺点…...

3. 向索引库中导入数据
1. 准备数据库对象 import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstr…...
java-冒泡排序 2
### 9. 冒泡排序的变种冒泡排序有许多变种,例如鸡尾酒排序(Cocktail Shaker Sort),它是冒泡排序的双向版本。鸡尾酒排序在每次遍历时,先从左到右,再从右到左,双向 地“冒泡”,使得排…...
记一次面试
Linux查日志,怎么把最后1000行写到另一个文件中 在Linux中,如果你想要查看日志文件的最后1000行并将其写入到另一个文件中,你可以使用tail命令。tail命令默认用于输出文件的最后几行。 以下是如何使用tail命令将日志文件的最后1000行写入到另…...
Linux提升篇-正则表达式
文章目录 前言一、基本正则表达式基本正则表达式(BRE)集合 二、扩展正则表达式扩展正则表达式(ERE)集合 总结 前言 今天要分享的内容是正则表达式,完美掌握正则表达式,才能更好地使用"三剑客"来…...

专利、论文免费检索
数字资源 - 资源导航 - 深圳图书馆 (szlib.org.cn)https://www.szlib.org.cn/digitalResource/index.html...
【Qt】QSettings使用
1. 介绍 QSettings类提供持久的跨平台的应用程序设置存储。 2. 使用 /*********************************************************/ /* main.cpp */ int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;//Settings设置a.setOrganizationName(&quo…...

Js逆向爬虫基础篇
这里写自定义目录标题 逆向技巧断点一 、请求入口定位1. 关键字搜索2. 请求堆栈3. hook4. JSON.stringify 二、响应入口定位:1. 关键字搜索2. hook3. JSON.parse 逆向技巧 断点 普通断点 条件断点 日志断点 XHR断点 一 、请求入口定位 1. 关键字搜索 key关…...

同步时钟系统为何能成为机场时间管理的好伙伴?
在机场这个分秒必争的环境中,精准的时间管理至关重要。同步时钟系统的出现,成为了机场时间管理的得力助手,为机场的高效运行和服务质量的提升发挥了关键作用。 一、同步时钟系统简介 同步时钟系统是一种通过网络技术实现时间同步的高精度计时…...

Robust semi-supervised segmentationwith timestep ensembling diffusion models
时间步合成扩散模型的鲁棒半监督分割 摘要 医学图像分割是一项具有挑战性的任务,由于许多数据集的大小和注释的限制,使得分割更加困难。消噪扩散概率模型(DDPM)最近在模拟自然图像的分布方面显示出前景,并成功地应用于各种医学成像任务。这…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

UE5 音效系统
一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类,将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix,将上述三个类翻入其中,通过它管理每个音乐…...