在MRC模式下用属性语法和点语法模拟实现以下内容:一个人工作挣钱,有一天终于攒够了钱,买了一个房子,然后找了一个对象结婚。后来婚姻出现了第三者,两人离婚后此人卖掉了房子,最终和第三者结婚。
首先创建Person和House两个类, 并且两个类是互相复合的,即用@class和#import。
下面是House类中的.h文件中的代码:
@class Person;
@interface House : NSObject
@property(nonatomic, retain) Person *owner;
@property(nonatomic, retain) NSString *address;
@property(nonatomic, assign) float area;
@property(nonatomic, assign) float price;
// 初始化
- (id)initWuithOwner:(Person *)owner
Address:(NSString *)address
Area:(float)area
Price:(float)price;
// 估价
- (float)wholePrice;
// 升值
- (House *)appreciate;
@end
然后是.m文件:
- (id)initWuithOwner:(Person *)owner
Address:(NSString *)address
Area:(float)area
Price:(float)price
{
self = [super init];
if (self) {
self.owner = owner;
self.address = address;
self.area = area;
self.price = price;
}
return self;
}
- (float)wholePrice
{
int s = self.area * self.price;
return s;
}
- (House *)appreciate
{
self.price += 10;
[self wholePrice];
return self;
}
@class House;
@interface Person : NSObject
@property(nonatomic, retain) NSString *name;
@property(nonatomic, retain) NSString *sex;
@property(nonatomic, assign) int age;
@property(nonatomic, assign) int wage;
@property(nonatomic, assign) int money;
@property(nonatomic, retain) Person *spouse;
@property(nonatomic, assign) BOOL ismarried;// bool类型要用assign
@property(nonatomic, assign) BOOL ishouse;
@property(nonatomic, retain) House *ownhouse;
// 初始化
- (id)initWithName:(NSString *)name
Sex:(NSString *)sex
Age:(int)age
Wage:(int)wage
Money:(int)money
Spouse:(Person *)spouse
IsMarried:(BOOL)ismarried
IsHouse:(BOOL)isHouse
Ownhouse:(House *)ownhouse;
// 挣钱
- (int)getMoney;
// 买房子
- (void)buyHouse:(House *)hou;
// 结婚
- (void)getMarried:(Person *)a;
// 卖房子
- (void)sellHouse:(House *)hou;
// 离婚
- (void)divorce:(int)month;
// 介绍
- (void)introduce;
@end
- (id)initWithName:(NSString *)name
Sex:(NSString *)sex
Age:(int)age
Wage:(int)wage
Money:(int)money
Spouse:(Person *)spouse
IsMarried:(BOOL)ismarried
IsHouse:(BOOL)isHouse
Ownhouse:(House *)ownhouse
{
self = [super init];
if (self) {
self.name = name;
self.sex = sex;
self.age = age;
self.wage = wage;
self.money = money;
self.spouse = spouse;
self.ismarried = ismarried;
self.ishouse = isHouse;
self.ownhouse = ownhouse;
}
return self;
}
- (int)getMoney
{
self.money += self.wage;
return self.money;
}
- (void)buyHouse:(House *)hou
{
self.ishouse = YES;
hou.owner = self;
self.money -= [hou wholePrice];
self.ownhouse = hou;
NSLog(@"已买房子, %@还剩%dRMB。",
self.name, self.money);
}
- (void)getMarried:(Person *)a
{
self.ismarried = YES;
self.spouse = a;
self.spouse.ishouse = YES;
NSLog(@"%@终于和%@结婚啦, 而且开始吃软饭了。",
self.name, self.spouse.name);
}
- (void)sellHouse:(House *)hou
{
self.ishouse = NO;
self.money += [hou wholePrice];
NSLog(@"已卖掉房子, %@所剩钱数为%dRMB.",
self.name, self.money);
}
- (void)divorce:(int)month
{
for (int i = month; i > 0; i--) {
[self.ownhouse appreciate];
}
//[self.ownhouse appreciate:month];
NSLog(@"在%d个月后,由于出现第三者%@竟然变心了并且和%@离婚了。",
month, self.name, self.spouse.name);
self.ismarried = NO;
self.spouse.ismarried = NO;
self.spouse = nil;
}
- (void)introduce
{
if (self.ismarried) {
if (self.ishouse) {
NSLog(@"大家好, 我叫%@, 性别%@, 今年%d岁, 我已经结婚了, 我的另一半叫%@, 我们住在一套%.2f平的房子里, 地址是%@. ",
self.name, self.sex, self.age, self.spouse.name, self.ownhouse.area, self.ownhouse.address);
}else {
NSLog(@"大家好, 我叫%@, 性别%@, 今年%d岁, 我已经结婚了, 我的另一半叫%@, 我们至今还没有自己的房子. ",
self.name, self.sex, self.age, self.spouse.name);
}
// NSLog(@"大家好, 我叫%@, 性别%@, 今年%d岁, 我已经结婚了, 我的另一半叫%@. ",
// self.name, self.sex, self.age, self.spouse.name);
}else {
if (self.ishouse) {
NSLog(@"大家好, 我叫%@, 性别%@, 今年%d岁, 我有一套%.2f平的房子, 地址是%@, 至今未婚, 有意者请联系我,联系方式:110119",
self.name, self.sex, self.age, self.ownhouse.area, self.ownhouse.address);
}else{
NSLog(@"大家好, 我叫%@, 性别%@, 今年%d岁, 至今未婚, 有意者请联系我,联系方式:110119",
self.name, self.sex, self.age);
}
}
}
最后是主函数中的试验:
Person *dd = [[[Person alloc] initWithName:@"穷屌丝" Sex:@"男" Age:31 Wage:50000 Money:0 Spouse:NO IsMarried:NO IsHouse:NO Ownhouse:nil] autorelease];
Person *apo = [[[Person alloc] init] autorelease];
apo.name = @"包租婆";
Person *bb = [[[Person alloc] init] autorelease];
bb.name = @"白富美";
Person *ss = [[[Person alloc] init] autorelease];
ss.name = @"小三";
House *house1 = [[[House alloc] initWuithOwner:apo Address:@"长江路88号" Area:30 Price:10000] autorelease];
int month = 0;
while (dd.money < [house1 wholePrice]) {
[house1 appreciate];
[dd getMoney];
month++;
}
NSLog(@"经过%d个月的努力奋斗, %@终于攒够钱能买%@的房子了",
month, dd.name, house1.owner.name);
[dd buyHouse:house1];
[dd introduce];
[dd getMarried:bb];
[dd introduce];
// 输入了几个月,因为设定结婚的这几个月dd是没有工作的,所以dd剩的钱就是卖掉房子和一开始买房子剩的钱。
[dd divorce:4];
[dd introduce];
[dd sellHouse:dd.ownhouse];
[dd introduce];
[dd getMarried:ss];
[dd introduce];
最后的输出结果:
2014-09-18 09:07:54.807 aa[727:303] 经过7个月的努力奋斗, 穷屌丝终于攒够钱能买包租婆的房子了
2014-09-18 09:07:54.809 aa[727:303] 已买房子, 穷屌丝还剩47900RMB。
2014-09-18 09:07:54.809 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我有一套30.00平的房子, 地址是长江路88号, 至今未婚, 有意者请联系我,联系方式:110119
2014-09-18 09:07:54.810 aa[727:303] 穷屌丝终于和白富美结婚啦, 而且开始吃软饭了。
2014-09-18 09:07:54.810 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我已经结婚了, 我的另一半叫白富美, 我们住在一套30.00平的房子里, 地址是长江路88号.
2014-09-18 09:07:54.810 aa[727:303] 在4个月后,由于出现第三者穷屌丝竟然变心了并且和白富美离婚了。
2014-09-18 09:07:54.811 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我有一套30.00平的房子, 地址是长江路88号, 至今未婚, 有意者请联系我,联系方式:110119
2014-09-18 09:07:54.811 aa[727:303] 已卖掉房子, 穷屌丝所剩钱数为351200RMB.
2014-09-18 09:07:54.812 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 至今未婚, 有意者请联系我,联系方式:110119
2014-09-18 09:07:54.847 aa[727:303] 穷屌丝终于和小三结婚啦, 而且开始吃软饭了。
2014-09-18 09:07:54.848 aa[727:303] 大家好, 我叫穷屌丝, 性别男, 今年31岁, 我已经结婚了, 我的另一半叫小三, 我们至今还没有自己的房子.
Program ended with exit code: 0