C语言:通讯录(纯代码)

目录

背景:VS2019编译器

创建文件:

contact.h代码:

test.c代码:

contact.c代码:


背景:VS2019编译器

创建文件:

contact.h代码:

#pragma once#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <windows.h>//类型声明
typedef struct PeoInfo
{char name[20];int age;char sex[10];char tele[12];char addr[30];
}PeoInfo;//通讯录
typedef struct Contact
{PeoInfo data[100];//存放人的信息int count;		//记录当前通讯录中实际存储人的信息个数。
}Contact;//初始化通讯录
void InitContact(Contact* pc);//增加通讯录信息
void AddContact(Contact* pc);//显示通讯录信息
void ShowContact(Contact* pc);//删除通讯录信息
void DelContact(Contact* pc);//查找通讯录信息
void SearchContact(Contact* pc);//修改通讯录信息
void ModifyContact(Contact* pc);//排序通讯录信息
void SortContact(Contact* 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");printf("*************************************\n");
}
int main()
{int input = 0;Contact con;		//通讯录//初始化通讯录InitContact(&con);do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:		//增加AddContact(&con);break;case 2:		//删除DelContact(&con);break;case 3:		//查找SearchContact(&con);break;	case 4:		//修改ModifyContact(&con);break;case 5:		//显示ShowContact(&con);break;case 6:		//排序SortContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("选择错误,请重新输入\n");break;}} while(input);return 0;
}

contact.c代码:

#define _CRT_SECURE_NO_WARNINGS
//通讯录模块文件
#include "contact.h"#define MAX 100void InitContact(Contact* pc)
{assert(pc);pc->count = 0;memset(pc->data, 0, sizeof(pc->data));
}void AddContact(Contact* pc)
{assert(pc);if (pc->count == MAX){printf("通讯录已满,无法添加\n");return;}//printf("请输入名字:>");scanf("%s", pc->data[pc->count].name);printf("请输入年龄:>");scanf("%d", &pc->data[pc->count].age);printf("请输入性别:>");scanf("%s", pc->data[pc->count].sex);printf("请输入电话:>");scanf("%s", pc->data[pc->count].tele);printf("请输入地址:>");scanf("%s", pc->data[pc->count].addr);pc->count++;printf("增加成功\n");
}void ShowContact(Contact* pc)
{assert(pc);printf("%-20s\t%-5s\t%-5s\t%-12s\t%-30s\n", "姓名", "年龄", "性别", "电话", "地址");int i = 0;for (i = 0;i < pc->count;i++){printf("%-20s\t", pc->data[i].name);printf("%-5d\t", pc->data[i].age);printf("%-5s\t", pc->data[i].sex);printf("%-12s\t", pc->data[i].tele);printf("%-30s\n", pc->data[i].addr);}
}static int FindName(Contact* pc,char name[])
{assert(pc);int i = 0;for (i = 0;i < pc->count;i++){if (0 == strcmp(pc->data[i].name, name)){return i;}}return -1;
}void DelContact(Contact* pc)
{assert(pc);printf("请输入要删除的人名:>");char name[20] = { 0 };scanf("%s", name);int flag = FindName(pc, name);if (flag == -1){printf("要删除的信息不存在\n");return;}else{int i = 0;for (i = flag;i < pc->count - 1;i++){pc->data[i] = pc->data[i + 1];}pc->count--;printf("删除成功。\n");}}void SearchContact(Contact* pc)
{assert(pc);printf("请输入要查找人的名字:");char name[20] = { 0 };scanf("%s", name);//查找int flag = FindName(pc, name);if (flag == -1){printf("找不到该信息。\n");return;}else{printf("%-20s\t%-5d\t%-5s\t%-12s\t%-30s\n",pc->data[flag].name,pc->data[flag].age, pc->data[flag].sex, pc->data[flag].tele, pc->data[flag].addr);}
}void ModifyContact(Contact* pc)
{assert(pc);printf("请输入要修改的人名:");char name[20] = { 0 };scanf("%s", name);//查找int flag = FindName(pc, name);if (flag == -1){printf("找不到该信息。\n");return;}else{printf("请输入修改后的名字:>");scanf("%s", pc->data[flag].name);printf("请输入修改后的年龄:>");scanf("%d", &pc->data[flag].age);printf("请输入修改后的性别:>");scanf("%s", pc->data[flag].sex);printf("请输入修改后的电话:>");scanf("%s", pc->data[flag].tele);printf("请输入修改后的地址:>");scanf("%s", pc->data[flag].addr);printf("修改成功\n");}
}void SortContact(Contact* pc)
{assert(pc);//冒泡排序,按名字升序int i = 0;int j = 0;PeoInfo C = { 0 };for (i = 0;i < pc->count;i++){for (j = 1;j < pc->count - i;j++){if (strcmp(pc->data[j - 1].name, pc->data[j].name) > 0){C = pc->data[j - 1];pc->data[j - 1] = pc->data[j];pc->data[j] = C;}}}printf("排序成功。");
}

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

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

