简单通讯录(以数组的方式实现增删改查)

本文介绍如何用数组创建一个基本的通讯录系统,包括增、删、改、查功能。通过定义结构体来存储联系人信息,实现通讯录的基本操作。

实现一个简单的通讯录

增删改查

简单一点可以采用数组的方式来存储元素


首先给出结构体的定义:

typedef struct PeopleInfo {
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char phone[MAX_PHONE];
	char addr[MAX_ADDR];
}PeopleInfo;

typedef struct Contact {
	PeopleInfo con[MAX];
	int size;
}Contact, *PContact;
size用于存储数组中的有效元素


头文件contact.h:

#ifndef __CONTACT_H__
#define __CONTACT_H__

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

#define MAX 1000
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_PHONE 12
#define MAX_ADDR 30

typedef struct PeopleInfo {
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char phone[MAX_PHONE];
	char addr[MAX_ADDR];
}PeopleInfo;

typedef struct Contact {
	PeopleInfo con[MAX];
	int size;
}Contact, *PContact;

void InitContact(PContact contact);
void AddContact(PContact contact);
void DelContact(PContact contact);
void DisplayContact(PContact contact);
void SearchContact(PContact contact);
void ModifyContact(PContact contact);
void EmptyContact(PContact contact);

#endif

具体实现:

#include "contact.h"

//typedef struct PeopleInfo {
//	char name[MAX_NAME];
//	int age;
//	char sex[MAX_SEX];
//	char phone[MAX_PHONE];
//	char addr[MAX_ADDR];
//}PeopleInfo;

//typedef struct Contact {
//	PeopleInfo con[MAX];
//	int size;
//}Contact, *PContact;

void InitContact(PContact contact)
{
	contact->size = 0;
	memset(contact->con, 0, MAX * sizeof(PeopleInfo));
}

void AddContact(PContact contact)
{
	if (contact->size == MAX) {
		printf("电话本满了\n");
	}
	else {
		printf("please input the information:\n");
		printf("name:");
		scanf("%s", contact->con[contact->size].name);
		printf("age:");
		scanf("%d", &contact->con[contact->size].age);
		printf("sex:");
		scanf("%s", contact->con[contact->size].sex);
		printf("phone:");
		scanf("%s", contact->con[contact->size].phone);
		printf("addr:");
		scanf("%s", contact->con[contact->size].addr);
		contact->size++;
		printf("增加成功\n");
	}
	
}

static int FindEntry(PContact contact, const char *name)
{
	int i = 0;
	for (i = 0; i < contact->size; ++i) {
		if (strcmp(name, contact->con[i].name) == 0)
			return i;
	}
	return -1;
}

void DelContact(PContact contact)
{
	if (contact->size == 0)
		printf("电话本已空\n");
	else {
		char name[MAX_NAME] = { 0 };
		printf("please input the name you wanna delete:");
		scanf("%s", name);
		int ret = FindEntry(contact, name);
		if (-1 == ret) {
			printf("找不到\n");
		}
		else {
			int i = 0;
			for (i = ret; i < contact->size - 1; ++i) {
				contact->con[i] = contact->con[i + 1];
			}
			contact->size--;
			printf("删除成功\n");
		}
	}
}

void SearchContact(PContact contact)
{
	if (contact->size == 0)
		printf("电话本已空\n");
	else {
		char name[MAX_NAME] = { 0 };
		printf("please input the name you wanna search:");
		scanf("%s", name);
		int ret = FindEntry(contact, name);
		if (-1 == ret) {
			printf("找不到\n");
		}
		else {
			printf("%5s\t%5d\t%5s\t%10s\t%10s\n",
				contact->con[ret].name,
				contact->con[ret].age,
				contact->con[ret].sex,
				contact->con[ret].phone,
				contact->con[ret].addr);
		}
	}
}

void DisplayContact(PContact contact)
{
	int i = 0;
	printf("%5s\t%5s\t%5s\t%10s\t%10s\n", "name", "age", "sex", "phone", "addr");
	for (i = 0; i < contact->size; ++i) {
		printf("%5s\t%5d\t%5s\t%10s\t%10s\n", 
			contact->con[i].name, 
			contact->con[i].age, 
			contact->con[i].sex, 
			contact->con[i].phone, 
			contact->con[i].addr);
	}
}

void ModifyContact(PContact contact)
{
	if (contact->size == 0)
		printf("电话本已空\n");
	else {
		char name[MAX_NAME] = { 0 };
		printf("please input the name you wanna modify:");
		scanf("%s", name);
		int ret = FindEntry(contact, name);
		if (-1 == ret) {
			printf("找不到\n");
		}
		else {
			printf("please input the information:\n");
			printf("name:");
			scanf("%s", contact->con[ret].name);
			printf("age:");
			scanf("%d", &contact->con[ret].age);
			printf("sex:");
			scanf("%s", contact->con[ret].sex);
			printf("phone:");	
			scanf("%s", contact->con[ret].phone);
			printf("addr:");		
			scanf("%s", contact->con[ret].addr);
			printf("修改成功\n");
		}
	}
}

void EmptyContact(PContact contact)
{
	contact->size = 0;
}


测试:

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

enum OPTION {
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	DISPLAY,
	EMPTY,
};

void menu();

int main()
{
	int flag = 1;
	Contact myContact;
	InitContact(&myContact);

	while (flag) {
		menu();
		int num = 0;
		printf("please make a choice:");
		scanf("%d", &num);
		switch (num) {
		case EXIT:
			flag = 0;
			printf("exit\n");
			break;
		case ADD:
			AddContact(&myContact);
			break;
		case DEL:
			DelContact(&myContact);
			break;
		case SEARCH:
			SearchContact(&myContact);
			break;
		case MODIFY:
			ModifyContact(&myContact);
			break;
		case DISPLAY:
			DisplayContact(&myContact);
			break;
		case EMPTY:
			EmptyContact(&myContact);
			break;
		default:
			printf("what you input is wrong\n");
			break;
		}
	}
	getchar();
	return 0;
}

void menu()
{
	printf("**********************\n");
	printf("1.增加\t2.删除\t3.查找\n");
	printf("4.修改\t5.显示\t6.置空\n");
	printf("0.退出\n");
	printf("**********************\n");
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值