利用C语言中数组和结构体,初步完成通讯录功能

概括:

用结构体和数组,实现通讯录功能。目前完成六个基础功能:添加、查看、删除、查找、修改、排序。

若有好的建议或意见,欢迎留言!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
#define N 15
#define M 100
 
void showscreen();
void addlinkman();
void showlinkman();
void deletelinkman();
void searchlinkman();
void changelinkman();
void sortlinkman();
 
static int i_len = 0;
 
struct Demo
{
	//int id;
	char name[N];
	char sex[N];
	char address[N];
	char phonenum[N];
}linkman[M];
 
int main()
{	
	
	system("clear");
	showscreen();
	
	return 0;
}
 
//选择菜单
void showscreen()
{
	int num_select;
	
	printf("* * * * * * * * * * * *\n");
	printf("* * *   功能列表  * * *\n");
	printf("* * *   1.添加    * * *\n");		
	printf("* * *   2.查看    * * *\n");
	printf("* * *   3.删除    * * *\n");
	printf("* * *   4.查找    * * *\n");
	printf("* * *   5.修改    * * *\n");
	printf("* * *   6.排序    * * *\n");
	printf("* * *   7.退出    * * *\n");
	printf("* * * * * * * * * * * *\n");
	
	printf("\n");
	printf("序号选择功能: ");
	scanf("%d", &num_select);
	
	switch (num_select)
	{
		case 1:
		{
			addlinkman();
			break;
		}
		case 2:
		{
			showlinkman();
			break;
		}
		case 3:
		{
			deletelinkman();
			break;
		}
		case 4:
		{
			searchlinkman();
			break;
		}
		case 5:
		{
			changelinkman();
			break;
		}
		case 6:
		{
			sortlinkman();
			break;
		}
		case 7:
		{
			printf("退出系统!\n");
			exit(0);
			break;
		}
		default:
		{
			printf("输入有误!请重新选择\n");
			showscreen();	
		}
	}
	
}
 
//添加功能
void addlinkman()
{
	char new_linkman[N];
	int i;
	int continue_1=1;
	char continue_choice;
 
	printf("\n");                    
	printf("输入姓名:");
	scanf("%s", new_linkman);
	
	for (i = 0; i < i_len; i++)   //加个判断 是否重复
	{
		if((strcmp(new_linkman, linkman[i].name)) == 0)
		{
			printf("已有该联系人!\n");
			printf("\n");
			goto end_add;
		}
	}

	strcpy(linkman[i_len].name, new_linkman);
	strcpy(new_linkman,"");
	
	printf("输入性别:");
	scanf("%s", new_linkman);
	strcpy(linkman[i_len].sex, new_linkman);
	strcpy(new_linkman,"");
	
	printf("输入地址:");
	scanf("%s", new_linkman);
	strcpy(linkman[i_len].address, new_linkman);
	strcpy(new_linkman,"");
	
	printf("输入号码:");
	scanf("%s", new_linkman);
	strcpy(linkman[i_len].phonenum, new_linkman);
	strcpy(new_linkman,"");
	printf("\n");
	
	printf("添加成功!\n");
	
	i_len++;
	while(continue_1)
	{
	printf("是否继续添加<y/n>:");
	getchar();
	scanf("%c", &continue_choice);
	if(continue_choice == 'y')
	{
		continue_1 = continue_1 - 1;
		addlinkman();
	
	}
	else if(continue_choice == 'n')
	{
		continue_1 = continue_1 - 1;
		printf("\n");
		system("clear");
		goto end_add;
	}
	else
	{
		printf("输入有误!重新输入\n");
		continue;
	}
	}
	end_add:showscreen();
 
	/*for(i = 0; i < i_len; i++)       //给每个结构体赋予序号
	{
		linkman[i].id= i+1;
	}*/	
}
	
//查看功能	
void showlinkman()
{
	int i;
	system("clear");
	if(i_len == 0)
	{
		printf("通讯录暂时为空,请添加!\n");
		printf("\n");
		goto end_show;
	}
	printf("联系人信息如下:\n");
	for(i = 0; i < i_len; i++)
	{
		if(*linkman[i].name == 0 || *linkman[i].phonenum == 0)
		{
			continue;
		}
		printf("\n");
		printf("  姓名: %s\n", linkman[i].name);
		printf("  性别: %s\n", linkman[i].sex);
		printf("  地址: %s\n", linkman[i].address);
		printf("  号码: %s\n", linkman[i].phonenum);
		printf("\n");
	}
	end_show:showscreen();
}
	
//删除功能
void deletelinkman()
{
	int i;
	int continue_1=1;
	char continue_choice;
	
	char *tmp_data;
	tmp_data = malloc (sizeof(char) * N);
	
	system("clear");
	
	if(i_len == 0)
	{
	printf("通讯录为空,请先添加!\n");
	printf("\n");
	goto end_delete;
	}
	
	return_start:printf("\n");
	printf("输入要删除的姓名或者号码: ");  //判断是否存在 然后删除
	getchar();
	scanf("%s", tmp_data);
	
	for(i = 0; i < i_len; i++)
	{
		if(strcmp(linkman[i].name,tmp_data) != 0 || strcmp(linkman[i].phonenum,tmp_data) != 0 )
		{
			printf("联系人不存在,请重新输入:\n");
			printf("\n");
			goto return_start;
		}
	}
	
	printf("\n");
	
	printf("是否确认删除!!<y/n>");
	getchar();
	scanf("%c", &continue_choice);
	if(continue_choice == 'y')
	{
	for(i = 0; i < i_len; i++)
	{
		if(!strcmp(linkman[i].name, tmp_data) || !strcmp(linkman[i].phonenum, tmp_data))
		{
			memset(linkman[i].name,0,sizeof(linkman[i].name)/sizeof(linkman[i].name[0]));
			memset(linkman[i].sex,0,sizeof(linkman[i].sex)/sizeof(linkman[i].sex[0]));
			memset(linkman[i].address,0,sizeof(linkman[i].address)/sizeof(linkman[i].address[0]));
			memset(linkman[i].phonenum,0,sizeof(linkman[i].phonenum)/sizeof(linkman[i].phonenum[0]));
			printf("删除成功!\n");
			i_len--;
			printf("\n");
		}
	}
	}
	else if(continue_choice == 'n')
	{
		system("clear");
		goto end_delete; 
	}
	end_delete:showscreen();
}
 
