视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
航班订票系统课程设计报告(C++)
2025-09-26 16:50:26 责编:小OO
文档
                  

一.课程设计目的

1.  数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言,自行实现一个较为完整的应用系统的设计与开发。

2.  通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用 。

3.  学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。

二.课程设计内容

1)、录入:

可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

2)、查询:

可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);

可以输入起飞抵达城市,查询飞机航班情况;

3)、订票:(订票情况可以存在一个数据文件中,结构自己设定)

可以订票,如果该航班已经无票,可以提供相关可选择航班;

4)、退票: 可退票,退票后修改相关数据文件;

客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

5)、修改航班信息:

当航班信息改变可以修改航班数据文件

三.系统功能模块设计

本系统分为五个模块:录入新航班模块、浏览航班模块、查找航班模块、订票模块、退票模块。得到如图所示系统功能模块图。

系统功能模块图

四.程序源代码

#ifndef FLIGHTINFO_H

#define FLIGHTINFO_H

#include

#include

using namespace std;

//记录已订票的旅客及信息

class PsgOn

{

public:

    char Name[20];                  

    int Booknum;                     

    int Rank;                        

    PsgOn *next;

    PsgOn(char N[20],const int B,const int R,PsgOn *Ne=NULL);

    PsgOn(PsgOn *Ne=NULL);

};

//记录,处理每条航线信息的类

class FlightNode

{

public:

    char Terminus[20];               

    int Flight;                          

    int Plane;                       

    int Day;                         

    int Maxnum;                     

    int Left;                      

    FlightNode(char T[20]="",const int F=0,const int P=0,const int D=0,const int M=0,const int L=0);

};

//对已订票的客户的信息的操作的类

class POList

{

private:

    void init();

public:

    PsgOn *head;

    PsgOn *tail;

    PsgOn *fence;

    int leftcnt;

    int rightcnt;

    int Fli;                                    

    POList(int size=10);

    void clear();

    bool insert(char N[20],const int B,const int R);

    bool append(char N[20],const int B,const int R);

    bool remove(char *N,int &B);

    void setStart();

    void setEnd();

    void prev();

    void next();

    int leftLength()const;

    int rightLength()const;

    bool gerValue(char *N,int &B,int &R)const;

};

int n=0;

void ShowAllFlight(FlightNode *F,POList *B);

void addFlight(FlightNode *F,POList *B);

void ShowOneFlight(FlightNode *F);

void BookTicket(FlightNode *F,POList *B) ;

void ReturnTicket(FlightNode *F,POList *B);

#endif

//PsgOn中的函数的实现

PsgOn::PsgOn(char N[20],const int B,const int R,PsgOn *Ne)

{    for(int i=0;i<=20;i++)

        {

            Name[i]=N[i];

        }

    Booknum=B;Rank=R;next=Ne;   

 }

PsgOn::PsgOn(PsgOn *Ne)

{  next=Ne;   }

//POList中的函数的实现

void POList::init()

{

    fence=tail=head=new PsgOn;

    leftcnt=rightcnt=0;

}

POList::POList(int size){       init();       }

bool POList::insert(char N[20],const int B,const int R)

{

fence->next=new PsgOn(N,B,R,fence->next);

        if(tail==fence)tail=fence->next;

        rightcnt++;                               

        return true;

}

bool POList::append(char N[20],const int B,const int R)

{

tail=tail->next=new PsgOn(N,B,R,NULL);

    rightcnt++;

    return true;

}

bool POList::remove(char *N,int &B)

{

    if(fence->next==NULL)return false;

N=fence->next->Name;B=fence->next->Booknum;

PsgOn *ltemp=fence->next;

fence->next=ltemp->next;

    if(tail==ltemp)tail=fence;

    delete ltemp;

    rightcnt--;                                    

    return true;

}

void POList::setStart()

{     fence=head;rightcnt+=leftcnt;leftcnt=0;}

void POList::setEnd()

{    fence=tail;leftcnt+=rightcnt;rightcnt=0;}

