C语言静态通讯录

实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息
  6. 清空所有联系人

源代码:
contact.h

#ifndef __CONTACT_H_
#define __CONTACT_H_
#include <stdio.h>
#include <windows.h>
#include <string.h>
#pragma warning(disable :4996)
#define MAX_NAME 10
#define SEX_NAME 5
#define MAX_TELE 20                  //必须往大了定义,所输入的字符串如果太小 就会导致错误
#define MAX_ADDR 50
#define MUX_NUM  1000
enum Oper
{
 EXIT,
 ADD,
 DEL,
 SEAR,
 SHOW,
 CLEAR,
 MODIFY,
 DESTROY
};
typedef struct PerInfo
{
 char name[MAX_NAME]; //姓名
 short age;
 char sex[SEX_NAME];
 char tele[MAX_TELE];
 char addr[MAX_ADDR];
} PerInfo;  //每个人的信息
typedef struct Contact    //对于通讯录来说也是一个抽象的概念,所以把通讯也抽象成结构体
{
 PerInfo per[MUX_NUM];  //往这个数组放东西,还需要把这个数组的下标也标识一下
 int  usedSize;
} Contact;
void initial(Contact *pcon);
int SearchContact2(Contact *pcon);
void DelContact(Contact *pcon);
void AddContact(Contact *pcon);
int SearchContact(Contact *pcon);
int SearchContact1(Contact *pcon);
void ShowContact(Contact *pcon);
void ClearContact(Contact *pcon);
void ModifyContact(Contact *pcon);
void menu1();
#endif

main.c

#include "contact.h"
void menu1()
{
 printf("1.姓名\n");
 printf("2.年龄\n");
 printf("3.性别\n");
 printf("4.电话\n");
 printf("5.地址\n");
}
void menu()
{
 printf("**************欢迎使用大龙的通讯录*************\n");
 printf("*  0.EXIT                          1.ADD      *\n");
 printf("*  2.DEL                           3.SEARCH   *\n");
 printf("*  4.SHOW                          5.CLEAR    *\n");
 printf("*  6.MODIFY                                   *\n");
 printf("***********************************************\n");
}
int main()
{
 int input = 0;
 Contact con;
 initial(&con);
 do
 {
  menu();
  printf("请输入操作数: ");
  scanf("%d", &input);
  switch (input)
  {
  case EXIT:
   break;
  case ADD:
   AddContact(&con);
   break;
  case DEL:
   DelContact(&con);
   break;
  case SEAR:
     SearchContact(&con);
   break;
  case SHOW:
   ShowContact(&con);
   break;
  case CLEAR:
   ClearContact(&con);
   break;
  case MODIFY:
   ModifyContact(&con);
   break;
  default:
   break;
  }
 } while (input);
 return 0;
}

contact.c

