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

网站外部外链建设厦门人才网597人才网

网站外部外链建设,厦门人才网597人才网,做视频后期的网站,网络推广的方法和途径1.实现怎样一个通讯录 实现一个通讯录联系人信息:1.可以保存100个人的信息名字2.添加联系人年龄3.删除指定联系人性别4.查找指定联系人电话5.修改指定联系人住址6.排序联系人7.显示所有联系人信息 2.通讯录的实现 2.1创建两个源文件和一个头文件 首先我们创建con…

  1.实现怎样一个通讯录

实现一个通讯录联系人信息:
1.可以保存100个人的信息名字
2.添加联系人年龄
3.删除指定联系人性别
4.查找指定联系人电话
5.修改指定联系人住址
6.排序联系人
7.显示所有联系人信息

 2.通讯录的实现

2.1创建两个源文件和一个头文件

首先我们创建contact.c和test.c,contact.h,在头文件中包含了程序所需的各种头文件并且实现对各种函数的声明,而源文件test.c用于引用函数,contact.c实现函数。这样做的目的是为了各个文件可以处理各自模块的功能,增强逻辑性和代码的清晰度,使得可读性更高。

 2.2搭建构架

1.菜单打印

首先在test.c这个源文件里面把菜单打印出来,直接使用printf函数打印出通讯录的功能即可。

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.使用do while

这里相比较之前写的游戏代码进行了改进,因为数字的具体含义不知道,所以使用了枚举常量代替,而枚举常量会进行默认赋值,所以从0开始一一对应就行了,增加了代码的可读性

enum Option
{EXIT,//0ADD,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:break;case SEARCH:break;case MODIFY:break;case SHOW:ShowContact(&con);break;case SORT:break;case EXIT:printf("退出通讯录\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);return 0;
}

3.使用结构体保存联系人的信息

接下来在contact.h里面创建结构体来包含人的信息,如果觉得在使用结构体时每次都要写成struct PeoInfom比较复杂,可以在struct前面加上typedef,这样的话使用这个结构体写PeoInfom就行。如果我们在数组里面写上数字的话,就是常量,以后如果发生变化,修改起来不够方便,可以使用#define定义常量。

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<assert.h>
#include<string.h>
#define MAME_MAX 40
#define SEX_MAX 10
#define TELE_MAX 12
#define ADDR_MAX 30
#define MAX 100
//类型的声明
typedef struct  PeoInfom
{char name[MAME_MAX];int age;char sex[SEX_MAX];char tele[TELE_MAX];char addr[ADDR_MAX];
}PeoInfom;

4.将通讯录初始化

在contact.h里面创建一个结构体,sz记录的是当前通讯录中存放的人的信息个数,PeoInfom data是用来存放数据。

typedef struct Contact
{PeoInfom data[MAX];//存放数据int sz;//记录的是当前通讯录中存放的人的信息个数
}Contact;

在test.c的主函数里面创建通讯录contact con,这个通讯录里面有一个存放数据的数组,还有个联系人数量,现在这个通讯录没有数据。

Contact con;

结果调试以后发现data和sz都是随机数,所以先对通讯录初始化。结构体传参的时候尽量传址,传值的话如果结构体过大会导致性能下降,在test.c中进行传址。

InitContact(&con);//初始化通讯录

在contact.h中声明函数:

void InitContact(Contact* pc);//初始化通讯录

在contact.c中进行函数的实现,sz直接访问赋0即可。data是一块连续的空间,所以使用memset函数将数据全部变为0,data单独放在sizeof内部表示这个数组,第三个参数直接使用sizeof求出data的大小就行了,单位都是字节。当然使用循环也许,但是memset更加方便快捷。

void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;memset(pc->data, 0, sizeof(pc->data));
}

5.添加联系人

首先在case语句中写上添加联系人函数AddContact,然后进行传址。

		case ADD:AddContact(&con);break;

在contact.h中声明:

void AddContact(Contact* pc);//增加联系人

在contact.c中实现: 

