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

1,基础信息类
1. #import <Foundation/Foundation.h>
2. #import "Cinema.h"
3. 
4. void buyMovieTicket(){
5. 
6.     //购买电影票
7.     
8.     //调用 电影院的类的 buyTicket的方法
9.     //                  [[Cinema alloc] init];
10.     Cinema *cinema = [[Cinema alloc] initWithCinemaName:@"亿达影城"];;
11.     
12.     //开始购票
13.     [cinema buyTicket];
14. 
15. }
16. 
17. void buySongTicket(){
18. 
19.     //购买演唱会票
20. 
21. }
22. 
23. int main(int argc, const char * argv[]) {
24.     @autoreleasepool {
25.        
26.         //打印欢迎信息
27.         printf("**********欢迎使用购票系统***********\n");
28.         
29.         //提示用户选择
30.         printf("您可以使用购票系统购买:1.电影票   2.演唱会票\n");
31.         int num;
32.         scanf("%d",&num);
33.         
34.         //当用户选择不同的功能,调用不同的函数
35.         if (num == 1) {
36.             
37.             //在函数中创建对象,开始购票
38.             buyMovieTicket();
39.         }else if(num == 2){
40.         
41.             buySongTicket();
42.         
43.         }
44. 
45.         
46.     }
47.     return 0;
48. }
49. 

