> 文档中心 > 我的通讯录

我的通讯录


我们准备用C语言实现一个通讯录

这个通讯录可容纳1000人的信息,涉及每个人的名字、年龄、性别、电话、地址

功能包括:

  1. 添加联系人
  2. 删除联系人
  3. 查找联系人
  4. 修改联系人信息
  5. 打印联系人信息

目录

一.菜单

二.测试函数、主函数

三.联系人信息及通讯录的实现

四.初始化通讯录

五.添加联系人函数

六.删除联系人函数

七.查找联系人函数

八.修改联系人函数

九.打印联系人函数

十.完整代码


一.菜单

void menu(){printf("\n");printf("\n");printf("*  1.add  2.del      \n");printf("*  3.search      4.modify   \n");printf("*  5.printf      0.exi      \n");printf("\n");printf("\n");}

二.测试函数、主函数

void test(){int input = 0;Contact con;InitialContact(&con);do{menu();printf("请选择:>\n");scanf("%d", &input);switch (input){case 1:AddContact(&con);break;case 2:DelContact(&con);break;case 3:SearchContact(&con);break;case 4:ModifyContact(&con);break;case 5:PrintContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("输入错误\n");break;}} while (input);}int main(){test();}

三.联系人信息及通讯录的实现

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 InitialContact(Contact *pc){assert(pc);pc->sz = 0;memset(pc->data, 0, sizeof(pc->data));}

五.添加联系人函数

void AddContact(Contact *pc){assert(pc);if (pc->sz == MAX){printf("通讯录已经满啦!!!无法添加!!!\n");return ;}printf("请输入名字:\n");scanf("%s", pc->data[pc->sz].name);printf("请输入年龄:\n");scanf("%d", &(pc->data[pc->sz].age));printf("请输入性别:\n");scanf("%s", pc->data[pc->sz].sex);printf("请输入电话:\n");scanf("%s", pc->data[pc->sz].tele);printf("请输入地址:\n");scanf("%s", pc->data[pc->sz].addr);pc->sz++;printf("添加成功\n");}

六.删除联系人函数

void DelContact(Contact *pc){assert(pc);if (pc->sz == 0){printf("您已经没有朋友了,无法删除\n");return;}char name[NAME_MAX];printf("请输入要删除人的名字:\n");scanf("%s", &name);int pos = FindByName(pc,name);if (pos == -1){printf("联系人不存在!\n");return;}int j = pos;for (j = pos; j sz-1; j++){pc->data[j] = pc->data[j + 1];}pc->sz--;printf("删除成功\n");}

七.查找联系人函数

void SearchContact( Contact *pc){char name1[NAME_MAX];printf("请输入要查找人的名字:\n");scanf("%s", &name1);int pos = FindByName(pc, name1);if (pos == -1){printf("联系人不存在!\n");return;}printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[pos].name, pc->data[pos].age,pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);}

int FindByName(const Contact *pc,char* name)/*找到返回下标,找不到返回-1*/{assert(pc);for (int i = 0; i sz; i++){if (strcmp(pc->data[i].name, name) == 0){return i;}}return -1;}

八.修改联系人函数

void ModifyContact(Contact *pc){char name[NAME_MAX];printf("请输入要修改人的名字:\n");scanf("%s", &name);int pos = FindByName(pc, name);if (pos == -1){printf("联系人不存在!\n");return;}printf("请输入修改后的名字:\n");scanf("%s", pc->data[pos].name);printf("请输入修改后的年龄:\n");scanf("%d", &(pc->data[pos].age));printf("请输入修改后的性别:\n");scanf("%s", pc->data[pos].sex);printf("请输入修改后的电话:\n");scanf("%s", pc->data[pos].tele);printf("请输入修改后的地址:\n");scanf("%s", pc->data[pos].addr);printf("修改成功\n");}

九.打印联系人函数

