网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

C++航空客运订票系统

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
C++航空客运订票系统

1.本课程设计的目的
(1)巩固和加深对数据结构基本知识的理解,提高综合运用知识的能力。
(2)、使学生掌握软件设计的基本内容和设计方法,并培养学生进行
规范化软件设计的能力
(3)、使学生掌握使用各种计算机资料和有关参考资料,提高学生进
行程序设计的基本能力
 
2.课程设计的任务及要求
1)基本要求:
(1)对系统进行功能模块分析、控制模块分析
(2)系统设计要能完成题目所要求的功能
(3)编程简练,可用,尽可能的使系统的功能更加完善和全面
(4)说明书、流程图要清楚;
(5)提高学生的论文写作能力。 
(6)特别要求自己独立完成。
 
2)创新要求:
在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机
界面。
 
3)课程设计论文编写要求




(1)要按照书稿的规格打印与写课程设计论文


(2)论文包括目录、绪论、正文、小结、参考文献、谢辞附录等(3)课程设计论文装订按学校的统一要求完成
目录
 
一、绪论--------------------------------------------------------------------4
二、需求分析---------------------------------------------------------------4
三、概要设计---------------------------------------------------------------4
四、详细设计---------------------------------------------------------------6
五、调试分析-------------------------------------------------------------25
六、测试结果-------------------------------------------------------------34
七、用户使用说明-------------------------------------------------------35
八、小结--------------------------------------------------------------------35
九、谢辞--------------------------------------------------------------------35
十、参考文献-------------------------------------------------------------35
十一、附录-------------------------------------------32
 
C++航空客运订票系统
一、绪论
    该航空客运订票系统主要是通过链表算法设计来实现其各项功能,其业务活动包括:查询航线、客票预定和办理退票等业务,这些业务分别是通过链表的查找、插入和删除等操作来实现的。
 
二、需求分析
编制一个航空客运订票系统,要求有查询航线,客票订制,办理退票等业务;
1,每条航线设计的信息有:终点站名,航班号,飞机号,飞行周日(星期几),乘员定额,余票量,已订票的客户名单(包括姓名、订票量、舱位等级)以及等待替补的客户名单(包括姓名,所需票量);
2,作为示意系统,全部的数据可只放在内存中;
3,系统能实现的操作和功能如下:
<1>查询航线:根据旅客提出的终点站名输出下列信息:航班号,飞机号,星期几飞行;
<2>承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班信息,若尚有余票,则为顾客办理订票业务,输出座位号;若余票不够,则询问顾客是否愿意进入等待名单,若愿意,登记排队候补;
   <3>承办退票业务:根据客户提供的情况(航班)为其办理退票业务,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
 
三、概要设计
从题目的基本要求可以看出,航线信息的储存、客户信息的储存、航线的查询、客票的预定、退票的办理业务等的操作,都类似于线性链表的建立、查找、插入、删除等的操作,所以我用了线性链表的算法设计来实现该系统的各项操作。
根据题目要求和实际情况可以将该程序的各项功能要求概括如下:
1、首先,定义三个线性链表,分别用来储存航线信息、已订票乘客的信息、因预定票额不够而成为替补乘客的信息。
2、其次,实现订票功能,若余票不够,则征求客户的同意后将其全部加入等待,即成为替补乘客,而不只是满足其中一部分的要求。
3、退票的操作原则和订票一样,只查看队头的人,若可以满足其全部要求则满足之,即全部退还机票,不只是退还其中的一个或几个。
 
