实现通讯录

liat.h

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

typedef struct massage//联系人信息
{
	char age[10];
	char number[15];
    char name[15];
	char sex[5];
	char address[25];
}massage;

typedef struct list//通讯录
{
	massage num[1000];
	int count;
}list;

void inint_list(list* p);//清空通讯录
void add_people(list* p);//添加联系人
void sub_people(list* p);//删除联系人
void search_people(list* p);//查找联系人
void change_people(list* p);//修改联系人
void display_people(list* p);//打印通讯录
void bubble_sort_people(list* p);//按名字排序


list.c(实现函数)

#include "list.h"
#pragma warning(disable:4996)
list list1;

void main_menu()//主菜单页面
{
	printf("***************************************\n");
	printf("****1,(初始化/清空)通 讯 录**********\n");
	printf("****2,添   加   联   系   人**********\n");
	printf("****3,删   除   联   系   人**********\n");
	printf("****4,查   找   联   系   人**********\n");
	printf("****5,修   改   联   系   人**********\n");
	printf("****6,打   印   通   讯   录**********\n");
	printf("****7,排   序   通   讯   录**********\n");
	printf("****8,保   存   通   讯   录**********\n");
	printf("****9,加   载   通   讯   录**********\n");
	printf("****0,退   出   通   讯   录**********\n");
	printf("***************************************\n");
}

void inint_list(list* p)//清空通讯录的函数
{
	int size=sizeof(p->num);
	p->count=0;
	memset(p->num,0,size);
}

int find_people(list* p,char* people_name)//辅助函数,查找是否存在某个联系人
{
	int i=0;
	for(i=0;i<(p->count);i++)
	{
		if(strcmp((p->num[i].name),people_name)==0)
		{
			return i;
		}
	}
	return -1;
}

void change_menu()//修改联系人时的修改菜单
{
	printf("*************************\n");
	printf("***请选择要修改的选项****\n");
	printf("**1,姓名****2,性别*******\n");
	printf("**3,年龄****4,电话*******\n");
	printf("**5,地址****0,返回上一级*\n");
	printf("*************************\n");
}

void add_people(list* p)//添加联系人的函数
{
	if((p->count)>1000)
	{
		printf("通讯录已满\n");
	}
	if((p->count)<=1000)
	{
    printf("请输入新联系人姓名\n");
	scanf("%s",p->num[p->count].name);
	printf("请输入新联系人性别\n");
	scanf("%s",p->num[p->count].sex);
	printf("请输入新联系人年龄\n");
	scanf("%s",p->num[p->count].age);
	printf("请输入新联系人电话\n");
	scanf("%s",p->num[p->count].number);
	printf("请输入新联系人地址\n");
	scanf("%s",p->num[p->count].address);
	(p->count)++;
	}
}

void save(list* p)//把通讯录保存到文件里
{
	int size=p->count;
	int index=sizeof(massage);
	FILE* op=fopen("save.massage","wb");
	int i;
	for(i=0;i<size;i++)
	{
		fwrite(&(p->num[i]),1,index,op);
	}
	printf("save successed!\n");
	fclose(op);
}

void load(list* p)//加载已保存的文件的函数
{
	int size=sizeof(massage);
	FILE* lo=fopen("save.massage","rb");
	int i=0;
	while(!feof(lo))
	{
		fread(&p->num[i],size,1,lo);
		i++;
	}
	p->count=i-1;
	printf("load successed!\n");
	fclose(lo);
}

void sub_people(list* p)//删除联系人的函数
{
	int i=0;
	char sub_people[15]={0};
	int ret=0;
	printf("请输入你要删除的人的姓名\n");
	scanf("%s",sub_people);
	ret=find_people(p,sub_people);
	if(ret!=-1)
	{
		for(i=ret;i<(p->count)+1;i++)
		{
			p->num[i]=p->num[i+1];
		}
		p->count--;
		printf("删除成功\n");
	}
	else
	{
		printf("通讯录中没有找到要删除的人\n");
	}
}