2,具体实现
1. @interface Cinema : NSObject
2. {
3.     //电影院的名称
4.     NSString *_cinemaName;
5.     
6.     //票的集合
7.     MovieTicket  *tickets[5];
8. }
9. -(instancetype)initWithCinemaName:(NSString *)name;
10. //开始购票
11. -(void)buyTicket;
12. //显示正在上映的电影票
13. -(void)list;
14. //选择电影
15. -(void)selectMovie;
16. //选择排数
17. -(void)selectRow;
18. //选择座位号
19. -(void)selectCol;
20. //开始支付
21. -(void)pay;
22. //出票(打印票)
23. -(void)printTicket;
24. @end
25. 
26. 
27. #import "Cinema.h"
28. #define ROW 7
29. #define COL 15
30. 
31. //定义一个全局变量,保存编号
32. int selectNo;
33. 
34. @implementation Cinema
35. 
36. //定义构造方法
37. -(instancetype)initWithCinemaName:(NSString *)name{
38. 
39.     //先让父类初始化
40.     if(self = [super init]){
41.     
42.         //给电影院初始化个名字
43.         _cinemaName  = name;
44.         
45.         
46.         //给电影票的数组初始化
47.         for (int i=0; i<5; i++) {
48.             
49.             MovieTicket *mvticket = [MovieTicket new];
50.             //给对象赋值
51.             mvticket.name = [NSString stringWithFormat:@"变性金刚%02d",i+1];
52.             mvticket.longTime = 120;
53.             mvticket.actor = @"班长/亚马逊/撸啊撸";
54.             mvticket.director = @"超哥";
55.             mvticket.no = i+1;
56.             mvticket.showTime = [NSString stringWithFormat:@"200%d-11-11",i+1];
57.             mvticket.startTime = [NSString stringWithFormat:@"1%d:00",i+1];
58.             mvticket.price = 30.0f;
59.             mvticket.place = [NSString stringWithFormat:@"影厅%02d",i+1];
60.             
61.             //把对象存到数组中
62.             tickets[i] = mvticket;
63.             
64.         }
65.     
66.     
67.     }
68. 
69.     return self;
70. 
71. }
72. 
73. //开始购票
74. -(void)buyTicket{
75. 
76.     NSLog(@"开始购票");
77.     
78.     //显示正在上映的电影
79.     [self list];
80. 
81. }
82. //显示正在上映的电影票
83. /*
84. 思路:
85. 1)利用已有的tickets数组,打印数组信息
86. 2)遍历数组
87. 
88. */
89. 
90. -(void)list{
91. 
92.     NSLog(@"显示正在上映的电影票");
93.     
94.     /*
95.      编号     名称
96.      主演     开始时间
97.      导演     时长
98.      上映时间  
99.      
100.      */
101.     for (int i=0; i<5; i++) {
102.     
103.         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);
104.     }
105.     
106.     //提示让用户选择影片
107.     [self selectMovie];
108. }
109. //选择电影
110. /*
111. 思路:
112. 1)定义一个全局变量,保存用户选择的影片编号
113. 2)提示用户选择一部电影
114. 3) 接收用户输入的电影编号
115. 4) 保存编号
116. 
117. */
118. -(void)selectMovie{
119. 
120. //    1)定义一个全局变量,保存用户选择的影片编号
121.     
122. //    2)提示用户选择一部电影
123.     printf("请选择观看的电影编号:\n");
124. //    3) 接收用户输入的电影编号
125.     int num;
126.     scanf("%d",&num);
127.     if (num<0 || num >5) {
128.         return;
129.     }
130.     
131.     
132. //    4) 保存编号     // 1 2 3 4 5    //3
133.     selectNo = num;
134.     
135.     NSLog(@"\n您已经选择了影片:%@",tickets[selectNo-1].name);
136.     
137.     //选择排数
138.     [self selectRow];
139. }
140. //选择排数
141. /*
142. 
143. 思路:
144. 1)把电影院的座位信息都打出来看一下
145. 2)提示,当前影厅有多少排,每排有多少个座位
146. 3)提示让用户选择排数
147. 4) 保存排数信息
148. 
149. */
150. -(void)selectRow{
151. 
152.     printf("当前影厅共有:%d排,每排有%d个座位。\n",ROW,COL);
153. //    1)把电影院的座位信息都打出来看一下
154.     for (int i=-1; i<ROW; i++) {
155.         for (int j=-1; j<COL; j++) {
156.             
157.             if (i==-1) {
158.                 printf("%02d ",j+1);
159.             }else if(j==-1){
160.             
161.                 printf("%02d",i+1);
162.             }else{
163.                 printf(" + ");
164.             }
165.         }
166.         
167.         printf("\n");
168.     }
169. //    2)提示,当前影厅有多少排,每排有多少个座位
170. //    3)提示让用户选择排数
171.     printf("请选择排数:\n");
172.     int num;
173.     scanf("%d",&num);
174.     if (num<0 || num >7) {
175.         return;
176.     }
177.     
178.     //    4) 保存排数信息
179.     tickets[selectNo-1].rowNum = num;
180.     
181.     
182.     //选择座位
183.     [self selectCol];
184. }
185. //选择座位号
186. -(void)selectCol{
187. 
188.     printf("您已经选择了%d排,请选择座位:\n",tickets[selectNo-1].rowNum);
189.     
190.     printf("请选择座位数:\n");
191.     int num;
192.     scanf("%d",&num);
193.     if (num<0 || num >15) {
194.         return;
195.     }
196.     
197.     //  保存座位信息
198.     tickets[selectNo-1].colNum = num;
199.     
200.     //把用户当前的购买的信息打印出来,让用户确认
201.     //您选择 xxx  开始时间:
202.     //  第 xx 排  xx 座
203.     //价格:
204.     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);
205.     printf("请确认:1.确认无误  0.取消\n");
206.     int flag;
207.     scanf("%d",&flag);
208.     
209.     if (flag) {
210.         //确认,然后支付
211.         [self pay];
212.     }
213.    
214. }
215. //开始支付
216. -(void)pay{
217. 
218.     NSLog(@"\n开始支付...\n支付已经完成...");
219. 
220.     //打印票
221.     [self printTicket];
222. }
223. //出票(打印票)
224. -(void)printTicket{
225. 
226.     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);
227.     
228.     
229.     //座位信息打印出来看一下
230.     for(int i=-1;i<ROW;i++){
231.     
232.         for (int j=-1; j<COL; j++) {
233.             
234.             //先判断是否显示小人,
235.             // i == (rowNum-1)  && j== (colNum-1)
236.             if (i== (tickets[selectNo-1].rowNum-1) && j ==(tickets[selectNo-1].colNum-1)) {
237.                 printf(" @ ");
238.                 
239.             }else{
240.             
241.             
242.                 if (i==-1) {
243.                     printf("%02d ",j+1);
244.                 }else if(j==-1){
245.                     
246.                     printf("%02d",i+1);
247.                 }else{
248.                     printf(" + ");
249.                 }
250.             
251.             }
252.         }
253.     
254.         printf("\n");
255.     }
256.     
257. }
258. 
259. @interface MovieTicket : Ticket
260. //票价
261. @property float price;
262. 
263. //电影票的编号
264. @property int ticketNo;
265. @end