陕西高端品牌网站建设,自动搜索关键词软件,找资源的关键词有哪些,电子网站游戏网址试玩前言 #x1f4d5;作者简介#xff1a;热爱跑步的恒川#xff0c;正在学习C/C、Java、Python等。 #x1f4d7;本文收录于C语言进阶系列#xff0c;本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数的介绍、自定义类型结构、动态内存管理、文件操作等#xff0… 前言 作者简介热爱跑步的恒川正在学习C/C、Java、Python等。 本文收录于C语言进阶系列本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数的介绍、自定义类型结构、动态内存管理、文件操作等持续更新 相关专栏PythonJava等正在发展拭目以待 本期内容恒川将会给大家带来实现通讯录的讲解与上期所学的结构体内容相结合我将会用C语言来实现通讯录的系统并且能存放百人甚至千人的信息每个人的信息包括姓名、性别、年龄、电话、地址并包含增加联系人、删除指定联系人、查找指定联系人、修改指定联系人、显示联系人信息、排序联系人等功能 通讯录和恒川之前写的三子棋和扫雷一样都是多文件的形式大家可以参考恒川之前C语言初阶系列的专栏 静态版本通讯录1. 配置运行环境2. 通讯录的实现2.1 通讯录的功能目录2.2 增加信息功能代码的实现2.3 显示信息功能代码的实现2.3 删除信息功能代码的实现2.4 查询信息功能代码的实现2.5 修改信息功能代码的实现2.6 按名字排序信息功能代码的实现3. 完整静态版本通讯录的全部源码3.1 contact.c3.2 contact.h3.3 test.c4. 静态版本通讯录的缺点1. 配置运行环境 本通讯录运用到了三个文件 test.c //测试通讯录的相关功能 contact.h //声明 contact.c //通讯录的实现模块 2. 通讯录的实现 想要做通讯录首要任务就是要把模块想好。 先打印一个通讯录的界面菜单 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);
}2.1 通讯录的功能目录
通讯录的功能有7种
增加联系人删除指定联系人查找联系人修改联系人的信息对联系人的排序显示联系人的信息退出通讯录
创建人的信息的结构体类型 第一步是封装一个人的信息的结构体类型 由于封装的结构体类型的名字太长总是写的话感觉太麻烦了 对 struct PeoInfo进行了typdef类型重命名 struct PeoInfp 改成 PeoInfp
//表示一个人的信息
typedef struct PeoInfo
{char name[20];int age;char sex[5];char tele[12];char addr[30];
}PeoInfo;以上的数值如果以后会经常用到的话可以用#define 来定义方便以后修改
#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 302.2 增加信息功能代码的实现
//增加通讯录信息
void AddContact(Contact* pc)
{if (DATA_MAX pc-sz){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);printf(信息添加成功\n);pc-sz;
}2.3 显示信息功能代码的实现
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);}
}2.3 删除信息功能代码的实现
void DelContact(pContact 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; ipc-sz-1; i){pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功\n);
}2.4 查询信息功能代码的实现
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);
}2.5 修改信息功能代码的实现
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);
}2.6 按名字排序信息功能代码的实现
//按照名字来排序
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);
}3. 完整静态版本通讯录的全部源码
3.1 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;//姓名 年龄 性别 电话 地址//hengchuan 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(pContact 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);
}3.2 contact.h
#pragma once#include stdio.h
#include string.h
#include stdlib.h
#include errno.h#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30//表示一个人的信息
typedef struct PeoInfo
{char name[MAX_NAME];int age;char sex[MAX_SEX];char tele[MAX_TELE];char addr[MAX_ADDR];
}PeoInfo;//静态版本的设计
typedef struct Contact
{PeoInfo data[MAX];//存放数据int sz;//记录通讯录中的有效信息个数
}Contact, *pContact;//初始化通讯录
void InitContact(Contact* pc);//增加指定联系人
void AddContact(Contact* pc);//显示联系人信息
void ShowContact(const Contact* pc);//删除指定联系人
//void DelContact(Contact* pc);
void DelContact(pContact pc);//查找指定联系人
void SearchContact(const Contact* pc);//修改通讯录
void ModifyContact(Contact* pc);//排序通讯录元素
void SortContact(Contact* pc);
3.3 test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include contact.hvoid 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()
{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 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;
}4. 静态版本通讯录的缺点
缺点
通讯录的大小是固定的 - 100个元素当通讯录退出后重新运行之前的信息都丢了 当前通讯录中的信息都是保存在内存中的程序退出内存就回收了下一次重新运行程序内存重新分配之前的数据就不见了 所以恒川之后会给大家带来动态通讯录的版本请大家拭目以待吧 如果这份博客对大家有帮助希望各位给恒川一个免费的点赞作为鼓励并评论收藏一下谢谢大家 制作不易如果大家有什么疑问或给恒川的意见欢迎评论区留言。
文章转载自: http://www.morning.gwsll.cn.gov.cn.gwsll.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn http://www.morning.qmsbr.cn.gov.cn.qmsbr.cn http://www.morning.jzdfc.cn.gov.cn.jzdfc.cn http://www.morning.rqnzh.cn.gov.cn.rqnzh.cn http://www.morning.bpwfr.cn.gov.cn.bpwfr.cn http://www.morning.kqzrt.cn.gov.cn.kqzrt.cn http://www.morning.geledi.com.gov.cn.geledi.com http://www.morning.nngq.cn.gov.cn.nngq.cn http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn http://www.morning.rgfx.cn.gov.cn.rgfx.cn http://www.morning.jlgjn.cn.gov.cn.jlgjn.cn http://www.morning.drnjn.cn.gov.cn.drnjn.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.qztsq.cn.gov.cn.qztsq.cn http://www.morning.wnkqt.cn.gov.cn.wnkqt.cn http://www.morning.qrndh.cn.gov.cn.qrndh.cn http://www.morning.nbnpb.cn.gov.cn.nbnpb.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.pqkrh.cn.gov.cn.pqkrh.cn http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.xcjbk.cn.gov.cn.xcjbk.cn http://www.morning.wskn.cn.gov.cn.wskn.cn http://www.morning.nxpqw.cn.gov.cn.nxpqw.cn http://www.morning.bkcnq.cn.gov.cn.bkcnq.cn http://www.morning.btrfm.cn.gov.cn.btrfm.cn http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn http://www.morning.ndfwh.cn.gov.cn.ndfwh.cn http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn http://www.morning.lzqdl.cn.gov.cn.lzqdl.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.prprj.cn.gov.cn.prprj.cn http://www.morning.wqbhx.cn.gov.cn.wqbhx.cn http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn http://www.morning.dpsgq.cn.gov.cn.dpsgq.cn http://www.morning.mhfbp.cn.gov.cn.mhfbp.cn http://www.morning.zkdbx.cn.gov.cn.zkdbx.cn http://www.morning.tpssx.cn.gov.cn.tpssx.cn http://www.morning.wdjcr.cn.gov.cn.wdjcr.cn http://www.morning.qjbxt.cn.gov.cn.qjbxt.cn http://www.morning.plxnn.cn.gov.cn.plxnn.cn http://www.morning.slnz.cn.gov.cn.slnz.cn http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn http://www.morning.jlschmy.com.gov.cn.jlschmy.com http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.zdmrf.cn.gov.cn.zdmrf.cn http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn http://www.morning.xbdrc.cn.gov.cn.xbdrc.cn http://www.morning.zntf.cn.gov.cn.zntf.cn http://www.morning.zwppm.cn.gov.cn.zwppm.cn http://www.morning.fcxt.cn.gov.cn.fcxt.cn http://www.morning.wjmb.cn.gov.cn.wjmb.cn http://www.morning.flqkp.cn.gov.cn.flqkp.cn http://www.morning.txmlg.cn.gov.cn.txmlg.cn http://www.morning.wpjst.cn.gov.cn.wpjst.cn http://www.morning.wklyk.cn.gov.cn.wklyk.cn http://www.morning.xrrbj.cn.gov.cn.xrrbj.cn http://www.morning.bsrp.cn.gov.cn.bsrp.cn http://www.morning.hgtr.cn.gov.cn.hgtr.cn http://www.morning.mlpch.cn.gov.cn.mlpch.cn http://www.morning.txrkq.cn.gov.cn.txrkq.cn http://www.morning.bfysg.cn.gov.cn.bfysg.cn http://www.morning.swdnr.cn.gov.cn.swdnr.cn http://www.morning.ktcrr.cn.gov.cn.ktcrr.cn http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn http://www.morning.qlhwy.cn.gov.cn.qlhwy.cn http://www.morning.rwmqp.cn.gov.cn.rwmqp.cn http://www.morning.qhmgq.cn.gov.cn.qhmgq.cn http://www.morning.htpjl.cn.gov.cn.htpjl.cn http://www.morning.kfwrq.cn.gov.cn.kfwrq.cn http://www.morning.jczjf.cn.gov.cn.jczjf.cn http://www.morning.ktskc.cn.gov.cn.ktskc.cn http://www.morning.qczpf.cn.gov.cn.qczpf.cn http://www.morning.jngdh.cn.gov.cn.jngdh.cn http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.czgfn.cn.gov.cn.czgfn.cn http://www.morning.mnjwj.cn.gov.cn.mnjwj.cn http://www.morning.wmhqd.cn.gov.cn.wmhqd.cn