• 【iOS开发之Objective-C】书签管理器项目


    1.项目

    新建一个书签管理器的项目,能够存储书签的网址、中文名、星级、訪问量和权限信息。具有增、删、改、查和排序的功能。

    2.找对象,抽象类

    书签管理器,书签管理器。书签管理器……  多读几次书是不是就找到了对象。书签和管理器。书签包括网址、中文名和星级等信息。管理器里面有书签。那么我就能够抽象出两个类了。一个是书签类。一个是管理器类。

    我们在书签管理器里面增、删、改、查和排序书签。在书签里面保存书签具有的属性数据。

    3.对象的属性和行为分析


    书签管理器的存储关系的分析:

    4.类的实现

    1.书签类的实现

    #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
    

    2.管理器类的实现

    #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
    

    5.书签管理器的操作

    这一步我们想象成是人在操作一个带界面的书签管理器,因为没有界面,我们就仅仅能在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
    和我们预期的是一样的,说明我们的书签管理器的项目功能是实现了。

    6.总结

    在这个书签管理器中我们有下面几点须要学习的:

    1.分析项目需求;

    2.找对象,抽象出类。分析类的属性和行为;

    3.实现类;

    4.验证相关行为或方法是否正确。

    书签管理器里面存储的是书签,书签里面存储的是数据。这里我在书签管理器里面设置一个可变数组的行为来存储书签的地址。每次添加一个书签的时候我们就创建一个书签的对象。并把书签的数据写进去。

    删除书签的时候就删除该书签在数组中的位置就能够了。

  • 相关阅读:
    基于centOS7→nginx安装
    基于centOS7→tomcat安装配置
    chmod、acl权限
    解决终端SSH连接服务器一段时间不操作之后卡死的问题
    客户端加域失败,提示“找不到网络名”解决的方案
    将博客搬至CSDN
    Qt on android 蓝牙开发(控制小车)
    qt程序运行时的错误error:undefined reference to `_imp___ZN10QTcpSocketD1Ev'
    QT 实现在QLabel上画图
    linux文件访问权限(像rw-r--rw-是什么意思)
  • 原文地址:https://www.cnblogs.com/llguanli/p/6761773.html
Copyright © 2020-2023  润新知