contact.h
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#ifndef _CNTACT_H_
#define _CNTACT_H_
#define NAME_MAX 20
#define SEX_MAX 4
#define TEL_MAX 12
#define ADDR_MAX 50
#define DEFAULT_SZ 10
#define INC 10
typedef struct ATNN
{
char name[NAME_MAX];
char sex[SEX_MAX];
int age;
char tel[TEL_MAX];
char addr[ADDR_MAX];
} Attn,*pPeoInfo ;
typedef struct Peoinfo
{
pPeoInfo peoinfo;
int sz;
int capacity;
}peo,*per;
void menu();
void add_attn(per p);
void empty_attn(per p);
void Find_attn(per p);
void alter_attn(per p);
void show_attn(per p);
void delete_attn(per p);
void order_attn(per p);
void DestroyAtnn(per p);
#endif
contact.c
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
void menu()//菜单
{
printf("\n******************************************************\n");
printf("\n************************通讯录************************\n");
printf("\n*****1.添加联系人信息 2.清空所有联系人*********\n");
printf("\n*****3.查找指定联系人信息 4.修改指定联系人信息*******\n");
printf("\n*****5.显示所有联系人信息 6.删除指定联系人信息*******\n");
printf("\n*****7.以名字排序所有联系人0.退出*********************\n");
printf("\n******************************************************\n");
}
void DestroyAtnn(per p)//操作结束时销毁已开辟的空间
{
if(p->peoinfo!=NULL)
{
free(p->peoinfo);
p->peoinfo=NULL;
}
}
void CheckCapacity(per p)//判断通讯录是否已满,若是,则开辟新的空间
{
if(p->sz==p->capacity)
{
pPeoInfo ptr=NULL;
ptr=(pPeoInfo)realloc(p->peoinfo,(p->capacity+INC)*sizeof(pPeoInfo));
if(ptr!=NULL)
{
p->peoinfo=ptr;
printf("新的空间已开辟成功!\n");
}
else
{
perror("realloc");
}
}
p->capacity+=INC;
}
peo Init_peoinfo(per p)//初始化通讯录
{
p->sz=0;
p->peoinfo=(pPeoInfo)malloc(DEFAULT_SZ *sizeof(pPeoInfo));
if(p->peoinfo==NULL)
{
perror("malloc");
exit(1);
}
printf("空间已开辟成功\n");
p->sz=0;
p->capacity=DEFAULT_SZ;
memset(p->peoinfo,0,(p->capacity)*sizeof(pPeoInfo));
}
void show_attn(per p)//显示所有联系人信息
{
int i = 0;
printf("姓名\t性别 \t年龄\t电话\t地址\n");
for(i=0;i<p->sz;i++)
{
printf("%s\t %s\t%d\t%s\t%s\n",p->peoinfo[i].name,p->peoinfo[i].sex,
p->peoinfo[i].age,p->peoinfo[i].tel,p->peoinfo[i].addr);}
}
void
add_attn(per p)//添加联系人
{
if(p->sz==NULL)
Init_peoinfo( p);
else
CheckCapacity( p);
printf("请输入联系人信息:\n");
printf("\t姓名\t性别\t年龄\t电话\t地址\n");
scanf("%s%s%d%s%s",p->peoinfo[p->sz].name,p->peoinfo[p->sz].sex,&p->peoinfo[p->sz].age,
p->peoinfo[p->sz].tel,p->peoinfo[p->sz].addr);
printf("添加成功!\n");
p->sz++;
}
int select(per p,char *dele_name)//查找某个联系人是否存在
{
int i=0;
for(i=0;i<p->sz;i++)
{
if(strcmp(p->peoinfo[i].name,dele_name)==0)
return i;
}
return -1;
}
void delete_attn(per p)//删除联系人
{
int i = 0;
int tmp = 0;
char dele_name[NAME_MAX]="";
printf("删除指定联系人:");
scanf("%s",dele_name);
tmp=select(p,dele_name);
if(tmp>=0)
{
i=tmp;
while(i<p->sz)
{
p->peoinfo[i]=p->peoinfo[i+1];
i++;
}
}
else
{
printf("输入有误!\n");
}
}
void Find_attn(per p)//查找联系人信息
{
int i = 0;
int tmp = 0;
char dele_name[20]="";
printf("查找指定联系人:");
scanf("%s",dele_name);
tmp=select(p,dele_name);
if(tmp>=0)
{
printf("%s\t %s\t%d\t%s\t%s\n",p->peoinfo[i].name,p->peoinfo[i].sex,
p->peoinfo[i].age,p->peoinfo[i].tel,p->peoinfo[i].addr);
printf("查找成功!\n");
}
else
{
printf("没有你要查找的人");
}
}
void alter_attn(per p)//修改联系人信息
{
int i = 0;
int tmp = 0;
int input = 1;
char alter_name[20]="";
printf("修改指定联系人:");
scanf("%s",alter_name);
tmp=select(p,alter_name);
if(tmp>=0)
{
printf("请输入要修改的信息(0.退出1.姓名2. 性别3. 年龄 4.电话 5.地址 ):\n");
while(input)
{
i=tmp;
scanf("%d",&input);
switch(input)
{
case 0: break;
case 1:printf("请输入修改后的姓名:");
scanf("%s",p->peoinfo[i].name);
break;
case 2:printf("请输入修改后的性别:");
scanf("%s",p->peoinfo[i].sex);
break;
case 3:printf("请输入修改后的年龄:");
scanf("%d",&p->peoinfo[i].age);
break;
case 4:printf("请输入修改后的电话:");
scanf("%s",p->peoinfo[i].tel);
break;
case 5:printf("请输入修改后的地址:");
scanf("%s",p->peoinfo[i].addr);
break;
default:break;
}
}
}
else
{
printf("输入有误,修改失败!\n");
}
}
void empty_attn(per p)//清空通讯录
{
p->sz=0;
printf("通讯录已清空!\n");
}
void order_attn(per p)
{
int i = 0;
for(i=0;i<p->sz;i++)
{
if(strcmp(p->peoinfo[i].name,p->peoinfo[i+1].name)>0)
{
Attn temp = p->peoinfo[i];
p->peoinfo[i]=p->peoinfo[i+1];
p->peoinfo[i+1]=temp;
}
}
}
test.c内容
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
int main()
{
int input=1;
peo p={0};
menu();
while(input)
{
printf("请选择->");
scanf("%d",&input);
switch(input)
{
case 0: DestroyAtnn(&p);
exit(1);
case 1:
add_attn(&p);
break;
case 2: empty_attn(&p);
break;
case 3: Find_attn(&p);
break;
case 4: alter_attn(&p);
break;
case 5: show_attn(&p);
break;
case 6: delete_attn(&p);
break;
case 7:
order_attn(&p);
break;
default:
printf("输入有误\n");
break;
}
}
system("pause");
return 0;
}
|
通讯录动态开辟版本
最新推荐文章于 2021-07-23 10:46:50 发布