结构体写通讯录

    <pre name="code" class="cpp">#ifndef _CONTACT_H_//宏定义通讯录  
#define _CONTACT_H_ //宏定义通讯录  
#define NAME_LEN 30//全局变量  
#define SEX_LEN   5//全局变量  
#define TELP_LEN 12//全局变量  
#define GRO_LEN 15//全局变量  
#define MAX_PER  1000//全局变量  
typedef struct per{  
    char name[NAME_LEN];      
    char sex[SEX_LEN];  
    int age;  
    char telp[TELP_LEN];  
    char gro[GRO_LEN];  


}PER,*PPER;  
typedef struct Contact{  
    PER dhb[MAX_PER];  
    int count;  
}PCON,*Pcon;  
void add(Pcon pcon);//添加函数  
void del(Pcon pcon);//删除函数  
void search(Pcon pcon);//查找函数  
void modify(Pcon pcon);//修改函数  
void show(Pcon pcon);//显示函数  
void clear(Pcon pcon);//清空函数  

void save(Pcon pcon);
void init(Pcon pcon);
#endif
#include <stdio.h>  
#include <stdlib.h>
#include <string.h>  
int find(char *p,Pcon pcon)//在这封装一个find函数,在以后的函数里直接调用  
{  
     int i=0;  
     for(i=0;i<pcon->count;i++)  
     {  
       if(strcmp(p,pcon->dhb[i].name)==0)//strcmp为字符串比较函数  
       {  
           return i;  
       }  
     }  
     return -1;  
}  
void add(Pcon pcon)  
{  
    if(pcon->count<MAX_PER)  
    {  
        printf("请输入联系人名字:");  
        scanf("%s",(pcon->dhb[pcon->count]).name);//结构体中变量间接访问成员  
        printf("请输入年龄:");  
        scanf("%d",&(pcon->dhb[pcon->count].age));  
        printf("请输入性别:");  
        scanf("%s",pcon->dhb[pcon->count].sex);  
        printf("请输入电话:");  
        scanf("%s",pcon->dhb[pcon->count].telp);  
        printf("请输入地址:");  
        scanf("%s",pcon->dhb[pcon->count].gro);  
        pcon->count++;  
        printf("ok!添加成功!\n");  
    }  
    else  
    {  
        printf("电话本已满!退出\n");  
        return ;  
    }  
}  
      
void del(Pcon pcon)  
{  
    char name[NAME_LEN];  
    int k=0;  
    int ret=0;  
    printf("请输入你要删除的人的名字:");  
    scanf("%s",name);  
    ret=find(name,pcon);//调用find函数  
    if(ret==-1)  
    {  
        printf("no exit\n");  
    }  
    else  
    {  
          
        for(k=ret;k<pcon->count-1;k++)  
        {  
        pcon->dhb[k-1]=pcon->dhb[k];  
          
        }  
    }  
    pcon->count --;//删除一个成员后,计数器自减1  
    printf("删除成功");  
}  
void search(Pcon pcon)  
{         
    char name[NAME_LEN];  
    int ret = 0;  
    if(ret == -1)  
    {  
        printf("no exit\n");  
    }  
    else  
    {  
        printf("请输入要查找的联系人的名字:");  
        scanf("%s",name);  
        ret = find(name,pcon);  
        printf("%12s",(pcon->dhb[ret]).name);  
        printf("%12d",(pcon->dhb[ret]).age);  
        printf("%12s",pcon->dhb[ret].sex);  
        printf("%12s",pcon->dhb[ret].telp);  
        printf("%12s\n",pcon->dhb[ret].gro);  
    }  
}  
void modify(Pcon pcon)  
{  
  
    char name[NAME_LEN];  
    int ret=0;  
    printf("请输入你要修改人的名字:");  
    scanf("%s",name);  
    ret=find(name,pcon);  
    if(ret=-1)  
    {  
    printf("no exit\n");  
    }  
    else  
    {  
    printf("请输入修改的联系人的姓名:\n");  
    scanf("%s",pcon->dhb[ret].name);  
    printf("请输入修改的联系人的性别:\n");  
    scanf("%s",pcon->dhb[ret].sex);  
    printf("请输入修改的联系人的年龄:\n");  
    scanf("%d",&pcon->dhb[ret].age);  
    printf("请输入修改的联系人的电话:\n");  
    scanf("%s",pcon->dhb[ret].telp);  
    printf("请输入修改的联系人的住址:\n");  
    scanf("%s",pcon->dhb[ret].gro);  
    printf("修改成功\n");  
    }  
}  
void show(Pcon pcon)  
{  
    int j;  
    for(j=0;j<pcon->count;j++)  
    {  
        printf("%s\n",pcon->dhb[j].name);  
        printf("%s\n",pcon->dhb[j].sex);  
        printf("%d\n",pcon->dhb[j].age);  
        printf("%s\n",pcon->dhb[j].telp);  
        printf("%s\n",pcon->dhb[j].gro);  
    }  
}  
void clear(Pcon pcon)  
{  
    pcon->count=0;//只要设定的电话本里的计数器count归零就达到了清空的作用  
  
}  
void init(Pcon pcon)
{
	int i=0;
	FILE*pfread=fopen("contact.txt","r");
	if(pfread==NULL)
	{
		perror("contact.txt");
		exit(EXIT_FAILURE);
	}
	while(fread(&(pcon->dhb[i]),sizeof(PER),1,pfread)==1)
	{
		i++;
	}
	pcon->count=i;
	fclose(pfread);
}

void save(Pcon pcon)
{
	int i=0;
	FILE*pfwrite=fopen("contact.txt","w");
	if(pfwrite==NULL)
	{
		perror("contact.txt");
		exit(EXIT_FAILURE);
	}
	for(i=0;i<pcon->count;i++)
	{
		fwrite(&(pcon->dhb[i]),sizeof(PER),1,pfwrite);
	}
	fclose(pfwrite);
}

void menu()//菜单选择函数  
{  
    printf("*****************************\n");  
    printf("***     1>add             ***\n");  
    printf("***     2>del             ***\n");  
    printf("***     3>search          ***\n");  
    printf("***     4>modify          ***\n");  
    printf("***     5>show             ***\n");  
    printf("***     6>clear           ***\n"); 
	printf("***     7>save          ***\n"); 

	printf("*****************************\n");  
}  

int main()//主函数中定义选择语句  
{  
    PCON  con;//此时PCON为类型  
    int input = 1;  
    con.count = 0;//对count初始化为0,说明此时电话本为空  
    while(input)  
    {  
        menu();  
        printf("请输入你的选择>:");  
        scanf("%d",&input);  
        switch(input)  
        {  
        case 1:  
            add(&con);  
            break;  
        case 2:  
            del(&con);  
            break;  
        case 3:  
            search(&con);  
            break;  
        case 4:  
            modify(&con);  
            break;  
        case 5:  
            show(&con);  
            break;  
        case 6:  
            clear(&con);  
            break;  
		case 7:
			save(&con);
			break;
	
        default:  
            break;  
        }  
    }  
  
    return 0;  
}  


                
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值