C++实现机票预订系统

C++编写一个简单的机票预订系统。该程序显示一个带有下列选项的菜单:预订机票、取消预订、查看某人是否预定了机票,以及显示预订乘客。这些信息保存在一个按照字母排列的名字链表中。在程序的简化版中,假设只为一趟航班预订机票。在完全版中不再限制航班的数目。创建一个航班链表,其中每个节点都指向乘客链表的指针。

/*******************list.h**********************/
#include <iostream>
#include <malloc.h>
#include <string.h>

using namespace std;
typedef struct TK{
 char Name[20];
 int SeatId;
 struct TK *next;
}Ticket;

typedef struct FLY
{
 char FlightId[10];
 int Seat[50];
 Ticket *PersonHead;
 struct FLY *next;
}Flight;

class Person{
public:
 void ListInitiate(Flight **head);
 bool Check(int *Seat,int Ch);
 void Insert(Flight *head);
 int Delete(Flight *head);
 void show(Flight *head);
 void Search(Flight *head);
 void AddFlght(Flight *head);
 void DeleteFlght(Flight *head);
};

/*******************************main.cpp**********************/
#include "list.h"

int menu()
{
 int option;
 cout<<endl<<endl;
 cout<<"主菜单"<<endl;
 cout<<" 1.Booking the ticket of flighting"<<endl;
 cout<<" 2.Cancel the flighting"<<endl;
 cout<<" 3.Display the information "<<endl;
 cout<<" 4.Search"<<endl;
 cout<<" 5.Add a Flight"<<endl;
 cout<<" 6.Delete a Flight"<<endl;
 cout<<" 0.Exit"<<endl<<endl;
 cout<<"Please input your option:";
 cin>>option;
 getchar();
 cout<<endl;
 if(option>=0&&option<=6)
 return option;
 else
 return -1;
}
int main()
{ 

 cout<<"------------------------->航班管理系统<<<<-----------------------------"<<endl;
 cout<<"   欢迎你使用该航班系统"<<endl;
 Flight *head;
 Person P;
 P.ListInitiate(&head);
 while(true)
 {
 switch(menu( ))
 {
 case 1:P.Insert(head);break; //预订
 case 2:P.Delete(head);break; //取消
 case 3:P.show(head);break; //显示
 case 4:P.Search(head);break; //查询
 case 5:P.AddFlght(head);break; //添加航班
 case 6:P.DeleteFlght(head);break; //删除航班
 case 0:exit(0);
 default:cout<<"Choice error!\n";
 }
 }
 return 0;
}
/*****************************************passenger.cpp*************************/
#include "List.h"
void Person::ListInitiate(Flight **head)
{
 int count=0;
 *head = (Flight *)malloc(sizeof(Flight));
 (*head)->PersonHead=(Ticket *)malloc(sizeof(Ticket));
 (*head)->PersonHead->next=NULL;
 (*head)->next=NULL;
 for(int i=0;i<50;i++)
 {
 (*head)->Seat[i]=0;
 }
}

bool Person::Check(int *Seat,int Ch)
{
 int i;
 for(int i=0;i<50;i++)
 {
 if(Ch==i&&Seat[i]!=1)return 1;
 }
 return 0;
}
Flight* Index(Flight *head,char *Id)
{
 Flight *p=head->next;

 while(p)
 {
 if(strcmp(p->FlightId,Id)==0)
 {
 return p;
 }
 p=p->next;
 }

 return NULL;
}
/*******************************预定******************************/
void Person::Insert(Flight *head)
{
 int count=0;
 int Ch;
 Flight *s=head;

 if(s->next==NULL)
 {
 cout<<"暂无航班!"<<endl;
 return ;
 }
 cout<<"航班列表:"<<endl;
 s=s->next;
 while(s!=NULL)
 {
 puts(s->FlightId);
 count++;
 if(count%5==0)
 cout<<"\n";
 s=s->next;
 }
 count=0;
 char FID[10];
 cout<<"输入航班ID:";
 gets(FID);
 s=Index(head,FID);
 if(s==NULL)
 {
 cout<<"输入ID有误"<<endl;
 return;
 }
 cout<<endl;
 cout<<"有以下座位可供选择:"<<endl;
 for(int i=0;i<50;i++)
 {
 if(s->Seat[i]!=1)
 {
 cout<<i<<"号"<<"\t";
 count++;
 if(count%5==0)
 cout<<"\n";
 }
 }
 cout<<endl;
 cout<<"输入座位号:\n";
 cin>>Ch;
 getchar();
 if(!Check(head->Seat,Ch))
 {
 cout<<"This Seat have been booked or it is non-existent";
 return ;
 }
 s->Seat[Ch]=1;
 char name[20];
 cout<<endl;
 cout<<"Input your Name:";
 gets(name);
 Ticket *p=s->PersonHead,*q;

 while(p->next!=NULL)
 {
 if(strcmp(p->next->Name,name)>0)
 break;
 p=p->next;
 }

 q=(Ticket *)malloc(sizeof(Ticket));
 q->next=p->next;
 p->next=q;
 strcpy(q->Name,name);
 q->SeatId=Ch;
}

