黑马程序员——c语言学习心得—— 电影购票系统
1,基础信息类
- #import <Foundation/Foundation.h>
- #import "Cinema.h"
- void buyMovieTicket(){
- //购买电影票
- //调用 电影院的类的 buyTicket的方法
- // [[Cinema alloc] init];
- Cinema *cinema = [[Cinema alloc] initWithCinemaName:@"亿达影城"];;
- //开始购票
- [cinema buyTicket];
- }
- void buySongTicket(){
- //购买演唱会票
- }
- int main(int argc, const char * argv[]) {
- @autoreleasepool {
- //打印欢迎信息
- printf("**********欢迎使用购票系统***********\n");
- //提示用户选择
- printf("您可以使用购票系统购买:1.电影票 2.演唱会票\n");
- int num;
- scanf("%d",&num);
- //当用户选择不同的功能,调用不同的函数
- if (num == 1) {
- //在函数中创建对象,开始购票
- buyMovieTicket();
- }else if(num == 2){
- buySongTicket();
- }
- }
- return 0;
- }
2,具体实现
- @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 = @"超哥";
- mvticket.no = i+1;
- mvticket.showTime = [NSString stringWithFormat:@"200%d-11-11",i+1];
- mvticket.startTime = [NSString stringWithFormat:@"1%d:00",i+1];
- mvticket.price = 30.0f;
- mvticket.place = [NSString stringWithFormat:@"影厅%02d",i+1];
- //把对象存到数组中
- tickets[i] = mvticket;
- }
- }
- return self;
- }
- //开始购票
- -(void)buyTicket{
- NSLog(@"开始购票");
- //显示正在上映的电影
- [self list];
- }
- //显示正在上映的电影票
- /*
- 思路:
- 1)利用已有的tickets数组,打印数组信息
- 2)遍历数组
- */
- -(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];
- }
- //选择电影
- /*
- 思路:
- 1)定义一个全局变量,保存用户选择的影片编号
- 2)提示用户选择一部电影
- 3) 接收用户输入的电影编号
- 4) 保存编号
- */
- -(void)selectMovie{
- // 1)定义一个全局变量,保存用户选择的影片编号
- // 2)提示用户选择一部电影
- printf("请选择观看的电影编号:\n");
- // 3) 接收用户输入的电影编号
- int num;
- scanf("%d",&num);
- if (num<0 || num >5) {
- return;
- }
- // 4) 保存编号 // 1 2 3 4 5 //3
- selectNo = num;
- NSLog(@"\n您已经选择了影片:%@",tickets[selectNo-1].name);
- //选择排数
- [self selectRow];
- }
- //选择排数
- /*
- 思路:
- 1)把电影院的座位信息都打出来看一下
- 2)提示,当前影厅有多少排,每排有多少个座位
- 3)提示让用户选择排数
- 4) 保存排数信息
- */
- -(void)selectRow{
- 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)提示,当前影厅有多少排,每排有多少个座位
- // 3)提示让用户选择排数
- printf("请选择排数:\n");
- int num;
- scanf("%d",&num);
- if (num<0 || num >7) {
- return;
- }
- // 4) 保存排数信息
- tickets[selectNo-1].rowNum = num;
- //选择座位
- [self selectCol];
- }
- //选择座位号
- -(void)selectCol{
- printf("您已经选择了%d排,请选择座位:\n",tickets[selectNo-1].rowNum);
- printf("请选择座位数:\n");
- int num;
- scanf("%d",&num);
- if (num<0 || num >15) {
- return;
- }
- // 保存座位信息
- tickets[selectNo-1].colNum = num;
- //把用户当前的购买的信息打印出来,让用户确认
- //您选择 xxx 开始时间:
- // 第 xx 排 xx 座
- //价格:
- 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].price);
- printf("请确认:1.确认无误 0.取消\n");
- int flag;
- scanf("%d",&flag);
- if (flag) {
- //确认,然后支付
- [self pay];
- }
- }
- //开始支付
- -(void)pay{
- NSLog(@"\n开始支付...\n支付已经完成...");
- //打印票
- [self printTicket];
- }
- //出票(打印票)
- -(void)printTicket{
- NSLog(@"\n\n恭喜您,购票成功:\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++) {
- //先判断是否显示小人,
- // i == (rowNum-1) && j== (colNum-1)
- if (i== (tickets[selectNo-1].rowNum-1) && j ==(tickets[selectNo-1].colNum-1)) {
- printf(" @ ");
- }else{
- if (i==-1) {
- printf("%02d ",j+1);
- }else if(j==-1){
- printf("%02d",i+1);
- }else{
- printf(" + ");
- }
- }
- }
- printf("\n");
- }
- }
- @interface MovieTicket : Ticket
- //票价
- @property float price;
- //电影票的编号
- @property int ticketNo;
- @end