您的位置:首页 > 其它

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

2014-08-03 20:36 1471 查看
该系统是在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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