结构体实现简单的静态通讯录(1)

10 篇文章 1 订阅

前言:本篇文章主要介绍了基于结构体实现的一个简单通讯录,这个通讯录可以包含1000个人的容量,包含了增加联系人信息、删除指定联系人信息、查找联系人信息、修改指定联系人信息、显示所有联系人信息、
清空所有联系人、以及按名字排序所有联系人。

通讯录功能:
1.增加联系人信息
2.删除指定联系人信息
3.查找联系人信息
4.修改指定联系人信息
5.显示所有联系人信息
6.清空所有联系人
7.按名字排序所有联系人

参考代码:
contact.h
#ifndef __CONTACT_H__
#define __CONTACT_H__  //防止头文件被多次引入

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<stdlib.h>
#pragma warning(disable:4996)

#define MAX 1000
enum SLECT
{
	EXIT,
	ADD,
	DELE,
	SEARCH,
	ALERT,
	SHOW,
	EMPTY,
	SORT
};
typedef struct People
{
	char name[20];
	char sex[10];
	int  age;
	char tele[20];
	char addr[30];
}people;

typedef struct Contact
{
	people data[MAX];
	int count;
}contact;

void Add_people(contact *book);
void Search_people(contact *book);
void Dele_people(contact *book);
void Alert_people(contact *book);
void Show_people(contact *book);
void Sort_people(contact *book);
void Empty_people(contact *book);
void Init_contact(contact *book);

#endif //__CONTACT_H__  

contact.c
#include"contact.h"
//增加联系人
void Add_people(contact *book)
{
	assert(book != NULL);
	if (book->count == MAX)
	{
		printf("通讯录已满\n");
		return;
	}
	else
	{
		printf("请输入姓名:");
		scanf("%s", book->data[book->count].name);
		printf("请输入性别:");
		scanf("%s", book->data[book->count].sex);
		printf("请输入年龄:");
		scanf("%d", &book->data[book->count].age);
		printf("请输入电话:");
		scanf("%s", book->data[book->count].tele);
		printf("请输入地址:");
		scanf("%s", book->data[book->count].addr);
		book->count++;
		printf("添加成功\n");
	}
}
//只在本源文件内使用,加上static改变链接属性,使用更加安全
//函数的作用是返回输入姓名的下标
static int find_people(contact *book)
{
	char names[20];
	printf("请输入姓名:");
	scanf("%s", names);
	int i = 0;
	for (; i < book->count; i++)
	{
		if (0 == strcmp(book->data[i].name, names))
		{
			return i;
		}
	}
	return -1;
}
//删除联系人
void Dele_people(contact *book)
{
	if (book->count == 0)
	{
		printf("通讯录已空\n");
		return;
	}
	else
	{
		int ret = find_people(book);
		if (ret < 0)
		{
			printf("查无此人\n");
			return;
		}
		else
		{
			int i = ret;
			for (; i < book->count - 1; i++)
			{
				book->data[i] = book->data[i + 1];
			}
			book->count--;
		}
	}
}
//修改联系人信息
void Alert_people(contact *book)
{
	int ret = find_people(book);
	if (ret < 0)
	{
		printf("查无此人\n");
		return;
	}
	else
	{
		printf("请输入要修改的姓名:");
		scanf("%s", book->data[ret].name);
		printf("请输入要修改的性别:");
		scanf("%s", book->data[ret].sex);
		printf("请输入要修改的年龄:");
		scanf("%d", &book->data[ret].age);
		printf("请输入要修改的电话:");
		scanf("%s", book->data[ret].tele);
		printf("请输入要修改的地址:");
		scanf("%s", book->data[ret].addr);
		printf("修改成功\n");
	}
}
//搜索指定联系人
void Search_people(contact *book)
{
	int ret = find_people(book);
	if (ret < 0)
	{
		printf("没有查找到该联系人\n");
		return;
	}
	else
	{
		printf("名字:%s 性别:%s 年龄:%d 电话:%s 地址:%s\n",
			book->data[ret].name,
			book->data[ret].sex,
			book->data[ret].age,
			book->data[ret].tele,
			book->data[ret].addr);
	}	
}
//打印所以联系人信息
void Show_people(contact *book)
{
	if (book->count == 0)
	{
		printf("此通讯录为空\n");
		return;
	}
	else
	{
		int i = 0;
		printf("%-5s\t%-5s\t%-3s\t%-12s\t%-12s\n", "名字", "性别", "年龄", "电话", "地址");
		for (; i < book->count; i++)
		{
			printf("%-5s\t%-5s\t%-3d\t%-12s\t%-17s\n",
				book->data[i].name,
				book->data[i].sex,
				book->data[i].age,
				book->data[i].tele,
				book->data[i].addr);
		}
	}
}
//初始化通讯录
void Init_contact(contact *book)
{
	int size = sizeof(book->data);
	book->count = 0;
	memset(book->data, 0, size);
}
//清空通讯录
void Empty_people(contact *book)
{
	book->count = 0;
	printf("清空成功\n");
}
//按姓名排序通讯录
void Sort_people(contact *book)
{
	if (book->count > 1)
	{
		int i = 0;
		for (; i < book->count - 1; i++)
		{
			int j = 0;
			for (; j < book->count - 1 - i; j++)
			{
				if (strcmp(book->data[j].name, book->data[j + 1].name))
				{
					people temp = book->data[j];
					book->data[j] = book->data[j + 1];
					book->data[j + 1] = temp;
				}
			}
		}
	}
	printf("排序成功\n");
}

test.c
#include"contact.h"

void menu()
{
	printf("********通讯录(1)********\n");
	printf("***1.Add       2.Dele****\n");
	printf("***3.Search    4.Alter***\n");
	printf("***5.Show      6.Empty***\n");
	printf("***7.Sort      0.Exit****\n");
	printf("*************************\n");
}

int main()
{
	int input = 0;
	contact book;
	Init_contact(&book);
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch(input)
		{
			case ADD:
				Add_people(&book);
				break;
			case DELE:
				Dele_people(&book);
				break;
			case SEARCH:
				Search_people(&book);
				break;
			case ALERT:
				Alert_people(&book);
				break;
			case SHOW:
				Show_people(&book);
				break;
			case EMPTY:
				Empty_people(&book);
				break;
			case SORT:
				Sort_people(&book);
				break;
			default:
				printf("输入有误,请重新输入\n");
				break;
		}
	} while (input);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值