做铝材哪些网站招聘,厦门网页设计公司价格,windows优化大师怎么用,小程序网站备案目录
实现思路
开始实现
添加增加联系人功能
添加显示联系人信息的功能
添加删除联系人功能
添加查找指定联系人的功能
添加修改指定联系人的功能
测试
代码
Test.c
Contact.c
Contact.h 实现思路 1.通讯录中保存人的信息#xff1a;名字、年龄、性别、电话、住址…
目录
实现思路
开始实现
添加增加联系人功能
添加显示联系人信息的功能
添加删除联系人功能
添加查找指定联系人的功能
添加修改指定联系人的功能
测试
代码
Test.c
Contact.c
Contact.h 实现思路 1.通讯录中保存人的信息名字、年龄、性别、电话、住址 2.通讯录的功能 通讯录可以存放100个人的信息增加联系人删除指定联系人修改指定联系人查找指定联系人显示所有联系人的信息排序功能 实现以上思路我们需要创建3个文件
test.c - 测试通讯录contact.h - 函数和类型的声明contact.c - 函数的实现 我们可以以结构体的形式设计保存每个人的信息
struct PeoInfo
{
//....
}
当通讯录需要存放100个人的信息时我们可以以数组形式存放这些结构体 开始实现
创建3个文件 在头文件Contact.h进行类型的声明
代码
#pragma once//类型的声明typedef struct PeoInfo
{char name[20];int age;char sex[5];char tele[12];char addr[30];
}PeoInfo; 写出主函数我们需要在test()中完成我们的整个测试
我们打印菜单同时通过do..while()循环完成功能的选择
注记得加上 #includeContact.h 引用自己的头文件
代码
#define _CRT_SECURE_N0_WARNINGS 1
#includestdio.h
#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);printf(*******************************\n);
}
void test()
{int input 0;//首先得有通讯录PeoInfo data[100];int sz0;//记录通讯录的人数的增加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;
}我们对通讯录部分进行整合封装并初始化 用预处理指令如#define MAX 100让类型声明中的数据可以修改便于维护
将利用枚举代替数字更加直观 添加增加联系人功能 添加显示联系人信息的功能 我们现在已经加了两个功能来运行测试一下 好了测试成功我们继续添加功能
添加删除联系人功能 改进将删除功能中的查询联系人部分封装为函数后续功能需要查询就可以字节调用这个函数提高代码复用性。注这个函数不需要在头文件声明因为该函数只需要在内部使用 添加查找指定联系人的功能 添加修改指定联系人的功能 对于排序功能排序方式有很多种比如按姓名排序按年龄排序等等可以跟据需求来设计这里就不一一实现了。
添加退出功能直接打印退出游戏并跳出。
当选择到非法字符时打印重新选择并跳出选择界面。 到这里一个建议的通讯录就完成了。
让我们来测试一下
测试 测试成功
下面是这个通讯录程序的实现代码
代码
Test.c
#define _CRT_SECURE_NO_WARNINGS 1#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);printf(*******************************\n);
}
void test()
{int input 0;//首先得有通讯录//PeoInfo data[100];//int sz 0;Contact con;InitContact(con);//结构体传参最好传地址do{menu();printf(请选择:);scanf_s(%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://排序//按名字排序//按年龄排序break;case EXIT:printf(退出通讯录\n);break;default:printf(选择错误重新选择\n);break;}} while (input);
}
int main()
{test();return 0;
} 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* 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)
{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);}
}//删除联系人功能实现//常规写法*********//void DelContact(Contact* pc)
//{
// if (pc-sz 0)
// {
// printf(通讯录为空无法删除\n);
// return;
// }
// char name[MAX_NAME] { 0 };
// assert(pc);
// //删除
// printf(请输入要删除的人的名字:);
// scanf(%s, name);
//
// //找到要删除的人//遍历
// int i 0;
// int del 0;
// int flag 0;
// for (i 0; i pc-sz; i)
// {
// if (strcmp(pc-data[i].name, name)0)//strcmp()用于比较两个字符串是否相等相等返回0
// {
// del i;
// flag 1;
// break;
// }
// }
// if (flag 0)
// {
// printf(要删除的联系人不存在\n);
// return;
// }
//
//
// //删除坐标为del的联系人
// for (i del; i pc-sz-1; i)
// {
// pc-data[i] pc-data[i 1];
// }
// pc-sz--;
// printf(成功删除联系人\n);
//}//****************//*******************
//封装查询函数
int FindByName(const Contact* pc, char name[])
{//找到要删除的人//遍历int i 0;for (i 0; i pc-sz; i){if (strcmp(pc-data[i].name, name) 0)//strcmp()用于比较两个字符串是否相等相等返回0{return i;//找到了}}return -2;//找不到
}
//*****************************//删除过程中有查询步骤查询可以单独封装为函数其他功能也可以使用这个函数void DelContact(Contact* pc)
{if (pc-sz 0){printf(通讯录为空无法删除\n);return;}char name[MAX_NAME] { 0 };assert(pc);//删除printf(请输入要删除的人的名字:);scanf(%s, name);//找到要删除的人//遍历int del FindByName(pc, name);if (del 0){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 (pos -2)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 (pos -1)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.h
#pragma once#include stdio.h
#include string.h
#include assert.h#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30//枚举 代替数字更加直观
enum OPTION
{EXIT,//0ADD,//1DEL,//2SEARCH,//3MODIFY,//4SHOW,//5SORT//6
};//类型的声明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[100];int sz;
}Contact;//函数声明
//
//初始化通讯录
void InitContact(Contact* pc);//增加联系人
void AddContact(Contact* pc);//显示所有联系人的信息
void ShowContact(const Contact* pc);//只打印不涉及修改信息所以加const//删除指定联系人
void DelContact(Contact* pc);//查找指定联系人
void SearchContact(Contact* pc);//修改指定联系人
void ModifyContact(Contact* pc);