C语言之通讯录

9efbcbc3d25747719da38c01b3fa9b4f.gif

 c语言中的小小白-CSDN博客c语言中的小小白关注算法,c++,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm=1001.2014.3001.5343

给大家分享一句我很喜欢我话:

知不足而奋进,望远山而前行!!!

铁铁们,成功的路上必然是孤独且艰难的,但是我们不可以放弃,远山就在前方,但我们能力仍然不足,所有我们更要奋进前行!!!

今天我们更新了通讯录内容,

🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝

前言:

前面我们已经讲过了顺序表的内容,今天我们就要基于顺序表来实现通讯录的内容

我们需要用C语言模拟一个通讯录可以用来存储1000个人的信息

每个人的信息包括:

姓名、电话、性别、住址、年龄

功能包括:

  1. 新增联系人
  2. 查找联系人
  3. 删除联系人
  4. 修改联系人
  5. 查看所有联系人
  6. 以名字排序所有联系人

一、菜单

想要创建一个通讯录,首先我们要有一个菜单,下面我们来看一下如何创建一个菜单:

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");}

这就是一个通讯录菜单,这里我们可以看到它可以实现一些功能,例如增加删除联系人等等。

二、通讯录主函数

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 SHOW:ShowContact(&con);break;case SORT:break;case EXIT:break;default:break;}} while (input);
}int main()
{test();return 0;
}

这边就是我们的通讯录的主函数了,我们可以通过他去实现各个功能。

三、初始化通讯录

我们第一步要做的当然还是初始化通讯录,

void InitContact(Contact* pc)
{memset(pc->data,0,sizeof(pc->data));pc->sz = 0;
}

这就是初始化通讯录的代码,很简单,但是也要注意防止出错。memset函数作用就是将data这个存储到通讯录这个结构体的数组初始化为0;

四、通讯录的添加

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 DelContact(Contact* pc)
{char name[MAX_name];assert(pc);//删除if (pc->sz == 0){printf("通讯录为空,无需继续删除\n");return;}printf("请输入要删除的人的名字:>");scanf("%s", name);int del = FindByName(pc, name);if (del == -1){printf("要删除的人不存在:>");return;}/*int del = 0;int flag = 0;for (int i = 0; i < pc->sz; i++){if (strcmp(pc->data[i].name, name) == 0){del = i;flag = 1;break;}}if (flag == 0){printf("要删除的人不存在\n");return;}*/for (int i = del; i < pc->sz-1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("你成功删除联系人\n");
}

六、通讯录的查看

void ShowContact(const Contact* pc)
{printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");int i = 0;for (i = 0; i < pc -> sz; i++){printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name,pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);}
}

七、通讯录的查找

static int FindByName(Contact* pc, char name[])
{for (int i = 0; i < pc->sz; i++){if (strcmp(pc->data[i].name, name) == 0){return i;}}return -1;
}
void SearchContact(const Contact* pc) {char name[MAX_name] = { 0 };printf("请输入要查找人的名字:>");scanf("%s", name);int pos = FindByName(pc, name);if (pos == -1)printf("要查找的人不存在\n");else{printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tele,pc->data[pos].addr);}
}

八、通讯录的整体代码

contact.c

#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
#include<string.h>void InitContact(Contact* pc)
{memset(pc->data,0,sizeof(pc->data));pc->sz = 0;
}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)
{printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");int i = 0;for (i = 0; i < pc -> sz; i++){printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\n", pc->data[i].name,pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);}
}static int FindByName(Contact* pc, char name[])
{for (int i = 0; i < pc->sz; i++){if (strcmp(pc->data[i].name, name) == 0){return i;}}return -1;
}void DelContact(Contact* pc)
{char name[MAX_name];assert(pc);//删除if (pc->sz == 0){printf("通讯录为空,无需继续删除\n");return;}printf("请输入要删除的人的名字:>");scanf("%s", name);int del = FindByName(pc, name);if (del == -1){printf("要删除的人不存在:>");return;}/*int del = 0;int flag = 0;for (int i = 0; i < pc->sz; i++){if (strcmp(pc->data[i].name, name) == 0){del = i;flag = 1;break;}}if (flag == 0){printf("要删除的人不存在\n");return;}*/for (int i = del; 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");else{printf("%-10s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");printf("%-10s\t%-4d\t%-5s\t%-12s\t%-30s\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)
{assert(pc);char name[MAX_name] = { 0 };printf("请输入要修改人的名字:");scanf("%s", name);int pos = FindByName(pc, name);if (pos == -1){printf("要查找的人不存在\n");}else{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);}
}void ContactBreak(Contact* pc)
{assert(pc);}

test.c

#define _CRT_SECURE_NO_WARNINGS
#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");}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 SHOW:ShowContact(&con);break;case SORT:break;case EXIT:break;default:break;}} while (input);
}int main()
{test();return 0;
}

contact.h

