当前位置: 首页 > news >正文

网站建设基础功能海口的网站建设公司

网站建设基础功能,海口的网站建设公司,虾子酱 wordpress,在线网页制作软件今天我们分享一下静态通讯录详细解释和代码#xff0c;之前分享过的只是通讯录的代码#xff0c;但是我们没有进行讲解和解释#xff0c;今天我们一边分享它的代码一边解释原因#xff0c;让大家可以手撕通讯录。现在开始我们的学习吧。 首先我们应该要有三个文件#xf… 今天我们分享一下静态通讯录详细解释和代码之前分享过的只是通讯录的代码但是我们没有进行讲解和解释今天我们一边分享它的代码一边解释原因让大家可以手撕通讯录。现在开始我们的学习吧。 首先我们应该要有三个文件一个是来放我们的代码就是拿来测试的我们叫他为test.c,一个就是我们来声明比如一些函数或者结构体的声明我们就应该放到这个里面还有就是定义我们函数是个怎么样的怎么实现的我们也需要一个源文件来实现。 创建好这三个之后我们需要在我们的test.c里面写上我们的菜单首先我们通讯录是不是一定要具备增删查改的功能其实还有可以查找或者排序的功能那我们先简单的实现一下菜单。 我们简单的菜单就这样制成了接下来我们需要做的就就是用switch函数来实现我们选啥就进入哪一个的操作比如我们要进入add增加用户那哦我们输入1就行了 Test.c #includeContact.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); } int main() {int input 0;do{menu();printf(请输入你要进行的操作);scanf(%d, input);switch (input){case 1:break;case 2:break;case 3:break;case 4:break;case 5:break;case 6:break;case 0:printf(退出通讯录\n);break;default:printf(输入错误请重新选择\n);break;}} while (input);return 0; }这样看其实我们的代码的可读性并不是很高所以我们需要进行修改大家可以看看我的上一篇文章写的就是有一个枚举的例子这里我们如果用的是枚举的话看起来代码的可读性就高很多了那我们改一下代码 #includeContact.henum Option {EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT }; 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); } int main() {int input 0;do{menu();printf(请输入你要进行的操作);scanf(%d, input);switch (input){case ADD:break;case DEL:break;case SEARCH:break;case MODIFY:break;case SHOW:break;case SORT:break;case EXIT:printf(退出通讯录\n);break;default:printf(输入错误请重新选择\n);break;}} while (input);return 0; }我们这样看的话是不是可读性就稍微高一点了。 完成上面的代码我们来思考一下我们的通讯录需要存什么东西我们是不是拿来存人的所以我们需要这个人的名字年龄性别电话号码还有这个人的地址那我们现在需要做的就是定义一个结构体结构体我们需要的是把他放入到Contact.h中 typedef struct PeoInf {char name[20];int age;char sex[5];char tel[12];char addr[20]; }PeoInf; 有了这个结构体我们还需要一个东西来统计它的个数比如通讯录里面有几个人这应该是一个局部变量所以这里我们要做的就是在写一个结构体来实现 typedef struct PeoInf {char name[20];int age;char sex[5];char tel[12];char addr[20]; }PeoInf;struct Contact {PeoInf data[100];int sz; };上面的代码固然是好但是我们还是存在一定的缺陷缺陷是什么呢我们结构体的数组好像是定死的本来静态的通讯录就缺少一点动态我们还把它定死那比如我们像存101个人这样不就是改改很麻烦所以我们可以这样写 #define N 100 #define NMAE_MAX 20 #define SEX_MAX 5 #define TEL_MAX 12 #define ADDR_MAX 20typedef struct PeoInf {char name[NMAE_MAX];int age;char sex[SEX_MAX];char tel[TEL_MAX];char addr[ADDR_MAX]; }PeoInf;typedef struct Contact {PeoInf data[N];int sz; }Contact; 这样就好很对那我们现在来初始化一下我们的Conact吧 我们看到这里也是成功的将我们的数据初始化那来看看我们的代码吧 void InitContact(Contact* pc) {assert(pc);memset(pc-data, 0, sizeof(pc-data));pc-sz 0; }代码也是很简短但是我们这里必须得传我们的指针过来否则就不行了我们要做的是改变结构体中内容所以就得传他们的地址过来才行那我们继续来实现下一个吧下一个我们实现一下ADD吧 void AddContact(Contact* ps) {assert(ps);assert(ps-sz N);//断言如果通讯录满了就不能加了printf(请输入名字\n);scanf(%s, ps-data[ps-sz].name);printf(请输入年龄\n);scanf(%d, ps-data[ps-sz].age);printf(请输入性别\n);scanf(%s, ps-data[ps-sz].sex);printf(请输入电话\n);scanf(%s, ps-data[ps-sz].tel);printf(请输入地址\n);scanf(%s, ps-data[ps-sz].addr);ps-sz;printf(增加成功\n); }上面就是我们进行增加通讯录的代码写完这个我们在加一个printf数据的代码也就是显示show void ShowContact(Contact* ps) {assert(ps);int i 0;printf(%-20s%-5s%-5s%-12s%-12s\n, 姓名, 年龄, 性别, 电话, 地址);for (i 0; i ps-sz; i){printf(%-20s%-5d%-5s%-12s%-12s\n,ps-data[i].name, ps-data[i].age, ps-data[i].sex, ps-data[i].tel, ps-data[i].addr);} }为了让我们的打印显示起来好看一点我们这里加了对齐看起来就比较整齐小编的代码是右对齐大家也可以进行左对齐的形式上面的两个代码其实也没有什么要需要注意的考察的就是对结构体的了解和怎么使用。我们下面来看我们后面的接口函数吧 下一个接口函数就是我们的删除删除可不是随机删除人比如我们先要找到这个人的名字然后进行删除在删除之前是不是还要看一下通讯录里面还有没有人如果没有人的话我们就不能进行删除了所以这里我们进行强制断言一下 int FindByName(Contact* ps, char name[]) {assert(ps);int i 0;for (i 0; i ps-sz; i){if (strcmp(ps-data[i].name, name) 0)return i;}return -1; } void DelContact(Contact* ps) {assert(ps);assert(ps-sz 0);char name[NMAE_MAX];printf(请输入要删除的人的名字);scanf(%s, name);int ret FindByName(ps, name);if (ret -1){printf(通讯录没有这个人\n);return ;}int i 0;for (i ret; i ps-sz - 1; i){ps-data[i] ps-data[i 1];}ps-sz--; }上面的FIndByName是我们自己写的一个函数只能在这个文件中使用所以我们也可以用static修饰一下就变成这样了 static int FindByName(Contact* ps, char name[]) {assert(ps);int i 0;for (i 0; i ps-sz; i){if (strcmp(ps-data[i].name, name) 0)return i;}return -1; } void DelContact(Contact* ps) {assert(ps);assert(ps-sz 0);char name[NMAE_MAX];printf(请输入要删除的人的名字);scanf(%s, name);int ret FindByName(ps, name);if (ret -1){printf(通讯录没有这个人\n);return ;}int i 0;for (i ret; i ps-sz - 1; i){ps-data[i] ps-data[i 1];}ps-sz--; }这里调试个人感觉特别麻烦因为我们每次调试一个接口函数的时候都要重新输入这是为什么呢因为我们的数据是存储在内存中的程序运行结束的时候我们的数据是无法进行保存的只要存储在数据库或者文件中数据才能进行保存那现在我们来看一下下个接口函数的实现吧 下面一个接口函数就是查找了查找很简单我们就不过多解释直接来看代码吧 void SearchContact(Contact* ps) {assert(ps);char name[NMAE_MAX];printf(要查找人的名字);scanf(%s, name);int ret FindByName(ps, name);if (ret -1){printf(找不到这个人);return;}printf(%-20s%-5d%-5s%-12s%-12s\n,ps-data[ret].name, ps-data[ret].age, ps-data[ret].sex, ps-data[ret].tel, ps-data[ret].addr);}下面我们增删查改还有一个改的环节改的话我们首先是不是要找到这个人然后对它进行修改就行了。 void ModifyContact(Contact* ps) {assert(ps);char name[NMAE_MAX];printf(要查找人的名字);scanf(%s, name);int ret FindByName(ps, name);if (ret -1){printf(找不到这个人);return;}printf(请输入名字\n);scanf(%s, ps-data[ret].name);printf(请输入年龄\n);scanf(%d, ps-data[ret].age);printf(请输入性别\n);scanf(%s, ps-data[ret].sex);printf(请输入电话\n);scanf(%s, ps-data[ret].tel);printf(请输入地址\n);scanf(%s, ps-data[ret].addr);printf(修改成功\n);} 最后还剩下一个排序这里我们就假设是按年龄来进行排序的吧排序大家还记不记得我们有一个库函数之前我们用冒泡函数来模拟实现并且我们也掌握它的用法那这里我们就直接用库函数qsort来实现吧 int CmpByAge(const void* p1, const void* p2) {return *(int*)p1 - *(int*)p2; } void SortContact(Contact* ps) {assert(ps);qsort(ps-data, N, sizeof(ps-data[0]), CmpByAge); }这样就可以了 那来看一下我们的完整代码吧 Contact.h #pragma once#includestdio.h #includeassert.h #includestdlib.h #includestring.h#define N 100 #define NMAE_MAX 20 #define SEX_MAX 5 #define TEL_MAX 12 #define ADDR_MAX 20typedef struct PeoInf {char name[NMAE_MAX];int age;char sex[SEX_MAX];char tel[TEL_MAX];char addr[ADDR_MAX]; }PeoInf;typedef struct Contact {PeoInf data[N];int sz; }Contact;//初始化 void InitContact(Contact* pc);void AddContact(Contact* ps);void ShowContact(Contact* ps);void DelContact(Contact* ps);void SearchContact(Contact* ps);void ModifyContact(Contact* ps);void SortContact(Contact* ps);Contact.c #define _CRT_SECURE_NO_WARNINGS 1#includeContact.hvoid InitContact(Contact* pc) {assert(pc);memset(pc-data, 0, sizeof(pc-data));pc-sz 0; }void AddContact(Contact* ps) {assert(ps);assert(ps-sz N);//断言如果通讯录满了就不能加了printf(请输入名字\n);scanf(%s, ps-data[ps-sz].name);printf(请输入年龄\n);scanf(%d, ps-data[ps-sz].age);printf(请输入性别\n);scanf(%s, ps-data[ps-sz].sex);printf(请输入电话\n);scanf(%s, ps-data[ps-sz].tel);printf(请输入地址\n);scanf(%s, ps-data[ps-sz].addr);ps-sz;printf(增加成功\n); }void ShowContact(Contact* ps) {assert(ps);int i 0;printf(%-20s%-5s%-5s%-12s%-12s\n, 姓名, 年龄, 性别, 电话, 地址);for (i 0; i ps-sz; i){printf(%-20s%-5d%-5s%-12s%-12s\n,ps-data[i].name, ps-data[i].age, ps-data[i].sex, ps-data[i].tel, ps-data[i].addr);} } int FindByName(Contact* ps, char name[]) {assert(ps);int i 0;for (i 0; i ps-sz; i){if (strcmp(ps-data[i].name, name) 0)return i;}return -1; } void DelContact(Contact* ps) {assert(ps);assert(ps-sz 0);char name[NMAE_MAX];printf(请输入要删除的人的名字);scanf(%s, name);int ret FindByName(ps, name);if (ret -1){printf(通讯录没有这个人\n);return;}int i 0;for (i ret; i ps-sz - 1; i){ps-data[i] ps-data[i 1];}ps-sz--; }void SearchContact(Contact* ps) {assert(ps);char name[NMAE_MAX];printf(要查找人的名字);scanf(%s, name);int ret FindByName(ps, name);if (ret -1){printf(找不到这个人);return;}printf(%-20s%-5d%-5s%-12s%-12s\n,ps-data[ret].name, ps-data[ret].age, ps-data[ret].sex, ps-data[ret].tel, ps-data[ret].addr);}void ModifyContact(Contact* ps) {assert(ps);char name[NMAE_MAX];printf(要查找人的名字);scanf(%s, name);int ret FindByName(ps, name);if (ret -1){printf(找不到这个人);return;}printf(请输入名字\n);scanf(%s, ps-data[ret].name);printf(请输入年龄\n);scanf(%d, ps-data[ret].age);printf(请输入性别\n);scanf(%s, ps-data[ret].sex);printf(请输入电话\n);scanf(%s, ps-data[ret].tel);printf(请输入地址\n);scanf(%s, ps-data[ret].addr);printf(修改成功\n);}int CmpByAge(const void* p1, const void* p2) {return *(int*)p1 - *(int*)p2; } void SortContact(Contact* ps) {assert(ps);qsort(ps-data, N, sizeof(ps-data[0]), CmpByAge); }接下来就是我们的测试代码 test.c #define _CRT_SECURE_NO_WARNINGS 1#includeContact.henum Option {EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT }; 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); } int main() {int input 0;Contact p;InitContact(p);do{menu();printf(请输入你要进行的操作);scanf(%d, input);switch (input){case ADD:AddContact(p);break;case DEL:DelContact(p);break;case SEARCH:SearchContact(p);break;case MODIFY:ModifyContact(p);break;case SHOW:ShowContact(p);break;case SORT:SortContact(p);break;case EXIT:printf(退出通讯录\n);break;default:printf(输入错误请重新选择\n);break;}} while (input);return 0; }这就是我们今天的分享我们第一次是只分享了代码这次我们就把整个过程以讲解的方式讲解出来谢谢大家我们下次再见
http://www.sadfv.cn/news/365129/

