用OC实现图书管理系统(基本包含OC大部分知识)

原创 2013年12月02日 19:51:09

 

首先是两个类:Book和BookMIX,以下是相关代码:

 

#import <Foundation/Foundation.h>

@interface Book : NSObject <NSCoding>
{
    NSString *name;
    NSString *publishr;
    int number;   //书的编号
    int amount;   //书的数量
    int price;
}
@property NSString *name;    //书的名字
@property NSString *publishr;  //出版社
@property int number;   //书的编号
@property int amount;   //书的数量
@property int price;     //  书的价格

-(void)inputBook;
-(void)printInfo;

@end

#import "Book.h"

@implementation Book

@synthesize name;
@synthesize price;
@synthesize publishr;
@synthesize number;
@synthesize amount;

-(void)inputBook{        //录入图书的信息
    char nam[20];
    char pub[40];
    printf("请输入图书的编号 书名 出版社 价格 剩余数量\n");
    scanf("%d %s %s %d %d",&number,nam,pub,&price,&amount);
    name=[NSString stringWithUTF8String:nam];
    publishr=[NSString stringWithUTF8String:pub];
}
-(void)printInfo{       //打印出图书信息
    NSLog(@"图书的编号%d 书名%@  出版社%@ 价格%d 剩余数量%d\n",number,name,publishr,price,amount) ;
}
//实现coding协议的两种方法(编码和解码)
-(void) encodeWithCoder:(NSCoder *) aCoder{    // 编码
    [aCoder encodeObject:name forKey:@"name"];
    [aCoder encodeObject:publishr forKey:@"publisher"];
    [aCoder encodeInt:price forKey:@"price"];
    [aCoder encodeInt:number forKey:@"number"];
    [aCoder encodeInt:amount forKey:@"amout"];
}
-(id) initWithCoder:(NSCoder *)aDecoder{     // 解码
    
    self.name=[aDecoder decodeObjectForKey:@"name"];
    self.publishr=[aDecoder decodeObjectForKey:@"publisher"];
    self.number=[aDecoder decodeIntForKey:@"number"];
    self.price=[aDecoder decodeIntForKey:@"price"];
    self.amount=[aDecoder decodeIntForKey:@"amount"];
   
    return self;
   
}

@end

 

#import <Foundation/Foundation.h>
#import "Book.h"

@interface BookMIX : NSObject{
    NSMutableArray *allBook; //  所有图书
    NSMutableArray *record;   // 出售纪录
}
-(id)init;
-(void)addBook:(Book *) Book;        // 增加一本书
-(void)printallBook;                // 打印出所有的书
-(Book*)findBookNumber:(int) num;    //按学号查找图书
-(Book*)findBookName:(NSString *) nam;  //按书名查找图书
-(void)saleBook:(int) num;              //销售图书
-(void)printRecord;   //打印出增加和销售图书的纪录
-(void)saveBook;    //保存图书
-(void)readBook;   //读取图书
@end

#import "BookMIX.h"

@implementation BookMIX

-(id)init{
    if (self=[super init]) {
        allBook=[[NSMutableArray alloc]init];
        record=[[NSMutableArray alloc]init];
    }
    else{
        return nil;
    }
    return self;
}
-(void)addBook:(Book *) Book{      // 增加一本书
   
    [allBook addObject:Book];   //将新增加的书存到整体
   
    NSDate *date=[[NSDate alloc]initWithTimeIntervalSinceNow:(8*60*60)];
    [record addObject:[NSString stringWithFormat:@"\n%@增加了一本图书书名为%@",date,Book.name]];
}
-(void)printallBook{             //  输出所有的书
    Book *temp=[[Book alloc]init];
    for (int i=0; i<[allBook count]; i++) {
        temp=[allBook objectAtIndex:i];
        [temp printInfo];
    }
}
-(Book*)findBookNumber:(int) num{      // 按编号查找图书
    Book *temp;
    int i;
    for (i=0; i<[allBook count]; i++) {
        temp=[allBook objectAtIndex:i];
        if ((temp.number==num)) {
        [temp printInfo];
            break;
        }
    }
    if (i==[allBook count]) {
        printf("查无此书\n");
    }
    return nil;
}
-(Book*)findBookName:(NSString *) nam{       //按书名查找图书
    Book *temp;
    int i;
    for (i=0; i<[allBook count]; i++) {
        temp=[allBook objectAtIndex:i];
        if ([temp.name isEqualToString: nam]) {
            //return temp;
        [temp printInfo];
            break;
        }
    }
    if (i==[allBook count]) {
        printf("查无此书\n");
    }
    return nil;

   
}
-(void)saleBook:(int) num{          //销售图书
    Book *temp;
    int i;
    for (i=0; i<[allBook count]; i++) {
        (temp=[allBook objectAtIndex:i]);
        if (temp.number==num){
            if (temp.amount>0) {
                temp.amount--;
            NSDate *date=[[NSDate alloc]initWithTimeIntervalSinceNow:(8*60*60)];
            [record addObject:[NSString stringWithFormat:@"\n%@卖出了一本图书书名为%@",date,temp.name]];
                printf("\n卖书成功");
                break;
            }else{
                printf("\n对不起,书卖完了");
                break;
            }
           
        }
    }
    if (i==[allBook count]) {
        printf("查无此书\n");
    }
}
-(void)printRecord{            //输出所有添加和销售图书的纪录
    for (int i=0; i<[record count]; i++) {
       NSLog(@"%@",[record objectAtIndex:i] );
    }
   
}