void search_people(list* p)//查找联系人的函数
{
	int i=0;
	int ret=0;
	char name[20]={0};
	printf("请输入要查找人的姓名\n");
	scanf("%s",name);
	ret=find_people(p,name);
	if(ret!=-1)
	{
		printf("性别是:%s\n",p->num[ret].sex);
		printf("住址是:%s\n",p->num[ret].address);
		printf("年龄是:%s\n",p->num[ret].age);
		printf("电话号码是:%s\n",p->num[ret].number);
		putchar(10);
	}
	else
	{
		printf("通讯录中没有要查找的人\n");
	}
}

void change_people(list* p)//修改联系人的函数
{
	char name[20]={0};
	int ret=0;
	int input=0;
	printf("请输入想要修改的人的姓名\n");
	scanf("%s",name);
	ret=find_people(p,name);
	if(ret!=-1)
	{
		printf("此人的信息如下:\n");
		printf("姓名:%s\n",p->num[ret].name);
		printf("性别:%s\n",p->num[ret].sex);
		printf("年龄:%s\n",p->num[ret].age);
		printf("住址:%s\n",p->num[ret].address);
		printf("电话号码:%s\n",p->num[ret].number);
	do
	{
	change_menu();
	printf("请输入要修改的选项\n");
	scanf("%d",&input);
	    switch(input)
	    {
	    case 1:printf("请输入新的姓名:\n");
		    scanf("%s",p->num[ret].name);
		    break;
	    case 2:printf("请输入新的性别:\n");
			scanf("%s",p->num[ret].sex);
		    break;
	    case 3:printf("请输入新的年龄:\n");
			scanf("%s",p->num[ret].age);
		    break;
	    case 4:printf("请输入新的电话:\n");
			scanf("%s",p->num[ret].number);
		    break;
	    case 5:printf("请输入新的地址:\n");
			scanf("%s",p->num[ret].address);
		    break;
	    case 0:printf("返回上一级\n");
		    break;
	    default:
		       printf("输入错误\n");
	    }
	}
	    while(input);
	}
	else
	{
		printf("此人不存在\n");
	}
}

void display_people(list* p)//打印通讯录的函数
{
	int i=0;
	printf("所有人的信息如下\n");
	for(i=0;i<(p->count);i++)
	{
		printf("名字:%10s\n",p->num[i].name);
		printf("性别:%10s\n",p->num[i].sex);
		printf("年龄:%10s\n",p->num[i].age);
		printf("电话:%10s\n",p->num[i].number);
		printf("地址:%10s\n",p->num[i].address);
		putchar(10);
	}
}

void bubble_sort_people(list* p)//给通讯录排序
{
	massage temp;
	int i=0;
	int j=0;
	for(i=0;i<(p->count)-1;i++)
	{
		for(j=0;j<(p->count)-i-1;j++)
		{
			if(strcmp(p->num[j].name,p->num[j+1].name)>0)
			{
				temp=p->num[j];
				p->num[j]=p->num[j+1];
				p->num[j+1]=temp;
			}
		}
	}
}
				

test.c(测试)

#include "list.h"
int main()//主函数
{
	int choose=0;
	inint_list(&list1);
	do
	{
	main_menu();
	printf("请选择\n");
	scanf("%d",&choose);
	    switch(choose)
	    {
	    case 1:
		    inint_list(&list1);
		    break;
	    case 2:
		    add_people(&list1);
		    break;
	    case 3:
		    sub_people(&list1);
		    break;
	    case 4:
		    search_people(&list1);
		    break;
	    case 5:
		    change_people(&list1);
		    break;
	    case 6:
		    display_people(&list1);
		    break;
	    case 7:
		    bubble_sort_people(&list1);
		    break;
		case 8:
			save(&list1);
			break;
		case 9:
			load(&list1);
			break;
		case 0:
		    printf("退出通讯录\n");
		    break;
	    default:
		    printf("输入错误\n");
		    break;
	    }
	}
	while(choose);
	system("pause");
	return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值