【C语言】---模拟实现通讯录

【C语言】 模拟实现通讯录

基本思想

  • 1.建立一个结构体,通过结构体数组存储通讯录中每个人的信息。
    2.使用静态数组来对通讯录经行增删查改的系列操作。

实现的功能

  • 1.添加通讯录成员(add)
    2.删除通讯录成员(del)
    3.查找通讯录成员(search)
    4.修改通讯录成员信息(modify)
    5.显示通讯录成员信息(show)
    6.清空所有联系人(empty)
    7.以名字排序所有联系人(sort)

源码如下
Contact.h

#ifndef __CONTACT_H__
#define __CONTACT_H__

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<errno.h>
#include<string.h>

enum Option
{
	EXIT,//退出程序
	ADD,//增添联系人
	DEL,//删除联系人
	SEARCH,//查找联系人
	MODIFY,//修改联系人信息
	SHOW,//展示联系人
	EMPTY,//清空通讯录
	SORT,//按名字排序通讯录
};

#define MAX 1000

#define MAX_NAME 20
#define SEX_MAX 5
#define NATION_MAX 10
#define TALE_MAX 12
#define ADDR_MAX 30
#define REALTION_MAX 20



typedef struct Peolnfo
{
	char name[MAX_NAME];
	char sex[SEX_MAX];
	short int  age;
	char nation[NATION_MAX];
	char tale[TALE_MAX];
	char addr[ADDR_MAX];
	char realtion[REALTION_MAX];
}Peolnfo;


typedef struct Contact
{
	Peolnfo data[MAX];//存放数据
	int sz;//通讯录的有效信息个数
}Contact;


void InitContact(Contact* pcon);//初始化通讯录
void AddContact(Contact* pcon);//增加通讯录信息
void ShowContact(const Contact* pcon);//展示通讯录信息
void DelContact(Contact* pcon);//删除通讯录信息
void SearchContact(Contact* pcon);//查找通讯录个人信息
void EmptyContact(Contact* pcon); //清空通讯录
void SortContact(Contact* pcon);//按名字排序通讯录

#endif //__CONTACT_H__

Contact.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"Contact.h"

void InitContact(Contact* pcon)
{
	assert(pcon);
	pcon->sz = 0;
	memset(pcon->data, 0, sizeof(pcon->data));//初始化数组
}

void AddContact(Contact* pcon)
{
	if (pcon->sz == MAX)
	{
		printf("通讯录已满,无法添加\n");
	}
	else
	{
		printf("请输入姓名:>\n");
		scanf("%s", pcon->data[pcon->sz].name);
		printf("请输入年龄:>\n");
		scanf("%d", &(pcon->data[pcon->sz].age));
		printf("请输入性别:>\n");
		scanf("%s", pcon->data[pcon->sz].sex);
		printf("请输入民族:>\n");
		scanf("%s", pcon->data[pcon->sz].nation);
		printf("请输入电话:>\n");
		scanf("%s", pcon->data[pcon->sz].tale);
		printf("请输入家庭住址:>\n");
		scanf("%s", pcon->data[pcon->sz].addr);
		printf("请输入关系:>\n");
		scanf("%s", pcon->data[pcon->sz].realtion);

		pcon->sz++;
		printf("添加成功\n");
	}
}


