#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//1 .实现一个通讯录;
//通讯录可以用来存储1000个人的信息,每个人的信息包括:
//姓名、性别、年龄、电话(字符串)、住址
//
//提供方法:
//1. 添加联系人信息
//2. 删除指定联系人信息
//3. 修改指定联系人信息
//4. 查找指定联系人信息
//5. 打印所有联系人信息
//6. 排序所有联系人
//7. 清空全部记录
//管理(描述和组织)
//1.把基本信息抽象并描述出来(结构体)
//2.需要管理很多数据,就需要组织起来(数据结构)
//描述
struct personinfo
{
char name[1024];
char phone[1024];
};
#define MAX_PERSON_INFO_SIZE 300
//数组来组织通讯录里的用户信息
typedef struct addressbook
{
personinfo person[MAX_PERSON_INFO_SIZE];
//[0,size)表示有效元素
int size;
}addressbook;
addressbook g_address_book; //全局变量
//全局变量初始化
void init()
{
g_address_book.size=0;
for(int i=0; i<MAX_PERSON_INFO_SIZE; i++)
{
g_address_book.person[i].name[0]='\0';
g_address_book.person[i].phone[0]='\0';
}
}
int menu()
{
int choice=0;
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 退出\n");
printf("===========\n");
printf("请输入你的选择");
scanf("%d",&choice);
return choice;
}
void empty()
{
//这个函数没有用
}
void addpersoninfo()
{
printf("新增联系人\n");
personinfo* person_info=&g_address_book.person[g_address_book.size];
if(g_address_book.size>=MAX_PERSON_INFO_SIZE)
{
printf("新增联系人失败\n");
return;
}
printf("请输入联系人的姓名");
//指针来简化结构体成员的名称,必须获取一个指针
scanf("%s",person_info->name);
printf("请输入联系电话");
scanf("%s",person_info->phone);
++g_address_book.size;
printf("新增联系人成功\n");
}
void delpersoninfo()
{
printf("删除联系人\n");
printf("请输入要删除的序号");
int id=0;
scanf("%d",&id);
if(id<0 || id>=g_address_book.size)
{
printf("删除失败,输入的序号有误");
return;
}
g_address_book.person[id]
=g_address_book.person[g_address_book.size-1];
--g_address_book.size;
printf("删除联系人成功\n");
}
void findpersoninfo()
{
printf("查找联系人\n");
//根据姓名查找电话
printf("请输入要查找的姓名");
char name[1024]={0};
scanf("%s",name);
for(int i=0;i<g_address_book.size; ++i)
{
personinfo* info=&g_address_book.person[i];
if(strcmp(info->name,name)==0)
{
printf("[%d] %s\t%s\n",i,
info->name,info->phone);
}
}
printf("查找联系人成功\n");
}
void updatepersoninfo()
{
printf("更新联系人\n");
if(g_address_book.size<=0)
{
printf("通讯录为空\n");
return;
}
printf("请输入要修改的序号");
int id=0;
scanf("%d",&id);
if(id<0||id>=g_address_book.size)
{
printf("修改失败,输入的号码不存在\n");
return;
}
personinfo* info=&g_address_book.person[id];
printf("请输入新的姓名(%s)\n",info->name);
char name[1024]={0};
scanf("%s",name);
if(strcmp(name,"*")!=0)
{
strcpy(info->name,name);
}
printf("请输入新的电话(%s)\n",info->phone);
char phone[1024]={0};
scanf("%s",phone);
if(strcmp(phone,"*")!=0)
{
strcpy(info->phone,phone);
}
printf("更新联系人成功\n");
}
void printallpersoninfo()
{
printf("打印全部联系人\n");
for(int i=0; i<g_address_book.size; ++i)
{
personinfo* info=&g_address_book.person[i];
printf("[%d] %s\t%s\n",i,info->name,info->phone);
}
printf("共打印了%d条数据\n",g_address_book.size);
printf("打印全部联系人成功\n");
}
void sortpersoninfo()
{
}
void clearpersoninfo()
{
printf("清空全部数据\n");
printf("你真的要清空全部数据吗? Y/N\n");
char choice[1024]={0};
scanf("%s",choice);
if(strcmp(choice,"Y")==0)
{
g_address_book.size=0;
printf("清空全部数据成功\n");
}else
{
printf("清空操作取消\n");
}
}
typedef void(*func)();//定义函数指针
int main1()
{
func arr[]={
empty,
addpersoninfo,
delpersoninfo,
findpersoninfo,
updatepersoninfo,
printallpersoninfo,
sortpersoninfo,
clearpersoninfo
};//函数指针数组
while(1)
{
int choice=menu();
//判定用户输入的合法性
if(choice<0 || choice>=sizeof(arr)/sizeof arr[0])
{
printf("您的输入有误\n");
continue;
}
if(choice==0)
{
printf("退出\n");
break;
}
arr[choice]();//调用
}
system("pause");
return 0;
}