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;
}
时间: 2024-12-20 09:23:57

C语言编写—通讯录(小项目)的相关文章

用易语言编写的小程序——电子表

在写软件测评的时候想到了易语言,这个我高中用来写小程序玩的编程软件,正好编了一个小程序分享一下,电子表. 如图所示,这就是一个exe文件,可以直接打开. 打开后如题,我设置分为中国时间和美国时间,可供选择. 如图分别为中国时间显示和美国时间显示. 其中时间是可以动态变化的,用到了时间周期.当中国时间显示时,屏蔽美国时间周期,当美国时间显示时,屏蔽中国周期,从而达到不会显示混乱的目的. 另附此小软件下载地址(个人网址,放心访问,还可以听音乐o(∩_∩)o ):http://hgcrown.amnu

C语言小项目—注释转换

本次这个小项目的目的是把.c文件中的C风格的注释转换成为C++风格的注释. C注释风格:/**/ C++注释风格:// 首先我们分析一下会出现的几种状态,以及各种状态之间的转换关系: 首先我们在这里对一些状态进行了标注,我们这里已知的有4种状态, 第一种是END_STATE 第二种是C_STATE 第三种是CPP_STATE 第四种是我们平时的NULL_state. 在这里,注释转换操作的是文件,所以接下来我么采用文件操作. 首先我们要打开input.c文件,对这个文件内部的文件进行读取,然后处

C语言编写的迷宫小游戏

C语言编写的迷宫小游戏 #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #define N 20/*迷宫的大小,可改变*/ int  oldmap[N][N];/*递归用的数组,用全局变量节约时间*/ int  yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/ int  way[100

小项目特供 贪吃蛇游戏(基于C语言)

C语言写贪吃蛇本来是打算去年暑假写的,结果因为ACM集训给耽搁了,因此借寒假的两天功夫写了这个贪吃蛇小项目,顺带把C语言重温了一次. 是发表博客的前一天开始写的,一共写了三个版本,第一天写了第一版,第二天写了第二版和第三版. 相信C语言写个小游戏或小项目是大多数计算机相关专业的学生都做的事情,但是作为一个数学专业的学生,我们教研室的老师对C语言的要求也就比较低了,大一没有让我们做个小项目实践一次.至今为止用C/C++做过的三个小项目(大作业),一个是外校同学让我帮忙写的学生信息管理系统(天呐,这

ios学习笔记图片+图片解释(c语言 oc语言 ios控件 ios小项目 ios小功能 swift都有而且笔记完整喔)

下面是目录其中ios文件夹包括了大部分ios控件的介绍和演示,swift的时完整版,可以学习完swift(这个看的是swift刚出来一周的视频截图,可能有点赶,但是完整),c语言和oc语言的也可以完整的学习完所需知识,,其他文件夹的内容如其名说描述一样 没张图片都有文字说明,可以需要该功能的时候搜索一下然后打开图片就可以学习到 网盘下载地址:需要的话给留言我再传上去 http://www.cnblogs.com/langtianya原创 ios学习笔记图片+图片解释(c语言 oc语言 ios控件

4-20 这是一次失败的小项目 (单链表应用--通讯录)

昨天和今天一直在磕这个小项目,由于近来学习了单链表的相关知识,所以想趁周末做一个通讯录的小项目,主要功能就是增,删,插入. 但是意外重重 在做这个小项目的过程中有几点深入的体会: 应该深入学习一下软件工程,了解软件是如何设计的,因为在写完功能之后再写主界面时,感觉十分混乱.没有办法画一个清晰的逻辑框图,也可能是原来的项目都是有人设计好,第一次自己去设计,要多加练习: 深入学习一下c语言标准库,从而对系统定义的函数有更好的操作性: 先上一下这个失败的代码吧 1 #include<stdio.h>

C语言二维数组及小项目

语法: datatype name [ rowSize ] [ colSize ] ; double score [ 5 ] [ 3 ] int animate [ 4 ] [ 4 ] 二维数组的动态赋值: ———————————————————————————————— 项目实战: 使用控制台编写一个小游戏分别实现以下功能: ——新增数据 ——修改数据 ——查询数据 ——数据排序 游戏规则: 游戏一共进行10天 每天结算好感度,一旦有三个或者以上的嫔妃好感度低于60,发生暴乱,游戏结束 回顾:

C语言可以开发哪些项目?(转)

原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程中不知道如何学.学什么,所以,总结这个列表,希望对C语言初学者可以有所帮助~ C语言可以做什么? 从最简单

悟空:用Go语言编写的全文搜索引擎

最近Go语言1.5版正式发布,国内关于Go语言的学习和应用也逐渐火热,InfoQ也将关注并推动国内Go语言社区的发展.悟空开源项目是用Go语言编写的全文搜索引擎,InfoQ记者采访了它的作者陈辉,了解了这个项目背后的一些信息. 悟空搜索引擎的特点是高度可定制,具有如下特性: 高效索引和搜索(1M条微博500M数据28秒索引完,1.65毫秒搜索响应时间,19K搜索QPS) 支持中文分词(使用作者自己研发的Go语言中文分词工具sego分词包并发分词,速度27MB/秒) 支持计算关键词在文本中的紧邻距