C语言实现,固定内存通讯录(注释超详细)

头文件

#ifndef __LINKMAN_H__
#define __LINKMAN_H__#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996)
typedef struct LINKMAN//建立结构体,存放联系人信息
{char name[20];char sex[10];int age;int tel[12];char addr[50];
}LINKMAN;typedef struct Statis //把通讯录和人员统计放在结构体内
{LINKMAN num[1000];int count;
}Statis;void inint_linkman(Statis* p);    //初始化数组
void Add_linkman(Statis* p);    //添加联系人信息
void Dele_linkman(Statis* p);   //删除指定联系人信息
void Find_linkman(Statis* p);    //查找指定联系人信息
void Revise_linkman(Statis* p);    //修改指定联系人信息
void Display_linkman(Statis* p);    //显示所有联系人信息
void Empty_linkman(Statis* p);    //清空所有联系人 
void sort_linkman(Statis* p);    //以名字排序所有联系人
#endif

实现文件

#include "test.h"
void inint_linkman(Statis* p)
{int count = sizeof(p->num);p->count = 0;memset(p->num, 0, count);
}
int Find(Statis* p, char* pname)    //查找联系人,实参为通讯录,和查找的用户名称
{int i = 0;for (i = 0; i < (p->count); i++)                  //遍历寻找这个人{if (strcmp(p->num[i].name, pname) == 0)    //如果找到了,返回i(对应位置)return i;}return -1;        //找不到返回-1;
}void menu1()
{printf("*********************\n");printf("****1.姓名*2.性别****\n");printf("****3.年龄*4.电话****\n");printf("****5.地址*6.返回****\n");printf("*********************\n");
}void Add_linkman(Statis* p)     //添加联系人
{printf("请输入你要添加的联系人姓名:\n");    //依次输入信息scanf("%s", p->num[p->count].name);printf("请输入你要添加的联系人性别:\n");scanf("%s", p->num[p->count].sex);printf("请输入你要添加的联系人年龄:\n");scanf("%d", &(p->num[p->count].age));printf("请输入你要添加的联系人电话:\n");scanf("%s", p->num[p->count].tel);printf("请输入你要添加的联系人地址:\n");scanf("%s", p->num[p->count].addr);if ((p->count) > 1000)     //如果人数大于1000,则满了,无法添加,反之则可以{printf("联系人上限\n");}else      {printf("添加成功\n");p->count++;}
}void Dele_linkman(Statis* p)   //删除某位用户
{char name[20] = { 0 };   //一会将输入你想删除人的名字int result = 0;int n = 0;int i = 0;printf("请输入要删除人的姓名:\n");scanf("%s", name);result = Find(p, name);    //寻找这个人if (result != -1){printf("你是否要删除该联系人?\n");   //再次确认printf("删除请按1,不删除请按0\n");scanf("%d", &n);  if (n == 1){for (i = 0; i < (p->count) - 1; i++){p->num[i] = p->num[i + 1];         //直接删除}p->count--;    //减少一个printf("删除成功\n");}else{printf("删除失败\n");}}else{printf("你要删除的联系人不存在\n");}
}void Find_linkman(Statis* p)      //查询联系人信息
{char name[20] = { 0 };int result = 0;printf("请输入要查找联系人的姓名:\n");    //输入想要查询的姓名scanf("%s", name);result = Find(p, name);    //寻找这个人,返回它对应的下标值if (result != -1)   //找到了打印她的信息{printf("姓名:%s\n", p->num[result].name);printf("性别:%s\n", p->num[result].sex);printf("年龄:%d\n", p->num[result].age);printf("电话:%s\n", p->num[result].tel);printf("地址:%s\n", p->num[result].addr);}else   {printf("你要查找的联系人不存在\n");}
}void Revise_linkman(Statis* p)   //修改此人信息
{char name[20] = { 0 };int result = 0;printf("请输入你要修改联系人的姓名:\n");scanf("%s", name);result = Find(p, name);   //寻找if (result != -1)   //找到了打印{ printf("姓名:%s\n", p->num[result].name);printf("性别:%s\n", p->num[result].sex);printf("年龄:%d\n", p->num[result].age);printf("电话:%s\n", p->num[result].tel);printf("地址:%s\n", p->num[result].addr);int i = 0;do   //选择修改的信息,结束输入0{menu1();printf("输入你要修改的选项:\n");scanf("%d", &i);switch (i){case 1:printf("请把姓名修改成:");scanf("%s", p->num[result].name);break;case 2:printf("请把性别修改成:");scanf("%s", p->num[result].sex);break;case 3:printf("请把年龄修改成:");scanf("%d", &(p->num[result].age));break;case 4:printf("请把电话修改成:");scanf("%s", p->num[result].tel);break;case 5:printf("请把地址修改成:");scanf("%s", p->num[result].addr);break;case 0:break;default:printf("输入错误");break;}} while (i);}else{printf("你要修改的联系人不存在\n");}
}void Display_linkman(Statis* p)  //打印所有人
{int i = 0;printf("输出所有人的信息:\n");printf("%10s%7s%6s%8s%10s\n", "名字", "性别", "年龄", "电话", "住址");for (i = 0; i < (p->count); i++){printf("%11s", p->num[i].name);printf("%5s", p->num[i].sex);printf("%5d", p->num[i].age);printf("%10s", p->num[i].tel);printf("%12s", p->num[i].addr);printf("\n");}
}void Empty_linkman(Statis* p)//清空联系人
{p->count = 0;
}void sort_linkman(Statis* p)//以名字排序所有联系人(冒泡)
{int i = 0;int j = 0;for (i = 0; i < p->count - 1; i++)for (j = 0; j < p->count - 1 - i; j++){if (strcmp(p->num[j].name, p->num[j + 1].name) > 0){LINKMAN tmp;tmp = p->num[j];p->num[j] = p->num[j + 1];p->num[j + 1] = tmp;}}
}

