竟然栽倒在这里!(通讯录一)

16 篇文章 4 订阅
9 篇文章 0 订阅

#define _CRT_SECURE_NO_WARNINGS 1 
#ifndef __CONTACT_H//防止重复引入 
#define __CONTACT_H__ 
#include <stdio.h> 
#include <string.h> 
#include<stdlib.h> 

enum OP//使用枚举,让switch语句更清晰明了 
{  
EXIT, 
ADD, 
DEL, 
MODIFY, 
SEARCH, 
DISPLAY,  
SORT,  
CLEAR 
}; 

#define NAME_MAX 20 
#define SEX_MAX 5 
#define TELE_MAX 12 
#define ADDR_MAX 25 
#define MAX 1000 

typedef struct Person//通讯录成员的具体信息 
{
 char name[NAME_MAX];
 int age; char sex[SEX_MAX];
 char tele[TELE_MAX];
 char addr[ADDR_MAX];
 }Person;
typedef struct Contact 
{
 Person data[MAX];//通讯录能保存的最多人数
 int size;//当前包含的人数  
}Contact,*con;//指针用来在函数内部接收结构体指针 


void menu();//打印菜单
void _add_contact(con pcon);//增加成员 
void _del_contact(con pcon);//删除成员 
void _search_contact(con pcon);//查询成员 
void _modify_contact(con pcon);//修改成员 
void _display_contact(con pcon);//显示所有成员 
void _clear_contact(con pcon);//清空所有成员 
void _sort_contact(con pcon);//按姓名排序所有成员

 #endif //__CONTACT_H__




#include"contact.h"

int main()
{
	int input=1;
	Contact pcon={0};
	pcon.size=0;
	while(input)
	{
       menu();
	   printf("请选择:");
	   scanf("%d",&input);
	   switch(input)
	  {
	   case ADD:
		   _add_contact(&pcon);
		   break;
	   case DEL:
		   _del_contact(&pcon);
		   break;
	   case SEARCH:
		   _search_contact(&pcon);
		   break;
	   case MODIFY:
		 _modify_contact(&pcon);
		   break;
	   case DISPLAY:
		   _display_contact(&pcon);
		   break;
	   case CLEAR:
		   _clear_contact(&pcon);
		   break;
	   case SORT:
		   _sort_contact(&pcon);
		   break;
	   case EXIT:
		   break;
	   default:
		   printf("选择参数错误\n");
		   break;
	   }
	}
	system("pause");
	return 0;
}

</span>



#include"contact.h"

void menu()//打印菜单
{
	printf("***********************\n");
    printf("1.    添加联系人信息\n");
    printf("2.    删除指定联系人信息\n");
    printf("3.    修改指定联系人信息\n");
    printf("4.    查找指定联系人信息\n");
    printf("5.    显示所有联系人信息\n");
    printf("6.    以名字排序所有联系人\n");
    printf("7.    清空所有联系人\n");
    printf("0.    退出\n");
    printf("************************\n");
}

int find(con pcon,char arr[])//由于后面的很多函数都用到查找函数,所以将其封装为函数
{
   int i=0;
   for(i=0; i<pcon->size; i++)
   {
       if(strcmp(pcon->data[i].name,arr))
		  {
			  return i;
	   }
   }
   return -1;
}

void _add_contact(con pcon)//增加成员
{
    if(pcon->size<MAX)
	{
		printf("请输入你要添加的成员信息:\n");  
        printf("请输入姓名:");  
		scanf("%s",(pcon->data[pcon->size].name ));  
        printf("请输入年龄:");
		scanf("%d",&(pcon->data[pcon->size].age ));  
        printf("请输入性别:");
		scanf("%s",(pcon->data[pcon->size].sex));  
        printf("请输入电话:");
		scanf("%s",(pcon->data[pcon->size].tele ));  
        printf("请输入地址:");
        scanf("%s",(pcon->data[pcon->size].addr ));
		printf("添加成功!\n");
		pcon->size++;
	}
	else
printf("通讯录已满!\n");
}

void _display_contact(con pcon)//显示所有成员
{
	int i=0;
	for(i=0; i<pcon->size; i++)
	{
		printf("%s%10d%10s%10s%10s\n",pcon->data[i].name,
			                          pcon->data[i].age,
									  pcon->data[i].sex,
									  pcon->data[i].tele,
									  pcon->data[i].addr);
	}
	printf("打印成功!\n");
}

void _del_contact(con pcon)//删除成员
{
   int i=0;
   char name[20]={0};
   printf("请输入你要删除的成员姓名:");
   scanf("%s",&name);
   i=find(pcon,name);
   if(i>=0)
   {
       pcon->data[i]=pcon->data[pcon->size-1];
	   (pcon->size)--;
	   printf("删除成功!\n");
   }
   else
	   printf("没找到要删除的成员!\n");
}

void _search_contact(con pcon)//查询成员
{
 int i=0;
 char name[20]={0};
 printf("请输入你要查询成员的姓名:");
 scanf("%s",&name);
 i=find(pcon,name);
 if(i>=0)
 {
    printf("%s%10d%10s%10s%10s\n",pcon->data[i].name,
			                          pcon->data[i].age,
									  pcon->data[i].sex,
									  pcon->data[i].tele,
									  pcon->data[i].addr); 
	printf("查询成功!\n");
 }
 else
	 printf("没找到你要查询的成员!\n");
}

void _modify_contact(con pcon)//修改成员
{
	int i=0;
	char name[20]={0};
	printf("请输入你要修改的成员:");
	scanf("%s",name);
	i=find(pcon,name);
	if(i>=0)
	{
	    printf("请输入你要修改的成员信息:\n");  
        printf("请输入姓名:");  
		scanf("%s",(pcon->data[i].name ));  
        printf("请输入年龄:");
		scanf("%d",&(pcon->data[i].age ));  
        printf("请输入性别:");
		scanf("%s",(pcon->data[i].sex));  
        printf("请输入电话:");
		scanf("%s",(pcon->data[i].tele ));  
        printf("请输入地址:");
        scanf("%s",(pcon->data[i].addr ));
		printf("修改成功!");
	}
	else
		printf("没找到你要修改的成员!\n");
}

void _sort_contact(con pcon)//按姓名排序所有成员
{
	int i=0;
	int j=0;
	int flag=0;
	for(i=0; i<pcon->size-1; i++)//控制排序趟数,最后一次不需要交换
	{
		flag=1;
	   for(j=0; j<pcon->size-1-i; j++)
	   {
	        if(strcmp((pcon->data[j].name),(pcon->data[j+1].name))>0)
			{
			   Person tmp= pcon->data[j];
			   pcon->data[j]=pcon->data[j+1];
			   pcon->data[j+1]=tmp;
			  flag=0;
			}
			if(flag==1)
		   break;
       }
	   
	}
	printf("排序成功!\n");
	//_display_contact(pcon);
}

void _clear_contact(con pcon)//清空所有成员
{
	pcon->size=0;//因为刚开始时通讯录为空,所以这条语句可达到清空目的
}

一定要注意,打印菜单的顺序要和枚举成员的定义顺序一致,而不是主函数的switch语句,呜呜呜,浪费了我好长时间才找出错误!


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值