相关文章

FPGA的时钟资源

目录 简介 Clock Region详解 MRCC和SRCC的区别 BUFGs 时钟资源总结 简介 7系列FPGA的时钟结构图&#xff1a; Clock Region&#xff1a;时钟区域&#xff0c;下图中有6个时钟区域&#xff0c;用不同的颜色加以区分出来 Clock Backbone&#xff1a;从名字也能看出来&#x…

安卓 OpenGL ES 学习笔记

文章目录 OpenGL 学习笔记OpenGL 是什么&#xff1f;OpenGL ES是什么&#xff1f;怎么用&#xff1f;hello world如何实现动画效果 参考文章 OpenGL 学习笔记 OpenGL 是什么&#xff1f; OpenGL&#xff08;Open Graphics Library&#xff09;是一个跨平台的图形编程接口&…

Mint_21.3 drawing-area和goocanvas的FB笔记(七)

FreeBASIC gfx 基本 graphics 绘图 8、ScreenControl与屏幕窗口位置设置 FreeBASIC通过自建屏幕窗口摆脱了原来的屏幕模式限制&#xff0c;既然是窗口&#xff0c;在屏幕坐标中就有它的位置。ScreenControl GET_WINDOW_POS x, y 获取窗口左上角的x, y位置&#xff1b;ScreenC…

C++笔记之给枚举类型的变量赋值

C++笔记之给枚举类型的变量赋值 —— 杭州 2024-03-10 code review! 在C++中,你可以在结构体内部定义一个枚举类型,并在创建结构体变量时给枚举类型的变量赋值。下面是一个简单的例子展示了如何做到这一点: 代码 #include <iostream>// 定义结构体 struct MyStru…

如何在Windows系统使用固定tcp公网地址ssh远程Kali系统

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

在WSL2中安装多个Ubuntu教程

文章目录 前言一、前期准备1、WSL安装2、Docker安装 二、安装第二个Ubuntu系统1.切换为WSL22.获取Ubuntu16.04的tar文件从容器中导出tar 3. 将tar文件导入WSL4. 设置默认用户 总结 前言 适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 的一项功能&#xff0c;可用于在 Wind…

详解Linux例行性工作

例行性工作&#xff08;计划任务&#xff09; 场景&#xff1a; 生活中&#xff0c;我们有太多场景需要使用到闹钟&#xff0c;比如早上7点起床&#xff0c;下午4点开会&#xff0c;晚上8点购物&#xff0c;等等。再Linux系统里&#xff0c;我们同样也有类似的需求。比如我们…

VS Code搭建windows+远程Linux上Docker的开发环境

在本地windows桌面系统远程Linux上Docker搭建开发环境主要步骤如下&#xff1a; 一、安装vs code和插件 在windows系统上安装vs code&#xff0c;并安装好remote-ssh、dev-container插件&#xff0c;也可以直接安装Remote Development&#xff0c;他会默认把vs code远程的几种…

【硬件基础】STM32F103C8T6芯片引脚定义及功能介绍

1、引脚图片 2、引脚定义图 3、引脚功能介绍 3.1引脚定义图解释 上表中&#xff0c;S表示电源&#xff0c;IO表示输入输出&#xff0c;FT表示容忍电压可达5V&#xff0c;没有FT的只能达3.3V。 VBAT&#xff0c;备用电源引脚&#xff0c;当系统断电时&#xff0c;备用电源可给…

