医院英文网站建设,广告设计在哪里学,程序员工资多少钱一个月,公司网站怎么管理注意#xff1a;纯属玩笑#xff0c;博大家一乐#xff0c;切勿当真#x1f4d6;首先我们要知道一个渣男通讯录有哪些信息要包含哪些功能1.你的通讯录要装多少个女朋友你得规定吧#xff1b;2.每个女朋友的姓名#xff0c;年龄#xff0c;电话#xff0c;爱好这些要有吧…注意纯属玩笑博大家一乐切勿当真首先我们要知道一个渣男通讯录有哪些信息要包含哪些功能1.你的通讯录要装多少个女朋友你得规定吧2.每个女朋友的姓名年龄电话爱好这些要有吧3.这个通讯录也要有以下功能吧增加女朋友删除女朋友查找女朋友修改指定女朋友的信息显示女朋友们的信息排序女朋友们按年龄来排序或者按姓名来排序❓那我们怎样来实现这个渣男通讯录呢。首先我们得在屏幕上打印一个通讯录的菜单呀那我们写一个叫menu的函数函数的实现放在contact.c 这个文件中函数的声明放在contact.h 这里面。// 打印通讯录的菜单
void menu(void)
{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);
}菜单打印完了之后那菜单上面不是有一些选项吗。那我们要根据你所输入的选项来执行相应的功能呀这个时候我们想到了switch 语句。但是如果你用case1,case2.......这种方式也有弊端它不容易让我们想到case1 是什么功能所以要是有 case add 这种形式就好了我们就知道了add 是增加联系人的那个选项所以这个时候我们可以用枚举常量:enum来实现我们的目的。int main()
{int input 0;do{menu();printf(请选择);scanf(%d, input);enum Option{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT,};switch(input){case ADD:break;case DEL:break; case SEARCH:break;case MODIFY:break;case SHOW:break;case SORT:break;case EXIT:break;default:break;}} while (input);好了这个时候要思考我们该如何处理联系人的信息了我们之前举例了一个联系人包含了姓名年龄电话爱好这些信息。那我们最好用一个结构体来从存这些信息嘛所以我们可以在contact.h这个头文件中定义一个存联系人信息的结构体——PeoInfo#includestdio.h
#define MAX 100
#define MAX_NAME 20
#define MAX_LOVE 20
#define MAX_TELE 12
#define MAX_ADDR 30// 打印通讯录的菜单
void menu(void);
// 定义一个用来存储联系人信息的结构体——PeoInfotypedef struct PeoInfo
{char name[MAX_NAME];int age;char love[MAX_LOVE];char tele[MAX_TELE];char addr[MAX_ADDR];
}PeoInfo;
为了让我们的通讯录可以存放100个女朋友的信息所以我们要定义一个结构体类型的数组—— PeoInfo data[100]; 但我们也要知道通讯录中实际上有多少个人吧所以我们可以用一个计数器来记录int sz 0;为了表示方便我们可以将PeoInfo data[100] 和 sz 整合到一起即再定义一个结构体 // 为了方便表示而封装的一个结构体
typedef struct Contact
{PeoInfo data[MAX];// 存放联系人的信息int sz;// 记录通讯录中有效信息的个数
}Contact;通讯录的形式已经大致弄好了我们再来定义Contact类型的变量——con,这个时候就和你创造变量要初始化变量一样我们也要初始化这个Contact类型的变量con;我们可以写一个函数来初始化它函数的实现放在contact.c 这个文件中函数的声明放在contact.h 这里面。起个名字——InitContact// 初始化通讯录
void InitContact(Contact* pc)
{pc-sz 0;memset(pc-data, 0, sizeof(pc-data));//用memset将数组的所有元素初始化为0}接下来是对具体通讯录功能的实现增加女朋友// 增加联系人
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].love);printf(请输入电话);scanf(%d, 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;printf(%-10s %-5s %-5s %-5s %-30s\n, 姓名, 年龄, 性别, 电话, 地址);for (i 0; i pc-sz; i){printf(%-10s %-5d %-5s %-5s %-5s\n, pc-data[i].name, pc-data[i].age, pc-data[i].love, pc-data[i].tele, pc-data[i].addr);}}删除已经分手的女友//为了避免代码冗余我们定义一个找名字的函数
int findname(Contact* pc, char name[])
{int i 0;int pos 0;// 用一个循环来找你想要找的那个名字for (i 0; i pc-sz; i){if (0 strcmp(pc-data[i].name, name)){return i;}}//有可能根本没有你要找的名字所以我们判断一下if (i pc-sz){return -1;}
}// 删除联系人
void DELEcontact(Contact* pc)
{char name[MAX_NAME] {0};if (pc-sz 0){printf(通讯录为空无法删除\n);return;}//找到你要删除人的位置——就是他的下标printf(输入删除人的名字);scanf(%s, name);int pos findname(pc, name);if (-1 pos){printf(要删除的人不存在\n);return;}// 删除 - 删除pos位置上的数据int i 0;for (i pos; i pc-sz - 1; i){pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功了\n);}
查找明天即将约会的女朋友的信息//查找联系人
void sercontact(const Contact* pc)
{char name[MAX_NAME] { 0 };printf(请输入要查找人的名字);scanf(%s, name);//查找int pos findname(pc, name);if (pos -1){printf(要查找的人不存在\n);return;}//打印- - 这次打印的是一个人的信息就不要用循环了printf(%-10s %-5s %-5s %-5s %-30s\n, 姓名, 年龄, 性别, 电话, 地址);printf(%-10s %-5d %-5s %-5s %-5\n, pc-data[pos].name, pc-data[pos].age, pc-data[pos].love, pc-data[pos].tele, pc-data[pos].addr);
}
修改相关女朋友的信息// 修改联系人的信息
void modifycontact(Contact* pc)
{char name[MAX_NAME] { 0 };printf(请输入要修改人的名字);scanf(%s, name);//查找int pos findname(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].love);printf(请输入电话);scanf(%s, pc-data[pos].tele);printf(请输入地址);scanf(%s, pc-data[pos].addr);pc-sz;printf(修改成功\n);
}
将女朋友们排序
//将联系人按名字排序
int cmp_byname(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_byname);
}代码汇总test.c#define _CRT_SECURE_NO_WARNINGS 1#includecontact.hint main()
{int input 0;Contact con;// 通讯录 int sz 0; // 用sz来记录我们通讯录中到底有多少个人// 初始化通讯录InitContact(con); do{menu();printf(请选择);scanf(%d, input);enum Option{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT,};switch(input){case ADD:AddContact(con);break;case DEL:DELEcontact(con);break; case SEARCH:sercontact(con);break;case MODIFY:modifycontact(con);break;case SHOW:SHOWcontact(con);break;case SORT:Sortcontact(con);break;case EXIT:printf(退出通讯录\n);break;default:printf(选择错误\n);break;}} while (input);return 0;
}
contact.c#define _CRT_SECURE_NO_WARNINGS 1#includecontact.h// 打印通讯录的菜单
void menu(void)
{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);
}// 初始化通讯录
void InitContact(Contact* pc)
{pc-sz 0;memset(pc-data, 0, sizeof(pc-data));//用memset将数组的所有元素初始化为0}// 增加联系人
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].love);printf(请输入电话);scanf(%d, 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;// 打印一行标题printf(%-10s %-5s %-5s %-5s %-30s\n, 姓名, 年龄, 爱好, 电话, 地址);// 打印具体信息for (i 0; i pc-sz; i){printf(%-10s %-5d %-5s %-5s %-5s\n, pc-data[i].name, pc-data[i].age, pc-data[i].love, pc-data[i].tele, pc-data[i].addr);}}//为了避免代码冗余我们定义一个找名字的函数
// static 可以保护findname这个函数这样的话findname就只能在这个.c文件中使用
static int findname(Contact* pc, char name[])
{int i 0;int pos 0;// 用一个循环来找你想要找的那个名字for (i 0; i pc-sz; i){if (0 strcmp(pc-data[i].name, name)){return i;}}//有可能根本没有你要找的名字所以我们判断一下if (i pc-sz){return -1;}
}// 删除联系人
void DELEcontact(Contact* pc)
{char name[MAX_NAME] {0};if (pc-sz 0){printf(通讯录为空无法删除\n);return;}//找到你要删除人的位置——就是他的下标printf(输入删除人的名字);scanf(%s, name);int pos findname(pc, name);if (-1 pos){printf(要删除的人不存在\n);return;}// 删除 - 删除pos位置上的数据int i 0;for (i pos; i pc-sz - 1; i){pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功了\n);}//查找指定联系人
void sercontact(const Contact* pc)
{char name[MAX_NAME] { 0 };printf(请输入要查找人的名字);scanf(%s, name);//查找int pos findname(pc, name);if (pos -1){printf(要查找的人不存在\n);return;}//打印- - 这次打印的是一个人的信息就不要用循环了printf(%-10s %-5s %-5s %-5s %-30s\n, 姓名, 年龄, 性别, 电话, 地址);printf(%-10s %-5d %-5s %-5s %-5\n, pc-data[pos].name, pc-data[pos].age, pc-data[pos].love, pc-data[pos].tele, pc-data[pos].addr);
}// 修改联系人的信息
void modifycontact(Contact* pc)
{char name[MAX_NAME] { 0 };printf(请输入要修改人的名字);scanf(%s, name);//查找int pos findname(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].love);printf(请输入电话);scanf(%s, pc-data[pos].tele);printf(请输入地址);scanf(%s, pc-data[pos].addr);pc-sz;printf(修改成功\n);
}//将联系人按名字排序
int cmp_byname(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_byname);
}
contact.h#pragma once#includestdio.h
#includestring.h
#includestdlib.h
#define MAX 100
#define MAX_NAME 20
#define MAX_LOVE 20
#define MAX_TELE 12
#define MAX_ADDR 30// 打印通讯录的菜单
void menu(void);// 定义一个用来存储联系人信息的结构体——PeoInfo
typedef struct PeoInfo
{char name[MAX_NAME];int age;char love[MAX_LOVE];char tele[MAX_TELE];char addr[MAX_ADDR];
}PeoInfo;// 为了方便表示而封装的一个结构体
typedef struct Contact
{PeoInfo data[MAX];// 存放联系人的信息int sz;// 记录通讯录中有效信息的个数
}Contact;// 初始化通讯录
void InitContact(Contact* pc);// 增加联系人
void AddContact(Contact* pc);// 显示通讯录
void SHOWcontact(const Contact* pc);// 删除联系人
void DELEcontact(Contact* pc);//查找联系人
void sercontact(const Contact* pc);// 修改联系人的信息
void modifycontact(Contact* pc);//将联系人按名字排序
void Sortcontact(Contact* pc);