C语言编写—通讯录(小项目)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编写—通讯录(小项目)相关的知识,希望对你有一定的参考价值。

   

    C语言的练习—通讯录,该通讯录主要实现最大存储1000个人信息,对通讯录中的个人信息能够进行增、删、查、改等基本功能,通过用c语言编写,能够极大程度上锻炼编程能力。程序主要使用数组的知识,创建1000大小的静态数组,在极端情况下,通讯录中元素较少,对空间的使用率较低,使得空间浪费。该程序能够再次进行改进,可以通过动态开辟数组,减少空间的浪费,也可以通过链表来实现。

——下面程序主要是利用静态数组的方式,该程序有待改进。

 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>

#define MAX 1000
#define MAX_NAME 10
#define MAX_SEX 3
#define MAX_TELEPHONE 20
#define MAX_ADR 20

typedef struct people      //people信息
{
     char name[MAX_NAME];
     char sex[MAX_SEX];
     int age;
     char tele[MAX_TELEPHONE];
     char adr[MAX_ADR];
}people;

typedef struct txl     //通讯录的存储
{
     people elem[MAX];
     int count;
}pdh, *por;

void init(por L)       //初始化通讯录
{
     L->count = 0;
}

//主菜单
void menu()
{
     printf("\t\t************************************\n");
     printf("\t\t*****   1.添加联系人信息       *****\n");
     printf("\t\t*****   2.删除指定联系人信息   *****\n");
     printf("\t\t*****   3.查找指定联系人信息   *****\n");
     printf("\t\t*****   4.修改指定联系人信息   *****\n");
     printf("\t\t*****   5.显示所有联系人信息   *****\n");
     printf("\t\t*****   6.清空所有联系人信息   *****\n");
     printf("\t\t*****   7.以名字排序所有联系人 *****\n");
     printf("\t\t*****   0.退出通讯录           *****\n");
     printf("\t\t************************************\n");
     printf("\n\t请选择:");
}

//添加联系人
void _add(por L)
{
     if (L->count >= MAX)
     {
          printf("电话本已满,无法添加!");
          return;
      }
 
     printf(">>请输入所要添加的联系人信息!\n");
     printf("\n  姓名:");
     fflush(stdin);
     gets(L->elem[L->count].name);
 
     printf("\n  性别:");
     fflush(stdin);
     gets(L->elem[L->count].sex);
  
     printf("\n  年龄:");
     scanf("%d", &L->elem[L->count].age);
     
     printf("\n  电话:");
     fflush(stdin);
     gets(L->elem[L->count].tele);

     printf("\n  住址:");
     fflush(stdin);
     gets(L->elem[L->count].adr);
     L->count++;
     printf("添加完成!\n");
}

//查找联系人
static int search(por L, const char * dos)
{
     int i = 0;
     for (i = 0; i < L->count; i++)
     {
         if (strcmp(dos, L->elem[i].name) == 0)
         {
              return i;
          }
     }
      return -1;
}

//删除指定联系人信息
void _delete(por L)
{
     char arr[MAX_NAME];
     int i = 0;
     int ret = 0;
     printf("请输入所要删除联系人的姓名:\n");
     fflush(stdin);  
     gets(arr);
     ret = search(L, arr);
     if (ret == -1)
     {
         printf("通讯录中没有此联系人!\n");
         return;
      }
     else
     {
         for (i = ret; i < L->count - 1; i++)
         {
              L->elem[i] = L->elem[i + 1];
         }
         L->count--;
         printf("删除成功!\n");
     }
}

//查找指定的联系人信息
void _find(por L)
{
     char ptr[MAX_NAME];
     int ret = 0;
     printf("请输入所要查找的联系人姓名:\n");
     fflush(stdin);
     gets(ptr);
     ret = search(L, ptr);
     if (ret == -1)
     {
         printf("查找失败,无此联系人!\n");
         return;
     }
     else
     {
         printf("查找成功!\n");
         printf("  姓名  性别  年龄  电话  地址  \n");
         printf("%s  %s  %d  %s  %s  \n",
         L->elem[ret].name,
         L->elem[ret].sex,
         L->elem[ret].age,
         L->elem[ret].tele,
         L->elem[ret].adr);
     }
}