测试文件

#include "test.h"
Statis sta;
void menu()   //菜单
{printf("***********************************\n");printf("********1.添加联系人信息***********\n");printf("********2.删除指定联系人信息*******\n");printf("********3.查找指定联系人信息*******\n");printf("********4.修改指定联系人信息*******\n");printf("********5.显示所有联系人信息*******\n");printf("********6.清空所有联系人***********\n");printf("********7.以名字排序所有联系人*****\n");printf("************按0退出程序**********\n");printf("***********************************\n");}void test()
{int input = 0;do{menu();printf("请输入你要进行的选项:\n");scanf("%d", &input);  //输入选择的作用switch (input){case 1:Add_linkman(&sta);   break;case 2:Dele_linkman(&sta);break;case 3:Find_linkman(&sta);break;case 4:Revise_linkman(&sta);break;case 5:Display_linkman(&sta);break;case 6:Empty_linkman(&sta);break;case 7:sort_linkman(&sta);break;case 0:exit(1);break;default:printf("输入错误,请重新输入\n");break;}} while (input);
}int main()
{inint_linkman(&sta);test();return 0;
}

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

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

相关文章

大模型加速学科升级,飞桨赋能北邮“X+大模型”特色小学期

在人工智能时代&#xff0c;设计师与产品经理比以往更加需要关注一个事实&#xff1a;那就是如何利用人工智能和数据分析技术&#xff0c;打造让用户心动的信息交互产品和用户体验&#xff0c;释放人-机协同共创的巨大潜能&#xff0c;是决定设计产能和竞争力的关键。 在产业的…

【SpringBoot】84、SpringBoot中MVC处理异常的多种方式

在 SpringBoot 中我们可以使用注解 @ControllerAdvice 和 @RestControllerAdvice 来全局处理异常,这两个注解只多了一个注解 @ResponseBody,将方法的返回值,以特定的格式写入到 response 的 body ,进而将数据返回给客户端,如果是字符串直接输出字符串信息,如果是对象将会…

智能合约 -- 安全考量

相关概念 就是我们写代码是考虑这种涉及到合约安全的问题:下面这个方面写合约是重点考虑。 创建消息发送以太币&#xff1a; 1.要创建消息发送以太币&#xff0c;您需要构建一个有效的交易&#xff0c;并将其发送到以太坊网络中。 2.交易被发送到以太坊网络后&#xff0c;会经…

RabbitMQ ---- 消息队列

RabbitMQ ---- 消息队列 1. MQ 的相关概念1.1 什么是 MQ1.2 为什么要用 MQ1.3 MQ 的分类1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 四大核心概念2.3 RabbitMQ 核心部分2.4 各个名词介绍2.5 安装 1. MQ 的相关概念 1.1 什么是 MQ MQ(message queue)&#xff0c;从字面…

爬虫之Scrapy

一 介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c;使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛&#xff0c;可用于如数据挖掘、监测和自动化测试等领域&#x…

什么是Docker

容器技术和虚拟机 虚拟机 和一个单纯的应用程序相比&#xff0c;操作系统是一个很重的程序&#xff0c;刚装好的系统还什么都没有部署&#xff0c;单纯的操作系统其磁盘占用至少几十G起步&#xff0c;内存要几个G起步。 在这台机器上开启三个虚拟机&#xff0c;每个虚拟机上…

CentOS 7 安装 Nginx

前言 最近&#xff0c;在公司经常会进行项目的部署&#xff0c;但是服务器环境都是导师已经搭建好了的&#xff0c;我就是将项目文件放到特定目录。于是&#xff0c;周末在家就进行了 Nginx 的安装学习。之前&#xff0c;在 Windows 上使用过 Nginx&#xff0c;但是在 Linux 环…

web学习--Cookie与Session会话技术

总结&#xff1a;可以考虑将登陆信息等重要信息存放为session&#xff0c;不重要的信息可以放在cookie中。 Cookie 1.概念&#xff1a;客户端会话技术&#xff0c;将数据保存在客户端 使用步骤&#xff1a; 1&#xff0c;创建Cookie对象&#xff0c;绑定数据 2.发送Cookie对象…

【微信小程序】使用 wx.request 方法进行异步网络请求

在微信小程序中&#xff0c;你可以使用 wx.request 方法进行异步网络请求&#xff0c;并将获取到的列表数据渲染到 UI 上。 首先&#xff0c;在页面的 data 中定义一个数组变量&#xff0c;用于存储获取到的列表数据&#xff0c;例如&#xff1a; Page({data: {listData: [] …

PSI算法经典论文算法概述

文章目录 什么是隐私求交PSIPSI协议分类PSI算法的分类基于哈希函数的PSI算法基于不经意传输&#xff08;OT&#xff09;的 PSI算法基于GC的PSI算法基于公钥加密的PSI算法基于DH的PSI算法基于RSA盲签名的PSI算法基于同态加密的PSI算法 基于差分隐私的PSI算法 总结参考文献 什么是…

为了实现上网自由,我做了一个多功能串口服务器

项目作者&#xff1a;小华的物联网嵌入式之旅 介绍&#xff1a;从事电气自动化行业&#xff0c;多次获得物联网设计竞赛&#xff0c;爱好嵌入式设计开发&#xff0c;物联网开发。 设计方案思路的由来&#xff0c;是因为我们现在的开发板基本需要通过串口与WIFI模组或以太网模…

[Linux] 最基础简单的线程池 及其 单例模式的实现

本篇文章主要用到线程相关内容, 下面是博主关于线程相关内容的文章: [Linux] 线程同步分析&#xff1a;什么是条件变量&#xff1f;生产者消费者模型是什么&#xff1f;POSIX信号量怎么用&#xff1f;阻塞队列和环形队列模拟生产者消费者模型 [Linux] 线程互斥分析: 多线程的问…

1千w移动设备以及设备模型分各种方式存储到redis实际占用内存大小

1千w移动设备数据以及设备分存储到redis &#xff08;以安卓为例&#xff1a;IDFA_MD5、OAID_MD5、ANDROID_ID_MD5 总设备码MD5约3000w&#xff09;实际占用内存 string key value值存储大小&#xff08;存20个不同来源模型分&#xff09; 格式1 5.17G string key 为两种md5…

ES映射中字段名大小写问题

在Elasticsearch中&#xff0c;字段名&#xff08;也就是映射中定义的&#xff09;是区分大小写的。这意味着&#xff0c;如果你在映射中定义了一个字段名为myField&#xff0c;那么你必须在查询和索引文档时精确地使用这个大小写。你不能使用myfield或MYFIELD去查询或索引&…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

是否有商品使用过改运费模板

目录 1 添加修改运费模板 2 删除运费模板 3 是否有商品使用过改运费模板 /// <summary> 添加修改运费模板 /// </summary>

华为发布大模型时代AI存储新品

7月14日&#xff0c;华为发布大模型时代AI存储新品&#xff0c;为基础模型训练、行业模型训练&#xff0c;细分场景模型训练推理提供存储最优解&#xff0c;释放AI新动能。 企业在开发及实施大模型应用过程中&#xff0c;面临四大挑战&#xff1a; 首先&#xff0c;数据准备时…

剑指offer刷题笔记--Num41-50

1--数据流中的中位数&#xff08;41&#xff09; 主要思路&#xff1a; 维护两个优先队列&#xff0c;Q1大数优先&#xff0c;存储比中位数小的数&#xff1b;Q2小数优先&#xff0c;存储比中位数大的数&#xff1b; 当存储的数为偶数时&#xff0c;Q1.size() Q2.size(), 中位…

解决github无法拉取submodule子模块的问题

引言 当使用git clone --recursive url 拉取一个配置了子模块的仓库后&#xff0c;会卡住。 同时在使用git clone 拉去https的url时&#xff0c;同样可能会出现一直卡在cloning int reposity...本文提供一个简单的脚本来解决该问题。 前置准备 需要配置好git的相关配置&…

快速配置 Rust 开发环境并编写一个小应用

安装: curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh 更新: Rust 的升级非常频繁. 如果安装 Rustup 后已有一段时间,那么很可能 Rust 版本已经过时, 运行 rustup update 获取最新版本的 Rust rustc&#xff1a;编译Rust程序 rustc只适合简单的Rust程序&#xf…