void POList::prev()

{

    PsgOn *temp=head;

    if(fence==head)return;

    while(temp->next!=fence)temp=temp->next;

    fence=temp;

    leftcnt--;rightcnt++;

}

void POList::next()

{

    if(fence!=tail)

     {fence=fence->next;rightcnt--;leftcnt++;}

}

int POList::leftLength()const

{return leftcnt;}

int POList::rightLength()const

{return rightcnt;}

bool POList::gerValue(char *N,int &B,int &R)const

{

    if(rightLength()==0)return false;

N=fence->next->Name;B=fence->next->Booknum;R=fence->next->Rank;

    return true;

}

FlightNode::FlightNode(char T[20],const int F,const int P,const int D,const int M,const int L)

{    for(int i=0;i<=20;i++)

        {

            Terminus[i]=T[i];

        }

Flight=F;Plane=P;Day=D;Maxnum=M;Left=L;  

}

//列举全部航线

void ShowAllFlight(FlightNode *F,POList *B)

{

cout<<"---------------------------------------------"< cout<<"航班号"<<"\"<<"终点站"<<"\"<<"飞行日"<    for(int i=1;i    {

     cout<    }

cout<<"---------------------------------------------"< cout<<"你可以进行以下操作:.查看单条航线;"

     <<"2.录入新的航班信息"<<"3.返回上一级.\\n"

     <<"请选择:";

    

    int chioce;

top2: cin>>chioce;

    if(chioce==1)

    {

        ShowOneFlight(F);

    }

    else if(chioce==2)

        addFlight(F,B);

    else if(chioce==3)

    {

        return;

    }

    else

    {

     cout<<"输入错误!请重新选择:";

        goto top2;

    }

}

void addFlight(FlightNode *F,POList *B)

