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

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

#include<stdio.h>
#include<string.h>
#include"conio.h"

//========================================
//宏定义
//========================================
#define	PEOPLE_MAX_NUM	300
#define STRING_LEN	60
#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 PEOPLE	people[PEOPLE_MAX_NUM];         //联系人存储结构体数组
struct PEOPLE   search[PEOPLE_MAX_NUM];         //搜索联系人存储结构体数组
//===============================================
//定义全局变量
//===============================================
int 	PAGE_NUM=0;		//记录当前所在的页数
int     SEARCH_PAGE_NUM=0;      //记录模糊搜索所在页
int	PAGE_PEOPLE_NUM=7;	//每一页的联系人显示数
int 	SOUSIR=0;		//当前光标所在的位置
int	PEOPLE_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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值