通讯录的实现

2023-11-04

#ifndef _TONGXUNLU_H__
#define _TONGXUNLU_H__
#define MAX_NAME 20
#define MAX_PHONE 11
#define MAX_PEO 1000

typedef struct PeoInfo
{
    char name[MAX_NAME];
    int age;
    char phone[MAX_PHONE];
}PeoInfo;

typedef struct Contact
{
    PeoInfo date[MAX_PEO];//创建一个数组,数组里有MAX_PEO个结构体类型
    int count;//记录通讯录的当前人数
}Contact,*pContact;

enum
{
    EXIT,
    ADD,
    DELETE,
    SELECT,
    MODIFY,
    SHOW,
    EMPT,
    SORT
};
void menu();
void InitContact(pContact pc);
void AddPeoInfo(pContact pc);
void DelPeoInfo(pContact pc);
void ShowPeoInfo(pContact pc);
void SelPeoInfo(pContact pc);
void MfyPeoInfo(pContact pc);
void EmtPeoInfo(pContact pc);
void SorPeoInfo(pContact pc);
#endif
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<string.h>
#include"tongxunlu.h"
void menu()//菜单选择界面
{
    printf("---------------------------------------------\n");
    printf("------------ 1.ADD      2.DELETE ------------\n");
    printf("------------ 3.SELECT   4.MODIFY ------------\n");
    printf("------------ 5.SHOW     6.EMPT   ------------\n");
    printf("------------ 7.SORT     0.EXIT   ------------\n");
    printf("---------------------------------------------\n");
}

void InitContact(pContact pc)
{
    assert(pc);
    pc->count = 0;
    memset(pc->date, 0, sizeof(pc->date));
}

int Find(pContact pc, char *pname)
{
    int i = 0;
    for (i = 0; i <= pc->count; i++)
    {
        if (strcmp(pc->date[i].name, pname) == 0)
        {
            return i;
        }
    }
    return -1;
}

void AddPeoInfo(pContact pc)
{
    assert(pc);
    if (pc->count >= MAX_PEO)
    {
        printf("通讯录已满\n");
        return;
    }
    printf("请输入你要添加联系人的姓名:");
    scanf("%s", &pc->date[pc->count].name);
    printf("请输入你要添加联系人的年龄:");
    scanf("%d", &pc->date[pc->count].age);
    printf("请输入你要添加联系人的电话号码:");
    scanf("%s", &pc->date[pc->count].phone);
    printf("添加成功\n");
    pc->count++;
}

void DelPeoInfo(pContact pc)
{
    char name[MAX_NAME];
    int ret = 0;
    printf("请输入要删除联系人的姓名:");
    scanf("%s", &name);
    ret = Find(pc, name);
    if (ret != -1)
    {
        pc->date[ret] = pc->date[pc->count];
        pc->count--;
        printf("删除成功\n");
    }
    else {
        printf("查无此人\n");
    }
}
void SelPeoInfo(pContact pc)
{
    char name[MAX_NAME];
    int ret = 0;
    printf("请输入要查找联系人的姓名:");
    scanf("%s", &name);
    ret = Find(pc, name);
    if (ret != -1)
    {
        printf("%-15s %-10d %-10s\n", pc->date[ret].name,
            pc->date[ret].age, pc->date[ret].phone);
    }
    else {
        printf("查无此人\n");
    }
}

void MfyPeoInfo(pContact pc)
{
    char name[MAX_NAME];
    int ret = 0;
    printf("请输入要修改联系人的姓名:");
    scanf("%s", &name);
    ret = Find(pc, name);
    if (ret != -1)
    {
        printf("%-15s %-10d %-10s\n", pc->date[ret].name,
            pc->date[ret].age, pc->date[ret].phone);
        int i = 0;
        do
        {
            printf("输入你要修改的选项:\n");
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("请输入修改后的名字:");
                scanf("%s", pc->date[ret].name);
                break;
            case 2:
                printf("请输入修改后的年龄:");
                scanf("%d", pc->date[ret].age);
                break;
            case 3:
                printf("请输入修改后的手机号:");
                scanf("%s", pc->date[ret].phone);
                break;
            case 0:
                break;
            default:
                printf("输入错误,请重新输入:");
                break;
            }
        } while (i);
    }
    else {
        printf("查无此人\n");
    }
}
void ShowPeoInfo(pContact pc)
{
    int i = 0;
    printf("-------------------------------------\n");
    printf("name            age        phone\n");
    for (i = 0; i < pc->count; i++)
    {
        printf("%-15s %-10d %-10s\n", pc->date[i].name,
            pc->date[i].age, pc->date[i].phone);
    }
    printf("-------------------------------------\n");
}

