简单图书管理实现

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值