#include <stdio.h>

/* 年月日*/
struct Year
{
    char year[20];
    char yue[10];
    char day[10];
};
/* 记录页*/
struct Page
{
    char name[60];
    char email[100];
    char add[100];
    char qq[60];
    struct Year date;
};

/*名字查询*/
Page* queryName(Page* n, int count, char name[10]);
/*添加用户*/
void setPage(Page* n);
/*显示一个用户*/
void showPage(Page* n);
/*显示通讯录*/
void showAll(Page* n, int count);

const int size_max = 10;
int main()
{
    int count = 0;
    int b;
    Page user[size_max] = {};
    do{
        /*操作输入*/
        printf("输入操作 1-添加,2-通讯录,3-编号查询,4-名字查询,5-退出程序\n");
        scanf("%d", &b);
        switch (b)
        {
        case 1:
            printf("添加通讯录....\n");
            if (count == size_max)
            {
                printf("通讯录已满,请尝试其他操作!\n");
                continue;
            }
            /*添加操作*/
            setPage(&user[count]);
            count++;
            continue;
        case 2:
            printf("查看通讯录列表.....\n");
            showAll(user, count);
            continue;
        case 3:
            printf("查询用户.....\n");
            /*空表检测*/
            if (count == 0) {
                printf("列表中没有用户,请尝试添加后再次查询!\n\n");
                continue;
            }
            else{
                printf("请输入你需要查询的用户编号[0~9]:");
                int c; scanf("%d", &c);
                if (c >= count) {
                    printf("无此编号的用户!\n\n");
                    continue;
                }
                /*显示指定编号用户*/
                showPage(&user[c]);
                continue;
            }
        case 4:
            printf("查询用户.....\n");
            /*空表检测*/
            if (count == 0) {
                printf("列表中没有用户,请尝试添加后再次查询!\n\n");
                continue;
            }
            else {
                printf("请输入你需要查询的用户名字!");
                char name[100] = {};
                scanf("%s", name);
                if (name[0] == 0) {
                    printf("取消查询!\n\n");
                    continue;
                }
                /*查找指定户名*/
                Page* qn = queryName(user, count, name);
                /*找到就显示*/
                if (qn)showPage(qn);
                else printf("查无此人!\n\n");
                continue;
            }
        default:
            printf("感谢使用!\n");
            break;
        }
        break;
    }while (1);
    return 0;
}

void setPage(Page* n)
{
    Year a;
    printf("请输入用户姓名:"); scanf("%s", n->name);
    printf(" 手机号:");        scanf("%s", n->add);
    printf(" QQ号码:");        scanf("%s", n->qq);
    printf(" 邮箱:");          scanf("%s", n->email);
    printf("出生日期(年-月-日)\n");
    printf(" 年:");            scanf("%s", a.year);
    printf(" 月:");            scanf("%s", a.yue);
    printf(" 日:");            scanf("%s", a.day);
    printf("\n");
    n->date = a;
}

void showPage(Page* n)
{
    if (n == 0) { return; }

    printf("用户姓名:%s\n", n->name);
    printf("手机号:  %s\n", n->add);
    printf("QQ号码:  %s\n", n->qq);
    printf("电子邮箱:%s\n", n->email);
    printf("出生日期:%s-%s-%s\n\n", n->date.year, n->date.yue, n->date.day);
}
void showAll(Page* n, int count)
{
    if (count == 0) {
        printf("当前列表中没有任何用户,请尝试添加后再次查询!\n");
        return;
    }
    for (int i = 0; i < count; showPage(n + i), ++i);
}

bool is_namesame(char c1[10], char c2[10])
{
    while (*c1 && *c2) { if (*c1++ != *c2++)return false; }
    return true;
}
Page* queryName(Page* n, int count, char name[10])
{
    while (count--) {
        Page* p = n + count;
        if (is_namesame(p->name, name)) return p;
    }
    return 0;
}