通讯录(静态版本)

用静态开辟的方法是一次性就把内存开辟好。

头文件concate.h

#ifndef __CONCATE_H__
#define __CONCATE_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAX_NAME 10
#define MAX_SEX  5
#define MAX_ADDR 20
#define MAX_TELE 12
#define MAX_CON  1000

typedef struct PeoINFO
{
	char name[MAX_NAME];
	int age;
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
}Peo;
typedef struct Con
{
	Peo con[MAX_CON];
	int count;
}Con,*pCon;

void Initcon(pCon pcon);        
void add(pCon pcon);
void show(pCon pcon);
void del(pCon pcon);
void search(pCon pcon); 
void mod(pCon pcon);
void sort(pCon pcon);
void Exit(pCon pcon);

#endif  //_CONCATE_H__
源文件concate.c

#include "concate.h"
void Initcon(pCon pcon)      //初始化
{
	memset(pcon->con,0,MAX_CON*sizeof(Peo));  //
	pcon->count =0;
}

void add(pCon pcon)        //添加信息
{
	if(pcon->count>=MAX_CON)
	{
		printf("电话本已满");
	}
	else
	{
		printf("name:");
		scanf("%s",pcon->con [pcon->count ].name);
		printf("age:");
        scanf("%d",&(pcon->con [pcon->count ].age));
		printf("sex:");
        scanf("%s",pcon->con [pcon->count ].sex);
		printf("tele:");
        scanf("%s",pcon->con [pcon->count ].tele);
		printf("addr:");
        scanf("%s",pcon->con [pcon->count ].addr );
		pcon->count++;
	}
}
int find(pCon pcon)
{
    char name[10]={0};
	int i=0;
	printf("请输入姓名:>");
	scanf("%s",name);
	for(i=0;i<pcon->count ;i++)
	{
        if(strcmp(name,pcon->con [i].name)==0)
		{
			return i;
		}
	}
	return -1;
}
void del(pCon pcon)         //删除通讯录成员
{
	int i=0;
	int ret=0;
	if(pcon->count ==0)
	{
		printf("通讯录为空\n");
		return;
	}
	ret=find(pcon);
	if(ret==-1)
	{
		printf("没有找到\n");
	}
	else
	{
		for(i=ret;i<pcon->count-1;i++)
		{
			pcon->con [i]=pcon->con [i+1];
		}
        pcon->count --;
		printf("删除成功\n");
	}
	
}
void search(pCon pcon)     //查找通讯录成员
{
	int ret=0;
	if(pcon->count ==0)
	{
		printf("通讯录为空\n");
		return;
	}
	ret=find(pcon);
	if(ret==-1)
	{
		printf("没有找到\n");
	}
	else
	{
	
		printf("%5s\t%s\t%5s\t%5s\t%5s\n","name","age","sex","tele","addr");
		printf("%5s\t%d\t%5s\t%5s\t%5s\n",pcon->con [ret ].name,
			pcon->con [ret ].age,pcon->con [ret].sex,
			pcon->con [ret ].tele,pcon->con [ret ].addr);
	}
}
void mod(pCon pcon)      //修改通讯录成员信息
{
	int ret=0;
	if(pcon->count ==0)
	{
		printf("通讯录为空\n");
		return;
	}
    ret=find(pcon);
	if(ret==-1)
	{
		printf("没有找到\n");
	}
	else
	{
		printf("name:");
		scanf("%s",&(pcon->con [ret].name) );
		printf("age:");
        scanf("%d",&(pcon->con [ret ].age));
		printf("sex:");
        scanf("%s",&(pcon->con [ret].sex) );
		printf("tele:");
        scanf("%s",&(pcon->con [ret].tele) );
		printf("addr:");
        scanf("%s",&(pcon->con [ret].addr) );
	}
}
void sort(pCon pcon)     //从小到大排序
{
	int flag=0;
	int i=0;
	int j=0;
	for(i=0;i<pcon->count -1;i++)
	{
		flag=1;
		for(j=0;j<pcon->count -i-1;j++)
		{
			if(strcmp(pcon->con [j].name ,pcon->con [j+1].name )>0)
			{
				Peo tmp=pcon->con [j];
				pcon->con [j]=pcon->con [j+1];
				pcon->con [j+1]=tmp;
				flag=0;
			}

		}
		if(flag==1)
			break;
	}
 //show(pcon);
	printf("排序完成\n");
}
void Exit(pCon pcon)         //退出
{
	exit(0);
}


void show(pCon pcon)        //打印通讯录成员信息
{
	int i=0;
	printf("%5s\t%s\t%5s\t%5s\t%5s\n","name","age","sex","tele","addr");
	//printf("%d\n",pcon->count );
	for(i=0;i<pcon->count ;i++)
	{
		printf("%5s\t%d\t%5s\t%5s\t%5s\n",pcon->con [i ].name,
			pcon->con [i ].age,pcon->con [i ].sex,
			pcon->con [i ].tele,pcon->con [i].addr);
	}
}
测试源文件test.c

#include "concate.h"
enum op
{
	EXIT,    //从0开始
	ADD,
	DEL,
	SEARCH,
	MOD,
	SHOW,
	SORT
};   //增加代码的可读性
void menu()
{
	printf("****1.add 2.del 3.search 4.mod 5.show 6.sort 0.exit****\n");
}
int main()
{
	Con my_con;
	int input=1;
	Initcon(&my_con);
	while(input)
	{
		menu();
		printf("请输入:>");
		scanf("%d",&input);
		switch(input)
		{
		case ADD:
			{
			    add(&my_con);
			    break;
			}
		case DEL:
			{
			    del(&my_con);
			    break;
			}
		case SEARCH:
			{
			    search(&my_con);
			    break;
			}
		case MOD:
			{
			    mod(&my_con);
			    break;
			}
		case SHOW:
			{
			    show(&my_con);
			    break;
			}
		case SORT:
			{
				sort(&my_con);
				break;
			}
		case EXIT:
			{
			    Exit(&my_con);
			    break;
			}
		default:
			break;
		}
	}
	system("pause");
	return 0;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值