C语言实现通讯录

代码实现(环境 Visual Studio 2017)

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

#pragma warning(disable: 4996)

static int People_num_all = 0;//通讯录人数


struct Address_Lsit
{
    int age;
    int phone_num;
    char name[20];
    char sex[3];
    char Address[50];
};

void menu()
{
    printf("----------------------------------------------\n");
    printf("--------------    通讯录菜单     -------------\n");
    printf("----------------------------------------------\n");
    printf("\n");
    printf("    1.添加联系人信息\n 2.删除指定联系人信息\n   3.查找指定联系人信息\n   4.修改指定联系人信息\n   5.显示所有联系人信息\n   6.清空所有联系人\n 7.以名字排序所有联系人\n  0.退出");
    printf("\n");
    printf("----------------------------------------------\n");
    printf("请选择:");
}
//交换两个联系人信息
void exchange(struct Address_Lsit *AL1, struct Address_Lsit *AL2)
{
    struct Address_Lsit AL3;
    strcpy(AL3.name, AL1->name);//交换名字
    strcpy(AL1->name, AL2->name);
    strcpy(AL2->name, AL3.name);

    strcpy(AL3.sex, AL1->sex);//交换性别
    strcpy(AL1->sex, AL2->sex);
    strcpy(AL2->sex, AL3.sex);

    AL3.age = AL1->age;//交换年龄
    AL1->age = AL2->age;
    AL2->age = AL3.age;

    AL3.phone_num = AL1->phone_num;//交换电话
    AL1->phone_num = AL2->phone_num;
    AL2->phone_num = AL3.phone_num;

    strcpy(AL3.Address, AL1->Address);//交换地址
    strcpy(AL1->Address, AL2->Address);
    strcpy(AL2->Address, AL3.Address);
}

void show(struct Address_Lsit *AL)//----------显示信息
{
    printf("姓名:%s\t", AL->name);
    printf("性别:%s\t", AL->sex);
    printf("年龄:%d\t", AL->age);
    printf("电话:%d\t", AL->phone_num);
    printf("地址:%s\n", AL->Address);
}

void add(struct Address_Lsit * AL)----------------------添加联系人信息
{
    AL += People_num_all++;
    printf("请输入:姓名\n");
    scanf("%s", AL->name);
    printf("请输入:性别\n");
    scanf("%s", AL->sex);
    printf("请输入:年龄\n");
    scanf("%d", &(AL->age));
    printf("请输入:电话\n");
    scanf("%d", &(AL->phone_num));
    printf("请输入:地址\n");
    scanf("%s", AL->Address);
    printf("添加完成\n");
}

void del(struct Address_Lsit * AL)//----------------------删除指定联系人信息
{
    int flag = 0;//标志位
    char w_name[20] = { 0 };
    printf("请输入删除联系人的姓名\n");
    scanf("%s", w_name);
    for (int i = 0; i < People_num_all; i++)
    {
        if (!(strcmp((AL + i)->name, w_name)))
        {
            flag = 1;//找到了
            if(i != People_num_all)
            exchange((AL + i), (AL + People_num_all - 1));//和最后一个交换 
            break;
        }
    }
    if (flag)
    {
        printf("删除完成\n");
        People_num_all--;//总人数减一
    }
    else
    {
        printf("没有找到\n");
    }
}

void find(struct Address_Lsit * AL)//---------------------------------查找指定联系人信息
{
    char w_name[20] = { 0 };
    printf("请输入要查找联系人的姓名\n");
    scanf("%s", w_name);
    for (int i = 0; i < People_num_all; i++)
    {
        if (!(strcmp((AL + i)->name, w_name)))
        {
            printf("已找到:\n");
            show((AL + i));
            return 0;
        }
    }
    printf("不存在该联系人\n");

}
void amend(struct Address_Lsit * AL)//-----------------------修改指定联系人信息
{
    char w_name[20] = { 0 };
    printf("请输入要修改联系人的姓名\n");
    scanf("%s", w_name);
    for (int i = 0; i < People_num_all; i++)
    {
        if (!(strcmp((AL + i)->name, w_name)))
        {
            AL += i;
            printf("请输入:新姓名\n");
            scanf("%s", AL->name);
            printf("请输入:新性别\n");
            scanf("%s", AL->sex);
            printf("请输入:新年龄\n");
            scanf("%d", &(AL->age));
            printf("请输入:新电话\n");
            scanf("%d", &(AL->phone_num));
            printf("请输入:新地址\n");
            scanf("%s", AL->Address);
            printf("添加完成\n");
            return 0;
        }
    }
    printf("不存在该联系人\n");
}
void show_all(struct Address_Lsit * AL)//显示所有联系人信息
{
    for (int i = 0; i < People_num_all; i++)
    {
        show(AL + i);
    }
    printf("显示完成\n");
}
void empty(struct Address_Lsit * AL)//清空所有联系人
{
    People_num_all = 0;
    printf("完成清空\n");
}
void sort(struct Address_Lsit * AL)//以名字排序所有联系人
{
    int i = 0;
    int j = 0;
    int k = 0;

    char exname[20] = {0};
    for ( i = 0; i < People_num_all - 1; i++)
    {
        k = 0;
        strcpy(exname, (AL + i)->name);
        for (j = i+1,k=i; j < People_num_all; j++)
        {
            if (strcmp((AL + j)->name, exname) < 0)
            {
                k = j;
                strcpy(exname, (AL + j)->name);
            }
        }
        if (k)
        {
            exchange((AL + i), (AL + k));
        }
    }

    printf("排序完成\n");
}

void operation(int x, struct Address_Lsit * AL)
{
    switch (x)
    {
    case 1: add(AL); break;
    case 2: del(AL); break;
    case 3: find(AL); break;
    case 4: amend(AL); break;
    case 5: show_all(AL); break;
    case 6: empty(AL); break;
    case 7: sort(AL); break;
    case 0: break;
    default: printf("请重新输入");
    }
}

int main()
{
    int x = 1;
    struct Address_Lsit AL[1000];
    while (x)
    {
        menu();
        scanf("%d", &x);
        operation(x, AL);
        Sleep(500);
    }
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值