C++实现一个航空订票程序

转载请注明出处:明桑Android

这是帮我同学写的一个C++作业,说实话好久没写过C++都有些生疏了。但他们好像还没学面向对象编程,所以只能是简单的结构体和输入输出的逻辑。

题目要求:

编写一个航空订票程序:

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

具体要求如下:

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

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

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

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

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

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

最终实现效果:

1,变量

不过既然提到了结构体用来存储票的信息(其实这就是面向对象思想的早期)。联系实际,一个结构体代表一个事物,结构体中的字段代表这个事物的属性;这样的话,我们可以提取出两个结构体:座位Seat和票Ticket,由于题目给定总共25个座位,意味着25张票,则将它们声明成全局变量。

    //座位,那么座位有3个基本属性:座位类型(F/E),座位编号,座位预定状态(是否已经被预定)
    struct Seat{
        char type;
        int number;
        bool isReservation;
    }seats[25];

    //票,票有两个属性,即票需要表明:谁预定了哪个座位,第一个Seat就是我们前面定义的那个结构体。
    struct Ticket{
        Seat seat;
        string passenger_name;
    }tickets[25];

2,函数

我们需要将一些输出输入的操作提取成函数,简化我们的代码,这里之所以将输入提取成input()函数,是因为我们需要不断输入,即使出错,所以为了便于递归调用就封装成函数;

    bool check(string name);//检测是否已购票
    void input();//用于执行输入
    void printSeat(char seatType);//显示剩余座位
    void reservation(string name,int seatNumber,char seatType);//购票
    void printTickets(string name);//显示已购票信息
    void printError();//显示输入不合法

3,主体逻辑

main函数非常简单,首先需要将座位和票信息初始化,即将它们编号,预定状态全为“未预定”,然后执行输入,一个while循环,如果不符合条件就直接跳出while,执行printTickets()打印出所有的订票信息;

    int main()
    {
    //初始化舱位和票
    for(int i=0;i<25;i++){
        if(i<5){
            seats[i].type=‘F‘;
            seats[i].number=i+1;
        }else{
            seats[i].type=‘E‘;
            seats[i].number=i+1-5;
        }
        seats[i].isReservation=false;
        tickets[i].seat=seats[i];
        tickets[i].passenger_name=" ";
    }

    cout<<"================================================="<<endl;
    cout<<"               欢迎使用CT票务系统                   "<<endl;
    cout<<"================================================="<<endl;
    cout<<"乘客姓名:";
    while(cin>>name){
            if(name==".")break;
            if(surplusF+surplusE==0){
                cout<<"\n很遗憾所有票已购完!\n";
                break;
            }
            if(check(name)){
                cout<<"\n您已购票,购票信息:\n"<<endl;
                printTickets(name);
            }else{
                cout<<"\n舱位类型 F:一等舱 E:经济舱\n";
                input();
            }
            cout<<"\n乘客姓名:";
    }
    printTickets("");
    return 0;

    }

4,具体函数实现

具体的函数实现逻辑我就不讲了,就看代码吧~

5,完整代码:

main.cpp

#include<iostream>
using namespace std;

//定义全局变量,舱位,票,各类型舱位剩余数,便于其它函数全局访问
int surplusF=5;
int surplusE=20;

int flag=0;
char seat_type;
int seatNumber;
string name;

//座位
struct Seat{
    char type;
    int number;
    bool isReservation;
}seats[25];

//票
struct Ticket{
    Seat seat;
    string passenger_name;
}tickets[25];

bool check(string name);//检测是否已购票
void input();//用于执行输入
void printSeat(char seatType);//显示剩余座位
void reservation(string name,int seatNumber,char seatType);//购票
void printTickets(string name);//显示已购票信息
void printError();//显示输入不合法

int main()
{
    //初始化舱位和票
    for(int i=0;i<25;i++){
        if(i<5){
            seats[i].type=‘F‘;
            seats[i].number=i+1;
        }else{
            seats[i].type=‘E‘;
            seats[i].number=i+1-5;
        }
        seats[i].isReservation=false;
        tickets[i].seat=seats[i];
        tickets[i].passenger_name=" ";
    }

    cout<<"================================================="<<endl;
    cout<<"               欢迎使用CT票务系统                   "<<endl;
    cout<<"================================================="<<endl;
    cout<<"乘客姓名:";
    while(cin>>name){
            if(name==".")break;
            if(surplusF+surplusE==0){
                cout<<"\n很遗憾所有票已购完!\n";
                break;
            }
            if(check(name)){
                cout<<"\n您已购票,购票信息:\n"<<endl;
                printTickets(name);
            }else{
                cout<<"\n舱位类型 F:一等舱 E:经济舱\n";
                input();
            }
            cout<<"\n乘客姓名:";
    }
    printTickets("");
    return 0;

}

