iOS学习之Object-C语言简单的通讯录管理系统

用这几天学的OC的知识,写了一个实现简单功能的通讯录管理系统,在这里分享给大家:

通讯录管理系统
 *  需求:
 1、定义联系人类Contact。实例变量:姓名(拼音,首字母大写)、性别、电话号码、住址、分组名称、年龄。方法:自定义初始化方法(姓名、电话号码)、显示联系人信息
 
 
 2、定义AddressBook类,定义字典,分组管理所有联系人。分组名为26个大写的英文字母。
 
 
 3、可以添加联系人对象,如果姓名或电话号码为空,添加失败。添加联系人到匹配的分组。
 
 
 4、获取某个分组名称下所有联系人,并且按照姓名升序排列。
 
 
 5、从通讯录中根据电话号码搜索联系人。
 
 
 6、获取所有女性的联系人,并且按照年龄的降序排列。
 
 
 7、根据姓名删除某个联系人。
 
 
 8、删除某个分组的全部联系人。

Contact.h文件

#import <Foundation/Foundation.h>

@interface Contact : NSObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *gender;
@property (nonatomic, retain) NSString * phoneNum;
@property (nonatomic, retain) NSString *address;
@property (nonatomic, retain) NSString *groupName;
@property (nonatomic, assign) NSInteger age;

// 初始化方法
- (instancetype)initWithName:(NSString *)name
                      gender:(NSString *)gender
                    phoneNum:(NSString *)phoneNum
                         age:(NSInteger)age;

// 构造器
+(instancetype)contactWithName:(NSString *)name
                        gender:(NSString *)gender
                      phoneNum:(NSString *)phoneNum
                           age:(NSInteger)age;

// 显示联系人信息
- (void)showInformation;

@end

Contact.m文件

#import "Contact.h"

@implementation Contact
// 初始化方法
- (instancetype)initWithName:(NSString *)name
                      gender:(NSString *)gender
                    phoneNum:(NSString *)phoneNum
                         age:(NSInteger)age {
    self = [super init];
    if (self) {
        _name = name;
        _gender = gender;
        _phoneNum = phoneNum;
        _age = age;
    }
    return self;
}

// 构造器
+(instancetype)contactWithName:(NSString *)name
                        gender:(NSString *)gender
                      phoneNum:(NSString *)phoneNum
                           age:(NSInteger)age {
    return [[Contact alloc] initWithName:name gender:gender phoneNum:phoneNum age:age];
}

// 显示联系人信息
- (void)showInformation {
    NSLog(@"name = %@, gender = %@, phoneNum = %@, age = %ld", _name, _gender, _phoneNum, _age);
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"name = %@, gender = %@, phoneNum = %@, age = %ld", _name, _gender, _phoneNum, _age];
}
@end

AddressBook.h文件

#import <Foundation/Foundation.h>
@class Contact;
@interface AddressBook : NSObject

@property (nonatomic, retain)NSMutableDictionary *addressBook;

// 添加联系人对象
- (void)addContact:(Contact *)contact;

// 获取某个分组名称下所有联系人,并且按照姓名升序排列
- (void)groupContactsByNameSortDes:(NSString *)groupName;

// 从通讯录中根据电话号码搜索联系人
- (void)findContactByPhoneNum:(NSString *)phoneNum;

// 获取所有女性的联系人,并且按照年龄的降序排列
- (void)womanContactsByAgeSortAsc:(NSString *)gender;

// 根据姓名删除某个联系人。
- (void)deleteContactByName:(NSString *)name;

// 删除某个分组全部联系人
- (void)deleteAllContactByGroup:(NSString *)groupName;

// 打印联系人
- (void)printContacts;
@end

AddressBook.m文件

#import "AddressBook.h"
#import "Contact.h"
@implementation AddressBook

// 初始化
- (instancetype)init
{
    self = [super init];
    if (self) {
        _addressBook = [[NSMutableDictionary alloc] init];
        for (int i = 65; i < 91; i++) {
            char c = i;
            // 为字典添加键值对
            NSString *strKey = [NSString stringWithFormat:@"%c", c];
            [_addressBook setObject:[NSMutableArray array] forKey:strKey];
        }
    }
    return self;
}

