8.2(通讯录年龄当时打印不出来)

text.c

#include"contact.h"

void menu()
{
    printf("******************************\n");
    printf("******1.add   2. del**********\n");
    printf("******3.search 4.modify********\n");
    printf("******5.show   6.sort ********\n");
    printf("******0.exit         *********\n");
    printf("******************************\n");
}

int main()
{
    int input = 0;
    struct contact con;//con 就是通信录,里面包含1000的元素和size
    initcontact(&con);
    do
    {
        menu();

        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case add:
            addcontact(&con);
            break;
        case del:
            delcontact(&con);
            break;
        case search:
            searchcontact(&con);
            break;
        case modify:
            modifycontact(&con);
            break;
        case show:
            showcontact(&con);
            break;
        case sort:
            break;
        case exit:
            printf("退出通信录\n");
            break;
        default:
            printf("选择错误\n");
            break;
        }

    } while (input);
    return 0;
}

contact.h
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

#define max 1000
#define max_name 20
#define max_sex 5
#define max_tel 12
#define max_addr 30
//meiju
enum option
{
    exit,
    add,
    del,
    search,
    modify,
    show,
    sort

};

struct peoinof
{
    char name[max_name];
    int age;
    char sex[max_sex];
    char tel[max_tel];
    char addr[max_addr];
};


struct contact
{
    struct peoinof date[max];
    int size;
};
//初始化
void initcontact(struct contact*pb);
//增加联系人
void addcontact(struct contact*ps);
//展示
void showcontact( const struct contact*pa);
//删除
void delcontact(struct contact*ps);
//查找
void searchcontact(struct contact*ps);
//修改
void modifycontact(struct contact*ps);
 

contact.c

#include"contact.h"

void initcontact(struct contact* pb)
{
    memset(pb->date, 0, sizeof(pb->date));
    pb->size = 0;//设置通讯录开始没有元素
}

void addcontact(struct contact* ps)
{
    if (ps->size == max)
    {
        printf("通讯录已满,无法增加");
    }
    else
    {
        printf("请输入名字:>");
        scanf("%s", ps->date[ps->size].name);
        /*printf("请输入年龄:>");
        scanf("%d", ps->date[ps->size].age);*/
        printf("请输入性别:>");
        scanf("%s", ps->date[ps->size].sex);
        printf("请输入电话:>");
        scanf("%s", ps->date[ps->size].tel);
        printf("请输入地址:>");
        scanf("%s", ps->date[ps->size].addr);

        ps->size++;
        printf("添加成功\n");
    }

}

void showcontact(const struct contact* pa)
{
    if (pa->size == 0)
    {
        printf("通讯录为空格\n");
    }
    else
    {
        int i = 0;
        printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\t\n", "名字", "年龄", "性别", "电话", "地址");
        for (i = 0; i < pa->size; i++)
        {
            printf("%-20s\t%-4d\t%-5s\t%-12s\t%-30s\t\n", 
                pa->date[i].name,
                pa->date[i].age,
                pa->date[i].sex,
                pa->date[i].tel,
                pa->date[i].addr);

        }
    
    }
}


//static 修饰的函数只能在contact .c中实现
 static  int findname(struct contact*ps,char name[max_name])
{
        int i = 0;
    
        for (i = 0; i < ps->size; i++)
        {
            if (0 == (strcmp(ps->date[i].name, name)))
            {
                return i;
            }
        }
        return -1;
}

void delcontact(struct contact*ps)
{
    char name[max_name];
    printf("请输入要删除的名字:>");
    scanf("%s", name);
    //查找删除人的位置,找到了返回下标
    //找不到返回-1
    int pos = findname(ps, name);
    

    
    if (pos == -1)
    {
        printf("要删除的元素不存在\n");
    }
    else
    {
        int j = 0;
        for (j = pos; j < ps->size - 1; j++)
        {
            ps->date[j] = ps->date[j + 1];
        }
        ps->size--;
        printf("删除成功\n");
    }
}


void searchcontact(struct contact*ps)
{
    char name[max_name];
    printf("请输入要删除的名字:>");
    scanf("%s", name);

    int pos = findname(ps, name);

    if (pos == -1)
    {
        printf("要查找的人不存在\n");
    }
    else
    {
        printf("%-20s\t%-4s\t%-5s\t%-12s\t%-30s\t", "名字", "年龄", "性别", "电话", "地址");

            printf("%-20s\t%-4d\t%-5s\t%-12s\t%-30s\t",
                ps->date[pos].name,
                ps->date[pos].age,
                ps->date[pos].sex,
                ps->date[pos].tel,
                ps->date[pos].addr);
    }

}

void modifycontact(struct contact*ps)
{
    char name[max_name];
    printf("请输入要修改人的名字:>");
    scanf("%s", name);

    int pos = findname(ps, name);
    if (pos == -1)
    {
        printf("要修改人的信息不存在\n");
    }
    else{
        printf("请输入名字:>");
        scanf("%s", ps->date[ps->size].name);
        /*printf("请输入年龄:>");
        scanf("%d ", ps->date[ps->size].age);*/
        printf("请输入性别:>");
        scanf("%s", ps->date[ps->size].sex);
        printf("请输入电话:>");
        scanf("%s", ps->date[ps->size].tel);
        printf("请输入地址:>");
        scanf("%s", ps->date[ps->size].addr);

        printf("修改完成\n");
    }
}


//void delcontact(struct contact*ps)
//{
//    char name[max_name];
//    printf("请输入要删除的名字:>");
//    scanf("%s", name);
//    //查找删除人的位置
//    int i = 0;
//
//    for (i = 0; i < ps->size; i++)
//    {
//        if (0 == (strcmp(ps->date[i].name, name)))
//        {
//            break;
//        }
//    }
//    if (i == ps->size)
//    {
//        printf("要删除的元素不存在\n");
//    }
//    else
//    {
//        int j = 0;
//        for (j = i; j < ps->size-1; j++)
//        {
//            ps->date[j] = ps->date[j + 1];
//        }
//        ps->size--;
//        printf("删除成功\n");
//    }
//}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值