C语言实现一个简单的通讯录

先写一个简单的静态内存版本下的通讯录

具体要求如下

通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址

提供方法:

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息
  6. 清空所有联系人
  7. 以名字排序所有联系人
  8. 保存联系人到文件
  9. 加载联系人
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
#include <string.h>

#define MAX_PERSONS_NUM 300
typedef struct PersonInformation
{
	char name[1024];
	char gender[1024];
	char age[1024];
	char tel[1024];
	char address[1024];
}PersonInfo;

typedef struct Contectbook
{
	PersonInfo persons[MAX_PERSONS_NUM];
	int size;
}Contectbook;

Contectbook g_contectbook;

void init()
{
	g_contectbook.size = 0;
	for (int i = 0; i < MAX_PERSONS_NUM; ++i)
	{
		g_contectbook.persons[i].name[0] = "\0";
		g_contectbook.persons[i].gender[0] = "\0";
		g_contectbook.persons[i].age[0] = "\0";
		g_contectbook.persons[i].tel[0] = "\0";
		g_contectbook.persons[i].address[0] = "\0";
	}
}

int meau()
{
	printf("************************\n");
	printf("1.添加联系人\n");
	printf("2.删除联系人\n");
	printf("3.查找联系人\n");
	printf("4.修改联系人\n");
	printf("5.显示全部联系人\n");
	printf("6.清空联系人\n");
	printf("7.按照名字排序联系人\n");
	printf("8.保存联系人到文件\n");
	printf("9.加载联系人\n");
	printf("************************\n");
	printf("请输入您的选择:>");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}
void empty(){}
void add_person()
{
	printf("请输入新增的姓名:>");
	PersonInfo *p = &g_contectbook.persons[g_contectbook.size];
	scanf("%s", p->name);
	printf("新增姓名成功\n");
	printf("请输入新增的性别:>");
	scanf("%s", p->gender);
	printf("新增性别成功\n");
	printf("请输入新增的年龄:>");
	scanf("%s", p->age);
	printf("新增年龄成功\n");
	printf("请输入新增的电话:>");
	scanf("%s", p->tel);
	printf("新增电话成功\n");
	printf("请输入新增的地址:>");
	scanf("%s", p->address);
	printf("新增地址成功\n");
	g_contectbook.size++;
}

void del_person()
{
	printf("请输入您要删除的下标\n");
	int index = 0;
	scanf("%d", &index);
	g_contectbook.persons[index] = g_contectbook.persons[g_contectbook.size];
	g_contectbook.size--;
	printf("删除联系人成功\n");
}

void search_person()
{
	printf("请输入您要查找的联系人\n");
	char search_name[1024] = "";
	scanf("%s",search_name);
	for (int j = 0; j < g_contectbook.size; ++j)
	{
		PersonInfo *p2 = &g_contectbook.persons[j];
		if (!strcmp(search_name,p2->name))
		{
			printf("name:%s gender:%s age:%s tel:%s address:%s\n",
				p2->name, p2->gender, p2->age, p2->tel, p2->address);
		}
		else
		{
			printf("不存在该联系人\n");
		}
	}
}

void update_person()
{
	printf("请输入你要更新的联系人序号\n");
	int index = 0;
	scanf("%d", index);
	PersonInfo *person = &g_contectbook.persons[index];
	char name1[1024] = "";
	char gender1[1024] = "";
	char age1[1024] = "";
	char tel1[1024] = "";
	char address1[1024] = "";
	scanf("%s %s %s %s %s", name1, gender1, age1, tel1, address1);
	if (!strcmp(person->name, name1))
	{
		*(person->name) = name1;
	}
	if (!strcmp(person->gender, gender1))
	{
		*(person->gender) = gender1;
	}
	if (!strcmp(person->age, age1))
	{
		*(person->age) = age1;
	}
	if (!strcmp(person->tel, tel1))
	{
		*(person->tel) = tel1;
	}
	if (!strcmp(person->address, address1))
	{
		*(person->address) = address1;
	}
	printf("更新联系人成功\n");
}

void show_all_person()
{
	for (int i = 0; i < g_contectbook.size; ++i)
	{
		printf("name:%s ", g_contectbook.persons[i].name);
		printf("gender:%s ", g_contectbook.persons[i].gender);
		printf("age:%s ", g_contectbook.persons[i].age);
		printf("tel:%s ", g_contectbook.persons[i].tel);
		printf("address:%s ", g_contectbook.persons[i].address);
		printf("\n");
	}
	printf("打印成功\n");
}
void clear_all_person()
{
	g_contectbook.size = 0;
	printf("删除全部联系人成功\n");
}
void swap_string(char *str1, char *str2)
{
	char tmp[1024] = "";
	strcpy(tmp, str1);
	strcpy(str1, str2);
	strcpy(str2, tmp);
}
void sort_person()
{
	for (int Bound = 0; Bound < g_contectbook.size; ++Bound)
	{
		for (int i = g_contectbook.size - 1; i > Bound; i--)
		{
			if (strcmp(g_contectbook.persons[i].name, g_contectbook.persons[i-1].name)< 0)
			{
				swap_string(g_contectbook.persons[i].name, g_contectbook.persons[i - 1].name);
			}
		}
	}
	printf("联系人已经按照姓名排序\n");
}
//保存联系人到文件 
void Save_to_file()
{
	FILE *fp = fopen("test.txt", "w");
	if (fp == NULL)
	{
		assert(0);
	}
	for(int i = 0; i<g_contectbook.size; ++i)
	{
		fputs("name:", fp);
		fputs(g_contectbook.persons[i].name,fp);
		fputs(" ", fp);
		fputs("gender:", fp);
		fputs(g_contectbook.persons[i].gender, fp);
		fputs(" ", fp);
		fputs("age:", fp);
		fputs(g_contectbook.persons[i].age, fp);
		fputs(" ", fp);
		fputs("tel:", fp);
		fputs(g_contectbook.persons[i].tel, fp);
		fputs(" ", fp);
		fputs("address:", fp);
		fputs(g_contectbook.persons[i].address, fp);
		fputs("\n", fp);
	}
	fclose(fp); 
	fp = NULL;
	printf("联系人已保存至文件\n");
}
//加载联系人
void Load_file()
{
	long file_size;
	FILE *fp2 = fopen("test.txt", "r");
	if (fp2 == NULL)
	{
		assert(0);
	}
	//obtain file size
	fseek(fp2, 0, SEEK_END);
	file_size = ftell(fp2);
	rewind(fp2);

	//allocate memory to contain whole file
	char *buffer = (char *)malloc(sizeof(char)*file_size);
	if (buffer == NULL)
	{
		perror("malloc:");
	}
	size_t result = fread(buffer, 1, file_size, fp2);
	printf("%s\n", buffer);
	//if (result != file_size)
	//{
	//	assert(0);
	//}
	fclose(fp2);
	fp2 = NULL;
	free(buffer);
	printf("加载联系人成功\n");
}

//定义一个函数指针数组
//typedef void(*Func)();
int main()
{
	init();
	void(*Func[])() =
	{
		empty,
		add_person,
		del_person,
		search_person,
		update_person,
		show_all_person,
		clear_all_person,
		sort_person,
		Save_to_file,
		Load_file
	};
	while (1)
	{
		int choice = meau();
		if (choice<0 ||choice >= sizeof(Func)/sizeof(Func[0]))
		{
			printf("您的输入有误,请重新输入\n");
			continue;
		}
		else if (choice == 0)
		{
			break;
		}
		(*Func[choice])();
	}
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值