数据结构课程设计《电话本》

课程设计
#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();
	}
} 

这些东西是我第一弄得这样多

其中有一部分是百度的,但是我也在这其中看到了我的进步!

你可能感兴趣的:(数据结构课程设计《电话本》)