通讯录的8种功能的具体实现和整个程序的代码

简介: 具体详细讲解看上一个博客(贼细)1.头文件(声明各种函数和定义各种类型的地方)2.测试文件(main函数所在,代码开始的地方)3.函数实现文件(8种功能的具体实现,每一个函数都是独立实现,无嵌套使用)4.以上你可以写在一个文件中也可以写在不同文件中

具体详细讲解看上一个博客(贼细)

1.头文件(声明各种函数和定义各种类型的地方)

#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define MAX 1000
#define MAX_NAME 20
#define MAX_TELE 12
#define MAX_ID 19
#define MAX_ADD 30
#define MAX_SEX 5
enum xuhao
{
  exit,
  add,
  dele,
  search,
  tihuan,
  show,
  sort,
  empty
};
struct Peoinfor
{
  char name[MAX_NAME];
  char tele[MAX_TELE];
  char id[MAX_ID];
  char add[MAX_ADD];
  char sex[MAX_SEX];
  int age;
};
struct Contact
{
  struct Peoinfor data[MAX];
  int num;
};
void InitContact(struct Contact* ps);
void AddContact(struct Contact* ps);
void ShowContact(struct Contact* ps);
void DeleContact(struct Contact* ps);
void TihuanContact(struct Contact* ps);
void SortContact(struct Contact* ps);
void SearchContact(struct Contact* ps);

2.测试文件(main函数所在,代码开始的地方)

#include"contact.h"
void menu()
{
    printf("-----------  0.exit  ------------\n");
    printf("-----------  1.add   ------------\n");
    printf("-----------  2.dele  ------------\n");
    printf("-----------  3.serach------------\n");
    printf("-----------  4.tihuan------------\n");
    printf("-----------  5.show  ------------\n");
    printf("-----------  6.sort  ------------\n");
    printf("-----------  7.empty ------------\n");
}
int main()
{
    struct Contact con;
    int input = 0;
    InitContact(&con);
    do
    {
        menu();
        printf("请选择你要使用的功能:");
        scanf("%d",&input);
        switch (input)
        {
        case add:
            AddContact(&con);
            break;
        case dele:
            DeleContact(&con);
            break;
        case search:
            SearchContact(&con);
            break;
        case tihuan:
            TihuanContact(&con);
            break;
        case show:
            ShowContact(&con);
            break;
        case sort:
            SortContact(&con);
            break;
        case empty:
            break;
        case exit:
            printf("退出通讯录的录入\n");
            break;
        default:
            printf("选择有误,请重新输入:\n");
        }
    } while (input);
    return 0;
}

3.函数实现文件(8种功能的具体实现,每一个函数都是独立实现,无嵌套使用)

