要求描述:用OC语言完成简易通讯录(实现增删改查)功能.
(注:使用MRC)
1.创建AddressBook类.
1)使用字典作为容器,字典的Key值为分组名(姓名首字母,大写),value值为数组,数组中存放联系人(Person实例).(5分)
2)添加联系人.要求(20分)
a.判断姓名和电话不能为空否则添加失败.
b.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系人不能有重名).
c.添加成功返回YES,姓名为空或者有重名的添加失败返回NO.
d.数据使用Person存储.
e.方法:- (BOOL)addPerson:(Person *)aPerson;
3)按照姓名删除联系人.(15分)
a.方法:- (BOOL)deletePersonWithName:(NSString*)aPersonName;
b.删除成功返回YES,否则返回NO;
c.当删除联系人后分组为空时,需要删除该分组。
4)删除一个分组.(10分)
a:方法:- (BOOL)deleteGroup:(NSString *)aGroupName;
b.删除成功返回YES,否则返回NO;
5)根据电话查找某个联系人.(10分)
a:方法:-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
b:如果找到返回该联系人,否则返回nil.
c.忽略电话重复问题,只返回第一个查找到的联系人。
6)根据性别查找联系人,并将查到的联系人按照年龄升序排序(15分)
a:方法:-(NSArray *)findPersonsWithSex:(NSString *)aSex;
b:查找到联系人放入数组,排序的时候使用block.
7)根据姓名,更改联系人信息.(10分)
a:方法:-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
b:找到该联系人并修改该成功返回YES,否则返回NO
c.修改电话、性别、年龄,参数不能为空。
8)展示通讯录中的所有联系人信息(5分)
a:方法:-(void)showAll;
b.通过重写description方法展示联系人信息 。
2.使用Person类.(属性:姓名,年龄,性别,电话)
1)重写description方法,输出 “姓名:张三 性别:男 年龄:22 电话:123456789”.(5分)
AddressBook.m
Person.h
Person.m
main.m
(注:使用MRC)
1.创建AddressBook类.
1)使用字典作为容器,字典的Key值为分组名(姓名首字母,大写),value值为数组,数组中存放联系人(Person实例).(5分)
2)添加联系人.要求(20分)
a.判断姓名和电话不能为空否则添加失败.
b.判断是否已经存在分组,存在直接存储.不存在创建分组后再存储.(注:联系人不能有重名).
c.添加成功返回YES,姓名为空或者有重名的添加失败返回NO.
d.数据使用Person存储.
e.方法:- (BOOL)addPerson:(Person *)aPerson;
3)按照姓名删除联系人.(15分)
a.方法:- (BOOL)deletePersonWithName:(NSString*)aPersonName;
b.删除成功返回YES,否则返回NO;
c.当删除联系人后分组为空时,需要删除该分组。
4)删除一个分组.(10分)
a:方法:- (BOOL)deleteGroup:(NSString *)aGroupName;
b.删除成功返回YES,否则返回NO;
5)根据电话查找某个联系人.(10分)
a:方法:-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
b:如果找到返回该联系人,否则返回nil.
c.忽略电话重复问题,只返回第一个查找到的联系人。
6)根据性别查找联系人,并将查到的联系人按照年龄升序排序(15分)
a:方法:-(NSArray *)findPersonsWithSex:(NSString *)aSex;
b:查找到联系人放入数组,排序的时候使用block.
7)根据姓名,更改联系人信息.(10分)
a:方法:-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
b:找到该联系人并修改该成功返回YES,否则返回NO
c.修改电话、性别、年龄,参数不能为空。
8)展示通讯录中的所有联系人信息(5分)
a:方法:-(void)showAll;
b.通过重写description方法展示联系人信息 。
2.使用Person类.(属性:姓名,年龄,性别,电话)
1)重写description方法,输出 “姓名:张三 性别:男 年龄:22 电话:123456789”.(5分)
2)使用便利构造器创建对象.(5分)
AddressBook.h
#import <Foundation/Foundation.h>
#import "Person.h"
@interface AddressBook : NSObject
// 1.声明一个有可变字典实例变量的属性,用来按组存放通讯录信息
@property (nonatomic,retain)NSMutableDictionary * personDic;
// 2.添加联系人
-(BOOL)addPerson:(Person *)newPerson;
// 3.按照姓名删除联系人
-(BOOL)deletePersonWithName:(NSString*)aPersonName;
// 4.删除一个分组
-(BOOL)deleteGroup:(NSString *)aGroupName;
// 5.根据电话查找某个联系人
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum;
// 6.根据性别查找联系人,并将查到的联系人按照姓名排序
-(NSArray *)findPersonsWithSex:(NSString *)aSex;
// 7.根据姓名,更改联系人的信息
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge;
// 8.显示通讯录中所有联系人
-(void)showAll;
@endAddressBook.m
#import "AddressBook.h"
@implementation AddressBook
// 重写init方法,给 personDic 在堆区分配一个空间
-(id)init
{
if (self = [super init]) {
self.personDic = [[NSMutableDictionary alloc]init];
}
return self;
}
// 2.添加联系人
-(BOOL)addPerson:(Person *)newPerson
{
// a.判断姓名和电话不能为空否则添加失败.
if (newPerson.name == nil || newPerson.tel == nil) {
NSLog(@"姓名或电话为空,添加失败!");
return NO;
}
// 判断是否有重名,如果有添加失败。
for (NSString *key in _personDic) {
for (Person *person in _personDic[key]) {
if (person.name == newPerson.name) {
NSLog(@"姓名重复,添加失败");
return NO;
}
}
}
// 判断是否存在分组,不存在,创建之后再存储,存在就直接存储。
NSMutableArray *array = _personDic[newPerson.groupName];
if (array == nil) {
array = [[NSMutableArray alloc]init];
[_personDic setValue:array forKey:newPerson.groupName];
}
[array addObject:newPerson];
NSLog(@"添加联系人成功 !!! ");
return YES;
}
// 3.按照姓名删除联系人
- (BOOL)deletePersonWithName:(NSString*)aPersonName
{
/*
for (NSString *key in _personDic) {
// for (int i = 0; i < [_personDic[key] count]; i++) {
// if ([[_personDic[key][i] name] isEqualToString:aPersonName]) {
// [_personDic[key] removeObject:_personDic[key][i]];
// NSLog(@"delete Person %@ success",aPersonName);
// if ([_personDic[key] count] == 0) {
// [_personDic removeObjectForKey:key];
// }
// return YES;
// }
// }
// }
*/
for (NSString * key in _personDic) {
for (Person * p in _personDic[key]) {
if ([p.name isEqualToString:aPersonName]) { //p.name == aPersonName 也行 研究下
NSLog(@"删除联系人 %@ 成功",aPersonName);
[_personDic[key] removeObject:aPersonName];
// 如果删除联系人之后分组为空,则把分组删掉。
if ([_personDic[key] count] == 0) {
[_personDic removeObjectForKey:key];
}
return YES;
}
}
}
NSLog(@"没有这个人,无需删除!");
return NO;
}
// 4.删除一个分组
- (BOOL)deleteGroup:(NSString *)aGroupName
{
if (_personDic[aGroupName]) {
[_personDic removeObjectForKey:aGroupName];
NSLog(@"删除分组成功!!!");
return YES;
}
NSLog(@"没有该分组,无需删除 !!!");
return NO;
}
// 5.根据电话查找某个联系人
-(Person *)findPersonWithPhoneNum:(NSString *)aPhoneNum
{
for (NSString *key in _personDic) {
for (Person *person in _personDic[key]) {
if ([person.tel isEqualToString:aPhoneNum]) {
NSLog(@"根据电话号码找到了这个联系人:");
return person;
}
}
}
NSLog(@"根据电话号码没有找到这个人!!!");
return nil;
}
// 6.根据性别查找联系人,并将查到的联系人按照姓名排序
-(NSArray *)findPersonsWithSex:(NSString *)aSex
{
NSMutableArray *array = [NSMutableArray array];
for (NSString *key in _personDic) {
for (Person *person in _personDic[key]) {
if ([person.sex isEqualToString:aSex]) {
[array addObject:person];
}
}
}
// [array sortUsingSelector:@selector(compareByAge:)];
// [array sortUsingComparator:^NSComparisonResult(Person* obj1, Person* obj2) {
// return obj1.age>obj2.age;
// }];
[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return obj1>obj2;
}];
return array;
}
// 7.根据姓名,更改联系人的信息
-(BOOL)changePersonWithName:(NSString *)name phoneNum:(NSString *)aNum sex:(NSString *)aSex age:(NSUInteger) aAge
{
for (NSString * key in _personDic) {
for (Person * person in _personDic[key]) {
if ([person.name isEqualToString:name]) {
if (aNum == nil || aSex == nil || aAge == 0) {
NSLog(@"修改参数为空,添加失败");
return NO;
}else{
person.tel = aNum;
person.sex = aSex;
person.age = aAge;
NSLog(@"修改成功");
return YES;
}
}
}
}
NSLog(@"没有找到该联系人,修改失败");
return NO;
}
// 8.显示通讯录中所有联系人
-(void)showAll
{
NSLog(@"%@",_personDic);
}
@end
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
// 声明属性(包含姓名、年龄、性别、电话)
@property (nonatomic,copy)NSString *name;
@property (nonatomic,assign)NSInteger age;
@property (nonatomic,copy)NSString *sex;
@property (nonatomic,copy)NSString *tel;
// 声明属性(分组名)
@property(nonatomic,copy)NSString * groupName;
//初始化方法
-(id)initWithName:(NSString *)name
age:(NSInteger)age
sex:(NSString *)sex
tel:(NSString *)tel;
// 2.2 便利构造器
+(Person *)personWithName:(NSString *)name
age:(NSInteger)age
sex:(NSString *)sex
tel:(NSString *)tel;
// 2.1 重写description
-(NSString *)description;
// 通过年龄进行排序
-(NSComparisonResult)compareByAge:(Person *)person;
@endPerson.m
#import "Person.h"
@implementation Person
-(id)initWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex tel:(NSString *)tel
{
if ([super init]) {
_name = name;
_age = age;
_sex = sex;
_tel = tel;
_groupName = [[name substringToIndex:1]uppercaseString];
}
return self;
}
+(Person *)personWithName:(NSString *)name age:(NSInteger)age sex:(NSString *)sex tel:(NSString *)tel
{
Person *per = [[Person alloc]initWithName:name age:age sex:sex tel:tel];
return per ;
}
-(NSString *)description
{
return [NSString stringWithFormat:@"name: %@ age: %ld sex: %@ tel: %@",self.name,self.age,self.sex,self.tel];
}
//通过年龄进行排序
-(NSComparisonResult)compareByAge:(Person *)person
{
if (self.age > person.age) {
return 1;
}else if (self.age < person.age){
return -1;
}else
{
return 0;
}
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "AddressBook.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//创建通讯录
AddressBook *newPersonBook = [[AddressBook alloc]init];
//创建联系人
Person *p1 = [Person personWithName:@"Zhangsan" age:22 sex:@"m" tel:@"158"];
Person *p2 = [Person personWithName:@"Lisi" age:18 sex:@"f" tel:@"131"];
Person *p3 = [Person personWithName:@"Wangwu" age:19 sex:@"m" tel:@"187"];
Person *p4 = [Person personWithName:@"Zhaoliu" age:21 sex:@"f" tel:@"167"];
Person *p5 = [Person personWithName:@"Qianqi" age:20 sex:@"f" tel:@"199"];
Person *p6 = [Person personWithName:@"Wangwang" age:17 sex:@"m" tel:@"101"];
Person *p7 = [Person personWithName:@"Hejiu" age:18 sex:@"m" tel:@"103"];
Person *p8 = [Person personWithName:@"Jan" age:20 sex:@"m" tel:@"102"];
// 2.添加联系人到通讯录
[newPersonBook addPerson:p1];
[newPersonBook addPerson:p2];
[newPersonBook addPerson:p3];
[newPersonBook addPerson:p4];
[newPersonBook addPerson:p5];
[newPersonBook addPerson:p6];
[newPersonBook addPerson:p7];
[newPersonBook addPerson:p8];
// 3.按照姓名删除某个联系人
[newPersonBook deletePersonWithName:@"Lisi"];
// 4.删除某个分组
[newPersonBook deleteGroup:@"Z"];
// 5.根据电话查找某个联系人
Person *findper = [newPersonBook findPersonWithPhoneNum:@"102"];
NSLog(@"%@",findper);
// 6.根据性别查找联系人,并将查到的联系人按照年龄升序排序
NSLog(@"%@",[newPersonBook findPersonsWithSex:@"f"]);
// 7.修改联系人信息
[newPersonBook changePersonWithName:@"Wangwu" phoneNum:@"100" sex:@"m" age:99];
// 8.显示全部
[newPersonBook showAll];
}
return 0;
}
本文介绍如何使用Objective-C实现一个简易通讯录应用,包括添加、删除、查找和修改联系人等功能。采用字典存储联系人信息,每个联系人属于一个分组。

被折叠的 条评论
为什么被折叠?