// 添加联系人对象
- (void)addContact:(Contact *)contact {
    // 如果姓名或电话号码为空,添加失败
    if ([contact.name isEqualToString:@""] || [contact.phoneNum isEqualToString:@""]) {
        NSLog(@"添加失败");
        return;
    }
    // 添加联系人到匹配的分组,以联系人姓名首字母当做分组方式。
    contact.groupName = [[contact.name capitalizedString] substringToIndex:1];
    // 联系人分组即为键值,通过键值得到字典的值传入数组
    NSMutableArray *arrContact = [_addressBook objectForKey:contact.groupName];
    // 将联系人信息传入数组
    [arrContact addObject:contact];
    NSLog(@"添加成功!");

}

// 获取某个分组名称下所有联系人,并且按照姓名升序排列
- (void)groupContactsByNameSortDes:(NSString *)groupName {
    NSMutableArray *arrGroup = [_addressBook objectForKey:groupName];
    NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    [arrGroup sortedArrayUsingDescriptors:@[sortByName]];
    NSLog(@"姓名升序排序成功!");
    NSLog(@"%@", arrGroup);
}

// 从通讯录中根据电话号码搜索联系人
- (void)findContactByPhoneNum:(NSString *)phoneNum {
    for (NSArray *key in _addressBook) {
        NSMutableArray *findArray = _addressBook[key];
        for (Contact *targetContact in findArray) {
            if ([targetContact.phoneNum isEqualToString:phoneNum]) {
                NSLog(@"搜索成功!");
                NSLog(@"%@", targetContact);
            }
        }
    }
}

// 获取所有女性的联系人,并且按照年龄的降序排列
- (void)womanContactsByAgeSortAsc:(NSString *)gender {
    NSMutableArray *arrGender = [NSMutableArray array];
    for (NSArray *woman in _addressBook) {
        NSMutableArray *womanArray = _addressBook[woman];
        for (Contact *womanContact in womanArray) {
            if ([womanContact.gender isEqualToString:gender]) {
                [arrGender addObject:womanContact];
            }
        }
    }
    NSSortDescriptor *sortByAge = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
    [arrGender sortedArrayUsingDescriptors:@[sortByAge]];
    NSLog(@"年龄的降序排序成功");
    NSLog(@"%@", arrGender);
}

// 根据姓名删除某个联系人。
- (void)deleteContactByName:(NSString *)name {
    for (NSArray *delete in _addressBook) {
        NSMutableArray *arrayDelete = _addressBook[delete];
        for (Contact *deleteContact in arrayDelete) {
            if ([deleteContact.name isEqualToString:name]) {
                [arrayDelete removeObject:deleteContact];
            }
        }
    }
    NSLog(@"移除成功");
}

// 删除某个分组全部联系人
- (void)deleteAllContactByGroup:(NSString *)groupName {
    NSLog(@"删除成功!");
    [_addressBook setObject:[NSMutableArray array] forKey:groupName];
}

// 打印联系人
- (void)printContacts {
    NSLog(@"%@", _addressBook);
}

@end

main.m文件

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {

    @autoreleasepool {
        // 创建联系人对象
        Contact *c1 = [Contact contactWithName:@"zhangsan" gender:@"man" phoneNum:@"18888888888" age:18];
        Contact *c2 = [Contact contactWithName:@"lisi" gender:@"woman" phoneNum:@"18821321318" age:33];
        Contact *c3 = [Contact contactWithName:@"wangwu" gender:@"man" phoneNum:@"18883435888" age:43];
        Contact *c4 = [Contact contactWithName:@"zhangsi" gender:@"woman" phoneNum:@"18888657588" age:13];
        Contact *c5 = [Contact contactWithName:@"zhangwu" gender:@"man" phoneNum:@"18881232188" age:66];
        Contact *c6 = [Contact contactWithName:@"" gender:@"" phoneNum:@"" age:0];

        // 创建字典对象
        AddressBook *addressBook = [[AddressBook alloc] init];

        // 添加联系人
        [addressBook addContact:c1];
        [addressBook addContact:c2];
        [addressBook addContact:c3];
        [addressBook addContact:c4];
        [addressBook addContact:c5];
        [addressBook addContact:c6];
        // 打印所有联系人
        [addressBook printContacts];

        // 获取某个分组名称下所有联系人,并且按照姓名升序排列
        [addressBook groupContactsByNameSortDes:@"Z"];

        // 从通讯录中根据电话号码搜索联系人
        [addressBook findContactByPhoneNum:@"18881232188"];

        //获取所有女性的联系人,并且按照年龄的降序排列
        [addressBook womanContactsByAgeSortAsc:@"woman"];

        //根据姓名删除某个联系人
        [addressBook deleteContactByName:@"zhangwu"];

        // 打印所有联系人
        [addressBook printContacts];

        // 删除某个分组的全部联系人
        [addressBook deleteAllContactByGroup:@"Z"];

        // 打印所有联系人
        [addressBook printContacts];

    }
    return 0;
}
时间: 2024-12-29 07:39:17