void EmtPeoInfo(pContact pc)
{
    pc->count = 0;
}

void SorPeoInfo(pContact pc)
{
    int i = 0;
    int j = 0;
    for(i = 0; i < pc->count; i++)
        for (j = i + 1; j <= pc->count; j++)
        {
            if (strcmp(pc->date[i].name, pc->date[j].name) < 0)
            {
                PeoInfo tmp;
                tmp = pc->date[i];
                pc->date[i] = pc->date[j];
                pc->date[j] = tmp;
            }
        }
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include"tongxunlu.h"
int main()
{
    Contact my_con;
    int input = 0;
    InitContact(&my_con);
    do {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input) {
        case EXIT:
            printf("退出成功\n");
            break;
        case ADD:
            AddPeoInfo(&my_con);
            break;
        case DELETE:
            DelPeoInfo(&my_con);
            break;
        case SELECT:
            SelPeoInfo(&my_con);
            break;
        case MODIFY:
            MfyPeoInfo(&my_con);
            break;
        case SHOW:
            ShowPeoInfo(&my_con);
            break;
        case EMPT:
            EmtPeoInfo(&my_con);
            break;
        case SORT:
            SorPeoInfo(&my_con);
            break;
        default:
            printf("瞎搞,重新输入\n");
            break;
        }
    } while (input);
    system("pause");
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通讯录的实现 的相关文章

  • Unity--Physics.OverlapSphere的参数LayerMask和GameObject的layer

    Layer介绍 Unity中是用int32来表示32个Layer层 int32表示二进制一共有32位 0 31 在Unity中每个GameObject都有Layer属性 默认的Layer都是Default 在Unity中可编辑的Layer共
  • buck芯片能产生负压吗?

    buck芯片能产生负压吗 1 前言 2 分析 1 前言 有的运放需要正负压供电 负压的产生一般是由电源芯片处理 将正压转换为负压 那么问题来了 buck能产生负压么 2 分析 开关电源有三种基本拓扑 buck boost buck boos
  • 敏捷开发系列之旅 第三站(认识FDD特征驱动开发)

    上篇文章中 我们探讨了 什么是XP极限编程 以及极限编程的管理思想 核心价值观等等 在敏捷开发之旅的第三站 我想要和大家一起分享FDD特征驱动开发方法 特征驱动开发 Feature Driven Development 还是老规矩 讨论之前
  • DALL·E 2 解读

    目录 一 导读 论文信息 CLIP 打通文本 图像模型 相关讲解 扩散模型Diffusion Model相关讲解 二 DALL E 2 模型解读 DALL E 2 模型总览 DALL E 2 训练过程 DALL E 2 推理过程 由文本生成
  • project 2007项目管理软件

    Microsoft Office Project 2007 项目管理软件 Microsoft Project 2003 2007是国际上最为盛行的基于网络的项目管理软件 在各类IT集成及开发项目 新产品研发 房地产项目 设计项目 工程建设项
  • Java性能调优笔记

    Java性能调优笔记 调优步骤 衡量系统现状 设定调优目标 寻找性能瓶颈 性能调优 衡量是否到达目标 如果未到达目标 需重新寻找性能瓶颈 性能调优结束 寻找性能瓶颈 性能瓶颈的表象 资源消耗过多 外部处理系统的性能不足 资源消耗不多但程序的
  • JSON中的key下划线与驼峰互转

    JSON中的key下划线与驼峰互转工具类 1 JSON中的key 下划线转驼峰 public final static Object underlineToHump String json Object obj JSON parse jso
  • WebGL射击游戏的优化

    myshmup com 允许在浏览器中创建 shmup 射击 游戏 我们可以使用具有创意通用许可证的资源或上传自己的艺术作品和声音 创建的游戏可以在网站上发布 该平台不需要编码 游戏对象的配置是在用户界面的帮助下执行的 后端是使用Djang
  • Spring MVC结果转换

    一 返回视图 ModelAndView 1 视图路径 默认在当前Control的路径下 表示项目部署的根目录 例如 new ModelAndView home jsp 返回的路径是 user home jsp new ModelAndVie
  • 实现一个最小的操作系统

    实现一个最小的操作系统 本实验在Vmware虚拟机的Linux环境下完成 准备工作 硬件 VMware下Linux虚拟机 Ubuntu 18 04 5 LTS 软件 汇编编译器NASM 软盘绝对扇区读写工具 dd命令 VMware的安装以及
  • 机器人基础原理1_2——机器人分类与常见坐标系

    机器人分类与常见坐标系 1 机器人的分类 1 按辈分 2 对应人的不同器官 3 按其构成机构 3 按驱动方式不同 4 按用途分类 2 常见的坐标系及对应的机器人结构 2 1 笛卡尔坐标系 2 2 圆柱坐标系 2 3 球坐标系 1 机器人的分
  • ThoughtWorks(中国)程序员读书雷达

    软件业的特点是变化 若要提高软件开发的技能 就必须跟上技术发展的步伐 埋首醉心于项目开发与实战 固然能够锤炼自己的开发技巧 却难免受限于经验与学识 世界上并不存在速成的终南捷径 但阅读好的技术书籍 尤其是阅读大师们的经典著作 总能收到事半功
  • Zabbix学习笔记(一)---Zabbix的安装

    目录 前言 一 Zabbix简介 二 下载与安装 1 CentOS 9安装 2 安装zabbix A 安装Zabbix包 B 安装Zabbix server 前端 Agent C 设置httpd D 安装数据库 总结 前言 近期学习网络运维
  • vue中使用高德地图实现历史轨迹回放并能控制播放轨迹的倍速

    如何在vue中引入高德地图在这里就不过多赘述 大家可以看这篇参考在vue中引入高德地图 说正事 使用高德地图实现轨迹回放 并能实现倍速控制 具体效果如图 核心代码 绘制小车 this marker new AMap Marker posit
  • ElasticSearch入门

    ElasticSearch概述 ElasticSearch 简称es es是一个开源的高扩展式全文检索引擎 它可以近乎实时的存储 检索数据 本身扩展性很好 可以扩展到上百台服务器 处理PB级别的数据 ElasticSearch安装 声明 j
  • Qt 学习之旅 ----可移动的无边框圆角窗口

    Qt 默认的窗口会有系统自带的边框 如图 但是在大多数情况下 系统自带的边框是不需要的 去掉边框很简单 在建立窗口时 加入如下一个函数 w setWindowFlags Qt FramelessWindowHint 这样 边框就被去掉了 但
  • win7安装计算机的更新,解决win7系统更新升级教程

    操作系统是一个复杂的程序 在使用过程中也需要不断的更新 修复漏洞 但是很多朋友都会将win7系统的自动更新关闭 我给大家带来了win7系统更新升级的小方法 大家可以参考一下 win7系统可以说是目前最易用的操作系统 它增加了一些小功能 如快
  • DevOps B站学习版(一)

    学习地址 01 DevOps的诞生 哔哩哔哩 bilibilihttps www bilibili com video BV1Pt4y1H7Zq p 1 vd source 1f09c23f556b3d6a9b7706f8db12fa54
  • 人类的行为与程序计算

    胡言乱语 引子 人类从出生伊始都在面临着生活中的种种问题 人类无时无刻不在进行着问题的解决过程 程序从设计之初也是用来解决生活中特定问题的 那么人类行为与程序计算理论之间又有什么相似性呢 人类 人类所面临的问题 人类解决问题的过程 人类解决
  • vue 按钮 路由

    APP vue 在已有的按钮上加上路由功能 这里的按钮和布局容器使用了 elementui 的但无关原理 按下按钮即可跳转页面

随机推荐

  • 雷达测高知识点总结

    1 激光和雷达的区别 雷达 radar radio detection and ranging 无线电探测和测距 雷达波段 雷达发射电波的频率范围 大多数雷达工作在超短波及微波波段 其频率范围在30 300000兆赫 相应波长为1mm 10
  • 利用PyTorch自己动手从零实现YOLOv3(详细注释)

    学习一个算法最好的方式就是自己尝试着去实现它 因此 在这片博文里面 我会为大家讲解如何用PyTorch从零开始实现一个YOLOv3目标检测模型 参考源码请在这里下载 模型实现总共会分为以下六部分 一 配置文件以及解析 二 搭建YOLO模型框
  • 哈希结构(图文详解)【哈希表,哈希桶,位图,布隆过滤器】

    哈希结构 哈希概念 常见的K V结构 实现了元素关键码与元素值的映射关系 但没有实现元素关键值与元素存储位置的映射关系 在遍历过程中 一般的顺序表或搜索二叉树要进行关键值的多次比较 其中顺序表的时间复杂度为O n 二叉搜索树的时间复杂度O
  • phantomjs实现html生成pdf

    phantomjs实现html生成pdf 实现比较简单 同时能够实现对页面的完全展示成pdf 但是生成的时间比较长且并发很差 很容易直接挂掉 以下是实现 1 下载phantomjs 2 1 1 windows并解压到本地路劲 2 实现jav
  • php接口post数据接收不到参数原因

    1 检查头信息content type是不是为 content type application x www form urlencoded 这种传输是以表单的方式提交数据php使用 POST方式接受 2 如果头信息content type
  • python与mongodb交互-->pymongo

    from pymongo import MongoClient 创建数据库连接对象 client MongoClient ip 27017 选择一个数据库 db client admin db authenticate python pyt
  • c++学习——类和对象

    类和对象 类和对象的基本概念 类的封装 尽量把成员属性设置为私有的 小练习 结构体和类的区别 圆的周长类案例 学生类的案例 汽车案例 立方体案例 点和圆案例 类和对象的基本概念 类是自定义数据类型 是C语言的结构体进化而成的 对象是类实例化
  • 硬件笔记(一)——DCDC典型电路分析

    此次小记分析的电路为SIM7600技术手册的推荐外部电源电路 LM2596内部包含150KHZ振荡器 输入电压范围最高可达40V 4 5V 40V 最高可提供3A的直流负载电流 输出电压可调范围1 23V 37V 现对此电路进行分析 1 D
  • 程序获取

    程序获取 机器学习 深度学习程序和数据获取方式 目录 程序获取 机器学习 深度学习程序和数据获取方式 程序获取方式1 程序获取方式2 程序获取方式3 程序获取方式4 程序获取方式5 程序获取方式6 程序获取方式1 私信博主或者博客底部联系博
  • jmeter线程组内的接口顺序执行解决办法

    一 压力测试场景分析 测试人员在使用jmeter对一个场景进行压力测试 在一个线程组内有多个接口时 测试人员想要测试在特定的时间段内一直循环该线程以测试服务器压力 但是jmeter在run线程组的时候 经常不会按照该线程组内的接口顺序执行
  • Ubuntu torch.cuda.is_available() 返回 False情况

    如果Ubuntu20 04 出现torch cuda is available 返回 False情况 解决方法 重新安装Pytorch Ubuntu20 04 CUDA 11 4 Pytorch配置安装 conda conda create
  • Hibernate 自动创建表

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到教程 1 在 hibernate cfg xml 添加这句话 可以自动生成数据表
  • 开放集识别的最新进展总结(源于Recent Advances in Open Set Recognition: A Survey)

    摘要 在现实的识别 分类任务中 由于受到各种客观因素的限制 在训练一个识别器或分类器摘 0 摘要 原因与场景 在现实的识别 分类任务中 训练模型的时候可能并没有所有类别的训练集 因此 这样训练出来的模型在没有出现过的类出现时 一般会失效 解
  • 中国科学院大学工程管理与信息技术学院 2014年招收以下八个领域在职工程硕...

    中国科学院大学工程管理与信息技术学院2014年招收以下八个领域在职工程硕士 欢迎广大考生报考 一 专业领域介绍 招生领域 研究方向 学费 报考条件 学位 证书 学习方式
  • 数据结构与算法——栈的实现及模拟

    目录 一 栈的原理 二 栈的实现 1 栈的定义 2 栈的初始化 3 入栈 4 出栈 5 获取栈顶元素 6 栈的大小 7 判断栈是否为空 8 栈的销毁 一 栈的原理 堆栈 英语 stack 又称为栈或堆叠 是计算机科学中的一种抽象资料类型 只
  • Kafka核心设计与实践原理总结:进阶篇

    kafka作为当前热门的分布式消息队列 具有高性能 持久化 多副本备份 横向扩展能力 我学习了 深入理解Kafka 核心设计与实践原理总结 一书后 对其中主要的知识点进行了总结 便于理解和掌握kafka的原理和应用 在这里分享出来 希望也能
  • es常用curl命令

    说明 仅记录实验室测试过程 不作为官方文档使用 可能会有很多地方未能验证 因此无法进行技术兜底 需使用方多加验证测试 涉及到高危需走变更 目前测试版本均为651及以前版本 命令样例基于安全模式 如果是在非安全模式下 将命令中的参数 tlsv
  • .Net Core下简单的JWT黑名单中间件

    自从JWT认证方式在互联网上蔓延后 Session认证方式就被挤掉了一大半的生存空间 这里我们不讲JWT与Session两种方式的优缺点 我们只讲如何通过JWT的黑名单来阻止某些Token的登录 设置黑名单 也就是说要将Token写入某个存
  • gRPC:以 C++为例

    文章目录 1 gRPC 环境搭建 1 1 安装 cmake 1 2 安装 gcc gdb 1 3 安装 gRPC 1 4 protobuf 安装 1 5 测试环境 2 1 grpc 同步 2 1 定义服务 2 2 gRPC 服务端 2 3
  • 通讯录的实现

    ifndef TONGXUNLU H define TONGXUNLU H define MAX NAME 20 define MAX PHONE 11 define MAX PEO 1000 typedef struct PeoInfo