标签:
/*打开团购软件后,进入电影票购买模块。可选择影院地址优先或影片优先(暂时实现以下标号的步骤)
1.欢迎界面,内容:按1-选择电影票 按2-选择演唱会门票(2暂时不实现,实现方法同电影票)
2.接收输入1,显示所有电影票信息(暂定2部):电影编号,影片名字,主演,上映时间,时长,票价,是否3D(BOOL),放映厅号
3.接收输入,输出对应影片的大厅的座位表(打出行列号和座位(NSMutableArray数组,遍历数组转成c字符串后,printf分行打印)
提示用户选择座位行列号。
4.接收用户输入的座位行列号,修改座位表并遍历显示,提示用户是否继续选座,若不再选座则开始付款。
5.提示正在付款,已付。然后输出总票数、显示所有被选座位的座位表。再单独输出每一张电影票的影片信息和座位号(正面),和横向座位表(反面)。
实现方法:分模块实现
类:电影类,NSMutableArray分类-座位表类(这样才能在座位表类中用相关方法。)
对象:用户类(除非分类优惠,否则没必要创建)
1、几部电影就创建几个电影对象(默认3),存到一个可变数组里,方便打印。
2、座位表对象,重构初始化方法。
3、创建存储用户循环选择座位数据的数组,方便单独打印每张票值显示自己座位的独特座位表
*/
/*
待完善:
1.oc对象转化为c类型字符,能用nslog或其他方法打出来座位表?
2.case下用 block 方法,精简相同的部分。
3.支付系统、电影院地址类等因时间原因暂时没作扩展。
4.循环提示购票和中途按键退出,暂未实现。
*/
1 #import <Foundation/Foundation.h> 2 #import "NSMutableArray+seatOfCinemaWithRows__int_rows_andCols__int__cols.h" 3 #import "Movie.h" 4 5 int main(int argc, const char * argv[]) 6 { 7 NSLog(@"----------------------"); 8 NSLog(@"--欢迎使用Dast1购票软件--"); 9 NSLog(@"----按1购买电影票-------"); 10 NSLog(@"----按2购买演唱会门票----"); 11 NSLog(@"----------------------"); 12 int ticketOfWhat; 13 int movieSlted; 14 int rows, cols; 15 int seatConfirmed; 16 int numOfTicket = 0; 17 int rowsPersonSelect[30], colsPersonSelect[30];//没必要在每一部电影里都声明和定义,因为用户只能选择进其中一个! 18 19 do 20 { NSLog(@"请输入您的选择:"); 21 rewind(stdin); 22 scanf("%d",&ticketOfWhat); 23 }while (ticketOfWhat != 1&& ticketOfWhat != 2); 24 if (ticketOfWhat == 2) 25 { 26 NSLog(@"暂时没有演唱会门票。"); 27 return 0; 28 }//else不再写,用return 0结束程序就好! 29 30 @autoreleasepool 31 { 32 33 /* _movieNum,_moviePrice, _leadingRoles, _movieLength, _threeD,_movieTingNum*/ 34 NSMutableArray *arrayOfMovie = [NSMutableArray array];//创建存放电影对象的可变数组,方便输出所有电影信息 35 Movie *movie1 = [[Movie alloc]initWithName:@"<大圣归来>" andPlayTime:(Time){2015,9,8,20,0}]; 36 movie1.movieNum = 1; 37 movie1.moviePrice = 38; 38 movie1.leadingRoles = @"范冰冰,李晨"; 39 movie1.movieLength = @"2小时30分钟"; 40 movie1.threeD = NO; 41 movie1.movieTingNum = 5; 42 [arrayOfMovie addObject:movie1]; 43 44 Movie *movie2 = [[Movie alloc]initWithName:@"<阿甘正传>" andPlayTime:(Time){2015,9,10,15,0}]; 45 movie2.movieNum = 2; 46 movie2.moviePrice = 58; 47 movie2.leadingRoles = @"史泰龙"; 48 movie2.movieLength = @"3小时30分钟"; 49 movie2.threeD = YES; 50 movie2.movieTingNum = 1; 51 [arrayOfMovie addObject:movie2]; 52 53 for (Movie* movie in arrayOfMovie) 54 { 55 [movie showDetail]; 56 } 57 58 do 59 { NSLog(@"请输入您要观看的电影编号:"); 60 rewind(stdin); 61 scanf("%d",&movieSlted); 62 }while (movieSlted < 1 || movieSlted > arrayOfMovie.count); 63 64 switch (movieSlted) 65 { 66 case 1: 67 { 68 // 根据行、列数创建并打印座位 69 rows = cols = 10; 70 NSMutableArray *arr1 = [NSMutableArray seatsOfCinemaWithRows:rows andCols:cols]; 71 [arr1 showSeatsOfCinemaWithRows:rows andCols:cols]; 72 73 //选多个座位。不再选选座,就跳出循环 74 for (int j = 0 ;2; j++) 75 { 76 do 77 { 78 NSLog(@"请输入行号和列号(空格分隔)来选择座位:"); 79 rewind(stdin); 80 scanf("%d%d",&rowsPersonSelect[j], &colsPersonSelect[j]); 81 }while (rowsPersonSelect[j] > rows || colsPersonSelect[j] > cols 82 ||[arr1[( cols * (rowsPersonSelect[j] - 1 ) ) + (colsPersonSelect[j] - 1)] compare:@"- "] == 0 );//compare实现了若座位已被选则也要重新选择座位的情况! 83 arr1[( cols * (rowsPersonSelect[j] - 1 ) ) + (colsPersonSelect[j] - 1)] = @"- ";//修改对应位置 84 NSLog(@"您选择的座位(- 代表您的位置)如下:"); 85 [arr1 showSeatsOfCinemaWithRows:rows andCols:cols]; 86 87 NSLog(@"是否继续选座?继续请按9,已选完开始付款请按1,"); 88 rewind(stdin); 89 scanf("%d",&seatConfirmed); 90 if (1 == seatConfirmed) 91 { 92 numOfTicket = j + 1;//j + 1 :记录了总票数 93 break; 94 } 95 } 96 NSLog(@"正在跳到支付界面...\n请输入账号和密码...\n已验证成功\n购票成功"); 97 NSLog(@"您共购买%d张票",numOfTicket);//票数和座位信息 98 NSLog(@"您选择的座位(- 代表您的位置)如下:"); 99 [arr1 showSeatsOfCinemaWithRows:rows andCols:cols]; 100 //打印每张票的正面影片和一个座位的信息、反面横向打印这个座位的座位图 101 for(int k = 0; k < numOfTicket;k++) 102 { 103 NSLog(@"您的第%d张票正面打印如下:",k + 1); 104 [movie1 showDetail]; 105 printf (" 座位是:第%d排第%d列\n",rowsPersonSelect[k],colsPersonSelect[k]); 106 107 NSLog(@"您的第%d张票反面横向打印如下:",k + 1); 108 NSMutableArray *arrOut = [NSMutableArray seatsOfCinemaWithRows:rows andCols:cols]; 109 [arrOut replaceObjectAtIndex:(cols * (rowsPersonSelect[k] - 1 ) ) + (colsPersonSelect[k] - 1) withObject:@"- "]; 110 [arrOut showSeatsOfCinemaWithRows:rows andCols:cols]; 111 112 } 113 } 114 break; 115 case 2: 116 { 117 // 根据行、列数创建并打印座位 118 rows = 5; 119 cols = 7; 120 NSMutableArray *arr1 = [NSMutableArray seatsOfCinemaWithRows:rows andCols:cols]; 121 [arr1 showSeatsOfCinemaWithRows:rows andCols:cols]; 122 123 //选多个座位。不再选选座,就跳出循环 124 for (int j = 0 ;2; j++) 125 { 126 do 127 { 128 NSLog(@"请输入行号和列号(空格分隔)来选择座位:"); 129 rewind(stdin); 130 scanf("%d%d",&rowsPersonSelect[j], &colsPersonSelect[j]); 131 }while (rowsPersonSelect[j] > rows || colsPersonSelect[j] > cols); 132 arr1[( cols * (rowsPersonSelect[j] - 1 ) ) + (colsPersonSelect[j] - 1)] = @"- ";//修改对应位置 133 NSLog(@"您选择的座位(- 代表您的位置)如下:"); 134 [arr1 showSeatsOfCinemaWithRows:rows andCols:cols]; 135 136 NSLog(@"是否继续选座?继续请按9,已选完开始付款请按1,"); 137 rewind(stdin); 138 scanf("%d",&seatConfirmed); 139 if (1 == seatConfirmed) 140 { 141 numOfTicket = j + 1;//j + 1 :记录了总票数 142 break; 143 } 144 } 145 NSLog(@"正在跳到支付界面...\n请输入账号和密码...\n已验证成功\n购票成功"); 146 NSLog(@"您共购买%d张票",numOfTicket);//票数和座位信息 147 NSLog(@"您选择的座位(- 代表您的位置)如下:"); 148 [arr1 showSeatsOfCinemaWithRows:rows andCols:cols]; 149 //打印每张票的正面影片和一个座位的信息、反面横向打印这个座位的座位图 150 for(int k = 0; k < numOfTicket;k++) 151 { 152 NSLog(@"您的第%d张票正面打印如下:",k + 1); 153 [movie2 showDetail]; 154 printf (" 座位是:第%d排第%d列\n",rowsPersonSelect[k],colsPersonSelect[k]); 155 156 NSLog(@"您的第%d张票反面横向打印如下:",k + 1); 157 NSMutableArray *arrOut = [NSMutableArray seatsOfCinemaWithRows:rows andCols:cols]; 158 [arrOut replaceObjectAtIndex:(cols * (rowsPersonSelect[k] - 1 ) ) + (colsPersonSelect[k] - 1) withObject:@"- "]; 159 [arrOut showSeatsOfCinemaWithRows:rows andCols:cols]; 160 161 } 162 163 } 164 break; 165 default: 166 break; 167 } 168 NSLog(@"祝您观影愉快!"); 169 } 170 return 0; 171 }
1 // 显示所有电影票信息(暂定3部):电影编号,影片名字,主演,时长,票价,是否3D(BOOL),放映厅号 2 // Movie.h 3 4 #import <Foundation/Foundation.h> 5 typedef struct 6 { 7 int year; 8 int month; 9 int day; 10 int hour; 11 int minute; 12 }Time; 13 @interface Movie : NSObject 14 @property(nonatomic, assign) int movieNum,movieTingNum, moviePrice; 15 @property(nonatomic, strong) NSString *movieName, *leadingRoles, *movieLength; 16 @property(nonatomic, assign, getter = isThreeD) BOOL threeD; 17 @property(nonatomic, assign) Time playTime; 18 - (void)showDetail; 19 - (instancetype)initWithName:(NSString*) name andPlayTime:(Time)playTime; 20 @end
1 // 显示所有电影票信息(暂定3部):电影编号,影片名字,票价,上映时间,主演,时长,是否3D(BOOL),放映厅号 2 /*@property(nonatomic, assign) int movieNum,movieTingNum, moviePrice; 3 @property(nonatomic, strong) NSString *movieName, *leadingRoles, *movieLength; 4 @property(nonatomic, assign, getter = isThreeD) BOOL threeD; 5 Movie.m 6 */ 7 8 #import "Movie.h" 9 10 @implementation Movie 11 - (void)showDetail 12 { 13 NSLog(@"\n%d.电影名称:%@\n 上映时间:%d-%02d-%02d %02d:%02d\n 票 价:%d元\n 主 演:%@ \n 时 长:%@\n 是否 3D:%@\n 厅 号:%d厅" 14 ,_movieNum, _movieName, _playTime.year,_playTime.month,_playTime.day, _playTime.hour, _playTime.minute 15 ,_moviePrice, _leadingRoles, _movieLength, _threeD == YES ? @"是" : @"否",_movieTingNum); 16 } 17 - (instancetype)initWithName:(NSString*) name andPlayTime:(Time)playTime 18 { 19 if (self = [super init]) 20 { 21 _movieName = name; 22 _playTime = playTime; 23 } 24 return self; 25 26 } 27 @end
1 // 2 // NSMutableArray+seatOfCinemaWithRows__int_rows_andCols__int__cols.h 3 4 #import <Foundation/Foundation.h> 5 6 @interface NSMutableArray (seatOfCinemaWithRows__int_rows_andCols__int__cols) 7 + (instancetype)seatsOfCinemaWithRows:(int)rows andCols:(int) cols; 8 - (instancetype)showSeatsOfCinemaWithRows:(int)rows andCols:(int) cols; 9 @end
1 // 2 // NSMutableArray+seatOfCinemaWithRows__int_rows_andCols__int__cols.m 3 4 #import "NSMutableArray+seatOfCinemaWithRows__int_rows_andCols__int__cols.h" 5 6 @implementation NSMutableArray (seatOfCinemaWithRows__int_rows_andCols__int__cols) 7 + (instancetype)seatsOfCinemaWithRows:(int)rows andCols:(int) cols 8 { 9 NSMutableArray *arr = [NSMutableArray new]; 10 for (int i = 0; i < rows * cols; i++) 11 { 12 [arr addObject:@"+ "];//每个座位对象,跟上空格,方便打印! 13 } 14 return arr;//会给警告,说nsmutablearray对象作为这个类的返回值不合理 15 } 16 // 17 - (instancetype)showSeatsOfCinemaWithRows:(int)rows andCols:(int) cols 18 { 19 // 20 NSLog(@"本场电影座位如下:"); 21 for (int i = 1; i < cols + 1; i++) 22 { 23 printf(" %02d",i); 24 } 25 printf("\n"); 26 [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 27 { 28 if (idx % cols == 0) 29 { 30 printf("%02lu ",idx / cols + 1); 31 for (int j = (int)idx; j < idx + cols; j++) 32 { 33 printf ("%s",[self[j] UTF8String]);//oc对象转化为c类型字符,能用nslog或其他方法打出来座位表? 34 } 35 printf ("\n"); 36 } 37 }]; 38 //方法2:也能正常打印。不用enum。。。方法。 39 // for (int i = 0; i < arr1.count; i++) 40 // { 41 //// printf ("%s ",[arr1[i] UTF8String]); 42 // if (i % 10 == 0) 43 // { 44 // printf("%02d ",i / 10 + 1); 45 // for (int j = (int)i; j < i + 10; j++) 46 // { 47 // printf ("%s ",[arr1[j] UTF8String]);//oc对象转化为c类型字符,能用nslog或其他方法打出来座位表? 48 // } 49 // printf ("\n"); 50 // } 51 // } 52 return self; 53 } 54 @end
输出结果:
2015-09-01 23:36:13.753 电影票购买系统[885:39403] ---------------------- 2015-09-01 23:36:13.754 电影票购买系统[885:39403] --欢迎使用Dast1购票软件-- 2015-09-01 23:36:13.755 电影票购买系统[885:39403] ----按1购买电影票------- 2015-09-01 23:36:13.755 电影票购买系统[885:39403] ----按2购买演唱会门票---- 2015-09-01 23:36:13.755 电影票购买系统[885:39403] ---------------------- 2015-09-01 23:36:13.755 电影票购买系统[885:39403] 请输入您的选择: 1 2015-09-01 23:36:19.379 电影票购买系统[885:39403] 1.电影名称:<大圣归来> 上映时间:2015-09-08 20:00 票 价:38元 主 演:范冰冰,李晨 时 长:2小时30分钟 是否 3D:否 厅 号:5厅 2015-09-01 23:36:19.379 电影票购买系统[885:39403] 2.电影名称:<阿甘正传> 上映时间:2015-09-10 15:00 票 价:58元 主 演:史泰龙 时 长:3小时30分钟 是否 3D:是 厅 号:1厅 2015-09-01 23:36:19.379 电影票购买系统[885:39403] 请输入您要观看的电影编号: 1 2015-09-01 23:36:24.467 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + + + + + + + + + 03 + + + + + + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + + + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:24.468 电影票购买系统[885:39403] 请输入行号和列号(空格分隔)来选择座位: 2 3 2015-09-01 23:36:29.550 电影票购买系统[885:39403] 您选择的座位(- 代表您的位置)如下: 2015-09-01 23:36:29.550 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + - + + + + + + + 03 + + + + + + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + + + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:29.551 电影票购买系统[885:39403] 是否继续选座?继续请按9,已选完开始付款请按1, 9 2015-09-01 23:36:36.849 电影票购买系统[885:39403] 请输入行号和列号(空格分隔)来选择座位: 3 5 2015-09-01 23:36:40.834 电影票购买系统[885:39403] 您选择的座位(- 代表您的位置)如下: 2015-09-01 23:36:40.834 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + - + + + + + + + 03 + + + + - + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + + + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:40.835 电影票购买系统[885:39403] 是否继续选座?继续请按9,已选完开始付款请按1, 9 2015-09-01 23:36:47.480 电影票购买系统[885:39403] 请输入行号和列号(空格分隔)来选择座位: 6 8 2015-09-01 23:36:50.526 电影票购买系统[885:39403] 您选择的座位(- 代表您的位置)如下: 2015-09-01 23:36:50.527 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + - + + + + + + + 03 + + + + - + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + - + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:50.527 电影票购买系统[885:39403] 是否继续选座?继续请按9,已选完开始付款请按1, 1 2015-09-01 23:36:53.496 电影票购买系统[885:39403] 正在跳到支付界面... 请输入账号和密码... 已验证成功 购票成功 2015-09-01 23:36:53.496 电影票购买系统[885:39403] 您共购买3张票 2015-09-01 23:36:53.496 电影票购买系统[885:39403] 您选择的座位(- 代表您的位置)如下: 2015-09-01 23:36:53.496 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + - + + + + + + + 03 + + + + - + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + - + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:53.496 电影票购买系统[885:39403] 您的第1张票正面打印如下: 2015-09-01 23:36:53.497 电影票购买系统[885:39403] 1.电影名称:<大圣归来> 上映时间:2015-09-08 20:00 票 价:38元 主 演:范冰冰,李晨 时 长:2小时30分钟 是否 3D:否 厅 号:5厅 座位是:第2排第3列 2015-09-01 23:36:53.505 电影票购买系统[885:39403] 您的第1张票反面横向打印如下: 2015-09-01 23:36:53.505 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + - + + + + + + + 03 + + + + + + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + + + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:53.505 电影票购买系统[885:39403] 您的第2张票正面打印如下: 2015-09-01 23:36:53.506 电影票购买系统[885:39403] 1.电影名称:<大圣归来> 上映时间:2015-09-08 20:00 票 价:38元 主 演:范冰冰,李晨 时 长:2小时30分钟 是否 3D:否 厅 号:5厅 座位是:第3排第5列 2015-09-01 23:36:53.506 电影票购买系统[885:39403] 您的第2张票反面横向打印如下: 2015-09-01 23:36:53.506 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + + + + + + + + + 03 + + + + - + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + + + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:53.507 电影票购买系统[885:39403] 您的第3张票正面打印如下: 2015-09-01 23:36:53.507 电影票购买系统[885:39403] 1.电影名称:<大圣归来> 上映时间:2015-09-08 20:00 票 价:38元 主 演:范冰冰,李晨 时 长:2小时30分钟 是否 3D:否 厅 号:5厅 座位是:第6排第8列 2015-09-01 23:36:53.507 电影票购买系统[885:39403] 您的第3张票反面横向打印如下: 2015-09-01 23:36:53.507 电影票购买系统[885:39403] 本场电影座位如下: 01 02 03 04 05 06 07 08 09 10 01 + + + + + + + + + + 02 + + + + + + + + + + 03 + + + + + + + + + + 04 + + + + + + + + + + 05 + + + + + + + + + + 06 + + + + + + + - + + 07 + + + + + + + + + + 08 + + + + + + + + + + 09 + + + + + + + + + + 10 + + + + + + + + + + 2015-09-01 23:36:53.508 电影票购买系统[885:39403] 祝您观影愉快!
标签:
原文地址:http://www.cnblogs.com/Dast1/p/4777379.html