您的位置:首页 > 编程语言 > C语言/C++

C++实现一个航空订票程序 来自明桑Android

2015-05-28 23:09 561 查看
题目要求:

编写一个航空订票程序:

假设一等舱5个座位,编号为1~5,经济舱20个座位,编号为1~20

具体要求如下:

当程序开始时,提示输入乘客姓名,一个名字只能订一个座位,如果该名字已经订过座位了,则提示该乘客座位已定及座位号,否则提示输入舱位类型;

当输入舱位类型后,如果该舱位已全部订出,则提示此舱全部订完,重新选择舱位类型;否则显示可以选择的座位号,注意已经被订出的座位号不能出现,提示输入座位号;

舱位类型:只能输入”F”或”E”,一等舱为F,经济舱为E,如果输入其它字符则提示输入无效。

座位号:只能输入前面列出可以选择的座位号,若输入其它则提示输入无效。

程序可以为多个乘客订票,直到输入名字为”.”;

最后程序按照舱位类型与座位号排序打印出所有订票信息(座位号及对应乘客姓名)

最终实现效果:



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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: