顺序表第三节(通讯录基础版)

目录

可以先看一遍第二节在看这个         顺序表(第二节)实现和解析-CSDN博客

1.顺序表的头文件

2.初始化通讯录

3.添加通讯录

特殊:查找对应姓名的通讯录的序号 

4.删除通讯录

5.展示通讯录

6.查找通讯录

7.修改通讯录

8.销毁通讯录


可以先看一遍第二节在看这个         顺序表(第二节)实现和解析-CSDN博客

1.顺序表的头文件

#pragma once
#define NAME_MAX 100#define SEX_MAX 4#define TEL_MAX 11#define ADDR_MAX 100
//前置声明
typedef struct SeqList contact;
//用户数据
typedef struct PersonInfo{char name[NAME_MAX];char sex[SEX_MAX];char telenum[TEL_MAX];char adr[ADDR_MAX];
}PeoInfo;
//初始化通讯录
void InitContact(contact* con);
//添加通讯录数据
void AddContact(contact* con);
//删除通讯录数据
void DelContact(contact* con);
//展示通讯录数据
void ShowContact(contact* con);
//查找通讯录数据
void FindContact(contact* con);
//修改通讯录数据
void ModifyContact(contact* con);
//销毁通讯录数据
void DestroyContact(contact* con);

 #pragma once 的意思是同一个头文件只能展开一次。

下面define几个变量。

第一个typedef 是把前面顺序表的结构体重命名为 contact。

第二个typedef 是把你通讯录的结构体类型重命名为 peoinfo。

下面则是每个方法的的接口名称。

2.初始化通讯录

void InitContact(contact* con)
{SLInit(con);
}

很简单调用前面的顺序表的初始化接口即可。 

3.添加通讯录

void AddContact(contact* con)
{PeoInfo info = {0};printf("请输入联系人姓名:\n");scanf("%s", info.name);printf("请输入联系人性别:\n");scanf("%s", info.sex);printf("请输入联系人电话号码:\n");scanf("%s", info.telenum);printf("请输入联系人地址:\n");scanf("%s", info.adr);SLPushBack(con, info);
}

让别人输入4个变量的值的过程,也很简单都是基础  !!!!!! 

特殊:查找对应姓名的通讯录的序号 

int FindByName(contact* con, char name[])
{for (int i = 0; i < con->size; i++){if (strcmp(con->a[i].name, name) == 0){return i;}}return -1;
}

这个函数作为中间函数,可以不用写在头文件里,但对于后面几步的操作确实必不可少的。

首先这个函数查找的是 用名字找位置(当然你也可以用其他的变量的值作为查找值)。

传入两个参数第一个是要查找的通讯录的指针,第二个则是要查找的姓名。

用遍历遍历每一个顺序表的表格中的内容,然后用strcmp函数来做比较,因为字符串比较用不了大小于符号。

strcmp的用法就是对比两个字符串如果都相等则返回0,如果不相等则返回不是0的数。

如果找到了就返回这个 i (这个 i 就是 相同名字在 通讯录的位置。)

找不到就返回-1. 

4.删除通讯录

void DelContact(contact* con)
{printf("请输入要删除的人的姓名:\n");char name[NAME_MAX];scanf("%s", name);int find = FindByName(con, name);if (find >= 0){SLErase(con, find);}else{printf("要删除的联系人不存在。\n");return;}
}

传入通讯录的指针。

然后让用户输入要查找的通讯录姓名,在用 int find 接收 函数返回值。

如果返回的是 i 那就是大于0 的,反之为-1 (上面特殊函数的返回值)。

如果大于0就代表找到了,利用顺序表删除的接口,删除这一格的通讯录信息。

反之就是没找到,打印没找到并返回。 

5.展示通讯录

void ShowContact(contact* con)
{printf("%-4s %-4s %-11s %s\n", "姓名", "性别", "号码", "地址");for (int i = 0; i < con->size; i++){printf("%-4s %-4s %-11s %s\n", con->a[i].name, con->a[i].sex, con->a[i].telenum, con->a[i].adr);}}

展示通讯录就是把通讯录的内容打印出来即可。先做好表头就是把内容都打印好。
然后再用for循环给通讯录的内容一一遍历并打印出来即可。

6.查找通讯录

void FindContact(contact* con)
{char name[NAME_MAX];printf("你要查找的姓名:\n");scanf("%s", name);int find = FindByName(con, name);if (find < 0){printf("你输入的姓名不存在!\n");return;}printf("%-4s %-4s %-11s %s\n", "姓名", "性别", "号码", "地址");printf("%-4s %-4s %-11s %s\n", con->a[find].name, con->a[find].sex, con->a[find].telenum, con->a[find].adr);
}

