一个简单的通讯录。。。

 上课的时候老师布置了一个作业,利用结构体实现一个简单地通讯录,这可是我们大一的时候学期末的课设题目啊,不过还好现在的水平比之前高了那么一点。。


实现一个通讯录;

通讯录可以用来存储1000个人的信息,每个人的信息包括:

姓名、性别、年龄、电话、住址


提供方法:

1. 添加联系人信息

2. 删除指定联系人信息

3. 查找指定联系人信息

4. 修改指定联系人信息

5. 显示所有联系人信息

6. 清空所有联系人

7. 以名字排序所有联系人


这个是通讯录的主要功能。


这个比较大,所以我们写在三个文件里。

首先是头文件:

#pragma once//宏定义,避免文件多次编译。。。

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


#define MAX_NAME 10//使用简单宏定义可用宏代替一个在程序中经常使用的常量,方便程序的修改
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 20
#define MAX 1000

//人信息的结构体的定义
typedef struct People
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int  age;
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}peo;

//人数的结构体定义
typedef struct Contact
{
	peo con[MAX];
	int count;
}contact;

//枚举,在下面使用的switch case 语句中,不用关心函数的顺序对齐,比较方便
enum OP
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	MODIFY,
	SHOW,
	CLEAR,
	SORT
};

//函数声明
void init_contact(contact *pcon);
void add_contact(contact *pcon);
void del_contact(contact *pcon);
void search_contact(contact *pcon);
void modify_contact(contact *pcon);
void show_contact(contact *pcon);
void clear_contact(contact *pcon);
void sort_contact(contact *pcon);


函数实现部分:

#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"

//初始化通讯录
void init_contact(contact *pcon)
{
	pcon->count = 0;
}

//添加联系人
void add_contact(contact *pcon)
{
	if (pcon->count >= MAX)
	{
		printf("电话本已满,无法添加");
		return;
	}
	printf("请输入名字:");
	scanf("%s", pcon->con[pcon->count].name);
	printf("请输入性别:");
	scanf("%s", pcon->con[pcon->count].sex);
	printf("请输入年龄:");
	scanf("%d", &pcon->con[pcon->count].age);
	printf("请输入电话:");
	scanf("%s", pcon->con[pcon->count].tele);
	printf("请输入地址:");
	scanf("%s", pcon->con[pcon->count].addr);
    pcon->count++;
    printf("添加成功!\n");
}

//内部查找函数
static int find(contact *pcon,const char *name)//name用const保护,名字不被改变
{
	int i = 0;
	for (i = 0; i < pcon->count; i++)
	{
		if (strcmp(name, pcon->con[i].name) == 0)
			return i;
	}
	return -1;
}

//删除联系人
void del_contact(contact *pcon)
{
	char name[MAX_NAME];
	int i = 0;
	printf("请输入要删除的人的姓名");
	scanf("%s", &name);
	int ret = find(pcon,name);
	if (ret == -1)
	{
		printf("要删除的人不存在!\n");
		return;
	}
	else
	{
		for (i = ret; i < pcon->count - 1; i++)
		{
			pcon->con[i] = pcon->con[i + 1];//从要删除的那位开始,后面依次向                                                         //前覆盖
		}
	}
	pcon->count--;
	printf("删除成功\n");
}

//查找联系人
void search_contact(contact *pcon)
{
	char name[MAX_NAME];
	int i = 0;
	printf("请输入要查找的人的姓名");
	scanf("%s", &name);
	int ret = find(pcon, name);
	if (ret == -1)
	{
		printf("要查找的人不存在\n");
		return;
	}
	else
	{
		printf("%10s   %5s   %d    %12s    %20s\n" ,
			pcon->con[ret].name,
			pcon->con[ret].sex,
			pcon->con[ret].age,
			pcon->con[ret].tele,
			pcon->con[ret].addr);
	}
}

//修改联系人
void modify_contact(contact *pcon)
{
	char name[MAX_NAME];
	int i = 0;
	printf("请输入要修改的人的姓名");
	scanf("%s", &name);
	int ret = find(pcon, name);
	if (ret == -1)
	{
		printf("要修改的人不存在\n");
		return;
	}
	else
	{
		printf("请输入名字:");
		printf("%s", pcon->con[ret].name);
		printf("请输入性别:");
		printf("%s", pcon->con[ret].sex);
		printf("请输入年龄:");
		printf("%d", pcon->con[ret].age);
		printf("请输入电话:");
		printf("%s", pcon->con[ret].tele);
		printf("请输入地址:");
		printf("%s", pcon->con[ret].addr);
	}
}

//显示联系人
void show_contact(contact *pcon)
{
	int i = 0;
	printf("%10s   %5s   %5s    %12s    %20s\n",
		"name", "sex", "age", "tele", "addr");
	for (i = 0; i < pcon->count; i++)
	{
		printf("%10s   %5s   %5d    %12s    %20s\n",
			pcon->con[i].name,
			pcon->con[i].sex,
			pcon->con[i].age,
			pcon->con[i].tele,
			pcon->con[i].addr);
	}
}

//清空联系人
void clear_contact(contact *pcon)
{
	pcon->count = 0;
	printf("清空成功\n");
}

//排序联系人,此函数用的是冒泡排序
void sort_contact(contact *pcon)
{
	int i = 0;
	int j = 0;
	peo tmp;
	for (i = 0; i < pcon->count - 1; i++)
	{
		for (j = 0; j < pcon->count - 1 - i; j++)
		{
			if (strcmp(pcon->con[j].name, pcon->con[j + 1].name)>0)
			{
				tmp = pcon->con[j];
				pcon->con[j + 1] = pcon->con[j];
				pcon->con[j] = tmp;
			}
		}
	}
	printf("排序完成\n");
}


测试部分:

#define _CRT_SECURE_NO_WARNINGS 1

#include"contact.h"

//简易菜单
void menu()
{
	printf("***************************************\n");
	printf("              通讯录                   \n");
	printf("            1.添加                     \n");
	printf("            2.删除                     \n");
	printf("            3.查找                     \n");
	printf("            4.修改                     \n");
	printf("            5.显示                     \n");
	printf("            6.清空                     \n");
	printf("            7.以名字排序               \n");
	printf("            0.EXIT                     \n");
	printf("***************************************\n");
}


void test()
{
	contact mycon;
	init_contact(&mycon);
	int input = 1;
	
	while (input)
	{
		menu();
		printf("请输入选择:");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			add_contact(&mycon);
			break;
		case DEL:
			del_contact(&mycon);
			break;
		case SHOW:
			show_contact(&mycon);
			break;
		case SEARCH:
			search_contact(&mycon);
			break;
		case MODIFY:
			modify_contact(&mycon);
			break;
		case CLEAR:
			clear_contact(&mycon);
			break;
		case SORT:
			sort_contact(&mycon);
			break;
		case EXIT:
			exit(0);
			break;
		default:
			break;
       }
    }
}

int main()
{
	test();
	system("pause");
	return 0;
}

 


这是一个简单的通讯录,以后会有更好更严谨,功能更完善的呈献给大家。希望大家能一起交流,写的不好的能多多指正。(*^__^*)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值