通讯录

news2024/11/25 22:40:39

在写一个程序前需要了解的知识,需要对通讯录的流程了如指掌,才能写出一个完整的程序 。

  1. 写一个主函数,里面包含菜单、对菜单的选择、以及循环。
  2. 创建个人信息结构体,多人构成的结构体数组。
  3. 分析每一个函数:

1).增加信息:首先需要判断通讯录中人数是否超过结构体数组的最大范围,超过了就没有增加的必要(也会出现数组越界问题);其次就是增加个人信息(姓名、年龄、性别、地址、电话);最后就是通讯录中的个数增加。

2).删除信息:首先需要判断通讯录中是否存在一个人,如若不存在,也会出现数组越界问题;其次就是输入你想要的删除人的姓名;将输入删除人的姓名与结构体数组的所有人的姓名进行比较找到其下标,找不到返回-1;然后就是将后面所有的人的个人信息往前挪(复制);最后就是通讯录中的个数减少。

3).查找信息:这个与前两个不一样,这个首先是需要知道你要输入查找人的姓名:然后就是找到姓名对应数组下标,找不到返回-1;最后就是打印这个人的个人信息。

4).修改信息同样需要输入姓名、找其下标【重复操作,可以封装一个进行对比的函数】;然后再重新输入个人信息。

5).显示信息:这个就是打印所有人的个人信息。  

主函数 

 主函数一般都是单独一个源文件。在每一个程序中有且只有一个主函数,让我们看看通讯录的主函数包含什么、与其他程序的主函数有什么区别。

包含:以结构体为主的主函数 都需要创建一个信息,就像声明一个变量一样先创将一个变量con,而con的类型则是Per。然后就是需要初始化con,菜单、选择等。

区别:这个与扫雷、三子棋等程序的主函数没什么区别,只是声明变量时结构体的声明不一样、传参是用的是指针,其他没什么不一样。

