编写一个通讯录,功能与以前的诺基亚手机一样,可以通过键盘进行箭头的移动,回车进入选项,用“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
- 编写一个通讯录,功能与以前的诺基亚手机一样,可以通过键盘进行箭头的移动,回车进入选项,用“W”键代表手机手机左键,“backspace”键代表返回上一级。能够实现基本的人性化的增删改查及文件的导入导出
- 手机联系人的增删改查
- 手机通讯录的实现
- android 实现和手机home键一样的功能。
- 可以对联系人进行查增删改的通讯录
- 手机联系人的增删改
- 怎么模拟手机的返回键功能
- 怎么模拟手机的返回键功能
- 诺基亚N8手机的导航功能
- 手机通讯录的简单实现
- 显示手机键盘的回车换行
- 通讯录的增删改查
- 喜欢上一款诺基亚的手机,nokia5500
- [Phonegap+Sencha Touch] 移动开发31 使phonegap的inappbrowser插件支持通过手机返回键进行历史记录后退
- 嵌入式产品典型代表之手机的发展历程
- 嵌入式产品典型代表之手机的发展历程
- 全面屏手机的高颜值代表:vivo X20真机实拍图曝光
- Cocos2dx秘密: Pc键盘上的Esc键可以代替手机的Back键
- hdu 1297 Children’s Queue
- sql优化
- 深度剖析Redis持久化
- NSInvocation的基本用法
- 《iOS应用逆向工程》学习笔记(二)iOS系统目录结构(部分)
- 编写一个通讯录,功能与以前的诺基亚手机一样,可以通过键盘进行箭头的移动,回车进入选项,用“W”键代表手机手机左键,“backspace”键代表返回上一级。能够实现基本的人性化的增删改查及文件的导入导出
- 我的开源项目中期报告与工作进展报告(5)
- [LeetCode]Remove Duplicates from Sorted Array II
- uva10285 - Longest Run on a Snowboard(记忆化搜索)
- ocaml
- 获取本周一到周日的任意时间,返回文本格式。
- atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表
- Java对Map排序
- 甲午海战 国之殇 吾辈定当自强