数据结构--元素操作(phoneNote.c)


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "phoneNote.h"




PhoneNote *phoneNote_creat()
{
   return  (PhoneNote *)calloc(1,sizeof(PhoneNote));
  // if(np==NULL){return np;}
 //   np->print=phoneNote_printw;
 //   np->write=phoneNote_Write;

}
void phoneNote_printw(PhoneNote *p)
{  
    
        printf("| name: %-16s",p->name);
        printf("phone: %-14s",p->phone);
        printf("age: %-4d",p->age);
        printf("gender: %-3d",p->gender);
        printf("addr: %-10s|\n",p->address);
     
}
int  phoneNote_Write( PhoneNote *p,const char* name,const char* addr,  
                    const char* phone,int age,int gender)
{
    memset(p,0,sizeof(PhoneNote));
    strncpy(p->name,name,strlen(name));
    strncpy(p->address,addr,strlen(addr));
    strncpy(p->phone,phone,strlen(phone));
    p->gender=gender; p->age=age;
    
    
    return 0;
}

PhoneNote* phoneNote_scanf()
{
    printf("insert phoneNote data");    
    PhoneNote *rel=(PhoneNote *)calloc(1,sizeof(PhoneNote));
    if(rel==NULL) return rel;
    printf("Enter name:");scanf("%s",rel->name);
    printf("Enter address:");scanf("%s",rel->address);
    printf("Enter phone:");scanf("%s",rel->phone);
    printf("Enter age:");scanf("%d",&(rel->age));
    printf("Enter gender:");scanf("%d",&(rel->gender));
    printf("Enter phoneNote data\n");
    phoneNote_printw(rel);
    printf("\n");
    return rel;
}

int phoneNote_scanf_str(const char* caption,  char* key,int size)
{   char buffer[100]={0};
    printf("Enter %s:[%s] ",caption,key);scanf("%c",buffer); scanf("%[^\n]",buffer); 
    if(buffer[0]>0x30)
    {strncpy(key,buffer,size-1);}
  
}
int phoneNote_scanf_int(const char* caption,int key)
{    char buffer[64]={0};
    printf("Enter %s:[%d] ",caption,key);scanf("%c",buffer); scanf("%[^\n]",buffer); 
    if(buffer[0]>=0x30 && buffer[0]<=0x39 ){key=atoi(buffer);}

}
int phoneNote_modify(PhoneNote *p)
{
   
    if (p==NULL){return -1;}    
    printf("modify phoneNote data\n");      
    phoneNote_scanf_str("name",p->name,32);
    phoneNote_scanf_str("address",p->address,128);
    phoneNote_scanf_str("phone",p->phone,16);  
    phoneNote_scanf_int("age",p->age);
    phoneNote_scanf_int("gender",p->gender);
    return 0;
}

PhoneNote *phoneNote_search(PhoneNote *p, const char *key, const char *value)
{
    if(strcasecmp("name",key)==0 && strstr(p->name,value)!=NULL)return p;
    if(strcasecmp("address",key)==0 && strstr(p->address,value)!=NULL)return p;
    if(strcasecmp("phone",key)==0 && strstr(p->phone,value)!=NULL)return p;
    if(strcasecmp("age",key)==0 && p->age==atoi(value) )return p;
    if(strcasecmp("gender",key)==0 && p->gender==atoi(value))return p;
        
    return NULL;
}
int phoneNote_swap(PhoneNote *p1,PhoneNote* p2)
{    PhoneNote* tmp=NULL;
    if(p1==NULL || p2==NULL){return -1;}
    if((tmp=phoneNote_creat())==NULL){return -2;}
    memcpy(tmp,p1,sizeof(PhoneNote));
    memcpy(p1,p2,sizeof(PhoneNote));
    memcpy(p2,tmp,sizeof(PhoneNote));
    if(tmp!=NULL)free(tmp);
    return 0;    
}
int phoneNote_cmp(PhoneNote *p1,PhoneNote* p2, const char* key)
{
    if(strcasecmp("name",key)==0) {return strcmp(p1->name,p2->name);}
    if(strcasecmp("address",key)==0 ) {return strcmp(p1->address,p2->address);}
    if(strcasecmp("phone",key)==0 ) {return strcmp(p1->phone,p2->phone);}
    if(strcasecmp("age",key)==0 ) {return p1->age>p2->age?1:0;}
    if(strcasecmp("gender",key)==0) {return p1->gender>p2->gender?1:0;}
        
    return 0;
}

int phoneNote_main(int argc, char const *argv[])
{
    PhoneNote *tb=phoneNote_creat();
    phoneNote_Write(tb,"anyang","henan","0372",70,0);
    phoneNote_printw(tb);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值