C语言模拟通讯录:动态版本

本期内容是C语言实现通讯录;

1.创建三个头文件,分别是game.h、game.c、test.c;

建立一个通讯录,通讯录的结果记录包括:姓名,性别,年龄,电话号码,地址等等;

 game.h头文件​​​​​​:

#define _CRT_SECURE_NO_WARNINGS 1
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"
//#define MAX 1000
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30
#define CAPATITY_SZ 3
enum Option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	SORT,
	SAVE
};
struct Proct
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
};
struct Contact
{
	struct Proct *data;
	int size;
	int capatity;
};
//初始
void InitContact(struct Contact *ps);
//增加
void AddContact(struct Contact *ps);
//显示
void ShowContact(const struct Contact *ps);
//删除
void DelContact(struct Contact *ps);
//查找
void SearchContact(const struct Contact *ps);
//修改
void ModifyContact(struct Contact *ps);
//冒泡
//
//
void DesContact(struct Contact *ps);
//写数据存放
void SaveContact(struct Contact* ps);
//打开通讯录,文件存放
void LoveContact(struct Contact *ps);





game.c源文件:通讯录所需各个功能函数的实现

#include "game.h"
void InitContact(struct Contact *ps)
{
	ps->data = (struct Proct*)malloc(sizeof(struct Proct)*CAPATITY_SZ);
	if (ps->data == NULL)
	{
		return;
	}
	ps->size = 0;
	ps->capatity = CAPATITY_SZ;
	//文件加载
	LoveContact(ps);
}
void ChecKCapacity(struct Contact* ps);
void LoveContact(struct Contact* ps)
{
	struct Proct tmp = { 0 };
	FILE* pfRead = fopen("contact.txt", "rb");
	if (pfRead == NULL)
	{
		printf("LoveContact:%s\n", strerror(errno));
		system("pause");
		return;
	}
	while (fread(&tmp, sizeof(struct Proct), 1, pfRead))
	{
		ChecKCapacity(ps);
		ps->data[ps->size] = tmp;
		ps->size++;
	}
	fclose(pfRead);
	pfRead = NULL;
}
void ChecKCapacity(struct Contact* ps)
{
	if (ps->size == ps->capatity)
	{
		struct Proct* ptr = (struct Proct*)realloc(ps->data, (ps->capatity + 2)*sizeof(struct Proct));
		if (ptr != NULL)
		{
			ps->data = ptr;
			ps->capatity += 2;
			printf("增容成功\n");
		}
		else
			printf("增容失败\n");
	}
}
void AddContact(struct Contact *ps)
{
	ChecKCapacity(ps);
	printf("请输入名字:");
	scanf("%s", ps->data[ps->size].name);
	printf("请输入年龄:");
	scanf("%d", &(ps->data[ps->size].age));
	printf("请输入性别:");
	scanf("%s", ps->data[ps->size].sex);
	printf("请输入电话:");
	scanf("%s", ps->data[ps->size].tele);
	printf("请输入地址:");
	scanf("%s", ps->data[ps->size].addr);

	ps->size++;
	printf("添加成功\n");
}
void ShowContact(struct Contact *ps)
{
	if (ps->size == 0)
	{
		printf("空信息\n");
	}
	else
	{
		int i = 0;
		printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
		for (i = 0; i < ps->size; i++)
		{
			printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
				ps->data[i].name,
				ps->data[i].age,
				ps->data[i].sex,
				ps->data[i].tele,
				ps->data[i].addr);
		}
	}
}
static int FindByname(const struct Contact *ps, char name[MAX_NAME])
{
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		if (strcmp(ps->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}
void DelContact(struct Contact *ps)
{
	char name[MAX_NAME];
	printf("请输入你要删除联系人的名字:");
	scanf("%s", name);
	int pos=FindByname(ps,name);
	if (pos == -1)
	{
		printf("你要找的人不存在\n");
	}
	else
	{
		int j = 0;
		for (j = pos; j < ps->size - 1; j++)
		{
			ps->data[j] = ps->data[j + 1];
		}
		ps->size--;
		printf("删除成功\n");
	}
}
void SearchContact(const struct Contact *ps)
{
	int i = 0;
	char name[MAX_NAME];
	printf("请输入你要查找的联系人:");
	scanf("%s", name);
	int pos = FindByname(ps, name);
		if (pos==-1)
		{
			printf("要查找的人不存在\n");
		}
		else
		{
			printf("查找到了\n");
			printf("%-20s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
			printf("%-20s\t%-4d\t%-5s\t%-12s\t%-20s\n",
				ps->data[pos].name,
				ps->data[pos].age,
				ps->data[pos].sex,
				ps->data[pos].tele,
				ps->data[pos].addr);
		}
}
void ModifyContact(struct Contact *ps)
{
	char name[MAX_NAME];
	printf("请输入你要修改的联系人:");
	scanf("%s", name);
	int pos = FindByname(ps,name);
	if (pos == -1)
	{
		printf("你要修改的人不存在\n"); 
	}
	else
	{
		printf("请输入名字:");
		scanf("%s", ps->data[pos].name);
		printf("请输入年龄:");
		scanf("%d", &(ps->data[pos].age));
		printf("请输入性别:");
		scanf("%s", ps->data[pos].sex);
		printf("请输入电话:");
		scanf("%s", ps->data[pos].tele);
		printf("请输入地址:");
		scanf("%s", ps->data[pos].addr);

		printf("修改成功\n");
	}
}
void DesContact(struct Contact* ps)
{
	free(ps->data);
	ps->data = NULL; 
}
void SaveContact(struct Contact* ps)
{
	FILE* pfWirte = fopen("contact.txt", "wb");
	if (pfWirte == NULL)
	{
		printf("SaveConatct:%s\n", strerror(errno));
		system("pasue");
		return;
	}
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		fwrite(&(ps->data[i]), sizeof(struct Proct), 1, pfWirte);
	}
	fclose(pfWirte);
	pfWirte = NULL;
}

test.c源文件(测试):测试代码运行

#include "game.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");
}
int main()
{
	int inupt = 0;
	struct Contact con;
	InitContact(&con);
	do
	{
		menu();
		printf("请输入选择:");
		scanf("%d", &inupt);
		switch (inupt)
		{
		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:SaveContact(&con); DesContact(&con); printf("退出通讯录\n"); break;
		case SAVE:SaveContact(&con); break;
		default:printf("选择错误,请重新选择\n");
		}
	} while (inupt);
	system("pause");
	return 0;
}

通讯录(动态)到此设计结束了,感谢您的阅读!!!如果内容对您有所帮助,记得给我点赞,关注,收藏,谢谢!后续持续更新!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值