#include "contact.h"
void initial(Contact *pcon)
{
 pcon->usedSize = 0;
 memset(pcon->per, 0, sizeof(pcon->per));
}
void AddContact(Contact *pcon)
{
 if (pcon->usedSize == MUX_NUM)
 {
  printf("不好意思,满了");
 }
 printf("请输入姓名: ");
 scanf("%s", pcon->per[pcon->usedSize].name);
 printf("请输入年龄:");
 scanf("%d", &pcon->per[pcon->usedSize].age);
 printf("请输入性别:");
 scanf("%s", pcon->per[pcon->usedSize].sex);
 printf("请输入电话:");
 scanf("%s", pcon->per[pcon->usedSize].tele);
 printf("请输入住址:");
 scanf("%s", pcon->per[pcon->usedSize].addr);
 pcon->usedSize++;
 printf("添加成功\n");
}
int SearchContact2(Contact *pcon)
{
 int i = 0;
 char name[MAX_NAME] = { 0 };
 if (pcon->usedSize == 0)
 {
  printf("通讯录为空\n");
  return -1;
 }
 printf("请输入你想删除的人的名字:");
 scanf("%s", name);
 for (i = 0; i < pcon->usedSize; i++)
 {
  if (strcmp(pcon->per[i].name, name) == 0)
  {
   return i;
  }
 }
 printf("查无此人\n");
 return -1;
}
void DelContact(Contact *pcon)
{
 int i = 0;
  int index=SearchContact2(pcon);
  for (i = index; i < pcon->usedSize; i++)
  {
   pcon->per[i] = pcon->per[i + 1];
  }
  pcon->usedSize--;
  printf("删除成功!\n");
}
int SearchContact(Contact *pcon)
{
 char name[MAX_NAME] = { 0 };
 int i = 0;
 int ret = 0;
 if (pcon->usedSize == 0)
 {
  printf("通讯录为空");
 }
 printf("请输入你要查找的姓名: ");
 scanf("%s", name);
 for (i = 0; i < pcon->usedSize; i++)
 {
  ret=strcmp(name, pcon->per[i].name);
  if (ret == 0)
  {
   printf("姓名:%-2s ", pcon->per[i].name);
   printf("年龄:%-2d", pcon->per[i].age);
   printf("性别:%-10s", pcon->per[i].sex);
   printf("电话:%-11s", pcon->per[i].tele);
   printf("住址%-20s ",pcon->per[i].addr);
   printf("\n");
   return i;
  }
 }
 printf("没找到!\n");
 return -1;
}
void ShowContact(Contact *pcon)
{
 int i = 0;
 for (; i < pcon->usedSize; i++)
 {
  printf("姓名:%-5s ", pcon->per[i].name);
  printf("年龄:%-2d", pcon->per[i].age);
  printf("性别:%-2s", pcon->per[i].sex);
  printf("电话:%-13s", pcon->per[i].tele);
  printf("住址%-20s ", pcon->per[i].addr);
  printf("\n");
 }
}
void ClearContact(Contact *pcon)
{
 pcon->usedSize = 0;
}
int SearchContact1(Contact *pcon)
{
 int i = 0;
 char name[MAX_NAME] = { 0 };
 if (pcon->usedSize == 0)
 {
  printf("通讯录为空\n");
  return -1;
 }
 printf("您想修改谁?\n");
 scanf("%s", name);
 for (i = 0; i < pcon->usedSize; i++)
 {
  if (strcmp(pcon->per[i].name, name) == 0)
  {
   return i;
  }
 }
 printf("查无此人\n");
 return -1;
}
void changename(Contact *pcon,int ret)
{
 char name[MAX_NAME];
 printf("请输入新的名字:");
 scanf("%s", name);
 strcpy(pcon->per[ret].name, name);
}
void changeage(Contact *pcon,int ret)
{
 int age=0;
 printf("请输入新的年龄:");
 scanf("%d", age);
 pcon->per[ret].age = age;
}
void changesex(Contact *pcon,int ret)
{
 char sex[SEX_NAME];
 printf("请输入新的性别:");
 scanf("%s", sex);
 strcpy(pcon->per[ret].sex, sex);
}
void changetele(Contact *pcon,int ret)
{
 char tele[MAX_TELE];
 printf("请输入新的电话:");
 scanf("%s", tele);
 strcpy(pcon->per[ret].tele, tele);
}
void changeaddr(Contact *pcon,int ret)
{
 char addr[MAX_ADDR];
 printf("请输入新的地址: ");
 scanf("%s", addr);
 strcpy(pcon->per[ret].addr, addr);
}
void ModifyContact(Contact *pcon)
{
 int input = 0;
 int ret = SearchContact1(pcon);
 if (ret < 0)
 {
  ;
 }
 else{
  printf("请选择要修改的信息: \n");
  menu1();
  scanf("%d", &input);
  switch (input)
  {
  case 1:
   changename(pcon, ret);
   break;
  case 2:
   changeage(pcon, ret);
   break;
  case 3:
   changesex(pcon, ret);
   break;
  case 4:
   changetele(pcon, ret);
   break;
  case 5:
   changeaddr(pcon, ret);
   break;
  default:
   printf("输入有误!");
   break;
  }
  printf("修改后\n");
  printf("姓名:%-5s ", pcon->per[ret].name);
  printf("年龄:%-2d ", pcon->per[ret].age);
  printf("性别:%-2s ", pcon->per[ret].sex);
  printf("电话:%-13s", pcon->per[ret].tele);
  printf("住址: %-20s ", pcon->per[ret].addr);
  printf("\n");
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值