4、为了便于查找信息,还赋予该系统一个显示功能,显示航线信息和乘客信息,其中,乘客信息又包括已订票的乘客信息和替补的乘客信息。
为实现上述功能,需要链表这个数据结构,其抽象数据类型设计如下:ADT List{ 数据对象:D={ai| ai ElemType,i=1,2,…,n,n≥0} 数据关系:R1={  ai-1, ai D ai-15、系统中子程序及功能要求:
ModelMenu(char *s[],int Item) //菜单模板函数,为各个菜单制作模板
MainMenu()//主菜单函数,显示主菜单
Continue()//是否继续函数,征求客户意见是否要继续程序
ExitSystem()//系统退出函数,征求客户意见是否要退出程序
prefix(char *Item) //操作提示函数,提示用户操作信息
Find_Line(PFlight L,char *key) //航线查找函数,根据用户需求,查找指定的航线信息
Line_Add()//航线添加函数,由用户向系统中添加航线信息
Empty_Flight()//航线是否为空函数,检查航线是否为空
Line_See()//航线查看函数,查看当前系统中的航线信息
Display_Reserve()//订票乘客信息
Display_Replace()//候补乘客信息
Sub1Menu()//航线信息管理函数,增设、查看航线信息
Sub2Menu()//订票办理函数
Sub3Menu()//退票办理函数
Sub4Menu()//乘客管理子菜单函数
 
6、函数的调用关系图:若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
               ­_______________________   ______
______        _______________
                                          
Line_Add Line_See Continue prefix Empty_Flight
Find_Line
Display_Reserve Display_Replace
 
四 详细设计
#include
#include
#include
#include
#include
#include
#include
#define MAX 50

typedef struct Replace           //替补乘客信息
{
  char Name[7];             //姓名
  int Amount;             //定票数
  char Rank;                 //舱位等级
  char Seat_No;             //座位号
  struct Replace *Next;
}Replace,*PReplace;  
typedef struct Flight           //航线信息
{
  char Des_Name[10];           //终点站名
  char Flight_No[6];           //航班号
  char Plane_No[6];           //飞机号
  char Week_Day;             //飞行周日
  int Customer_Amount;         //乘员定额
  int Free_Amount;           //剩余票数
  float Price[3];           //舱位等级的价格
  Replace *ReplName;           //该航班的候补乘客名单
  Customer *CustName;           //该航班的已定票乘客名单
  struct Flight *Next;         //指示下一航线结点
}Flight,*PFlight;
int Customer_Count=0;           //所有航线的定票乘客总数
Flight *Head;                 //航线头指针
Flight *p2;                 //航线结点指针
Customer *Custp1[MAX];           //各条航线乘客结点指针
Replace *Replp1[MAX];           //各条航线候补结点指针
int IsEmpty=1;                 //是否有定票乘客
int IsReplace=1;             //是否有候补乘客
 
C++航空客运订票系统
Customer *prior;  //满足要求的定票乘客的前结点,以作删除操作
char ModelMenu(char *s[],int Item) //菜单模板函数
{若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
    int i;
    char answer;
    cout<<"\n\n";
    cout<<"\t\t\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<    cout<<"\t\t\t"<    cout<<"\t\t\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<    for(i=1;i    {
        cout<<"\t\t\t"<        if(i+1!=Item)
    cout<<"\t\t\t"<    }
    cout<<"\t\t\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<    cout<<"\t\t\t 请输入菜单项前的操作代码:";
    cin>>answer;
    return answer;
}
char MainMenu()//主菜单函数
{
  char *MenuItem[6]={"&&  航空客运订票系统菜单  &&","&&    [1]. 航 线 管 理      &&", "&&    [2]. 订 票 办 理      &&","&&    [3]. 退 票 办 理      &&","&&    [4]. 乘 客 管 理      &&","&&    [5]. 系 统 离 开      &&"};
  return ModelMenu(MenuItem,6);
}
char Continue()//是否继续函数
{
  int i;
  char answer;
  while(1)
  {  
    cout<<"\t\t   ";
    for(i=0;i<15;i++)
        cout<<"─";
    cout<<"\n\t\t\t   是否继续(Y/N)?";
    cin>>answer;
    if(answer=='y'||answer=='Y') return 'y';
    else if(answer=='n'||answer=='N') return 'n';
    else
          cout<<"\t\t\t 输入错误,请重新输入!"<  }
}
int ExitSystem()//系统退出
{
  char answer;
  cout<<"\n\t\t\t 你确定是否真要离开系统吗(Y/N)?";
  cin>>answer;
  if(answer=='y'||answer=='Y') return 1;
  else
    return 0;
}
void prefix(char *Item) //操作提示函数
{
  int i;  
  cout<<"\n\n\t\t\t 当前操作:"<  cout<<"\t\t   ";
  for(i=0;i<15;i++)
    cout<<"─";
  cout<}
//航线查找函数,Find_Line()为重载函数
int Find_Line(PFlight L,char *key)//引用调用
{
  int flag=0; //该标志位0表示未找到相关信息,反之即找到 
Flight *p1;
  p1=L;         //赋航线首地址
  if(p1==p2) return flag;     //首航线不作比较
  while(p1!=p2&&p1!=NULL)   //本航班号不纳入比较范围,否则会一直提示航线不唯一
  {若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
    if(strcmp(p1->Flight_No,key)==0)
    {
        flag=1;
        break;
    }
    p1=p1->Next;//指向下一航班结点
  }
    return flag;
}
int Find_Line(PFlight L,char *key,PFlight &p2,int &Flight_No)//引用调用
{
  int flag=0;   //该标志位0表示未找到相关信息,反之即找到
  Flight *p1;
  p1=L;         //赋航线首结点
  while(p1!=NULL)  
  {
    if(strcmp(p1->Flight_No,key)==0)//不包括当前航线
    {
        flag=1;
        p2=p1;
        break;
    }
    p1=p1->Next;             //指向下一航班结点
    if(p1!=NULL)           //遇结束符不作统计范围
        Flight_No++;
  }
  return flag;
}
void Line_Add()//航线添加函数
{
  Flight *p1;   //建立临时航线结点
  while(1)
  {
    if(Head==NULL)//航线为空
    {
        p1=p2=new Flight;   //建立首个航线
        Head=p2;
    }
    else
    {
        p1=new Flight; //建立航线结点
        p2->Next=p1;   //前一航线结点指向当前航班结点
        p2=p1;       //保留当前航班结点地址  
    }
    prefix("航线增设");
    cout<<"\t\t\t   请输入终点站名:";
    cin>>p2->Des_Name;  
    while(1)         //数据合法性检验
    {
        cout<<"\n\t\t\t   请输入航班号(唯一):";
        cin>>p2->Flight_No;
        if(Find_Line(Head,p2->Flight_No))   //存在航班号
          cout<<"\n\t\t\t   输入的航班号不唯一!"<        else
          break;
    }
    cout<<"\n\t\t\t   请输入飞机号:";
    cin>>p2->Plane_No;

          getch();
        }
        else
          break;
    }
    cout<<"\n\t\t\t   请输入乘员定额:";
    cin>>p2->Customer_Amount;
    cout<<"\n\t\t\t   请输入头等舱票价:";
    cin>>p2->Price[0];
 

C++航空客运订票系统
 cout<<"\n\t\t\t   请输入普通舱票价:";
    cin>>p2->Price[1];
    cout<<"\n\t\t\t   请输入经济舱票价:";
    cin>>p2->Price[2];
    p2->Free_Amount=p2->Customer_Amount; //剩余票数与乘员定额相同
    p2->CustName=NULL;           //该航线定票乘客头指针为空
    p2->ReplName=NULL;           //初始候补名单为空
    if(Continue()=='n')
    {
        p2->Next=NULL;             //航线的下一结点为空
        return;
    }
  }
}若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
int Empty_Flight()//航线是否为空函数
{
  if(Head==NULL)
  {
    cout<<"\n\n\n\n\n\n\n\n\t\t   对不起,没有相关航线。按任意键返回..."<    getch();
    return 1;
  }
  else
    return 0;
}
void Line_See()//航线查看函数
{
  int Day;
  Flight *p1;
  p1=Head;
  char *Week_Day[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
  if(Empty_Flight())   //航班线为空
    return;
  prefix("航班查看");
  while(p1!=NULL)
  {
    Day=p1->Week_Day-'0'-1;     //数字转换相应星期数
    cout<<"\n\t\t\t  终点站名:"<Des_Name<    cout<<"\n\t\t\t  航 班 号:"<Flight_No<    cout<<"\n\t\t\t  飞 机 号:"<Plane_No<    cout<<"\n\t\t\t  飞行周日:"<    cout<<"\n\t\t\t  乘员定额:"<Customer_Amount<    cout<<"\n\t\t\t  剩余票数:"<Free_Amount<    cout<<"\n\t\t\t  票    价:头舱 "<Price[0]<    cout<<"\n\t\t\t            普舱 "<Price[1]<    cout<<"\n\t\t\t            经舱 "<Price[2]<    p1=p1->Next;
    if(p1!=NULL)
          cout<<"继续查看航班信息!"<  }
  cout<<" 航班信息查看完毕!"<  cout<<"\n\t\t\t   按任意键返回子菜单..."<  getch();
}
void Sub1Menu()
{
  char *MenuItem[]={"&&   航空客运航线管理子菜单   &&","& &[1]. 航 线增 设 & &","& &[2]. 航 线 查 看 & &","& &[3]. 返 回主 菜 单 & &"};
  while(1)
    switch(ModelMenu(MenuItem,4))
    {
        case '1':{Line_Add();break;}
        case '2':{Line_See();break;}
        case '3':{return;}
    }
}
void Sub2Menu()//订票办理函数
{
  int Ticket_Count,Seat_No,i,flag=0;
  int Flight_No=0;     //记录满足条件的航线的定票结点
  Flight *p1;           //记下满足条件的航线结点地址
  Customer *p2;         //临时性定票乘员结点
  Replace *p3;         //临时性候补乘员结点
  char answer[7];         //用户输入的航班数据
  char temp;
  int tag=0;           //候补乘客标志位
  int Amount;
  int IsRepl=0;         //是否执行候补操作标志位
  if(Empty_Flight())     //航班线为空
    return;
  while(1)
  {
    prefix("订票办理");
    flag=0;           //标志位清零以重新作出判断
    Flight_No=0;
    tag=0;
    cout<<"\n\t\t\t   请输入航班号:";
    cin>>answer;
    if(Find_Line(Head,answer,p1,Flight_No))  //调用航线查找函数,若存在则进行以下操作
    {
        while(1)                     //数据合法性检验
        {
          cout<<"\n\t\t\t   请输入定票数:";
          cin>>Ticket_Count;
          if(Ticket_Count==0)
          {
            cout<<"\n\t\t\t请输入大于零的数,按任意键继续输入."<            getch();
          }
          else
            break;
        }
        if(p1->Free_Amount>=Ticket_Count)
        {  
          Customer_Count++;               //定票乘客总数增1
          flag=1;                  //表明进入了订票实际操作
          IsRepl=1;           //定票量满足,无需进入候补操作
          Amount=p1->Free_Amount;            //记录剩余票数
        if(p1->CustName==NULL)//首个定票乘客,并记录相关属性
          {  
            Custp1[Flight_No]=p2=new Customer;     //建立该航线的首位乘客结点
            p1->CustName=Custp1[Flight_No];
          }
          else                   //建立该航线的后续乘客结点
          {
            p2=new Customer;  

                cin>>Custp1[Flight_No]->Rank;
if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3'))
                {
                  cout<<"\n\t\t输入出错,请输入1-3之间的数,按任意键继续输入."<                  getch();
                }
            else
                break;
            }
 

C++航空客运订票系统
 cout<<"\n\t\t\t   您的座位号为:"<            if(Ticket_Count<10)     //为显示规整,作相应处理
                cout<<"\n\t\t\t\t";
            else若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
                cout<<"\n\t\t\t";
            for(i=1;i<=Ticket_Count;i++) //打印座位号
            {
                cout<                if(i%10==0)
                  cout<<"\n\t\t\t";
            }
            cout<        }//满足定票数
        else if(p1->Free_Amount==0)
        {
          cout<<"\n\t\t   对不起,该航线的票已经全部售完!"<          IsRepl=0;
        }
        else
        {
          cout<<"\n\t\t   对不起,该航线的剩余票额数少于你的订票数。"<          IsRepl=0;
        }
        if(!IsRepl)
        {
          cout<<"\n\t\t   是否列入该航线候补乘客名单(Y/N)?";
          cin>>temp;
          if(temp=='y'||temp=='Y')//以下为候补操作
          {
            if(p1->ReplName==NULL)
            {
                Replp1[Flight_No]=p3=new Replace;     //建立该航线的首位候补乘客结点
                p1->ReplName=Replp1[Flight_No];
            }
            else
            {
                p3=new Replace;
                Replp1[Flight_No]->Next=p3;
                Replp1[Flight_No]=p3;
            }
            IsReplace=0;     //候补乘客不为空
            tag=1;           //已选择列入候补乘客名单
            Replp1[Flight_No]->Amount=Ticket_Count;
            cout<<"\n\t\t\t   请输入你的姓名:";
            cin>>Replp1[Flight_No]->Name;
            Replp1[Flight_No]->Seat_No=Seat_No; //候补乘客的座位
            Replp1[Flight_No]->Amount=Ticket_Count;    //候补乘客的订票数
            while(1)                      //数据合法性检验
            {
                cout<<"\n\t\t\t   请输入舱位等级(1-3):";
                cin>>Replp1[Flight_No]->Rank;
                if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3'))
                {
                  cout<<"\n\t\t输入出错,请输入1-3之间的数,按任意键继续输入."<                  getch();
                }
            else
                break;
            }
            cout<<"\n\t\t\t   该乘客暂时无座位!"<          }//进入候补名单        
        }//票数满足
    }//航线存在
    else
        cout<<"\n\t\t   对不起,没有该次航班,按任意继续操作."<    if(flag)     //此处不作处理,则会地址溢出
      Custp1[Flight_No]->Next=NULL;//末位定票乘客的指针置空
    if(tag)
    {
      Replp1[Flight_No]->Next=NULL;//末位候补乘客的指针置空
        cout<<"\n\t\t   该乘客已成功列入该航线的候补名单."<    }
    if(Continue()=='n')
        return;
  }//while
}  
void Display_Reserve()//订票乘客信息
{
  Flight *p1;
  Customer *p2;
  p1=Head;
  int flag=0;
  if(Empty_Flight())return;
  prefix("定票乘客名单");
  if(IsEmpty)
  {
    cout<<"\n\n\n\n\t\t\t对不起,系统中无定票的乘客。"<    getch();
    return;
  }
  while(p1!=NULL)
  {
    if(p1->CustName!=NULL)
    {
        p2=p1->CustName;
        while(p2!=NULL)
        {
          cout<<"\n\t\t\t  姓    名:"<Name<         cout<<"\n\t\t\t  航 班 号:"<Flight_No<                cout<<"\n\t\t\t  飞 机 号:"<Plane_No<                cout<<"\n\t\t\t  订 票 量:"<Amount<                cout<<"\n\t\t\t  终 点 站:"<Des_Name<                cout<<"\n\t\t\t  舱位等级:"<Rank<          if(p2->Amount>1)
            cout<          else
            cout<Seat_No<          p2=p2->Next;
          if(p2!=NULL||p1->Next!=NULL)
            cout<<"\t 继续"<        }
    }
    p1=p1->Next;
   
  }  
  cout<<"\t 结束"<  cout<<"\n\t\t\t   按任意键返回子菜单..."<  getch();
}

    getch();
    return;
  }
   while(p1!=NULL)
  {
    if(p1->ReplName!=NULL)
    {
        p2=p1->ReplName;
        while(p2!=NULL)
        {
 
C++航空客运订票系统
  cout<<"\n\t\t\t  姓    名 :"<Name<                cout<<"\n\t\t\t  航 班 号:"<Flight_No<                cout<<"\n\t\t\t  飞 机 号:"<Plane_No<                cout<<"\n\t\t\t  订 票 量:"<Amount<                cout<<"\n\t\t\t  终 点 站:"<Des_Name<                cout<<"\n\t\t\t  舱位等级:"<Rank<          if(p2->Amount>1)
            cout<          else
            cout<          p2=p2->Next;
          if(p2!=NULL||p1->Next!=NULL) cout<<"\t "<        }
    }
    p1=p1->Next;
  }  
  cout<<"\t "<  cout<<"\n\t\t\t   按任意键返回子菜单..."<  getch();
}
void Sub3Menu()//退票办理函数
{
  int Flight_No=0,flag=0;     //记录满足条件的航线的定票结点
  Flight *p1;           //记下满足条件的航线结点地址
  Customer *p2,*p4;         //临时性定票乘员结点
  Replace *p3,*p5;         //临时性候补乘员结点
  char answer[7],name[7];     //用户输入的航班数据
  int tag=0;            //若第二乘客满足条件,则它的首地址会发生冲突,注意此处
  int Seat_No;           //记录座位号
  if(Empty_Flight())         //航班线为空
    return;
  prefix("退票办理");
  if(IsEmpty)
  {
    cout<<"\n\n\t\t   对不起,系统中暂时无定票乘客..."<    getch();
    return;
  }
  while(1)
  {
    flag=0;
    tag=0;
    Flight_No=0;
    prefix("退票办理");
    cout<<"\n\t\t\t   请输入航班号:";
    cin>>answer;
    if(Find_Line(Head,answer,p1,Flight_No))     //航线存在
    {
        p2=p1->CustName;     //指向该航线的乘客名单的首地址
        cout<<"\n\t\t\t   请输入您的姓名:";
        cin>>name;
        if(p2==NULL)     //该航线无定票乘客
        {
          cout<<"\n\t\t   很抱歉,该航线暂时无人定票,无法进行退票操作."<          if(Continue()=='n')//是否继续操作
            return;
          else
            continue;   //提前结束本次循环,重新进行退票处理
        }
        else    
          while(p2!=NULL)//查找有无此乘客名
          {
            if(strcmp(p2->Name,name)==0)//此外括号不能省略,否则功能会转变
            {
                if(p2==p1->CustName)   //若为首位乘客满足  
                {
                  prior=p1->CustName; //记录指针
                  Seat_No=p2->Seat_No;
                  flag=1;
                  break;
                }
            }
         else if(p2->Next!=NULL)//记录满足航线的的前结点地址
            {
                if(strcmp(p2->Next->Name,name)==0)
                {
                  tag=1;         //特别注意此处
                  prior=p2;     //记录满足定乘客的前一地址,以作删除操作
                  Seat_No=p2->Next->Seat_No;
                  flag=1;
                  break;
                }
            }
            p2=p2->Next; //指向下一乘客结点
          }//while  
          if(!flag)
            cout<<"\n\t\t   很抱歉,该航线无此乘客,请查证后再操作..."<    }//存在该航线
    else
        cout<<"\n\t\t   对不起,没有该次航班,按任意继续操作."<    if(flag)
    {
        if(prior==p1->CustName&&!tag)   //首结点满足条件且一个乘客,则该航线定票乘客置空
        {
          if(prior->Next==NULL)     //仅一乘客,头指针置空
          {
            p1->Free_Amount+=prior->Amount;
            p1->CustName=NULL;
          }
          else  
          {
            p1->Free_Amount+=prior->Next->Amount;
            p1->CustName=prior->Next; //指向下一乘客结点
          }
        }
        else
        {
          p1->Free_Amount+=prior->Next->Amount;

        if(Customer_Count==0)
          IsEmpty=1;
    }
    if(flag)//存在退票操作
    {
       p3=p1->ReplName;
       while(p3!=NULL)
       {
        if(p3->Amount<=p1->Free_Amount)//候补乘客的定票数小于或等于剩余票数
        {
          cout<<"\n\t\t   候补乘员"<Name<<"已经列入定票乘客名单中...\n"<          p4=Custp1[Flight_No]->Next=new Customer;

            IsReplace=1;
          if(p1->ReplName==p3)
          {
              if(p1->ReplName->Next==NULL)
                p1->ReplName=NULL;    //删除
              else
 
C++航空客运订票系统
 p1->ReplName=p3->Next;
          }
          else
            p5->Next=p3->Next->Next;
          break;  
        }
        if(p3->Next!=NULL)
          if(p3->Next->Amount<=p1->Free_Amount)
            p5=p3;
        p3=p3->Next; //指向下一候补乘客结点
        }
        cout<<"\n\t\t   退票办理已经操作完毕,按任意键返回菜单..."<        getch();
        return;
    }//存在此乘客
    if(Continue()=='n')
        return;
  }//while
}
void Sub4Menu()//乘客管理子菜单函数
{
  char *MenuItem[]={"&&   航空客运乘客管理子菜单   &&","& & [1]. 订票乘客信息 & &","& & [2]. 候补乘客信息 & &", "& & [3]. 返回系统菜单 & &"};
  while(1)
    switch(ModelMenu(MenuItem,4))
    {
        case '1':{Display_Reserve();break;}
        case '2':{Display_Replace();break;}
        case '3':{return;}
    }
}
void main()//下面为主程序画面函数
{
  Head=NULL;
  while(1)
  {
    switch(MainMenu())
    {
    case '1':{Sub1Menu();break;}           //航线管理
    case '2':{Sub2Menu();break;}           //订票办理
    case '3':{Sub3Menu();break;}           //退票办理
    case '4':{Sub4Menu();break;}           //乘客管理
    case '5':{if(ExitSystem()) return;break;}   //退出系统
    }
  }
}
 
五、调试分析
在调试该程序的过程中,遇到了很多困难:
1、多处出现未定义字符,这都是粗心大意所至;
2、另外,在菜单模板函数ModelMenu( )中,其中的for循环语句出错,导致了在显示主菜单和各个子菜单时,菜单内容无法正常显示,经过多次调试,得知是在“cout<<"\t\t\t"< 
六、测试结果
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运订票系统菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&     [1]. 航 线 管 理       &&
&&     [2]. 订 票 办 理       &&
&&     [3]. 退 票 办 理       &&
&&     [4]. 乘 客 管 理       &&
&&     [5]. 系 统 离 开       &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:1
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运航线管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &   [1]. 航 线 增 设     & &
& &   [2]. 航 线 查 看     & &
& &   [3]. 返 回 主 菜 单  & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
 
                   对不起,没有相关航线。按任意键返回...
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运航线管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &   [1]. 航 线 增 设     & &
& &   [2]. 航 线 查 看     & &
& &   [3]. 返 回 主 菜 单  & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:1
 
                         当前操作:航线增设
                   ───────────────
                           请输入终点站名:beijing
                           请输入航班号(唯一):001
                           请输入飞机号:1
                           请输入飞行周日(1-7):1
                           请输入乘员定额:100
                           请输入头等舱票价:960
                           请输入普通舱票价:860
                           请输入经济舱票价:880
                   ───────────────
                           是否继续(Y/N)?y
 
                         当前操作:航线增设
                   ───────────────
                           请输入终点站名:kunming
                           请输入航班号(唯一):002
                           请输入飞机号:2
                           请输入飞行周日(1-7):3
                           请输入乘员定额:100
                           请输入头等舱票价:900
                           请输入普通舱票价:800
                           请输入经济舱票价:850
                   ───────────────
                           是否继续(Y/N)?y
 
                         当前操作:航线增设
                   ───────────────
                           请输入终点站名:wuhang
                           请输入航班号(唯一):003
                           请输入飞机号:3
                           请输入飞行周日(1-7):2
                           请输入乘员定额:100
                           请输入头等舱票价:800
                           请输入普通舱票价:600
                           请输入经济舱票价:700
                   ───────────────
                           是否继续(Y/N)?n
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运航线管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &   [1]. 航 线 增 设     & &
& &   [2]. 航 线 查 看     & &
& &   [3]. 返 回 主 菜 单  & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
 
                         当前操作:航班查看
                   ───────────────
                          终点站名:beijing
                          航 班 号:001
                          飞 机 号:1
                          飞行周日:星期一
                          乘员定额:100
                          剩余票数:100
                          票    价:头舱 960
 
C++航空客运订票系统
    普舱 860
                                    经舱 880
继续查看航班信息!
                          终点站名:kunming
                          航 班 号:002
                          飞 机 号:2
                          飞行周日:星期三
                          乘员定额:100
                          剩余票数:100
                          票    价:头舱 900
                                    普舱 800
                                    经舱 850
继续查看航班信息!
                          终点站名:wuhang
                          航 班 号:003
                          飞 机 号:3
                          飞行周日:星期二
                          乘员定额:100
                          剩余票数:100
                          票    价:头舱 800
                                    普舱 600
                                    经舱 700
 航班信息查看完毕!
 
                           按任意键返回子菜单...
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运航线管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &   [1]. 航 线 增 设     & &
& &   [2]. 航 线 查 看     & &
& &   [3]. 返 回 主 菜 单  & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码::3
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运订票系统菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&     [1]. 航 线 管 理       &&
&&     [2]. 订 票 办 理       &&
&&     [3]. 退 票 办 理       &&
&&     [4]. 乘 客 管 理       &&
&&     [5]. 系 统 离 开       &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
 
                         当前操作:订票办理
                   ───────────────
                           请输入航班号:007
                   对不起,没有该次航班,按任意继续操作.
                   ───────────────
                           是否继续(Y/N)?y
 
                         当前操作:订票办理
                   ───────────────
                           请输入航班号:001
                           请输入定票数:10
                           请输入你的姓名:wang
                           请输入舱位等级(1-3):1
                           您的座位号为:
                        1 2 3 4 5 6 7 8 9 10
                   ───────────────
                           是否继续(Y/N)?y
 
                         当前操作:订票办理
                   ───────────────
                           请输入航班号:002
                           请输入定票数:110
 
                   对不起,该航线的剩余票额数少于你的订票数。
 
                   是否列入该航线候补乘客名单(Y/N)?y
 
                           请输入你的姓名:yang
                           请输入舱位等级(1-3):2
                           该乘客暂时无座位!
                   该乘客已成功列入该航线的候补名单.
                   ───────────────
                           是否继续(Y/N)?y
 
                         当前操作:订票办理
                   ───────────────
                           请输入航班号:001
                           请输入定票数:1
                           请输入你的姓名:zhang
                           请输入舱位等级(1-3):2
                           您的座位号为:
                                11
                   ───────────────
                           是否继续(Y/N)?y
 
                         当前操作:订票办理
                   ───────────────
                           请输入航班号:003
                           请输入定票数:50
                           请输入你的姓名:li
                           请输入舱位等级(1-3):3
                           您的座位号为:
                        1 2 3 4 5 6 7 8 9 10
                        11 12 13 14 15 16 17 18 19 20
                        21 22 23 24 25 26 27 28 29 30
                        31 32 33 34 35 36 37 38 39 40
                        41 42 43 44 45 46 47 48 49 50
                   ───────────────
                           是否继续(Y/N)?n
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运订票系统菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&     [1]. 航 线 管 理       &&
&&     [2]. 订 票 办 理       &&
&&     [3]. 退 票 办 理       &&
&&     [4]. 乘 客 管 理       &&
&&     [5]. 系 统 离 开       &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:3
 
                         当前操作:退票办理
                   ───────────────
                           请输入航班号:003
                           请输入您的姓名:li
 
                   退票办理已经操作完毕,按任意键返回菜单...
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运订票系统菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&     [1]. 航 线 管 理       &&
&&     [2]. 订 票 办 理       &&
&&     [3]. 退 票 办 理       &&
&&     [4]. 乘 客 管 理       &&
&&     [5]. 系 统 离 开       &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:4
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运乘客管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&  &   [1]. 订票乘客信息    &  &
&  &   [2]. 候补乘客信息    &  &
&  &   [3]. 返回系统菜单    &  &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:1
 
                         当前操作:定票乘客名单
                   ───────────────
                          姓    名:wang
                          航 班 号:001
 

C++航空客运订票系统
    飞 机 号:1
                          订 票 量:10
                          终 点 站:beijing
                          舱位等级:1
 多票
         继续
                          姓    名:zhang
                          航 班 号:001
                          飞 机 号:1
                          订 票 量:1
                          终 点 站:beijing
                          舱位等级:2
  11
         继续
         结束
                           按任意键返回子菜单...
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运乘客管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&  &   [1]. 订票乘客信息    &  &
&  &   [2]. 候补乘客信息    &  &
&  &   [3]. 返回系统菜单    &  &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:2
 
                         当前操作:候补乘客名单
                   ───────────────                          姓    名:yang
                          航 班 号:002
                          飞 机 号:2
                          订 票 量:110
                          终 点 站:kunming
                          舱位等级:2
 多票
                           按任意键返回子菜单...
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运乘客管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&  &   [1]. 订票乘客信息    &  &
&  &   [2]. 候补乘客信息    &  &
&  &   [3]. 返回系统菜单    &  &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:3
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运订票系统菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&     [1]. 航 线 管 理       &&
&&     [2]. 订 票 办 理       &&
&&     [3]. 退 票 办 理       &&
&&     [4]. 乘 客 管 理       &&
&&     [5]. 系 统 离 开       &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:5
 
                    你确定是否真要离开系统吗(Y/N)?y
 
Press any key to continue
 
七、用户使用说明
    1、本程序的运行环境为DOS操作系统;
2、进入程序后即显示航空客运订票系统菜单:
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运订票系统菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&     [1]. 航 线 管 理       &&
&&     [2]. 订 票 办 理       &&
&&     [3]. 退 票 办 理       &&
&&     [4]. 乘 客 管 理       &&
&&     [5]. 系 统 离 开       &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:
 
用户可根据菜单提示的信息,选择自己所需的业务代码,以回车结束代码输入,并进入执行相应操作的界面,如果所选代码不存在,则显示信息:“输入错误,请重新输入!”直至输入正确为止。
3、在进入了用户需要办理的业务界面之后,根据提示信息,选择所需的操作,输入选项代码或其他输入信息,以回车结束输入,并进入下一执行界面。若选择操作[1],则进入了航空客运航线管理子菜单:
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&   航空客运航线管理子菜单   &&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &   [1]. 航 线 增 设     & &
& &   [2]. 航 线 查 看     & &
& &   [3]. 返 回 主 菜 单  & &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
请输入菜单项前的操作代码:
 
又根据需要选择相应的操作代码执行操作,如果所选代码不存在,则显示信息:“输入错误,请重新输入!”直至输入正确为止。
    4、当执行完用户所需的操作后,系统将会输出提示信息:“按任意键返回子菜单...”,若用户想离开当前界面,则选择返回或离开操作,系统将会输出提示信息:“你确定是否真要离开系统吗(Y/N)?”,用户可通过输入Y或N来决定是否离开。
    5、具体操作可参看“测试结果”的演示。
 
八、小结
通过本次课程设计,更深入的了解了数据结构的基本操作,掌握了其中的一些基本算法,并且能用所学的这些基本知识与技能解决简单的程序设计问题;在该程序中,就是应用了线性表的插入、查找、删除等的基本操作。在调试程序的过程中,也检查出了我在知识上的多处漏洞,这对我来说是一个很大的收获,正如老师所说的那样,在调试程序的时候,错误越多越好,这样,就能看到自己知识上的更多漏斗,在调试的过程中,就弥补了这些漏洞,同时也学会了解决问题的方法,每调试除了一个错误,我就积取了一点经验,在以后编写程序的时候,再遇到类似问题,就可以
 
C++航空客运订票系统
避免或是很轻松地解决了。
 
九、谢辞
本程序虽然基本能够实现航空客运订票中的各项操作,但还有很多问题,比如健壮性太差,输入预期外的字符后会产生意想不到的问题,还有,当预定票额超出剩余票额时,该顾客就无法定一张票,而被全部放入替补乘客的行列,此处有些不符合常理,还有待完善。
 
十、参考文献
《数据结构习题解析》 殷人昆编著  清华大学出版社
《数据结构课程设计》 苏仕华 编著  机械工业出版社
 
十一、附录:测试数据
航班信息
 





终点
站名

航班


飞机


飞行
周日

乘员
定额

票价


头舱

普舱

经舱


beijing

001

1

星期一

100

960

860

880


kunming

002

2

星期三

100

900

800

850


wuhang

003

3

星期二

100

800

600

700
 
定票乘客名单
 





姓名

航班号

飞机号

订票量

终点站

舱位等级


wang

001

1

10

beijing

1


zhang

001

1

1

beijing

2
 
候补乘客名单
 





姓名

航班号

飞机号

订票量

终点站

舱位等级


yang

002

2

110

kunming

2
 
 
 
 
 
 
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师