C++实现一个航空订票程序 来自明桑Android
2015-05-28 23:09
561 查看
题目要求:
编写一个航空订票程序:
假设一等舱5个座位,编号为1~5,经济舱20个座位,编号为1~20
具体要求如下:
当程序开始时,提示输入乘客姓名,一个名字只能订一个座位,如果该名字已经订过座位了,则提示该乘客座位已定及座位号,否则提示输入舱位类型;
当输入舱位类型后,如果该舱位已全部订出,则提示此舱全部订完,重新选择舱位类型;否则显示可以选择的座位号,注意已经被订出的座位号不能出现,提示输入座位号;
舱位类型:只能输入”F”或”E”,一等舱为F,经济舱为E,如果输入其它字符则提示输入无效。
座位号:只能输入前面列出可以选择的座位号,若输入其它则提示输入无效。
程序可以为多个乘客订票,直到输入名字为”.”;
最后程序按照舱位类型与座位号排序打印出所有订票信息(座位号及对应乘客姓名)
最终实现效果:
![](http://i.imgur.com/oGnKhYA.gif)
编写一个航空订票程序:
假设一等舱5个座位,编号为1~5,经济舱20个座位,编号为1~20
具体要求如下:
当程序开始时,提示输入乘客姓名,一个名字只能订一个座位,如果该名字已经订过座位了,则提示该乘客座位已定及座位号,否则提示输入舱位类型;
当输入舱位类型后,如果该舱位已全部订出,则提示此舱全部订完,重新选择舱位类型;否则显示可以选择的座位号,注意已经被订出的座位号不能出现,提示输入座位号;
舱位类型:只能输入”F”或”E”,一等舱为F,经济舱为E,如果输入其它字符则提示输入无效。
座位号:只能输入前面列出可以选择的座位号,若输入其它则提示输入无效。
程序可以为多个乘客订票,直到输入名字为”.”;
最后程序按照舱位类型与座位号排序打印出所有订票信息(座位号及对应乘客姓名)
最终实现效果:
![](http://i.imgur.com/oGnKhYA.gif)
1,变量
不过既然提到了结构体用来存储票的信息(其实这就是面向对象思想的早期)。联系实际,一个结构体代表一个事物,结构体中的字段代表这个事物的属性;这样的话,我们可以提取出两个结构体:座位Seat和票
Ticket,由于题目给定总共25个座位,意味着25张票,则将它们声明成全局变量。
<code class="hljs cs has-numbering"> <span class="hljs-comment">//座位,那么座位有3个基本属性:座位类型(F/E),座位编号,座位预定状态(是否已经被预定)</span> <span class="hljs-keyword">struct</span> Seat{ <span class="hljs-keyword">char</span> type; <span class="hljs-keyword">int</span> number; <span class="hljs-keyword">bool</span> isReservation; }seats[<span class="hljs-number">25</span>]; <span class="hljs-comment">//票,票有两个属性,即票需要表明:谁预定了哪个座位,第一个Seat就是我们前面定义的那个结构体。</span> <span class="hljs-keyword">struct</span> Ticket{ Seat seat; <span class="hljs-keyword">string</span> passenger_name; }tickets[<span class="hljs-number">25</span>];</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li></ul>
2,函数
我们需要将一些输出输入的操作提取成函数,简化我们的代码,这里之所以将输入提取成input()函数,是因为我们需要不断输入,即使出错,所以为了便于递归调用就封装成函数;<code class="hljs cs has-numbering"> <span class="hljs-keyword">bool</span> check(<span class="hljs-keyword">string</span> name);<span class="hljs-comment">//检测是否已购票</span> <span class="hljs-keyword">void</span> input();<span class="hljs-comment">//用于执行输入</span> <span class="hljs-keyword">void</span> printSeat(<span class="hljs-keyword">char</span> seatType);<span class="hljs-comment">//显示剩余座位</span> <span class="hljs-keyword">void</span> reservation(<span class="hljs-keyword">string</span> name,<span class="hljs-keyword">int</span> seatNumber,<span class="hljs-keyword">char</span> seatType);<span class="hljs-comment">//购票</span> <span class="hljs-keyword">void</span> printTickets(<span class="hljs-keyword">string</span> name);<span class="hljs-comment">//显示已购票信息</span> <span class="hljs-keyword">void</span> printError();<span class="hljs-comment">//显示输入不合法</span></code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul>
3,主体逻辑
main函数非常简单,首先需要将座位和票信息初始化,即将它们编号,预定状态全为“未预定”,然后执行输入,一个while循环,如果不符合条件就直接跳出while,执行printTickets()打印出所有的订票信息;<code class="hljs cpp has-numbering"> <span class="hljs-keyword">int</span> main() { <span class="hljs-comment">//初始化舱位和票</span> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<<span class="hljs-number">25</span>;i++){ <span class="hljs-keyword">if</span>(i<<span class="hljs-number">5</span>){ seats[i].type=<span class="hljs-string">'F'</span>; seats[i].number=i+<span class="hljs-number">1</span>; }<span class="hljs-keyword">else</span>{ seats[i].type=<span class="hljs-string">'E'</span>; seats[i].number=i+<span class="hljs-number">1</span>-<span class="hljs-number">5</span>; } seats[i].isReservation=<span class="hljs-keyword">false</span>; tickets[i].seat=seats[i]; tickets[i].passenger_name=<span class="hljs-string">" "</span>; } <span class="hljs-built_in">cout</span><<<span class="hljs-string">"================================================="</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 欢迎使用CT票务系统 "</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"================================================="</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"乘客姓名:"</span>; <span class="hljs-keyword">while</span>(<span class="hljs-built_in">cin</span>>>name){ <span class="hljs-keyword">if</span>(name==<span class="hljs-string">"."</span>)<span class="hljs-keyword">break</span>; <span class="hljs-keyword">if</span>(surplusF+surplusE==<span class="hljs-number">0</span>){ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n很遗憾所有票已购完!\n"</span>; <span class="hljs-keyword">break</span>; } <span class="hljs-keyword">if</span>(check(name)){ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n您已购票,购票信息:\n"</span><<endl; printTickets(name); }<span class="hljs-keyword">else</span>{ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n舱位类型 F:一等舱 E:经济舱\n"</span>; input(); } <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n乘客姓名:"</span>; } printTickets(<span class="hljs-string">""</span>); <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>; }</code><ul style="display: block;" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li></ul>
4,具体函数实现
具体的函数实现逻辑我就不讲了,就看代码吧~5,完整代码:
main.cpp
<code class="hljs cpp has-numbering"><span class="hljs-preprocessor">#include<iostream></span> <span class="hljs-keyword">using</span> <span class="hljs-keyword">namespace</span> <span class="hljs-built_in">std</span>; <span class="hljs-comment">//定义全局变量,舱位,票,各类型舱位剩余数,便于其它函数全局访问</span> <span class="hljs-keyword">int</span> surplusF=<span class="hljs-number">5</span>; <span class="hljs-keyword">int</span> surplusE=<span class="hljs-number">20</span>; <span class="hljs-keyword">int</span> flag=<span class="hljs-number">0</span>; <span class="hljs-keyword">char</span> seat_type; <span class="hljs-keyword">int</span> seatNumber; <span class="hljs-built_in">string</span> name; <span class="hljs-comment">//座位</span> <span class="hljs-keyword">struct</span> Seat{ <span class="hljs-keyword">char</span> type; <span class="hljs-keyword">int</span> number; <span class="hljs-keyword">bool</span> isReservation; }seats[<span class="hljs-number">25</span>]; <span class="hljs-comment">//票</span> <span class="hljs-keyword">struct</span> Ticket{ Seat seat; <span class="hljs-built_in">string</span> passenger_name; }tickets[<span class="hljs-number">25</span>]; <span class="hljs-keyword">bool</span> check(<span class="hljs-built_in">string</span> name);<span class="hljs-comment">//检测是否已购票</span> <span class="hljs-keyword">void</span> input();<span class="hljs-comment">//用于执行输入</span> <span class="hljs-keyword">void</span> printSeat(<span class="hljs-keyword">char</span> seatType);<span class="hljs-comment">//显示剩余座位</span> <span class="hljs-keyword">void</span> reservation(<span class="hljs-built_in">string</span> name,<span class="hljs-keyword">int</span> seatNumber,<span class="hljs-keyword">char</span> seatType);<span class="hljs-comment">//购票</span> <span class="hljs-keyword">void</span> printTickets(<span class="hljs-built_in">string</span> name);<span class="hljs-comment">//显示已购票信息</span> <span class="hljs-keyword">void</span> printError();<span class="hljs-comment">//显示输入不合法</span> <span class="hljs-keyword">int</span> main() { <span class="hljs-comment">//初始化舱位和票</span> <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<<span class="hljs-number">25</span>;i++){ <span class="hljs-keyword">if</span>(i<<span class="hljs-number">5</span>){ seats[i].type=<span class="hljs-string">'F'</span>; seats[i].number=i+<span class="hljs-number">1</span>; }<span class="hljs-keyword">else</span>{ seats[i].type=<span class="hljs-string">'E'</span>; seats[i].number=i+<span class="hljs-number">1</span>-<span class="hljs-number">5</span>; } seats[i].isReservation=<span class="hljs-keyword">false</span>; tickets[i].seat=seats[i]; tickets[i].passenger_name=<span class="hljs-string">" "</span>; } <span class="hljs-built_in">cout</span><<<span class="hljs-string">"================================================="</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 欢迎使用CT票务系统 "</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"================================================="</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"乘客姓名:"</span>; <span class="hljs-keyword">while</span>(<span class="hljs-built_in">cin</span>>>name){ <span class="hljs-keyword">if</span>(name==<span class="hljs-string">"."</span>)<span class="hljs-keyword">break</span>; <span class="hljs-keyword">if</span>(surplusF+surplusE==<span class="hljs-number">0</span>){ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n很遗憾所有票已购完!\n"</span>; <span class="hljs-keyword">break</span>; } <span class="hljs-keyword">if</span>(check(name)){ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n您已购票,购票信息:\n"</span><<endl; printTickets(name); }<span class="hljs-keyword">else</span>{ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n舱位类型 F:一等舱 E:经济舱\n"</span>; input(); } <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n乘客姓名:"</span>; } printTickets(<span class="hljs-string">""</span>); <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>; } <span class="hljs-keyword">bool</span> check(<span class="hljs-built_in">string</span> name) { <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<<span class="hljs-number">25</span>;i++){ <span class="hljs-keyword">if</span>(name==tickets[i].passenger_name) <span class="hljs-keyword">return</span> <span class="hljs-keyword">true</span>; } <span class="hljs-keyword">return</span> <span class="hljs-keyword">false</span>; } <span class="hljs-comment">//负责输入,之所以单独写成函数,是因为非法输入的时候需要递归调用</span> <span class="hljs-keyword">void</span> input() { flag=<span class="hljs-number">0</span>; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n舱位类型(F/E):"</span>; <span class="hljs-built_in">cin</span>>>seat_type; <span class="hljs-built_in">cin</span>.get(); <span class="hljs-keyword">switch</span>(seat_type){ <span class="hljs-keyword">case</span> <span class="hljs-string">'F'</span>: <span class="hljs-keyword">if</span>(surplusF><span class="hljs-number">0</span>) <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n可选座位号:"</span>; printSeat(<span class="hljs-string">'F'</span>); <span class="hljs-keyword">if</span>(flag!=<span class="hljs-number">0</span>)<span class="hljs-keyword">break</span>; <span class="hljs-built_in">cin</span>>>seatNumber; <span class="hljs-built_in">cin</span>.get(); reservation(name,seatNumber,<span class="hljs-string">'F'</span>); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'E'</span>: <span class="hljs-keyword">if</span>(surplusE><span class="hljs-number">0</span>) <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n可选座位号:"</span>; printSeat(<span class="hljs-string">'E'</span>); <span class="hljs-keyword">if</span>(flag!=<span class="hljs-number">0</span>)<span class="hljs-keyword">break</span>; <span class="hljs-built_in">cin</span>>>seatNumber; <span class="hljs-built_in">cin</span>.get(); reservation(name,seatNumber,<span class="hljs-string">'E'</span>); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">default</span>: printError(); input(); <span class="hljs-keyword">break</span>; } } <span class="hljs-comment">//输出可选的座位号</span> <span class="hljs-keyword">void</span> printSeat(<span class="hljs-keyword">char</span> seatType) { <span class="hljs-keyword">int</span> full=<span class="hljs-number">0</span>; <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<<span class="hljs-number">25</span>;i++){ <span class="hljs-keyword">if</span>(seats[i].isReservation==<span class="hljs-keyword">false</span>){ <span class="hljs-keyword">if</span>(seatType==<span class="hljs-string">'F'</span>){ <span class="hljs-keyword">if</span>(surplusF==<span class="hljs-number">0</span>){ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n此舱位全部订完,请重新选择舱位类型:\n"</span>; full++; <span class="hljs-keyword">break</span>; } <span class="hljs-built_in">cout</span><<seats[i].number<<<span class="hljs-string">" "</span>; <span class="hljs-keyword">if</span>(i==<span class="hljs-number">4</span>) <span class="hljs-keyword">break</span>; } <span class="hljs-keyword">if</span>(seatType==<span class="hljs-string">'E'</span>){ <span class="hljs-keyword">if</span>(surplusE==<span class="hljs-number">0</span>){ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n此舱位全部订完,请重新选择舱位类型:\n"</span>; full++; <span class="hljs-keyword">break</span>; } <span class="hljs-keyword">if</span>(i><span class="hljs-number">4</span>){ <span class="hljs-built_in">cout</span><<seats[i].number<<<span class="hljs-string">" "</span>; } } } } <span class="hljs-keyword">if</span>(full==<span class="hljs-number">0</span>){ <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n"</span>; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n座位号:"</span>; }<span class="hljs-keyword">else</span>{ input(); flag++; } } <span class="hljs-comment">//输入无效</span> <span class="hljs-keyword">void</span> printError() { <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n输入无效!"</span><<endl; } <span class="hljs-comment">//购票,即改变seats tickets 属性值</span> <span class="hljs-keyword">void</span> reservation(<span class="hljs-built_in">string</span> name,<span class="hljs-keyword">int</span> seatNumber,<span class="hljs-keyword">char</span> seatType) { <span class="hljs-keyword">if</span>(seatNumber<<span class="hljs-number">1</span>&&seatNumber><span class="hljs-number">20</span>){ printError(); } <span class="hljs-keyword">else</span>{ <span class="hljs-keyword">switch</span>(seatType){ <span class="hljs-keyword">case</span> <span class="hljs-string">'F'</span>: <span class="hljs-keyword">if</span>(seatNumber><span class="hljs-number">0</span>&&seatNumber<<span class="hljs-number">6</span>){ <span class="hljs-keyword">if</span>(seats[seatNumber-<span class="hljs-number">1</span>].isReservation==<span class="hljs-keyword">false</span>){ seats[seatNumber-<span class="hljs-number">1</span>].isReservation=<span class="hljs-keyword">true</span>; tickets[seatNumber-<span class="hljs-number">1</span>].seat=seats[seatNumber-<span class="hljs-number">1</span>]; tickets[seatNumber-<span class="hljs-number">1</span>].passenger_name=name; surplusF--; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n 恭喜 "</span>+name+<span class="hljs-string">" 订票成功!"</span><<endl; <span class="hljs-keyword">break</span>; }<span class="hljs-keyword">else</span>{ printError(); <span class="hljs-comment">//input();</span> } }<span class="hljs-keyword">else</span> printError(); <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'E'</span>: <span class="hljs-keyword">if</span>(seatNumber><span class="hljs-number">0</span>&&seatNumber<=<span class="hljs-number">20</span>){ <span class="hljs-keyword">if</span>(seats[seatNumber+<span class="hljs-number">4</span>].isReservation==<span class="hljs-keyword">false</span>){ seats[seatNumber+<span class="hljs-number">4</span>].isReservation=<span class="hljs-keyword">true</span>; tickets[seatNumber+<span class="hljs-number">4</span>].seat=seats[seatNumber+<span class="hljs-number">4</span>]; tickets[seatNumber+<span class="hljs-number">4</span>].passenger_name=name; surplusE--; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n 恭喜 "</span>+name+<span class="hljs-string">" 订票成功!"</span><<endl; <span class="hljs-keyword">break</span>; }<span class="hljs-keyword">else</span>{ printError(); } }<span class="hljs-keyword">else</span> printError(); <span class="hljs-keyword">break</span>; } } } <span class="hljs-keyword">void</span> printTickets(<span class="hljs-built_in">string</span> name) { <span class="hljs-built_in">cout</span><<<span class="hljs-string">"================================================="</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 订 票 信 息 "</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"================================================="</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 舱位类型 座位号 乘客姓名 "</span><<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n"</span>; <span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i=<span class="hljs-number">0</span>;i<<span class="hljs-number">25</span>;i++){ <span class="hljs-keyword">if</span>(name==tickets[i].passenger_name){ <span class="hljs-keyword">switch</span>(tickets[i].seat.type){ <span class="hljs-keyword">case</span> <span class="hljs-string">'F'</span>: <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 头等舱 "</span>; <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'E'</span>: <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 经济舱 "</span>; <span class="hljs-keyword">break</span>; } <span class="hljs-built_in">cout</span><<tickets[i].seat.number<<<span class="hljs-string">" "</span><<tickets[i].passenger_name<<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n"</span>; <span class="hljs-keyword">break</span>; } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(name==<span class="hljs-string">""</span>){ <span class="hljs-keyword">if</span>(tickets[i].seat.isReservation==<span class="hljs-keyword">true</span>){ <span class="hljs-keyword">switch</span>(tickets[i].seat.type){ <span class="hljs-keyword">case</span> <span class="hljs-string">'F'</span>: <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 头等舱 "</span>; <span class="hljs-keyword">break</span>; <span class="hljs-keyword">case</span> <span class="hljs-string">'E'</span>: <span class="hljs-built_in">cout</span><<<span class="hljs-string">" 经济舱 "</span>; <span class="hljs-keyword">break</span>; } <span class="hljs-built_in">cout</span><<tickets[i].seat.number<<<span class="hljs-string">" "</span><<tickets[i].passenger_name<<endl; <span class="hljs-built_in">cout</span><<<span class="hljs-string">"\n"</span>; } } } <span class="hljs-built_in">cout</span><<<span class="hljs-string">"================================================="</span><<endl; }</code>
相关文章推荐
- 八皇后 c语言递归实现方法(带注释)
- C++简单贪吃蛇实现
- 3d数学基础-4x4齐次矩阵-用C++代码实现
- Broken Keyboard
- 对C++中迭代器的认识
- poj2039---写出c++reverse函数,且且依次输出每一行的第一个、第二个.....
- c语言中int long float double 等类型所占字节及输出表示
- C语言中的二维数组与指针
- [LeetCode] Reorder List
- 浅析C++中的this指针
- 算法入门2(c语言)
- 算法入门1 (c语言)
- Cpp Primer<<学习函数-局部对象、内联函数、类的成员函数_1
- 丑数
- c++11实现一个简单的lexical_cast
- MFC六大关键技术之仿真学习笔记(三)
- 【Sudoku Solver】cpp
- C语言之字符串(二)-----5.28
- C++ set
- C++ map