#include <stdio.h> #include <stdlib.h> #include <string.h> struct person //每一個元素都是結構體類型 { char name[15]; //結構體數組,用於存儲姓名 char celephone[22]; char QQ[20]; }per[500]; //定義一個per數組,它有500個元素 int num=0;//*外部變量num爲文件中的紀錄數*// void mainmenu();//*主菜單*// **模塊1** void newrecord();//新添紀錄(括寫入到文件)*// **模塊2** void searchmenu();//*查詢菜單*// **模塊3** void searchbyname();//*按姓名查詢*// **模塊3.1** void searchbycelephone();//*按手機號碼查詢*// **模塊3.2** void searchbyqq();//*按QQ查詢*// **模塊3.3** void xiugaimenu();//*修改菜單*// **模塊4** void xiugaibyname();//*按姓名查找修改*// **模塊4.1** void xiugaibycelephone();//*按手機號碼查找修改*// **模塊4.2** void xiugaixiangmu(int a);//*查找後要修改的項目(分名字和號碼)*// **模塊4.3** void deletemenu();//*刪除菜單*// **模塊5** void deleteall();//*刪除全部信 息*// **模塊5.1** void deleteone();//*刪除單個*// **模塊5.2** void deletebycelephone(); //*按手機號碼刪除*// **模塊5.2.1** void deletebyname();//*按姓名刪除*/ **模塊5.2.2** void main()//*主函數*// { while (1) { mainmenu(); } } //*主函數結束*// void mainmenu()//*主菜單函數*// **模塊1** { int a; //如下模塊是主界面 printf("**********歡迎來到【通訊錄】**********"); printf("\n\n"); printf(" 選擇1:新建信息\n"); printf(" 選擇2:查詢信息\n"); printf(" 選擇3:修改信息\n"); printf(" 選擇4:刪除我的\n"); printf(" 選擇5:刪除全部\n"); printf(" 選擇0:退出系統\n\n"); printf("***************************************\n"); printf("【請選擇數字0-5,其餘鍵暫時不起做用】\n"); loop1: scanf("%d",&a); switch (a) { case 1:newrecord();break; case 2:searchmenu();break; case 3:xiugaimenu();break; case 4:deletemenu();break; case 5:deleteall();break; case 0:printf("歡迎再次使用");exit(0); default:printf("對不起!您的輸入有誤!請從新輸入: "); getchar();//讀取字符 goto loop1; } } void newrecord()//*添加紀錄模塊*// **模塊2** { char s[81]; int a; loop: printf("\n\n\n\n\t\t 請輸入您要添加的聯繫人的信息: \n"); printf("\n請輸入姓名:\n"); name: scanf("%s",&per[num].name);//名字地址 if(strlen(per[num].name)>15)//統計字符長度 { printf("對不起!您的輸入有誤!請從新輸入"); goto name; } printf("\n請輸入手機號碼:\n"); celephone: scanf("%s",&per[num].celephone); if(strlen(per[num].celephone)!=11) { printf("對不起!您的輸入有誤!請從新輸入\n"); goto celephone; } printf("\n輸入QQ號碼:"); QQ: scanf("%s",&per[num].QQ); if(strlen(per[num].QQ)!=9) { printf("對不起!您的輸入有誤!請從新輸入"); goto QQ; } num++; printf("\n是否繼續添加?\n"); printf("\n請按1和2(1表明繼續;2表明不繼續)\n"); printf("請輸入您的選擇 "); scanf("%d",&a); if(a==1) { goto loop; } else { return; } } void searchmenu()//*查詢菜單*// **模塊3** { int a; printf("\n\t\t 歡 迎 使 用 查 詢 菜 單"); printf("\n\t\t 1-按姓名查詢"); printf("\n\t\t 2-按手機號碼查詢"); printf("\n\t\t 3-按QQ查詢"); printf("\n\t\t 其餘鍵-返回主菜單"); printf("\n\t\t"); printf("請輸入您的選擇 "); scanf("%d",&a); switch (a) { case 1:searchbyname();break; case 2:searchbycelephone();break; case 3:searchbyqq();break; default:mainmenu();break; } } void searchbyname()//*:按姓名查詢*// **模塊3.1** { int mark=0; int i,j,findmark=0; int a=0; char name[15]; printf("\n 按姓名查找 "); printf("\n請輸入姓名:"); scanf("%s",name); for(i=a;i<num;i++) { if (strcmp(per[i].name,name)==0) { findmark++; printf("\n\t\t 如下是您查找的聯繫人的信息 "); printf("\n\t\t________________________________"); printf("\n\t\t名字: %s",per[i].name); printf("\n\t\t手機號碼: %s",per[i].celephone); printf("\n\t\tQQ號碼:%s",per[i].QQ); printf("\n\t\t________________________________"); if ((i+1)<num) { printf("\n是否繼續查找相同名字的聯繫人的信息?(1表明繼續;2表明不繼續)"); scanf("%d",&j); if (j==1) { a=i; mark++; continue; } else break; } else { printf("\n請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } } } if(mark!=0) { printf("\n對不起! 沒有相同名字的該聯繫人的信息!!"); printf("\n請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } else if(findmark==0) { printf("\n對不起!沒有該聯繫人的信息!"); printf("\n請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } } void searchbycelephone()//*1:按手機號碼查詢*// **模塊3.2** { int mark=0; int i,j; int a=0; char celephone[11]; printf("\n 按手機號碼查找 \n"); printf("\n請輸入手機號碼:\n"); scanf("%s",celephone); for(i=0;i<num;i++) { if (strcmp(per[i].celephone,celephone)==0) { printf("\n 如下是您查找的聯繫人的信息 "); printf("\n________________________________"); printf("\n名字: %s",per[i].name); printf("\n手機號碼: %s",per[i].celephone); printf("\nQQ號碼:%s",per[i].QQ); printf("\n________________________________"); printf("\n請按任意數字鍵返回主菜單"); mark++; scanf("%d",&j); return; } } if (mark==0) { printf("\n對不起!沒有該聯繫人的信息!"); printf("\n請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } } void searchbyqq()//*3:按QQ查詢*// **模塊3.3** { int mark=0; int i,j; char QQ; printf("\n\t\t 按QQ號碼查找 \n"); printf("\n請輸入QQ號碼:"); scanf("%s",&QQ); for(i=0;i<num;i++) { if(per[i].QQ==QQ) { printf("\n\t\t 如下是您查找的聯繫人的信息 "); printf("\n\t\t________________________________"); printf("\n\t\t名字: %s",per[i].name); printf("\n\t\t手機號碼: %s",per[i].celephone); printf("\n\t\tQQ號碼:%s",per[i].QQ); printf("\n\t\t________________________________"); printf("\n\t\t請按任意數字鍵返回主菜單"); mark++; scanf("%d",&j); return; } } if (mark==0) { printf("\n\t\t對不起!沒有該聯繫人的信息!"); printf("\n\t\t請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } } void xiugaimenu()//*修改菜單*// **模塊4** { int i,j; if(num==0) { printf("\n\t\t對不起!文件中無任何紀錄!"); printf("\n\t\t請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } else { printf("\n\t\t 1-按姓名修改 2-按手機號碼修改\n"); printf(" 請輸入您的數字選擇: "); loop6:scanf("%d",&i); switch (i) { case 1:xiugaibyname();break; case 2:xiugaibycelephone();break; default:printf("對不起!您的輸入有誤!請從新輸入: "); getchar(); goto loop6; } } } void xiugaibyname()//*1:按姓名修改*// **模塊4.1** { int a=0; int findmark=0; int xiugaimark=0; int i,j; char name[15]; printf("\n\t\t請輸入要修改聯繫人的姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if (strcmp(per[i].name,name)==0) { printf("\n\t\t如下是您要修改的聯繫人的紀錄:"); findmark++; printf("\n\t\t________________________________"); printf("\n\t\t名字: %s",per[i].name); printf("\n\t\t手機號碼: %s",per[i].celephone); printf("\n\t\tQQ號碼:%s",per[i].QQ); printf("\n\t\t________________________________"); printf("\n\t\t是否修改?(1表明修改;2表明不修改)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); if (j==1) { xiugaixiangmu(i); xiugaimark++; printf("\n\t\t修改爲功"); if((i+1)<num) { printf("\n\t\t是否繼續修改相同姓名的聯繫人的信息?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); if (j==1) { a=i; findmark++; continue; } } printf("\n\t\t是否繼續修改?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); if (j==1) xiugaibyname(); return; } } } if ((xiugaimark==0)&&(findmark==0)) { printf("\n\t\t沒有該聯繫人的紀錄"); printf("\n\t\t是否繼續修改?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); if (j==1) xiugaibyname(); return; } else if (findmark!=0) { printf("\n\t\t沒有重名信息"); printf("\n\t\t是否繼續修改?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); if (j==1) xiugaibyname(); return; } } void xiugaibycelephone()//*2:按手機號碼修改*// **模塊4.2** { int findmark=0; int i,j; char celephone[11]; printf("\n\t\t請輸入要修改聯繫人的手機號碼:"); scanf("%s",celephone); for (i=0;i<num;i++) { if (strcmp(per[i].celephone,celephone)==0) { printf("\n\t\t如下是您要修改的聯繫人的紀錄:"); findmark++; printf("\n\t\t________________________________"); printf("\n\t\t名字: %s",per[i].name); printf("\n\t\t手機號碼: %s",per[i].celephone); printf("\n\t\tQQ號碼:%s",per[i].QQ); printf("\n\t\t________________________________"); printf("\n\t\t是否修改?(1表明修改;2表明不修改)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); if (j==1) { xiugaixiangmu(i); printf("\n\t\t修改爲功"); printf("\n\t\t是否繼續修改?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); printf(" 請輸入您的數字選擇: "); if (j==1) xiugaixiangmu(i); break; } } } if (findmark==0) { printf("\n\t\t對不起!沒有該聯繫人的紀錄!"); printf("\n\t\t是否繼續修改?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&j); if (j==1) xiugaibycelephone(); return; } } void xiugaixiangmu(int a)//*修改項目*// **模塊4** { int i; printf("\n\t\t 請輸入您要修改的項目 "); printf("\n\t\t\n"); printf("\n\t\t1-手機號碼\n"); printf("\n\t\t2-姓名\n"); printf("\n\t\t4-QQ號碼\n"); printf("\n\t\t8-回主菜單\n"); printf("\n\t\t\n"); printf(" 請輸入您的數字選擇: "); scanf("%d",&i); loop9: switch (i) { case 1: yiwai: printf("請輸入手機號碼:"); scanf("%s",&per[a].celephone); if(strlen(per[a].celephone)!=11) { printf("輸入錯誤,請從新輸入"); goto yiwai;} break; case 2:printf("請輸入姓名:"); scanf("%s",&per[a].name);break; case 4:printf("請輸入QQ號碼:"); scanf("%s",&per[a].QQ);break; case 8:mainmenu();break; default: printf("對不起!您的輸入有誤!請從新輸入: "); getchar(); goto loop9; } } void deletemenu()//*刪除菜單*// **模塊5** { int i,j; if(num==0) { printf("\n\t\t對不起!文件中無任何紀錄!"); printf("\n\t\t請先添加我的信息!"); printf("\n\t\t請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } else { printf("\n\t\t 刪 除 菜 單 "); printf("\n\t\t 1-刪除單個 "); printf("\n\t\t 2-返回主菜單 "); printf("\n\t\t "); printf("\n\t\t請輸入您的數字選擇: "); loop4: scanf("%d",&i); switch (i) { case 1:deleteone();break; case 2:mainmenu();break; default:printf("對不起!您的輸入有誤!請從新輸入: ");goto loop4; } } } void deleteall()//*刪除全部信息*// **模塊5.1** { int i,j; printf("\n\t\t確認刪除?\n"); printf("請按1和2(1表明確認;2表明不刪除)\n "); scanf("%d",&i); if (i==1) { num=0; printf("\n\t\t紀錄已刪除!"); printf("\n\t\t請按任意數字鍵返回主菜單"); scanf("%d",&j); return; } } void deleteone()//*刪除單個*/ **模塊5.2** { int i; printf("\n\t\t1-按手機號碼刪除 2-按姓名刪除"); printf("\n\t\t請輸入您的選擇:"); loop5:scanf("%d",&i);; switch (i) { case 1:deletebycelephone();break; case 2:deletebyname();break; default:printf("對不起!您的輸入有誤!請從新輸入: "); getchar(); goto loop5; } } void deletebyname()//1:按姓名刪除*// **模塊5.2.1** { int a=0; int findmark=0; int i,j,k; int deletemark=0; char name[15]; printf("\n\t\t請輸入您要刪除的聯繫人的姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if (strcmp(per[i].name,name)==0) { printf("\n\t\t如下是您要刪除的聯繫人的紀錄:"); findmark++; printf("\n\t\t________________________________"); printf("\n\t\t名字: %s",per[i].name); printf("\n\t\t手機號碼: %s",per[i].celephone); printf("\n\t\tQQ號碼:%s",per[i].QQ); printf("\n\t\t________________________________"); printf("\n\t\t是否刪除?(1表明刪除;2表明不刪除)\n"); printf("\n\t\t請輸入您的數字選擇: "); scanf("%d",&k); if(k==1) { for (j=i;j<num-1;j++) //*紀錄移動,從per數組中刪除之*// per[j]=per[j+1]; num--; deletemark++; printf("\n\t\t刪除成功"); if((i+1)<num) { printf("\n\t\t是否繼續刪除相同姓名的聯繫人的信息?(1表明刪除;2表明不刪除)"); printf("\n\t\t請輸入您的數字選擇: "); scanf("%d",&k); if(k=1) { a=i; findmark++; continue; } } printf("\n\t\t是否繼續刪除?(1表明繼續;2表明不繼續)"); printf("\n\t\t請輸入您的數字選擇: "); scanf("%d",&k); if(k==1) deleteone(); else break; } } else continue; } if((deletemark==0)&&(findmark==0)) { printf("\n\t\t對不起!沒有該聯繫人的紀錄!"); printf("\n\t\t是否繼續刪除?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&k); if(k==1) deleteone(); } else if(findmark!=0) { printf("\n\t\t對不起!沒有重名信息!"); printf("\n\t\t是否繼續刪除?(1表明繼續;2表明不繼續)"); printf(" 請輸入您的數字選擇: "); scanf("%d",&k); if(k==1) deleteone(); } } void deletebycelephone()//*2:按手機號碼刪除*// **模塊5.2.2** { int i,j,h,m; int deletemark=0; char celephone[11]; printf("\n\t\t請輸入要刪除的聯繫人的手機號碼:"); scanf("%s",celephone); for(i=0;i<num;i++) { if(strcmp(per[i].celephone,celephone)==0) { deletemark++; printf("\n\t\t如下是您要刪除的聯繫人的紀錄:"); printf("\n\t\t________________________________"); printf("\n\t\t名字: %s",per[i].name); printf("\n\t\t手機號碼: %s",per[i].celephone); printf("\n\t\tQQ號碼:%s",per[i].QQ); printf("\n\t\t________________________________"); printf("\n\t\t是否刪除?(1表明刪除;2表明不刪除)\n"); printf(" 請輸入您的數字選擇: "); scanf("%d",&h); if(h==1) { for (j=i;j<num-1;j++) /*紀錄移動,從per數組中刪除之*/ per[j]=per[j+1]; num--; printf("\n\t\t刪除成功"); printf("\n是否繼續刪除?(1表明繼續;2表明不繼續)\n"); printf(" 請輸入您的數字選擇: "); scanf("%d",&h); if(h==1) deletebycelephone(); } } } if(deletemark==0) { printf("\n\t\t對不起!沒有該聯繫人的紀錄!"); printf("\n\t\t是否繼續刪除?(1表明繼續;2表明不繼續)\n"); printf(" 請輸入您的數字選擇: "); scanf("%d",&m); if(m==1) deletebycelephone(); } }