******************* 实现通讯录编写 *******************

来源:互联网 发布:elasticsearch5 java 编辑:程序博客网 时间:2024/06/06 03:47

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



  实现通讯录编写


//虽然是参考着打下来的,但对于我来说真的是太不容易了.....

//但是我想说:....今天我很努力!!

//                                           2015.3.24  am 03:28


#include <stdio.h>

//导入头文件

#include <string.h>

//定义宏(联系人数组的长度,姓名长度,电话号码长度)

#define NAME_LEN 22

#define TELNUM_LEN 16

#define LEN 100


//定义结构体

typedef struct{

    

    //定义联系人姓名

   char name[NAME_LEN];

   char telNum[TELNUM_LEN];

}Person;//给结构体起一个别名


//定义联系人数组

Person contacts[LEN];


//定义变量保存联系人个数


int totalContactCount =0;


//定义变量保存文件的名称

char *filePath ="telbook.data";


//定义函数并且声明

void doAdd();

void doDelete();

void doUpdate();

void doList();

void doSearchByName();

void init();

void writeToFile();


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

   //定义变量记录编号

   int num = 0;

    //调用初始化方法

    init();

    

    //退出标志

   int flag = 1;

    

   while(flag){

       //编写控制程序

        printf("\n\n**************************\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",&num);

        //判断编号是否合法

       if(num<0 || num >6){

            printf("输入错误!\n");

        }else{

            

            //根据用户输入的编号,执行不同的功能

       switch (num) {

           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");

                flag =0;

               break;

                

           default:

               break;

            }

        }

    }

   return 0;

}


void init(){

    

    printf("系统正在初始化...\n");

    

    //定义文件指针,并且打开文件

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

    //如果能够打开这个文件(说明这个文件已经存在了)

    

   if(fp != NULL){

        //把文件中存放联系人数量读取出来

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

        //根据联系人得数量,把联系人信息全部读取出来,放到联系人数组中

        

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

            

            //一次读取每个联系人得信息

            //contacts[0]

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

        }

    }else{

        //如果文件打开失败了

       //创建文件

        fp = fopen(filePath,"w");

        //写入联系人数量

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

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

        

    }

    //关闭文件指针

    fclose(fp);

    fp =NULL;

    

    printf("系统初始化完成!\n");

}


/*

  把数组的内容重新写入到文件中

1)打开文件,w

2)判断是否打开成功

3)先把联系人的数量写入到文件中

4)把每个联系人的数据,都写入到文件中

5)关闭文件

*/


void writeToFile(){

    

    //打开文件

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

    //判断是否打开成功

   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);

    fp =NULL;

    

}



/*

   查询所有的联系人

 思路:

 1)先判断 totalContactCount == 0

 如果等于0 表示没有联系人,提示:通讯录空无一人

 

 不等于0 打印所有的联系人

 

 2)循环

 

 3)遍历输出所有的联系人信息

 */




void doList(){

    

    printf("您正在执行的是查询所有的联系人的操作:\n");

    

    //先判断totalContacCount == 0

   if(totalContactCount == 0){

        

        printf("您的通讯录还很寂寞\n");

    }else{

        

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

        //不等于0打印所有的联系人

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

            //遍历输出所有的联系人信息

            printf("%d\t\t%s\t\t\t%s\t\t\n",i+1,

                   contacts[i].name,contacts[i].telNum);

            

        }

        

    }

    

}

/*

   添加联系人

 1) 提示用户输入联系人信息

 2)接收联系人信息

 3)提示输入电话号码信息

 4)接收电话号码

 5)让用户再次确认添加联系人    1确认  0 取消

 6)保存联系人信息到联系人数组中

 7)让联系人的个数+1

 8) 把最新的数组,重新保存到文件中

 

 */


void doAdd(){

    

    printf("您正在执行的是添加联系人得操作:\n");

    

    //提示用户输入联系人信息

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

    //接收联系人信息

    //定义字符数组

   char name[NAME_LEN];

   char telNum[TELNUM_LEN];

    

    scanf("%s",name);

    //提示输入电话号码信息

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

    

    //接收电话号码

    scanf("%s",telNum);

    

    //让用户再次确认添加联系人    1确认  0 取消

   int nn;

    printf("请确定要添加这个联系人吗? 0.取消   1.确认\n");

    scanf("%d",&nn);

   if(nn){

        //保存联系人信息到联系人数组中

        strcpy(contacts[totalContactCount].name, name);

        strcpy(contacts[totalContactCount].telNum, telNum);

        

        //联系人得个数+1

        totalContactCount++;

        //把最新的数组,重新保存到文件中

        

        writeToFile();

    }

    

}



/*

  删除联系人

 1)提示用户输入一个要删除的联系人的编号

 2)判断编号是否合法

 3)再判断 要删除的元素 是否是数组的最后一个元素

 如果是最后一个元素,总人数-1

 如果不是最后一个元素,也就是中间的元素

 

 移动元素

 i = 编号   i<   i++

 

 a[编号-1] = a[编号]

 

 总人数-1

 

 4)同步写入到文件中

 */


void doDelete(){

    

    printf("您正在执行的时删除联系人得操作:\n");

    //提示用户输入一个要删除的联系人的编号

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

   int nn;

   //接收

    scanf("%d",&nn);

    //判断是否合法

   if(nn<1 || nn>totalContactCount){

        

       return;

        

    }

    

   int queren=0;

    printf("联系人删除后,无法恢复,请确认是否要删除: 0.取消 1.确认\n");

    scanf("%d",&queren);

   if(queren){

        //再判断要删除的元素是否是数组的最后一个元素

       if(nn == totalContactCount){

            //如果是最后一个元素,总人数-1

            totalContactCount--;

        }else{

            

            //如果不是最后一个元素,也就事中间的元素

           //移动元素

            //i = 编号  i <   i++

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

               //nn是编号,编号比下标大1

               // a[i-1] = a[i]

                contacts[i-1]=contacts[i];

                

            }

           //总人数-1

            totalContactCount--;

        }

        writeToFile();

    }

    

}



/*

   修改联系人

 1) 提示用户输入一个联系人的编号

 2) 判断编号是否合法

 3)让用户输入新的联系人姓名和电话

 4) 接收用户的输入

 5)让用户再次确认删除

 6)把原来的姓名和电话进行更新

 7)同步保存到文件中

 */


void doUpdate(){

    

    printf("您正在执行的是修改联系人得操作:\n");

    //显示所有的联系人

    doList();

    //提示用户输入一个要删除的联系人得编号

    printf("请输入一个要修改的联系人得编号:\n");

   int nn;

    scanf("%d",&nn);

    //判断输入是否合法

   if(nn<1 || nn>totalContactCount){

        //如果编号不合法,return返回

       return;

    }

   char name[NAME_LEN];

   char telNum[TELNUM_LEN];

    

    //让用户输入新的联系人姓名和电话

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

    //接收用户输入

    scanf("%s",name);

    //提示输入

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

    //接收用户输入

    scanf("%s",telNum);

    

    //让用户再次确认删除

   int queren = 0;

    

    printf("修改联系人信息后,数据无法恢复,请确认修改:0.取消   1.确认\n");

    

    scanf("%d",&queren);

    

   if(queren){

        

        //把原来的姓名和电话进行跟新

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

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

        

        writeToFile();

    }

}


/*

  搜索联系人

 1) 提示用户输入一个联系人的姓名

 2)接收这个姓名

 3)循环,遍历数组

 //进行字符串的比较

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

 //如果查找到了,输出这个联系人的电话号码

 

 //如果没有查找到,提示:没有查找到

 

 */


void doSearchByName(){

    

    printf("您正在执行的是搜索联系人得操作:\n");

   char name[NAME_LEN];

    //提示用户输入一个联系人得姓名

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

    

    //接收这个姓名

    scanf("%s",name);

    

    //循环,遍历

   int i;

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

    //进行字符串的比较

    

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

        

        //如果查找到了,输出这个联系人得电话号码

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

        

        //查到了以后,停止

           break;

        }

        

    }

    

    //如果没有找到,提示:没有查找到

   if(i == totalContactCount){

        

        printf("对不起,没有查找到 %s 这个人!\n",name);

    }

    

}




0 0
原创粉丝点击