C语言实现简单通讯录,增删查改。

这是一个使用C语言编写的简单通讯录管理程序,包括添加、删除、搜索、修改和显示联系人信息等功能。程序通过结构体存储联系人数据,并提供了相应的操作选项供用户选择。在`contact.c`文件中定义了具体的操作实现,如初始化通讯录、添加新联系人、删除联系人等。`main.c`文件是程序入口,控制整个流程。此外,`contact.h`文件包含了相关函数的声明。
摘要由CSDN通过智能技术生成

test.c文件

#include "contact.c"

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;
  //初始化通讯录
  struct Contact con; //

  InitContact(&con);

  do
  {
    menu();
    printf("请选择操作的数->");
    scanf("%d", &input);
    switch (input)
    {
    case ADD:
      AddContact(&con);
      break;
    case DEL:
      DelContact(&con);
      break;
    case SEARCH:
      SearchContatc(&con);
      break;
    case MODIFY:
    MondifContact(&con);
      break;
    case SHOW:
      ShowContact(&con);
      break;
    case SORT:
      /* code */
      break;
    case EXIT:
      /* code */
      printf("您已经退出!\n");
      break;
    default:
      printf("输入格式有误,请重新输入\n");
      break;
    }
  } while (input);

  return 0;
}

contatc.c文件

#include "contact.h"

void InitContact(struct Contact *ps)
{
  memset(ps->data, 0, sizeof(ps->data));
  ps->size = 0;
}
void AddContact(struct Contact *ps)
{
  if (ps->size == MAX)
  {
    printf("ͨ通讯录已满,请删除不必要的信息再添加\n");
  }
  else
  {
    printf("请输入姓名>");
    scanf("%s", ps->data[ps->size].name);
    printf("请输入年龄>");
    scanf("%s", &(ps->data[ps->size].age));
    printf("请输入信息>");
    scanf("%s", ps->data[ps->size].sex);
    printf("请输入电话>");
    scanf("%s", ps->data[ps->size].tele);
    printf("请输入地址>");
    scanf("%s", ps->data[ps->size].addr);
    ps->size++;
    printf("添加成功\n");
  }
}
void ShowContact(const struct Contact *ps)
{
  if (ps->size == 0)
  {
    printf("ͨ通讯录为空\n");
  }
  else
  {
    int i = 0;
    printf("%--20s\t%4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
    for (i = 0; i < (int)ps->size; i++)
    {
      printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
             ps->data[i],
             ps->data[i].age,
             ps->data[i].sex,
             ps->data[i].tele,
             ps->data[i].addr);
    }
  }
}
//static局部只能在本文件调用
static int FindByName(const struct Contact *ps, char name[MAX_NAME])
{
  int i = 0;
  // 1.查找删除内容下标
  for (i = 0; i < ps->size; i++)
  {
    //字符串之间使用strcmp比较 0返回0表示相等
    if (0 == strcmp(ps->data[i].name, name))
    {
      return i; //查找到了跳出循环,拿到当前的i
    }
  }
  return -1; //找不带返回-1
}
void DelContact(struct Contact *ps)
{
  char name[MAX_NAME];
  printf("请输入删除人的名:>");
  scanf("%s", name);
  // 使用第一个方式,找到删除的内容下标依次往前覆盖最后size-- 完成删除
  int pos = FindByName(ps, name); //找到了返回名字所在的下标,找不到则返回-1

  if (pos == -1)
  {
    printf("没有您查询的名字,请重新输入\n");
  }
  else
  {
    // 删除数据
    int j = 0;
    for (j = pos; j < (ps->size - 1); j++)
    {
      ps->data[pos] = ps->data[j + 1];
    }
    ps->size--;
    printf("删除成功\n");
  }
  //2.删除
}
void SearchContatc(const struct Contact *ps)
{
  char name[MAX_NAME];
  printf("请输入查找人的名:");
  scanf("%s", name);
  int pos = FindByName(ps, name); //找到了返回名字所在的下标,找不到则返回-1
  if (pos == -1)
  {
    printf("查找的人不存在\n");
  }
  else
  {
    printf("%--20s\t%4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
    printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
           ps->data[pos],
           ps->data[pos].age,
           ps->data[pos].sex,
           ps->data[pos].tele,
           ps->data[pos].addr);
  }
}
void MondifContact(struct Contact *ps)
{
  char name[MAX_NAME];
  printf("请输入要修改的人的名字:>");
  scanf("%s", name);
  int pos = FindByName(ps, name);
  if (pos == -1)
  {
    printf("%s信息不存在\n");
  }
  else
  {
    printf("请输入姓名>");
    scanf("%s", ps->data[pos].name);
    printf("请输入年龄>");
    scanf("%s", &(ps->data[pos].age));
    printf("请输入信息>");
    scanf("%s", ps->data[pos].sex);
    printf("请输入电话>");
    scanf("%s", ps->data[pos].tele);
    printf("请输入地址>");
    scanf("%s", ps->data[pos].addr);
    printf("修改成功\n");
  }
}

contact.h文件

#include <stdio.h>
#include <string.h>
#define MAX 1000
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30

enum Option
{
  EXIT, //0
  ADD,  //1
  DEL,
  SEARCH,
  MODIFY,
  SHOW,
  SORT
};
struct peoInfo
{
  char name[MAX_NAME];
  int age;
  char sex[MAX_SEX];
  char tele[MAX_TELE];
  char addr[MAX_ADDR];
};
// 通讯录类型
struct Contact
{
  struct peoInfo data[MAX]; //存放一个信息
  int size;                 //记录当前元素个数
};
//声明函数
//初始化通讯录的函数
void InitContact(struct Contact *ps);
//增加一个信息到通讯录
void AddContact(struct Contact *ps);
//打印通讯录信息
void ShowContact(const struct Contact *ps);
//删除指定的联系人
void DelContact(struct Contact *ps);
//查找指定人名信息
void SearchContatc(const struct Contact *ps);
//修改指定人名字信息
void MondifContact(struct Contact *ps);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值