通讯录的编写

实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

提供方法:

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

这样一个程序相对来说比较复杂,所以我们今天采用多文件进行编写

contact.h:

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
​
enum Option
{
 EXIT,
 ADD,
 DEL,
 SEARCH,
 MODIFY,
 SHOW,
  CLEAR,
 SORT
};
​
#define DEFAULT_SZ 3
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 25
​
//人的信息
typedef struct PeoInfo
{
 char name[NAME_MAX];
 short age;
 char sex[SEX_MAX];
 char tele[TELE_MAX];
 char addr[ADDR_MAX];
}PeoInfo;
​
//通讯录结构体
​
typedef struct Contact
{
 PeoInfo data[MAX];//存放真实数据的空间
 int sz;//记录有效数据的个数
}Contact;
​
void InitContact(Contact* pcon);
void AddContact(Contact* pcon);
void DelContact(Contact* pcon);
void FindContact(Contact* pcon);
void ModifyContact(Contact* pcon);
void ShowContact(const Contact* pcon);
void ClearContact(Contact* pcon);
void SortContact(Contact* pcon);

contact.c:

#include "Contact.h"
​
//初始化通讯录
void InitContact(Contact* pcon) 
{
 assert(pcon);
 pcon->sz = 0;
 memset(pcon->data, 0, sizeof(pcon->data));
}
​
//1、添加联系人信息
void AddContact(Contact* pcon)
{
 assert(pcon);
 
 //录入信息
 printf("请输入名字:>");
 scanf("%s", pcon->data[pcon->sz].name);
 printf("请输入年龄:>");
 scanf("%d", &(pcon->data[pcon->sz].age));
 printf("请输入性别:>");
 scanf("%s", pcon->data[pcon->sz].sex);
 printf("请输入电话:>");
 scanf("%s", pcon->data[pcon->sz].tele);
 printf("请输入地址:>");
 scanf("%s", pcon->data[pcon->sz].addr);
​
 pcon->sz++;
 printf("增加成功\n");
}
​
//查找指定条目下标
static int FindByName(Contact* pcon, char name[])
{
 int i = 0;
 assert(pcon);
 for(i=0; i<pcon->sz; i++)
 {
  if(0 == strcmp(pcon->data[i].name, name))
  {
   return i;
  }
 }
 //找不到
 return -1;
}
​
//2、删除指定联系人信息
void DelContact(Contact* pcon)
{
 int i = 0;
 char name[NAME_MAX] = {0};
 int pos = 0;
 assert(pcon);
 
 if(pcon->sz == 0) //空的就不用删了
 {
  printf("通讯录已空,无法删除\n");
  return;
 }
 //删除
 printf("请输入要删除人的名字:>");
 scanf("%s", name);
 //查找(删除之前需要先查找)
 pos = FindByName(pcon, name);
 if(pos == -1)
 {
  printf("要删除的条目不存在\n");
  return;
 }
 //移除
 for(i=pos; i<pcon->sz; i++)
 {
  pcon->data[i] = pcon->data[i+1];
 }
 pcon->sz--;
 printf("删除成功\n");
}
​
//3、查找指定联系人信息
void FindContact(Contact* pcon)
{
 int i = 0;
 char name[NAME_MAX] = {0};
 int pos = 0;
 assert(pcon);
 
 if(pcon->sz == 0) //空的就不用删了
 {
  printf("通讯录已空,无法查找\n");
  return;
 }
​
  //查找
 printf("请输入要查找人的名字:>");
 scanf("%s", name);
​
 pos = FindByName(pcon, name);
 if(pos == -1)
 {
  printf("要查找的条目不存在\n");
  return;
 }
 
  printf("%15s\t%5d\t%5s\t%12s\t%20s\n", pcon->data[pos].name, 
   pcon->data[pos].age, 
   pcon->data[pos].sex,
   pcon->data[pos].tele,
   pcon->data[pos].addr);
}
​
//4、修改指定联系人信息
void ModifyContact(Contact* pcon)
{
 int i = 0;
 char name[NAME_MAX] = {0};
 int pos = 0;
 assert(pcon);
 
 if(pcon->sz == 0) //空的就不用找
 {
  printf("通讯录已空,无法修改信息\n");
  return;
 }
 //修改
 printf("请输入要修改条目的姓名:>");
 scanf("%s", name);
 //查找(修改之前需要先查找)
 pos = FindByName(pcon, name);
 if(pos == -1)
 {
  printf("要修改的条目不存在\n");
  return;
 }
 //询问要改什么
  printf("请输入要修改什么信息(1-名字,2-年龄,3-性别,4-电话,5-住址):>");
  int msg;
  scanf("%d", &msg);
  switch(msg)
 {
    case 1:
      printf("请输入新的姓名:>");
      scanf("%s", pcon->data[pos].name);
      break;
    case 2:
      printf("请输入新的年龄:>");
      scanf("%d", &pcon->data[pos].age);
      break;
    case 3:
      printf("请输入新的性别:>");
      scanf("%s", pcon->data[pos].sex);
      break;
    case 4:
      printf("请输入新的电话:>");
      scanf("%s", pcon->data[pos].tele);
      break;
    case 5:
      printf("请输入新的地址:>");
      scanf("%s", pcon->data[pos].addr);
      break;
    default:
      printf("输入有误,修改失败\n");
      return;
 }
 printf("修改成功\n");
}
​
//5、显示所有联系人信息
void ShowContact(const Contact* pcon)
{
 int i = 0;
 assert(pcon);
 printf("%15s\t%5s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");
 for(i=0; i<pcon->sz; i++)
 {
  printf("%15s\t%5d\t%5s\t%12s\t%20s\n", pcon->data[i].name, 
   pcon->data[i].age, 
   pcon->data[i].sex,
   pcon->data[i].tele,
   pcon->data[i].addr);
 }
}
​
//6、清空所有联系人信息
void ClearContact(Contact* pcon)
{
  InitContact(pcon);
}
​
//7、按照名字排序
void SortContact(Contact* pcon)
{
  int i, j;
  PeoInfo tmp;
  for(i = 0; i < pcon->sz - 1; i++)
 {
    for(j = 0; j < pcon->sz - 1 - i; j++)
   {
      if(0 < strcmp(pcon->data[j].name, pcon->data[j + 1].name))
     {
        tmp = pcon->data[j];
        pcon->data[j] = pcon->data[j + 1];
        pcon->data[j + 1] = tmp;
     }
   }
 }
}

测试代码:

#include "Contact.h"
​
void menu()
{
 printf("******************************\n");
 printf("** 1. add   2. del **\n");
 printf("** 3. search 4. modify **\n");
 printf("** 5. show  6. clear **\n");
 printf("** 7. sort  0. exit **\n");
 printf("******************************\n");
}
​
int main()
{
 int input = 0;
 //创建通讯录
 Contact con;//
 //初始化通讯录
 InitContact(&con);
 do 
 {
  menu();
  printf("请选择:>");
  scanf("%d", &input);
  switch(input)
  {
  case ADD:
   AddContact(&con);
   break;
  case DEL:
   DelContact(&con);
   break;
    case SEARCH:
      FindContact(&con);
   break;
  case SORT:
      SortContact(&con);
   break;
  case MODIFY:
      ModifyContact(&con);
   break;
  case SHOW:
   ShowContact(&con);
   break;
  case CLEAR:
      ClearContact(&con);
      break;
  case EXIT:
   printf("退出程序\n");
   return 0;
  default:
   printf("输入有误,请重新输入\n");
   break;
  }
 } while (input);
 return 0;
}

这样,我们一个通讯录就大功告成了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值