通讯录项目

简介: 通讯录项目

前言

 这是我自己做的第三个小项目---通讯录项目。后期我会继续制作其他小项目并开源至博客上。


 上一小项目是猜数字游戏,没看过的同学可以去看看:


有关猜数字游戏的小项目

https://blog.csdn.net/hsy1603914691/article/details/142302049?spm=1001.2014.3001.5502


目标

1. 通过实战项目巩固自己对数据结构中顺序表的理解。

2. 制作一个通讯录,实现增添、删减、查找、打印、修改联系人的目的。

contact.h文件

#define _CRT_SECURE_NO_WARNINGS
#define name_lenth 20
#define gander_num 10
#define telephone_num 20
#define address_num 20
#define MAX 100
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//定义成员信息结构体
typedef struct PerInfo
{
  char name[name_lenth];
  char sex[gander_num];
  int age;
  char tele[telephone_num];
  char addr[address_num];
}PerInfo;
//定义顺序表结构体
typedef struct Contact
{
  PerInfo data[MAX];
  int size;
}Contact;
//打印菜单
void nume();
//创建通讯录1
void ContactInit(Contact* con);
//销毁通讯录
void ContactDestory(Contact* con);
//增添联系人1
void ContactAdd(Contact* con);
//删除联系人1
void ContactDelete(Contact* con);
//修改联系人1
void ContactChange(Contact* con);
//查找联系人1
void ContactSearch(Contact* con);
//展示通讯录所有联系人1
void ContactShow(Contact* con);

1. 在 contact.h 文件中,我们存放结构体和函数的声明,以及各种库的引用。

2. 在定义成员信息结构体时,我们使用大量宏定义,方便我们后期修改、扩容等。

3. 我们这里创建的是定容的通讯录,使用的是静态顺序表。

contact.c文件

#include "contact.h"
//菜单函数
void nume()
{
  printf("*******************************\n");
  printf("********通讯录管理系统*********\n");
  printf("***1.add************2.delete***\n");
  printf("***3.search*********4.change***\n");
  printf("***5.show**********6.destory***\n");
  printf("***********0.exit**************\n");
  printf("*******************************\n");
  return;
}
//创建通讯录
void ContactInit(Contact* con)
{
  assert(con);
  con->size = 0;
  memset(con->data, 0, sizeof(con->data));
  return;
}
//增添联系人
void ContactAdd(Contact* con)
{
  assert(con);
  if (con->size == MAX)
  {
    printf("通讯录已满,需要进一步扩容!\n");
    return;
  }
  else
  {
    printf("请输入名字:");
    scanf("%s", con->data[con->size].name);
    printf("请输入年龄:");
    scanf("%d", &(con->data[con->size].age));
    printf("请输入性别:");
    scanf("%s", con->data[con->size].sex);
    printf("请输入电话:");
    scanf("%s", con->data[con->size].tele);
    printf("请输入地址:");
    scanf("%s", con->data[con->size].addr);
    con->size++;
    printf("增加成功\n");
  }
  return;
}
//删除联系人
void ContactDelete(Contact* con)
{
  assert(con);
  if (con->size == 0)//先要看通讯录是否为空
  {
    printf("通讯录为空,无法删除\n");
    return;
  }
  printf("请输入要删除人的名字:");
  char name[100] = { 0 };
  scanf("%s", name);
  for ( int i = 0; i < con->size; i++)
  {
    if (strcmp(con->data[i].name, name) == 0)//对比数据是否相同
    {
      for (int n = i; n< con->size; n--)
      {
        con->data[n] = con->data[n - 1];
      }
      con->size--;
      printf("删除成功\n");
    }
  }
  printf("查无此人!\n");
  return;
}
//展示通讯录所有联系人
void ContactShow(Contact* con)
{
  assert(con);
  if (con->size == 0)
  {
    printf("还未存放任何通讯录成员!\n");
    return;
  }
  else
  {
    int i = 0;
    printf("%-15s%-5s%-5s%-12s%-30s%\n", "名字", "年龄", "性别", "电话", "地址");
    for (i = 0; i < con->size; i++)
    {
      printf("%-15s%-5d%-5s%-12s%-30s%\n",con->data[i].name, con->data[i].age, con->data[i].sex, con->data[i].tele, con->data[i].addr);
    }
    printf("打印完成\n");
  }
  return;
}
//查找联系人
void ContactSearch(Contact* con)
{
  assert(con);
  printf("请输入你要查找的联系人姓名!");
  char name[20] = { 0 };
  scanf("%s", name);
  int i = 0;
  for (i = 0; i < con->size; i++)
  {
    if (strcmp(con->data[i].name, name) == 0)//对比数据是否相同
    {
      printf("确实有此人!\n");
      printf("这个人在通讯录中的序号是:%d\n", i);
      printf("%-15s%-5d%-5s%-12s%-30s%\n", con->data[i].name, con->data[i].age, con->data[i].sex, con->data[i].tele, con->data[i].addr);
      return;
    }
  }
  printf("查无此人!\n");
  return;
}
//修改联系人
void ContactChange(Contact* con)
{
  assert(con);
  char name[100];
  printf("请输入要修改人的名字:");
  scanf("%s", name);
  for (int i = 0; i < con->size; i++)
  {
    if (strcmp(con->data[i].name, name) == 0)//对比数据是否相同
    {
      printf("请输入名字:");
      scanf("%s", con->data[i].name);
      printf("请输入年龄:");
      scanf("%d", &(con->data[con->size].age));
      printf("请输入性别:");
      scanf("%s", con->data[i].sex);
      printf("请输入电话:");
      scanf("%s", con->data[i].tele);
      printf("请输入地址:");
      scanf("%s", con->data[i].addr);
      printf("修改成功!\n");
    }
  }
  printf("查无此人!\n");
  return;
}
//销毁通讯录
void ContactDestory(Contact* con)
{
  assert(con);
  con->size = 0;
  memset(con->data, 0, sizeof(con->data));
}