//修改指定联系人信息
void _alter(por L)
{
     char ptr[MAX_NAME];
     int ret = 0;
     int ter = 0;
     char a = 0;
     printf("请输入所要修改的联系人的姓名:\n");
     fflush(stdin);
     gets(ptr);
 
     ret = search(L, ptr);
     if (ret == -1)
     {
          printf("通讯录中无此联系人!\n");
          return;
      }
     else
     {
          printf("1.修改姓名\n");
          printf("2.修改性别\n");
          printf("3.修改年龄\n");
          printf("4.修改电话\n");
          printf("5.修改住址\n");
          printf("\n请选择修改项:");
          scanf("%d", &ter);
          switch (ter)
          {
               case 1:
                     printf("修改姓名为:");
                     scanf("%s", L->elem[ret].name);
                     break;
               case 2:
                     printf("修改性别为:");
                     scanf("%s", L->elem[ret].sex);
                     break;
               case 3:
                     printf("修改年龄为:");
                     scanf("%d", L->elem[ret].age);
                     break;
               case 4:
                     printf("修改电话为:");
                     scanf("%s", L->elem[ret].tele);
                     break;
               case 5:
                     printf("修改地址为:");
                     scanf("%s", L->elem[ret].adr);
                     break;
               default:
                     break;
          }
          printf("修改成功!\n");
          printf("继续输入?Y/N");
          if ((a = getchar()) == ‘Y‘)
          {
                _alter(L);
          }
          else if ((a = getchar()) == ‘N‘)
          {
                return;
          }
     }
}

//显示所有联系人
void _show(por L)
{
     int i = 0;
     if (L->count == 0)
     {
          printf("通讯录中还没有联系人!\n");
          return;
     }
     else
     {
          for (i = 0; i < L->count; i++)
          {
               printf("\n 姓名  性别   年龄  电话  地址 \n");
               printf("  %s   %s   %d   %s   %s\n", L->elem[i].name, L->elem[i].sex, L->elem[i].age, L->elem[i].tele, L->elem[i].adr);
          }
     }
}

//删除所有联系人
void _delete_all(por L)
{
     L->count = 0;
     printf("清除成功!\n");
}

//以姓名对通讯录进行冒泡排序
void _sort(por L)
{
     int i = 0;
     int j = 0;
     for (i = 0; i < L->count - 1; i++)
     {
         for (j = 0; j < L->count - i - 1; j++)
         {
              if (strcmp(L->elem[j].name, L->elem[j + 1].name) > 0)
              {
                  people temp = L->elem[j];
                  L->elem[j] = L->elem[j + 1];
                  L->elem[j + 1] = temp;
              }
         }
     }
}

int main()
{
     pdh L;
     int num = 1;
     init(&L);
     while (num)
     {
         menu();
         scanf("%d", &num);
         switch (num)
         {
             case 0:
                  exit(EXIT_SUCCESS);
                  break;
             case 1:
                  _add(&L);
                  break;
             case 2:
                  _delete(&L);
                  break;
             case 3:
                  _find(&L);
                  break;
             case 4:
                  _alter(&L);
                  break;
             case 5:
                  _show(&L);
                  break;
             case 6:
                  _delete_all(&L);
                  break;
             case 7:
                  _sort(&L);
                  break;
             default:
                  break;
          }
     }
     system("pause");
     return 0;
}


本文出自 “无心的执着” 博客,谢绝转载!

以上是关于C语言编写—通讯录(小项目)的主要内容,如果未能解决你的问题,请参考以下文章

c语言编写一个通讯录系统 用简单一点的c😊

通讯录(c语言版本)

C语言编写串口通信程序在裸机下运行

C语言实战项目通讯录超详细~

VS中添加自定义代码片段——偷懒小技巧

c语言报文转发脚本怎么写