宜昌 公司 网站建设,推广引流工具,页面升级自动跳转,企业网站建设首页要写什么内容【C语言】通讯录的实现(静态版一.前言1.前期准备a.菜单实现b.联系人结构体的构建c.菜单选项的功能d.#define 的定义2.功能的实现a.初始化通讯录b.增加联系人c.显示通讯录d.查找联系人e.修改联系人d.删除联系人3. 总代码test.ccontact.ccontact.h一.前言
本文将会用c语言实现一…
【C语言】通讯录的实现(静态版一.前言1.前期准备a.菜单实现b.联系人结构体的构建c.菜单选项的功能d.#define 的定义2.功能的实现a.初始化通讯录b.增加联系人c.显示通讯录d.查找联系人e.修改联系人d.删除联系人3. 总代码test.ccontact.ccontact.h一.前言
本文将会用c语言实现一个通讯录的系统并且存储若干人的信息每个人的信息包括姓名性别年龄电话号码住址。此通讯录系统的功能包括 1.增加联系人 2.删除对应的联系人 3.查找联系人 4.修改联系人的信息 5.排序此通讯录 6.显示通讯录每个人的信息 。
1.前期准备
建立菜单十分重要可以与用户之间建立联系。
菜单中要包含所以功能以便用户操作。
a.菜单实现
void menu()
{printf(******************************\n);printf(***** 1.add 2.del *****\n);printf(***** 3.search 4.show *****\n);printf(**** 4.modify 6.sort ****\n);printf(**** 0.exit ****\n);printf(*****************************\n);
}b.联系人结构体的构建
typedef struct PeoInfo
{char name[MAX_NAME];int age;char tele[MAX_TELE];char sex[MAX_SEX];char addr[MAX_ADDR];
}PeoInfo;typedef struct Contact
{PeoInfo data[MAX];int sz;//记录个数
}Contact;
c.菜单选项的功能
利用枚举enum增加可读性
再利用 switch函数实现各自功能。
enum Option
{EXIT,//0ADD,//1DEL,//2SEARCH,//3SHOW,//4MODIFY,//5SORT//6
};
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:SearchContact(con);break;case SHOW:ShowContact(con);break;case MODIFY:ModifyContact(con);case SORT:SortContact(con);case EXIT:printf(退出程序\n);break;default:printf(选择错误\n);break;}} while (input);return 0;
}d.#define 的定义
便于修改数据增加可改性
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 302.功能的实现
a.初始化通讯录
void InitContact(Contact* pc)
{pc-sz 0;memset(pc-data, 0, sizeof(pc-sz));
} //初始化结构体b.增加联系人
void AddContact(Contact* pc)
{if (pc-sz MAX){printf(通讯录已满无法增加\n);return;}printf(请输入名字:);scanf(%s, pc-data[pc-sz].name);printf(请输入性别:);scanf(%s, pc-data[pc-sz].sex);printf(请输入电话:);scanf(%s, pc-data[pc-sz].tele);printf(请输入地址:);scanf(%s, pc-data[pc-sz].addr);printf(请输入年龄:);scanf(%d, (pc-data[pc-sz].age)); //注意年龄在这是一个int类型所以传址pc-sz;printf(添加成功\n);
}c.显示通讯录
int cmp_by_name(const void* p1, const void* p2)
{return strcmp(((PeoInfo*)p1)-name, ((PeoInfo*)p2)-name);
}
void SortContact(Contact* pc)
{qsort(pc-data, pc-sz, sizeof(PeoInfo), cmp_by_name);printf(排序成功\n);
}d.查找联系人
查找联系人这边我们需要构建一个函数这个函数需要去根据我们想要寻找的姓名去在通讯录中寻找这个人所对应的位置加入找到了就可以返回对应位置的下标否则返回-1。找到之后就和打印通讯录的操作差不多打印出来就好了。
static int FindByName(const Contact* pc, char name[])//通过名字来找
{for (int i 0;i pc-sz;i){if (0 strcmp(pc-data[i].name, name)){return i;}}return -1;
} //寻找或删除联系人下标void SearchContact(Contact* pc)
{char name[MAX_NAME] { 0 };printf(请输入要查找人的名字:);scanf(%s, name);int pos FindByName(pc, name);//pos为要寻找的人的下标if (pos -1){printf(要查找人不存在\n);return;}printf(%-10s %-4s %-5s %-12s %-30s\n, 姓名, 年龄, 性别, 电话, 地址);printf(%-10s %-4d %-5s %-12s %-30s\n, pc-data[pos].name, pc-data[pos].age, pc-data[pos].sex,pc-data[pos].tele, pc-data[pos].addr);
}e.修改联系人
void ModifyContact(Contact* pc)
{char name[MAX_NAME] { 0 };printf(请输入要修改人的名字:);scanf(%s, name);int pos FindByName(pc, name);if (pos -1){printf(要修改人不存在\n);return;}printf(请输入名字:);scanf(%s, pc-data[pc-sz].name);printf(请输入性别:);scanf(%s, pc-data[pc-sz].sex);printf(请输入电话:);scanf(%s, pc-data[pc-sz].tele);printf(请输入地址:);scanf(%s, pc-data[pc-sz].addr);printf(请输入年龄:);scanf(%d, (pc-data[pc-sz].age));printf(修改成功\n);
}d.删除联系人
void DelContact(Contact* pc)
{char name[MAX_NAME] { 0 };if (pc-sz 0){printf(通讯录为空无法删除\n);return;}printf(要删除人的姓名:);scanf(%s, name);int pos;pos FindByName(pc, name);if (pos -1){printf(要删除人不存在\n);return;}int i 0;for (i pos;i pc-sz-1;i){pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功\n);
}3. 总代码
test.c
#includecontact.h
void menu()
{printf(******************************\n);printf(***** 1.add 2.del *****\n);printf(***** 3.search 4.show *****\n);printf(**** 4.modify 6.sort ****\n);printf(**** 0.exit ****\n);printf(*****************************\n);
}
enum Option
{EXIT,ADD,DEL,SEARCH,SHOW,MODIFY,SORT
};
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:SearchContact(con);break;case SHOW:ShowContact(con);break;case MODIFY:ModifyContact(con);case SORT:SortContact(con);case EXIT:printf(退出程序\n);break;default:printf(选择错误\n);break;}} while (input);return 0;
}contact.c
#define _CRT_SECURE_NO_WARNINGS 1#include contact.hvoid InitContact(Contact* pc)
{pc-sz 0;memset(pc-data, 0, sizeof(pc-data));
}void AddContact(Contact* pc)
{if (pc-sz MAX){printf(通讯录已满无法增加\n);return;}printf(请输入名字:);scanf(%s, pc-data[pc-sz].name);printf(请输入年龄:);scanf(%d, (pc-data[pc-sz].age));printf(请输入性别:);scanf(%s, pc-data[pc-sz].sex);printf(请输入电话:);scanf(%s, pc-data[pc-sz].tele);printf(请输入地址:);scanf(%s, pc-data[pc-sz].addr);pc-sz;printf(添加成功\n);
}void ShowContact(const Contact* pc)
{int i 0;//姓名 年龄 性别 电话 地址//zhangsan 20 男 123456 北京////打印标题printf(%-10s %-4s %-5s %-12s %-30s\n, 姓名, 年龄, 性别, 电话, 地址);//打印数据for (i 0; i pc-sz; i){printf(%-10s %-4d %-5s %-12s %-30s\n,pc-data[i].name, pc-data[i].age, pc-data[i].sex, pc-data[i].tele, pc-data[i].addr);}
}static int FindByName(const Contact* pc, char name[])
{int i 0;for (i 0; i pc-sz; i){if (0 strcmp(pc-data[i].name, name)){return i;}}return -1;
}void DelContact(Contact* pc)
{char name[MAX_NAME] { 0 };if (pc-sz 0){printf(通讯录为空无法删除\n);return;}//删除//1. 找到要删除的人 - 位置下标printf(输入要删除人的名字:);scanf(%s, name);int pos FindByName(pc, name);if (pos -1){printf(要删除的人不存在\n);return;}int i 0;//2. 删除 - 删除pos位置上的数据for (i pos; i pc-sz - 1; i){pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功\n);
}void SearchContact(const Contact* pc)
{char name[MAX_NAME] { 0 };printf(请输入要查找人的名字:);scanf(%s, name);//查找int pos FindByName(pc, name);if (pos -1){printf(要查找的人不存在\n);return;}//打印printf(%-10s %-4s %-5s %-12s %-30s\n, 姓名, 年龄, 性别, 电话, 地址);//打印数据printf(%-10s %-4d %-5s %-12s %-30s\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[MAX_NAME] { 0 };printf(请输入要修改人的名字:);scanf(%s, name);int pos FindByName(pc, name);if (pos -1){printf(要修改的人不存在\n);return;}//修改printf(请输入名字:);scanf(%s, pc-data[pos].name);printf(请输入年龄:);scanf(%d, (pc-data[pos].age));printf(请输入性别:);scanf(%s, pc-data[pos].sex);printf(请输入电话:);scanf(%s, pc-data[pos].tele);printf(请输入地址:);scanf(%s, pc-data[pos].addr);printf(修改成功\n);
}//按照名字来排序
int cmp_by_name(const void* e1, const void* e2)
{return strcmp(((PeoInfo*)e1)-name, ((PeoInfo*)e2)-name);
}void SortContact(Contact* pc)
{qsort(pc-data, pc-sz, sizeof(PeoInfo), cmp_by_name);printf(排序成功\n);
}
contact.h
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#includestdio.h
#includestdlib.h
#includestring.h#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30typedef struct PeoInfo
{char name[MAX_NAME];int age;char tele[MAX_TELE];char sex[MAX_SEX];char addr[MAX_ADDR];
}PeoInfo;typedef struct Contact
{PeoInfo data[MAX];int sz;//记录个数
}Contact;void InitContact(Contact* pc);//初始化通讯录
void AddContact(Contact* pc);//增加联系人
void ShowContact(Contact* pc);//显示通讯录
void DelContact(Contact* pc);//删除联系人
void SortContact(Contact* pc);//排序通讯录
void ModifyContact(Contact* pc);//修改联系人信息
void SearchContact(Contact* pc);//查找联系人 感谢阅读