通讯录(初级)程序编写(C语言版)

简介: 前言:●通过对通讯录(初级)程序编写,实现对枚举,指针等知识点的应用与理解。●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教

  前言:

●通过对通讯录(初级)程序编写,实现对枚举,指针等知识点的应用与理解。

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教

“李雷和韩梅梅”的通讯录:

image.gif编辑

正文:

说明:本代码编译环境为Visual Studio2019,其中出现特定为该编译器设定的代码语句:#define_CRT_SECURE_NO_WARNINGS

此代码语句的功能:为了解决Visual Studio编译环境的一些库函数等报错或警告问题
注:此代码语句只在Visual Studio编译环境使用,其他编译器需屏蔽此代码语句

————————————————

 

通过编写通讯录(初级)程序,实现通讯录的添加,删除,查找,修改,显示,排序等初级功能。

1.创建头文件:contact.h  

代码如下:

#define  _CRT_SECURE_NO_WARNINGS //此语句为Visual Studio2019编译器特定语句,移植其他编译器需屏蔽此语句
#define MAX 1000
#define MAX_NAME 20
#define MAX_SEX  5
#define MAX_TELE 12
#define MAX_ADDR 30
#include <stdio.h>
#include <string.h>
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 SearchContact(const struct Contact* ps);
    //修改指定联系人
void ModifyContact(struct Contact* ps);
    //排序通讯录内容
//待自己实现 void SortContact(struct Contact* ps);

image.gif

2.创建源文件:  contact.c

代码如下:

#define  _CRT_SECURE_NO_WARNINGS  //此语句为Visual Studio2019编译器特定语句,移植其他编译器需屏蔽此语句
#include "contact.h"
void InitContact(struct Contact* ps)
{
  memset(ps->data, 0, sizeof(ps->data));
  ps->size = 0; //设置通讯录最初只有0个元素
}
void AddContact(struct Contact* ps)
{
  if (ps->size == MAX)
  {
    printf("通讯录存储空间已满,无法增加!\n");
  }
  else
  {
    printf("请输入名字:>");
    scanf("%s", ps->data[ps->size].name);
    printf("请输入年龄:>");
    scanf("%d", &(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 < ps->size; i++)
    {
      printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
        ps->data[i].name,
        ps->data[i].age,
        ps->data[i].sex,
        ps->data[i].tele,
        ps->data[i].addr);    
    }
  } //printf("    <李雷、韩梅梅未曾拥有彼此,但人们都知道--李雷和韩梅梅!>\n");
}
static int FindByName(const struct Contact* ps, char name[MAX_NAME])
{
  int i = 0;
  //size 5
  for (i = 0; i < ps->size; i++)
  {
    if (0 == strcmp(ps->data[i].name, name))
    {
      return i;
    }
  }
  return -1;  //找不到的情况
}
void DelContact(struct Contact* ps)
{
  char name[MAX_NAME];
  printf("请输入需要删除人的名字:>");
  scanf("%s", name);
    //1.查找要删除的人在什么位置
      //找到了返回名字所在元素的下标(整型),找不到返回-1
  int pos = FindByName(ps, name);
      //int i = 0;
      //    //size 5
      //for (i = 0; i < ps->size; i++)
      //{
      //  if (0 == strcmp(ps->data[i].name, name))
      //  {
      //    break;
      //  }
      //}
    //2.删除
      //  if (i == ps->size)
  if (pos == -1)
  {
    printf("要删除的人不存在!\n");
  }
  else
  {
      //删除数据
    int j = 0;
    for (j = pos; j < ps->size-1; j++)
    {
      ps->data[j] = ps->data[j + 1];
    }
    ps->size--;
    printf("删除成功!\n");
  }
}
void SearchContact(const struct Contact* ps)
{
  char name[MAX_NAME];
  printf("请输入要查找人的名字:>");
  scanf("%s", name);
  int pos = FindByName(ps, name);
  if (pos == -1)
  {
    printf("要查找的人不存在!\n");
  }
  else
  {
    //标题
    printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
      //数据
      //for (i = 0; i < ps->size; i++)
      //{
    printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
        ps->data[pos].name,
        ps->data[pos].age,
        ps->data[pos].sex,
        ps->data[pos].tele,
        ps->data[pos].addr);
      //}
  }
}
void ModifyContact(struct Contact* ps)
{   
  char name[MAX_NAME];
  printf("请输入要修改人的名字:>");
  scanf("%s", name);
  int pos = FindByName(ps, name);
  if (pos == -1)
  {
    printf("要修改人的信息不存在!\n");
  }
  else
  {
    printf("请输入名字:>");
    scanf("%s", ps->data[pos].name);
    printf("请输入年龄:>");
    scanf("%d", &(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");
  }
}
//待自己实现 void SortContact(struct Contact* ps){}

image.gif

3.创建源文件: test.c

代码如下:

#define  _CRT_SECURE_NO_WARNINGS  //此语句为Visual Studio2019编译器特定语句,移植其他编译器需屏蔽此语句
#include "contact.h"
void menu()
{
  printf("*****  【通讯录(初级)C语言程序】  *******\n");
  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");
  printf("*****        ——By 作者:新晓·故知  ****\n");
}
int main()
{ 
  int input = 0;
  //创建通讯录
          //int size = 0;
          //struct PeoInfo con[1000]; //存放1000 个人的信息
          //以上两个语句被优化封装成下个语句
  struct Contact con; //con就是通讯录,里边包含MAX(本例为1000)的元素的数和size
  //初始化通讯录
  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 SHOW:
      ShowContact(&con);
      break;
    case SORT:
      //待自己实现 SortContact(&con);
      break;
    case EXIT:
      printf("退出通讯录!\n");
      break;
    default:
      printf("选择错误!\n");
      break;
    }
  } while (input);
    return 0;
}

