通讯录(3)

接着上一篇。
 

上一篇的指定删除还有一定的问题,我让用户输入要删除的联系人的名字,然后查询这个名字是否存在,再去删除。但是这里忽略了一个问题,如果两人名字一样呢?其它也有这样的问题,年龄,电话号码前几位等等,我们都不可避免地想到会出现相同的情况。今天在考虑这个问题的时候,我调起程序测试代码,看到了这么一个画面:

 5对应的是展示功能。图里可以看到,前面的序号是独一无二的,这个序号我称它们为代号。代号既然展示中会出现带代号,那么我也可以用代号来完成删除。在删除之前不再问用户是否需要看联系人信息,而是固定展示一次,这样用户得到信息后,后面让用户输入要删除的代号即可,也就不担心相同联系人情况了。用一个变量接收代号后,这个变量-1也就是指定联系人的下标。不过还有一个问题,如果用户输入的代号也不存在呢?那while一下

所以如果一直不输入正确,那就一直重新下去。

这样指定删除的代码就又改善了一下

 static int SpecifyDel(Contact* ps)
{
    assert(ps);
    int j = 0;
    int i = 0;
    int m = 0;
    printf("请输入要删除的代号: >");
    while (scanf("%d", &m) != EOF)
    {
        if (m < 1 || m > ps->sz)
        {
            printf("此代号不存在,请重新输入!\n");
            continue;
        }
        else
            break;
    }
    m -= 1;
    FILE* bin = fopen("E://recycle bin.txt", "a");//文件指针,往回收站文本文件里写入
    if (bin == NULL)
    {
        perror("ZDDel::fopen");
        printf("文件创建失败,请重新进行删除\n");
        return 1;
    }
    fprintf(bin, "姓名:%s  性别:%s  地址:%s  工作:%s  电话:%s  年龄:%d\n", ps->data[m].name, ps->data[m].gender, ps->data[m].address, ps->data[m].work, ps->data[m].number, ps->data[m].age);
    fclose(bin);
    bin = NULL;
    for (j = m; j < ps->sz - 1; j++)
    {
        ps->data[j] = ps->data[j + 1];
    }
    ps->sz--;
    printf("成功删除指定联系人\n");
    return 0;
}

没有用到FindByName,不过还是要返回数字。

当然还有一个问题,如果就是出现极其极其微小的概率,两个联系人所有信息都相等呢?这电脑也不会了,还是让用户自己先确定哪个是哪个吧......

以及存入文件时也可改成代号来主导。

一小篇博文。

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值