#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>#define MAX 100
#define MAX_name 10
#define MAX_sex 5
#define MAX_TELE 12
#define MAX_ADDR 30enum OPTION
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};typedef struct PeoInfo
{char name[MAX_name];int age;char sex[MAX_sex];char tele[MAX_TELE];char addr[MAX_ADDR];
}PeoInfo;//占12个字节typedef struct Contact
{PeoInfo data[100];int sz;
}Contact;//初始化通讯录
void InitContact(Contact* pc);//增加联系人信息
void AddContact(Contact* pc);//显示所有联系人
void ShowContact(const Contact* pc);//仅仅是显示,不会修改,所以加上const//删除联系人
void DelContact(Contact* pc);//查找联系人
void SearchContact(const Contact* pc);//修改指定联系人
void ModifyContact(Contact* pc);//通讯录的销毁
void ContactBreak(Contact* pc);

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

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

相关文章

群晖NAS使用Docker部署大语言模型Llama 2结合内网穿透实现公网访问本地GPT聊天服务

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&#xff0c;包括聊天机…

FME学习之旅---day19

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 如何使用 Esri 模板地理数据库 在学习之初&#xff0c;首先了解什么是Esri模板、如何使用Esri模板以及如何创建Esri模板 有两种类型的 Esri 模板&#xff1a;文件地理数据库 &#xff08;.gd…

nginx代理解决跨域问题

文章目录 一、什么是跨域、跨域问题产生的原因二、注意事项三、nginx代理解决总结 一、什么是跨域、跨域问题产生的原因 跨域&#xff08;Cross-Origin&#xff09;是指在 Web 开发中&#xff0c;一个网页的运行脚本试图访问另一个网页的资源时&#xff0c;这两个网页的域名、…

Java进阶-反射的详解与应用

本文深入探讨了Java反射机制的核心概念、应用实例及其在现代Java开发中的重要性。文章首先介绍了反射的基本原理和能力&#xff0c;包括在运行时动态获取类信息、操作对象字段和方法的能力。随后&#xff0c;通过具体代码示例&#xff0c;展示了如何利用反射进行字段访问、方法…

idea 报错 Could not list the contents of folder “ftps

idea 报错 Could not list the contents of folder "ftps 解决方案 这里看到了网上的解决方案&#xff0c;顺便再记录一下。打开 【高级】菜单 - 取消勾选 被动模式。然后点击测试连接&#xff0c;显示连接成功&#xff01; ftp中的主动模式和被动模式 主动模式&…

D-迷恋网游(遇到过的题,做个笔记)

我的代码&#xff1a; #include <iostream> using namespace std; int main() {int a, b, c; //a表示内向&#xff0c;b表示外向&#xff0c;c表示无所谓cin >> a >> b >> c; //读入数 if (b % 3 0 || 3-b % 3 < c) //如果外向的人能够3人组成…

【饿了么笔试题汇总】-2024-04-02-饿了么春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新饿了么近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x…

MATLAB简介、下载及安装

1、MATLAB简介 MATLAB&#xff08;Matrix Laboratory&#xff09;是由MathWorks公司开发的一款强大的商业数学软件环境&#xff0c;主要用于数值计算、算法开发、数据可视化、数据分析和基于模型的设计等多种用途。MATLAB被广泛应用在学术研究、工程计算、经济建模、控制系统设…

Tuxera NTFS for Mac2023绿色免费版 免费的ntfs for mac 免费读写硬盘U盘工具

Tuxera NTFS 2023 Mac免费版是款适合Mac用户使用的磁盘读写工具。Tuxera NTFS 2023 Mac可以很好的帮助用户在Mac上打开、编辑、复制、移动或删除存储在Windows NTFS格式的USB驱动器上的文件。并且Tuxera NTFS 2023 Mac还可以无阻碍地使用各种文件系统磁盘&#xff0c;还能解决磁…

WebKit揭秘:从内部结构到应用程序开发

文章目录 WebKit结构简介核心模块其他组件多进程架构&#xff08;WebKit2&#xff09; Wekbit做了什么&#xff1f;应用程序如何利用 Webkit WebKit结构简介 WebKit是一个开源的浏览器引擎&#xff0c;它由多个模块组成&#xff0c;这些模块协同工作以提供Web内容的渲染和交互…

配置plsql链接Oracle数据库(新手)

配置plsql链接Oracle数据库 安装Oracle客户端 、安装plsql客户端并激活 配置tnsnames.ora文件&#xff08;路径D:\app\peter\Oracle\InstantClient\network\admin根据你的实际路径设置&#xff09; 配置文件如下 # tnsnames.ora Network Configuration File: D:\app\peter\O…

每日五道java面试题之消息中间件MQ篇(二)

目录&#xff1a; 第一题. RabbitMQ的工作模式第二题. 如何保证RabbitMQ消息的顺序性&#xff1f;第三题. 消息如何分发&#xff1f;第四题. 消息怎么路由&#xff1f;第五题. 如何保证消息不被重复消费&#xff1f;或者说&#xff0c;如何保证消息消费时的幂等性&#xff1f; …