黑马程序员-c语言-通讯录的实现

来源:互联网 发布:同志手机聊天软件 编辑:程序博客网 时间:2024/05/16 13:03
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"> ------</span><a target=_blank target="_blank" href="http://www.itheima.com/" style="color: rgb(51, 102, 153); text-decoration: none; font-family: Arial; font-size: 14px; line-height: 26px;">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!</a><span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"> -------</span>
////  main.c//  telNum////  Created by leon on 15/6/27.//  Copyright (c) 2015年 Leon. All rights reserved.//#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[100];//定义联系人的个数int totalContactCount=0;//接受用户输入烦人编号int fno;//定义数据文件保存的位置char *filePath="telbook.data";/***************    函数的声明   ***************/int validateInput(int num,int min, int max);void init();void doAdd();void doDelete();void doUpdate();void doList();void doSearchByName();void writeFile();int main (int argc,const char * argv[]) {        init();    printf("通讯录初始化完成:\n");        while(1){                printf("\n");        //软件的界面显示出来        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);                //判断编号是否合法        validateInput(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;        }                                    }                }int validateInput(int num,int min, int max){    if(num<min || num>max){        printf("非法的输入!");        return 1;    }        return 0;}//添加联系人/* 思路: 1、提示用户输入姓名和电话号码 2、接受用户输入的内容 3、保存到联系人数组 4、写入到文件中  */void doAdd(){        printf("您选择的是添加联系人,请按提示操作:\n");        //  1、提示用户输入姓名    printf("请输入联系人姓名:(*注意联系人姓名中间不能有空格)\n");    //totalContactCount = 0    //  2、接收用联系人    scanf("%s",contacts[totalContactCount].name);    //  3、提示用户输入电话号码    printf("请输入联系人电话:(*注意联系人电话号码中间不能有空格)\n");    //  4、接受电话号码    scanf("%s",contacts[totalContactCount].telNum);    //5、确认添加    int flag;    printf("你确认要添加数据吗?1.确认 0.取消\n");    scanf("%d",&flag);    if(flag){                //  6、联系人的个数+1        totalContactCount ++;        //  7、把联系人信息写入文件中         writeFile();    }}//删除联系人/* 思路: 1、让用户输入要删除的数据的编号 2.判断编号再次是否合法 3、让用户再次确认删除 4、开始删除数组元素 5、删除文件内容 */void doDelete(){        printf("您选择的是删除联系人,请按提示操作:\n");    doList();            //  1、让用户输入要删除的数据的编号    int no;    printf("请输入要删除的联系人的编号:\n");    scanf("%d",&no);    //2.判断编号再次是否合法(编号不能大于联系人个数)    if(validateInput(no,1,totalContactCount)){        return ;    }    //3、让用户再次确认删除    int flag;    printf("删除联系人后,数据将无法恢复,你确认要删除吗?1.确认 0.取消\n");    scanf("%d",&flag);    if(flag){                //4、开始删除数组元素        //   1)删除的元素正好是数组的最后一个元素        if(no == totalContactCount){            totalContactCount--;        }else{                        //      只需要让联系人个数-1            //   2)如果删除的元素不是数组的最后一个元素                        for(int i=no;i<totalContactCount;i++){                //元素的移动覆盖                 contacts[no-1] = contacts[no];            }            totalContactCount --;         }        //  联系人数量-1         //5、同步更新内容        printf("数据更新成功");    }}//修改联系人/* 思路: 1、提示输入要修改的联系人编号 2、判断编号是否合法 3、请用户输入新的姓名、电话 4、请用户再次确认修改 5、开始修改用户信息 6、更新到文件中 */void doUpdate(){        printf("您选择的是联系修改人,请按提示操作:\n");    doList();            //  1、让用户输入要删除的数据的编号    int no;    printf("请输入要删除的联系人的编号:\n");    scanf("%d",&no);    //2.判断编号再次是否合法(编号不能大于联系人个数)    if(validateInput(no,1,totalContactCount)){        return ;        }    //  3、请用户输入新的姓名、电话    char name1[NAMELEN];  char tel[NUMLEN];  printf("请输入新的姓名");  scanf("%s",name1);  printf("请输入新的电话\n");          scanf("%s",tel);        //  4、请用户再次确认修改    int flag;    printf("确认将永久修改信息,你确认修改吗?1.确定 0.取消\n");    if(flag){                //  5、开始修改用户信息        strcpy(contacts[no-1].name,name1);        strcpy(contacts[no-1].telNum,tel);                //  6、写入到文件中        writeFile();            }    }//显示所有联系人/* 思路: 前提:系统已经完成了初始化工作(如果文件存在则读取数据) 1、首先做一个判断 totalContactCount == 0 //表示没有联系人  2、如果不等于0 开始遍历,并且输出联系人的信息 */void doList(){        printf("您选择的是查看联系人,联系人如下:\n");    //判断通讯录是否为空    if(totalContactCount == 0){                printf("您的通讯录为空,请添加联系人");            } 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);        }     } }//搜索联系人/*思路:根据姓名查找联系人1、提示用户输入要查找的人的姓名2、遍历联系人数组,查找有没有这个人3、查找到了,把电话号码显示出来4、没有查找到 ,提示没有这个联系人 */void doSearchByName(){        printf("您选择的是搜索联系人,请按提示操作:\n");    char name[NAMELEN];    //1、提示用户输入要查找的人的姓名    printf("请输入要查找的用户名:\n");    scanf("%s",name);        //2、遍历联系人数组,查找有没有这个人    for(int i=0;i<totalContactCount;i++){        //1)输入的姓名和cintacts[i].name比较        if(strcmp(name,contacts[i].name)==0){            //2)打印出姓名相应的电话号码            printf("您搜索的联系人%s的电话号码是:%s\n",name,contacts[i].telNum);            break;//循环停止        }            //3、没有查找到 ,提示没有这个联系人        if(i==totalContactCount){            printf("对不起,查无此人!\n");        }    }               }//通讯录初始化/* 1、尝试性读取数据文件 2、如果读取成功,说明文件存在 如果存在,要读取联系人数据,保存到联系人数组  contacts 3、如果读取失败,说明我们是第一次使用通讯录 如果是第一次使用 1)创建联系人数据文件 2)把当前联系人的个数写入到文件中 totalContactCount  */ 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);         }//写数据到文件中/* 思路: 1、以wb方式打开文件 2、先写联系人个数 3、写每个联系人数据 */void writeFile(){    //1、 以wb方式打开文件    FILE *fp = fopen(filePath,"wb");    //  2、先写联系人个数    fwrite(&totalContactCount,sizeof(totalContactCount),1,fp);    //3、写每个联系人数据    for(int i=0;i<totalContactCount;i++){        //每次都写入一个数组的元素        fwrite(&contacts[i],sizeof(Person),1,fp);            }    printf("文件更新成功\n");     }

1 0
原创粉丝点击