查找通讯录和删除的前提都是一样的,都是用 findbyname 函数找到对应位置的通讯录。

然后找到了就打印出这一格的通讯录内容即可。 

7.修改通讯录

void ModifyContact(contact* 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->a[find].name);printf("请输入修改后的性别:\n");scanf("%s", con->a[find].sex);printf("请输入修改后的电话:\n");scanf("%s", con->a[find].telenum);printf("请输入修改后的地址:\n");scanf("%s", con->a[find].adr);
}

更改联系人,和上面也一样先用到 findbyname 接口。

然后在对通讯录里的内容进行更改就好。 

8.销毁通讯录

void DestroyContact(contact* con)
{SLDestory(con);
}

销毁通讯录,就用到顺序表的销毁接口就好了。总之通讯录的实现是很快的。 

 9.优化界面(超简易版)

#include"sql.h"
#include"txl.h"
void menu()
{printf("***********************************\n");printf("*****1.添加联系人 2.删除联系人*****\n");printf("*****3.查找联系人 4.查看联系人*****\n");printf("*****5.修改联系人 0.退出通讯录*****\n");printf("***********************************\n");
}
int main()
{contact con;InitContact(&con);int num = 0;do{menu();printf("输入操作数:\n");scanf("%d", &num);switch (num){case 1:AddContact(&con);break;case 2:DelContact(&con);break;case 3:FindContact(&con);break;case 4:ShowContact(&con);break;case 5:ModifyContact(&con);break;case 0:printf("退出!\n");break;default:printf("输入的操作不存在!请重新输入\n");break;}} while (num);DestroyContact(&con);return 0;
}

 最终结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/112756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UE】两步实现“从UI中拖出Actor放置到场景中”

效果 步骤 1. 创建两个actor蓝图 在两个蓝图中分别添加立方体和球体形状的静态网格体组件&#xff0c;注意移动性设置为“可移动” 设置碰撞预设为“NoCollsion” 2. 先创建一个控件蓝图 打开控件蓝图&#xff0c;在画布面板中添加两个按钮 为按钮添加“按压时”和“松开时”的…

全连接网络参数Xavier初始化

1.梯度消失 考虑下图的神经网络&#xff0c;在使用梯度下降法迭代更新W_ki和W_ij时&#xff0c;它们的梯度方向间有什么关系&#xff1f; 它们的梯度关系如下&#xff1a; 从上述两个式子我们大致可以看出&#xff0c;损失函数L关于第h层参数的梯度由两部分组成&#xff1a;…

C++模拟实现——list

一、成员变量及其基本结构 1.基本结构模型 本质是一个带头双向循环列表&#xff0c;将节点进行封装&#xff0c;并且为了方便使用&#xff0c;进行重定义 2.节点的封装定义 template<class T>//定义节点struct list_node{list_node<T>* _prev;list_node<T>…

【标准化封装 SOT系列 】 E SOT-89

〇、SOT-89 这个封装也比较常见&#xff0c;但并不易错。 一、E部分 SOT-89 参数 pin-pin 间距1.5mm body size 4.52.5 二、符合当前标准的典型举例 名称pin 数厂家 body DE矩形 (mm)SOT-894Mini-Circuits – PGA-102 — 4.39/4.62.29/2.59 上图 MiniCircuits 也称DF78…

C# Onnx Yolov8 Detect 路面坑洼检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace Onnx…

线上答题活动小程序结合线下大屏复盘总结

线上答题活动小程序结合线下大屏复盘总结 ~ 说来话长&#xff0c;这个活动也接近尾声了&#xff0c;从刚开始着手开发&#xff0c;到现在已过去半年&#xff0c;好不夸张的&#xff0c;当时从4月份开始接触&#xff0c;现在已经十月份了 该小程序我发下主界面截图&#xff0…

MATLAB中 tf2zpk函数用法

目录 语法 说明 示例 IIR滤波器的极点、零点和增益 tf2zpk函数的功能是将传递函数滤波器参数转换为零极点增益形式。 语法 [z,p,k] tf2zpk(b,a) 说明 [z, p, k] tf2zpk(b, a) 从传递函数参数 b 和 a 中找到零点矩阵 z&#xff0c;极点向量 p&#xff0c;以及相关的增益…

C++类中函数重写(成员函数覆盖)

