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语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号 ...
随机推荐
- STL源码分析-AVL树-RB树
AVL树 不平衡情况 插入节点位于左子节点的左子树(左左) 插入节点位于左子节点的右子树(左右) 插入节点位于右子节点的左子树(右左) 插入节点位于右子节点的右子树(右右) 左左.右右为外侧插入,左右 ...
- CLRS: online maximum (n,k)algorithm
//the first k elements interviewed and rejected, //for the latter n-k elements ,if value >max,re ...
- WF4.0 自定义CodeActivity与Bookmark<第三篇>
一.自定义CodeActivity CodeActivity用于自定义一段代码,可实现你自己写的任意功能. 要注意的有两点: 1.自定义CodeActivity必须继承自CodeActivity; 2 ...
- 使用ffmpeg快速生成视频截图
1 ffmpeg -i input.mkv -ss 00:10:00 -f image2 output.jpg 但是这个命令会花费相当长的时间. 对一个清晰的或者较大的视频文件进行操作, 会花费半分钟 ...
- 5 Ways to Learn and Remember Absolutely Anything
http://www.inc.com/quora/5-ways-to-learn-and-remember-absolutely-anything.html Start too early on th ...
- Magento修改css样式更新之——grunt命令使用
1.清除pub/static和var中相应文件 2.源头文件重新导入pub/static 3.pub中的less编译 4.字面翻译是跟踪源头文件变化实时编译,但是这里的the source files ...
- dig out deledted chat messages
One of my friends asked me to do a favor for her. She said her friend deleted some important chat me ...
- Linux下运行top命令显示的PR\NI\RES\SHR\S\%MEM TIME+都代表什么
PID 进程号 USER 用户名 PR 优先级 NI nice值.负值表示高优先级,正值表示低优先级 RES 进程使用的.未被换出的物理内存大小,单位Kb S 进程状态: D 不可中断的睡眠状态 R ...
- LoadCursor 函数
从可执行文件中载入指定的光标资源,加载到指定的应用实例中 ? 1 2 3 4 5 HCURSOR WINAPI LoadCursor( _In_opt_ HINSTANCE hInstance, ...
- Summarize code for the three presentation experiments
Image Picker Controller @IBAction func experiment() { let controller = UIImagePickerController() sel ...