1. 需求分析
进入电影院我们首先看到的是各种影讯,然后根据影讯选择我们要观看的电影,选择观看时间,选座位,付钱,之后会收一张票,票上面标明了影片名称,影厅编号,影片放映时间
流程分析:::
1) 要有影讯信息
2) 选择我们要看到电影
3) 选择座位
4) 打印票据信息
2. 功能分析
1) 选择购票种类
① 定义变量保存用户选择的结果
② 提示信息,让用户选择
③ 分别定义两个函数,购买电影票和演唱会票
④ 在函数中创建电影院对象,调用购票的方法
2) 显示最新上映的影片信息
① 重写电影院类的构造方法
② 初始化影片的数组
③ 通过for循环遍历数组,显示所有的影片信息
3) 选择影片
① 选择影片编号
② 保存选择的影片信息
4) 选择座位信息
① 初始化座位信息
② 显示座位信息
③ 选择排数
④ 选择座位数
⑤ 购票再次确认
5) 打印电影票
① 提示购票成功
② 打印购票信息
③ 显示座位信息
3. 类设计
4. 功能代码实现
//基础信息类
#import <Foundation/Foundation.h>
@interface Common : NSObject
//名称
@property NSString *name;
//时长
@property int longTime;
//主演
@property NSString *actor;
//导演
@property NSString *director;
//上映时间
@property NSString *showTime;
//编号
@property int no;
@end
#import "Common.h"
@implementation Common
@end
//票类
#import "Common.h"
@interface Ticket : Common
//排数
@property int rowNum;
//座位号
@property int colNum;
//地点
@property NSString *place;
//开始时间
@property NSString *startTime;
//打印票
@end
#import "Ticket.h"
@implementation Ticket
@end
//电影票类
#import "Ticket.h"
@interface MovieTicket : Ticket
//票价
@property float price;
//电影票编号
@property int ticketNo;
@end
#import "MovieTicket.h"
@implementation MovieTicket
@end
//电影院类
#import <Foundation/Foundation.h>
#import "MovieTicket.h"
@interface Cinema : NSObject
{
//电影院名称
NSString *_cinemaName;
//票的集合
MovieTicket *tickets[5];
}
-(instancetype)initWithCinemaName:(NSString*)name;
//开始购票
-(void)buyTicket;
//显示正在上映的电影票
-(void)list;
//选择电影
-(void)selectMovie;
//选择排数
-(void)selectRow;
//选择座位号
-(void)selectCol;
//开始支付
-(void)pay;
//出票(打印票)
-(void)printTicket;
@end
#import "Cinema.h"
#define ROW 7
#define COL 15
//用户选择的电影编号
int selectNo;
@implementation Cinema
//初始化影片信息
-(instancetype)initWithCinemaName:(NSString*)name{
//先让父类初始化
if (self = [super init]) {
//给电影院初始化名字
_cinemaName = name;
//给电影票数组初始化
for (int i=0; i<5; i++) {
MovieTicket *mvticket = [MovieTicket new];
//给对象赋值
mvticket.name = [NSString stringWithFormat:@"钢铁侠%02d",i+1];
mvticket.longTime = 120;
mvticket.actor = @"钢铁侠";
mvticket.director = @"jams";
mvticket.no = i+1;
mvticket.showTime = [NSStringstringWithFormat:@"201%d-12-12",i];
mvticket.startTime = [NSString stringWithFormat:@"1%d:30",i];
mvticket.price = 19.9f;
mvticket.place = [NSString stringWithFormat:@"%02d",i+1];
tickets[i] = mvticket;
}
}
return self;
}
//开始购票
-(void)buyTicket{
NSLog(@"开始购票");
//显示正在上映的电影票
[self list];
}
//显示正在上映的电影票
-(void)list{
NSLog(@"显示正在上映的电影票");
/*
编号 名称
主演 开始时间
导演 时长
上映时间
*/
for (int i=0; i<5; i++) {
NSLog(@"\n\n编号:%d 名称:%@\n主演:%@ 开始时间:%@\n导演:%@ 时长:%d\n上映时间:%@\n\n",tickets[i].no,tickets[i].name,tickets[i].actor,tickets[i].startTime,tickets[i].director,tickets[i].longTime,tickets[i].showTime);
}
//选择电影
[self selectMovie];
}
//选择电影
-(void)selectMovie{
NSLog(@"选择电影");
/*
定义一个全局变量,保存用户输入的选择编号
提示用户选择一部电影
接收用户输入的电影编号
保存编号
*/
//提示用户选择一部电影
printf("请选择要观看的电影编号:\n");
int num;
//接收用户输入的电影编号
scanf("%d",&num);
if (num<0 || num>5) {
return;
}
//保存编号
selectNo = num;
NSLog(@"您已经选择了影片:%@\n\n",tickets[selectNo-1].name);
//选择排数
[self selectRow];
}
//选择排数
/*
把电影院的所有作为信息打印出来看一下
提示,当前影厅有多少排,每排有多少座位
提示让用户选择排数
保存排数信息
*/
-(void)selectRow{
NSLog(@"选择排数");
printf("当前影厅共有%d排,每排有%d个座位\n",ROW,COL);
//1)把电影院的所有作为信息打印出来看一下
for (int i=-1; i<ROW; i++) {
for (int j=-1; j<COL; j++) {
if (i==-1) {
printf("%02d ",j+1);
}else if(j==-1){
printf("%02d ",i+1);
}else{
printf(" + ");
}
}
printf("\n");
}
//2)提示让用户选择排数
printf("请选择排数:\n");
int num;
//3)保存排数信息
scanf("%d",&num);
if (num<0||num>7) {
return;
}
tickets[selectNo-1].rowNum = num;
//选择座位号
[self selectCol];
}
//选择座位号
-(void)selectCol{
NSLog(@"您已经选择了第%d排,请选择座位号:\n",tickets[selectNo-1].rowNum);
printf("请选择座位号:\n");
int num;
//3)保存排数信息
scanf("%d",&num);
if (num<0||num>15) {
return;
}
tickets[selectNo-1].colNum = num;
//显示用户的选择信息
NSLog(@"您选择的影片是:\n %@ 开始时间:%@\n 第%d排%d座 \n 票价:%.2f",tickets[selectNo-1].name,tickets[selectNo-1].startTime,tickets[selectNo-1].rowNum,tickets[selectNo-1].colNum,tickets[selectNo-1].price);
//确认
printf("请确认:1.确定 0.取消\n");
int flag;
scanf("%d",&flag);
if (flag) {
//开始支付
[self pay];
}
}
//开始支付
-(void)pay{
NSLog(@"开始支付...\n支付完成...\n");
//出票(打印票)
[self printTicket];
}
//出票(打印票)
-(void)printTicket{
NSLog(@"出票");
NSLog(@"恭喜您,购票成功!\n购票信息如下:\n %@ 开始时间:%@\n 第%d排%d座 影厅 %@ \n 票价:%.2f",tickets[selectNo-1].name,tickets[selectNo-1].startTime,tickets[selectNo-1].rowNum,tickets[selectNo-1].colNum,tickets[selectNo-1].place,tickets[selectNo-1].price);
//打印座位信息
for (int i=-1; i<ROW; i++) {
for (int j=-1; j<COL; j++) {
if (i==tickets[selectNo-1].rowNum &&j==tickets[selectNo-1].colNum) {
printf(" @ ");
}else if (i==-1){
printf("%02d ",j+1);
}else if(j==-1){
printf("%02d ",i+1);
}else{
printf(" + ");
}
}
printf("\n");
}
}
@end