bool check(string name)
{
    for(int i=0;i<25;i++){
        if(name==tickets[i].passenger_name)
            return true;
    }
    return false;
}

//负责输入,之所以单独写成函数,是因为非法输入的时候需要递归调用
void input()
{
    flag=0;
    cout<<"\n舱位类型(F/E):";
    cin>>seat_type;
    cin.get();
    switch(seat_type){
        case ‘F‘:
            if(surplusF>0)
                cout<<"\n可选座位号:";
            printSeat(‘F‘);
            if(flag!=0)break;
            cin>>seatNumber;
            cin.get();
            reservation(name,seatNumber,‘F‘);
            break;
        case ‘E‘:
            if(surplusE>0)
                cout<<"\n可选座位号:";
            printSeat(‘E‘);
            if(flag!=0)break;
            cin>>seatNumber;
            cin.get();
            reservation(name,seatNumber,‘E‘);
            break;
        default:
            printError();
            input();
            break;
        }
}

//输出可选的座位号
void printSeat(char seatType)
{
    int full=0;
    for(int i=0;i<25;i++){
        if(seats[i].isReservation==false){
            if(seatType==‘F‘){
                if(surplusF==0){
                    cout<<"\n此舱位全部订完,请重新选择舱位类型:\n";
                    full++;
                    break;
                }
                cout<<seats[i].number<<" ";
                if(i==4) break;
            }
            if(seatType==‘E‘){
                if(surplusE==0){
                    cout<<"\n此舱位全部订完,请重新选择舱位类型:\n";
                    full++;
                    break;
                }
                if(i>4){
                    cout<<seats[i].number<<" ";
                }
            }
        }
    }
    if(full==0){
        cout<<"\n";
        cout<<"\n座位号:";
    }else{
        input();
        flag++;
    }

}

//输入无效
void printError()
{
    cout<<"\n输入无效!"<<endl;
}

//购票,即改变seats tickets 属性值
void reservation(string name,int seatNumber,char seatType)
{
    if(seatNumber<1&&seatNumber>20){
        printError();
    }
    else{
        switch(seatType){
            case ‘F‘:
                if(seatNumber>0&&seatNumber<6){
                    if(seats[seatNumber-1].isReservation==false){
                        seats[seatNumber-1].isReservation=true;
                        tickets[seatNumber-1].seat=seats[seatNumber-1];
                        tickets[seatNumber-1].passenger_name=name;
                        surplusF--;
                        cout<<"\n 恭喜 "+name+" 订票成功!"<<endl;
                        break;
                    }else{
                        printError();
                        //input();
                    }
                }else
                    printError();
                break;
            case ‘E‘:
                if(seatNumber>0&&seatNumber<=20){
                    if(seats[seatNumber+4].isReservation==false){
                        seats[seatNumber+4].isReservation=true;
                        tickets[seatNumber+4].seat=seats[seatNumber+4];
                        tickets[seatNumber+4].passenger_name=name;
                        surplusE--;
                        cout<<"\n 恭喜 "+name+" 订票成功!"<<endl;
                        break;
                    }else{
                        printError();
                    }
                }else
                    printError();
                break;
        }
    }
}

void printTickets(string name)
{
    cout<<"================================================="<<endl;
    cout<<"               订  票  信  息                    "<<endl;
    cout<<"================================================="<<endl;
    cout<<"  舱位类型        座位号        乘客姓名         "<<endl;
    cout<<"\n";
    for(int i=0;i<25;i++){
        if(name==tickets[i].passenger_name){
                switch(tickets[i].seat.type){
                case ‘F‘:
                    cout<<"  头等舱           ";
                    break;
                case ‘E‘:
                    cout<<"  经济舱           ";
                    break;
                }
            cout<<tickets[i].seat.number<<"             "<<tickets[i].passenger_name<<endl;
            cout<<"\n";
            break;
        }
        else if(name==""){
            if(tickets[i].seat.isReservation==true){
            switch(tickets[i].seat.type){
                case ‘F‘:
                    cout<<"  头等舱           ";
                    break;
                case ‘E‘:
                    cout<<"  经济舱           ";
                    break;
            }
            cout<<tickets[i].seat.number<<"             "<<tickets[i].passenger_name<<endl;
            cout<<"\n";
            }
        }
    }
    cout<<"================================================="<<endl;
}

Tips:

如果某些偷懒的家伙正好是做这个课程大作业搜到这儿了,希望你能在看懂的基础上自己多改改,毕竟这是我替同学写的,要是你们都一样,岂不要尴尬了,O(∩_∩)O哈哈~


时间: 2024-08-07 08:37:00

C++实现一个航空订票程序的相关文章

课程设计之(struts2+Hibernate)航空订票系统

