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

网站开发是什么语言百度极速版

网站开发是什么语言,百度极速版,怎么搭建自己的博客网站,为什么网络经营者要有自己的网站文章目录 5. 通讯录的实现 5. 通讯录的实现 实现一个通讯录: 通讯录中保存人的信息: 名字年龄性别电话住址 通讯录中可以存放100个人的信息增加联系人删除指定联系人修改指定联系人查找指定联系人显示所有联系人的信息排序功能 首先,我们需要…

文章目录

    • 5. 通讯录的实现

5. 通讯录的实现

实现一个通讯录:

通讯录中保存人的信息:

  • 名字
  • 年龄
  • 性别
  • 电话
  • 住址
  1. 通讯录中可以存放100个人的信息
  2. 增加联系人
  3. 删除指定联系人
  4. 修改指定联系人
  5. 查找指定联系人
  6. 显示所有联系人的信息
  7. 排序功能

首先,我们需要三个文件:

  • test.c - 测试通讯录
  • contact.h - 函数和类型的声明
  • contact.c - 函数的实现

设计保存人的信息的这个结构体:

//contact.h//类型的声明typedef struct PeoInfo
{char name[20];int age;char sex[5];char tele[12];char addr[30];
}PeoInfo;

接着,我们实现一下大体逻辑:

//test.cvoid 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");
}void test()
{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:break;default:break;}} while (input);
}int main()
{test();return 0;
}

我们要实现通讯录的各项功能,首先要有通讯录:一个 PeoInfo 类型的数组,但是我们再思考一下,如果我们要添加联系人,那么我们是不是需要一个变量来统计通讯录中一共有多少个人,所以还需要一个整型变量。

//contact.h//通讯录typedef struct Contact
{PeoInfo data[100];int sz;
}Contact;
//test.c#include "contact.h"void test()
{//首先得有通讯录Contact con;
}

对通讯录进行初始化:

//contact.h#include <string.h>
#include <assert.h>//函数声明//初始化通讯录
void InitContact(Contact* pc);
//contact.c#include "contact.h"void InitContact(Contact* pc)
{	assert(pc);memset(pc->data, 0, sizeof(pc->data));pc->sz = 0;
}
//test.cvoid test()
{InitContact(&con);
}

注:
传参时传的是地址,有以下两点原因:

  1. 要改变实参的值,就要传地址过去
  2. 根据之前对结构体的学习,结构体一般传地址,因为传整个结构体要开辟的内存空间太大了

增加联系人:

//contact.h//增加联系人
void AddContact(Contact* pc);
//contact.cvoid AddContact(Contact* pc)
{	if (100 == pc->sz){printf("通讯录已满,无法添加\n");return;}
}

我们发现前面创建data数组时用到了100,这里也用到了100,之后如果要修改值,两处都要改,那么我们应该如何简化它呢?

//contact.h#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30enum OPTION
{EXIT,//0ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};//类型的声明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;
//contact.cvoid AddContact(Contact* pc)
{	assert(pc);if (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);pc->sz++;printf("成功增加联系人\n");
}
//test.cvoid test()
{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:break;case SORT:break;case EXIT:break;default:break;}} while (input);
}

显示联系人:

