c语言学习每天进步一点点之通讯录项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

只有当你真正的写过项目之后,才能体会到其中的美妙,那种成就感很能让人快乐。通讯录最主要的就是建立二级结构体,一个结构体中记录存了几个人,一个结构体中保存通讯人的相关信息,然后套在一起


提示:以下是本篇文章正文内容,下面案例可供参考

一、项目的认识

就目前而言,我认为写项目围绕两个点展开,一个是菜单(以菜单为核心逐渐展开内容,然后不同的内容用不同的函数进行包装操作),第二个则是围绕内存展开,也就是围绕数组/结构体等内容展开(我认为本质就是将数据存在其中然后通过指针进行操作),换句话说菜单是一种标准书写框架,在这种框架之下通过指针对内存进行操作。

二、使用步骤

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中一定是循环),声明中告诉别人不同的函数的功能分别是什么,函数的具体实现中则对函数进行书写打磨,具体的介绍都在代码中的双斜杠之后

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值