/*******************************取消预定******************************/
int Person::Delete(Flight *head)
{
 char name[20],FID[10];
 cout<<"Input your Name:";
 gets(name);
 getchar();
 Flight *s;
 cout<<"Input the Flight ID:";
 gets(FID);
 s=Index(head,FID);
 if(s==NULL)
 {
 cout<<"输入ID有误"<<endl;
 return 0;
 }

 Ticket *p=s->PersonHead->next,*pre=s->PersonHead;
 int flag=0;
 while(p!=NULL)
 {
 if(strcmp(p->Name,name)==0){
 flag=1;
 break;
 }
 pre=p;
 p=p->next;
 }
 if(flag==1){
 pre->next=p->next;
 s->Seat[p->SeatId]=0;
 free(p);
 cout<<"你的机票已经取消成功";
 }
 else
 {
 cout<<"您还没订票\n";
 return 0;
 }
 return 1;
}
/*******************************显示信息******************************/
void Person::show(Flight *head)
{
 Flight *s;
 char FID[10];
 cout<<"Input The Flight ID:";
 gets(FID);
 s=Index(head,FID);
 if(s==NULL)
 {
 cout<<"输入ID有误"<<endl;
 return;
 }
 Ticket *p=s->PersonHead->next;
 if(p==NULL)
 {
 cout<<"还没乘客订票"<<endl;
 return;
 }
 while(p!=NULL)
 {
 cout<<"乘客: "<<p->Name<<" 座位号:" <<p->SeatId;
 p=p->next;
 }
}

/*******************************查询相关信息******************************/
void Person::Search(Flight *head)
{
 char name[20];
 cout<<"Input Your Name:";
 gets(name);
 Flight *s;
 char FID[10];
 cout<<"Input The Flight ID:";
 gets(FID);
 s=Index(head,FID);
 if(s==NULL)
 {
 cout<<"输入ID有误"<<endl;
 return;
 }
 Ticket *p=s->PersonHead->next;
 int flag=0;
 while(p!=NULL)
 {
 if(strcmp(p->Name,name)==0){
 flag=1;
 break;
 }
 p=p->next;
 }
 if(flag==1){
 cout<<name<<" 已订机票"<<endl;
 }
 else
 {
 cout<<name<<" 未订机票"<<endl;
 }
}
/*******************************增加航班**********************************/
void Person::AddFlght(Flight *head)
{
 char FlightID[10];
 Flight *p=head,*q;
 cout<<" 输入航班ID:";
 gets(FlightID);
 while(p->next)
 {
 p=p->next;
 }

 ListInitiate(&q);
 p->next=q;
 strcpy(q->FlightId,FlightID);
 cout<<"——航班已添加成功!";
}
/**********************************删除航班*******************************************/
void Person::DeleteFlght(Flight *head)
{
 char FlightID[10];
 int flag=0;
 Flight *p=head->next,*q=head;

 int count=0;
 Flight *s=head;

 if(s->next==NULL)
 {
 cout<<" 暂无航班!"<<endl;
 return ;
 }
 cout<<" 航班列表:"<<endl;
 s=s->next;
 while(s!=NULL)
 {
 cout<<s->FlightId<<endl;
 count++;
 if(count%5==0)
 cout<<"\n";
 s=s->next;
 }
 cout<<" 输入航班ID:";
 gets(FlightID);
 while(p)
 {
 if(strcmp(p->FlightId,FlightID)==0)
 {
 flag=1;break;
 }
 q=p;
 p=p->next;
 }
 if(flag==0)
 {
 cout<<" 该航班ID不存在!";
 return ;
 }
 q->next=q->next->next;
 free(p);
 cout<<" 航班已删除!\n";
}

