黑马程序员——C基础之通讯录

------- iOS培训、android培训、java培训、期待与您交流! ----------

#include <stdio.h>

#include <string.h>


#define N 100

#define NAMELEN 22

#define NUMLEN 12


typedef struct{

    char name[NAMELEN];

    char telNum[NUMLEN];

}Person;

Person contacts[N];

int totalContactCount = 0;

int fno;

char *filePath = "telbook.data";

int main(int argc,const char * argv[]) {

    void doadd();

    void doDelete();

    void doupDate();

    void dolist();

    void dosearchByName();

    int validateIput(int num,int min,int max);

    void init();

    void writeFile();

    init();

    printf("通讯里初始化完成!\n");

    while (1) {

        printf("\n");

        printf("**********欢迎使用通讯录 **********\n");

        printf("********** 1、添加联系人 **********\n");

        printf("********** 2、删除联系人 **********\n");

        printf("********** 3、修改联系人 **********\n");

        printf("********** 4、查看联系人 **********\n");

        printf("********** 5、搜索联系人 **********\n");

        printf("********** 6、退出系统   **********\n");

        printf("********************************\n\n");

        printf("请选择1-6之间的功能编号:\n");

        scanf("%d",&fno);

        validateIput(fno,1,6);

        switch (fno) {

            case 1:

                doadd();

                break;

            case 2:

                doDelete();

                break;

            case 3:

                doupDate();

                break;

            case 4:

                dolist();

                break;

            case 5:

                dosearchByName();

                break;

            case 6:

                printf("系统正在退出...\n");

                printf("系统已经退出!\n");

                return 0;

                break;

                

            default:

                break;

        }

    }

    return 0;

}


int validateIput(int num,int min,int max){

    if (num < min || num > max) {

        printf("非法输入!\n");

        return 1;

    }

    return 0;

}


/**

 *  添加联系人

 */

void doadd(){

    void writeFile();

    printf("您选择的是添加联系人,请按提示操作:\n");

    printf("请输入联系人姓名:(*注意联系人姓名中间不能有空格)\n");

    scanf("%s",contacts[totalContactCount].name);

    printf("请输入联系人电话:(*注意联系人电话中间不能有空格)\n");

    scanf("%s",contacts[totalContactCount].telNum);

    int flag;

    printf("您确认要添加数据码? 1.确认 0.取消\n");

    scanf("%d",&flag);

    if (flag) {

        totalContactCount++;

        writeFile();

    }

}

/**

 *  删除联系人

 */

void doDelete(){

    void writeFile();

    void dolist();

    printf("您选择的是删除联系人,请按提示操作:\n");

    dolist();

    int no;

    printf("请输入要删除的联系人的编号:\n");

    scanf("%d",&no);

    if (validateIput(no, 1,totalContactCount)) {

        return ;

    }

    int flag;

    printf("删除联系人后,数据无法恢复,您确认要删除吗? 1.确认 0.取消\n");

    scanf("%d",&flag);

    if (flag) {

        if (no == totalContactCount) {

            totalContactCount--;

        }else{

            for (int i = no; i <totalContactCount; i++) {

                contacts[no-1] = contacts[no];

            }

            totalContactCount--;

        }

        writeFile();

    }

}

/**

 *  修改联系人

 */

void doupDate(){

    void writeFile();

    void dolist();

    printf("您选择的是修改联系人,请按提示操作:\n");

    dolist();

    int no;

    printf("请输入要删除的联系人的编号:\n");

    scanf("%d",&no);

    if (validateIput(no, 1,totalContactCount)) {

        return ;

    }

    char name1[NAMELEN];

    char tel[NUMLEN];

    printf("请输入联系人新的姓名:(*注意联系人姓名中间不能有空格)\n");

    scanf("%s",name1);

    printf("请输入联系人新的电话:(*注意联系人电话中间不能有空格)\n");

    scanf("%s",tel);

    int flag;

    printf("确认后,信息将永久修改,您确认要修改吗? 1.确认 0.取消\n");

    scanf("%d",&flag);

    if (flag) {

        strcpy(contacts[no-1].name, name1);

        strcpy(contacts[no-1].telNum, tel);

        writeFile();

    }

}

/**

 *  查看联系人

 */

void dolist(){

    printf("显示所有联系人,联系人数据如下:\n");

    if (totalContactCount == 0) {

        printf("您的通讯录没有小伙伴~请添加小伙伴!\n");

    }else{

        printf("编号\t姓名\t 电话\t \n");

        for (int i = 0; i <totalContactCount; i++) {

            printf("%d\t %s\t %s\t \n",i+1,contacts[i].name,contacts[i].telNum);

        }

    }

}

/**

 *  搜素联系人

 */

void dosearchByName(){

    printf("您选择的是搜索联系人,请按提示操作:\n");

    char name[NAMELEN];

    printf("请输入要查找的联系人:\n");

    scanf("%s",name);

    int i;

    for (i = 0; i < totalContactCount; i++) {

        if (strcmp(name,contacts[i].name) == 0) {

            printf("您搜索的联系人 %s的电话号码是 : %s\n",name,contacts[i].telNum);

            break;

        }

    }

    if (i ==totalContactCount) {

        printf("对不起,查无此人!\n");

    }

}


/**

 通讯录初始化

 *

 */

void init(){

    FILE *fp = fopen(filePath,"r");

    if (fp != NULL) {

        fread(&totalContactCount,sizeof(totalContactCount), 1, fp);

        for (int i =0; i <totalContactCount; i++) {

            fread(&contacts[i],sizeof(Person), 1, fp);

        }

    }else{

        fp = fopen(filePath,"wb");

        fwrite(&totalContactCount,sizeof(totalContactCount), 1, fp);

        printf("通讯录文件创建成功!\n");

    }

    fclose(fp);

}

/**

 *  写数据到文件中

 */

void writeFile(){

    FILE *fp = fopen(filePath, "wb");

    if (fp != NULL) {

        fwrite(&totalContactCount,sizeof(totalContactCount), 1, fp);

        for ( int i = 0; i <totalContactCount; i++) {

            fwrite(&contacts[i],sizeof(Person), 1, fp);

        }

        printf("写文件数据更新成功!\n");

    }

    fclose(fp);

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值