通讯录——C语言实现
头文件Contact.h
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#pragma once
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30//表示一个人的信息
//struct PeoInfo
//{
// char name[20];
// int age;
// char sex[5];
// char tele[12];
// char addr[30];
//};
typedef struct PeoInfo
{char name[MAX_NAME];int age;char sex[MAX_SEX];char tele[MAX_TELE];char addr[MAX_ADDR];
}PeoInfo;typedef struct Contact
{PeoInfo data[MAX];//存放数据int sz;//记录通讯录中的有效信息个数
}Contact;//初始化通讯录
void InitContact(Contact* pc);//增加指定联系人
void AddContact(Contact* pc);//显示联系人信息
void ShowContact(const Contact* pc);//删除指定联系人
void DelContact(Contact* pc);//查找指定联系人
void SearchContact(const Contact* pc);//修改通讯录
void ModifyContact(Contact* pc);//排序通讯录元素
void SortContact(Contact* pc);
测试文件test.c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include"contact.h"
void menu()
{printf("*****************************\n");printf("***** 1.add 2.del *****\n");printf("***** 3.search 4.modify*****\n");printf("***** 5.show 6.sort ******\n");printf("***** 0.exit *************\n");printf("*****************************\n");printf("*****************************\n");
}
enum Option
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};
int main()
{int input = 0;Contact con;//ͨѶ¼//ʼͨѶ¼InitContact(&con);do{menu();printf("ѡ:>");scanf("%d", &input);switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case SEARCH:SearchContact(&con);break;case MODIFY:ModifyContact(&con);break;case SHOW:ShowContact(&con);break;case SORT:SortContact(&con);break;case EXIT:printf("˳ͨѶ¼\n");break;default:printf("ѡ\n");break;}} while (input);return 0;
}
功能实现文件Contact.c
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"void InitContact(Contact* pc)
{pc->sz = 0;memset(pc->data, 0, sizeof(pc->data));
}void AddContact(Contact* pc)
{if (pc->sz == MAX){printf("通讯录已满,无法增加\n");return;}printf("请输入名字:>");scanf("%s", pc->data[pc->sz].name);printf("请输入年龄:>");scanf("%d", &(pc->data[pc->sz].age));printf("请输入性别:>");scanf("%s", pc->data[pc->sz].sex);printf("请输入电话:>");scanf("%s", pc->data[pc->sz].tele);printf("请输入地址:>");scanf("%s", pc->data[pc->sz].addr);pc->sz++;printf("添加成功\n");
}void ShowContact(const Contact* pc)
{int i = 0;//姓名 年龄 性别 电话 地址//zhangsan 20 男 123456 北京//打印标题printf("%-10s %-4s %-5s %-12s %-30s\n ", "姓名", "年龄", "性别", "电话", "地址");for (i = 0;i < pc->sz;i++){printf("%s %d %s %s %s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex,pc->data[i].tele, pc->data[i].addr);}
}static int FindByName(const Contact* pc, char name[])
{int i = 0;int pos = 0;for (i = 0;i < pc->sz;i++){if (0 == strcmp(pc->data[i].name, name)){return i;}}/*if (i == pc->sz){return -1;}*/return -1;
}
void DelContact(Contact* pc)
{char name[MAX_NAME] = { 0 };if (pc->sz == 0){printf("通讯录为空,无法删除\n");return;}//删除//1.找到要删除的人 - 位置 (下标)printf("输入要删除人的名字:>");scanf("%s", name);int pos = FindByName(pc, name);if (pos == -1){printf("要删除的人不存在\n");return; }int i = 0;//2.删除 - 删除pos位置上的数据 for (i = pos;i<pc->sz-1;i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("删除成功\n");
}void SearchContact(const Contact* pc)
{char name[MAX_NAME] = { 0 };printf("请输入要查找人的名字:>");scanf("%s", name);int pos = FindByName(pc, name);if (pos == -1){printf("要查找的人不存在\n");return;}//打印printf("%-10s %-4s %-5s %-12s %-30s\n ", "姓名", "年龄", "性别", "电话", "地址");//打印数据printf("%s %d %s %s %s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tele,pc->data[pos].addr);
}void ModifyContact(Contact* pc)
{char name[MAX_NAME] = { 0 };printf("输入要修改人的名字\n");scanf("%s", name); int pos = FindByName(pc, name);if (pos == -1){printf("要修改的人不存在\n");}//修改printf("请输入名字:>");scanf("%s", pc->data[pos].name);printf("请输入年龄:>");scanf("%d", &(pc->data[pos].age));printf("请输入性别:>");scanf("%s", pc->data[pos].sex);printf("请输入电话:>");scanf("%s", pc->data[pos].tele);printf("请输入地址:>");scanf("%s", pc->data[pos].addr);printf("修改成功\n");
}//按照名字来排序
int cmp_by_name(const void* e1, const void* e2)
{return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
void SortContact(Contact* pc)
{qsort(pc->data,pc->sz,sizeof(PeoInfo), cmp_by_name);
}
相关文章:
通讯录——C语言实现
头文件Contact.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #pragma once #define MAX 100 #define MAX_NAME 20 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 30//表示一个人的信息 //struct…...
优思学院|3步骤计算出Cpk|学习Minitab
在生产和质量管理中,准确了解和控制产品特性至关重要。一个关键的工具是Cpk值,它是衡量生产过程能力的重要指标。假设我们有一个产品特性的规格是5.080.02,通过收集和分析过程数据,我们可以计算出Cpk值,进而了解生产过…...
【Java编程进阶之路 06】深入探索:JDK、JRE与JVM的关系与差异
JDK、JRE与JVM:揭开Java运行环境的神秘面纱 在Java开发者的日常工作中,JDK、JRE和JVM这三个概念是不可或缺的。它们构成了Java应用程序的运行环境,但很多初学者可能对这三者的关系和差异感到困惑。本文旨在详细解析JDK、JRE和JVM之间的关系&…...
Linux中的touch命令
在Linux中,touch命令主要用于创建空的文件或者更新已存在文件的时间戳。下面是 touch命令的使用方式和示例说明: 创建空文件 要创建一个空文件,可以使用 touch命令并指定文件名,如下所示: touch new_fi…...
智能驾驶规划控制理论学习-基于采样的规划方法
目录 一、基于采样的规划方法概述 二、概率路图(PRM) 1、核心思想 2、实现流程 3、算法描述 4、节点连接处理 5、总结 三、快速搜索随机树(RRT) 1、核心思想 2、实现流程 3、总结 4、改进RRT算法 ①快速搜索随机图&a…...
二叉树——二叉树所有路径
二叉树所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [1,2,3,null,5] 输出:["1->2->5","1-…...
算法训练营day38(补),动态规划6
package main func max(a, b int) int { if a > b { return a } return b } 背包最大重量为4。 物品为: 重量价值物品0115物品1320物品2430 每件商品都有无限个! 问背包能背的物品最大价值是多少? func package03(weight, value []…...
【java、微服务、nacos】nacos服务分级存储模型
Nacos服务分级存储模型 ① 一级是服务,例如userservice ②二级是集群,例如杭州或上海 ③ 三级是实例,例如杭州机房的某台部署了userservice的服务器 配置实例集群属性 改变服务的yml文件 spring:cloud:nacos:discovery:cluster-name: H…...
共享旅游卡:打开0费用旅游新纪元,探索40+精彩线路
随着现代生活节奏的加快,旅游成为了许多人释放压力、寻求乐趣的方式。然而,面对琳琅满目的旅游线路和不断上涨的旅游费用,许多人望而却步。 今天,我们要为您介绍一种颠覆传统旅游方式的创新产品——共享旅游卡。它不仅能让您以0费…...
MQTT协议解析:揭秘固定报头、可变报头与有效载荷的奥秘
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的通讯协议,常用于远程传感器和控制设备的通讯。MQTT协议基于发布/订阅模式,为大量计算能力有限且工作在低带宽、不可靠网络环境中的设备…...
备战蓝桥杯---树形DP基础3
上一次我们讲了二叉苹果树,现在我们加一点难度,从二叉变成了多叉苹果树。 这样子我们就不可以直接按照上次的方法DP,我们其实可以发现,我们可以用类似背包的思想求解,这就是所谓的树上背包。 我们先加进第一个儿子来…...
IEEE Transactions on Industrial Electronics工业电子TIE修改稿注意事项及提交须知
一、背景 兔年末投了一篇TIE,手稿初次提交的注意事项也整理成了博客IEEE Transactions on Industrial Electronics工业电子TIE论文投稿须知,获得了许多点赞和收藏。最近也收到了审稿结果,给的意见是大修major revision,总之只要不…...
c#委托的三种实现方式
委托是实质一个类,主要目的是将方法当作参数进行传递。 委托是.NET编程的精髓之一,在日常编程中经常用到,在C#中实现委托主要有Func、Action、delegate三种方式,本节主要就这三种委托的用法通过实例展开讲解。 Func用法解析 【F…...
c/c++|红黑树|分析应用|锚点
红黑树是一种自平衡的二叉查找树,它保持着良好的平衡,能够在插入和删除等操作后通过一系列旋转和重新着色操作来保持树的平衡。这种平衡性质使得红黑树在搜索、插入和删除等操作的平均和最坏情况下的时间复杂度都是O(log n)。以下是红黑树的一些关键特性…...
2-29算法习题总结
贪心问题 小A的糖果 题目描述 小 A 有 n n n 个糖果盒,第 i i i 个盒中有 a i a_i ai 颗糖果。 小 A 每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中糖的个数之和都不大于 x x x,至少得吃掉几颗糖…...
当Linux 磁盘满了,查看大文件并删除
当你的Linux磁盘空间满了时,可以通过以下步骤查找大文件并删除它们: 检查磁盘空间: 使用以下命令检查磁盘空间的使用情况: df -h这将显示文件系统的使用情况,包括每个文件系统的总大小、已用空间、可用空间和挂载点。 …...
STL -萃取特性迭代器
1. STL简单概述 a. STL六大组成部分 容器(Container)空间配置器(allocator)算法(Algorithm)迭代器(Iterator)仿函数(Function object)适配器(Ad…...
python pandas写入csv
在Python的Pandas库中,可以使用to_csv方法将DataFrame对象写入CSV文件。以下是一个简单的示例: import pandas as pd# 创建一个DataFrame对象 data {Name: [Alice, Bob, Charlie, David],Age: [25, 30, 35, 40],City: [New York, Los Angeles, Chicago…...
oracle 数据库建集群式数据库的DBLINK的语法
根据需要修改以下红色字体的部分即可。 1、连接集群式数据库DBLINK语法 create public database link 自定义的dblink名字 connect to 连接对方数据库的用户名 identified by "密码" using (DESCRIPTION (ADDRESS_LIST (FAILOVER ON) (LOAD_BALANCE OFF) …...
基于JAVA的毕业设计分配选题系统 开源项目
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 专业档案模块2.2 学生选题模块2.3 教师放题模块2.4 选题审核模块 三、系统展示四、核心代码4.1 查询专业4.2 新增专业4.3 选择课题4.4 取消选择课题4.5 审核课题 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…...
LVGL-02 构建可复用的 LVGL SDK:CMake 封装与多平台适配
1. 为什么需要封装LVGL SDK? 第一次接触LVGL时,我直接克隆了官方仓库,把源码拖进项目就开始编译。结果两周后项目需要适配新平台时,发现头文件路径全乱了,各种交叉引用问题接踵而至。这种经历让我意识到:直…...
颠覆性桌面股票监控:TrafficMonitor插件生态的革命性升级
颠覆性桌面股票监控:TrafficMonitor插件生态的革命性升级 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 在信息过载的数字时代,投资者需要一个专注且高效…...
实战解析:.NET Framework多版本环境下的兼容性策略与配置
1. 理解.NET Framework多版本兼容性问题 第一次遇到.NET Framework版本兼容问题是在2015年开发游戏微端下载器时。当时我们团队用.NET 4.0开发了一个下载器,测试时在Win10上运行完美,但发给部分Win7用户后却收到大量报错反馈。更让人头疼的是,…...
【GitHub项目推荐--O2OA(翱途):企业级开源协同办公的“乐高底座”】
GitHub 地址:https://github.com/o2oa/o2oa 简介 O2OA(翱途)是由浙江兰德纵横网络技术股份有限公司开发并维护的企业级低代码协同办公开发平台。它不仅仅是一个 OA 系统,更是一个基于 JavaEE 分布式架构的“应用构建底座”。 O2…...
Qt_笔记
1.事件 举例:按键事件使用:包含QKeyEvent头文件。h文件里声明,cpp重写虚函数:void keyPressEvent(QKeyEvent *k)即可。事件的名称和获取事件的函数等细节可以在帮助里查找。2.TCP网络:需要在pro文件里第一行添加一个库…...
ThinkPad风扇控制终极指南:TPFanCtrl2深度配置与实战优化方案
ThinkPad风扇控制终极指南:TPFanCtrl2深度配置与实战优化方案 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 在Windows系统上实现ThinkPad风扇控制的精确调…...
告别云端依赖!DeepSeek-R1 1.5B模型本地部署全攻略
告别云端依赖!DeepSeek-R1 1.5B模型本地部署全攻略 1. 为什么选择本地部署DeepSeek-R1 1.5B模型? 在AI应用日益普及的今天,许多开发者都面临一个两难选择:使用云端API服务虽然方便,但存在数据隐私、网络依赖和长期成…...
重庆科技大学安全工程考研复试专用资料|涵盖安全系统工程、风险工程学等核心科目
温馨提示:文末有联系方式一、权威覆盖:重庆科技大学安全工程复试核心课程资料 本套资料深度聚焦重庆科技大学安全工程专业研究生复试要求,系统整合《安全系统工程》《风险工程学》等关键专业课内容,紧扣近年复试命趋势与学科重点&…...
JetBrains全家桶通用警告优化方案:我用这份settings文件统一了IDEA/PyCharm/GoLand的代码提示风格
JetBrains全家桶通用警告优化方案:统一IDEA/PyCharm/GoLand的代码提示风格 作为全栈开发者,我们常常需要在不同语言的IDE之间切换。JetBrains系列工具虽然强大,但默认的代码检查规则往往过于"热心"——那些红黄交错的波浪线不仅分散…...
仅限头部科技公司使用的生成式AI服务治理沙箱环境:支持Prompt血缘追踪、模型版本回滚、推理链路水印(申请通道即将关闭)
第一章:生成式AI应用服务治理方案 2026奇点智能技术大会(https://ml-summit.org) 随着大语言模型与多模态生成式AI在企业级场景的规模化落地,服务治理已从传统API生命周期管理演进为涵盖模型调用、内容安全、成本追踪、合规审计与反馈闭环的复合型工程…...