{

    int i=0;

    while(n<50){

     cout<<"请输入航班的信息:"<         <<"请输入新航班的终点站名:";

     cin>>F[n].Terminus;

        do{cout<<"请输入新航班的航班号:";

     cin>>F[n].Flight;

        if(F[n].Flight%5!=0)

     {cout<<"输入有误,请重新输入.";

           i=1;}

        else {

            for(int j=0;j                if(F[n].Flight==F[j].Flight)

             {cout<<"航班号已存在,请重新输入。";

            i=1;break;}

             }

        }while(i);

     cout<<"请输入新航班的飞机号:";

     cin>>F[n].Plane;

     cout<<"请输入新航班的飞行日:";

     cin>>F[n].Day;

     cout<<"请输入新航班的成员定额:";

     cin>>F[n].Maxnum;

     cout<<"请输入如新航班的余票量:";

     cin>>F[n].Left;

        B[n].Fli=F[n].Flight;    

     cout<<"录入成功";

        n++;

     cout<<"是否继续录入(y/n)";

        char ch;

top10:     cin>>ch;

    if(ch=='y')

    {

        i=1;

    }

    else if(ch=='n')

        return;

    else

    {

     cout<<"输入错误!请重新选择:";

        goto top10;

    }

    }

}

//查询单条航线

void ShowOneFlight(FlightNode *F)              

{

        char T[20];

                        

        int choice;                        

         cout<<"请输入终点站名称:\\n";

         cin>>T;

            FlightNode temp[50];

            int m=0;

            for(int i=0;i<=n;i++)

                {

                    if(strcmp(T,F[i].Terminus)==0)

                        {temp[m]=F[i];m++;}

                }

            if(m==0)cout<<"无此终点站"<            else

            {

                FlightNode temp1=temp[0];                               

             cout<<"航班号:"<                for(int j=1;j                    {

                        if(temp[j].Day!=0)

                        {

                         cout<<"航班号:"<                            if((temp[j].Day>=3)&&(temp[j-1].Day>temp[j].Day))temp1=temp[j];

                        }

                    }

             cout<<"最近一天的航班:\\n"

                 <<"航班号:"<            }

         cout<<"请选择所要的操作:,继续查询2.返回上一级\\n";

top3:         cin>>choice;

            if(choice==1)

            {

                ShowOneFlight(F);

            }

            else if(choice==2)

            {

                return;

            }

            else

            {

             cout<<"输入错误!请重新选择:";

                 goto top3;

            }

}

void BookTicket(FlightNode *F,POList *B)                         

{

    int flag=0;

    int Fl;                                      

    int N;                                         

    char Na[20];                                                                  

    int choice;

    int temp;

     cout<<"请输入需乘坐的航班号:\\n";

top6:     cin>>Fl;

            if(!(Fl%5==0))

            {

             cout<<"输入错误!无此航班号,请重新输入:";

                goto top6;

            }

     cout<<"请输入订票额:\\n";

     cin>>N;

     cout<<"请输入您的名字:\\n";

     cin>>Na;

        for(int i=0;i            {

                if(Fl==B[i].Fli){temp=i;flag=1;}

            }

        if(flag==0){cout<<"无此航班\\n";return;}

        if(F[temp].Left>=N)

            {

                char choice1;

             cout<<"尚有余票,"<             cout<<"你要订"<             cin>>choice1;

                switch(choice1)

                    {

                        case 'Y':

                        case 'y':B[temp].append(Na,N,1);F[temp].Left=F[temp].Left-N;cout<<"订票成功!\\n";break;

                        default:return ;

                    }

            }

        else

            {

             cout<<"余票不足,订票失败"<            }

     cout<<"请选择下一步操作:,继续订票 2,退票3.返回上一级\\n";

top4:     cin>>choice;

        if(choice==1)

        {

            BookTicket(F,B);

        }

        else if(choice==2)

        {

            ReturnTicket(F,B);

        }

        else if(choice==3)

        {

            return;

        }

        else

        {

         cout<<"输入错误!请重新选择:";

            goto top4;

        }

}

void ReturnTicket(FlightNode *F,POList *B)

{

    int Ftemp;                                    

    char Ntemp[20];                                    

    int BoNum;                               

    int flag=0;

    int flag1=0;

    int temp;

    int choice;

    bool flag2;

        flag=0;

        int Length;                             

        int LengthR;                            

     cout<<"请输入要退票的航班号:";

     cin>>Ftemp;

     cout<<"请输入你的名字:";

     cin>>Ntemp;

        for(int i=0;i            {

                if(Ftemp==B[i].Fli){temp=i;flag1=1;}

            }

        if(flag1==0){cout<<"无此航班\\n";return;}

        B[temp].setEnd();

        Length=B[temp].leftLength();

     cout<        B[temp].setStart();

        for(int j=0;j<=Length;j++)

            {

                if(strcmp(B[temp].fence->Name,Ntemp)==0)

                    {

                        B[temp].prev();

                        B[temp].remove(Ntemp,BoNum);

                        F[temp].Left+=BoNum;

                        flag=1;

                    }

                B[temp].next();

            }

        if(flag==1)

         cout<<"退票成功!"<        else cout<<"对不起,没有你订票的记录!\\n";

            

         cout<<"请选择下一步操作:,继续退票2,订票3,返回上级菜单\\n";

top5:         cin>>choice;

            if(choice==1)

            {

                ReturnTicket(F,B);

            }

            else if(choice==2)

            {

                BookTicket(F,B);

            }

            else if(choice==3)

            {

                return;

            }

            else

            {

             cout<<"输入错误!请重新选择:";

                goto top5;

            }

}

void main()

{    

    FlightNode F[50];

    POList B[50];

    //定义各条航线的详细信息

    F[0]=FlightNode("NULL",1000,1,1,0,0);                                                                  

    B[0]=100;                                         

    F[1]=FlightNode("北京",1005,100,4,100,100);

    B[1].Fli=1005;

    F[2]=FlightNode("哈尔滨",1010,101,5,100,100);

    B[2].Fli=1010;

    F[3]=FlightNode("长春",1015,102,4,100,100);

    B[3].Fli=1015;

    F[4]=FlightNode("天津",1020,103,2,100,100);

    B[4].Fli =1020;

    F[5]=FlightNode("西安",1025,104,1,100,100);

    B[5].Fli =1025;

    F[6]=FlightNode("拉萨",1030,105,6,100,100);

    B[6].Fli =1030;

    F[7]=FlightNode("杭州",1035,106,7,100,100);

    B[7].Fli =1035;

    F[8]=FlightNode("海口",1040,107,1,100,100);

    B[8].Fli =1040;

    F[9]=FlightNode("台北",1045,108,2,100,100);

    B[9].Fli =1045;

    F[10]=FlightNode("东京",1050,109,3,100,100);

    B[10].Fli =1050;

    F[11]=FlightNode("伦敦",1055,110,4,100,100);

    B[11].Fli =1055;

    F[12]=FlightNode("纽约",1060,111,5,100,100);

    B[12].Fli =1060;

    F[13]=FlightNode("巴黎",1060,112,6,100,100);

    B[13].Fli =1060;

    F[14]=FlightNode("悉尼",1065,113,7,100,100);

    B[14].Fli =1065;

    F[15]=FlightNode("温哥华",1070,114,1,100,100);

    B[15].Fli =1070;

    F[16]=FlightNode("华盛顿",1075,115,2,100,100);

    B[16].Fli =1075;

    F[17]=FlightNode("新加坡",1080,116,3,100,100);

    B[17].Fli =1080;

    F[18]=FlightNode("平壤",1085,117,4,100,100);

    B[18].Fli =1085;

    F[19]=FlightNode("汉城",1090,118,5,100,100);

    B[19].Fli =1090;

    n=20;

    int choice;

    while(1)

    {

     cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++"<     cout<<"       ***  欢迎使用航空客运订票系统!!***       "<     cout<<"++++++++++++++++++++++++++++++++++++++++++++++++++"<     cout<<"你可以进行以下的操作:\\n"

         <<"1==>查询已有航线\\n"

         <<"2==>录入新的航线信息\\n"

         <<"3==>查询单条航线\\n"

         <<"4==>订票\\n"

         <<"5==>退票\\n"

         <<"6==>退出.\\n"

         <<"----------------------------------------"<        

     cout<<"请选择:";

top:     cin>>choice;

        switch(choice)

        {

            case 1 :  ShowAllFlight(F,B);break;

            case 2 :  addFlight(F,B);break;

            case 3 :  ShowOneFlight(F);break;

            case 4 :  BookTicket(F,B)  ;break;

            case 5 :  ReturnTicket(F,B)  ;break;

            case 6 : cout<<"退出系统!多谢使用!";return;

            default : cout<<"输入错误,请重新输入:\\n";goto top;

        }

    }

}

五.实验结果

1.当运行程序时,会出现如下界面

2.通过选择1可以查询现在已有的航线

3. 通过选择2可以录入新的航班

4.选择4可以进入订票系统

5. 选择5可以进入退票系统

5.选择6则可以退出系统

心得体会

 在这次程序编制的过程中出现了很多问题,主要原因是自己以前接触的关于编制程序的知识的缺乏,通过航班订票系统的开发让我知道了自己的不足和缺点,写出一个好的程序需要合作精神,一个人的力量毕竟是有限的团队力量才是无穷的。一个好的程序员一定是从程序堆里走出来的,只有通过参与具体程序的开发才知道自己知识的有限,才会学会具体的分析问题,是自己的逻辑性和层次性得到良好的锻炼,经过这次课程设计,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,意识到了程序语言的规范性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。

      课程设计是一门专业课,给我很多专业知识以及专业技能上了提升,同时又是一门思辨课,让我感触很深,是我对抽象的理论有了具体的认识,在这次课程设计中知道了以前没有接触过的很多函数,在以后的学习中自己要加强程序的锻炼,多参考好的程序和各种各样的函数,建立起自己的函数库,为以后学习打下良好的基础。   

                 下载本文

显示全文
专题