新建一个书签管理器的项目,可以存储书签的网址、中文名、星级、访问量和权限信息,具有增、删、改、查和排序的功能。
书签管理器,书签管理器,书签管理器…… 多读几次书是不是就找到了对象,书签和管理器。书签包含网址、中文名和星级等信息;管理器里面有书签。那么我就可以抽象出两个类了,一个是书签类,一个是管理器类。
我们在书签管理器里面增、删、改、查和排序书签,在书签里面保存书签具有的属性数据。
书签管理器的存储关系的分析:
#import <Foundation/Foundation.h> //书签类 存储书签具体的信息/数据 @interface BookMark : NSObject{ NSString * _url; //网址 NSString * _title; //标题 NSUInteger _stars; //星级 NSUInteger _vist; //访问人数 char _level; //权限 } - (void) setUrl:(NSString *)url; - (void) setTitle:(NSString *)title; - (void) setStars:(NSUInteger)stars; - (void) setVist:(NSUInteger)vist; - (void) setLevel:(char)level; - (NSString *) getUrl; - (NSString *) getTitle; - (NSUInteger) getStars; - (NSUInteger) getVist; - (char) getLevel; //构造方法 存储数据 - (instancetype)initWithUrl:(NSString *)url withTitle:(NSString *)title withSarts:(NSUInteger)stars withVist:(NSUInteger)vist withLevel:(char)level; @end
#import "BookMark.h" @implementation BookMark - (instancetype) initWithUrl:(NSString *)url withTitle:(NSString *)title withSarts:(NSUInteger)stars withVist:(NSUInteger)vist withLevel:(char)level{ self = [super init]; if (self) { _url = url; _title = title; _stars = stars; _vist = vist; _level = level; } return self; } - (void) setUrl:(NSString *)url{ _url = url; } - (void) setTitle:(NSString *)title{ _title = title; } - (void) setStars:(NSUInteger)stars{ _stars = stars; } - (void) setVist:(NSUInteger)vist{ _vist = vist; } - (void) setLevel:(char)level{ _level = level; } - (NSString *) getUrl{ return _url; } - (NSString *) getTitle{ return _title; } - (NSUInteger) getStars{ return _stars; } - (NSUInteger) getVist{ return _vist; } - (char) getLevel{ return _level; } @end
#import <Foundation/Foundation.h> #import "BookMark.h" //书签管理器类 @interface BookManager : NSObject{ NSMutableArray * _array; } - (instancetype)init; //删除 - (void) removeBookMark:(NSString *)title; //增加 - (void) addBookMarkWithUrl:(NSString *)url withTitle:(NSString *)title withStars:(NSUInteger)stars withVist:(NSUInteger)vist withLevel:(char)level; //修改 - (void) modifyTitle:(NSString *)title withNewTitle:(NSString *)newTitle; //查找 - (void) searchWithTitle:(NSString *)title; - (void) sortWithStars; - (void) showAllBookMark; @end
#import "BookManager.h" @implementation BookManager - (instancetype)init{ self = [super init]; if (self) { _array = [[NSMutableArray alloc] init]; } return self; } //增加书签 - (void) addBookMarkWithUrl:(NSString *)url withTitle:(NSString *)title withStars:(NSUInteger)stars withVist:(NSUInteger)vist withLevel:(char)level{ for (int i = 0; i < [_array count]; i ++) { if ([title isEqualToString:[_array[i] getTitle]]) { NSLog(@"重复添加"); return; } } //下面既可以使用构造方法也可以使用set方法 BookMark *book = [[BookMark alloc] initWithUrl:url withTitle:title withSarts:stars withVist:vist withLevel:level]; // BookMark * book = [[BookMark alloc] init]; // [book setUrl:url]; // [book setTitle:title]; // [book setStars:stars]; // [book setVist:vist]; // [book setLevel:level]; [_array addObject:book]; } //删除书签 - (void) removeBookMark:(NSString *)title{ for (int i = 0; i < [_array count]; i ++) { if ([title isEqualToString:[_array[i] getTitle]]) { [_array removeObject:_array[i]]; return; } else NSLog(@"没有这个书签"); } } //修改书签 - (void) modifyTitle:(NSString *)title withNewTitle:(NSString *)newTitle{ for (int i = 0; i < [_array count]; i ++) { if ([title isEqualToString:[_array[i] getTitle]]) { [_array[i] setTitle:newTitle]; } } } //查找书签 - (void) searchWithTitle:(NSString *)title{ int index = -1; //保存书签位置 //index = -1 表示没有找到对应的书签 //遍历书签,找到后就保存目标书签位置后退出循环 for (int i = 0; i < [_array count]; i ++) { if([title isEqualToString:[_array[i] getTitle]]) { index = i; break; } } if (index == -1) { NSLog(@"没有找到需要查找的书签"); } else NSLog(@"找了该书签 pos = %d",index); } - (void) sortWithStars{ //使用冒泡排序对书签对象进行排序 for (int i = 0; i < [_array count] - 1; i ++) { //控制排序的轮数 for (int j = 0; j < [_array count] - 1 - i; j ++) { //控制比较的次数 if ([_array[j] getStars] > [_array[j + 1] getStars]) { NSArray * temp; temp = _array[j]; _array[j] = _array[j + 1]; _array[j + 1] = temp; } } } } - (void) showAllBookMark{ for (int i = 0; i < [_array count]; i ++) { NSLog(@"网址:%@ 标题:%@ 星级:%ld 访问量:%ld 权限:%c", [_array[i] getUrl], [_array[i] getTitle], [_array[i] getStars], [_array[i] getVist], [_array[i] getLevel]); } } @end
这一步我们想象成是人在操作一个带界面的书签管理器,由于没有界面,我们就只能在main函数里面操作了。例如:
#import <Foundation/Foundation.h> #import "BookMark.h" #import "BookManager.h" int main(int argc, const char * argv[]) { @autoreleasepool { //新建一个百度的书签 BookManager * myBookManager = [[BookManager alloc] init]; [myBookManager addBookMarkWithUrl:@"www.baidu.com" withTitle:@"百度" withStars:3 withVist:123 withLevel:'A']; //新建一个新浪的书签 [myBookManager addBookMarkWithUrl:@"www.sina.com" withTitle:@"新浪" withStars:7 withVist:456 withLevel:'B']; //新建一个搜狐的书签 [myBookManager addBookMarkWithUrl:@"www.souhu.com" withTitle:@"搜狐" withStars:5 withVist:756 withLevel:'C']; //重复添加 [myBookManager addBookMarkWithUrl:@"www.souhu.com" withTitle:@"搜狐" withStars:5 withVist:756 withLevel:'C']; //显示全部书签 NSLog(@"全部添加的书签"); [myBookManager showAllBookMark]; //查找 [myBookManager searchWithTitle:@"新浪"]; //删除 [myBookManager removeBookMark:@"百度"]; NSLog(@"删除后的书签"); [myBookManager showAllBookMark]; //排序 [myBookManager sortWithStars]; NSLog(@"排序后的书签"); [myBookManager showAllBookMark]; //修改 [myBookManager modifyTitle:@"新浪" withNewTitle:@"123"]; NSLog(@"修改后的书签"); [myBookManager showAllBookMark]; } return 0; }
首先我们天剑三个书签:百度、新浪和搜狐。书签的内容就是程序中的内容。
然后我们验证增加书签、查找书签、删除书签、书签排序和修改书签的行为方法是否正确。
最后程序的输出是:
2015-07-22 20:15:58.560 3.书签管理器[3083:303] 重复添加 2015-07-22 20:15:58.562 3.书签管理器[3083:303] 全部添加的书签 2015-07-22 20:15:58.563 3.书签管理器[3083:303] 网址:www.baidu.com 标题:百度 星级:3 访问量:123 权限:A 2015-07-22 20:15:58.565 3.书签管理器[3083:303] 网址:www.sina.com 标题:新浪 星级:7 访问量:456 权限:B 2015-07-22 20:15:58.565 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 访问量:756 权限:C 2015-07-22 20:15:58.566 3.书签管理器[3083:303] 找了该书签 pos = 1 2015-07-22 20:15:58.568 3.书签管理器[3083:303] 删除后的书签 2015-07-22 20:15:58.568 3.书签管理器[3083:303] 网址:www.sina.com 标题:新浪 星级:7 访问量:456 权限:B 2015-07-22 20:15:58.569 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 访问量:756 权限:C 2015-07-22 20:15:58.570 3.书签管理器[3083:303] 排序后的书签 2015-07-22 20:15:58.571 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 访问量:756 权限:C 2015-07-22 20:15:58.573 3.书签管理器[3083:303] 网址:www.sina.com 标题:新浪 星级:7 访问量:456 权限:B 2015-07-22 20:15:58.574 3.书签管理器[3083:303] 修改后的书签 2015-07-22 20:15:58.576 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 访问量:756 权限:C 2015-07-22 20:15:58.577 3.书签管理器[3083:303] 网址:www.sina.com 标题:123 星级:7 访问量:456 权限:B Program ended with exit code: 0和我们预期的是一样的,说明我们的书签管理器的项目功能是实现了。
在这个书签管理器中我们有以下几点需要学习的:
1.分析项目需求;
2.找对象,抽象出类;分析类的属性和行为;
3.实现类;
4.验证相关行为或方法是否正确。
书签管理器里面存储的是书签,书签里面存储的是数据。这里我在书签管理器里面设置一个可变数组的行为来存储书签的地址。每次增加一个书签的时候我们就创建一个书签的对象,并把书签的数据写进去。删除书签的时候就删除该书签在数组中的位置就可以了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/zhuming3834/article/details/47008217