利用c语言实现简单的通信录

C语言就将要结束了所以我找了个通信录的小工程写一写

这里面实现了 :1根据年龄的排序

2.根据姓名的首字母分组排序

3.联系人的添加和删除;

话不多说上代码

首先是创建一个叫做Penson的类

Penson.h

@property (nonatomic ,retain)NSString*name;
@property(nonatomic,retain)NSString*sex;
@property(nonatomic,retain)NSString*phoneNum;
@property(nonatomic,assign)NSUInteger age;

-(id)initWithName:(NSString*)name sex:(NSString *)sex
        phoneNum:(NSString *)phoneNum Age:(NSUInteger)age;
+(Penson *)pensonWithName:(NSString*)name sex:(NSString *)sex
          phoneNum:(NSString *)phoneNum Age:(NSUInteger)age;
//排序
-(NSComparisonResult)compByage:(Penson *)penson;
-(NSComparisonResult)compByname:(Penson *)penson;
-(NSString *)description;


Penson.m

@implementation Penson

-(id)initWithName:(NSString *)name sex:(NSString *)sex phoneNum:(NSString *)phoneNum Age:(NSUInteger)age
{
    self=[super init];
    if (self!=nil) {
        _age=age;
       _name=name;
        _sex=sex;
        _phoneNum=phoneNum;
    }
    return self;
}

+(Penson *)pensonWithName:(NSString *)name sex:(NSString *)sex phoneNum:(NSString *)phoneNum Age:(NSUInteger)age
{
    Penson *aw=[[Penson alloc] initWithName:name sex:sex phoneNum:phoneNum Age:age];
    return aw;
}
- (NSString *)description
{
    NSString *str=[NSString stringWithFormat:@"name:%@,sex:%@,phoneNum:%@,age:%lu",self.name,self.sex,self.phoneNum,(unsigned long)self.age];
    return str;
}
-(NSComparisonResult)compByage:(Penson *)penson
{
    if (self.age>penson.age) {
        return 1;
    }else if (self.age<penson.age)
    {
        return -1;
    }else
    {
        return 0;
    }
    
}
-(NSComparisonResult)compByname:(Penson *)penson
{
    NSComparisonResult res=[self.name compare:penson.name];
    if (res>0) {
        return 1;
    }else if (res<0)
    {
        return -1;
    }else
    {
        return 0;
    }
}

创建AdressBook.h

导入头文件 <#import " Penson.h">

#import <Foundation/Foundation.h>
#import "Penson.h"

@interface AdressBook : NSObject
@property (nonatomic,retain)NSMutableDictionary*mDictionary;
//便利构造器
+(instancetype)addressBookWithDictionary:(NSMutableDictionary*)mDictionary;
//添加联系人
-(BOOL)addPerson : (Penson*)person;
//获取某个分组下名称下所有联系人,并且按排序
-(void)personByGroupName : (NSString *)groupName;
//根据号码搜索
-(void)searchByPhoneNum:(NSString *)phoneNum;
//获取女性联系人,并排序
-(void)getfemalePersonSortByAgeDown;
//根据姓名删除联系人
-(void)removeByName : (NSString *)name;
//删除某个分组的全部联系人
-(void)removeall:(NSString *)groupName;
-(void)showAll;
@end

 

创建AdressBook.m

#import "AdressBook.h"

@implementation AdressBook
//初始化
-(instancetype)initWhitDictionary: (NSMutableDictionary *)mDictionary
{
    if (self =[super init]) {
        _mDictionary=mDictionary;
    }
    return self;
}
//便利构造器
+(instancetype)addressBookWithDictionary:(NSMutableDictionary *)mDictionary
{
    AdressBook *addressBook =[[AdressBook alloc] initWhitDictionary:mDictionary];
    return addressBook;
}
-(BOOL)addPerson:(Penson *)person
{
    BOOL res=YES;
    if ([person name]!=nil && [person phoneNum]!=nil) {
        char cha=[[[person name]capitalizedString]characterAtIndex:0];
        NSString *string=[NSString stringWithFormat:@"%c",cha];
        if ([_mDictionary objectForKey:string]!=nil) {
            for (id obj in [_mDictionary objectForKey:string]) {
                if ([person.name isEqualToString:[obj name]] ) {
                    res =NO;
                    break;
                }
            }
            if (res == NO) {
                NSLog(@"该联系人已存在");
            }
            else
            {
                [[_mDictionary objectForKey:string]addObject:person];
            }
        }
        else
        {
            NSMutableArray *mArray=[[NSMutableArray alloc] init];
            [mArray addObject:person];
            [_mDictionary setObject:mArray forKey:string];
        }
    }
    else{
        NSLog(@"添加失败!");
        
    }
    return res;
}

