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