1.题目 课程设计之航空订票系统 为某家机票预订服务商开发一个机票预订和查询管理系统.该系统中的航班和机票信息由多家航空公司负责提供.客户通过上网方式查询航班时间表.机票可用信息.机票折扣信息,可以远程订票.退票.通过信用卡支付票款.客户分为三类:金牌客户.银牌客户和普通客户.普通客户通过订票积分至一定的额度可以逐步升级为银牌客户.金牌客户.不同类别的客户可享有不同的机票折扣.系统还必须每日.每周.每月给出机票销售的统计分析报表. l         实验要求: 按基于数据流的软件工程的要求完成

Android应用源码航空订票软件客户端

功能分类:其他     支持平台:Android     运行环境:Android 开发语言:Java     开发工具:Eclipse     源码大小:1.76MB 下载地址:http://www.dwz.cn/xRAeq 源码简介 本项目是一个简单的航空订票项目源码,服务端已经挂了,直接把登录逻辑注释掉截的主界面图,整个风格比较简洁清爽,项目貌似是个半成品,很多图片都没有替换,翻了翻源码登录注册时间选择列表展示这些功能也都做了(不过服务端挂了没办法演示),项目代码写的比较规范,注释量也还说

航空订票客户端应用安卓源码

航空订票客户端应用安卓源码,本项目是一个简单的航空订票项目源码,服务端已经挂了,直接把登录逻辑注释掉截的主界面图,整个风格比较简洁清爽,项目貌似是个半成品,很多图片都没有替换,翻了翻源码登录注册时间选择列表展示这些功能也都做了(不过服务端挂了没办法演示),项目代码写的比较规范,注释量也还说的过去,感兴趣的朋友自己下载研究一下吧,项目编译版本4.4.2默认编码GBK <ignore_js_op> Android应用源码航空订票软件客户端登录 <ignore_js_op> Androi

C语言实现-航空订票系统(飞机订票系统)

开发环境:CodeBlocks 开发语言:C 实现功能:登录,订票,退票 数据存储:文本读写 涉及文件: ? 相关文件下载: 码云:https://gitee.com/ikaros-521/c_project/tree/master/%E9%A3%9E%E6%9C%BA%E8%AE%A2%E7%A5%A8%E7%B3%BB%E7%BB%9F%EF%BC%88%E8%88%AA%E7%A9%BA%E8%AE%A2%E7%A5%A8%E7%B3%BB%E7%BB%9F%EF%BC%89 程序主界面:

java毕设---基于servlet+jsp+mysql的航空订票系统

联系qq:2835777178   有兴趣者可以联系我,也可先查看项目运行视频再决定 项目部分功能截图 一.系统主界面 二.注册页面 三.制定航班 四.用户密码修改 五.用户登录后的主界面 六.会员登录 七.管理员主界面 八.管理员登录 九.个人信息管理 十.订票信息 十一.查看航班 十二.航班安排

c语言:编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果

编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果. 解:程序: #include<stdio.h> struct Person { char name[20]; int count; }leader[3] = {"li",0,"zhang",0,"yao",0}; int main() { int i, j; char leader_name[20]; for (i = 1; i <= 10; i++) { sc

windows API 开发飞机订票系统 图形化界面 (三)

来吧,接下来是各个功能的函数的实现代码. 首先,程序运行时加载读入账户信息和航班信息.接下来就该读取文件了. 我把账户资料和航班信息储存在了.txt文件里 那么问题就来了,挖掘机...额,不对,应该怎么读入账户资料和航班信息? 每一行是结构体的一个成员,我读入的方式是一行一行读入. 两个读入函数代码如下: 1 //读入账户信息 2 BOOL ReadAccountData(HWND hwndDlg){ 3 4 FILE *fp; 5 6 passenger = (Passenger *)mall

windows API 开发飞机订票系统 图形化界面 (四)

接下来的是录入航班.修改航班信息功能的实现: 1 //录入航班 2 BOOL EntryFlight(HWND hEntryDlg){ 3 4 TCHAR szDiscount[16]; 5 TCHAR szFare[16],szSeat_Number[16]; 6 TCHAR szFlight_Number[16], szDate[16]; 7 TCHAR szDeparture[16], szDestination[16]; 8 TCHAR szTakeOff_Time[16], szLan

学生管理系统-火车订票系统 c语言课程设计

概要: C 语言课程设计一---学生管理系统 使使用 C 语言实现学生管理系统.系统实现对学生的基本信息和考试成绩的 管理.采用终端命令界面,作为系统的输入输出界面.采用文件作为信息存储介质. 功能描述: 学生信息: 基本信息: 学号: int 姓名: char 128 密码: char 32 年龄: int 班级: int 成绩信息: 数学成绩: int C 语言成绩:int 语文成绩: int 名次: int 1.  实现对学生信息基本信息的录入,其中名次根据成绩自动计算(添加).学号不能