提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
只有当你真正的写过项目之后,才能体会到其中的美妙,那种成就感很能让人快乐。通讯录最主要的就是建立二级结构体,一个结构体中记录存了几个人,一个结构体中保存通讯人的相关信息,然后套在一起
提示:以下是本篇文章正文内容,下面案例可供参考
一、项目的认识
就目前而言,我认为写项目围绕两个点展开,一个是菜单(以菜单为核心逐渐展开内容,然后不同的内容用不同的函数进行包装操作),第二个则是围绕内存展开,也就是围绕数组/结构体等内容展开(我认为本质就是将数据存在其中然后通过指针进行操作),换句话说菜单是一种标准书写框架,在这种框架之下通过指针对内存进行操作。
二、使用步骤
1.主函数main.c
代码如下(示例):
#define _crt_secure_no_warnings 1
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include "game.h"
int main()
{
int input = 0;
char nm[MAX_NAME] = { 0 };
struct zl con; //通讯录
initcontract(&con); //初始化通讯录
do
{
menu();
printf("请输入你的选项>");
scanf_s("%d", &input);
switch (input)
{
case Exit :
//退出
break;
case add:
//增加通讯人
add1(&con);
break;
case del :
//删除通讯人
delet(&con);
break;
case search :
//搜索通讯人
search1(&con);
break;
case modify :
//修改通讯人
modify1(&con);
break;
case sort :
break;
case display :
display1(&con);
break;
default:
{ printf("输入错误请重新输入\n\n\n"); break; }
}
} while (input);
return 0;
}
2.函数的声明
代码如下(示例):
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
#define MAX_NAME 20 //宏定义的优点是后期便于维护
#define MAX_SEX 10
#define MAX_TELE 12
#define MAX_ADDR 30
struct peoinfo //创建我们自己喜欢的类,比如:姓名,性别,电话,年龄,地址等等
{
char name[MAX_NAME];
char sex[MAX_SEX];
int age;
char tele[MAX_TELE];
char addr[MAX_ADDR];
};
struct zl //创建总的我们喜欢的类
{
struct peoinfo data[MAX]; //总数据,存放添加人的信息
int sz; //存了多少个数据,存了几个人的数据
};
enum s //宏定义,限制变量范围
{
Exit,
add,
del,
search,
modify,
sort,
display
};
void menu(); //菜单的声明
void initcontract(struct zl* pc); //通讯录初始化,本质是将结构体内容全部初始化为0
void add1(struct zl* pc); //增加一个通讯人
void display1(struct zl* pc); //打印所有通讯人
void delet(struct zl* pc); //删除一个通讯人
int searchh(struct zl* pc, char name[ ]); //底层查找某通讯人
void search1(struct zl* pc); //包装查找某个通讯人
void modify1(struct zl* pc); //修改某个通讯人
该处使用的url网络请求的数据。
3.函数的具体实现
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu() //菜单展示
{
printf("-------0.exit------------------\n");
printf("-------1.add------------------\n");
printf("-------2.del-------------------\n");
printf("-------3.search---------------\n");
printf("-------4.modify--------------\n");
printf("-------5.sort-----------------\n");
printf("-------6.display-------------\n");
}
void initcontract(struct zl* pc) //初始化
{
pc->sz = 0;
memset(pc->data, 0, sizeof(pc->data));
}
void add1(struct zl* pc) //添加一个通讯人
{
int n = pc->sz;
if (n == MAX)
{
printf("已经存满了");
return;
}
printf("请输入名字>");
scanf("%s", pc->data[n].name);
printf("请输入年龄>");
scanf("%d", &(pc->data[n].age));
printf("请输入性别>");
scanf("%s", pc->data[n].sex);
printf("请输入电话号>");
scanf("%s", pc->data[n].tele);
printf("请输入地址>");
scanf("%s", pc->data[n].addr);
pc->sz++;
printf("增加成功\n\n");
}
void display1(struct zl* pc) //打印所有通讯人
{
printf("\n");
for (int n = 0; n < pc->sz; n++)
{
printf("%s %d %s %s %s\n",
pc->data[n].name,
pc->data[n].age,
pc->data[n].sex,
pc->data[n].tele,
pc->data[n].addr);
}
printf("\n\n");
}
void delet(struct zl* pc) //删除一个通讯人
{
if (pc->sz == 0) //排除空
{
printf("通讯录为空\n");
return;
}
char nm[MAX_NAME] = {0};
printf("请输入删除人的名字>");
scanf("%s", nm);
int c =searchh(pc, nm);
if (c == -1)
{
printf("要删除的人不存在\n\n");
return;
}
int i = 0;
for ( i = c; i < pc->sz-1 ; i++)
{
pc->data[i] = pc->data[i + 1];
}
pc->sz--; //让保存的通讯人减少一个
printf("删除成功\n\n");
}
int searchh(struct zl* pc, char nm[ ]) //查找是否有这个人,有则返回序号,无则返回-1
{
for (int i = 0; i < pc->sz; i++)
{
if (strcmp(nm, pc->data[i].name) == 0)//比较是否相等
{
return i;
}
}
return -1;
}
void search1(struct zl* pc) //封装查找
{
char nm[MAX_NAME] = { 0 };
printf("请输入你要查找的人>");
scanf("%s", nm);
int c = searchh(pc, nm);
if (c == -1)
{
printf("没有这个人");
}
else
{
printf("这个人的相关内容如下\n\n");
printf("%s %d %s %s %s\n",
pc->data[c].name,
pc->data[c].age,
pc->data[c].sex,
pc->data[c].tele,
pc->data[c].addr);
}
printf("\n\n");
}
void modify1(struct zl* pc) //修改某个通讯人
{
char nm[MAX_NAME] = { 0 };
printf("请输入修改人的名字>");
scanf("%s", nm);
int c = searchh(pc, nm);
if (c == -1)
{
printf("要修改的人不存在\n\n");
return;
}
else
{
printf("请输入修改的名字>");
scanf("%s", pc->data[c].name);
printf("请输入修改的年龄>");
scanf("%d", &(pc->data[c].age));
printf("请输入修改的性别>");
scanf("%s", pc->data[c].sex);
printf("请输入修改的电话号>");
scanf("%s", pc->data[c].tele);
printf("请输入修改的地址>");
scanf("%s", pc->data[c].addr);
}
printf("修改成功\n\n\n");
}
总结
核心就是在main中规定需要哪些函数(main中一定是循环),声明中告诉别人不同的函数的功能分别是什么,函数的具体实现中则对函数进行书写打磨,具体的介绍都在代码中的双斜杠之后。