interface Book : NSObject
{
NSString *_name;
CGFloat _price;
}
//setter
- (void)setName:(NSString *)name;
- (void)setPrice:(CGFloat)price;
//getter
- (NSString *)getName;
- (CGFloat)getPrice;
//自定义初始化
- (id)initWithName:(NSString *)name price:(CGFloat)price;
//便利构造器
+ (id)bookWithName:(NSString *)name price:(CGFloat)price;
@end
@implementation Book
//setter
- (void)setName:(NSString *)name {
_name = name;
}
- (void)setPrice:(CGFloat)price {
_price = price;
}
//getter
- (NSString *)getName {
return _name;
}
- (CGFloat)getPrice {
return _price;
}
//自定义初始化
- (id)initWithName:(NSString *)name price:(CGFloat)price {
//第一步: 使用父类的初始化方法
self = [super init];
//第二步: 为自身实例变量赋值
if (self) {
_name = name;
_price = price;
}
//第三步: 返回赋完值之后的对象
return self;
}
//便利构造器
+ (id)bookWithName:(NSString *)name price:(CGFloat)price {
Book *book = [[Book alloc] initWithName:name price:price];
return book;
}
@end
int main(int argc, const char * argv[]) {
Book *book1 = [Book bookWithName:@"jinpingmei" price:38];
Book *book2 = [Book bookWithName:@"sanguoyanyi" price:59];
Book *book3 = [Book bookWithName:@"xiyouji" price:69];
Book *book4 = [Book bookWithName:@"shuihuzhuan" price:70];
Book *book5 = [Book bookWithName:@"hongloumeng" price:69];
//1.创建可变数组, 管理所有图书
NSMutableArray *bookArray = [NSMutableArray arrayWithObjects:book1, book2, book3, book4, book5, nil];
//利用n实现退出
NSInteger n = 1;
while (n) {
NSLog(@"请输入想要执行的操作:1 -- 添加图书, 2 -- 删除书籍, 3 -- 查找书籍(修改价格), 4 -- 展示书籍清单, 5 -- 退出");
int a = 0;
scanf("%d", &a);
switch (a) {
case 1:
{ //添加书籍
//1)获取书名
NSLog(@"请输入想要添加的书籍名称");
char name[20] = {0};
scanf("%s", name);
//将C语言的字符串, 转化为OC的字符串对象
NSString *bookName = [NSString stringWithUTF8String:name];
NSInteger m = 1;
for (Book *book in bookArray) {
if ([[book getName] isEqualToString:bookName]) {
NSLog(@"本书已经有了");
m = 0;
}
}
//2.获取价格
//如果m = 0,表示书库有这本书,不用获取价格了
if (m) {
NSLog(@"请输入书籍价格");
CGFloat price = 0;
scanf("%lf", &price);
//根据书名和价格来创建图书对象
Book *newBook = [Book bookWithName:bookName price:price];
//将新的书籍添加到数组中
[bookArray addObject:newBook];
}
}
break;
case 2:
{
//删除数据
//1)从控制台获取要删除的图书名
NSLog(@"请输入要删除的图书名");
char name[20] = {0};
scanf("%s", name);
//将C语言的字符串, 转化为OC的字符串对象
NSString *bookName = [NSString stringWithUTF8String:name];
//2)根据书名查找书库(可变数组), 然后删除
//定义变量, 记录找到的图书的下标
NSUInteger index = -1;
//遍历书库(bookArray)
for (Book *book in bookArray) {
//根据书名查找比对
if ([[book getName] isEqualToString:bookName]) {
//代码能够至此, 说明找到了要找的书
//删除
//for in 遍历不能在遍历期间修改被遍历的集合中的内容!切记!!!!!!
//[bookArray removeObject:book];
//此时不能直接删除, 因此, 迂回战略 --- 记录符合要求的图书的下标.
index = [bookArray indexOfObject:book];//存储符合要求的下标
}
}
//根据记录的下标, 删除对应的对象
if (index != -1){
[bookArray removeObjectAtIndex:index];
NSLog(@"已经删除");
} else {
NSLog(@"没有这本书, 请重新查找");
}
}
break;
case 3:
{
//查找书籍(修改价格)
//1.冲控制台输入想要删除的书籍名称
NSLog(@"输入想要查找的书籍名称");
char name[20] = {0};
scanf("%s", name);
//2.将字符串装化为OC中的对象
NSString *bookName = [NSString stringWithUTF8String:name];
NSUInteger index = -1;
//3.根据书名查找书库
for (Book *book in bookArray) {
if ([[book getName] isEqualToString:bookName]) {
index = [bookArray indexOfObject:book];
}
}
if (index != -1) {
NSLog(@"请输入想要改变的价格");
CGFloat price = 0;
scanf("%lf", &price);
//修改价格
[[bookArray objectAtIndex:index] setPrice:price];
NSLog(@"修改完毕");
} else {
NSLog(@"没有这本书,请重新查找");
}
}
break;
case 4:
//展示书籍清单
for (Book *book in bookArray) {
NSLog(@"%@, %.2lf", [book getName], [book getPrice]);
}
break;
case 5:
//退出
n = 0;
break;
default:
break;
}
}
<span style="white-space:pre"> </span>return 0;
}