//contact.h//显示所有联系人的信息
void ShowContact(const Contact* pc);
//contact.cvoid ShowContact(const Contact* pc)
{assert(pc);int i = 0;//打印列标题printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");//打印数据for (i = 0; i < pc->sz; i++){printf("%-20s\t%-4d\t%-5s\t%-12s\t%-30s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].tele,pc->data[i].addr);}}

删除指定联系人:

//contact.h//删除指定联系人
void DelContact(Contact* pc);
//contact.cvoid DelContact(Contact* pc)
{assert(pc);if (0 == pc->sz){printf("通讯录为空,无法删除\n");return;}char name[MAX_NAME] = { 0 };//删除printf("请输入要删除的人的名字:>");scanf("%s", name);//找到要删除的人int i = 0;int del = 0;int flag = 0;for (i = 0; i < pc->sz; i++){if (0 == strcmp(pc->data[i].name, name)){del = i;flag = 1;break;}}if (0 == flag){printf("要删除的人不存在\n");return;}//删除坐标为del的联系人for (i = del; i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("成功删除联系人\n");
}

但是这个代码有一些缺陷:我们可以发现我们要实现的查找联系人和修改联系人这两个功能同样也需要先进行查找,因此我们可以对查找联系人的这一代码块进行分装,让它单独作为一个函数。

//contact.cstatic 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(Contact* pc)
{assert(pc);if (0 == pc->sz){printf("通讯录为空,无法删除\n");return;}char name[MAX_NAME] = { 0 };//删除printf("请输入要删除的人的名字:>");scanf("%s", name);//找到要删除的人int del = FindByName(pc, name);if (-1 == del){printf("要删除的人不存在\n");return;}int i = 0;//删除坐标为del的联系人for (i = del; i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("成功删除联系人\n");
}

查找指定联系人:

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

修改指定联系人:

//contact.h//修改指定联系人
void ModifyContact(Contact* pc);
//contact.cvoid ModifyContact(Contact* pc)
{assert(pc);char name[MAX_NAME] = { 0 };printf("请输入要修改人的名字:>");scanf("%s", name);int pos = FindByName(pc, name);if (-1 == pos){printf("要修改的人不存在\n");}else{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");}
}

排序功能:

我们可以按照名字排序,也可以按照年龄排序。

//contact.henum SELECT
{NAME = 1,AGE
};//排序功能
void SortContact(Contact* pc);
//contact.cvoid select()
{printf("********************************\n");printf("***** 1. name    2. age    *****\n");printf("********************************\n");
}int cmp_by_name(const void* p1, const void* p2)
{return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name);
}int cmp_by_age(const void* p1, const void* p2)
{return ((PeoInfo*)p1)->age - ((PeoInfo*)p2)->age;
}void SortContact(Contact* pc)
{assert(pc);if (0 == pc->sz){printf("通讯录为空,无法排序\n");return;}int input = 0;do{select();printf("请选择按何种方式进行排序:>");scanf("%d", &input);switch (input){case NAME:qsort(pc->data, pc->sz, sizeof(pc->data[0]), cmp_by_name);printf("排序成功\n");break;case AGE:qsort(pc->data, pc->sz, sizeof(pc->data[0]), cmp_by_age);printf("排序成功\n");break;default:printf("选择错误,重新选择\n");break;}} while (input != 1 && input != 2);
}

完整代码:

//contact.h#include <string.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30enum OPTION
{EXIT,//0ADD,DEL,SEARCH,MODIFY,SHOW,SORT
};enum SELECT
{NAME = 1,AGE
};//类型的声明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;//函数声明//初始化通讯录
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);memset(pc->data, 0, sizeof(pc->data));pc->sz = 0;
}void AddContact(Contact* pc)
{assert(pc);if (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);pc->sz++;printf("成功增加联系人\n");
}void ShowContact(const Contact* pc)
{assert(pc);int i = 0;//打印列标题printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");//打印数据for (i = 0; i < pc->sz; i++){printf("%-20s\t%-4d\t%-5s\t%-12s\t%-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(Contact* pc)
{assert(pc);if (0 == pc->sz){printf("通讯录为空,无法删除\n");return;}char name[MAX_NAME] = { 0 };//删除printf("请输入要删除的人的名字:>");scanf("%s", name);//找到要删除的人int del = FindByName(pc, name);if (-1 == del){printf("要删除的人不存在\n");return;}int i = 0;//删除坐标为del的联系人for (i = del; i < pc->sz - 1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("成功删除联系人\n");
}void SearchContact(const Contact* pc)
{assert(pc);char name[MAX_NAME] = { 0 };printf("请输入要查找人的名字:>");scanf("%s", name);int pos = FindByName(pc, name);if (-1 == pos){printf("要查找的人不存在\n");}else{//打印列标题printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");//打印数据printf("%-20s\t%-4d\t%-5s\t%-12s\t%-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)
{assert(pc);char name[MAX_NAME] = { 0 };printf("请输入要修改人的名字:>");scanf("%s", name);int pos = FindByName(pc, name);if (-1 == pos){printf("要修改的人不存在\n");}else{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");}
}void select()
{printf("********************************\n");printf("***** 1. name    2. age    *****\n");printf("********************************\n");
}int cmp_by_name(const void* p1, const void* p2)
{return strcmp(((PeoInfo*)p1)->name, ((PeoInfo*)p2)->name);
}int cmp_by_age(const void* p1, const void* p2)
{return ((PeoInfo*)p1)->age - ((PeoInfo*)p2)->age;
}void SortContact(Contact* pc)
{assert(pc);if (0 == pc->sz){printf("通讯录为空,无法排序\n");return;}int input = 0;do{select();printf("请选择按何种方式进行排序:>");scanf("%d", &input);switch (input){case NAME:qsort(pc->data, pc->sz, sizeof(pc->data[0]), cmp_by_name);printf("排序成功\n");break;case AGE:qsort(pc->data, pc->sz, sizeof(pc->data[0]), cmp_by_age);printf("排序成功\n");break;default:printf("选择错误,重新选择\n");break;}} while (input != 1 && input != 2);
}
//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");
}void test()
{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);
}int main()
{test();return 0;
}
http://www.dt0577.cn/news/13569.html

相关文章:

  • 网站建设哪一家好十大搜索引擎神器
  • 浦东新区建设局官方网站怎么找百度客服
  • ip形象设计排版如何优化网站推广
  • wordpress博客工具seo的范畴是什么
  • 廊坊网站制作套餐企业营销策划方案
  • 太原建高铁站关键词排名点击软件网站
  • 安阳做网站多少钱奉化seo页面优化外包
  • 合肥专业制作网站百度云手机app下载
  • 个人网站赏析百度推广怎么登陆
  • 深圳网站seo优化公司百度指数的数据怎么导出
  • 做小程序好还是做微网站好网络营销策划
  • 礼品兑换网站怎么做性价比高seo的排名优化
  • 毕节建设局网站外贸网站优化推广
  • 大连微网站开发优化seo公司哪家好
  • 高端人才招聘网站排名通州优化公司
  • wordpress网站被攻击武汉网站排名提升
  • 效果好企业营销型网站建设开发代运营公司哪家好一些
  • 宜宾网站建设公司百度网盘资源链接入口
  • 用asp.net做的 购物网站视频网络营销专业学什么课程
  • 服务器托管哪里便宜如何做seo
  • 哈尔滨专业建网站哪家好网站seo技术教程
  • 河北手机网站制作多少钱百度seo如何做
  • 企业网站建设的一般原则包括500强企业seo服务商
  • 交互式网站制作全网营销是什么意思
  • 黄一级a做爰片免费网站郑州网络营销策划
  • 营销软件代理品牌有哪些谷歌seo实战教程
  • 网站系统环境的搭建中国的网络营销公司
  • 博兴网站建设招聘杭州seo排名收费
  • 西安公司网站设计今日新闻头条
  • 网页设计流程是什么百度怎么优化排名