#include"contact.h"
//1.InitContact函数的实现
void InitContact(struct Contact* ps)
{
  memset(ps->data, 0, sizeof(ps->data));
  ps->num = 0;
}
//2.AddContact函数的实现
void AddContact(struct Contact* ps)
{
  if (ps->num >= MAX)
  {
    printf("通讯录已满,请扩大通讯录后,再进行添加");
  }
  else
  {
    printf("请输入你所要增添的信息\n");
    printf("请输入好友姓名:");
    scanf("%s",ps->data[ps->num].name);
    printf("请输入好友电话:");
    scanf("%s",ps->data[ps->num].tele);
    printf("请输入好友id:");
    scanf("%s", ps->data[ps->num].id);
    printf("请输入好友住址:");
    scanf("%s", ps->data[ps->num].add);
    printf("请输入好友性别:");
    scanf("%s", ps->data[ps->num].sex);
    printf("请输入好友年龄:");
    scanf("%d", &(ps->data[ps->num].age));
    ps->num++; 
      printf("输入成功\n");
  }
}
//3.这个就是删除功能
void DeleContact(struct Contact* ps)
{
  if (ps->num == 0)
  {
    printf("你还没有好友给你删\n");
  }
  else if (ps->num > 0)
  {
    int i = 0;
    char name[MAX_NAME];
    printf("请输入你要删除的好友信息\n");
    scanf("%s",&name);
    if (0 == strcmp(ps->data[i].name, name))
    {
      for (i = 0; i < ps->num; i++)
      {
        ps->data[i] = ps->data[i + 1];
        ps->num--;
      }
      printf("删除成功\n");
    }
    else if (i == ps->num)
    {
      printf("找不到该好友信息\n");
    }
  }
}
//4.替换功能的实现(没有一次写对)
void TihuanContact(struct Contact* ps)
{
  if (ps->num == 0)
  {
    printf("无好友信息可以替换\n");
  }
  else
  {
    int i = 0;
    char name[MAX_NAME];
    printf("请输入你要替换的名字:\n");
    scanf("%s", &name);
    if (0 == strcmp(ps->data[i].name, name))
    {
      printf("请替换你的姓名:");
      scanf("%s",ps->data[i].name);
      printf("请替换你的电话::");
      scanf("%s", ps->data[i].tele);
      printf("请替换你的id:");
      scanf("%s", ps->data[i].id);
      printf("请替换你的地址:");
      scanf("%s", ps->data[i].add);
      printf("请替换你的性别:");
      scanf("%s", ps->data[i].sex);
      printf("请替换你的年龄:");
      scanf("%d",&(ps->data[i].age));
      printf("替换成功\n");
    }
    if (0 != strcmp(ps->data[i].name, name))
    {
      printf("无可替换的好友信息\n");
    }
  }
}
//5.展示功能的实现
void ShowContact(struct Contact* ps)
{
  if (ps->num == 0)
  {
    printf("你还没有好友哦!快去交朋友吧!\n");
  }
  else
  {
    int i = 0;
    printf("%-5s\t %-12s\t %-20s\t %-20s\t %-5s\t %-5s\n", "姓名", "电话", "身份证号", "住址", "性别", "年龄");
    for (i = 0; i < ps->num; i++)
    {
      printf("%-5s\t %-12s\t %-20s\t %-20s\t %-5s\t %-5d\n",
        ps->data[i].name,
        ps->data[i].tele,
        ps->data[i].id,
        ps->data[i].add,
        ps->data[i].sex,
        ps->data[i].age);
    }
  }
}
//6.查找功能的实现
void SearchContact(struct Contact* ps)
{
  if (ps->num == 0)
  {
    printf("你还没有好友你查个鬼\n");
  }
  else
  {
    int  i = 0;
    char name[MAX_NAME];
    printf("请输入你要查找的好友信息\n");
    scanf("%s",&name);
    if (0 == (strcmp(ps->data[i].name, name)))
    {
      printf("找到了你的好友信息\n");
      printf("%-5s\t %-12s\t %-20s\t %-20s\t %-5s\t %-5s \n","姓名","电话","身份证","地址","性别","年龄");
      printf("%-5s\t %-12s\t %-20s\t %-20s\t %-5s\t %-5d \n", ps->data[i].name, ps->data[i].tele, ps->data[i].id, ps->data[i].add, ps->data[i].sex, ps->data[i].age);
      printf("找到了哦!,是它是它就是它!\n");
    }
  }
}
//7.排序功能的实现
void SortContact(struct Contact* ps)
{
  int i = 0;
  for (i = 0; i < ps->num; i++)
  {
    int j = 0;
    for (j = 0; j < ps->num - i - 1; j++)
    {
      if (strcmp(ps->data[j].name, ps->data[j + 1].name) > 0)
      {
        struct Peoinfor tmp = ps->data[j];
        ps->data[j] = ps->data[j + 1];
        ps->data[j + 1] = tmp;
      }
    }
  }
}
//8.清空功能
void Emptycontact(struct Contact* ps)
{
  char ch[10];
  printf("真的确认将所有好友信息清空吗?(是/不是)\n");
  scanf("%s", &ch);
  if (0 == strcmp("是", ch))
  {
    ps->num = 0;
    printf("已全部清空\n");
  }
  else
  {
    printf("清空失败\n");
  }
}

4.以上你可以写在一个文件中也可以写在不同文件中

相关文章
|
Rust Linux iOS开发
|
机器学习/深度学习 算法 数据可视化
一图胜千言:EBImage库分割和标注让你的图像说话
一图胜千言:EBImage库分割和标注让你的图像说话
447 0
|
9月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
247 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
11月前
|
缓存 5G 开发者
【提效】docker镜像构建优化-提速10倍
本文主要记录了自己通过查阅相关资料,一步步排查问题,最后通过优化Docerfile文件将docker镜像构建从十几分钟降低到1分钟左右,效率提高了10倍左右。
955 122
|
网络协议 虚拟化
VMware安装OpenEuler(安装界面)2
VMware安装OpenEuler(安装界面)
195 1
|
存储 监控 安全
得物 ZooKeeper SLA 也可以 99.99%丨最佳实践
在本文中,作者探讨了ZooKeeper(ZK)的一个内存占用问题,特别是当有大量的Watcher和ZNode时,导致的内存消耗。
44078 116
|
存储 Python 容器
python字典的常用操作方法
python字典的常用操作方法
|
机器学习/深度学习 监控 自动驾驶
基于深度学习的动态场景理解
基于深度学习的动态场景理解是一种通过计算机视觉技术自动分析和解释动态环境中物体、事件和交互的能力。该技术在自动驾驶、智能监控、机器人导航、增强现实等领域有着广泛应用。
307 1
|
弹性计算 运维 Kubernetes
阿里云ECS与混合云策略结合,提供云上云下无缝对接,提升业务灵活性和运维效率。
【7月更文挑战第3天】阿里云ECS与混合云策略结合,提供云上云下无缝对接,提升业务灵活性和运维效率。ECS支持多种计费模式和先进架构,保证低延迟计算。混合云融合公有云灵活性与私有云安全,实现资源最优配置。通过VPC互通、应用迁移、数据同步实践,确保安全合规,助力企业数字化转型。阿里云服务展示技术实力,支持企业在混合云时代抓住机遇。
438 3
|
消息中间件 大数据 Kafka
【建议收藏】技术人必看:如何选择适合你公司的消息队列工具
本文介绍了消息队列在系统架构中的三大作用:异步处理、削峰填谷和解耦,并通过实例详细阐述了每种作用的优势。文中推荐了三款消息队列工具:RabbitMQ适合中小型公司,因其开源和社区活跃;RocketMQ适合大型公司,因其强大的二次开发能力;而在大数据领域,Kafka是实时计算和日志采集的标准选择。作者小米鼓励读者根据自身需求选择合适的消息队列,并邀请大家探讨技术话题。
469 2