?Hi~ o( ̄▽ ̄)ブ这里是猪猪程序员
? 很高兴见到你O(∩_∩)O! ? 现在正在发芽中…
?欢迎关注?点赞?收藏⭐️留言?
?本文由猪猪原创,CSDN首发!?首发时间:?2021年9月25日?
?️ 博主水平有限,如果发现错误,一定要及时告知作者哦 o( ̄︶ ̄)o!感谢感谢!
?博主的码云 gitee,平常博主写的程序代码都在里面。
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
??实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
??注:这是一个简单的通讯录,实现方案是初级版。
只能在程序运行期间存在(没有写入文件)。
void menu(){ printf("=====================/n"); printf(" 1. 新增联系人/n"); printf(" 2. 删除联系人/n"); printf(" 3. 查找联系人/n"); printf(" 4. 修改联系人/n"); printf(" 5. 查看所有联系人/n"); printf(" 6. 清空所有联系人/n"); printf(" 7. 以名字排序所有联系人/n"); printf(" 0. 退出/n"); printf("=====================/n");}
enum Option{ EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, EMPTY, SORT,};
enum
枚举常量,里面默认对应的值是从0~7,刚好和菜单中的选项匹配起来了
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 EMPTY: EmptyContact(&con); break; case EXIT: printf("退出通讯录/n"); break; default: printf("选择错误/n"); break; } } while (input);
#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 20#define ADDR_MAX 30struct PeoInfo{ char name[NAME_MAX]; int age; char sex[SEX_MAX]; char tele[TELE_MAX]; char addr[ADDR_MAX];};
??注意事项:
define
定义的常量,这样要修改最大值的时候更方便struct
结构体可以存放:姓名、性别、年龄、电话、住址#define MAX 1000struct Contact{ struct PeoInfo date[MAX]; int sz;};
??注意事项:
struct PeoInfo date[MAX]
这个数组可以存放1000
人的信息sz
表示当前通讯录里面的人数struct PeoInfo con;
#include #include"contact.h"void Initcontact(struct Contact* pc){ pc->sz = 0; memset(pc->date, 0, MAX * sizeof(struct PeoInfo));}
??注意事项:
struct
里面都是随机值void AddContact(struct Contact* pc){ struct PeoInfo tmp = { 0 }; if (pc->sz == MAX) { printf("通讯录已满1000人"); } else { printf("请输入名字:>"); scanf("%s", tmp.name); printf("请输入年龄:>"); scanf("%d", tmp.age)); printf("请输入性别:>"); scanf("%s", tmp.sex); printf("请输入电话:>"); scanf("%s", tmp.tele); printf("请输入地址:>"); scanf("%s", tmp.addr); pc->data[pc->sz] = tmp; printf("添加成功!"); pc->sz++; }}
??注意事项:
每次添加选择放在下标为sz
的data
数组里面
??注意事项:
int FindContactByName(struct Contact* pc, char name[]){ int i = 0; for (i = 0; i < pc->sz; i++) { if (strcmp(pc->data[i].name, name) == 0) { return i; } } return -1;}
??注意事项:
strcmp
库函数来比较data
数组中的名字与要查找的名字是否相同void SearchContact(struct Contact* pc){ char name[NAME_MAX] = { 0 }; printf("请输入要查找人的名字:>"); scanf("%s", name); int pos= FindContactByName(pc, name); if (-1 == pos) { printf("查无此人"); } else { printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "姓名", "年龄", "性别", "电话", "地址"); printf("%15s/t%5s/t%8s/t%15s/t%30s/n", pc->data[pos].name, pc->data[pos].age, pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr); }}
void DelContact(struct Contact* pc){ if (pc->sz == 0) { printf("通讯录为空,无法删除/n"); } char name[NAME_MAX] = { 0 }; printf("请输入要删除人的名字"); scanf_s("%s", name); int pos=FindContactByName(pc,name);//按照名字去查找,找到了就返回下标,未找到就返回-1 if (pos == -1) { printf("指定联系人不存在/n"); } else { int j = 0; for (j = pos; j < pc->sz-1; j++) { pc->data[j] = pc->data[j + 1]; } pc->sz--; printf("删除成功!/n"); }}
void ModifyContact(struct Contact* pc){ char name[NAME_MAX] = { 0 }; printf("请输入要修改人的名字:>"); scanf("%s", name); int pos = FindContactByName(pc, name); if (-1 == pos) { printf("要修改的人不存在/n"); } else { printf("请输入新的名字:>"); scanf("%s", pc->data[pos].name);//选择放在下标为sz的data里面 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); }}
void ShowContact(struct Contact* pc){ int i = 0; printf("%15s/t%5s/t%8s/t%15s/t%30s/n/n", "姓名", "年龄", "性别", "电话", "地址");//打印标题 for (i = 0; i < pc->sz; i++) { printf("%15s/t%5s/t%8s/t%15s/t%30s/n", pc->data[i].name, pc->data[i].age, pc->data[i].sex, pc->data[i].tele, pc->data[i].addr); }}
void EmptyContact(struct Contact* pc){ pc->sz = 0; memset(pc->data, 0, MAX * sizeof(struct PeoInfo));}
??注意事项:
memset
不是开辟内存的 是将内存空间中的数据清零的
void SortContact(struct Contact* pc){ qsort(pc->data, pc->sz, sizeof(struct PeoInfo), CmpByname);}
??注意事项:
有关qsort相关的知识,请参考此篇博客
#define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1#include #define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 20#define ADDR_MAX 30#define MAX 100#include #include #include struct PeoInfo{ char name[NAME_MAX]; int age; char sex[SEX_MAX]; char tele[TELE_MAX]; char addr[ADDR_MAX];};struct Contact{ struct PeoInfo data[MAX]; int sz;};//初始化通讯录void InitContact(struct Contact* pc);//清空所有联系人void EmptyContact(struct Contact* pc);//增加联系人void AddContact(struct Contact* pc);//显示所有的联系人void ShowContact(struct Contact* pc);//删除指定联系人void DelContact(struct Contact* pc);//查找指定联系人void SearchContact(const struct Contact* pc);//修改指定联系人void ModifyContact(struct Contact* pc);
#define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1#include #include "contact.h"void menu(){ printf("=====================/n"); printf(" 1. 新增联系人/n"); printf(" 2. 删除联系人/n"); printf(" 3. 查找联系人/n"); printf(" 4. 修改联系人/n"); printf(" 5. 查看所有联系人/n"); printf(" 6. 清空所有联系人/n"); printf(" 7. 以名字排序所有联系人/n"); printf(" 0. 退出/n"); printf("=====================/n"); printf(" 请输入您的选择:");}enum Option{ EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, EMPTY, SORT,};//枚举常量,里面对应的值是从0~6,刚好和菜单匹配起来了int main(){ int input = 0; struct Contact con; InitContact(&con); do { menu(); printf("请选择:>"); scanf_s("%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 EMPTY: EmptyContact(&con); break; case EXIT: printf("退出通讯录/n"); break; default: printf("选择错误/n"); break; } } while (input); return 0;}
#define _CRT_SECURE_NO_WARNINGS 1#include #include "contact.h"void InitContact(struct Contact* pc){ pc->sz = 0; memset(pc->data, 0, MAX * sizeof(struct PeoInfo));}void AddContact(struct Contact* pc){ struct PeoInfo tmp = { 0 }; if (pc->sz == MAX) { printf
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121138.html
摘要:导航前言功能函数结构设定菜单交互主函数通讯录初始化新增联系人查找联系人删除联系人修改联系人查看所有联系人清空所有联系人以名字排序所有联系人结尾语前言本文将实现一个简易的电话簿管理。信息包括名字,性别,电话号码,年龄,住址。 ...
☀️苏州程序大白一文从基础手把手教你Python数据可视化大佬☀️《❤️记得收藏❤️》 目录 ?️?开讲啦!!!!?️?苏州程序大白?️??博主介绍前言数据关系可视化散点图 Scatter plots折线图强调连续性 Emphasizing continuity with line plots同时显示多了图表 数据种类的可视化 Plotting with categorical da...
目录 一、什么是C语言? 二、第一个C语言程序 代码 程序分析 程序运行 一个工程中出现两个及以上的main函数 代码 运行结果 分析 三、数据类型 数据各种类型 为什么会有这么多的数据类型? 计算机单位 各个数据类型的大小 注意事项 数据类型的使用 四、变量和常量 变量的分类 变量的使用 变量的作用域和生命周期 常量 五、字符串+转义字符+注释 字符串 转义字符 注释 六、选择语句 ...
目录 第一章:单片机概述 单片机的应用领域: STC89C52单片机: 单片机命名规则: 单片机内部结构图: 单片机管脚图: 单片机最小系统: 进制表: 新建一个工程: 检查单片机驱动是否安装完成: 打开Keil uVision集成开发环境 选择Atmel下的AT89C52 创建源文件 第二章:LED LED介绍: 点亮LED: 第一章:单片机概述 单片机(Micro Contr...
阅读 2736·2021-10-11 10:57
阅读 1568·2021-09-26 09:55
阅读 1309·2021-09-06 15:11
阅读 3446·2021-08-26 14:16
阅读 661·2019-08-30 15:54
阅读 534·2019-08-30 12:43
阅读 3289·2019-08-29 16:18
阅读 2564·2019-08-23 16:14