通讯录的模拟实现(C语言)

news2024/11/19 0:39:16

通讯录要求:

1,联系人要拥有姓名。年龄。性别,电话,地址

2,拥有增加,删除,搜索,修改,展示(所有联系人),退出功能

3,能存储100个人

思路

1,一个text.c,(主函数(大纲))

2,一个contact.c(各种细节函数的内部实现)

3,一个contact.h(所有函数,结构体,枚举等等的声明展示)

4,每个函数我们都要进行assert的断言处理,更加严谨!

前提:两个结构体的创建,以及对重要变量的重定义

联系人结构体和通讯录结构体的声明(contact.h)

联系人结构体要满足题目要求,另外我们还要创建一个通讯录结构体,其应该包含多个联系人结构体(联系人结构体数组)和联系人人数(sz),因为后面增加删除,以及联系人的访问都会用到sz,其次对几个重要变量的重定义,以后方便修改,不用去到处找修改的变量在哪里。

一:text.c

text.c(大纲)的实现,因为用户有多种的选择,所以采取switch case 语句来实现多种功能,并且可以将case后面的1 2 3 4 5 换成各种功能的缩写,这样更易理解。

所以0~5更换成更加易理解的功能缩写,让case语句后面更易理解。

text.c(大纲)的实现:

 text.c(大纲)的意义在于,明确整个程序的思路,程序开始,创建了一个通讯录,并且对其初始化为0,然后我们再让用户进行选择需要实现的功能,用switch case语句来实现多种功能。

二:contact.c(各种函数的实现)

1,Init_Contact(初始化通讯录函数)

用memset函数,让通讯录结构体的所有字节均为0。

2,Add_Contact(增加联系人函数)

第一步:断言

第二步:先判断是否联系人已经满了,满了直接退出该函数

第三步:没满,再进行联系人的添加,如果有2个人,则sz为2,那么我们应该将即将添加的联系人存储到通讯录结构体里面的data数组的第三个元素,刚刚好就是下标为sz(2)。

第四步:sz代表联系人人数,所以要+1

3,Show_Contact(展示联系人函数)

第一步:断言

第二步:先判断通讯录有没有联系人,没有直接退出该函数

第三步:有联系人,先打印标题,再去打印所有的联系人信息

注意:采用左对齐会使打印出来的结果更清晰。

如图所示:

4,Find_Name(查找是否存在该用户的函数)

这个函数不是哪一个功能函数,而是删除,搜索,修改功能都需要使用的一个内部函数。

5,Del_Contact(删除联系人函数)

第一步:断言

第二步:先判断通讯录有没有联系人,没有直接退出该函数

第三步:有联系人,再去用内部函数Find_Name,去查找要删除的人是否存在,不存在则退出该函数。

第四步:存在,就去删除,Find_Name函数返回的整数是被即将删除联系人的下标,删除的办法就是从这个下标开始,往前进行覆盖,比如 1 2 3 4 5,要被删除的是2,从2开始往前覆盖就是1 3 4 4 5,然后sz--,就只剩下1 3 4 5,达到预期效果。

6,Search_Contact(搜索联系人函数)

第一步:断言

第二步: 先判断通讯录有没有联系人,没有直接退出该函数

第三步:有联系人,再去用内部函数Find_Name,去查找要搜索的人是否存在,不存在则退出该函数。

第四步:该联系人存在,则对其进行打印。

7,Modify_Contact(修改联系人函数)

第一步:断言

第二步: 先判断通讯录有没有联系人,没有直接退出该函数

第三步:有联系人,再去用内部函数Find_Name,去查找要修改的人是否存在,不存在则退出该函数。

第四步:该联系人存在,则对其进行修改,就是重新录入一遍所有的信息。

text.c(大纲)展示:

contact.h(所有函数,结构体,枚举等等的声明展示) 展示:

contact.c(各种细节函数的内部实现)展示:

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

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

相关文章

力扣49. 字母异位词分组

Problem: 49. 字母异位词分组 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.以字符串作为键,与该键是字母异位词所组成的数组为值创建map集合; 2.每次取出一个字符串将其排序,再存入对应的数组; 3.将map中的值存…

VSGitHub项目联动(上传和克隆),创建你的第一个仓库,小白配置

目录: 前言一,基本说明1.1名词概念1.2必配条件 二,配置方法2.1本地生成密钥2.2云端代码托管平台SSH配置添加(GitHub)2.3VS项目配置 三,参考四,一些讨论 前言 🌈在编写VS代码项目时&a…

containerd源代码分析: 整体架构

