手机wap网站模板 带后台,河北省任免,做网站无需备案,wordpress多个页面前言#xff1a;生活中处处都会看到或是用到通讯录#xff0c;今天我们就通过C语言来简单的模拟实现一下通讯录。 鸡汤#xff1a;跨越山海#xff0c;终见曙光#xff01; 链接:gitee仓库#xff1a;代码链接 目录 主函数声明部分初始化通讯录实现扩容的函数增加通讯录所…前言生活中处处都会看到或是用到通讯录今天我们就通过C语言来简单的模拟实现一下通讯录。 鸡汤跨越山海终见曙光 链接:gitee仓库代码链接 目录 主函数声明部分初始化通讯录实现扩容的函数增加通讯录所需要人显示通讯录选择删除的人查找需要找的人修改通讯录 通讯录的实现 当然了在模拟实现一个通讯录前我们依然需要一个大致的框架。
可以保存至少100人的信息增加人的信息删除指定人的信息查找指定人的信息修改指定联系人的信息排序通讯录的信息这个等作者以后时间充足了再来实现显示所有联系人的信息 当然了既然是实现一个通讯录这样的功能我们把在写这个功能的时候把它分成三个模块 主函数
话不多说看代码 实现一个功能当然还是从主函数开始写这个主函数的大体思路我们在之前的三子棋功能中也实现过想要看的可以点这个链接:[三子棋] (https://blog.csdn.net/m0_64826370/article/details/132393038?spm1001.2014.3001.5501/)
创建一个通讯录我们需要创建联系人的信息,我们可以选择用结构体来存放
//类型的声明
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;//存放数据int sz;//记录当前通讯录中存在的人的信息个数int capacity;//记录的是通讯录的当前容量
}Contact;主函数部分
#define _CRT_SECURE_NO_WARNINGS 1
#include stdio.h
#include contact.h
//通讯录的基本功能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);
}
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://排序//qsortbreak;case EXIT://退出DestroyContact(con);//销毁空间printf(退出\n);break;default:printf(输入错误请重新输入\n);break;}} while (input);return 0;
}声明部分
#pragma once
#include assert.h
#include stdio.h
#include stdlib.h
#include string.h
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 30
#define MAX 100
#define DEFAULT_SZ 3
#define DEFAULT_INC 2//类型的声明
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;//存放数据int sz;//记录当前通讯录中存在的人的信息个数int capacity;//记录的是通讯录的当前容量
}Contact;//初始化通讯录
void InitContact(Contact* pc);//增加联系人
void AddContact(Contact* pc);void DestroyContact(Contact* pc);
//显示所有联系人
void ShowContact(Contact* pc);//删除指定联系人
void DelContact(Contact* pc);//查找指定联系人
void SearchContact(Contact* pc);//修改指定联系人
void ModifyContact(Contact* pc);//销毁通讯录
void DestroyContact(Contact* pc);初始化通讯录
void InitContact(Contact* pc)
{assert(pc);pc-sz 0;pc-capacity DEFAULT_SZ;pc-data calloc(pc-capacity, sizeof(PeoInfo));//开辟一个能存放当前容量的空间if (pc-data NULL)//判断开辟是否成功{perror(calloc);return;}memset(pc-data, 0, sizeof(pc-data));//将开辟的空间全部初始化为0
}
实现扩容的函数
void CheckCapacity(Contact* pc)//给通讯录增容
{if (pc-sz pc-capacity)//判断是否是需要增容{PeoInfo* ptr (PeoInfo*)realloc(pc-data, (pc-capacity DEFAULT_INC) * sizeof(PeoInfo));//扩容if (ptr ! NULL)//判断是否增容成功{pc-data ptr;pc-capacity DEFAULT_INC;printf(增容成功\n);}else{perror(AddContact-realloc);return;}}
}增加通讯录所需要人
void AddContact(Contact* pc)//增容
{assert(pc);CheckCapacity(pc);//增加信息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(Contact* pc)//显示通讯录
{assert(pc);if (pc-sz 0){printf(通讯录为空无需打印\n);return;}int i 0;//名字 年龄 性别 电话 地址printf(%-20s%-5s%-5s%-12s%-30s\n, 名字, 年龄, 性别, 电话, 地址);for (i 0; i pc-sz; i){//打印每个人信息printf(%-20s%-5d%-5s%-12s%-30s\n,pc-data[i].name, pc-data[i].age, pc-data[i].sex, pc-data[i].tele, pc-data[i].addr);}
}选择删除的人
void DelContact(Contact* pc)//删除所需要删除的人
{char name[NAME_MAX];assert(pc);if (pc-sz 0){printf(通讯录为空无法删除\n);return;}//找到联系人printf(输入删除人的名字);scanf(%s, name);//找到名字为name的人int ret FindByName(pc, name);//找到这个人所在的位置if (ret -1){printf(要删除得到人不存在\n);return;}//删除这个人int i 0;for (i ret; i pc-sz - 1; i)//删除这个人并让后面的数往前走{pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功\n);
}查找需要找的人
void SearchContact(Contact* pc)//查找人
{assert(pc);char name[NAME_MAX];printf(输入查找人的名字);scanf(%s, name);//找到名字为name的人int ret FindByName(pc, name);if (ret -1){printf(要查找的人不存在\n);return;}//显示出来printf(%-20s%-5s%-5s%-12s%-30s\n, 名字, 年龄, 性别, 电话, 地址);printf(%-20s%-5d%-5s%-12s%-30s\n,pc-data[ret].name, pc-data[ret].age, pc-data[ret].sex, pc-data[ret].tele, pc-data[ret].addr);
}修改通讯录
void ModifyContact(Contact* pc)//修改通讯录
{assert(pc);char name[NAME_MAX];printf(输入要修改人的名字);scanf(%s, name);//找到名字为name的人int ret FindByName(pc, name);if (ret -1){printf(要修改的人不存在\n);return;}//修改printf(请输入名字);scanf(%s, pc-data[ret].name);printf(请输入年龄);scanf(%d, pc-data[ret].age);printf(请输入性别);scanf(%s, pc-data[ret].sex);printf(请输入电话);scanf(%s, pc-data[ret].tele);printf(请输入地址);scanf(%s, pc-data[ret].addr);
}通讯录的实现
#define _CRT_SECURE_NO_WARNINGS
#include contact.h//动态
void InitContact(Contact* pc)
{assert(pc);pc-sz 0;pc-capacity DEFAULT_SZ;pc-data calloc(pc-capacity, sizeof(PeoInfo));//开辟一个能存放当前容量的空间if (pc-data NULL)//判断开辟是否成功{perror(calloc);return;}memset(pc-data, 0, sizeof(pc-data));//将开辟的空间全部初始化为0
}void CheckCapacity(Contact* pc)//给通讯录增容
{if (pc-sz pc-capacity)//判断是否是需要增容{PeoInfo* ptr (PeoInfo*)realloc(pc-data, (pc-capacity DEFAULT_INC) * sizeof(PeoInfo));//扩容if (ptr ! NULL)//判断是否增容成功{pc-data ptr;pc-capacity DEFAULT_INC;printf(增容成功\n);}else{perror(AddContact-realloc);return;}}
}
void DestroyContact(Contact* pc)//删除通讯录
{free(pc-data);//释放所开辟的空间pc-data NULL;pc-capacity 0;pc-sz 0;
}
void AddContact(Contact* pc)//增容
{assert(pc);CheckCapacity(pc);//增加信息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(Contact* pc)//显示通讯录
{assert(pc);if (pc-sz 0){printf(通讯录为空无需打印\n);return;}int i 0;//名字 年龄 性别 电话 地址printf(%-20s%-5s%-5s%-12s%-30s\n, 名字, 年龄, 性别, 电话, 地址);for (i 0; i pc-sz; i){//打印每个人信息printf(%-20s%-5d%-5s%-12s%-30s\n,pc-data[i].name, pc-data[i].age, pc-data[i].sex, pc-data[i].tele, pc-data[i].addr);}
}int FindByName(Contact* pc, char name[])//查找人判断这个人的位置与是否存在
{assert(pc);int i 0;for (i 0; i pc-sz; i){if (strcmp(pc-data[i].name, name) 0){return i;}}return -1;//找不到
}
void DelContact(Contact* pc)//删除所需要删除的人
{char name[NAME_MAX];assert(pc);if (pc-sz 0){printf(通讯录为空无法删除\n);return;}//找到联系人printf(输入删除人的名字);scanf(%s, name);//找到名字为name的人int ret FindByName(pc, name);//找到这个人所在的位置if (ret -1){printf(要删除得到人不存在\n);return;}//删除这个人int i 0;for (i ret; i pc-sz - 1; i)//删除这个人并让后面的数往前走{pc-data[i] pc-data[i 1];}pc-sz--;printf(删除成功\n);
}void SearchContact(Contact* pc)//查找人
{assert(pc);char name[NAME_MAX];printf(输入查找人的名字);scanf(%s, name);//找到名字为name的人int ret FindByName(pc, name);if (ret -1){printf(要查找的人不存在\n);return;}//显示出来printf(%-20s%-5s%-5s%-12s%-30s\n, 名字, 年龄, 性别, 电话, 地址);printf(%-20s%-5d%-5s%-12s%-30s\n,pc-data[ret].name, pc-data[ret].age, pc-data[ret].sex, pc-data[ret].tele, pc-data[ret].addr);
}void ModifyContact(Contact* pc)//修改通讯录
{assert(pc);char name[NAME_MAX];printf(输入要修改人的名字);scanf(%s, name);//找到名字为name的人int ret FindByName(pc, name);if (ret -1){printf(要修改的人不存在\n);return;}//修改printf(请输入名字);scanf(%s, pc-data[ret].name);printf(请输入年龄);scanf(%d, pc-data[ret].age);printf(请输入性别);scanf(%s, pc-data[ret].sex);printf(请输入电话);scanf(%s, pc-data[ret].tele);printf(请输入地址);scanf(%s, pc-data[ret].addr);
}好了今天的内容博主就讲到这里了如果有讲的不好的地方欢迎各位到评论区留言如果觉得博主讲的不错就送上一个三连吧~谢谢各位