int main()
{
	int input = 0;
	//创建信息
	Per con;
	//初始化
	InitContact(&con);
	do
	{
		menu();
		printf("请输入你选择的数字:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddContact(&con);
			break;
		case 2:
			DelContact(&con);
			break;
		case 3:
			SearchContact(&con);
			break;
		case 4:
			ModifyContact(&con);
			break;
		case 5:
			ShowContact(&con);
			break;
		case 0:
			printf("退出程序!\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
			break;
		}
	} while (input);
	return 0;
}

头文件

结构体在整个程序中都需要使用,所以将结构体的声明放在一个头文件中“contact.h”,还有宏定义也放在头文件中,使用库函数涉及到的头文件,以及各个函数的声明也放入头文件中。还有就是在源文件调用这个头文件时都需要引用头文件 。

宏定义

每一个数组都使用宏定义,目的是以后想要改变数组的最大范围更方便修改。

结构体的声明

       在通讯录中,想要对其进行修改(增删改查)首先需要知道其姓名,再进行修改。但使用一部新的手机前通讯录列表是空的无法进行修改,所以需要增加个人信息(姓名、年龄、性别、地址、电话等详细信息,为了各方面找)。想要存各种信息,使用数组是不可以的(类型不统一),那就只能使用结构体进行存储。 

下面来看看结构体是如何创建的:结构体包含多种类型,就通讯录来说:需要姓名、年龄、性别、地址、电话,这些中年龄是int类型,其它都是char类型且一个信息所占的空间是不一样的(像姓名与性别需要的字节不一样)。(typedef就是将struct Stu类型简单的用S简写)

 这个只是一个人的个人信息,在手机通讯录中可以存储很多人,这是需要创建一个结构体数组(data),还需要一个变量计算通讯录中人的个数(sz),这两个的类型不一致同样需要一个结构体。(typedef就是将struct P类型简单的用Per简写)

源文件 

 单独创建一个源文件用来存放程序的主体(增删改查等函数)

初始化信息 

初始化这个函数将通讯录设置初始模式(不存在一个人),memset库函数是将结构体数组中的信息全部置为0,第一个参数是数组名,第二个是赋值为0,第三个参数是结构体数组中首元素所占的字节数。 

增加信息

先判断通讯录中的人数是否达到最大容纳量,没有就可以添加信息。添加信息需要输入pc中的data[pc->sz]中的姓名,输入pc中的data[pc->sz]中的年龄、性别、地址、电话,然后再将pc中的sz++,这样一个信息就添加了。

删除信息

先判断通讯录是否可以删除,可以的话就输入想要删除的姓名;寻找下标可以封装一个函数,找到返回下标找不到返回-1;返回下标后将下标后的信息全部往前挪(即复制),这里不需要将每一个详细的信息都复制,复制结构体数组就可以了,通讯录中的人数减少一个。

 

修改信息

首先需要知道想要修改人的姓名,然后再去寻找通讯录中是否存在这个姓名,存在的话就重新输入一遍数据就可以了,通讯录中的人数不变。

查找信息

 首先需要输入查找的姓名,然后再去寻找通讯录中是否存在这个姓名,存在就打印各个信息,这个也不改变通讯录的人数。

显示信息

 显示信息就是将通讯录中所有详细信息都打印出来。

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

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

相关文章

webstorm修改主题色和配色常用插件(全部实用)包含主题、界面、开发效率等

Windows 用户打开setting 选择配色 更换主题看这里 效率插件 Rainbow Brackets 推荐理由:用各种鲜明的颜色显示括号,这样可以很容易分清楚括号配对问题。 Key promoter 推荐理由:只要是鼠标操作能够用快捷键替代的,Key Promoter…

若依漏洞综合利用工具

若依漏洞综合利用工具 安装与使用 该工具使用java开发,环境要求:JDK1.8版本 java -jar “文件名” 即可打开图形化界面。 注意查看"必看操作说明"模块。 1.首先下载好几个必要模块。 然后把openjfx-17.0.11_windows-x64_bin-sdk放在D盘根…

音视频入门基础:AAC专题(1)——AAC官方文档下载

一、AAC简介 高级音频编码(英语:Advanced Audio Coding,AAC)是有损音频压缩的专利数字音频编码标准,由Fraunhofer IIS、杜比实验室、贝尔实验室、Sony、Nokia等公司共同开发。出现于1997年,为一种基于MPEG…

【python因果推断库14】饮酒年龄 - 贝叶斯分析

目录 饮酒年龄 - 贝叶斯分析 主效应模型 交互模型 将连续变量以治疗阈值为中心 饮酒年龄 - 贝叶斯分析 这个例子使用了回归断点设计来探讨最低合法饮酒年龄(在美国为21岁)对全因死亡率的因果效应。数据集来自carpenter2009effect 的一项研究。 impo…

C语言蓝桥杯:语言基础

竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_search函数,用于查找…

yolov8实现图片验证码识别

1、环境准备 1.1、安装miniconda 地址:Index of /anaconda/miniconda/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 注意:为避免不兼容的问题,推荐下载py38版本,我下载的是Miniconda3-py38_23.1.0-1-Windows-x86_…

【Java 类与对象】多态

空山新雨后 天气晚来秋 目录 多态的概念 多态实现条件 多态的转型 向上转型 向下转型 instanceof 关键字 方法的重写 Override注解 重写的权限 只能重写继承而来的方法(1) final、static 不能被重写(2) 重写的方法不能带有等级更严…

向量——通俗地解释

1. 向量 向量是一个既有大小(模)又有方向的对象,它可以用来描述空间中的位置、力或速度等量。我们可以从物理、数学和计算机的角度来看待向量,这三种观点看似不同却有关联。 (1)在物理专业视角下,向量是空间中的箭头&a…

KubeBlocks 如何降低管理多种数据库的学习门槛

什么是 KubeBlocks KubeBlocks 是一个开源的 Kubernetes 数据库 operator,能够帮助用户在 Kubernetes 上运行和管理多种类型的数据库。据我们所知,大多数数据库 operator 通常只能管理某种特定类型的数据库,例如: CloudNativePG…

秋招突击——算法练习——9/4——73-矩阵置零、54-螺旋矩阵、48-旋转图像、240-搜索二维矩阵II

文章目录 引言复习新作73-矩阵置零个人实现 54-螺旋矩阵个人实现参考实现 48-旋转图像个人实现参考实现 240-搜索二维矩阵II个人实现参考实现 总结 引言 秋招开展的不是很顺利,还是要继续准备,继续刷算法!不断完善自己,希望能够找…

Jupyter notebook配置与使用(安装过程+环境配置+运行实例)

前言 Jupyter Notebook 是一个开放源代码的 Web 应用程序,它允许创建和共享包含实时代码、方程式、可视化和叙述性文本的文档。 主要功能: 交互式计算:用户可以直接在浏览器中编写和执行代码。Markdown 支持:使用 Markdown 格式来…

一道迭代器失效练习题

随便写写 首先学习迭代器失效 传送门 : C—浅谈迭代器失效 学完迭代器失效之后做一道题呗 题目 分析 vector的迭代器为啥会失效 1、插入的时候扩容,转移空间出现野指针 2、删除的时候移动了元素,导致指针没指向正确的元素 list的迭代器为啥会失效 li…

pdf怎么压缩?分享5种压缩PDF文件的方法

pdf怎么压缩?PDF文件的压缩在日常办公和学习中尤为重要,它不仅能够大幅度缩减文件大小,节省宝贵的存储空间,还能加快文件在网络中的传输速度,提升工作效率。特别是在处理包含大量图像或复杂布局的PDF文档时&#xff0c…

Http带消息头两种请求办法

API接口最近经常碰到,协调几个乙方来回对接,把我折腾晕了,索性自己写一个小的工具,导入历史数据。 获取平台免登录token 接口说明 URL Path:gateweb/bigm-dm/openApi/ologin/openLogin 说明:第三方免登…

vue2 wavesurfer.js(7.8.5)简单使用

文档地址&#xff1a;https://wavesurfer.xyz/docs/ <template><div><el-row><el-card class"card"><div id"waveform" ref"waveform"></div></el-card></el-row><div>总时长&#xff1…

004——双向链表和循环链表

目录 双向链表 双向链表的初始化&#xff08;与单链表类似&#xff09; 增&#xff1a; Ⅰ&#xff09;头插法 Ⅱ&#xff09;尾插法 Ⅲ&#xff09;中间插入 删 改 查 整体代码示例&#xff1a; 循环链表 循环单链表 ​编辑 循环双链表 双向链表 不同于单链表&…

亲测可用导航网站源码分享 – 幽络源

幽络源为大家分享一套经过亲测可用的导航网站源码。初看这套PHP源码时&#xff0c;其数据库结构更像是商城系统源码&#xff0c;但经过某位小天才的修改&#xff0c;它已变成一个功能完备的导航网站。经过站长的测试&#xff0c;该源码运行良好&#xff0c;简单部署即可使用&am…

基于springboot的在线租房系统设计与实现

项目描述 这是一款基于springboot的在线租房系统 截图

438.找到字符串中所有字母异位词

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;滑动窗口&#xff09; 很容易想到&#xff0c;这个题目要求我们在字符串s中找到一个定长的窗口让窗口里面出现异位词。 OK&#xff0c;先思考一下怎么快速判断两个字符串是否是异位词&#xff1f; 比较简单的方法是…

AV1 Bitstream Decoding Process Specification:约定

原文地址&#xff1a;https://aomediacodec.github.io/av1-spec/av1-spec.pdf没有梯子的下载地址&#xff1a;AV1 Bitstream & Decoding Process Specification摘要&#xff1a;这份文档定义了开放媒体联盟&#xff08;Alliance for Open Media&#xff09;AV1视频编解码器…