C语言实现通讯录

通讯录

  • include< contact.h>
    • 一,(用两个结构体存放通讯录,一个结构体存放通讯录的内容)
  • contact . c
    • 二、memset初始化结构体(sizeof初始化)
      • 也可以用malloc初始化
    • 三、\t 表示制表符
      • 输出,先打印标题
    • 四、删除数据,可以先调用删除函数,在函数里读取名字
    • 五、删除函数可以用迭代,也可以用memmove
  • test.c
    • 六、枚举oprion定义选择数字
      • 此后用数字的就直接用 枚举里的
    • 七、do while结构可以用于选择
    • 补充:扩容(对结构体中的数组扩容)

通讯录:

  1. 可以存放1000个人的信息
  2. 人的信息:名字,年龄,电话,住址,性别
  3. 增加联系人(函数)
  4. 删除联系人
  5. 查找联系人
  6. 修改联系人
  7. 排序(名字 / 年龄)

include< contact.h>

一,(用两个结构体存放通讯录,一个结构体存放通讯录的内容)

另一个结构体存放通讯录的数组

#define _CRT_SECURE_NO_WARNINGS 1(scanf函数)

#include 
#include 
#include 

#define MAX 1000 (通讯录大小)

#define NAME_MAX 20  (通讯录名字大小)
#define SEX_MAX 5		(性别大小)
#define ADDR_MAX 30     (地址最大)
#define TELE_MAX 12			(电话)
typedef struct PeoInfo
{
	char name[NAME_MAX];
	int age;
	char sex[SEX_MAX];
	char addr[ADDR_MAX];
	char tele[TELE_MAX];
}PeoInfo;
//通讯录的结构体
typedef struct Contact
{
	PeoInfo data[MAX];//存放数据
	int sz;//通讯录中有效信息的个数
}Contact;


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

//增加联系人到通讯录
void AddContact(Contact* pc);

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

void DeleteContact(Contact* pc);

contact . c

二、memset初始化结构体(sizeof初始化)

也可以用malloc初始化

pc->data = (PeoInfo*)malloc(DEFAULT_SZ*sizeof(PeoInfo))

三、\t 表示制表符

输出,先打印标题

四、删除数据,可以先调用删除函数,在函数里读取名字

五、删除函数可以用迭代,也可以用memmove

#define _CRT_SECURE_NO_WARNINGS 1

#include "contact.h"
//初始化
void InitContact(Contact* pc)
{
	assert(pc);
	pc->sz = 0;
	memset(pc->data, 0, sizeof(pc->data));
}
// 增加联系人
void AddContact(Contact* pc)
{
	assert(pc);
	if (pc->sz == MAX)
	{
		printf("通讯录满了,无法添加\n");
		return;
	}
	//输入联系人
	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);

	pc->sz++;
	printf("增加联系人成功\n");
}
// 打印
void ShowContact(const Contact* pc)
{
	assert(pc);
	int i = 0;
	
	printf("%-10s\t%-5s\t%-5s\t%-13s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
	for (i = 0; i < pc->sz; i++)
	{
		printf("%-10s\t%-5d\t%-5s\t%-13s\t%-20s\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[])
{
	int i = 0;
	for (i = 0; i < pc->sz; i++)
	{
	//名字相等,需要用函数 strcmp
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}

	return -1;//找不到
}
//删除数据
void DeleteContact(Contact* pc)
{
	char name[NAME_MAX] = { 0 };
	if (pc->sz == 0)
	{
		printf("通讯录为空,无法删除\n");
		return;
	}
	printf("请输入要删除人的名字:>");
	scanf("%s", name);
	//查找指定联系人
	int pos = FindByName(pc, name);
	if (pos == -1)
	{
		printf("要删除的人不存在\n");
		return;
	}
	else
	{
		//删除
		int j = 0;
		四、
		for (j = pos; j < pc->sz - 1; j++)
		{
			七、可以用memmove移动
			pc->data[j] = pc->data[j + 1];
		}
		pc->sz--;

		printf("删除指定联系人成功\n");
	}
}


void SearchContact(const contact* con)
{

}

test.c

六、枚举oprion定义选择数字

此后用数字的就直接用 枚举里的

七、do while结构可以用于选择

#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
enum Oprion
{
	EXIT,//0
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SORT,
	SHOW
};
void menu()
{
	printf("***************************************\n");
	printf("********     1.add      2.del     *****\n");
	printf("********     3.search   4.modify  *****\n");
	printf("********     5.sort     6.show    *****\n");
	printf("********     0.exit               *****\n");
	printf("***************************************\n");
}

int main()
{
	int input = 0;
	Contact con = { 0 };//通讯录
	//初始化通讯录
	InitContact(&con);

	do
	{
		menu();
		printf("请选选择:>");
		scanf("%d", &input);
		switch (input)
		{
			六、
		case ADD:
			AddContact(&con);
			break;
		case DEL:
			DeleteContact(&con);
			break;
		case SEARCH:
			SearchContact(&con);
			break;
		case MODIFY:
			break;
		case SORT:
			break;
		case SHOW:
			ShowContact(&con);
			break;
		case EXIT:
			printf("退出通讯录\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while (input);

	return 0;
}

补充:扩容(对结构体中的数组扩容)

void check_capacity(Contact* pc)
{
	if (pc->sz == pc->capacity)
	{
		//增加容量
		PeoInfo* ptr = (PeoInfo*)realloc(pc->data, (pc->capacity + INC)*sizeof(PeoInfo));
		if (ptr != NULL)
		{
			pc->data = ptr;
			pc->capacity += INC;
			printf("增容成功\n");
		}
		else
		{
			perror("add_contact::realloc");
			return;
		}
	}
}

你可能感兴趣的:(C语言系统学习,c语言,开发语言)