顺序表的应用之通讯录

学习了顺序表之后,我们也得知道它的实际用途吧!所以,我们今天来学习一下通讯录的实现。

typedef struct personInfo SLDataType;

 contact.h

#define NAME_MAX 20
#define GENDER_MAX 20
#define GTEL_MAX 20
#define ADDR_MAX 100
#include"SeqList.h"

//定义联系人数据结构
//姓名 性别 年龄 电话 地址
typedef struct PersonInfo
{
   char[NAME_MAX];
   gender[GENDER_MAX];
   int age;
   char tel[TEL_MAX];
   char addr[ADDR_MAX];
   
}peoInfo;
//通讯录的初始化
typedef struct SeqList Contact;//改通讯录的名字,没有包含顺序表的头文件,所以需要写出完整的名字
void ContactInit(Contact*con);
//通讯录的销毁
void ContactDestory(Contact*con);
//往通讯录里添加数据
void ContactAdd(Contact*con);
//通讯录的修改
void ContactModify(Contact*con);
//通讯录的查找
void ContactFind(Contact*con);
//通讯录的展示
void ContactShow(Contact*con);

typedef int SLDataType;

//通讯录增加删除数据

SeqList.h

#include"Contact.h"//把头文件加载进来
//typedef int SLDataType
typedef peoInfo SLDataType
{
   
  

contact.c

#include"Contact.h"
//通讯录的初始化
void ContactInit(Contact* con)
{
     //实际上要进行的是顺序表的初始化,顺序表的初始化实际上已经实现好了
     SLInit(con);
}
void ContactDestroy(Contact* con)
{
     SLDestroy(con);
}
//通讯录添加数据
void ContactAdd(contact* con)
{
   peoInfo info;
  //获取用户输入的内容:姓名,性别,年龄,电话,地址
  printf("请输入要添加的联系人姓名:\n”);
  scanf("%s",info.name);
  printf("请输入要添加的联系人性别:\n”);
  scanf("%s",info.gender);
  printf("请输入要添加的联系人年龄:\n”);
  scanf("%s",&info.age);
  printf("请输入要添加的联系人电话:\n”);
  scanf("%s",info.tel);
  printf("请输入要添加的联系人住址:\n”);
  scanf("%s",info.addr);
        //往通讯录中添加数据
  SLPushBack(con,info);//尾插,顺序表中已有方法的复用
}
//通讯录删除联系人
int FindByName(Contact*con,char name[])
{
    for(int i=0;i<con->size;i++)
    {
        if(0==strcmo(con->arr[i].name,name))
        {
           //找到了
           return i;
         }
    }
    //没有找到
    return -1;
}
      
       
void ContactDel(Contact* con)
{
   //要删除的文件必须存在,才能执行删除操作
   //查找
   int find=FindByName(con,name);
   if(find<0)
   {
       printf("要删除的联系人数据不存在!\n);
       return;
   }
   //要删除的联系人存在-->知道了要删除的联系人数据对应的下标
   SLErase(con,find);
   printf("删除成功!\n"); 
} 
 
 //展示通讯录数据
void ContactShow(Contact* con) 
{
   //表头:姓名 性别 年龄 电话 地址
   printf("%s %s %s %s %s\n","姓名","性别","年龄","电话","地址");
   for(int i=0;i<con->size;i++)
   {
       printf("%s %s %d %s %s\n",
            con->arr[i].nme,
            con->arr[i].gender,
            con->arr[i].age,
            con->arr[i].tel,
            con->arr[i].addr
            );
    }
}
     
//通讯录的修改         
void ContactModify(Contact*con)
{
//要修改的联系人数据存在
   char name[NAME_MAX];
   printf("请输入要修改的用户姓名:\n");
   scanf("%s",nmae);
   int find=FindByName(con,name);
   if(find<0)
   {
       printf("要修改的联系人数据不存在!\n");
       return;
   }
   //直接修改
   printf("请输入新的姓名:\n");
   scanf("%s",con->arr[find].name);
   printf("请输入新的性别:\n");
   scanf("%s",con->arr[find].gender);
   printf("请输入新的电话:\n");
   scanf("%s",con->arr[find].tel);
   printf("请输入新的地址:\n");
   scanf("%s",con->arr[find].addr);
   printf("修改成功!\n)";
  
}
//通讯录查找
void ContactFind(Contact* con)
{
   //姓名 性别 年龄 电话 地址
   //11    11   11  11  11
   char name[NAME_Max];
   printf("%s",name);
   int find=FindByName(con,name);
   if(find<0)
   {
       printf("要修改的联系人数据不存在!\n);
       return;
   }
   //手动调整格式
    printf("%s %s %s %s %s\n","姓名","性别","年龄","电话","地址");
    printf("%s %s %d %s %s\n",
            con->arr[find].nme,
            con->arr[find].gender,
            con->arr[find].age,
            con->arr[find].tel,
            con->arr[find].addr
            );


    

通讯录的测试方法

void ContactTest()
{
   Contact con;//创建通讯录对象,实际上就是顺序表对象,等价于SL s1
   ContactInit(&con);
}

test.c

void  menu()
{
    printf("**************************************");
    printf("****1.增加联系人       2.删除联系人*****");
    printf("****3.修改联系人       4.查找联系人*****");
    printf("*****5.展示联系人      0.退出***********");
    printf("**************************************");
}
int main()
{
    int op=-1;
    Contact con;
    ContactInit(&con);
    do{
       menu();
       printf("请选择您的操作:\n");
       scanf("%d",&op);
       switch(op)
       {
        case 1:
             ContactAdd(&con);
        case 2:
             ContactDel(&con);
        case 3:
             ContactModify(&con);
        case 4:
             ContactFind(&con);
        case 5:
             ContactShow(&con);
        case 0:
             printf("退出通讯录!\n);
             break;
        default:
            printf("输入错误,请重新输入!\n);
            break;
     }while(op!=0)
     ContactDestory(&con);
     return 0;
}

如何保证程序结束后,历史通讯录信息不会丢失:

void SaveContact(contact* con)
 {
    FILE* pf = fopen("contact.txt", "wb");
    if (pf == NULL)
   {
      perror("fopen error!\n");
      return;
    }
//将通讯录数据写⼊⽂件
    for (int i = 0; i < con->size; i++)
   {
      fwrite(con->a + i, sizeof(PeoInfo), 1, pf);
    }
    printf("通讯录数据保存成功!\n");
}


 

相关推荐

  1. 顺序应用——通讯录实现

    2024-04-07 11:58:06       16 阅读
  2. 数据结构_基于顺序通讯录

    2024-04-07 11:58:06       12 阅读
  3. 顺序应用

    2024-04-07 11:58:06       38 阅读
  4. 实现通讯录顺序

    2024-04-07 11:58:06       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-07 11:58:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-07 11:58:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-07 11:58:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-07 11:58:06       20 阅读

热门阅读

  1. 手写一个民用Tomcat (02)

    2024-04-07 11:58:06       15 阅读
  2. 计算机网络的分层结构及模型

    2024-04-07 11:58:06       18 阅读
  3. 设计模式面试题(六)

    2024-04-07 11:58:06       15 阅读
  4. 当发生缓存未命中时,主存访问时间包括

    2024-04-07 11:58:06       12 阅读
  5. go实现生产者和消费者

    2024-04-07 11:58:06       16 阅读
  6. 腾讯光子工作室群 一面 (30min)

    2024-04-07 11:58:06       16 阅读
  7. 如何使用Arduino IDE对STM32F103C8T6进行编程

    2024-04-07 11:58:06       15 阅读
  8. vue3+elementUiPlus+弹框

    2024-04-07 11:58:06       12 阅读