C语言实现通讯录

今天分享一个通讯录的代码,代码可以正常运行,但是可能有一点点缺陷,完成的是我们的通讯录功能

contact.h

#pragma once
#include<string.h>#include<stdio.h>
#include<assert.h>
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define TEL_MAX 12
#define ADDR_MAX 30
typedef struct people
{char name[NAME_MAX];//名字char sex[SEX_MAX];//性别int age;//年龄char tel[TEL_MAX];//电话char addr[ADDR_MAX];//地址
}people;//定义这个struct people为peopletypedef struct contact
{people data[MAX];//存放一千个人信息int sz;//记录通讯录已经保存的信息个数
}contact;enum optiom 
{EXIT,ADD,DEL,SEARCH,MODIFY,SORT,PRINT
};
//初始化通讯录
void Initcontact(contact* pc);//添加用户信息
void AddContact(contact* pc);//打印信息
void PrintContact(const contact* pc);//删除信息
void DelContact(contact* pc);//查找
void SearchContact(const contact* pc);//修改功能
void ModifyContact(contact* pc);//排序功能没写

contact.c

#define _CRT_SECURE_NO_WARNINGS 1#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].tel);printf("请输入地址:>");scanf("%s", pc->data[pc->sz].addr);//把数据放入下标为sz的底下pc->sz++;//不能单独 写sz++printf("添加成功\n");
}void PrintContact(const contact* pc)
{assert(pc);int i = 0;printf("%-20s  %-10d  %-5s  %-12s  %-30s\n","姓名","年龄","性别","电话","地址");for (i = 0; i < pc->sz; i++){printf("%-20s  %-10d  %-5s  %-12s  %-30s\n",pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tel, pc->data[i].addr);}}int FindName(contact* pc, char name[])
{int i = 0;for (i = 0; i < pc->sz; i++){if (0 == strcmp(name, pc->data[i].name)){return i;}}return -1;
}
void DelContact(contact* pc)
{assert(pc);if (pc->sz == 0){printf("通讯录已空,无法删除\n");return;}char name[NAME_MAX] = { 0 };printf("要删除的人>");scanf("%s", name);int pos = FindName(pc, name);if (pos ==-1){printf("要删除的人不存在\n");}int j = 0;for (j = pos; pos < pc->sz - 1; j++){pc->data[j] = pc->data[j + 1];}pc->sz--;//最后一个元素也就访问不到,这样就不会越界printf("删除成功\n");
}void SearchContact(const contact* pc)
{char name[NAME_MAX] = { 0 };printf("要查找的人>");scanf("%s", name);int pos = FindName(pc, name);if (pos == -1){printf("要查找的人不存在\n");}printf("%-20s  %-10d  %-5s  %-12s  %-30s\n", "姓名", "年龄", "性别", "电话", "地址");printf("%-20s  %-10d  %-5s  %-12s  %-30s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tel, pc->data[pos].addr);
}//修改联系人
void menu1()
{printf("********************************\n");printf("*******1.add     2.del *********\n");printf("*******3.search  4.modify*******\n");printf("*******5.sort    0.exit   ******\n");printf("*******6.print******************\n");printf("********************************\n");
}
void ModifyContact(contact* pc)
{int input = 0;char name[NAME_MAX] = { 0 };printf("请输入你要修改的联系人姓名:>");scanf("%s", name);//查找int pos = FindName(pc, name);int i = 0;if (pos == -1){printf("找不到所要查找的联系人\n");return;}//修改printf("请输入要修改的具体信息:>\n");menu1();scanf("%d", &input);switch (input){case 1:printf("请输入新的姓名:>");scanf("%s", pc->data[pos].name);break;case 2:printf("请输入新的年龄:>");scanf("%d", &pc->data[pos].age);break;case 3:printf("请输入新的性别:>");scanf("%s", pc->data[pos].sex);break;case 4:printf("请输入新的电话:>");scanf("%s", pc->data[pos].tel);break;case 5:printf("请输入新的地址:>");scanf("%s", pc->data[pos].addr);break;default:printf("输入有误,修改失败\n");return;}printf("修改成功\n");
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{printf("********************************\n");printf("*******1.add     2.del *********\n");printf("*******3.search  4.modify*******\n");printf("*******6.print    0.exit   *****\n");printf("********************************\n");printf("********************************\n");
}
void test()
{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 PRINT:PrintContact(&con);break;case EXIT:printf("退出通讯录\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);}
int main()
{test();return 0;
}

以上就是我们一个简单通讯录的实现,这就是我们今天的分享,谢谢大家

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

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

相关文章

Linux5.16 Ceph集群

文章目录 计算机系统5G云计算第四章 LINUX Ceph集群一、Ceph1.存储基础1&#xff09;单机存储设备2&#xff09;单机存储的问题3&#xff09;商业存储解决方案4&#xff09;分布式存储&#xff08;软件定义的存储 SDS&#xff09;5&#xff09;分布式存储的类型 2.Ceph 简介3.C…

获得servlet相关API,获得请求头和cookie-spring23

后台能够成功打印 如何获得请求头 如何获得cookie 获取浏览器信息 把network下user Agent的值赋给他 这个值可以直接赋给Cookie 就是这个cookie 把cookie的值赋值给一边JasonId&#xff0c; 这里面的Value代表着名字,名字是cookie后面那一块&#xff1a;

spring-boot-2.2.13.RELEASE 升级 2.6.6 记录

一、版本升级 spring-boot-2.2.13.RELEASE 升级 2.6.6 <properties>...<spring.boot.version>2.6.6</spring.boot.version><spring-cloud.version>2021.0.1</spring-cloud.version><spring-cloud-alibaba.version>2021.0.1.0</spring-…

librdkafka的rdk:broker-1线程cpu百分百问题分析

问题调用栈&#xff1a; (gdb) bt #0 0x000000000068307c in rd_kafka_q_pop_serve (rkq0x1ff31a0, timeout_ms<optimized out>, versionversionentry0, cb_typecb_typeentryRD_KAFKA_Q_CB_RETURN, callbackcallbackentry0x0, opaqueopaqueentry0x0) at rdkafka_queue.…

nginx推流环境搭建

目录 1、创建安装文件夹2、安装编译 nginx 所需要的库3、下载 nginx-1.21.6.tar.gz下载 nginx-rtmp-module4、解压解压nginx文件解压rtmp模块5、编译6、安装7、启动nginx,检测nginx是否能成功运行8、配置nginx使用RTMP9、重启nginx服务器1、创建安装文件夹 cd ~ mkdir nginx …

React Hooks

React Hooks basic hooks useStateuseEffectuseContext useState useState接收一个参数&#xff0c;返回的是一个数组&#xff0c;参数表示初始值&#xff0c;数组的第1项就是定义的变量&#xff0c;第2项就是改变变量的方法。 参数可以是基本数据类型&#xff0c;如string…

Comparator.comparing()实现中文排序及空指针处理

一、 Comparator.comparing()的用法请详见以下上一篇文章的汇总介绍。 Comparator用法_乞力马扎罗の黎明的博客-CSDN博客 二、应用示例&#xff1a; 1、中文排序、空值处理 Collator instance Collator.getInstance(Locale.CHINA); checkItemVoList.stream().sorted(Compar…

每日科技分享-POE新增文件和链接发送功能

POE推出新功能 注意POE需要魔法上午才能进去。 实测 实测可以发送论文给chatgpt&#xff0c;然后和AI进行共享的对话。 POE网站链接&#xff1a; 也可以发送链接&#xff0c;实测了一下&#xff0c;似乎有时候并不准确&#xff0c;我发送了关于分层强化的文章&#xff0c;但是…

<数据结构>NO11.归并排序|递归|非递归|优化

文章目录 归并排序递归写法非递归写法修正方案1.归并一段拷贝一段修正方案2.修正区间 算法优化算法分析 归并排序的应用外排序和内排序 归并排序 递归写法 思路: 如果给出两个有序数组&#xff0c;我们很容易可以将它们合并为一个有序数组。因此当给出一个无序数组时&#xf…

http和https的区别(面试题)

概念 Http&#xff1a;HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同&#xff0c; 用于客户端和服务器之间的通信。从WWW服务器传输超文本到本地浏览器的传输协议&#xff0c;它可以…

一个月学通Python(二十):Python制作报表(Web开发)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 文章目录 专栏介绍制作报表导出Excel报表导出PDF报表生成前端…

python 写个excle表格数据导入mysql数据的服务

下面是一个使用Python将Excel表格数据导入MySQL数据库的示例代码。需要使用pandas和MySQL Connector库。 pythonimport pandas as pd import mysql.connector# 读取Excel文件 df pd.read_excel(data.xlsx)# 连接MySQL数据库 cnx mysql.connector.connect(useryour_username, …

华为无线ac+ap旁挂二层组网常用配置案例

AC控制器理解配置步骤&#xff1a; capwap source interface Vlanif 100 //源IP回包地址 wlan ssid-profile name test //新建个模版名称为test ssid test //wifi名称 wlan security-profile name test //建立安全模版也叫test security wpa-wpa2 psk pass-phrase admin123 a…

linux 安装 cuda

需求&#xff1a; inux 下安装 cuda 进程&#xff1a; 先查看一下系统版本 uname -a查看能支持什么版本的cudacuda toolkit 下载 wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run sudo sh cuda_11.1.0_4…

API 接口是什么?怎么对接 API?

一、API接口是什么&#xff1f; API接口即应用编程接口&#xff0c;是一些预先定义的函数&#xff0c;可以提供应用程序与开发人员基于某软件或硬件以访问一组例程的能力。简单来说&#xff0c;API接口相当于信息的桥梁&#xff0c;它可以让不同平台、应用程序或系统共享数据&…

红帽不再公开RHEL源码,下游如何应对,CentOS的最佳替代需要重新选择

之前写过两篇centos替代的文章 CentOS7将在三年后停止支持&#xff0c;有哪些替代品_centos7 替代_gsls200808的博客-CSDN博客 CentOS8替代盘点_centos8替代品_gsls200808的博客-CSDN博客 现在情况又有新变化了。 当地时间 6 月 21 日&#xff0c;红帽发布公告称&#xff0…

对Element DatePicker时间组件的封装,时间组件开始时间和结束时间绑定

背景 我们时常有时间范围选择&#xff0c;需要选择一个开始时间和一个结束时间给后端&#xff0c;但我们给后端的是两个字段&#xff0c; 分别是开始时间和结束时间&#xff0c;现在使用element绑定的值是一个数组&#xff0c;我们还要来回处理&#xff0c;很麻烦列表也的查询…

JAVA集成国密SM2

JAVA集成国密SM2加解密 一、pom配置二、代码集成2.1、目录结构2.2、源码2.3、测试 三、相关链接 国密算法概述&#xff1a;https://blog.csdn.net/qq_38254635/article/details/131801527 SM2椭圆曲线公钥密码算法 为非对称加密&#xff0c;基于ECC。该算法已公开。由于该算法…

react使用SVGA特效 常用api

下载插件 npm install svgaplayerweb --save react中代码 import React, { useEffect } from react; import SVGA from svgaplayerweb const Svga () > {const bofang () > {var player new SVGA.Player(#demoCanvas);//创建实例var parser new SVGA.Parser(#demo…

centos7安装 mongodb

一、rpm安装 1.1、配置MongoDB Enterprise的yum 源文件 [mongodb-enterprise] nameMongoDB Enterprise Repository baseurlhttps://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/3.4/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp…