简单通讯录的实现(未使用文件操作)

contact.h

#ifndef __CONTACT_H__
#define __CONTACT_H__

#include<stdio.h>
#include<string.h>

enum Option
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	EMPTY
};

#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_ADDR 20
#define MAX_TEL 11
#define MAX 3

struct PeoInfo
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	short age;
	char tel[MAX_TEL];
	char addr[MAX_ADDR];
}PeoInfo;

typedef struct Contact
{
	struct PeoInfo data[MAX];
	unsigned int sz;
}Contact,*pContact;

void InitContact(pContact pc);
void AddContact(pContact pc);
void ShowContact(pContact pc);
void DelContact(pContact pc); 
void FindContact(pContact pc);
void ModContact(pContact pc);
void EmptyContact(pContact pc);
int SearchContact(pContact pc,char* name);

#endif //__CONTACT_H__

contact.c

#include"contact.h"


void InitContact(pContact pc)
{
	pc->sz = 0;
	memset(pc->data,0,sizeof(pc->data));
	//printf("%d\n",sizeof(pc->data));
}

void AddContact(pContact pc)
{
	if(pc->sz == MAX)
	{
		printf("通讯录已满!\n");
		return;
	}
	printf("请输入姓名->");
	scanf("%s",pc->data[pc->sz].name);
	printf("请输入性别->");
	scanf("%s",pc->data[pc->sz].sex);
	printf("请输入年龄->");
	scanf("%d",&pc->data[pc->sz].age);
	printf("请输入电话->");
	scanf("%s",pc->data[pc->sz].tel);
	printf("请输入住址->");
	scanf("%s",pc->data[pc->sz].addr);
	pc->sz++;
	printf("添加成功!\n");
}

void ShowContact(pContact pc)
{
	unsigned int i = 0;
	printf("姓名\t性别\t年龄\t电话\t\t住址\n");
	for(i=0;i<pc->sz;i++)
	{
		printf("%s\t%s\t%d\t%s\t%s\n",
			pc->data[i].name,pc->data[i].sex,pc->data[i].age,
			pc->data[i].tel,pc->data[i].addr);
	}
}

int SearchContact(pContact pc,char* name)
{
	int i = 0;
	int pos = -1;
	for(i=0;i<pc->sz;i++)
	{
		if(strcmp(name,pc->data[i].name) == 0)
		{
			pos = i;
		}
	}
	return pos;
}

void FindContact(pContact pc)
{
	int pos = -1;
	char name[MAX_NAME] = {0};
	if(pc->sz == 0)
	{
		printf("没有可查的记录!\n");
		return ;
	}
	printf("请输入要查询联系人的姓名->");
	scanf("%s",name);
	pos = SearchContact(pc,name);
	if(pos == -1)
	{
		printf("未查到联系人信息!\n");
	}
	else
	{
		printf("姓名\t性别\t年龄\t电话\t\t住址\n");
		printf("%s\t%s\t%d\t%s\t%s\n",
			pc->data[pos].name,pc->data[pos].sex,pc->data[pos].age,
			pc->data[pos].tel,pc->data[pos].addr);
	}
}

void DelContact(pContact pc)
{
	int i = 0;
	int pos = -1;
	char name[MAX_NAME] = {0};
	if(pc->sz == 0)
	{
		printf("没有可以删除的记录!\n");
		return ;
	}
	printf("请输入要删除记录的姓名->");
	scanf("%s",name);
	pos = SearchContact(pc,name);
	if(pos == -1)
	{
		printf("未查到联系人信息!\n");
	}
	else
	{
		for(i=pos;i<pc->sz;i++)
		{
			pc->data[i] = pc->data[i+1];
		}
		pc->sz--;
		printf("删除成功!\n");
	}
}

void ModContact(pContact pc)
{
	int pos = -1;
	char name[MAX_NAME] = {0};
	if(pc->sz == 0)
	{
		printf("没有可修改的联系人!\n");
		return ;
	}
	printf("请输入要修改联系人的姓名->");
	scanf("%s",name);
	pos = SearchContact(pc,name);
	if(pos == -1)
	{
		printf("未查到此联系人!\n");
	}
	else
	{
		printf("请输入姓名->");
		scanf("%s",pc->data[pos].name);
		printf("请输入性别->");
		scanf("%s",pc->data[pos].sex);
		printf("请输入年龄->");
		scanf("%d",&pc->data[pos].age);
		printf("请输入电话->");
		scanf("%s",pc->data[pos].tel);
		printf("请输入住址->");
		scanf("%s",pc->data[pos].addr);
		printf("修改成功!\n");
	}
}

void EmptyContact(pContact pc)
{
	int i = 0;
	int j = 0;
	if(pc->sz == 0)
	{
		printf("通讯录本来就是空的!\n");
		return ;
	}
	for(i=0;i<pc->sz;i++)
	{
		for(j=0;j<pc->sz-1;j++)
		{
			pc->data[j] = pc->data[j+1];
		}
	}
	pc->sz -= pc->sz;
	printf("已清空!\n");
}

test.c

#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("**                  0.Exit                 **\n");
	printf("*********************************************\n");
}

int main()
{
	int input = 0;
	struct Contact my_con;
	InitContact(&my_con);
	do
	{
		menu();
		printf("请选择要进行的操作->");
		scanf("%d",&input);
		switch(input)
		{
		case EXIT:
			break;
		case ADD:
			AddContact(&my_con);
			break;
		case DEL:
			DelContact(&my_con);
			break;
		case SEARCH:
			FindContact(&my_con);
			break;
		case MODIFY:
			ModContact(&my_con);
			break;
		case SHOW:
			ShowContact(&my_con);
			break;
		case EMPTY:
			EmptyContact(&my_con);
			break;
		default:
			printf("输入有误!\n");
			break;
		}
	}while(input);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41245381/article/details/80508693
今日推荐