GEE错误——Landsat9数据集进行去云操作后显示白板

问题 我遇到了一些有关 Landsat9 图像中的云遮蔽和图像处理的问题。我正在分享我所使用的代码以及我感兴趣的区域(资产)。请帮我解决这个问题。我是一名 GEE 学习者。问题:最终图像在大面积上有云状覆盖。 这里我们查看了搜索出的代码发现并不是没有数据集导致的,该区域有…

springcloud第3季 consul服务发现注册,配置中心2

一 consul的作用 1.1 为何使用注册中心 为何要用注册中心&#xff1f; 1.A服务调用B服务&#xff0c;使用ip和端口&#xff0c;如果B服务的ip或者端口发生变化&#xff0c;服务A需要进行改动&#xff1b; 2.如果在分布式集群中&#xff0c;部署多个服务B&#xff0c;多个服…

运动想象 (MI) 迁移学习系列 (3) : MSFT

运动想象迁移学习系列:MSFT 0. 引言1. 主要贡献2. 数据增强方法3. 基于度量的空间滤波转换器3.1 空间过滤3.2 脑电图ViT3.2.1 变压器编码器层3.2.2 基于度量的损失函数 4. 实验结果4.1 消融实验4.2 基线任务对比4.3 跨主题 5. 总结欢迎来稿 论文地址&#xff1a;https://www.s…

用C语言执行SQLite3的gcc编译细节

错误信息&#xff1a; /tmp/cc3joSwp.o: In function main: execSqlite.c:(.text0x100): undefined reference to sqlite3_open execSqlite.c:(.text0x16c): undefined reference to sqlite3_exec execSqlite.c:(.text0x174): undefined reference to sqlite3_close execSqlit…

对中国境内所有地区KFC门店基本信息的统计(简略版)

我们要获取每个地区的kfc信息就要先获取中国一共有哪些地区 中国所有城市名称获取 import requests from lxml import etreewith open(f./省份.txt, w) as fp:fp.write() with open(f./城市.txt, w) as fp:fp.write()url1http://www.kfc.com.cn/kfccda/storelist/index.aspx#…

如何基于 esp-at 固件测试 TCP (UART 转 WiFi 透传)吞吐?

测试工具&#xff1a; windows/Ubuntu/Android&#xff08;电脑或手机与 ESP 开发板连接相同路由器&#xff09;iperf2 工具ESP 系列的开发板USB-TTL 串口调试工具路由器 测试固件&#xff1a; AT 固件 AT 固件硬件接线说明 不同环境下的 Iperf 工具安装说明 Iperf 工具用于…

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Nginx1.25.3

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库&#xff0c;终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手&#xff0c;按照 MySQL &#xff0c; Nacos &#xff0c; Redis &#xff0c; Nginx &#xff0c; Gateway &#xff0c; Auth &#xff0c;…

【数学】【组合数学】1830. 使字符串有序的最少操作次数

作者推荐 视频算法专题 本博文涉及知识点 数学 组合数学 LeetCode1830. 使字符串有序的最少操作次数 给你一个字符串 s &#xff08;下标从 0 开始&#xff09;。你需要对 s 执行以下操作直到它变为一个有序字符串&#xff1a; 找到 最大下标 i &#xff0c;使得 1 < i…

Android14之解决报错:No module named selinux(一百九十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

数据库 — 增删查改

一、操作数据库、表 显示 show databases;创建 create database xxx;使用 use xxx; 删除 drop database xxx;查看表&#xff1b; show tables; 查看表结构 desc 表名; 创建 create table 表名(字段1 类型1&#xff0c;字段2 类型2&#xff0c;.... ); 删除 drop table 表名; 二…

uniapp小程序获取位置权限(不允许拒绝)

需求 小程序上如果需要一些定位功能&#xff0c;那么我们需要提前获取定位权限。我们页面的所有功能后续都需要在用户同意的前提下进行&#xff0c;所以一旦用户点了拒绝&#xff0c;我们应该给予提示&#xff0c;并让用于修改为允许。 实现 1.打开手机GPS 经过测试发现即使…