iOS学习之Object-C语言简单的通讯录管理系统的相关文章

IOS学习之路——Swift语言(1)——基本类型、运算符与逻辑控制语句

一.变量 变量标识符必须以字符包括Unicode编码字符.美元字符$.下划线_开头,不能以数字开头,不能包含空格.更不能使用关键字命名. swift中变量的声明使用var关键字,常量的声明使用let关键字. 1 var name="Swift"; 2 var version=2.2; 3 let company:String="Apple"; 变量的声明: 1. 可以使用,逗号分割变量来同时声明多个变量 2. 可以使用:类型来同时指明多个变量的类型 在Mac中可以使

IOS 学习的几种语言

Objcet-C语言,简称oc.其实就是语法 Swift语言,2015年发布的语言,到今年的应用, html语言,就是网页 javascript语言,简称js,这个一般与html紧密配合,现在已经非常流行了,好多app都有这种网页的嵌套 React-native这个也可以开发IOS和Android两种,这个已经流行了 c,c++,这2门语言,c是面向过程,c++是面向对象的语言.因为程序员这个行业是属于计算机,刚开始学习都会让你学习c语言,所以你还必须得懂c,不然看不懂底层,好多api都是用c写

IOS学习之路——Swift语言(2)——基本类型与函数

一.可选型 为什么会有可选型?当一个变量被希望表示为某一个指定的类型值,同时也被希望在某种情况下表示为空.那么就需要一个可选型.Optional 可选型的语法是在Swift的基本类型后面添加 ? 符号,如 Int? String?  可选型如果取值为空,那么表示为 nil 如果想定义一个可选型的变量,那么需要显示的声明为可选型.可选型变量打印时显示Optional 可选型变量需要进行解包(unwrap)才能与其他的变量进行运算. 解包: 1. 强制解包,使用 ! 关键字,强制解包是具有风险的,当

IOS学习笔记3—Objective C—简单的内存管理

今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制,还是需要对其比较了解. 1.在OC中,每个对象都有一个保留计数,创建时每个对象都有一个初始值为1的保留计数,释放时,保留计数都为0 2.创建自动释放的对象 要求以一个方法创建对象时,以自动释放的形式返回该对象是一个很好的编程实践 +(Car *)car { Car *myCar = [[Car a

iOS学习之Table View的简单使用

Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View主要分为以下两种: Plain:这是普通的列表风格 Grouped :这是分块风格. 对于UITableView,我們有一些特殊的概念和术语,比如说我们成Table View的一行为Cell,而许多的Cell可以组成Section,每个Section上下又分別有Header和Footer,许多个的S

李洪强iOS开发之零基础学习iOS开发】【02-C语言】01-概述

前面已经给大家介绍了iOS开发相关的一些基础知识,其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C++.Objective-C都是以C语言为基础,从C语言衍生出来的.从这讲开始,我们就暂时抛开iOS相关的知识,沉下心来学习传说中的C语言.正式学习之前,先提醒一句:学习一门语言的语法是比较枯燥的事,很像是在学习1+1等于几,不可能说,学习C语言语法过程中就能马上做

iOS学习笔记---oc语言第五天

字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key-value对)的数据 对于“name:张三”来讲,key就是“name”,key对应的value是“张 三” 一个key-value对认为是一个元素(实体),字典是存储key-value对 的容器. 特点: 与数组不同,数组靠下标存取数据,数组的下标是唯一的. 字典靠key存取元素.key不能重复,

iOS学习笔记—— UItableView 控件的简单使用

UITableView 可以说是iOS开发中最常用的控件,除了游戏之外,几乎所有的应用中独会出现他的身影. 使用UITableView控件需要遵守两种协议 UITableViewDelegate和 UITableViewDataSource. 常用方法如下: 1.返回(每个分区)表单元个数(行数) - (NSInteger) tableView: (UItableView *) tableVIew numberOfRowsInSection: (NSInteger)section 2.返回表单元

【零基础学习iOS开发】【02-C语言】01-概述

本文目录 一.计算机常识 二.程序设计语言发展史 三.C语言简史 四.C语言的特点 五.C语言的作用 六.C语言的版本问题 前面已经给大家介绍了iOS开发相关的一些基础知识,比如学习iOS开发需要什么准备.iOS开发的前景等等.在<开篇>这讲中说过:其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言.iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C++.Objective-C都是以C语言为基础,从C语言衍生出来