我的创作纪念日

发布时间:2024年01月04日

机缘

时光荏苒,其实来到CSDN已经三年了,期间一直没有创作过任何文章,因为感觉自己认知浅薄,而且佩服程皓大佬做技术的态度,做学问与做技术本质相同,讲究追根溯源,打破砂锅问到底的精神;鉴于本人三年前只会做一些停留在理论层面上的分析,学校教育与社会的发展严重脱节,很多深刻的理论其实也不过是带来精神层面的享受,除此之外,别无用处,可能偶尔有用的也就那么一两本书,以前觉得一件事要么不做,要么做到最好,后来发现不是每一件事都需要这样的态度,也是时候摆脱小镇做题家的身份了,今年开始成为一名不太合格的创作者,开始常年不断更新技术;


收获

在自己创作的旅程中,已经吸引了400位粉丝的关注,他们的支持和鼓励推动着我不断前行,每篇文章的赞、评论和阅读量都是我前进的动力,为了方便大家阅读,所有的图片不加水印,同时也希望大家指出我的错误,思想只有碰撞,才会产生火花,如果我的文章帮助大家解决了问题,我也会很开心,通过博客,我还认识了许多志同道合的领域同行,我们相互学习,共同进步;

日常

现在基本舍弃了一些枯燥乏味的理论学习,长达四年的理论学习已经足够支撑我走下去,现在只想深入的学习技术,学习就是我的生活,先将学的东西完全消化,然后再吐出来,这样的方式恰恰也是一篇优秀博客的来源,当然创作已经成为我生活中不可或缺的一部分;


成就

我目前写的最好项目就是动态版本的通讯录的实现

//.contact.h文件
# include <stdio.h>
# include <string.h>
# include <assert.h>
# include <stdlib.h>
//建立菜单功能和选项的关联使用枚举;
enum Option
{
	Exit,// 0
	Add,//  1
	Del,//  2
	Search,//3
	Modify,//4
	Show  //5
};

# define DEFAULT 3
#define Data_Max 1000
#define Name_Max 20
#define Sex_Max 5
#define Tele_Max 12
#define Addr_Max 30

typedef struct PeoInfo
{
	char name[Name_Max];
	int age;
	char sex[Sex_Max];
	char tele[Tele_Max];
	char addr[Addr_Max];
}PeoInfo;

//动态版本
typedef struct Contact
{
	PeoInfo *data;//可以存放1000个人的信息
	int sz;//记录通讯录中已经保存的联系人的个数;
	int capacity;//记录通讯录当前的最大容量;
}Contact;

//函数的声明

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


//销毁通讯录
void DestoryContact(Contact* pc);

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

//显示通讯录中的信息
void ShowContact(const Contact * pc);

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

//查找指定联系人的信息
void SearchContact(const Contact* pc);

//修改联系人的相关信息
void ModContact(Contact* pc);

//contact.c文件
void DestoryContact(Contact* pc)
{
	free(pc->data);
	pc->data = NULL;
	pc->capacity = 0;
	pc->sz = 0;
	printf("销毁成功\n");
}
//动态版本
void InitContact(Contact * pc)
{
	assert(pc != NULL);
	pc->sz = 0;
	pc->capacity = DEFAULT;
	pc->data = (PeoInfo *)malloc(pc->capacity*sizeof(PeoInfo));
	if (pc->data == NULL)
	{
		perror("malloc");
		return ;
	}
	memset(pc->data, 0, pc->capacity*sizeof(PeoInfo));
}

void check_capacity(Contact* pc)
{
	if (pc->sz == pc->capacity)
	{
		PeoInfo* tmp = (PeoInfo*)realloc(pc->data, (pc->capacity + 2)*sizeof(PeoInfo));
		if (tmp != NULL)
		{
			pc->data = tmp;
		}
		pc->capacity += 2;
		printf("增容成功\n");
	}
}
void AddContact(Contact * pc)
{
	assert(pc != NULL);
	//当通讯录数据存放满,进行扩容
	check_capacity(pc);
	//动态版本
	

	//1.录入信息
	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);
	//2.sz++;
	pc->sz++;
	printf("添加成功\n");
}
//显示通讯录中的信息
void ShowContact(const Contact * pc)
{
	assert(pc != NULL);

	int i = 0;
	printf("%-20s %-5s %-5s %-12s %-30s\n", "姓名", "年龄", "性别", "电话", "地址");
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-20s %-5d %-5s %-12s %-30s\n", pc->data[i].name, pc->data[i].age,
			pc->data[i].sex, pc->data[i].tele, pc->data[i].addr);
	}

}

int FindByName(const Contact* pc, char name[])
{
	assert(pc != NULL);
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
		//比较姓名—实际比较字符串—strcmp()函数
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	//遍历完整个数组,仍然没有返回,说明找不到;
	return -1;
}

//删除指定联系人的信息
void DelContact(Contact *pc)
{
	assert(pc != NULL);
	//如果通讯录里面元素为0,直接返回;
	if (pc->sz == 0)
	{
		printf("通讯录已空,无法删除\n");
		return;
	}
	//先根据姓名找到要删除的元素(不考虑重名)
	char name[Name_Max] = { 0 };
	printf("请输入姓名:");
	scanf("%s", name);
	//根据名字找到所对应的元素,找到了返回data数组的下标,找不到返回-1;
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("联系人不存在,无法删除\n");
		return;
	}
	//删除  
	//删除方法-要删除指定位置的元素,只需从指定位置开始,后一个元素覆盖掉前一个元素即可,依次进行;
	int j = 0;

	for (j = pos; j <pc->sz - 1; j++)
	{
		pc->data[j] = pc->data[j + 1];
	}
	pc->sz--;
	printf("删除成功\n");
}

//查找指定联系人的信息
void SearchContact(const Contact* pc)
{
	assert(pc != NULL);
	char name[Name_Max] = { 0 };
	printf("请输入查找人的姓名:");
	scanf("%s", name);
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("联系人不存在\n");
		return;
	}
	//找到联系人,显示联系人相关信息;
	printf("%-20s %-5s %-5s %-12s %-30s\n", "姓名", "年龄", "性别", "电话", "地址");
	printf("%-20s %-5d %-5s %-12s %-30s\n", pc->data[pos].name, pc->data[pos].age,
		pc->data[pos].sex, pc->data[pos].tele, pc->data[pos].addr);

}

//修改联系人的信息
void ModContact(Contact* pc)
{
	assert(pc != NULL);
	//先根据姓名查找要修改的元素
	char name[Name_Max] = { 0 };
	printf("请输入修改人的姓名:");
	scanf("%s", name);
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("联系人不存在\n");
		return;
	}
	//重新输入该位置的信息;
	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");
}

憧憬

因为本身具有硬件基础,从事过电路设计相关工作,现在倾向于深入的学习后端,包括嵌入式所用到的芯片架构的学习,不断扩展自己的知识面,操作系统以下将会是本人主要的学习路径,不断向下兼容,事情抱着百分的态度完成,结果任凭天意而定;

文章来源:https://blog.csdn.net/m0_58963318/article/details/135380949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。