用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学生成绩管理系统和计算器

  • 2015年03月20日 20:41
  • 119KB
  • 下载

简化版图书管理系统基本思路(步骤)(含代码)

首先,在写数据库时需要遵循以下几个原则:    数据库的命名规范:             方便代码的交流和维护             不影响代码的效率,不与大众习惯冲突             使...

OC学生管理系统

  • 2015年01月17日 17:37
  • 45KB
  • 下载

学生教师管理系统(OC)

  • 2015年11月15日 13:25
  • 27KB
  • 下载

多条件分页,增加,修改,删除(包含文件上传,下载)(图书管理系统)

首先,我们看一下实现类中的 sql代码 package cn.happy.dao.impl; import java.sql.ResultSet; import java.util.ArrayLi...

JAVA实现简单的图书管理系统

初步的去学习使用java来编写一个微型的图书管理系统。在这个里面实现几个功能。 (1)查询现有图书 (2)新增图书 (3)借阅图书 (4)归还图书 (5)删除图书 (6)退出系统 这编写...

图书管理系统之登录界面实现

实现效果图如下,通过输入的用户名链接到数据库并判断该用户是否存在,存在与否都会给出提示,若存在点击登录时判断密码是否正确,若正确则登录成功,否则登录失败。 其中用户名输入框用到的监听较多,有Acti...

简单的图书管理系统php实现

数据库的结构: create table book( id int not null auto_increment primary key, bookname varchar(50) not nul...

图书管理系统(文件实现)

通过使用文件实现对数据的操作。其中文件的写和读分别放在构造和析构函数实现。       #include //bookbase.h #include #include #include using n...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用OC实现图书管理系统(基本包含OC大部分知识)
举报原因:
原因补充:

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