1. 在 contact.c 文件中,我们存放各种函数的实现。

2. 我们使用指针来接受通讯录结构体,使用地址传值。

3. 在后期,我们需要不断的改进函数,使得我们的通讯录更加直接美观。

test.c文件

#include "contact.h"
int main()
{
 
  system("title 通讯录");
  int input = 0;
  Contact con;
  ContactInit(&con);
  printf("This is a contact list made by HSY.");
  do
  {
    Sleep(2000);
    system("cls");
    nume();
    printf("请输入你的选择:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      ContactAdd(&con);
      break;
    case 2:
      ContactDelete(&con);
      break;
    case 3:
      ContactSearch(&con);
      break;
    case 4:
      ContactChange(&con);
      break;
    case 5:
      ContactShow(&con);
      break;
    case 6:
      ContactDestory(&con);
      break;
    case 0:
      printf("已经退出通讯录!\n");
      break;
    default:
      printf("输入有问题,请重新输入:\n");
      break;
    }
  } while (input);
  return 0;
}

1. 在 test.c 文件中,我们存放主函数,通过switch选择结构来实现。

2. 后期我们也需要在这里补充各种小细节,如:Sleep(2000);system("cls");等,来完善这个项目。

致谢

感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

相关文章
简易实现通讯录(2.0)
简易实现通讯录(2.0)
47 0
简易实现通讯录(1.0)
简易实现通讯录(1.0)
46 0
|
5月前
|
C++
C++案例简单通讯录
C++案例简单通讯录
26.通讯录的实现
26.通讯录的实现
|
6月前
|
数据管理
【通讯录项目 (3 / 3)】基于顺序表的通讯录实现——通讯录项目实现
通讯录项目我们实现了大部分内容,接下来你可以自行探索,丰富功能。
48 0
|
存储
通讯录实现上
通讯录实现上
通讯录实现上
|
C语言
【纯C实现简易通讯录】
【纯C实现简易通讯录】
58 0
|
6月前
通讯录实现
通讯录实现
44 0
|
6月前
|
存储 Java C++
通讯录的实现
通讯录的实现
65 0
|
C++
简易通讯录的实现(上)
简易通讯录的实现(上)
48 0