简易通讯录的实现

#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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值