//查找功能
void searchlinkman()
{
	char *search_cnd;
	search_cnd = malloc (sizeof(char) * N);
	int i, count=0;
	
	system("clear");
	
	if(i_len == 0)
	{
	printf("通讯录为空,请先添加!\n");
	printf("\n");
	goto end_search;
	}
	
	printf("输入查找的姓名或号码:");
	getchar();
	scanf("%s",search_cnd);
	printf("\n");
	printf("查找的信息:\n");
	
	for(i = 0; i < i_len; i++)
	{
		if(!strncmp(linkman[i].name, search_cnd,N) || !strncmp(linkman[i].phonenum, search_cnd,N))
		{
			printf(" 姓名: %s\n", linkman[i].name);
			printf(" 性别: %s\n", linkman[i].sex);
			printf(" 地址: %s\n", linkman[i].address);
			printf(" 号码: %s\n", linkman[i].phonenum);
			printf("\n");
			count++;
		}
	}
		if(count == 0)
		{
			printf("未找到相关信息!\n");
			printf("\n");
		}
	end_search:showscreen();
}
 
//修改功能
void changelinkman()
{
	char *changename;
	char *changesex;
	char *changeaddress;
	char *changephonenum;
	char *change_information;
	
	char continue_choice;
	
	changename = malloc(sizeof(char) * 15);
	changesex = malloc(sizeof(char) * 15);
	changeaddress = malloc(sizeof(char) * 15);
	changephonenum = malloc(sizeof(char) * 15);
	
	system("clear");
	
	if(i_len == 0)
	{
	printf("通讯录为空,请先添加!\n");
	printf("\n");
	goto end_change;
	}
	
	printf("输入要修改姓名或号码!:");
	scanf("%s", change_information)	;
	
	int i;
	for(i = 0; i < i_len; i++)
	{
		if(!strcmp(linkman[i].name,change_information)|| !strcmp(linkman[i].phonenum,change_information))
		{
			printf("原来的信息:\n");
			printf("姓名:%s\n",linkman[i].name);
			printf("性别:%s\n",linkman[i].sex);
			printf("地址:%s\n",linkman[i].address);			
			printf("手机号码:%s\n",linkman[i].phonenum);
			printf("请确定是否修改(y/n): ");
			getchar();
			scanf("%c", &continue_choice);
			
			if(continue_choice == 'y')
			{
				printf("\n");
				printf("请输入要修改的姓名:");
				scanf("%s", changename);
				strcpy(linkman[i].name,changename);
				
				printf("请输入要修改的性别:");
				scanf("%s",changesex);
				strcpy(linkman[i].sex,changesex);
				
				printf("请输入要修改的地址:");
				scanf("%s",changeaddress);
				strcpy(linkman[i].address,changeaddress);
				
				printf("请输入要修改的号码:");
				scanf("%s",changephonenum);
				strcpy(linkman[i].phonenum,changephonenum);
			}
			if(continue_choice == 'n')
			{
				goto end_change;
			}	
		}
	}
	system("clear");
	end_change:showscreen();
}

//排序功能
void sortlinkman()
{
	int i;
	int j;
	
	char *tmp_name;
	char *tmp_sex;
	char *tmp_address;
	char *tmp_phonenum;
	
	tmp_name = (char *) malloc (sizeof(char) * N);
	tmp_sex = (char *) malloc (sizeof(char) * N);
	tmp_address = (char *) malloc (sizeof(char) * N);
	tmp_phonenum = (char *) malloc (sizeof(char) * N);
	
	system("clear");
	
	for(i = 0; i < i_len - 1; i++)
	{
		for(j = 0; j < i_len - i - 1; j++)
		{
			if(strcmp(linkman[j].name,linkman[j+1].name)>0)
			{
			
				strcpy(tmp_name,linkman[j+1].name);
				strcpy(linkman[j+1].name,linkman[j].name);
				strcpy(linkman[j].name,tmp_name);
				
				strcpy(tmp_sex,linkman[j+1].sex);
				strcpy(linkman[j+1].sex,linkman[j].sex);
				strcpy(linkman[j].sex,tmp_sex);
				
				strcpy(tmp_address,linkman[j+1].address);
				strcpy(linkman[j+1].address,linkman[j].address);
				strcpy(linkman[j].address,tmp_address);
				
				strcpy(tmp_phonenum,linkman[j+1].phonenum);
				strcpy(linkman[j+1].phonenum,linkman[j].phonenum);
				strcpy(linkman[j].phonenum,tmp_phonenum);		
			}
		
		}
	}
	printf("排序结束.\n");
	
	showscreen();
}

猜你喜欢

转载自blog.csdn.net/wow66lfy/article/details/81227268