OC-《购票系统》
来个命令行的购票系统
–1– 需求分析 1.1 分析 1.2 功能分析 1.3 流程分析 –2– 原型展示 2.1 界面原型 –3– 系统设计 3.1 类设计 3.2 框架模块设计 –4– 实现 4.1 代码实现
————————-
【写在开头:】
『如今使用移动设备购物、买票都已经是一种基本的生活方式了,使用手机方便了我们日常的生活。没有使用UI框架,所以还是采用命令行交互的方式,完成这个购票系统,用以巩固OC的知识』
–1– 需求分析
1.1 分析
进入电影院我们首先看到的是各种影讯,然后根据影讯选择我们要观看的电影,选择观看时间,选座位,付款,之后会收到一张票,票上面标明了影片名称,影片放映时间等信息
- 要有影讯信息
- 选择要看的电影
- 选择座位
- 打印票据信息
1.2 功能分析
1、选择购票种类
思路:
1)定义变量保存用户选择的结果
2)提示信息,让用户选择
3)分别定义两个函数,购买电影票和演唱会票
4)在函数中创建电影院对象,调用购票方法
2、显示最新上映的影片信息
思路:
1)重写电影院类的构造方法
2)初始化影片的数组
3)通过for循环遍历数组,显示所有影片信息
3、选择影片
思路:
1)选择影片编号
2)保存选择的影片信息
4、《购票系统》选择座位信息
思路:
1)初始化座位信息
2)显示座位信息
3)选择排数
4)选择座位数
5)购票再次确认
5、打印电影票
思路:
1)提示购票成功
2)打印购票信息
3)显示座位信息
1.3 流程分析
–2– 原型展示
2.1 界面展示
–>欢迎界面
–>选择购买电影票
–>选择影片
–>选择座位号
–>购票
–3– 系统设计
3.1 类设计
基础信息类:
类名:Common(公有类)
属性:名称、时长、主演、导演、上映时间、编号
票类:
类名:Ticket
属性:座位排数、座位号、开始时间、地点
方法:打印票信息
电影票类:
类名:MovieTicket
属性:票价、影票编号
电影院类:
类名:Cinema
属性:名称、影厅、电影票集合
方法:
查看所有的电影信息
选择一部电影
选择多少排
选择座位数
出票
3.2 框架模块
系统的框架大概分为:
- 提示信息输出模块
- 影院影片输出模块
- 购买电影票模块
- 选择座位号(行、列)模块
- 出票(输出座位号,支付等)模块
–4– 实现
4.1 代码实现
1)基础信息类
#import <Foundation/Foundation.h> /** * 基础信息类 属性:名称、时长、主演、导演、上映时间、编号 */ @interface Common : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, assign) int longTime; //时长 @property (nonatomic, strong) NSString *actor; //主演 @property (nonatomic, strong) NSString *director; //导演 @property (nonatomic, strong) NSString *viewTime; //上映时间 @property (nonatomic, assign)int cNO; //编号 @end
为提高程序效率,@property参数使用nonatomic多线程
2)票类
#import "Common.h" /** * 票类 继承自公有类 其特有属性是:地点、开场时间、座位排数、座位号 */ @interface Ticket : Common @property (strong, nonatomic) NSString *place; //地址 @property (strong, nonatomic) NSString *startTime; //开场时间 @property (assign, nonatomic) int rowNum; //排 @property (assign, nonatomic) int colNum; //座位号 @end
3)电影票类
#import "Ticket.h" /** * 电影票类 继承自票类 其特有属性是:票价、影票编号 */ @interface MovieTicket : Ticket @property (nonatomic, assign) float moviePrice; //票价 @property (nonatomic, assign) int movieNO; //电影票编号 @end
4)电影院类
Cinema.h
#import <Foundation/Foundation.h> //*******宏 #define LEN 5 //电影票数组长度 #define ROW 5 //排 #define COL 10 //列 @class MovieTicket; /** * 电影院类 属性:电影院名称、票的集合 方法:选择排、选择座位号、选择电影、打印票 */ @interface Cinema : NSObject //声明一个集合属性,存储电影票对象 { //存储电影票对象 MovieTicket *_tickets[LEN]; //电影票的集合 } @property (nonatomic, strong) NSString *cinemaName; //电影院名称 @property (nonatomic, assign) int selectNO; //用户选择的电影编号 //自定义构造方法 - (instancetype)initWithCinemaName:(NSString *)name; - (void)doBuyTicket; //购买票 - (void)doSelectRow; //选择座位排数 - (void)doSelectCol; //选择座位号 - (void)doSelectMovie; //选择电影 - (void)doList; //列出放映影片 - (void)doPrintSeat; //打印座位图 - (void)doPay; //支付 @end
Cinema.m
#import "Cinema.h" #import "MovieTicket.h" //*******外部变量 BOOL flag = false; //flag用来控制是否购票成功的座位和输出显示 int num; //存储键盘输入 //************* @implementation Cinema /** * 初始化电影院信息 * * @param name 初始化电影院名称 * * @return 电影院类型 */ - (instancetype)initWithCinemaName:(NSString *)name{ if (self = [super init]){ //初始化父类空间 _cinemaName = name; //初始化电影票 for (int i = 0; i < 5; i++){ MovieTicket *ticket = [[MovieTicket alloc] init]; ticket.name = [NSString stringWithFormat:@"《忍者神龟%d》", i + 1 ]; ticket.place = @"高新区"; ticket.movieNO++; //电影票编号 ticket.viewTime = [NSString stringWithFormat:@"20%02d - 11 - 11", i]; //上映时间 ticket.startTime =[NSString stringWithFormat:@"1%d:00", i]; //开场时间 ticket.actor = [NSString stringWithFormat:@"柯南/超人"]; ticket.director = @"小乔"; ticket.moviePrice = 12.5f; //票价 ticket.longTime = 120; //时长 _tickets[i] = ticket; } } return self; } /** * 开始购买电影票 */ - (void)doBuyTicket{ printf("开始购票\n"); //显示正在上映的电影 [self doList]; } /** * 选择座位排数 */ - (void)doSelectRow{ [self doPrintSeat]; printf("请输入您选择的排数:\n"); scanf("%d", &num); if (num > 0 && num < ROW){ _tickets[_selectNO - 1].rowNum = num; [self doSelectCol]; } else{ NSLog(@"非法输入"); return; } } /** * 选择座位号 */ - (void)doSelectCol{ NSLog(@"您输入的排数是%d,请输入您要的座位号:\n", _tickets[_selectNO - 1].rowNum); scanf("%d", &num); if (num > 0 && num < COL){ _tickets[_selectNO - 1].colNum = num; printf("您选择的座位是:%d排 %d号,是否确认? 1.确认 0.取消\n", _tickets[_selectNO - 1].rowNum, _tickets[_selectNO - 1].colNum); scanf("%d", &num); if (num == 1) { [self doPay]; } else if (num == 0){ NSLog(@"程序正在退出..."); } else{ NSLog(@"非法输入"); return; } } } /** * 选择电影 */ - (void)doSelectMovie{ printf("请您选择您要观看的影片编号:\n"); scanf("%d", &num); if (num > 0 && num < LEN ) { self.selectNO = num; NSLog(@"\n您选择的影片为:\n编号:%d, 影片名:%@", self.selectNO, _tickets[_selectNO - 1].name); [self doSelectRow]; //选择排数 } else{ printf("您输入的影片编号不存在"); printf("系统正在推出..."); return; } } /** * 影院正在上映的影片 */ - (void)doList{ NSLog(@"%@影院正在上映的影片:", self.cinemaName); for (int i = 0; i < 5; i++) { NSLog(@"\n编号:%d\n影片名:%@, 时长%d, 主演:%@\n上映时间:%@, 开场时间:%@, 票价:%.2f", _tickets[i].movieNO, _tickets[i].name, _tickets[i].longTime, _tickets[i].actor, _tickets[i].viewTime, _tickets[i].startTime, _tickets[i].moviePrice); } [self doSelectMovie]; //选择电影 } /** * 打印座位图 */ - (void)doPrintSeat{ if (flag) { printf("购票成功,您的座号是%d排%d号:\n",_tickets[_selectNO - 1].rowNum, _tickets[_selectNO - 1].colNum); }else{ NSLog(@"\n当前影厅共有%d排 * %d列的座位", ROW, COL); printf("您可以选择的座位:\n"); } for (int i = -1; i < ROW; i++){ //多打印一行和一列编号,所以从-1开始 for (int j = -1; j < COL; j++) { if (i == _tickets[_selectNO - 1].rowNum - 1 && j == _tickets[_selectNO - 1].colNum - 1 && flag) { printf("%2c ", \'@\'); flag = false; //出票完后需将flag重置 } else{ if (j == -1) { printf("%02d ", i + 1); } else if (i == -1){ printf("%02d ", j + 1); } else{ printf("%2c ", \'+\'); } } } printf("\n"); } } /** * 支付 */ - (void)doPay{ NSLog(@"\n请确认要购买的商品信息:\n片名:%@,影院:%@, 观看时间:%@ \n金额:%.2f\n是否确认? 1.确认 0.取消\n", _tickets[_selectNO - 1].name, _cinemaName, _tickets[_selectNO - 1].startTime, _tickets[_selectNO - 1].moviePrice); scanf("%d", &num); if (num == 1) { printf("正在支付,请稍后..."); printf("支付成功!\n"); flag = true; [self doPrintSeat]; } } @end
5)程序开关
ProgramSwitch.h
/** * 购票系统开关 */ @interface ProgramSwitch : NSObject + (int) startProgram; //开启程序 @end
ProgramSwitch.m
#import "ProgramSwitch.h" #import "Cinema.h" @implementation ProgramSwitch /** * 启动界面 */ + (void) startView{ printf("********欢迎您使用购票系统********\n"); printf("您可以使用本系统购买: 1.电影票 2.演唱会票\n请您输入要购买的编号:\n"); } /** * 程序开关 */ + (int) startProgram{ [self startView]; //接收键盘输入 int num; scanf("%d", &num); switch (num) { case 1: [[[Cinema alloc] initWithCinemaName:@"柯南"] doBuyTicket]; //开始购票 break; case 2: NSLog(@"演唱会门票同理实现~~"); break; default: NSLog(@"\n非法输入"); return 1; } return 0; } @end
6)调用程序
#import <Foundation/Foundation.h> #import "ProgramSwitch.h" int main(int argc, const char * argv[]) { @autoreleasepool { [ProgramSwitch startProgram]; //开启程序 } return 0; }
【写在结尾:】
『没有失败,只有放弃』