-(void)saveBook{

    NSData *data=[[NSData alloc]init];    //归档图书信息
    data=[NSKeyedArchiver archivedDataWithRootObject:allBook];   //data用来保存数组allstudent的编码数据
    [data writeToFile:@"/Users/lileigang/Desktop/book.txt" atomically:YES];  //把归档后的数据存入文件中(注意路径是否正确)
    NSLog(@"\n图书信息保存成功"); 
   
    NSData *data2=[[NSData alloc]init];   //把销售和增加图书记录归档
    data2=[NSKeyedArchiver archivedDataWithRootObject:record];//data用来保存数组record的编码数据

    [data2 writeToFile:@"/Users/lileigang/Desktop/bookrecord.txt" atomically:YES];//把归档后的数据存入文件中(注意路径是否正确)
    NSLog(@"\n记录信息保存成功");
   
}
-(void)readBook{
   
    [allBook removeAllObjects];//先清空数组中的内容再读取。
    [record removeAllObjects];
   
    //从文件中读出归档过的数据
    NSData *data=[NSData dataWithContentsOfFile
                  :@"/Users/lileigang/Desktop/book.txt"];
    //用array保存把data解码后的数据
    NSArray *array=[NSKeyedUnarchiver unarchiveObjectWithData:data ];
    [allBook addObjectsFromArray:array];//把数据赋给allstudent
    NSLog(@"\n图书信息读取成功");
   
    NSData *data2=[NSData dataWithContentsOfFile
                   :@"/Users/lileigang/Desktop/bookrecord.txt"];
    //用array保存把data解码后的数据
    NSArray *array2=[NSKeyedUnarchiver unarchiveObjectWithData:data2 ];
    [record addObjectsFromArray:array2];//把数据赋给allstudent
    NSLog(@"\n记录信息读取成功");
   
   
}

@end

然后以下是main函数的代码:

  

#import <Foundation/Foundation.h>
#import "Book.h"
#import "BookMIX.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        printf("\n欢迎进入图书管理系统");
        printf("llg2013-2014作品\n");
       
        char c;
        BookMIX *bm=[[BookMIX alloc] init];    //定义一个图书系统变量bm;
        while(YES){
            printf("\n1、添加图书");
            printf("\n2、输出所有图书");
            printf("\n3、查找图书");
            printf("\n4、销售图书");
            printf("\n5、销售纪录");
            printf("\n6、保存图书");
            printf("\n7、读取图书");
            printf("\n8、退出\n");
           
        scanf(" %c",&c);
            switch (c) {
                case '1':{
                    Book *temp=[[Book alloc]init];
                    [temp inputBook];
                    [bm addBook:temp];
                }
                     break;
                case '2':{
                    [bm printallBook];
                }
                    break;
           
                case '3':{
                    char name[20];
                    printf("\n请输入图书名字:");
                    scanf(" %s",name);
                    NSString *str=[NSString stringWithUTF8String:name];
                    Book *temp;
                    if ([str intValue]) {
                        temp=[bm findBookNumber:[str intValue]];
                    }else{
                        temp=[bm findBookName:str];
                    }
                    [temp printInfo];
                   
                }
                    break;
                case '4':{
                    int num;
                    printf("\n请输入图书编号:");
                    scanf(" %d",&num);
                   
                    [bm saleBook:num];
                   
                }
                    break;
                case '5':{
                    [bm printRecord];
                }
                    break;
                case '6':{
                    [bm saveBook];
                   
                }
                    break;
                   
                case '7':{
                    [bm readBook];
                   
                }
                    break;

                case '8':{
                    return 0;
                }
                    break;
                default:
                    break;
            }
           

        }
    }
    return 0;
}

 