本文从代码的大的整体组织上来熟悉containerd项目 containerd项目总的说是一个cs模式的原生控制台程序组。containerd作为服务端来接收处理client的各种请求,如常用的拉取推送镜像,创建查询停止容器,生成快照,发送消息等。client/…

程序设计语言+嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记,未经本人许可,请勿转载,如发现本笔记内容的错误还望各位不吝赐教(笔记内容可能有误怕产生错误引导)。 1、嵌入式系统开发与设计 1.1嵌入式应用程序的生成与加…

在线获取文本列表并集计算器

具体请前往:在线文本并集计算工具

rabbitmq 3.9.29 docker mac 管理员页面无法打开

SyntaxError: Unexpected token ‘catch’ SyntaxError: Unexpected token ‘catch’ at EJS.Compiler.compile (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:6659) at new EJS (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:1625) at format (http://127.0.0.1:15672/js/main…

【Flask】Flask数据迁移操作

Flask数据迁移操作 前提条件 安装第三方包: # ORM pip install flask-sqlalchemy # 数据迁移 pip install flask-migrate # MySQL驱动 pip install pymysql # 安装失败,指定如下镜像源即可 # pip install flask-sqlalchemy https://pypi.tuna.tsinghu…

【Docker】golang操作容器使用rename动态更新容器的名字

【Docker】golang操作容器使用rename动态更新容器的名字 大家好 我是寸铁👊 总结了一篇golang操作容器使用rename动态更新容器的名字✨ 喜欢的小伙伴可以点点关注 💝 前言 今天遇到一个新的需求,要动态改变运行中的容器名字。 可以考虑先把…

鸿蒙实战开发-如何通过拖动滑块调节应用内字体大小

介绍 本篇Codelab将介绍如何使用基础组件Slider,通过拖动滑块调节应用内字体大小。要求完成以下功能: 实现两个页面的UX:主页面和字体大小调节页面。拖动滑块改变字体大小系数,列表页和调节页面字体大小同步变化。往右拖动滑块字…

Redis 教程系列之Redis 安装(二)

Windows 下安装 下载地址:Releases tporadowski/redis GitHub。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择,这里我们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹重新命名为 redis。 打开文件夹,内容如下: 打开一个 cmd 窗口 使用 c…

更改Ubuntu桌面环境

功能异常 1: Ubuntu 22.04 将桌面 .desktop文件,用鼠标拖动到左侧的收藏夹菜单栏:无法实现,且会造成原来的 .desktop文件异常失效。 在多桌面环境下,切换到 KDE桌面,桌面 .desktop文件则是正常 OK的。 都 …

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库,开发于二十多年前。它提供了一个低级API,允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时,它是首选平台。它可以在…

CSS3 中的盒模型:标准与IE盒模型的差异

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

pytest之统一接口请求封装

pytest之统一接口请求封装 pytest的requests_util.pyrequests_util.py 接口自动化测试框架的封装yaml文件如何实现接口关联封装yaml文件如何实现动态参数的处理yaml文件如何实现文件上传有参数化时候,怎么实现断言yaml的数据量大怎么处理接口自动化框架的扩展&#…

谷歌seo营销服务有哪些服务?

以我们举例,如果你在做B2B外贸建站,这里有全套保姆式托管服务,让你既省心又省力,七天就能搞定网站建设,快速上线,再来就是谷歌白帽SEO,我们这边强调的是纯白帽操作,专注于高质量的原…

linux源配置:ubuntu、centos;lspci与lsmod命令区别

1、ubuntu源配置 1)先查电脑版本型号: lsb_release -c2)再编辑源更新,源要与上面型号对应 参考:https://midoq.github.io/2022/05/30/Ubuntu20-04%E6%9B%B4%E6%8D%A2%E5%9B%BD%E5%86%85%E9%95%9C%E5%83%8F%E6%BA%90/ /etc/apt/…

基于springboot+vue的旅游网站

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

CICD流水线(ali)

后端CICD 一、打开云效流水线,创建流水线

全球大型语言模型(LLMS)现状与比较

我用上个博文的工具将一篇ppt转换成了图片,现分享给各位看官。 第一部分:国外大语言模型介绍 1,openai的Chatgpt 免费使用方法1:choose-carhttps://share.freegpts.org/list 免费使用方法2:Shared Chathttps://share…

Collection与数据结构 数据结构预备知识(二):包装类与泛型

1.包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类.可以把包装类理解为基本数据类型所对应的引用数据类型. 1.1基本数据类型与对应的包装类 基本数据类型包装类byteByteshortShortintIntegerlongLong…