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

news2024/11/19 15:29:25

目录

可以先看一遍第二节在看这个         顺序表(第二节)实现和解析-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.coloradmin.cn/o/1117022.html

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

相关文章

公司注册类型分类标准是怎样的

公司法上的分支机构、分公司、子公司是什么 - 公司法 (一)以公司股东的责任范围为标准分类 以公司股东的责任范围为标准&#xff0c;亦即以公司股东是否对公司债务承担责任为标准&#xff0c;可将公司分为无限责任公司、两合公司、股份两合公司、股份有限公司和有限责任公司。…

调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

调用方出错提示如下&#xff1a; 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。 可能原因&#xff1a; 修改之前的C定义&#xff1a; extern "C" __declspec(d…

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分:CI CD、设计模式、数据库

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分&#xff1a;CI CD、设计模式、数据库前言CI/CD第 1 部分 - 带有 CI/CD 的 SDLC第 2 部分 - CI 和 CD 之间的区别第 3 部分 - CI/CD 管道 Netflix Tech Stack &#xff08;CI/CD Pip…

DNSPod十问李攀:程序员如何卖出全国爆火降温杯?

本期嘉宾 李攀 1030Design创始人 李攀&#xff0c;1030Design创始人。带领团队打造了55度杯、讯飞翻译机、“一个天台”等现象级爆款&#xff0c;荣获Reddot、金点设计等多项国内外知名设计奖项&#xff0c;在公司战略、品牌定位、产品创新及新零售等领域有着丰富的经验。北京…

10G SFP+线缆选购指南

凭借低成本和易安装的优势&#xff0c;在10G速率短距离传输中SFP线缆比SFP光模块更受欢迎。本文将从类型、优势、应用和选购指导等方面为您介绍10G SFP线缆&#xff0c;旨在帮助您更快做出购买决策。 10G SFP线缆&#xff1a;定义和类型 SFP线缆是一种高速线缆&#xff0c;两…

非科班,补基础

大家好&#xff0c;我是大彬~ 今天跟大家分享知识星球小伙伴关于【非科班转码如何补基础】的提问。 往期星球提问整理&#xff1a; 读博&#xff1f;找工作&#xff1f; 性格测试真的很重要 想找一份实习工作&#xff0c;需要准备什么 球友提问&#xff1a; 大彬大佬&#xf…

Ubutun配置C语言环境

问题起因 因为老师说上课会给我们一段代码让我们读取这个程序也就是进程的内存&#xff0c;从而破解明文&#xff0c;但老师给的程序是Linux环境的也就是二进制文件&#xff0c;所以来配置一下Linux下的C语言环境 解决方法 首先先下载gcc&#xff0c;因为我以前下载过所以直…

蓝牙音视频远程控制协议(AVRCP)介绍

零.声明 本专栏文章我们会以连载的方式持续更新&#xff0c;本专栏计划更新内容如下&#xff1a; 第一篇:蓝牙综合介绍 &#xff0c;主要介绍蓝牙的一些概念&#xff0c;产生背景&#xff0c;发展轨迹&#xff0c;市面蓝牙介绍&#xff0c;以及蓝牙开发板介绍。 第二篇:Trans…

VT-VSPA1-508-1X/V0替代型模拟放大器

适用于控制所有无电位置反馈的直动式和先导式比例方向阀、比例压力阀。如&#xff1a; DBETX–...–8 DBE6X–...–8 DRE6X–...–8 DBE10Z–...–8 DRE10Z–...–8 通过 24V 输入或跳线改变内部控制值信号极性。 – 通过相位识别&#xff08;24V 输入&#xff09;或斜坡…

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

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

OA和别的系统对接的java文件,调的websevice接口的参考实例

//代码块 package com.bj520.action; import com.alibaba.fastjson.JSON; import com.bj520.service.zs.Webfcs; import com.bj520.service.zs.WebfcsLocator; import com.bj520.util.LogUtil; import com.bj520.util.ZsResultUtil; import weaver.conn.RecordSet; import wea…

Capture One 23 Pro for Mac/win:专业图片编辑的最佳选择

在当今的数字时代&#xff0c;图片编辑软件如雨后春笋般涌现&#xff0c;但并非所有软件都能满足专业摄影师的需求。如果你追求卓越的图像质量、高效的编辑功能和一流的用户体验&#xff0c;那么Capture One 23 Pro无疑是你不二的选择。 Capture One 23 Pro以其出众的图像质量…

python控制负数以16进制整型格式输出

实际使用时候&#xff0c;发现 python输出负数进程是 十进制和16进制一样的&#xff0c;就是16进制多了一个负号&#xff0c;和预期结果不同&#xff1b;比如我想要 -1输出 0xFFFFFFFF&#xff0c;可以参考如下方式&#xff1b; def TestPrintf(): ret -3print("test1 r…

Find My资讯|苹果将推迟至2025年量产AirTag 2,Find My获得市场认可

郭明錤调整今年 8 月关于苹果第二代 AirTag 的预测&#xff0c;表示该产品量产时间从此前的 2024 年第 4 季度&#xff0c;延迟到 2025 年&#xff0c;会进一步推迟新款上市日期。 AirTag 是用于固定在背包、行李和其他物品上的配件。任何搭载 U1 芯片的设备都可以用于精确查…

代码随想录算法训练营第五十八天 | 583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码 72. 编辑距离 链接&#xff1a; 代码随想录 &#xff08;1&#xff09;代码

哪个牌子的台灯对孩子的视力好?对孩子视力好的台灯推荐分享

现在市面上台灯品牌众多&#xff0c;价格不一&#xff0c;品质更是参差不齐&#xff0c;所以要学会如何选择适合孩子的台灯。光源质量是重要因素&#xff0c;光源是直接影响到孩子的视力&#xff0c; 一般来说&#xff0c;光源质量主要看照度、亮度和均匀度、显色指数等&#x…

npm publish发布到在线仓库时,提示:Scope not found

当npm publish发布时&#xff0c;控制台提示&#xff1a;Scope not found&#xff0c;具体错误信息如下&#xff1a; npm notice npm ERR! code E404 npm ERR! 404 Not Found - PUT https://registry.npmjs.org/xxx%2fxxx - Scope not found npm ERR! 404 npm ERR! 404 xxx/xx…

static设置变量的使用方法

重点&#xff1a; 1.长时间不使用static会忘记&#xff0c;记录一下&#xff0c;static变量的设置使用。 class Test { public:Test() default;~Test() default;public:int GetNum() { return m_num; };void SetNum(int num) { m_num num; }; private:static int m_num; }…

springboot188基于spring boot的校园商铺管理系统

项目名称&#xff1a;springboot188基于spring boot的校园商铺管理系统 点击这里进入源码目录 声明&#xff1a; 适用范围&#xff1a; 本文档适用于广泛的学术和教育用途&#xff0c;包括但不限于个人学习、毕业设计和课程设计。免责声明&#xff1a; 特此声明&#xff0c;本…

Android一些新的技术栈,你都会哪些?

Jetpack Compose&#xff1a; Jetpack Compose是一种全新的声明式UI框架&#xff0c;用于构建Android应用的用户界面。它使UI开发更加简单和直观&#xff0c;通过使用Kotlin语言来创建交互式和动态的UI组件。 Kotlin Multiplatform&#xff1a; Kotlin Multiplatform允许开发者…