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 框架模块

系统的框架大概分为:

  1. 提示信息输出模块
  2. 影院影片输出模块
  3. 购买电影票模块
  4. 选择座位号(行、列)模块
  5. 出票(输出座位号,支付等)模块

--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;
}

【写在结尾:】

『没有失败,只有放弃』

时间: 2024-10-10 13:11:57

OC-《购票系统》的相关文章

OC代码实现的购票系统

一.一个有关oc实现的购票系统 此次的购票系统主要是通过OC来编程的,下面我将把握的思路和大家分享. 1.思路. 我们直接来看我写的几张思路图吧.上面都写的很明白,下面的主要思路就是大致的方向. #import <Foundation/Foundation.h> #import "Cinema.h" void buyMovieTicket(){ //调用 电影院的类的 buyTicket的方法 Cinema *cinema = [[Cinema alloc] initWit

黑马程序员——c语言学习心得—— 电影购票系统

黑马程序员——c语言学习心得——  电影购票系统 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1,基础信息类 #import <Foundation/Foundation.h> #import "Cinema.h" void buyMovieTicket(){ //购买电影票 //调用 电影院的类的 buyTicket的方法 //                  [[Cinema alloc] init]; C

MFC多线程之购票系统

MFC线程--购票系统演示 在大学操作系统课程中,进程和线程是一个经常谈到的话题,而购票系统是关于线程的一个经典的例子,它涉及到创建线程,线程同步等. 废话不多说,下面就用MFC来实现该购票系统. 1.新建一个MFC的对话框应用程序(工程名为 线程),按下图添加控件. 2.在"线程Dlg.h"文件中添加以下代码 //结构体,传给线程的参数 struct Ctrls { CProgressCtrl* progress; CStatic* text; }; //声明线程中执行的函数 UIN

《结对-航空购票系统-结对项目总结》

<结对-航空购票系统-结对项目总结> 历时两个多月的结对编程已经进入尾声了,这个过程中遇到的问题以及解决的办法也让我受益匪浅,我明白了结对编程分工与合作有机协调的重要性.在和别人交流的过程之中,言简意赅的表达自己的思路或者想法,也提高了自己的语言交际能力.编程中自己有不规范的地方也经过室友的提示得到了规范,也深刻明白了取长补短的益处,看到别人对同样的问题有更好的解决办法后,自己也学到了这些知识.所以,对于一个结对编程开发项目,两人之间不仅有相互督促也有相互进步.组队编程明确需求是基础,提高效率

购票系统

目录 购票系统 #思路 界面Gui构建 控件判断方法 实体类属性 结果 参考 购票系统 此购票系统是一个单机系统,我在数据库读取过程中遇到了困难,暂时没有办法解决 #思路 使用三层架构的方法,把实现方法,实现接口和实体对象分离,再在测试类中运行 界面Gui构建 //定义路线的组件 JLabel jl1,jl2; JComboBox comBox1; JButton jb1; JPanel jp4,jp_top; //定义显示车票数据的组件 JTextArea jta; JScrollPane j

Objective-C 【完整OC项目-购票系统-系统分析-代码实现】

电影院买票系统/演唱会买票系统 需求分析: 首先我们进入系统,然后会选择买电影票还是买演唱会票,所以这牵扯两个系统的合成.但是我们知道都是买票系统,所以我们可以先创建一个类,属于购买电影票和演唱会的票的共同点,我们可以创建一个Ticket,让电影票MovieTicket和演唱会票ConcertTicket都去继承Ticket,然后再在MovieTicket和Concert中写他们各自特有的方法.所以这就牵扯到了三个类.再去想,我们在main函数中调用买电影票buyMovieTicket的方法和买

电影院购票系统1.0--还未看老师代码自己写的

/*打开团购软件后,进入电影票购买模块.可选择影院地址优先或影片优先(暂时实现以下标号的步骤) 1.欢迎界面,内容:按1-选择电影票 按2-选择演唱会门票(2暂时不实现,实现方法同电影票) 2.接收输入1,显示所有电影票信息(暂定2部):电影编号,影片名字,主演,上映时间,时长,票价,是否3D(BOOL),放映厅号 3.接收输入,输出对应影片的大厅的座位表(打出行列号和座位(NSMutableArray数组,遍历数组转成c字符串后,printf分行打印) 提示用户选择座位行列号. 4.接收用户输

拒绝LOW ---青鸟影院购票系统

1.首先我们需要了解这个软件的功能: 1).影院每天更新放映列表,系统支持实时查看,包括电影放映场次的时间: 2).影院提供三类影票:普通票,学生票和赠票: 3).允许用户查看某场次座位的售出情况: 4).允许购票,并允许用户选座: 5).用户可以选择场次.影票类型及空闲座位进行购票,并打印电影票: 6).系统可以保存销售情况,并允许对其进行恢复: [Serializable] //可序列化 public class Seat { public string SeatNum { get; set

《结对-航空购票系统-设计文档》

实现功能: 控制(添加,更新,删除)有关航班的信息: 控制(添加,更新,删除)有关机票的信息: 控制(添加,更新,删除)有关客户的信息: 查询特定条件的航班的信息: 查询特定条件的机票资源的信息: 查询特定条件的客户信息: 用户操作功能: 客户基本信息:身份证号,姓名,手机号码,编号(UID) 购票记录信息:时间,票价,机票编号,办理业务员(WID), 购票客户(UID) 付费方式 航班信息:航班号,出发城市,抵达城市,出发时间,抵达时间,航班容纳人数 机票信息:航班号,座次,机票类型,机票编号