通讯录

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

  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.rhkb.cn/news/421168.html

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

相关文章

图文教程 | 2024年IDEA安装使用教程,JDK简易下载方法

前言 📢博客主页:程序源⠀-CSDN博客 📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正! 目录 一、IDEA安装 二、激活 三、JDK安装 四、JDK环境配置 五、验证 一、IDEA安装 进入官网下载: Other…

模拟网络丢包常用方法以及工具

文章目录 背景常用方法代码实现使用方法测试代码 使用网络流量控制工具 常用工具Clumsy 背景 在软件开发过程中,经常需要模拟不同的网络环境来测试应用在不同条件下的表现。 这些模拟可以采用多种方式进行,包括在代码中实现随机丢包、随机延时、乱序&am…

C++ IO流全解析:标准库中的数据处理与文件读写艺术

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 一: 🔥 C语言的输入与输出 二: 🔥 流是什么 三: 🔥 CIO流🚀 3.1 C标准IO流🚀 ist…

野生动物检测-目标检测数据集(包括VOC格式、YOLO格式)

野生动物检测-目标检测数据集(包括VOC格式、YOLO格式) 数据集: 链接:https://pan.baidu.com/s/1RHpKHAyRyl0FDD4Up3MOmQ?pwdrbjq 提取码:rbjq数据集信息介绍: 共有 1504 张图像和一一对应的标注文件 标…

QStackedWidget类的使用

本文介绍QStackedWidget类的使用。 StackedWidget控件在Qt应用程序开发过程中用的还是比较多的,配合按钮可以实现多个页面之间相互切换,方便了应用程序的开发,本文简要介绍QStackedWidget类实际使用过程中的常用方法,并给出一个简…

Python画笔案例-042 绘制空心十字架

1、绘制空心十字架 通过 python 的turtle 库绘制空心十字架,如下图: 2、实现代码 绘制空心十字架,以下为实现代码: """空心十字架.py """ import turtledef draw_pattern(length):for _ in range(…

Java 学习中使用文件、网络连接等资源时,未正确关闭资源,导致资源泄漏应该怎么办?

在Java编程中,处理文件、网络连接、数据库连接等资源时,如果没有正确关闭资源,就会发生资源泄漏。资源泄漏会导致系统性能下降、内存占用增加,甚至可能导致程序崩溃,特别是在高负载的系统中。 一、什么是资源泄漏&…

仕考网:哈尔滨2024下半年事业单位招考公告

招聘岗位需求计划 本次计划招聘事业单位工作人员共计588名。具体招聘单位、岗位、人数、条件等情况详见《哈尔滨市2024年下半年事业单位公开招聘工作人员岗位计划表》 年龄要求: 满18周岁(2006年9月18日以前出生)、35(含)周岁以下(1988年9月18日及以后出生) 博士…

基于SpringBoot+Vue的考研学习分享互助平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的考研学习…

企业图纸加密软件哪个最好用?10款常用图纸加密软件强力推荐!

在现代企业中,保护图纸和设计文件的安全性至关重要。以下是十款常用且功能强大的图纸加密软件推荐,帮助企业更好地保护其知识产权和敏感数据。 1. 安秉网盾 安秉网盾凭借其强大的加密技术和灵活的权限管理功能,成为企业保护图纸安全的首选。…

JavaScript高级——函数中的this

1、this是什么? ① 任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是 window 。 ② 所有函数内部都有一个变量 this 。 ③ 它的值是调用函数的当前对象。 2、如何确定 this 的值? ① test()&#xff…

强!70.3K star ! 推荐一款功能强大、开源、可视化的性能实时监控系统:Netdata

在当今复杂多变的IT环境中,系统性能的实时监控与分析对于确保业务连续性、系统稳定运行以及快速故障排查至关重要。随着云计算、大数据和微服务架构的普及,对监控系统的要求也日益增高。 今天给大家推荐一款性能监控工具为:Netdata。 它作为一款开源、…

7.测试用例设计方法 + Bug

一、正交实验法 1.使用场景 因果关系比较庞大的情况下,不太适合用因果图判定表,在这种情况下,一般会采用正交实验法。 2.例子: 字符属性设置(4个条件) 字体很多 字符样式很多 …

appium server gui详细按照步骤

1.安装appium server desktop Appium安装提供两种方式:桌面版和命令行版。其中桌面版又分为 Appium GuI 和 Appium Desktop 。作为初学者,用桌面版,对初学者比较友好。 官网下载地址:Releases appium/appium-desktop GitHubTags appium/…

百度经纬度互转高德经纬度_在线经纬度转换工具

简介说明 在线经纬度转换工具主要功能:百度经纬度转高德经纬度,高德经纬度转百度经纬度,坐标拾取,经纬度反查高德坐标拾取器,坐标拾取,经纬度反查百度坐标拾取器,坐标拾取,经纬度反查地图数据批量收集 操作界面 使用入口> 百度经纬度互转高德经纬度_在线经纬度转换工具

如何让Google收录我的网站?

其实仅仅只是收录,只要在GSC提交网址,等个两三天,一般就能收录,但收录是否会掉,这篇内容收录了是否有展现,排名,就是另外一个课题了,如果不收录,除了说明你的网站有问题&…

阿里云rds数据迁移

记录一下rds数据同步操作,官方文档: 跨阿里云账号迁移RDS实例. 背景:不同阿里云账号的rds中指定数据库迁移. 操作说明: 使用阿里云数据传输服务产品,选择数据迁移.注意是从目标阿里云账号的rds中操作,按照文档操作基本上没有问题. 源阿里云账号设置如上. 需要注意的是需要从源…

计算机网络 ---- 电路交换、报文交换、分组交换

目录 零、前言 一、计算机网络发展初期面临的问题 1.1 电路交换的主要特点【电话网络采用电路交换技术】 1.1.1 电路交换的基本知识介绍 1.1.2 电路交换的优缺点 1.3 报文交换技术的特点【电报网络采用报文交换技术】 1.3.1 报文交换的基本知识介绍 1.3.2 报文交换技术…

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组(变成类似list列表的形状)重复一个数组——np.tile 分组聚集——pandas.…

VScode 的简单使用

目录 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 1. VScode 的使用 1.1 常用插件 1.2 常用快捷键 也可以“ CTRLD ”;使用“CTRL滚轮”即可; ctrl /-,是用来展开/收起代码的; 比如:js 的多行注释是 shiftalt…