效果如下:

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#实现航班查询及预订功能

    具体代码如下所示: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data.SqlClien

  • C++实现机票预订系统

    C++编写一个简单的机票预订系统.该程序显示一个带有下列选项的菜单:预订机票.取消预订.查看某人是否预定了机票,以及显示预订乘客.这些信息保存在一个按照字母排列的名字链表中.在程序的简化版中,假设只为一趟航班预订机票.在完全版中不再限制航班的数目.创建一个航班链表,其中每个节点都指向乘客链表的指针. /*******************list.h**********************/ #include <iostream> #include <malloc.h> #i

  • 基于EJB技术的商务预订系统的开发

    技术已经越来越多地应用到大型网络系统开发中,本文中,笔者将介绍EJB(Enterprise Java Beans)的定义.基于EJB技术的应用系统结构模型以及EJB组件的内容和分类,最后结合基于EJB的结构模型和EJB组件开发了一个商务预订系统.EJB从技术上而言不是一种"产品",而是一种技术规范.SUN公司对EJB的定义是:EJB的结构是开发和配置基于组件的分布式商务应用程序的一种组件结构.用EJB结构开发的应用程序是可伸缩的.事务型的.多用户安全的.这些应用程序可能只需编写一次,却

  • Java实战之火车票预订系统的实现

    目录 一.项目运行 二.效果图 三.核心代码 个人中心Controller 管理员和员工登陆控制 用户管理操作 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSP + Servlert + html+ css + JavaScript + JQuery + Ajax 等等: 二.效果图 三.核心代码 个人中心Controller /** * 个人中心

  • C#实现航班预订系统

    本文实例为大家分享了C#实现航班预订的具体代码,供大家参考,具体内容如下 连接数据库 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; namespace MyTickets {     public class DBHe

  • 详解Node.js模块间共享数据库连接的方法

    这个标题本身就是一个命题,因为使用默认方式的情况下,一个 Node.js 应用里的各个模块都是共享的同一个数据库连接.但是如果姿势不对,可能会很丑陋,甚至可能会出错. 你可以忽略下面这部分,直接切入正题. 背景 最近在做专业课程设计,题目是"机票预订管理系统".需求比较简单,就试着拿最近在学的 Node.js 来做了.本来还在调研用何种 Node.js 框架比较合适,看了几个框架之后发现这是杀鸡用牛刀,有看文档查资料的时间还不如直接动手写了.最后写完我会把代码放到 Github 上,欢

  • 关于网站运营几点个人的体会

    首先说明,此文不是本人原创而成,在原文的基础上加入了本人多年的运营经验总结.如果有什么问题可直接留言到我的BLOG.  运营者涉及的知识非常多,包含了软件.数据库.搜索引擎.网站布局.市场营销.经济管理等各个方面的知识和智慧.所以在此希望大家能理解并将眼光看得更宽一些,而不是仅仅将关键词选择.链接building作为运营者的核心考核.当然关键词选择是一种智慧之间的感悟,比如机票预定.机票预订,你说客户会输入什么来搜索呢?这是一种大概率事件或者小概率事件的抉择,对于某个关键词,排名会带来的实际的转

  • Oracle收购TimesTen 提高数据库软件性能

    正在看的ORACLE教程是:Oracle收购TimesTen 提高数据库软件性能.Oracle公司6月9日宣布同意收购TimesTen公司,TimesTen是一家私营软件企业,其产品能提高用于股市和机票预订等需要快速响应时间的数据库应用的性能. TimesTen的基础设施产品经常被Oracle用户使用,为Oracle的数据库提供高速缓冲. Oracle表示将把TimesTen的技术用于自己的数据库和中间件产品,为客户应用改善可用性和响应时间.TimesTen的产品还用于为实时记账和呼叫中心系统管

  • 菜鸟必看网络名词

    ADSL ADSL(Asymetric Digital Subscriber Loop)技术即非对称数字用户环路技术,就是利用现有的一对电话铜线,为用户提供上.下行非对称的传输速率(带宽),上行(从用户到网络)为低速的传输,可达640Kbps:下行(从网络到用户)为高速传输,可达7Mbps.它最初主要是针对视频点播业务开发的,随着技术的发展,逐步成为了一种较方便的宽带接入技术,为电信部门所重视. 这种宽带接入技术具有以下特点: 1. 可直接利用现有用户电话线,无须另铺电缆,节省投资: 2. 渗入

  • PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例

    概要 应同学邀请,演示如何使用 PyQt5 内嵌浏览器浏览网页,并注入 Javascript 脚本实现自动化操作. 下面测试的是一个廉价机票预订网站(http://www.flyscoot.com/),关键点如下 使用 QWebEngineView 加载网页,并显示进度. 在默认配置(QWebEngineProfile)中植入 Javascript 内容,这样脚本会在所有打开的网页中执行,不论跳转到哪个网址. Javascript 脚本使用网址中的路径名,判断当前网页位置,从而决定执行哪种操作.

  • 关系型数据库和非关系型数据库概述与优缺点对比

    目录 一.关系型数据库 1.概念 2.关系型数据库的特点 3.关系型数据库的瓶颈 4.关系型数据遵循ACID原则 1.A(Atomicity)原子性 2.C(Consistency)一致性 3.I(Isolation)独立性 4.D(Durability)持久性 二.NoSQL数据库 1.分布式系统 2.分布式计算的优点 3.分布式计算的缺点 4.关系型数据库和非关系型数据库的比较 4.1.关系型数据库 4.2.NoSQL 5.NoSQL的优点/缺点 一.关系型数据库 1.概念 关系型数据库:是

随机推荐