void ShowContact(const Contact* pcon)
{
	int i = 0;
	printf("%-15s\t%-5s\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "民族", "电话", "地址", "关系");
	for (i = 0; i < pcon->sz; i++)
	{
		printf("%-15s\t%-5d\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n",
			pcon->data[i].name,
			pcon->data[i].age,
			pcon->data[i].sex,
			pcon->data[i].nation,
			pcon->data[i].tale,
			pcon->data[i].addr,
			pcon->data[i].realtion);
	}
}

static int FindEnty(Contact* pcon, char name[])
{
	int i = 0;
	assert(pcon);
	for (i = 0; i < pcon->sz; i++)
	{
		if (strcmp(pcon->data[i].name, name)==0)
		{
			return i;
		}
	}
	return -1;

}
void SearchContact(Contact* pcon)
{
	assert(pcon);
	char name[MAX_NAME] = { 0 };
	int pos = 0;
	printf("请输入需要查找到联系人\n");
	scanf("%s", &name);
	pos = FindEnty(pcon, name);
	int i = 0;
	if (pos == -1)
	{
		printf("该联系人不存在,无法查找\n");
	}
	else
	{
		printf("%-15s\t%-5s\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "民族", "电话", "地址", "关系");

		printf("%-15s\t%-5d\t%-5s\t%-5s\t%-5s\t%-12s\t%-20s\n",
			pcon->data[i].name,
			pcon->data[i].age,
			pcon->data[i].sex,
			pcon->data[i].nation,
			pcon->data[i].tale,
			pcon->data[i].addr,
			pcon->data[i].realtion);

	}
}

void DelContact(Contact* pcon)
{
	int pos = 0;
	char name[MAX_NAME] = { 0 };
	assert(pcon);
	if (pcon->sz == 0)
	{
		printf("该通讯录为空,无法删除\n");
	}
	else
	{
		printf("请输入需要删除的联系人;>");
		scanf("%s", &name);
		pos = FindEnty(pcon, name);
		if (pos == -1)
		{
			printf("该联系人不存在,无法实现删除\n");
		}
		else
		{

			int i = 0;
			for (i = 0; i < pcon->sz - 1; i++)
			{
				pcon->data[i] = pcon->data[i + 1];
			}
			pcon->sz--;
			printf("删除成功\n");
		}
	}
}

void EmptyContact(Contact* pcon)//清空通讯录
{
	assert(pcon);
	int i = 0;
	while (pcon->sz)
	{
		pcon->sz--;
	}
	if (pcon->sz == 0)
	{
		printf("清空成功\n");
	}
}


void SortContact(Contact* pcon)//按名字排序
{
	assert(pcon);
	int b = 0;
	int i = 0;
	int e = 0;
	int temp = 0;
	char name[MAX_NAME] = { 0 };
	char sex[SEX_MAX] = { 0 };
	short int  age = { 0 };
	char nation[NATION_MAX] = { 0 };
	char tale[TALE_MAX] = { 0 };
	char addr[ADDR_MAX] = { 0 };
	char realtion[REALTION_MAX] = { 0 };
	int a = pcon->sz-1;
	for (b = 0; b < a; b++)
	{
		for (i = 0; i< a  - b; i++)
		{
			int c = strcmp(pcon->data[i].name, pcon->data[i + 1].name);
			if (c == 1)
			{
				strcpy(name, pcon->data[i].name);
				strcpy(pcon->data[i].name, pcon->data[i + 1].name);
				strcpy(pcon->data[i + 1].name, name);

				strcpy(sex, pcon->data[i].sex);
				strcpy(pcon->data[i].sex, pcon->data[i + 1].sex);
				strcpy(pcon->data[i + 1].sex, sex);

				e = pcon->data[i].age;
				pcon->data[i].age = pcon->data[i + 1].age;;
				pcon->data[i + 1].age = e;

				strcpy(nation, pcon->data[i].nation);
				strcpy(pcon->data[i].nation, pcon->data[i + 1].nation);
				strcpy(pcon->data[i + 1].nation, nation);

				strcpy(tale, pcon->data[i].tale);
				strcpy(pcon->data[i].tale, pcon->data[i + 1].tale);
				strcpy(pcon->data[i + 1].tale, tale);

				strcpy(addr, pcon->data[i].addr);
				strcpy(pcon->data[i].addr, pcon->data[i + 1].addr);
				strcpy(pcon->data[i + 1].addr, addr);

				strcpy(realtion, pcon->data[i].realtion);
				strcpy(pcon->data[i].realtion, pcon->data[i + 1].realtion);
				strcpy(pcon->data[i + 1].realtion, realtion);
			}
		}

	}

}




Test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"
void menu()
{
	printf("***************************************************\n");
	printf("****************1.add          2.del     **********\n");
	printf("****************3.search       4.modify  **********\n");
	printf("****************5.show         6.empty   **********\n");
	printf("****************7.sort         0.exit    **********\n");
	printf("***************************************************\n");

}
void test()
{
	int input = 0;
	Contact con;//通讯录
	InitContact(&con);

	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			AddContact(&con);
			break;
		case EMPTY:
			EmptyContact(&con);
			break;
		case SORT:
			SortContact(&con);
			break;
		case MODIFY:
			break;
		case DEL:
			DelContact(&con);
			break;
		case SHOW:
			ShowContact(&con);
			break;
		case SEARCH:
			SearchContact(&con);
			break;
		case EXIT:
			printf("退出通讯录\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}
	} while (input);
}
int main()
{
	test();
	system("pause");
	return 0;
}

发布了45 篇原创文章 · 获赞 271 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/L19002S/article/details/102791050