这个代码通过顺序表的方式,来实现通讯录,功能有显示,删除,修改,查找,增加的功能
可以拿去应付期末考试哦
结言:本人笔拙,无法将自身的想法一一阐述,希望各位在阅读完后,能给出相应的意见,也欢迎大家在阅读之后提出一些问题,我很乐意帮助大家
- #include <assert.h>
- #include <stdio.h>
- #include <string.h>
-
- #define NAME_MAX 10
- #define SEX_MAX 5
- #define TELE_MAX 10
- #define ADDR_MAX 10
-
- #define MAX 100
-
-
- //类型的声明
- typedef struct PeoInfo
- {
- char name[NAME_MAX];
- int 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* pc);
-
- //增加联系人
- void AddContact(Contact* pc);
-
- //显示所有的联系人
- void ShowContact(const Contact* pc);
-
- //删除指定联系人
- void DelContact(Contact* pc);
-
- //查找指定联系人
- void SearchContact(Contact* pc);
-
- //修改指定联系人
- void ModifyContact(Contact* pc);
- void InitContact(Contact* pc)
- {
- assert(pc);
- pc->sz = 0;
- memset(pc->data, 0, sizeof(pc->data));
- return;
- }
- void AddContact(Contact* pc)
- {
- assert(pc);
- if (pc->sz == MAX)
- {
- printf("通讯录已满");
- return;
- }
- printf("请输入name");
- scanf("%s", pc->data[pc->sz].name);
- printf("请输入age");
- scanf("%d", &pc->data[pc->sz].age);
- printf("请输入sex");
- scanf("%s", pc->data[pc->sz].sex);
- printf("请输入tale");
- scanf("%s", pc->data[pc->sz].tele);
- printf("请输入addr");
- scanf("%s", pc->data[pc->sz].addr);
- printf("添加成功\n");
- pc->sz++;
- return;
- }
- void ShowContact(const Contact* pc)
- {
- assert(pc);
- int i;
- printf("%-20s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
- for (i = 0; i < pc->sz; i++)
- {
- printf("%-20s%-5d%-5s%-12s%-30s\n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data->addr);
- }
- return;
- }
-
- static int findname(Contact* pc, char name[])
- {
- assert(pc);
- int i = 0;
- for (i = 0; i < pc->sz; i++)
- {
- if (strcmp(pc->data[i].name, name) == 0)
- {
- return i;
- }
- }
- return -1;//找不到
- }
-
- void DelContact(Contact* pc)
- {
- assert(pc);
- int i;
- char s[10];
- printf("请输入你要删除人的名字");
- scanf("%s", s);
- int ret = findname(pc, s);
- if (ret != -1)
- {
- for (i = ret; i < pc->sz - 1; i++)
- {
- pc->data[i] = pc->data[i + 1];
- }
- pc->sz--;
- printf("删除成功\n");
- }
- else
- {
- printf("并无此人\n");
- }
- return;
- }
- void SearchContact(Contact* pc)
- {
- assert(pc);
- char s[10];
- printf("请输入要联系人的名字");
- scanf("%s", s);
- int ret = findname(pc, s);
- if (ret == -1)
- {
- printf("要查找的人不存在\n");
- return;
- }
- //显示出来
- printf("%-20s%-5s%-5s%-12s%-30s\n", "名字", "年龄", "性别", "电话", "地址");
- printf("%-20s%-5d%-5s%-12s%-30s\n",
- pc->data[ret].name, pc->data[ret].age, pc->data[ret].sex, pc->data[ret].tele, pc->data[ret].addr);
- }
-
- void ModifyContact(Contact* pc)
- {
- assert(pc);
- char s[10];
- printf("请输入要修改的名字");
- scanf("%s", s);
- int ret = findname(pc, s);
- if (ret != -1)
- {
- printf("请输入name");
- scanf("%s", pc->data[ret].name);
- printf("请输入age");
- scanf("%d", &pc->data[ret].age);
- printf("请输入sex");
- scanf("%s", pc->data[ret].sex);
- printf("请输入tale");
- scanf("%s", pc->data[ret].tele);
- printf("请输入addr");
- scanf("%s", pc->data[ret].addr);
- printf("修改成功\n");
- }
- else
- {
- printf("查无此人");
- }
- return;
- }
- void menu()
- {
- printf("********************************\n");
- printf("**** 1. add 2. del ****\n");
- printf("**** 3. search 4.modify ****\n");
- printf("**** 5. show 6. sort ****\n");
- printf("**** 0. exit ****\n");
- printf("********************************\n");
- }
- enum option {
- EXIT,
- ADD,
- DEL,
- SEARCH,
- MODIFY,
- SHOW,
- SORT
- };
- int main()
- {
- Contact con;
- InitContact(&con);
- int input = 0;
-
- do {
- menu();
- printf("请输入你的选择");
- scanf("%d", &input);
- switch (input)
- {
- case ADD:AddContact(&con); break;
- case DEL:DelContact(&con); break;
- case SEARCH:SearchContact(&con); break;
- case MODIFY:ModifyContact(&con); break;
- case SHOW:ShowContact(&con); break;
- case SORT:
- break;
- }
- } while (input);
- return 0;
- }