#include #include #include #include #pragma comment(lib, "Winmm.lib") #include FILE *ptr1; typedef struct { char name[20]; char phonenum[20]; int kind; char email[50]; } lm; lm linkman,lkm; int flag2,p,flag3; char e_num; void add(); void view(); void search(); void sc(); void dial(); void amend(); void head(); void whattodo(); int passwd(); int addpw(); int changepw(); void color(short x) //自定义函根据参数改变颜色 { if(x>=0 && x<=15)//参数在0-15的范围颜色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x); //只有一个参数,改变字体颜色 else//默认的颜色白色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); } int passwd() { system("cls"); char passwd[20],pw[20]; ptr1=fopen("passwd.sto","rb+"); if(ptr1==NULL) { if((ptr1=fopen("passwd.sto","wb+"))==NULL) { printf("程序初始化错误\n"); system("pause"); exit(0); } } fscanf(ptr1,"%s",passwd); if(ftell(ptr1)==0)return 50; printf("欢迎您使用手机通讯录小程序\n"); printf("本程序已被设置隐私保护,请输入密码:"); fflush(stdin); gets(pw); if(strcmp(pw,passwd)==0) { printf("验证成功~\n"); Sleep(2000); return 100; } else { printf("验证失败~\n"); while(strcmp(pw,passwd)!=0) { printf("本程序已被设置隐私保护,请输入密码:"); fflush(stdin); gets(pw); if(strcmp(pw,passwd)==0) { printf("验证成功~\n"); Sleep(500); return 100; } } } } int main_menu(int flag) { char c; do{ system("cls"); printf("\t\t ══════════════════════════════\n"); printf("\t\t 手机通讯录小程序 \n"); printf("\t\t ══════════════════════════════\n"); printf("\t\t ┌────────────────────────────────┐\n"); printf("\t\t │ 1. 新增联系人 2. 全部联系人 │\n"); printf("\t\t │ │\n"); printf("\t\t │ 3. 查找联系人 4. 修改联系人 │\n"); printf("\t\t │ │\n"); if(flag==50) printf("\t\t │ 5. 设置密码保护 6. 拨号 │\n"); if(flag==100) printf("\t\t │ 5. 修改密码保护 6. 拨号 │\n"); printf("\t\t │ │\n"); printf("\t\t │ 0. 退出程序 │\n"); printf("\t\t └────────────────────────────────┘\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return (c-'0'); } main() { int flag; flag=passwd(); while(1) { switch(main_menu(flag)) { case 1: printf("\t\t --------新增联系人--------\n"); add(); break; case 2: printf("\t\t --------全部联系人--------\n"); view(); break; case 3: printf("\t\t --------查找联系人--------\n"); search(); break; case 4: printf("\t\t --------修改联系人--------\n"); amend(); break; case 5: if(flag==100) { printf("\t\t --------修改密码保护---------\n");flag=changepw(); } if(flag==50) { printf("\t\t --------设置密码保护---------\n");flag=addpw(); } break; case 6: printf("\t\t -----------拨号------------\n"); dial(); break; case 0: printf("感谢使用,再见\n"); system("pause"); exit(0); } } return 0; } void add() { int i=0,flag; char kind; ptr1=fopen("storage.sto","rb+"); if(ptr1==NULL) { ptr1=fopen("storage.sto","wb+"); if(ptr1==NULL) { printf("无法建立文件\n"); exit(0); } } rewind(ptr1); while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); //printf("%s\n",linkman.name); i++; } if(ftell(ptr1)==0)i=0; fseek(ptr1,0,SEEK_END); printf("您目前有%d条联系人数据,您还可以新增%d条联系人数据(%d/15)\n",i,15-i,i); if(i==15) { system("pause"); return; } char ch='y'; while(ch!='n'&&ch!='N') { fflush(stdin); ++i; pos_1: printf("姓名:"); gets(lkm.name); if(strlen(lkm.name)==0) { printf("请输入合法的"); goto pos_1; } for(p=0;p'9') { flag2=1; break; } } if(flag2) { printf("请输入合法的"); goto pos_2; } rewind(ptr1); while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); if(strcmp(linkman.phonenum,lkm.phonenum)==0) { printf("您输入的电话号码和已有的记录相同,请重新输入\n"); goto pos_2; } } printf("分类(1 办公类 2 个人类 3 商务类):"); fflush(stdin); kind=getchar(); while(kind<'0'||kind>'3') { printf("请输入1-3内的数字:"); fflush(stdin); kind=getchar(); } if(kind=='1')lkm.kind=1; if(kind=='2')lkm.kind=2; if(kind=='3')lkm.kind=3; pos_7: fflush(stdin); printf("电子邮箱:"); gets(lkm.email); for(p=0,flag2=1;p'4') { printf("请输入1-4内的数字:"); fflush(stdin); e_num=getchar(); } if(e_num=='1')x=1; if(e_num=='2')x=2; if(e_num=='3')x=3; if(e_num=='4')x=4; head();//输出表头 if(x==1) { while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); //printf("%d %-10s %-10s %d %-10s",i,linkman.name,linkman.phonenum,linkman.kind,linkman.email); if(linkman.kind==1) printf("%2d %-10s %-20s 办公类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email); if(linkman.kind==2) printf("%2d %-10s %-20s 个人类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email); if(linkman.kind==3) printf("%2d %-10s %-20s 商务类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email); } } else { while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); switch(x) { case 2:if(linkman.kind==1)printf("%2d %-10s %-20s 办公类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email);break; case 3:if(linkman.kind==2)printf("%2d %-10s %-20s 个人类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email);break; case 4:if(linkman.kind==3)printf("%2d %-10s %-20s 商务类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email);break; } } } printf("已经显示全部内容,共%d条\n",i); system("pause"); fclose(ptr1); return; } void search() { int x,i=0,u=0; ptr1=fopen("storage.sto","rb+"); if(ptr1==NULL) { printf("您目前没有联系人的记录\n"); printf("【1】返回主目录\n"); printf("【2】新增联系人\n"); printf("【3】结束程序\n"); scanf("%d",&x); while(x<1||x>3) { printf("请输入1-3内的数字:"); scanf("%d",&x); } switch(x) { case 1:return;break; case 2:void add();break; case 3:exit(0); } } fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); if(ftell(ptr1)==0) { whattodo(); return; } rewind(ptr1); fflush(stdin); printf("您想按照什么关键字搜索呢:\n"); printf("【1】模糊搜索\n"); printf("【2】姓名搜索\n"); printf("【3】手机号码搜索\n"); printf("【4】电子邮件地址搜索\n"); printf("【5】返回主菜单\n"); scanf("%d",&x); while(x<1||x>5) { printf("请输入1-5内的数字:"); scanf("%d",&x); } if(x==5)return; char keywords[20]; fflush(stdin); printf("请输入关键字:"); gets(keywords); head();//输出表头 while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); if(x==1) { if(keywords[0]>=0) { if(keywords[0]==linkman.name[0])u=1; } else if(keywords[0]==linkman.name[0]&&keywords[1]==linkman.name[1])u=1; } if(x==2) { if(strcmp(keywords,linkman.name)==0)u=1; } if(x==3) { if(strcmp(keywords,linkman.phonenum)==0)u=1; } if(x==4) { if(strcmp(keywords,linkman.email)==0)u=1; } if(u) { switch(linkman.kind) { case 1:printf("%2d %-10s %-20s 办公类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email);break; case 2:printf("%2d %-10s %-20s 个人类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email);break; case 3:printf("%2d %-10s %-20s 商务类 %-10s\n",++i,linkman.name,linkman.phonenum,linkman.email);break; } } u=0; } printf("已经显示全部搜索结果,共%d条\n",i); system("pause"); fclose(ptr1); return; } void amend() { int x,i=0,flag,k,j,q; lm array[15]; ptr1=fopen("storage.sto","rb+"); if(ptr1==NULL) { printf("您目前没有联系人的记录\n"); printf("【1】返回主目录\n"); printf("【2】新增联系人\n"); printf("【3】结束程序\n"); scanf("%d",&x); while(x<1||x>3) { printf("请输入1-3内的数字:"); scanf("%d",&x); } switch(x) { case 1:return;break; case 2:add();return;break; case 3:exit(0); } } fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); if(ftell(ptr1)==0) { whattodo(); return; } fflush(stdin); head();//输出表头 i=0; j=0; rewind(ptr1); while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",array[j].name,array[j].phonenum,&array[j].kind,array[j].email); //printf("%2d %-10s %-20s 办公类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); if(array[j].kind==1) printf("%2d %-10s %-20s 办公类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); if(array[j].kind==2) printf("%2d %-10s %-20s 个人类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); if(array[j].kind==3) printf("%2d %-10s %-20s 商务类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); j++; } printf("请从(1-%d)选择要修改/删除的序号:",i); scanf("%d",&x); while(x<=0||x>i) { fflush(stdin); printf("请从(1-%d)选择要修改/删除的序号:",i); scanf("%d",&x); } q=i;//存储i的值; printf("请问是要修改还是删除:\n【1】修改\n【2】删除\n"); scanf("%d",&flag); while(flag<1||flag>2) { printf("请重新输入1/2:"); scanf("%d",&flag); } if(flag==2)goto pos_3; //写入待修改的联系人信息 char ch; fflush(stdin); printf("更改 %s 姓名(y/n)",array[x-1].name); ch=getchar(); fflush(stdin); if(ch=='y'||ch=='Y') { pos_10: printf("姓名:"); fflush(stdin); gets(array[x-1].name); if(strlen(array[x-1].name)==0) { printf("请输入合法的"); goto pos_10; } for(p=0;p'9') { flag3=1; break; } } if(flag3) { printf("请输入合法的"); goto pos_9; } rewind(ptr1); while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); if(strcmp(linkman.phonenum,array[x-1].phonenum)==0) { printf("您输入的电话号码和已有的记录相同,请重新输入\n"); goto pos_9; } } } fflush(stdin); printf("更改现在分类 "); switch(array[x-1].kind) { case 1:printf("办公类");break; case 2:printf("个人类");break; case 3:printf("商务类");break; } printf(" (y/n)"); fflush(stdin); ch=getchar(); if(ch=='y'||ch=='Y') { printf("分类(1 办公类 2 个人类 3 商务类):"); scanf("%d",&array[x-1].kind); while(lkm.kind<0||lkm.kind>3) { printf("请输入1-3内的数字:"); scanf("%d",&array[x-1].kind); } } printf("更改 %s 的电子邮箱 %s (y/n)",array[x-1].name,array[x-1].email); fflush(stdin); ch=getchar(); if(ch=='y'||ch=='Y') { pos_8: printf("电子邮箱:"); fflush(stdin); gets(array[x-1].email); for(p=0,flag3=1;p3) { printf("请输入1-3内的数字:"); scanf("%d",&x); } switch(x) { case 1:return;break; case 2:add();return;break; case 3:exit(0); } } fscanf(ptr1, "%s%s%d%s",linkman.name,linkman.phonenum,&linkman.kind,linkman.email); if(ftell(ptr1)==0) { whattodo(); return; } fflush(stdin); head();//输出表头 i=0; j=0; rewind(ptr1); while(!feof(ptr1)) { fscanf(ptr1, "%s%s%d%s",array[j].name,array[j].phonenum,&array[j].kind,array[j].email); //printf("%2d %-10s %-20s 办公类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); if(array[j].kind==1) printf("%2d %-10s %-20s 办公类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); if(array[j].kind==2) printf("%2d %-10s %-20s 个人类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); if(array[j].kind==3) printf("%2d %-10s %-20s 商务类 %-10s\n",++i,array[j].name,array[j].phonenum,array[j].email); j++; } printf("请从(1-%d)选择要拨打的序号:",i); scanf("%d",&x); while(x<=0||x>i) { fflush(stdin); printf("请从(1-%d)选择要拨打的序号:",i); scanf("%d",&x); } printf("正");Sleep(200); printf("在");Sleep(200); printf("拨");Sleep(200); printf("打\t");Sleep(200); for(q=0;q3) { printf("请输入1-3内的数字:"); scanf("%d",&x); } switch(x) { case 1:return;break; case 2:add();return;break; case 3:exit(0); } }