程序可以正常运行,注意保存和读取时一定要注意路径的问题!(比如说你将一个文件保存在桌面上,一定要与自己电脑的桌面路径相同,因为不同的计算机桌面路径一般不同。

 

 

用OC实现图书管理系统

首先是两个类:Book和BookMIX,以下是相关代码:   #import @interface Book : NSObject {     NSString *name;...
  • u012894631
  • u012894631
  • 2013年12月22日 14:38
  • 1024

OC学习笔记一---第一个OC程序

一、OC简介 OC是Objective-C的简称,从名字来看,就可以知道OC这个语言是在C语言的基础上建立起来了,所以OC完全兼容C语言的语法,并且也可以在OC中插入C语言的代码,OC与C语言的不同是...
  • qq441571205
  • qq441571205
  • 2015年01月26日 18:28
  • 988

面试题: 栈和队列的OC实现.

出坑了, 不知道什么时候再回来, 以后把它写完, 现在先删了.栈的定义:在介绍栈之前, 我们要先说一下什么是线性表.线性表(linear list)是由n(n≥0)n(n \geq 0)个数据元素所构...
  • liujunyi271828
  • liujunyi271828
  • 2016年07月09日 15:30
  • 981

使用OC实现图书管理系统

首先介绍一下基础知识:不可变数组,可变数组,不可变字典,可变字典 NSArray的初始化:nil作为存放元素结束的标志 NSArray *arr1 = [[NSArray alloc] initW...
  • fuyuren
  • fuyuren
  • 2015年12月25日 10:05
  • 746

OC基础知识汇总

OC部分 第一部分   基本概念  OC概述 OC是一种能够完成复杂面向对象编程的简单的计算机设计语言。 通过提供用于定义类和方法的语法,它扩展了标准的c语言。它还提供了类和接...
  • u014165686
  • u014165686
  • 2014年08月11日 20:06
  • 1297

个人对于OC中delegate、block的简单理解

(1)delegate解决对象对象间通信问题的关键:判断谁是代理对象,谁是被代理对象。 谁产生事件,就是被代理对象。被代理对象有一个delegate属性,并且在这个类里面定义一个protoco...
  • qq_30253103
  • qq_30253103
  • 2017年02月17日 11:11
  • 371

OCUI界面设计:程序基本结构

UIWindow 窗口简介 UIWindow作为程序的窗口,容纳所有的界面元素。 程序中一般只有一个window,默认由系统初始化。 一个工程需要一个UIWindow窗口对象,并且同一时间仅能有一个U...
  • Hierarch_Lee
  • Hierarch_Lee
  • 2015年08月06日 23:13
  • 3920

OC中导入#import头文件 和 @class的简单理解

在Objective-c中,当一个类需要引用另一个类的接口时,需要在类的头文件中建立被引用类的指针 示例: MainViewController.m文件 #import "MainViewCo...
  • yubingdian2011
  • yubingdian2011
  • 2014年12月18日 14:36
  • 705

OC类和对象之四hash结构

OC类和对象之四hash结构 1,简介 hash是一种将关键字data的key值进行散列存储的技术,它可以根据关键字的key值得到关键字的实际存储位置,它查找的效率为O(1)级别,现实中根据冲突的...
  • lipeng08
  • lipeng08
  • 2014年03月25日 18:58
  • 1744

oc-c实现的escape和unescape函数

最近项目中用js的escape函数,要求原生的也用,网络搜索了半天没有结果,只好对着java的实现自己实现一个,放在这里希望有需要的小伙伴能用到。 个人对oc不是很熟悉,如果你有更好的实现,也别喷我...
  • liyeo
  • liyeo
  • 2015年06月23日 17:56
  • 1036
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用OC实现图书管理系统(基本包含OC大部分知识)
举报原因:
原因补充:

(最多只允许输入30个字)