在本文中&#xff0c;您将学习函数重写。此外&#xff0c;您还将学习如何在C 编程中评估基类的函数重写。继承允许软件开发人员从现有类派生新类。派生类继承基类&#xff08;现有类&#xff09;的功能。假设基类和派生类都具有一个具有相同名称和参数&#xff08;参数的数量和…

C语言之排序

1.冒泡排序 冒泡排序就不多说了&#xff0c;只需要两层循环嵌套&#xff0c;两两比较确定相对正确的顺序即可。 2.插入排序 插入排序的思想就是每一次向后寻找一个再将其与前面有序的部分进行对比&#xff0c;寻找合适位置插入。 这里关键要避免让前移超出目前读取的数字&…

了解多媒体展厅弧幕投影系统收费构成,轻松制定预算

随着数字多媒体技术在内容展示行业中的广泛应用&#xff0c;基于投影、LED等技术手段的多媒体互动装置呈现多样化发展趋势&#xff0c;越来越多的新颖模式出现在大众眼前&#xff0c;其中就包括了备受关注的弧幕投影系统&#xff0c;作为投影技术显示形式的一种&#xff0c;它打…

1600*D. Maximum Sum on Even Positions(贪心)

Problem - 1373D - Codeforces 解析&#xff1a; 显然可以发现&#xff0c;翻转数量为奇数是不影响结果&#xff0c;所以需要反转偶数个连续数字。 考虑贪心&#xff0c;我们每次反转相邻的两个数字&#xff0c;并且累计贡献&#xff0c;如果贡献为0则清空继续累计&#xff0c;…

排序算法,冒泡排序算法及优化,选择排序SelectionSort,快速排序(递归-分区)

一、冒泡排序算法&#xff1a; 介绍&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需…

MT8766核心板详细参数_MTK联发科4G安卓核心板智能通讯模块

MT8766安卓核心板采用四核2.0GHz主频芯片方案&#xff0c;国内4G全网通。12nm先进工艺&#xff0c;支持Android 9.0系统。GPU采用超强 IMG GE8300 。 可流畅适配大数据运算、人脸识别算法、多种识别模式。支持高速LPDDR4/X&#xff0c;主频高达1600MHz。支持EMMC5.1。标配 WIF…

聊聊分布式架构08——SpringBoot开启微服务时代

目录 微服务架构时代 快速入门 入门详解 SpringBoot的自动配置 石器时代&#xff1a;XML配置bean 青铜时代&#xff1a;SpringConfig 铁器时代&#xff1a;AutoConfigurationImportSelector 手写简单Starter SpringApplication启动原理 微服务架构时代 Spring Boot的…

[MAUI]深入了解.NET MAUI Blazor与Vue的混合开发

文章目录 Vue在混合开发中的特点创建MAUI项目创建Vue应用使用element-ui组件库JavaScript和原生代码的交互传递根组件参数从设备调用Javascript代码从Vue页面调用原生代码 读取设备信息项目地址 .NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法&#xff…

数据图册页面(左边一列图片缩略图,右边展示图片大图)

最近要写这么一个页面&#xff0c;左侧一列图片缩略图&#xff0c;点击左侧缩略图后有选中效果&#xff0c;然后右侧展示图片原图&#xff0c;还能够左右翻页查看。 最后写了一个demo出来&#xff0c;demo还不是很完善&#xff0c;需要自己修改&#xff0c;后面我也给出了修改建…

如何处理前端SEO(搜索引擎优化)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

第一节——vue安装+前端工程化

作者&#xff1a;尤雨溪 官网&#xff1a;简介 | Vue.js 脚手架文档 创建一个项目 | Vue CLI 一、概念&#xff08;了解&#xff09; 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&…

在Kubernetes(k8s)上部署整个SpringCloud微服务应用

视频教程地址&#xff1a;https://www.bilibili.com/video/BV1Xh4y1q7aW/ 文章目录 项目准备打成使用Docker打成镜像准备Docker仓库打包项目为Docker镜像 部署应用到k8s创建nfs挂载目录创建一些基本资源创建命名空间创建拉取镜像的secret创建java运行环境的profile 部署mysql创…

c++_learning-c++标准库STL和boost库

c的标准库 STL标准库&#xff1a;#include<iostream>&#xff1a;#include<iomanip>&#xff1a;#include<cstdlib>&#xff1a;#include<cmath>&#xff1a;#include<tuple>&#xff1a;利用可变参数模板&#xff0c;借助“递归继承”或“递归组…