-(void)personByGroupName:(NSString *)groupName
{
    if ([groupName length]!=1) {
        NSLog(@"分组错误");
    }
    else
    {
        [[_mDictionary valueForKey:groupName]sortedArrayUsingSelector:@selector(compByname:)];
        for (id obj in [_mDictionary valueForKey:groupName]) {
            NSLog(@"%@",obj);
        }
    }
}
-(void)searchByPhoneNum:(NSString *)phoneNum
{
    for (id obj in [_mDictionary allValues]) {
        for (id obj1 in obj) {
            if ([[obj1 phoneNum]isEqualToString:phoneNum]) {
                NSLog(@"%@",obj1);
            }
            
        }
    }
}
-(void)getfemalePersonSortByAgeDown
{
    NSMutableArray *mArray=[[NSMutableArray alloc] init];
    for (id obj in [_mDictionary allValues]) {
        for (id obj1 in obj) {
            if ([[obj1 sex]isEqualToString:@"女"]) {
                [mArray addObject:obj1];
            }
        }
    }
    [mArray sortedArrayUsingSelector:@selector(compByage:)];
    for (id obj2 in mArray) {
        NSLog(@"%@",obj2);
    }
}
-(void)removeByName:(NSString *)name
{
    NSString *string =[[name substringToIndex: 1]capitalizedString ];
    for (int i=0; i<[[_mDictionary valueForKey:string] count]; i++) {
        if ([[[_mDictionary valueForKey:string] objectAtIndex:i] isEqualToString:name]) {
            [[_mDictionary valueForKey:string] removeObjectAtIndex:i];
        }
    }
}
-(void)removeall:(NSString *)groupName
{
    if ([groupName length]!=1) {
        NSLog(@"没有该分组");
    }
    else
    {
        [[_mDictionary valueForKey:groupName]removeAllActions];
    }
}
-(void)showAll
{
    NSLog(@"%@",_mDictionary);
}
@end

最后是在在main.m中实现调用

先导入头文件AdressBook.h 

Penson.h

#import <Foundation/Foundation.h>
#import "Penson.h"
#import "AdressBook.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        AdressBook *t=[AdressBook  addressBookWithDictionary:[[NSMutableDictionary alloc] init]];
        Penson *p1=[Penson pensonWithName:@"Lucy" sex:@"女" phoneNum:@"123" Age:74];
        Penson *p2=[Penson pensonWithName:@"Qfy" sex:@"男" phoneNum:@"144" Age:22];
        Penson *p3=[Penson pensonWithName:@"Sonjian" sex:@"女"phoneNum:@"133" Age:21];
        Penson *p4=[Penson pensonWithName:@"Wwas" sex:@"女" phoneNum:@"977" Age:23];

        
        [t addPerson:p1];
        [t addPerson:p2];
        [t addPerson:p3];
        [t addPerson:p4];
        
       
        Penson *p5=[Penson pensonWithName:@"Luay" sex:@"na" phoneNum:@"544" Age:20];
//        [add addPenson:p5];
        [t addPerson:p5];
//       [t getFemalePersonSortByAgeDown];
        [t personByGroupName:@"L"];
        [t searchByPhoneNum:@"947"];
        [t getfemalePersonSortByAgeDown];
        [t removeByName:@"0"];
        [t removeall:@"0"];
        [t showAll ];
        NSLog(@"Hello, World!");
    }
    return 0;
}



以上:

希望对你作用




















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是C语言利用链表实现通讯录的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义通讯录结构体 typedef struct AddressBook { char name[20]; char phone[20]; struct AddressBook *next; } AddressBook; // 添加联系人 void add(AddressBook **head) { AddressBook *p = (AddressBook *)malloc(sizeof(AddressBook)); printf("请输入姓名:"); scanf("%s", p->name); printf("请输入电话号码:"); scanf("%s", p->phone); p->next = *head; *head = p; printf("添加成功!\n"); } // 删除联系人 void del(AddressBook **head) { char name[20]; printf("请输入要删除的联系人姓名:"); scanf("%s", name); AddressBook *p = *head; AddressBook *pre = NULL; while (p != NULL) { if (strcmp(p->name, name) == 0) { if (pre == NULL) { *head = p->next; } else { pre->next = p->next; } free(p); printf("删除成功!\n"); return; } pre = p; p = p->next; } printf("未找到该联系人!\n"); } // 查找联系人 void search(AddressBook *head) { char name[20]; printf("请输入要查找的联系人姓名:"); scanf("%s", name); AddressBook *p = head; while (p != NULL) { if (strcmp(p->name, name) == 0) { printf("姓名:%s,电话:%s\n", p->name, p->phone); return; } p = p->next; } printf("未找到该联系人!\n"); } // 显示所有联系人 void show(AddressBook *head) { AddressBook *p = head; while (p != NULL) { printf("姓名:%s,电话:%s\n", p->name, p->phone); p = p->next; } } int main() { AddressBook *head = NULL; int choice; while (1) { printf("请选择操作:\n"); printf("1.添加联系人\n"); printf("2.删除联系人\n"); printf("3.查找联系人\n"); printf("4.显示所有联系人\n"); printf("5.退出\n"); scanf("%d", &choice); switch (choice) { case 1: add(&head); break; case 2: del(&head); break; case 3: search(head); break; case 4: show(head); break; case 5: return 0; default: printf("输入有误,请重新输入!\n"); break; } } return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值