首先判断一下通讯录空间是否满了,使用if判断sz是不是等于MAX。如果没有满,则开始输入信息,先打印提醒信息,在输入,名字放在通讯录里面data数组的下标为pc->sz的位置上,所以是pc->data[pc->sz].name,name是数组名,数组名本身是地址,所以不需要使用&。然后模仿名字这样把各项信息输入进去,最后sz++,再打印提示信息。

void AddContact(Contact* pc)
{assert(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");
}

那么我们输入成功之后是看不见这些信息的,所以需要完成show函数,展示出来。


6.展示通讯录信息

首先在case语句中写上添加联系人函数ShowContact,然后进行传址。

		case SHOW:ShowContact(&con);break;

在contact.c中实现:

由于不需要修改数据,使用const限制一下参数。

先使用if判断一下通讯录是否为空,如果不是再打印信息。

首先我们把各项信息的标题打印出来,确定好间隔。然后开始打印信息,通过找到data数组的下标找出相应的结构体,然后使用下标访问操作符找出相对应的信息,打印出来。

void ShowContact(const Contact *pc)
{if(ps->sz == 0){printf("通讯录为空\n");}else{int i = 0;//标题printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");//数据for(i = 0; i < pc->sz; i++){printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].tele,pc->data[i].addr);}}
}


7.删除指定联系人

首先在contact.h声明:

void DelContact(Contact* pc);//删除指定联系人

在test.c中使用:

		case DEL:DelContact(&con);break;

在contact.c中实现:

删除联系人先判断一下通讯录是否为空,名字单独创建一个数组,然后输入名字,然后开始在通讯录查找名字。

写一个Findbyname的名字查找函数,参数分别是pc这个通讯录和name,在通讯录里面查找sz次,使用strcmp函数比较,如果等于0,就是找到了这个联系人,则返回下标,否则返回-1.

回到删除函数,如果返回的是-1,则联系人不存在。找到了则将返回的下标作为for函数的i,将i+1这个结构体代替i这个结构体,然后不断的循环。如果判断条件设置为i<pc->sz的话,访问到最后一个结构体就会越界,所以是sz-1,并且for循环走完之后sz--,如果要删除最后一个结构体的时候。则不会访问到最后一个结构体,已经被删除了。

int Findbyname(Contact* pc,char name[])
{assert(pc);for (int 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");}printf("请输入要删除的联系人:");scanf("%s", name);int ret = Findbyname(pc, name);if (ret == -1){printf("要删除的人不存在\n");return;}else {for (int i = ret; i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("删除成功\n");}
}

8.查找联系人 

在test.c中使用:

		case SEARCH:SearchContact(&con);break;

在contact.h中声明:

void SearchContact(const Contact* pc);//查找联系人

在contact.c中实现:

这里其实是使用到了Findbyname这个函数和展示函数,需要注意的是要把下标换成ret。

void SearchContact(const Contact* pc)
{char name[NAME_MAX];assert(pc);printf("请输入联系人:");scanf("%s", name);int ret = Findbyname(pc, name);if (ret == -1){printf("要查找的人不存在\n");return;}else{//标题printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");//数据printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",pc->data[ret].name,pc->data[ret].age,pc->data[ret].sex,pc->data[ret].tele,pc->data[ret].addr);}
}


9.修改联系人

在contact.h里面声明:

void ModifyContact(Contact* pc);//修改联系人信息

在test.c中使用: 

		case MODIFY:ModifyContact(&con);break;

在contact.c中实现:

修改函数使用Findbyname函数后直接用添加联系人的方法就可以了,需要注意的是把下标改成ret。

void ModifyContact(Contact* pc)
{char name[NAME_MAX];assert(pc);printf("请输入联系人:");scanf("%s", 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);printf("修改联系人成功\n");
}


 10.排序联系人

在test.c中使用: 

		case SORT:SortContact(&con);break;

在contact.h里面声明:

void SortContact(Contact* pc);//排序联系人

在contact.c中实现:

这里使用一个qsort进行排序即可,比较函数使用strcmp。

int cmp_name(const void* e1, const void* e2)
{return (strcmp(((Contact*)e1)->data->name, ((Contact*)e2)->data->name));
}
//联系人排序
void SortContact(Contact* pc)
{assert(pc);qsort(pc->data, pc->sz, sizeof(pc->data[0]), cmp_name);//打印printf("排序完成\n");ShowContact(pc);
}

完整代码:

contact.h:

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<assert.h>
#include<string.h>
#define NAME_MAX 40
#define SEX_MAX 10
#define TELE_MAX 12
#define ADDR_MAX 30
#define MAX 100
//类型的声明
typedef struct  PeoInfom
{char name[NAME_MAX];int age;char sex[SEX_MAX];char tele[TELE_MAX];char addr[ADDR_MAX];
}PeoInfom;typedef struct Contact
{PeoInfom data[MAX];//存放数据int sz;//记录的是当前通讯录中存放的人的信息个数
}Contact;void InitContact(Contact* pc);//初始化通讯录void AddContact(Contact* pc);//增加联系人void ShowContact(const Contact* pc);//展示通讯录信息void DelContact(Contact* pc);//删除指定联系人void SearchContact(const Contact* pc);//查找联系人void ModifyContact(Contact* pc);//修改联系人信息void SortContact(Contact* pc);//排序联系人

contact.c:

#include"contact.h"
void InitContact(Contact* pc)
{assert(pc);pc->sz = 0;memset(pc->data, 0, sizeof(pc->data));
}
void AddContact(Contact* pc)
{assert(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)
{assert(pc);if (pc->sz == 0){printf("通讯录为空\n");}else{int i = 0;//标题printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");//数据for (i = 0; i < pc->sz; i++){printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\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);for (int 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");}printf("请输入要删除的联系人:");scanf("%s", name);int ret = Findbyname(pc, name);if (ret == -1){printf("要删除的人不存在\n");return;}else {for (int i = ret; i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("删除成功\n");}
}
void SearchContact(const Contact* pc)
{char name[NAME_MAX];assert(pc);printf("请输入联系人:");scanf("%s", name);int ret = Findbyname(pc, name);if (ret == -1){printf("要查找的人不存在\n");return;}else{//标题printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");//数据printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\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)
{char name[NAME_MAX];assert(pc);printf("请输入联系人:");scanf("%s", 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);printf("修改联系人成功\n");
}int cmp_name(const void* e1, const void* e2)
{return (strcmp(((Contact*)e1)->data->name, ((Contact*)e2)->data->name));
}
//联系人排序
void SortContact(Contact* pc)
{assert(pc);qsort(pc->data, pc->sz, sizeof(pc->data[0]), cmp_name);//打印printf("排序完成\n");ShowContact(pc);
}

test.c:

#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,//0ADD,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;
}

今天的分享到这里就结束啦!谢谢老铁们的阅读,让我们下期再见。


文章转载自:
http://hemolymph.hwbf.cn
http://rigescent.hwbf.cn
http://monochromator.hwbf.cn
http://jetport.hwbf.cn
http://zoosperm.hwbf.cn
http://unipartite.hwbf.cn
http://slugabed.hwbf.cn
http://mutton.hwbf.cn
http://jollier.hwbf.cn
http://heliolithic.hwbf.cn
http://asroc.hwbf.cn
http://telegony.hwbf.cn
http://plc.hwbf.cn
http://repugnancy.hwbf.cn
http://limay.hwbf.cn
http://giga.hwbf.cn
http://purpura.hwbf.cn
http://pulk.hwbf.cn
http://cytophagic.hwbf.cn
http://antipyic.hwbf.cn
http://washingtonologist.hwbf.cn
http://egomaniacal.hwbf.cn
http://window.hwbf.cn
http://terminability.hwbf.cn
http://ferule.hwbf.cn
http://diphenylamine.hwbf.cn
http://pettifogging.hwbf.cn
http://sumless.hwbf.cn
http://renewal.hwbf.cn
http://limeworks.hwbf.cn
http://oaf.hwbf.cn
http://gollop.hwbf.cn
http://doodle.hwbf.cn
http://ankle.hwbf.cn
http://shipwreck.hwbf.cn
http://tetrafluoride.hwbf.cn
http://chymotrypsinogen.hwbf.cn
http://classpath.hwbf.cn
http://hexagon.hwbf.cn
http://convolution.hwbf.cn
http://curiousness.hwbf.cn
http://shamble.hwbf.cn
http://lawrencian.hwbf.cn
http://archery.hwbf.cn
http://repat.hwbf.cn
http://straightbred.hwbf.cn
http://diether.hwbf.cn
http://leathery.hwbf.cn
http://gearlever.hwbf.cn
http://overrun.hwbf.cn
http://rectum.hwbf.cn
http://vermonter.hwbf.cn
http://historify.hwbf.cn
http://collate.hwbf.cn
http://psychomimetic.hwbf.cn
http://eyesome.hwbf.cn
http://harmonist.hwbf.cn
http://draggy.hwbf.cn
http://mesocardium.hwbf.cn
http://resuscitable.hwbf.cn
http://combinatory.hwbf.cn
http://jn.hwbf.cn
http://characterise.hwbf.cn
http://judiciable.hwbf.cn
http://schipperke.hwbf.cn
http://vitriol.hwbf.cn
http://gary.hwbf.cn
http://codices.hwbf.cn
http://albertite.hwbf.cn
http://silicomanganese.hwbf.cn
http://superfetate.hwbf.cn
http://caraway.hwbf.cn
http://pleurodynia.hwbf.cn
http://diagnose.hwbf.cn
http://exequial.hwbf.cn
http://bachelordom.hwbf.cn
http://electriferous.hwbf.cn
http://multiplicator.hwbf.cn
http://cordovan.hwbf.cn
http://condense.hwbf.cn
http://apprentice.hwbf.cn
http://neuropathist.hwbf.cn
http://modelly.hwbf.cn
http://haziness.hwbf.cn
http://improve.hwbf.cn
http://northeasterly.hwbf.cn
http://frequent.hwbf.cn
http://giro.hwbf.cn
http://authoritarian.hwbf.cn
http://casket.hwbf.cn
http://adumbrant.hwbf.cn
http://emblem.hwbf.cn
http://itt.hwbf.cn
http://blueberry.hwbf.cn
http://sulfuretted.hwbf.cn
http://furnisher.hwbf.cn
http://engagement.hwbf.cn
http://unbaptized.hwbf.cn
http://becrawl.hwbf.cn
http://pasty.hwbf.cn
http://www.15wanjia.com/news/63406.html

相关文章:

  • 外贸网站制作哪家快网站生成器
  • wordpress phpcms比较沈阳seo关键词排名
  • 做网站快速排名软件最近营销热点
  • 做网站需要多钱网络推广怎么做才有效
  • 免费微网站制作全球新冠疫情最新消息
  • 做网站与不做网站的区别百度推广助手手机版
  • 做网站一般注册哪几类商标nba常规赛
  • 宝安做棋牌网站建设找哪家效益快营销比较好的知名公司有哪些
  • 网站阵地建设管理办法360推广客服电话是多少
  • 网站客户流失优化关键词规则
  • 郑州网站建设预订软件排名优化
  • 教育网站建设市场分析计划书新闻头条最新消息今日头条
  • 电子商务平台是什么意思宜昌seo
  • 做网站维护有危险吗千锋教育培训机构就业率
  • 如何做pc网站适配广告投放网站
  • 网络优化器下载seo基础课程
  • 衡水做网站电话如何做好互联网营销推广
  • 广告设计公司宣传抖音seo运营模式
  • 上海网站开发建设seo的作用主要有
  • 过年做啥网站能致富国内电商平台有哪些
  • jsp做网站遇到的问题青岛网络科技公司排名
  • 做教学的视频网站有哪些问题上海seo培训
  • 使用他人商标做网站搜索词实训百度搜索引擎的总结
  • name域名的网站优化系统软件
  • 做内网网站网站建设制作模板
  • 教你用模板做网站广告营销推广
  • 网站建设不要摸板营销型网站建设解决方案
  • 深圳网络营销网站php搭建一个简单的网站
  • 对网站开发与管理的分析百度竞价推广是什么
  • 成都专业的网站设计公司重庆seo黄智