void PrintContact(const Contact *pc){assert(pc);printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名","年龄", "性别", "电话", "地址");int i = 0;for (i = 0; i sz; i++){printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[i].name, pc->data[i].age,pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);}}

十.完整代码

头文件contact.h

#pragma once#include#include#include#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 12#define ADDR_MAX 30#define MAX 1000typedef 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 AddContact(Contact* pc);void PrintContact(const Contact* pc);void InitialContact(Contact* pc);void DelContact(Contact* pc);void SearchContact(const Contact* pc);void ModifyContact(Contact* pc);int FindByName(Contact* pc, char* name);

源文件test.c

#define _CRT_SECURE_NO_WARNINGS 1#include"contact.h"void menu(){printf("\n");printf("\n");printf("*  1.add  2.del      \n");printf("*  3.search      4.modify   \n");printf("*  5.printf      0.exi      \n");printf("\n");printf("\n");}void test(){int input = 0;Contact con;InitialContact(&con);do{menu();printf("请选择:>\n");scanf("%d", &input);switch (input){case 1:AddContact(&con);break;case 2:DelContact(&con);break;case 3:SearchContact(&con);break;case 4:ModifyContact(&con);break;case 5:PrintContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("输入错误\n");break;}} while (input);}int main(){test();}

源文件contact.c

define _CRT_SECURE_NO_WARNINGS 1#include"contact.h"void InitialContact(Contact *pc){assert(pc);pc->sz = 0;memset(pc->data, 0, sizeof(pc->data));}void AddContact(Contact *pc){assert(pc);if (pc->sz == MAX){printf("通讯录已经满啦!!!无法添加!!!\n");return ;}printf("请输入名字:\n");scanf("%s", pc->data[pc->sz].name);printf("请输入年龄:\n");scanf("%d", &(pc->data[pc->sz].age));printf("请输入性别:\n");scanf("%s", pc->data[pc->sz].sex);printf("请输入电话:\n");scanf("%s", pc->data[pc->sz].tele);printf("请输入地址:\n");scanf("%s", pc->data[pc->sz].addr);pc->sz++;printf("添加成功\n");}void DelContact(Contact *pc){assert(pc);if (pc->sz == 0){printf("您已经没有朋友了,无法删除\n");return;}char name[NAME_MAX];printf("请输入要删除人的名字:\n");scanf("%s", &name);int pos = FindByName(pc,name);if (pos == -1){printf("联系人不存在!\n");return;}int j = pos;for (j = pos; j sz-1; j++){pc->data[j] = pc->data[j + 1];}pc->sz--;printf("删除成功\n");}void SearchContact( Contact *pc){char name1[NAME_MAX];printf("请输入要查找人的名字:\n");scanf("%s", &name1);int pos = FindByName(pc, name1);if (pos == -1){printf("联系人不存在!\n");return;}printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名", "年龄", "性别", "电话", "地址");printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[pos].name, pc->data[pos].age,pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);}void ModifyContact(Contact *pc){char name[NAME_MAX];printf("请输入要修改人的名字:\n");scanf("%s", &name);int pos = FindByName(pc, name);if (pos == -1){printf("联系人不存在!\n");return;}printf("请输入修改后的名字:\n");scanf("%s", pc->data[pos].name);printf("请输入修改后的年龄:\n");scanf("%d", &(pc->data[pos].age));printf("请输入修改后的性别:\n");scanf("%s", pc->data[pos].sex);printf("请输入修改后的电话:\n");scanf("%s", pc->data[pos].tele);printf("请输入修改后的地址:\n");scanf("%s", pc->data[pos].addr);printf("修改成功\n");}void PrintContact(const Contact *pc){assert(pc);printf("%-20s %-3s %-5s %-12s %-20s\n", "姓名","年龄", "性别", "电话", "地址");int i = 0;for (i = 0; i sz; i++){printf("%-20s %-3d %-5s %-12s %-20s\n", pc->data[i].name, pc->data[i].age,pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);}}int FindByName(const Contact *pc,char* name)/*找到返回下标,找不到返回-1*/{assert(pc);for (int i = 0; i sz; i++){if (strcmp(pc->data[i].name, name) == 0){return i;}}return -1;}