數據結構之電話本

#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();
	}
}
相關文章
相關標籤/搜索