C语言实现通讯录

简介: C语言实现通讯录

今天分享一个通讯录的代码,代码可以正常运行,但是可能有一点点缺陷,完成的是我们的通讯录功能

contact.h

#pragma once
#include<string.h>
#include<stdio.h>
#include<assert.h>
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define TEL_MAX 12
#define ADDR_MAX 30
typedef struct people
{
  char name[NAME_MAX];//名字
  char sex[SEX_MAX];//性别
  int age;//年龄
  char tel[TEL_MAX];//电话
  char addr[ADDR_MAX];//地址
}people;//定义这个struct people为people
typedef struct contact
{
  people data[MAX];//存放一千个人信息
  int sz;//记录通讯录已经保存的信息个数
}contact;
enum optiom 
{
  EXIT,
  ADD,
  DEL,
  SEARCH,
  MODIFY,
  SORT,
  PRINT
};
//初始化通讯录
void Initcontact(contact* pc);
//添加用户信息
void AddContact(contact* pc);
//打印信息
void PrintContact(const contact* pc);
//删除信息
void DelContact(contact* pc);
//查找
void SearchContact(const contact* pc);
//修改功能
void ModifyContact(contact* pc);
//排序功能没写

contact.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
//初始化通讯录
void Initcontact(contact* pc)
{
  pc->sz = 0;
  memset(pc->data, 0, sizeof(pc->data));
}
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].tel);
  printf("请输入地址:>");
  scanf("%s", pc->data[pc->sz].addr);
  //把数据放入下标为sz的底下
  pc->sz++;
  //不能单独 写sz++
  printf("添加成功\n");
}
void PrintContact(const contact* pc)
{
  assert(pc);
  int i = 0;
  printf("%-20s  %-10d  %-5s  %-12s  %-30s\n","姓名","年龄","性别","电话","地址");
  for (i = 0; i < pc->sz; i++)
  {
    printf("%-20s  %-10d  %-5s  %-12s  %-30s\n",pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tel, pc->data[i].addr);
  }
}
int FindName(contact* pc, char name[])
{
  int i = 0;
  for (i = 0; i < pc->sz; i++)
  {
    if (0 == strcmp(name, pc->data[i].name))
    {
      return i;
    }
  }
  return -1;
}
void DelContact(contact* pc)
{
  assert(pc);
  if (pc->sz == 0)
  {
    printf("通讯录已空,无法删除\n");
    return;
  }
  char name[NAME_MAX] = { 0 };
  printf("要删除的人>");
  scanf("%s", name);
  int pos = FindName(pc, name);
  if (pos ==-1)
  {
    printf("要删除的人不存在\n");
  }
  int j = 0;
  for (j = pos; pos < pc->sz - 1; j++)
  {
    pc->data[j] = pc->data[j + 1];
  }
  pc->sz--;
  //最后一个元素也就访问不到,这样就不会越界
  printf("删除成功\n");
}
void SearchContact(const contact* pc)
{
  char name[NAME_MAX] = { 0 };
  printf("要查找的人>");
  scanf("%s", name);
  int pos = FindName(pc, name);
  if (pos == -1)
  {
    printf("要查找的人不存在\n");
  }
  printf("%-20s  %-10d  %-5s  %-12s  %-30s\n", "姓名", "年龄", "性别", "电话", "地址");
  printf("%-20s  %-10d  %-5s  %-12s  %-30s\n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tel, pc->data[pos].addr);
}
//修改联系人
void menu1()
{
  printf("********************************\n");
  printf("*******1.add     2.del *********\n");
  printf("*******3.search  4.modify*******\n");
  printf("*******5.sort    0.exit   ******\n");
  printf("*******6.print******************\n");
  printf("********************************\n");
}
void ModifyContact(contact* pc)
{
  int input = 0;
  char name[NAME_MAX] = { 0 };
  printf("请输入你要修改的联系人姓名:>");
  scanf("%s", name);
  //查找
  int pos = FindName(pc, name);
  int i = 0;
  if (pos == -1)
  {
    printf("找不到所要查找的联系人\n");
    return;
  }
  //修改
  printf("请输入要修改的具体信息:>\n");
  menu1();
  scanf("%d", &input);
  switch (input)
  {
  case 1:
    printf("请输入新的姓名:>");
    scanf("%s", pc->data[pos].name);
    break;
  case 2:
    printf("请输入新的年龄:>");
    scanf("%d", &pc->data[pos].age);
    break;
  case 3:
    printf("请输入新的性别:>");
    scanf("%s", pc->data[pos].sex);
    break;
  case 4:
    printf("请输入新的电话:>");
    scanf("%s", pc->data[pos].tel);
    break;
  case 5:
    printf("请输入新的地址:>");
    scanf("%s", pc->data[pos].addr);
    break;
  default:
    printf("输入有误,修改失败\n");
    return;
  }
  printf("修改成功\n");
}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
  printf("********************************\n");
  printf("*******1.add     2.del *********\n");
  printf("*******3.search  4.modify*******\n");
  printf("*******6.print    0.exit   *****\n");
  printf("********************************\n");
  printf("********************************\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 PRINT:
        PrintContact(&con);
        break;
    case EXIT:
      printf("退出通讯录\n");
      break;
    default:
      printf("选择错误,请重新选择\n");
      break;
    }
  } while (input);
}
int main()
{
  test();
  return 0;
}

以上就是我们一个简单通讯录的实现,这就是我们今天的分享,谢谢大家


相关文章
|
1月前
|
存储 C语言
探索C语言数据结构:利用顺序表完成通讯录的实现
本文介绍了如何使用C语言中的顺序表数据结构实现一个简单的通讯录,包括初始化、添加、删除、查找和保存联系人信息的操作,以及自定义结构体用于存储联系人详细信息。
20 2
|
1月前
|
存储 C语言
手把手教你用C语言实现通讯录管理系统
手把手教你用C语言实现通讯录管理系统
|
6月前
|
C语言
C语言——通讯录系统—基于 VS2022
C语言——通讯录系统—基于 VS2022
|
3月前
|
存储 搜索推荐 算法
【C语言】C语言—通讯录管理系统(源码)【独一无二】
【C语言】C语言—通讯录管理系统(源码)【独一无二】
|
3月前
|
存储 数据可视化 C语言
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
【C语言】C语言 手机通讯录系统的设计 (源码+数据+论文)【独一无二】
|
5月前
|
机器学习/深度学习 搜索推荐 程序员
C语言实现个人通讯录(功能优化)-2
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-2
|
5月前
|
存储 C语言 索引
C语言实现个人通讯录(功能优化)-1
C语言实现个人通讯录(功能优化)
C语言实现个人通讯录(功能优化)-1
|
5月前
|
C语言
C语言学习记录——通讯录(静态内存)
C语言学习记录——通讯录(静态内存)
32 2
|
6月前
|
存储 C语言
C语言实现通讯录
C语言实现通讯录
41 2
|
6月前
|
存储 C语言
C语言实验-动态顺序表实现简易通讯录(二)
在这个C语言实验中,你将实现一个简单的通讯录,它使用动态顺序表来存储联系人信息。
51 2