目录
可以先看一遍第二节在看这个 顺序表(第二节)实现和解析-CSDN博客
- #pragma once
- #define NAME_MAX 100
-
- #define SEX_MAX 4
-
- #define TEL_MAX 11
-
- #define ADDR_MAX 100
- //前置声明
- typedef struct SeqList contact;
- //用户数据
- typedef struct PersonInfo
-
- {
- char name[NAME_MAX];
- char sex[SEX_MAX];
- char telenum[TEL_MAX];
- char adr[ADDR_MAX];
- }PeoInfo;
- //初始化通讯录
- void InitContact(contact* con);
- //添加通讯录数据
- void AddContact(contact* con);
- //删除通讯录数据
- void DelContact(contact* con);
- //展示通讯录数据
- void ShowContact(contact* con);
- //查找通讯录数据
- void FindContact(contact* con);
- //修改通讯录数据
- void ModifyContact(contact* con);
- //销毁通讯录数据
- void DestroyContact(contact* con);
#pragma once 的意思是同一个头文件只能展开一次。
下面define几个变量。
第一个typedef 是把前面顺序表的结构体重命名为 contact。
第二个typedef 是把你通讯录的结构体类型重命名为 peoinfo。
下面则是每个方法的的接口名称。
- void InitContact(contact* con)
- {
- SLInit(con);
- }
很简单调用前面的顺序表的初始化接口即可。
- void AddContact(contact* con)
- {
- PeoInfo info = {0};
- printf("请输入联系人姓名:\n");
- scanf("%s", info.name);
- printf("请输入联系人性别:\n");
- scanf("%s", info.sex);
- printf("请输入联系人电话号码:\n");
- scanf("%s", info.telenum);
- printf("请输入联系人地址:\n");
- scanf("%s", info.adr);
- SLPushBack(con, info);
- }
让别人输入4个变量的值的过程,也很简单都是基础 !!!!!!
- int FindByName(contact* con, char name[])
- {
- for (int i = 0; i < con->size; i++)
- {
- if (strcmp(con->a[i].name, name) == 0)
- {
- return i;
- }
- }
- return -1;
- }
这个函数作为中间函数,可以不用写在头文件里,但对于后面几步的操作确实必不可少的。
首先这个函数查找的是 用名字找位置(当然你也可以用其他的变量的值作为查找值)。
传入两个参数第一个是要查找的通讯录的指针,第二个则是要查找的姓名。
用遍历遍历每一个顺序表的表格中的内容,然后用strcmp函数来做比较,因为字符串比较用不了大小于符号。
strcmp的用法就是对比两个字符串如果都相等则返回0,如果不相等则返回不是0的数。
如果找到了就返回这个 i (这个 i 就是 相同名字在 通讯录的位置。)
找不到就返回-1.
- void DelContact(contact* con)
- {
- printf("请输入要删除的人的姓名:\n");
- char name[NAME_MAX];
- scanf("%s", name);
- int find = FindByName(con, name);
- if (find >= 0)
- {
- SLErase(con, find);
- }
- else
- {
- printf("要删除的联系人不存在。\n");
- return;
- }
- }
传入通讯录的指针。
然后让用户输入要查找的通讯录姓名,在用 int find 接收 函数返回值。
如果返回的是 i 那就是大于0 的,反之为-1 (上面特殊函数的返回值)。
如果大于0就代表找到了,利用顺序表删除的接口,删除这一格的通讯录信息。
反之就是没找到,打印没找到并返回。
- void ShowContact(contact* con)
- {
- printf("%-4s %-4s %-11s %s\n", "姓名", "性别", "号码", "地址");
- for (int i = 0; i < con->size; i++)
- {
- printf("%-4s %-4s %-11s %s\n", con->a[i].name, con->a[i].sex, con->a[i].telenum, con->a[i].adr);
- }
-
- }
展示通讯录就是把通讯录的内容打印出来即可。先做好表头就是把内容都打印好。
然后再用for循环给通讯录的内容一一遍历并打印出来即可。
- void FindContact(contact* con)
- {
- char name[NAME_MAX];
- printf("你要查找的姓名:\n");
- scanf("%s", name);
- int find = FindByName(con, name);
- if (find < 0)
- {
- printf("你输入的姓名不存在!\n");
- return;
- }
- printf("%-4s %-4s %-11s %s\n", "姓名", "性别", "号码", "地址");
- printf("%-4s %-4s %-11s %s\n", con->a[find].name, con->a[find].sex, con->a[find].telenum, con->a[find].adr);
- }
查找通讯录和删除的前提都是一样的,都是用 findbyname 函数找到对应位置的通讯录。
然后找到了就打印出这一格的通讯录内容即可。
- void ModifyContact(contact* con)
- {
- char name[NAME_MAX];
- printf("你要查找的姓名:\n");
- scanf("%s", name);
- int find = FindByName(con, name);
- if (find < 0)
- {
- printf("你输入的姓名不存在!\n");
- return;
- }
- printf("请输入修改后的姓名:\n");
- scanf("%s", con->a[find].name);
- printf("请输入修改后的性别:\n");
- scanf("%s", con->a[find].sex);
- printf("请输入修改后的电话:\n");
- scanf("%s", con->a[find].telenum);
- printf("请输入修改后的地址:\n");
- scanf("%s", con->a[find].adr);
- }
更改联系人,和上面也一样先用到 findbyname 接口。
然后在对通讯录里的内容进行更改就好。
- void DestroyContact(contact* con)
- {
- SLDestory(con);
- }
销毁通讯录,就用到顺序表的销毁接口就好了。总之通讯录的实现是很快的。
- #include"sql.h"
- #include"txl.h"
- void menu()
- {
- printf("***********************************\n");
- printf("*****1.添加联系人 2.删除联系人*****\n");
- printf("*****3.查找联系人 4.查看联系人*****\n");
- printf("*****5.修改联系人 0.退出通讯录*****\n");
- printf("***********************************\n");
- }
- int main()
- {
- contact con;
- InitContact(&con);
- int num = 0;
- do
- {
- menu();
- printf("输入操作数:\n");
- scanf("%d", &num);
- switch (num)
- {
- case 1:
- AddContact(&con);
- break;
- case 2:
- DelContact(&con);
- break;
- case 3:
- FindContact(&con);
- break;
- case 4:
- ShowContact(&con);
- break;
- case 5:
- ModifyContact(&con);
- break;
- case 0:
- printf("退出!\n");
- break;
- default:
- printf("输入的操作不存在!请重新输入\n");
- break;
- }
- } while (num);
- DestroyContact(&con);
- return 0;
- }
最终结果: