编写一个通讯录,功能与以前的诺基亚手机一样,可以通过键盘进行箭头的移动,回车进入选项,用“W”键代表手机手机左键,“backspace”键代表返回上一级。能够实现基本的人性化的增删改查及文件的导入导出

来源:互联网 发布:java ocr数字识别 编辑:程序博客网 时间:2024/05/05 20:12

该系统是在linux系统下编写的,所以在windows下无法运行。但是编程的思想完全一样。读者可以深深体会。同事希望相互相互学习,共同进步。

#include<stdio.h>#include<string.h>#include"conio.h"//========================================//宏定义//========================================#definePEOPLE_MAX_NUM300#define STRING_LEN60#define MENU_PEOPLE_NUM  6              //搜索联系人,添加联系人,修改联系人,删除联系人,导出文件,导入文件#define ADD_PEOPLE_NUM   4              //姓名,电话,地址,备注(增加)#define REVISE_PEOPLE_NUM   4           //姓名,电话,地址,备注(修改)//============================================//定义结构体数组//============================================struct PEOPLE{        char name[STRING_LEN];        char tel[STRING_LEN];        char address[STRING_LEN];        char remarks[STRING_LEN];        char flag;};struct MENU{        char menu_line[STRING_LEN];        char menu_num[STRING_LEN];};struct MENU     menu[MENU_PEOPLE_NUM];          //菜单信息struct PEOPLEpeople[PEOPLE_MAX_NUM];         //联系人存储结构体数组struct PEOPLE   search[PEOPLE_MAX_NUM];         //搜索联系人存储结构体数组//===============================================//定义全局变量//===============================================int PAGE_NUM=0;//记录当前所在的页数int     SEARCH_PAGE_NUM=0;      //记录模糊搜索所在页intPAGE_PEOPLE_NUM=7;//每一页的联系人显示数int SOUSIR=0;//当前光标所在的位置intPEOPLE_NUM=0;//通讯录的总人数int     SEARCH_PEOPLE_NUM=0;    //模糊搜索联系人总人数char    FILE_NAME[STRING_LEN]={"3.txt"};char    STRING_NAME[STRING_LEN]={"0"}; //接收搜索的名字int     flag=1;                 //模糊查询标记点int     GuiGu=0;                //如果用户在没有修改,或者新增人员时,无需提示是否保存文件。用于标志int     MENU_SOUSIR=0;          //菜单界面游标int     REVISE_SEARCH_SOUSIR;    //修改联系人界面游标int     ADD_SEARCH_SOUSIR=0;    //增加联系人界面游标int     SEARCH_SOUSIR=0;          //模糊搜索游标char Add_People_ShuXin1[][STRING_LEN]=                                        {                                                "姓名:",                                                "电话:",                                                "地址:",                                                "备份:"                                        };char Add_People_ShuXin2[][STRING_LEN]=                                        {                                                " ",                                                " ",                                                " ",                                                " "                                        };//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2//===============================================//名称:        Delete_Renovate_File //功能:        刷新删除后的文件//参数:        void //返回值        void//===============================================void Delete_Renovate_File(void){        FILE *qf;        int i;        qf=fopen(FILE_NAME,"wb+");         //往文件写入数据用于显示        for(i=0;i<PEOPLE_NUM;i++)        {                if(people[i].flag!=0)                {                        fprintf(qf,"%s\t",people[i].name);                        fprintf(qf,"%s\t",people[i].tel);                        fprintf(qf,"%s\t",people[i].address);                        fprintf(qf,"%s\n",people[i].remarks);                }        }        fclose(qf);}//===============================================//名称:        Renovate_File()//功能:        刷新添加后的文件,用于显示//参数:        void //返回值        void//===============================================void  Renovate_File(void){        int i;        FILE *pf;        pf=fopen(FILE_NAME,"rb");         //从文件中读取数据用于显示        for(i=0;i<PEOPLE_NUM;i++)        {                if(feof(pf))                {                        break;                }                fscanf(pf,"%s",people[i].name);                fscanf(pf,"%s",people[i].tel);                fscanf(pf,"%s",people[i].address);                fscanf(pf,"%s",people[i].remarks);        }        fclose(pf);}//===============================================//名称:        initial_struct//功能:        读取文件,为结构体数组赋初值//参数:        void //返回值        void//===============================================void initial_struct(void){        FILE *pf;        pf=fopen(FILE_NAME,"rb");         //从文件中读取数据用于显示        int i;        for(i=0;i<PEOPLE_MAX_NUM;i++)        {                if(feof(pf))                {                        break;                }                                PEOPLE_NUM++;                fscanf(pf,"%s",people[i].name);                fscanf(pf,"%s",people[i].tel);                fscanf(pf,"%s",people[i].address);                fscanf(pf,"%s",people[i].remarks);                people[i].flag=1;        }        PEOPLE_NUM--;        fclose(pf);}//===============================================//名称:        Save_File//功能:        保存文件//参数:        void //返回值        void//===============================================void Save_File(){        int i;        int key;        FILE *fp;        fp=fopen(FILE_NAME,"ab+");        while(1)        {                system("clear");                ADD_SEARCH_SOUSIR=0;                //让游标指到首位置                if(GuiGu==0)                        //用户没有编辑任何信息,则直接退出,无需提示是否保存                {                        return ;                }                printf("===================================\n");                printf("    是否保存新增联系人至文件?     \n ");                printf("【是(Y,y)】             【否(N,n)】\n");                printf("===================================\n");                key=getch();                if(key==27||key==91)                {                        key=getch();                }                else                {                        if(key==89||key==121)           //保存新增联系人至文件                        {                                PEOPLE_NUM++;                                for(i=0;i<ADD_PEOPLE_NUM;i++)                                {                                       if(strcmp(Add_People_ShuXin2[i]," ")==0)                                        {                                                strcpy(Add_People_ShuXin2[i],"$");                                        }                                }                                strcpy(people[PEOPLE_NUM].name,Add_People_ShuXin2[0]);                                strcpy(people[PEOPLE_NUM].tel,Add_People_ShuXin2[1]);                                strcpy(people[PEOPLE_NUM].address,Add_People_ShuXin2[2]);                                strcpy(people[PEOPLE_NUM].remarks,Add_People_ShuXin2[3]);                                people[PEOPLE_NUM].flag=1;                                fprintf(fp,"%s\t\t%s\t\t%s\t\t%s\n",                                people[PEOPLE_NUM].name,people[PEOPLE_NUM].tel,people[PEOPLE_NUM].address,people[PEOPLE_NUM].remarks);                                                                system(1);                                printf("已保存!!!\n");                                sleep(1);                        }                        if(key==78||key==110)           //取消保存联系人                        {                                system("clear");                                printf("未保存!!!\n");                                sleep(1);                        }                        for(i=0;i<ADD_PEOPLE_NUM;i++)                        {                                strcpy(Add_People_ShuXin2[i]," ");                        }                                                }        GuiGu=0;        fclose(fp);        Renovate_File();        return;        }}//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//导入导出文件//===============================================//名称:        Leading_Out //功能:        导出联系人信息//参数:        void //返回值        void//===============================================void   Leading_Out(void){        FILE *fp,*fq;        char ch;        char Leading_Out_File_Name[STRING_LEN];        fp=fopen(FILE_NAME,"rb");        fq=fopen(Leading_Out_File_Name,"wb+");                system("clear");        printf("请输入保存导出文件的文件名:\n");        gets(Leading_Out_File_Name);                if(strcmp(Leading_Out_File_Name,FILE_NAME)==0)        {                printf("你输入的文件名不能被覆盖!!!\n");                sleep(1);                return ;        }                        if(fp==NULL)        {                printf("文件为空!!!\n");                sleep(1);                return ;        }        while(1)        {                fread(&ch,1,1,fp);                if(feof(fp))                {                        break;                }                fwrite(&ch,1,1,fq);        }                printf("文件导出成功!!!\n");        sleep(1);        fclose(fp);        fclose(fq);}//===============================================//名称:        Leading_In //功能:        导入联系人信息//参数:        void //返回值        void//================================================void Leading_In(void){        FILE *fp;        system("clear");        char Leading_In_File_Name[STRING_LEN];        printf("请输入你要导入的文件名:\n");        gets(Leading_In_File_Name);        fp=fopen(Leading_In_File_Name,"rb");        if(fp==NULL)        {                printf("你导入的文件为空!!!\n");                sleep(1);                return;        }                strcpy(FILE_NAME,Leading_In_File_Name);                printf("导入成功!!!\n");        sleep(1);        //        Delete_Renovate_File();                         Renovate_File();                //刷新文件}//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//修改联系人//===============================================//名称:        UpKey_Revise_People//功能:       修改联系人信息向上游动游标//参数:        void //返回值        void//===============================================void  UpKey_Revise_People(void){        if(REVISE_SEARCH_SOUSIR<=0)        {                REVISE_SEARCH_SOUSIR=REVISE_PEOPLE_NUM-1;        }        else        {                REVISE_SEARCH_SOUSIR--;        }}//===============================================//名称:        DownKey_Revise_People//功能:       修改联系人信息向下游动游标//参数:        void //返回值        void//===============================================void DownKey_Revise_People(void){        if(REVISE_SEARCH_SOUSIR>=REVISE_PEOPLE_NUM-1)        {                REVISE_SEARCH_SOUSIR=0;        }        else        {                REVISE_SEARCH_SOUSIR++;        }}//===============================================//名称:        Edit_Revise_People//功能:        修改联系人//参数:        void //返回值        void//===============================================void Edit_Revise_People(void){        GuiGu=1;        scanf("%s",Add_People_ShuXin2[REVISE_SEARCH_SOUSIR]);      }//===============================================//名称:        Revise_People_Save_File//功能:        保存修改联系人//参数:        void //返回值        void//===============================================void Revise_People_Save_File(void){        int key;        system("clear");        REVISE_SEARCH_SOUSIR=0;                //让游标指到首位置                if(GuiGu==0)                        //用户没有编辑任何信息,则直接退出,无需提示是否保存        {                return ;        }                printf("===================================\n");        printf("         是否保存修改信息?       \n ");        printf("【是(Y,y)】             【否(N,n)】\n");        printf("===================================\n");        key=getch();        if(key==27||key==91)        {                key=getch();        }        else        {                if(key==89||key==121)           //保存新增联系人至文件                {                        strcpy(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].name,Add_People_ShuXin2[0]);                        strcpy(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel,Add_People_ShuXin2[1]);                        strcpy(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].address,Add_People_ShuXin2[2]);                        strcpy(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].remarks,Add_People_ShuXin2[3]);                        Delete_Renovate_File();                 //将修改后的结构体数组写回文件                        Renovate_File();                        //再次读取文件,用于显示                }                if(key==78||key==110)                {                        system("clear");                        printf("未保存!!!\n");                        sleep(1);                }                GuiGu=0;        }}//==============================================//名称:       Revise_People_Display//功能:       显示修改联系人信息//参数:        void //返回值        void//===============================================void  Revise_People_Display(void){        int i;                               printf("==========================================\n");        printf("=>>>>>>>>>>>>修改联系人详细信息<<<<<<<<<<=\n");        printf("==========================================\n");        for(i=0;i<REVISE_PEOPLE_NUM;i++)        {                if(REVISE_SEARCH_SOUSIR==i)                {                        printf("==>");                }                else                {                        printf("   ");                }                printf("%s\t",Add_People_ShuXin1[i]);                if(strcmp(Add_People_ShuXin2[i],"$")==0)                {                        printf("\t\n");                }                else                {                                printf("%s\n",Add_People_ShuXin2[i]);                }        }        printf("==========================================\n");        printf("【编辑(W)】            【保存(Backspace)】\n");}//===============================================//名称:        Revise_People//功能:        修改联系人信息//参数:        void //返回值        void//===============================================void Revise_People(void){        int key;                strcpy(Add_People_ShuXin2[0],people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].name);        strcpy(Add_People_ShuXin2[1],people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel);        strcpy(Add_People_ShuXin2[2],people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].address);        strcpy(Add_People_ShuXin2[3],people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].remarks);        while(1)        {                system("clear");                Revise_People_Display();                  //显示修改联系人信息                key=getch();                if(key==27||key==91)                {                        key=getch();                }                else                {                        switch(key)                        {                                case 65:                        //向上移动游标                                        UpKey_Revise_People();                                        break;                                case 66:                                        DownKey_Revise_People();   //向下游动游标                                        break;                                case 87:                                        Edit_Revise_People();      //编辑修改人的信息(W键)                                        break;                                case 127:                                        Revise_People_Save_File();            //保存文件                                        return;                                        break;                                default :                                        break;                        }                }        }}//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//搜索     //===============================================//名称:        Search_Struct//功能:        初始化搜索结构体数组//参数:        void //返回值        void//===============================================void  Search_Struct(void){        int i,j=0;        char *p,*q,*top;             q=STRING_NAME;        for(i=0;i<PEOPLE_NUM;i++)        {                p=people[i].name;                top=strstr(p,q);                if(top==NULL)                {                        ;                }                else                {                                SEARCH_PEOPLE_NUM++;                                strcpy(search[j].name,people[i].name);                                strcpy(search[j].tel,people[i].tel);                                strcpy(search[j].address,people[i].address);                                strcpy(search[j].remarks,people[i].remarks);                                j++;                }        }}//===============================================//名称:        Zero_Search_Struct//功能:        搜索结构体数组清零//参数:        void //返回值        void//===============================================void Zero_Search_Struct(void){        memset(search,0,sizeof(struct PEOPLE)*PEOPLE_MAX_NUM);}//===============================================//名称:        Search_Display//功能:        显示搜索联系人信息//参数:        void //返回值        void//===============================================void Search_Display(void){        int i;        char str[STRING_LEN]={"\t"};         if((SEARCH_PAGE_NUM+1)*PAGE_PEOPLE_NUM>SEARCH_PEOPLE_NUM)        {                printf("==========================================\n");                printf("=>>>>>>>>>>>>搜索联系人详细信息<<<<<<<<<<=\n");                printf("==========================================\n");                printf("|     姓名                  电话         |\n");                printf("==========================================\n");                for(i=0;i<SEARCH_PEOPLE_NUM-(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM);i++)                {                        if(SEARCH_SOUSIR==i)                        {                                printf("==>");                        }                        else                        {                                printf("   ");                        }                        //显示查找到的名字:                         if(strcmp(search[i].name,"$")==0)                        {                                printf("%-20s\t",str);                        }                               else                        {                                printf("%-20s\t",search[i].name);                        }                        //显示查找到的电话                        if(strcmp(search[i].tel,"$")==0)                        {                                printf("%-20s\t \n",str);                        }                               else                        {                                printf("%-20s\t \n",search[i].tel);                        }                }                for(i=0;i<(SEARCH_PAGE_NUM+1)*PAGE_PEOPLE_NUM-SEARCH_PEOPLE_NUM;i++)                {                        printf("                                          \n ");                      }                printf("==========================================\n");                printf("【查看(W) 【编辑(g)】【返回(backspace)】\n");        }         else        {                printf("==========================================\n");                printf("=>>>>>>>>>>>>搜索联系人详细信息<<<<<<<<<<=\n");                printf("==========================================\n");                printf("|     姓名                  电话         |\n");                printf("==========================================\n");                for(i=0;i<PAGE_PEOPLE_NUM;i++)                {                        if(SEARCH_SOUSIR==i)                        {                                printf("==>");                        }                        else                        {                                printf("   ");                        }                        //显示查找到的名字:                         if(strcmp(search[i].name,"$")==0)                        {                                printf("%-20s\t",str);                        }                               else                        {                                printf("%-20s\t",search[i].name);                        }                        //显示查找到的电话                        if(strcmp(search[i].tel,"$")==0)                        {                                printf("%-20s\t \n",str);                        }                               else                        {                                printf("%-20s\t \n",search[i].tel);                        }                }                printf("==========================================\n");                printf("【查看(W) 【编辑(g)】【返回(backspace)】\n");        }        Zero_Search_Struct();         if(flag==1)        {                gets(STRING_NAME);                flag=0;        }}//===============================================//名称:        Search_Up_Key//功能:        搜索游标上移一行//参数:        void //返回值        void//===============================================void Search_Up_Key(void){        if(SEARCH_SOUSIR<=0)        {                if(SEARCH_PAGE_NUM>0)                {                        SEARCH_PAGE_NUM--;                        SEARCH_SOUSIR=PAGE_PEOPLE_NUM-1;                }                else                {                        SEARCH_PAGE_NUM=0;                        SEARCH_SOUSIR=0;                }        }        else        {                SEARCH_SOUSIR--;        }}//===============================================//名称:        Search_Down_Key//功能:        搜索游标下移一行//参数:        void //返回值        void//===============================================void Search_Down_Key(void){        if((SEARCH_PAGE_NUM+1)*PAGE_PEOPLE_NUM>SEARCH_PEOPLE_NUM)               //处在最后一页        {                if(SEARCH_SOUSIR>=SEARCH_PEOPLE_NUM-SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM-1)                {                        ;                }                else                {                        SEARCH_SOUSIR++;                }        }        else        {                if(SEARCH_SOUSIR>=PAGE_PEOPLE_NUM-1)                {                        SEARCH_PAGE_NUM++;                        SEARCH_SOUSIR=0;                }                else                {                        SEARCH_SOUSIR++;                }        }}//===============================================//名称:        Search_Down_Page//功能:        搜索显示界面下翻一页//参数:        void //返回值        void//===============================================void Search_Down_Page(void){        SEARCH_SOUSIR=0;        if((SEARCH_PAGE_NUM+1)*PAGE_PEOPLE_NUM>SEARCH_PEOPLE_NUM)        {                ;                                       //如果到最后一页,将不再下翻        }        else        {                SEARCH_PAGE_NUM++;        }}//===============================================//名称:        Search_Up_Page//功能:        搜索显示界面上翻一页//参数:        void //返回值        void//===============================================void Search_Up_Page(void){        SEARCH_SOUSIR=PAGE_PEOPLE_NUM-1;        if(SEARCH_PAGE_NUM<=0)        {                SEARCH_PAGE_NUM=0;        }        else        {                SEARCH_PAGE_NUM--;        }}//==============================================//名称:        Search_Display_Key//功能:        显示查询人详细信息//参数:        void //返回值        void//===============================================void Search_Display_Key(void){        int i;        char str[STRING_LEN]={"\t"};        system("clear");        printf("==========================================\n");        printf("=>>>>>>>>>>>> 联系人详细信息<<<<<<<<<<<<=\n");        printf("==========================================\n");        printf("  姓名:    \t");                        if(strcmp(search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].name,"$")==0)                        {                                printf("%-20s\t \n",str);                        }                               else                        {                                 printf("%-20s\t \n",search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].name);                        }        printf("  电话号码:\t");                        if(strcmp(search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].tel,"$")==0)                        {                                printf("%-20s\t \n",str);                        }                               else                        {                                 printf("%-20s\t \n",search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].tel);                        }        printf("  地址:    \t");                        if(strcmp(search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].address,"$")==0)                        {                                printf("%-20s \n",str);                        }                               else                        {                                 printf("%-20s\t \n",search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].address);                        }        printf("  备注:    \t");                        if(strcmp(search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].remarks,"$")==0)                        {                                printf("%-20s \n",str);                        }                               else                        {                                 printf("%-20s\t \n",search[SEARCH_SOUSIR+(SEARCH_PAGE_NUM*PAGE_PEOPLE_NUM)].remarks);                        }        for(i=0;i<4;i++)        {         printf("                                         \n");        }        printf("==========================================\n");}//===============================================//名称:        Search_People//功能:        搜索联系人信息//参数:        void //返回值        void//===============================================void Search_People(void){        int key;        int i;        char ch;        while(1)        {                        system("clear");                //清屏                Search_Display();               //显示搜索界面                Search_Struct();                //初始化搜索结构体数组                                                                                                 key=getch();                if(key==27||key==91)                {                        key=getch();                }                else                {                        switch(key)                        {                                case    103:                            //按‘g’键,继续输入查找名字                                        flag=1;                                        break;                                case    87:                                        Search_Display_Key();          //查看搜索人详细信息                                        sleep(2);                                         break;                                case    65:                                        Search_Up_Key();                //向上移动一行                                        break;                                case    66:                                        Search_Down_Key();              //向下移动一行                                        break;                                case    67:                                        Search_Down_Page();             //向下翻一页                                        break;                                case    68:                                        Search_Up_Page();               //向下翻一页                                        break;                                case    127:                            //返回                                        return;                                        break;                                default    :                                        break;                                                     }                }        }}//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//===============================================//名称:        Delete//功能:        删除联系人//参数:        void //返回值        void//===============================================void Delete(void){        char str[STRING_LEN];        int i;        char ch;        printf("请输入你要删除的人的姓名:\n");        gets(str);        for(i=0;i<PEOPLE_NUM;i++)        {                if(strcmp(people[i].name,str)==0)                {                        people[i].flag=0;                        break;                }        }        if(i>=PEOPLE_NUM)        {                printf("你要删除的人不存在,请重新输入!!!\n");                sleep(1);                              //没有搜索到联系人,等待一会再跳到菜单               return ;        }        Delete_Renovate_File();        Renovate_File();        PEOPLE_NUM--;        printf("删除成功!!!\n");        sleep(1);}                 //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//==============================================//名称:       Add_Display//功能:       显示增加联系人信息//参数:        void //返回值        void//===============================================void  Add_Display(void){        int i;        printf("==========================================\n");        printf("=>>>>>>>>>>>>增加联系人详细信息<<<<<<<<<<=\n");        printf("==========================================\n");        for(i=0;i<ADD_PEOPLE_NUM;i++)        {                if(ADD_SEARCH_SOUSIR==i)                {                        printf("==>");                }                else                {                        printf("   ");                }                                printf("%s\t",Add_People_ShuXin1[i]);                printf("%s\n",Add_People_ShuXin2[i]);        }        printf("==========================================\n");        printf("【编辑(W)】        【保存(Backspace)】\n");}//===============================================//名称:        UpKey_Add_People//功能:       增加联系人信息向上移动游标//参数:        void //返回值        void//===============================================void  UpKey_Add_People(void){        if(ADD_SEARCH_SOUSIR<=0)        {                ADD_SEARCH_SOUSIR=ADD_PEOPLE_NUM-1;        }        else        {                ADD_SEARCH_SOUSIR--;        }}//===============================================//名称:        DownKey_Add_People//功能:       增加联系人信息向下游动游标//参数:        void //返回值        void//===============================================void DownKey_Add_People(void){        if(ADD_SEARCH_SOUSIR>=ADD_PEOPLE_NUM-1)        {                ADD_SEARCH_SOUSIR=0;        }        else        {                ADD_SEARCH_SOUSIR++;        }}//===============================================//名称:        Edit_Add_People//功能:        编辑联系人//参数:        void //返回值        void//===============================================void Edit_Add_People(void){        GuiGu=1;        scanf("%s",Add_People_ShuXin2[ADD_SEARCH_SOUSIR]);      }//===============================================//名称:        Add_People//功能:        向电话本中添加联系人 //参数:        void //返回值        void//===============================================void    Add_People(void){        int key;        int i;                        for(i=0;i<ADD_PEOPLE_NUM;i++)                           //结构体数组初始化        {                strcpy(Add_People_ShuXin2[i]," ");        }        while(1)        {                system("clear");                Add_Display();                  //显示增加联系人信息                key=getch();                if(key==27||key==91)                {                        key=getch();                }                else                {                        switch(key)                        {                                case 65:                        //向上移动游标                                        UpKey_Add_People();                                        break;                                case 66:                                        DownKey_Add_People();   //向下游动游标                                        break;                                case 87:                                        Edit_Add_People();      //编辑增加人的信息(W键)                                        break;                                case 127:                                        Save_File();            //保存文件                                        return;                                        break;                                default :                                        break;                        }                }        }}//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$//#################################################################################################################################//===============================================//名称:        DetailInfo//功能:        查看联系人详细信息 //参数:        void //返回值        void//===============================================void DetailInfo(void){        int i;        int key;        char str[STRING_LEN]={"\t"};        system("clear");        printf("==========================================\n");        printf("=>>>>>>>>>>>> 联系人详细信息<<<<<<<<<<<<=\n");         printf("=========================================\n");        printf("  姓名:    \t");                        if(strcmp(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].name,"$")==0)                        {                                printf("%-20s\t \n",str);                        }                               else                        {                                 printf("%-20s\t \n",people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].name);                        }        printf("  电话号码:\t");                        if(strcmp(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel,"$")==0)                        {                                printf("%-20s\t \n",str);                        }                               else                        {                                 printf("%-20s\t \n",people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel);                        }        printf("  地址:    \t");                        if(strcmp(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].address,"$")==0)                        {                                printf("%-20s \n",str);                        }                               else                        {                                 printf("%-20s\t \n",people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].address);                        }        printf("  备注:    \t");                        if(strcmp(people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].remarks,"$")==0)                        {                                printf("%-20s \n",str);                        }                               else                        {                                 printf("%-20s\t \n",people[SOUSIR+(PAGE_NUM*PAGE_PEOPLE_NUM)].remarks);                        }        for(i=0;i<4;i++)        {         printf("                                         \n");        }        printf("=========================================\n");        printf("修改(W)             ");        printf("    返回(Backspace)\n");        while(1)        {                key=getch();                if(key==127)                {                        return;                }                if(key==87)                {                      Revise_People();                      break;                }        }}//===============================================//名称:        MainDisplay //功能:        主界面//参数:        void //返回值        void//===============================================void MainDisplay(void){        int i;        char str[STRING_LEN]={"\t"};               if((PAGE_NUM+1)*PAGE_PEOPLE_NUM>PEOPLE_NUM)    //如果已经下翻到最后一页了,则显示最后一页部分信息        {                printf("*************************************\n");                printf("*>>>>>>>>>>> 通讯录<<<<<<<<<<<<<<<<<*\n");                printf("*************************************\n");                printf("    姓名                    联系人\n");                printf("=====================================\n");                for(i=0;i<PEOPLE_NUM-PAGE_NUM*PAGE_PEOPLE_NUM;i++)                {                        if(SOUSIR==i)                        {                                printf("==>");                        }                        else                        {                                printf("   ");                        }                        if(strcmp(people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].name,"$")==0)                        {                                printf("%-20s\t",str);                        }                               else                        {                                 printf("%-20s\t",people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].name);                        }                                                if(strcmp(people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel,"$")==0)                        {                                printf("%-20s\n",str);                        }                        else                        {                                 printf("%-20s\n",people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel);                        }                }                 for(i=0;i<(PAGE_NUM+1)*PAGE_PEOPLE_NUM-PEOPLE_NUM;i++)                {                printf("\n");                }                printf("=====================================\n");                printf("【菜单[W]】        【退出(Backspace)】\n");        }        else        {                                printf("*************************************\n");                printf("*>>>>>>>>>>> 通讯录<<<<<<<<<<<<<<<<<*\n");                printf("*************************************\n");                printf("    姓名                    联系人\n");                printf("=====================================\n");                for(i=0;i<PAGE_PEOPLE_NUM;i++)                {                        if(SOUSIR==i)                        {                                printf("==>");                        }                        else                        {                                printf("   ");                        }                                        if(strcmp(people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].name,"$")==0)                        {                                printf("%-20s\t",str);                        }                               else                        {                                 printf("%-20s\t",people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].name);                        }                                                if(strcmp(people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel,"$")==0)                        {                                printf("%-20s\n",str);                        }                        else                        {                                 printf("%-20s\n",people[i+(PAGE_NUM*PAGE_PEOPLE_NUM)].tel);                        }                }                printf("=====================================\n");                printf("【菜单[W]】        【退出(Backspace)】\n");        }}//===============================================//名称:        UpKey//功能:        游标向上移动一行,直到首行//参数:        void //返回值        void//===============================================void UpKey(void){                if(SOUSIR<=0)//如果向上移动到了最上,那么游标将不再减1        {                if(PAGE_NUM>0)                {                        PAGE_NUM--;                                         SOUSIR=PAGE_PEOPLE_NUM-1;                }                else                {                        PAGE_NUM=0;                        SOUSIR=0;                }        }        else        {                SOUSIR--;        }        //printf("你输入的是向上键!!!\n");}//===============================================//名称:        DownKey//功能:        游标向下移动一行,直到文尾//参数:        void //返回值        void//===============================================void DownKey(void){                if((PAGE_NUM+1)*PAGE_PEOPLE_NUM>PEOPLE_NUM)        {                if(SOUSIR>=PEOPLE_NUM-PAGE_NUM*PAGE_PEOPLE_NUM-1)                {                        ;                }                else                {                        SOUSIR++;                }        }        else        {                if(SOUSIR>=PAGE_PEOPLE_NUM-1)//如果游标到了最后一行                        //(注意最后一行是人数减1,因为是从0开始计数)                {                        PAGE_NUM++;                        SOUSIR=0;                }                else                {                        SOUSIR++;                }        }        //printf("你输入的是是向下键!!!\n");}//===============================================//名称:        DownPage//功能:        下翻一页,直到尾页//参数:        void //返回值        void//===============================================void DownPage(void){                SOUSIR=0;//向下翻页将游标移到下一页开头位置        if((PAGE_NUM+1)*PAGE_PEOPLE_NUM>PEOPLE_NUM)//如果没有可以在显示的联系人了,那么就不能够再去翻页。        {                ;        }        else        {                PAGE_NUM++;        }        //printf("你输入的是是向右键!!!\n");}//===============================================//名称:        UpPage//功能:        上翻一页,直到首页//参数:        void //返回值        void//===============================================void UpPage(void){                SOUSIR=PAGE_PEOPLE_NUM-1;//向上翻页将游标移到上一页末尾位置        PAGE_NUM--;        if(PAGE_NUM<=0)//如果上翻到第一页就不能再往上翻页        {                PAGE_NUM=0;        }        //printf("你输入的是是向左键!!!\n");}//##############################################################################################################################//===============================================//名称:        menu_initial_struct//功能:        读取文件,为结构体数组赋初值//参数:        void //返回值        void//===============================================void  Menu_initial_struct(void){        int i;        FILE *fp;        fp=fopen("menu.txt","rb");         //从文件中读取数据用于显示        for(i=0;i<MENU_PEOPLE_NUM;i++)        {                if(feof(fp))                {                        break;                }                fscanf(fp,"%s",menu[i].menu_num);                fscanf(fp,"%s",menu[i].menu_line);        }        fclose(fp);}//===============================================//名称:        Menu_MainDisplay //功能:        显示选择菜单界面//参数:        void //返回值        void//===============================================void  Menu_MainDisplay(void){        int i;        printf("**************************************\n");        printf("*>>>>>>>>>>>>>> 菜单<<<<<<<<<<<<<<<<<*\n");        printf("**************************************\n");        printf("   菜单项                    菜单    \n");        printf("======================================\n");        for(i=0;i<MENU_PEOPLE_NUM;i++)        {                if(MENU_SOUSIR==i)                {                        printf("==>");                }                else                {                        printf("   ");                }                printf("%-20s\t",menu[i].menu_num);                printf("%-s\n",menu[i].menu_line);        }         printf("======================================\n");         printf("确定【Enter】         返回【backspace】\n");}//===============================================//名称:        Menu_UpKey//功能:        在菜单栏上游标向上移动一行//参数:        void//返回值:      void //===============================================void  Menu_UpKey(void){        if(MENU_SOUSIR<=0)        {                MENU_SOUSIR=MENU_PEOPLE_NUM-1;        }        else        {                MENU_SOUSIR--;        }} //===============================================//名称:        Menu_DownKey//功能:        在菜单栏上游标向下移动一行//参数:        void//返回值:      void //===============================================void  Menu_DownKey(void){        if(MENU_SOUSIR>=MENU_PEOPLE_NUM-1)        {                MENU_SOUSIR=0;        }        else        {                MENU_SOUSIR++;        } }//==============================================//名称:       Menu_DetailInfo //功能:       菜单功能//参数:        void //返回值        void//===============================================void  Menu_DetailInfo(void){        int key;        key=MENU_SOUSIR;        switch(key)        {                case    0:                        Search_People();              //搜索联系人                        MENU_SOUSIR=0;                        break;                case    1:                        Add_People();                 //增加联系人                        MENU_SOUSIR=0;                        break;                case    2:                        Revise_People();              //修改联系人                        MENU_SOUSIR=0;                        break;                case    3:                        Delete();                     //删除联系人                        MENU_SOUSIR=0;                        break;                case    4:                        Leading_Out();                //导出联系人                        MENU_SOUSIR=0;                        break;                case    5:                        Leading_In();                 //导入联系人                        break;        }}//===============================================//名称:        Menu //功能:        菜单//参数:        void //返回值        void//===============================================void Menu(void){        char key;        Menu_initial_struct();        while(1)        {                system("clear");                Menu_MainDisplay();                key=getch();                if(key==27||key==91)                {                        key=getch();                }                else                {                        switch(key)                        {                                case 10:                                        Menu_DetailInfo();                   //显示联系人详细信息                                        break;                                case 65:                                        Menu_UpKey();                        //向上移动一行                                        break;                                case 66:                                        Menu_DownKey();                      //向下移动一行                                        break;                                case 127:                                    //Backspace                                        return;                                        break;                               //返回                                default :                            break;                        }                }        }}//===============================================//名称:        KeyIn //功能:        从键盘获取信息 //参数:        void //返回值        void//===============================================void KeyIn(void){                       initial_struct();               //初始化结构体数组        char key;        while(1)        {                system("clear");                        MainDisplay();        //显示部分联系人信息                key=getch();                if(key==27||key==91)                {key=getch();                }                else                {switch(key){case 10:DetailInfo();                   //显示联系人详细信息case 65:UpKey();                        //向上移动一行break;case 66:DownKey();                      //向下移动一行break;case 67:DownPage();                     //向下翻一页break;case 68:UpPage();                       //向下翻一页break;case 87:Menu();                         //菜单break;case 127:return;                         //退出系统break;default :break;}                }        }}//===============================================//名称:        main //功能:        程序入口 //参数:        void //返回值        void//===============================================void main(void){KeyIn();}                {                        key=getch();                }                else                {                        switch(key)                        {                                case 10:                                        DetailInfo();                   //鏄剧ず鑱旂郴浜鸿缁嗕俊鎭?                                case 65:                                        UpKey();                        //鍚戜笂绉诲姩涓€琛?                                        break;                                case 66:                                        DownKey();                      //鍚戜笅绉诲姩涓€琛?                                        break;                                case 67:                                        DownPage();                     //鍚戜笅缈讳竴椤?                                        break;                                case 68:                                        UpPage();                       //鍚戜笅缈讳竴椤?                                        break;                                case 87:                                        Menu();                         //鑿滃崟                                        break;                                case 127:                                        return;                         //閫€鍑虹郴缁?                                        break;                                default :                                        break;                        }                }        }}//===============================================//鍚嶇О锛?       main //鍔熻兘锛?       绋嬪簭鍏ュ彛 //鍙傛暟锛?       void //杩斿洖鍊?       void//===============================================void main(void){        KeyIn();}


0 0
原创粉丝点击