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];
; i < ; 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:];
// 联系人分组即为键值,通过键值得到字典的值传入数组
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); return; } } } NSLog(@"无此联系人!");
}
// 获取所有女性的联系人,并且按照年龄的降序排列
- (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)deleteContactByName:(NSString *)name {
for (NSArray *delete in _addressBook) {
NSMutableArray *arrayDelete = _addressBook[delete];
// for...in不能通过添加或删除对象这类方式来改变集合容器的元素个数
; i < arrayDelete.count; i++) {
Contact *deleteContact = arrayDelete[i];
if ([deleteContact.name isEqualToString:name]) {
[arrayDelete removeObject:deleteContact];
}
}
}
NSLog(@"移除成功");
}
// 打印联系人
- (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:];
Contact *c2 = [Contact contactWithName:];
Contact *c3 = [Contact contactWithName:];
Contact *c4 = [Contact contactWithName:];
Contact *c5 = [Contact contactWithName:];
Contact *c6 = [Contact contactWithName:];
// 创建字典对象
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:"];
//获取所有女性的联系人,并且按照年龄的降序排列
[addressBook womanContactsByAgeSortAsc:@"woman"];
//根据姓名删除某个联系人
[addressBook deleteContactByName:@"zhangwu"];
// 打印所有联系人
[addressBook printContacts];
// 删除某个分组的全部联系人
[addressBook deleteAllContactByGroup:@"Z"];
// 打印所有联系人
[addressBook printContacts];
}
;
}
iOS学习之Object-C语言简单的通讯录管理系统的更多相关文章
- ***iOS学习之Table View的简单使用和DEMO示例(共Plain普通+Grouped分组两种)
Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View ...
- iOS学习08之C语言内存管理
本次主要学习和理解C语言中的内存管理 1.存储区划分 按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区 1> 栈区:局部变量的存储区域 局部变量基本都在函数.循环.分支中定义 栈区的内 ...
- iOS学习07之C语言指针
本次随笔主要是为了学习和理解C语言中的指针,指针树状图如下: 1.访问数据的两种方式 1> 直接访问:定义变量后,直接访问变量 ; printf("a = %d\n", a) ...
- iOS学习之Table View的简单使用
Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View ...
- IOS学习笔记3—Objective C—简单的内存管理
今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制 ...
- 【IOS学习】【Swift语言】
基本语法: OS X playground 引入 import Cocoa IOS playground 引入 import UIKit 基本数据类型 let 定义常量 定义完成之后无法修改 var ...
- ios学习之旅---c语言函数
1.函数的概述 C源程序是由函数组成的. 尽管在前面各章的程序中大都仅仅有一个主函数main(),但有用程序往往由多个 函数组成. 函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能. C语 ...
- iOS学习之UITableView中Cell的操作
接着iOS学习之Table View的简单使用 这篇,这里主要讲UITableView 中的Cell的操作,包括标记.移动.删除.插入. 为了简单快捷,直接从原来那篇的代码开始,代码下载地址:http ...
- c语言实现通讯录管理系统(c课程设计)
工具:Visual C++6.0 说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号 ...
随机推荐
- 调用robustfit函数作稳健回归
调用robustfit函数作稳健回归 regress函数和regstats函数利用普通最小二乘法估计模型中的参数,参数的估计值受异常值的影响比较大.robustfit函数采用加权最小二乘法估计模型中的 ...
- IoGetDeviceObjectPointer .
从名字获得设备对象 驱动的起始地址,大小等信息.
- javascript设计模式-适配器模式
适配器模式的主要作用是将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些对象(类)可以一起工作. UML示意图: 例如,鸭子有fly方法和quack(嘎嘎 ...
- CSS常用布局整理(二)
1-2-1单列变宽布局 side列定宽300px,content列变宽,尺寸是100%-300px.核心的问题就是浮动列的宽度应该等于“100% - 300px”,而CSS显然不支持这种带有减法运算的 ...
- oracle权限
Oracle 权限 权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级.System 系统级.Role 角色级.这些权限可以授予给用户.特殊用户publi ...
- 关于enum的那些事儿
自从当年明月的<明朝的那些事儿>爆红之后,以***那些事儿命名的文章便层出不穷.个人认为,这样的命名通俗但具有吸引力,容易接地气.哈哈,所以我也写了几篇以<***那些事儿>的文 ...
- Linux设备模型 学习总结
看LDD3中设备模型一章,觉得思维有些混乱.这里从整体的角度来理理思路.本文从四个方面来总结一些内容: 1.底层数据结构:kobject,kset.2.linux设备模型层次关系:bus_type,d ...
- com.google.inject.CreationException: Guice creation errors
错误的原因:xml文件中方法名重复或错误
- javascript之toString()和valueOf()函数
1.我们为什么要了解这两种方法 众所周知,toString()函数和valueOf函数,这两个函数是Object类的对象生来就拥有的,而且他们还可以允许我们重写,那么,这两个函数到底有什么用呢? 从名 ...
- javaSE第八天
第八天 43 1. 如何制作帮助文档(了解) 43 2. 通过JDK提供的API学习了Math类(掌握) 44 (1)API(Application Programming Inte ...