相关文章:

  • 徐州网站建设工作室网页站点不安全
  • 宣传旅游网站建设wordpress php.ini在
  • 南海网站建设哪家好淘宝电商运营基础知识
  • 旅游网站系统有没有专门做团购的网站
  • 响应式网站 英文游戏网站上做银商为网站人员
  • 百度权重9的网站企业网站做seo的优势
  • 网站后台怎样批量上传北京市装修公司前10名
  • 做网站需要什么代码进行企业网站建设规划
  • 沈阳网站设计推广天津公司网站建设
  • 太原网站制作定制开发大连工业大学本科招生信息网
  • 深圳网站建设及推广如何让网站自适应
  • 局网站建设申请wordpress建站 防攻击
  • 宁波品牌网站推广优化wordpress调用侧边栏
  • 做中介卖房子开哪个网站都匀住房和城乡建设局网站
  • 鄂州网站制作哪家好网站全屏大图代码
  • 建站空间怎么选就要使用网页制作工具
  • 建设宠物网站的可行性企业网站建设费用入哪个科目
  • 网站维护中 html网易企业邮箱 登录
  • php做简单网站 多久建网站赚钱 知乎
  • 黄页网站怎么做 获取企业信息岑溪网站开发
  • 做网站大优惠保险平台
  • 网站群软件温州网趣电子商务有限公司
  • 网站建设与推广王钊算命网站该怎样做
  • 怎样做关键词网站连接如何做网站的教程视频
  • 制作网站主题seo技术培训唐山
  • 王店镇建设中学网站营销网站建设软件下载
  • 网站建设需要什么基础装修平台加盟
  • 内蒙古网站建设价格wordpress视屏
  • 网站建设课设报告一流的网站建设
  • 网站怎么创建网站规划包括哪些方面