image.gif

运行示例:

添加:

image.gif编辑

查找:

image.gif编辑

修改:

image.gif编辑

删除:

image.gif编辑

显示:

image.gif编辑

使用说明:

1.输入对应数字,即可进行相关操作。但操作6(排序)未进行编写,因此无法进行操作6(排序).

总结:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

通过对通讯录(初级)程序的编写学习,作为一名学习编程新手,作者目前水平有限,只会照葫芦画瓢,其中蕴含的知识极为深邃,而作者只领略一二!虽然仅是照葫芦画瓢的编入编译器,但调试环节确实让作者学会了许多知识!

囿于某些原因,本文有许多不详细,不足之处,其中许多知识仍需作者反复学习与理解,希望在以后的时光里,作者能够和读者一道共同成长!

此处,致敬第一个写出通讯录代码的开发者。

————————————————

相关文章
|
1月前
|
C语言
最简单的C语言程序示例
最简单的C语言程序示例
20 0
|
1月前
|
Serverless C语言
C语言程序通常具有以下基本结构
C语言程序通常具有以下基本结构
10 0
|
1月前
|
C语言
用c语言实现一个通讯录
用c语言实现一个通讯录
10 0
|
16天前
|
存储 编译器 C语言
深入探索C语言动态内存分配:释放你的程序潜力
深入探索C语言动态内存分配:释放你的程序潜力
28 0
|
25天前
|
程序员 C语言
【C语言实战项目】通讯录(动态增容版)
【C语言实战项目】通讯录(动态增容版)
19 0
|
1月前
|
存储 Serverless C语言
C语言程序的结构
C语言是一种广泛使用的编程语言,其程序结构清晰,易于理解。下面我们将详细探讨C语言程序的基本结构,并通过一个示例代码来展示这些组成部分是如何协同工作的。 一、C语言程序的基本结构
14 0
|
1月前
|
程序员 C语言
最简单的C语言程序举例
C语言是一种广泛使用的计算机编程语言,适合用于系统编程,也可以用于编写应用程序。它的语法清晰明了,功能强大,是很多程序员的首选语言。下面,我们将通过一个最简单的C语言程序来介绍其基本结构和语法。
26 0
|
1月前
|
前端开发 Unix Linux
Linux indent命令 (格式化C语言源代码的程序)
Linux indent命令 (格式化C语言源代码的程序)
18 0
Linux indent命令 (格式化C语言源代码的程序)
|
14天前
|
程序员 C语言
C语言库函数 — 内存函数(含模拟实现内存函数)
C语言库函数 — 内存函数(含模拟实现内存函数)
24 0
|
23小时前
|
存储 C语言
C语言函数的返回值
C语言函数的返回值
4 0