航空订票系统C++课程设计

航空订票系统

一、题目

1.录入功能

可以录入航班信息(如航班号,起飞降落时间,城市,座位数,票价)

2.查询功能

可以查询航班的各项信息(如根据航班号,起飞降落城市查找航班并显示航班信息)

3.修改删除功能

可以修改删除航班的信息

4.追加航线

在原本的航线之后可以继续添加航线方便操作

5订票功能

可以订票并且记录下乘客的相关信息(如姓名,身份证号码)

6.退票功能

可以退票并且记录乘客的相关信息以及退票信息

二、代码

#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<string.h>
using namespace std;

typedef struct Node
{
	int hangbanhao;//航班号
    char qifeichengshi[10];//起飞城市
	char jiangluochengshi[10];//降落城市
	char qifeishijian[10];//起飞时间
	char jiangluoshijian[10];//降落时间
    int zuoweishu;//座位数
	int piaojia;//票价
    struct Node *next;//结点的指针域
}LNode,*LinkList;//定义航班信息 LinkList为指向结构体LNode的指针类型


typedef struct CK
{
  char name[10];//乘客姓名
  char id[18];//乘客身份证号
  struct CK *next;//结点的指针域
}ck,*cke;//乘客信息


void import(int n,LinkList &L)//录入航班函数: n为所要录入航班的数量:
{//建立一个带头结点的单链表L
    L=(LinkList)malloc(sizeof(LNode));//申请表空间
	L->next=NULL;//头结点的指针域置空
	LNode * tail=L;//将尾赋给尾指针,等价LinkList tail=L;
    for(int i=0; i<n; i++)//逐个赋值
     {
		LNode *p=(LinkList)malloc(sizeof(LNode));//创建一个p结点
        cout<<"请输入第"<<i+1<<"个航班的航班号 ";
        cin>>p->hangbanhao;
		cout<<"请输入第"<<i+1<<"个航班的起飞城市 ";
        cin>>p->qifeichengshi;
		cout<<"请输入第"<<i+1<<"个航班的降落城市 ";
        cin>>p->jiangluochengshi;
		cout<<"请输入第"<<i+1<<"个航班的起飞时间 ";
		cin>>p->qifeishijian;
		cout<<"请输入第"<<i+1<<"个航班的降落时间 ";
		cin>>p->jiangluoshijian;
	    cout<<"请输入第"<<i+1<<"个航班的座位数 ";
		cin>>p->zuoweishu;
		cout<<"请输入第"<<i+1<<"个航班的票价";
		cin>>p->piaojia;
		p->next=NULL;//头结点的指针域置空
		tail->next=p;//将新结点插入尾部
		tail=p;//插入的结点变为尾结点,尾插法
	}
}
//写入本地文件,并读取输出显示


void show_L(LinkList &L)//输出浏览机票信息
{
  ofstream out("out.txt");//实例化一个对象
   if (out.is_open())
   {
      LinkList p=L->next;
      while(p)
      {
		out<<"航班号:";
	    out<<p->hangbanhao;
        out<<" 起飞城市:";
	    out <<p->qifeichengshi;
		out<<" 降落城市:";
		out <<p->jiangluochengshi;
		out<<" 起飞时间:";
		out <<p->qifeishijian;
        out<<" 降落时间:";
		out <<p->jiangluoshijian;
		out<<" 座位数:";
		out<<p->zuoweishu;
		out<<" 票价:";
		out<<p->piaojia;
		out<< "\n";//用于换行,是下面in.getline的关键
	    p=p->next;
	  }
  }
   out.close(); //写完
    char buffer[256];
    ifstream in("out.txt");
	if (! in.is_open())
       { cout << "Error opening file"; exit (1); }
       while (!in.eof() )
       {
           in.getline (buffer,100);
           cout << buffer << endl;
       }
}

//按航班号查找
LinkList GetElem_L(LinkList &L,int e)
{
      LinkList p=L->next;
      while(p)
	  {
		if(p->hangbanhao!=e)
			p=p->next;
		else return p;
	  }
     return 0;
}

//按航班起降城市查找
LinkList GetElem_Lc(LinkList &L,char qi[10],char ji[10])
{
      LinkList p=L->next;
      while(p)
	  {
		if(strcmp(p->qifeichengshi,qi)!=0||strcmp(p->jiangluochengshi,ji)!=0)
			p=p->next;
		else return p;
	  }
      return 0;
}


//删除
int ListDelete_L(LinkList &L,int e){
	LinkList p=L;
	while(p->next&&p->next->hangbanhao!=e){
		p=p->next;//直到查找到要删除的结点
	}
	if(!p->next)
		return 0;
	LinkList q=p->next;
	p->next=q->next;//p->next=p->next->next;
	free(q);//本题q是需要删除的结点
	return 1;
}


//插入
int ListInsert_L(LinkList &L,int i){
	LinkList p=L;//i为插入的位置
	int j=0;
	while(p&&j<i-1){
		p=p->next;
		++j;
	}
	if(!p||j>i-1)
		return 0;
	LNode *s=(LinkList)malloc(sizeof(LNode));
	cout<<"输入航班号:";
	cin>>s->hangbanhao;
	cout<<"输入起飞城市:";
	cin>>s->qifeichengshi;
	cout<<"输入降落城市:";
	cin>>s->jiangluochengshi;
	cout<<"输入起飞时间:";
	cin>>s->qifeishijian;
	cout<<"输入降落时间:";
	cin>>s->jiangluoshijian;
	cout<<"输入座位数:";
	cin>>s->zuoweishu;
	cout<<"输入票价:";
	cin>>s->piaojia;
	s->next=p->next;
	p->next=s;//s->next=p->next;p->next=s;
	return 1;
}


//修改
LinkList xiugai(LinkList &L,int yxg)
{
  LinkList q=L->next;
      while(q)
	  {
		if(q->hangbanhao!=yxg)
			q=q->next;
		else return q;
	  }
  return 0;
}


//乘客信息录入
void importren(int n,cke &C)//录入航班函数: n为所要录入航班的数量:
{
    C=(cke)malloc(sizeof(ck));
	C->next=NULL;
	ck*ta=C;
    for(int i=0; i<n; i++)
     {
		ck *p=(cke)malloc(sizeof(ck));//就是创建一个p结点,关键就是写法,LNdoe *p;
        cout<<"请输入第"<<i+1<<"个乘客的姓名 ";
        cin>>p->name;
		cout<<"请输入第"<<i+1<<"个航班的身份证ID ";
        cin>>p->id;
         p->next=NULL;
		ta->next=p;
		ta=p;//尾插法,根据循环画图可知,tail指针始终在最后
	}
}


//订票乘客信息和航班信息写入本地和读取
void show_dp(cke &C,LinkList &R)
{
  ofstream out("dinpiao.txt");//实例化一个对象
   if (out.is_open())
   {
      cke p=C->next;
      while(p){
		out<<"姓名 ";
	    out<<p->name;
	    out<<"  身份证ID ";
		out<<p->id;
		out<< "\n";//用于换行,是下面in.getline的关键
	    p=p->next;
	  }
	  if(R->zuoweishu-1>=0)
	  {
	   out<<"航班号:"<<R->hangbanhao;
	   out<<" 起飞城市:"<<R->qifeichengshi;
	   out<<" 降落城市:"<<R->jiangluochengshi;
	   out<<" 起飞时间:"<<R->qifeishijian;
	   out<<" 降落时间:"<<R->jiangluoshijian;
	   out<<" 座位数:"<<R->zuoweishu-1;//订票之后座位数减一
	   out<<" 票价:"<<R->piaojia;
	   out<< "\n";//用于换行,是下面in.getline的关键
	   out<<"订票成功";
	   out<< "\n";//用于换行,是下面in.getline的关键
	  }
	  else
	  {
		out<<"航班号:"<<R->hangbanhao;
	    out<<" 起飞城市:"<<R->qifeichengshi;
	    out<<" 降落城市:"<<R->jiangluochengshi;
	    out<<" 起飞时间:"<<R->qifeishijian;
	    out<<" 降落时间:"<<R->jiangluoshijian;
	    out<<" 座位数:"<<R->zuoweishu;
	    out<<" 票价:"<<R->piaojia;
	    out<< "\n";//用于换行,是下面in.getline的关键
        out<<"该航班暂无票,请选择其他航班";
		out<< "\n";//用于换行,是下面in.getline的关键
	  }
   }
   out.close(); //写完
    char buffer[256];
    ifstream in("dinpiao.txt");
	if (! in.is_open())
       { cout << "Error opening file"; exit (1); }
       while (!in.eof() )
       {
           in.getline (buffer,100);
           cout << buffer << endl;
       }
}

//退票乘客信息和航班信息写入本地和读取
void show_tp(cke &C,LinkList &R)
{
  ofstream out("dinpiao.txt");//实例化一个对象
   if (out.is_open())
   {
      cke p=C->next;
      while(p){
		out<<"姓名 ";
	    out<<p->name;
	    out<<"身份证ID ";
		out<<p->id;
		out<< "\n";//用于换行,是下面in.getline的关键
	    p=p->next;
	  }
	  out<<"航班号 "<<R->hangbanhao;
	  out<<" 起飞城市:"<<R->qifeichengshi;
	  out<<" 降落城市:"<<R->jiangluochengshi;
	  out<<" 起飞时间:"<<R->qifeishijian;
	  out<<" 降落时间:"<<R->jiangluoshijian;
	  out<<" 座位数:"<<R->zuoweishu;//退票之后不需要加1,用最初的座位数;
	  out<<" 票价:"<<R->piaojia;
	  out<< "\n";//用于换行,是下面in.getline的关键
	  out<<"退票成功";
	  out<< "\n";//用于换行,是下面in.getline的关键
   }
   out.close(); //写完
    char buffer[256];
    ifstream in("dinpiao.txt");
	if (! in.is_open())
       { cout << "Error opening file"; exit (1); }
       while (!in.eof() )
       {
           in.getline (buffer,100);
           cout << buffer << endl;
       }
}

void menu()//显示菜单界面
{
    cout<<"=================================欢迎使用航空订票系统==============================="<<endl;
    cout<<"*                                1请先录入航班信息                                 *"<<endl;
    cout<<"*                                2根据航班号查找航班                               *"<<endl;
	cout<<"*                                3根据起降城市查找航班                             *"<<endl;
    cout<<"*                                4删除航班                                         *"<<endl;
    cout<<"*                                5插入航班                                         *"<<endl;
    cout<<"*                                6修改航班                                         *"<<endl;
	cout<<"*                                7订票录入乘客信息                                 *"<<endl;
	cout<<"*                                8退票                                             *"<<endl;
	cout<<"===================================================================================="<<endl;
}
int main()
{
   LinkList L;//L是指针 航班
   cke C;//乘客
    while(1)
	{
      menu();
      int caozuo;
      cout<<"请选择操作";
      cin>>caozuo;
      switch(caozuo)
	  {
	case 1:
//创建
	  int num;
      cout<<"请输入要录入的航班数:";
      cin>>num;
      cout<<endl;
      import(num,L);//录入航班函数: n为所要录入航班的数量:
      cout<<endl;
      cout<<"航班信息录入成功";
      cout<<endl<<endl;
//写入本地文件,并读取输出显示
      show_L(L);
	  break;
    case 2:
//根据航班号查找
      int dchbh;//根据航班号查找
 	  printf("请输入待查航班号:");
      cin>>dchbh;
	  LinkList p;
	  p=GetElem_L(L,dchbh);//查找
	  cout<<"待查航班为:";
	  cout<<"航班号:"<<p->hangbanhao;
	  cout<<" 起飞城市:"<<p->qifeichengshi;
	  cout<<" 降落城市:"<<p->jiangluochengshi;
	  cout<<" 起飞时间:"<<p->qifeishijian;
	  cout<<" 降落时间:"<<p->jiangluoshijian;
	  cout<<" 座位数:"<<p->zuoweishu;
	  cout<<" 票价:"<<p->piaojia;
      cout<<endl<<endl;
      break;
    case 3:
//根据起降城市查找
       char qi[10];
	   char ji[10];
	   printf("请输入待查航班起降城市:");
	   cout<<"输入起飞城市:";
	   cin>>qi;
	   cout<<"输入降落城市:";
	   cin>>ji;
	   LinkList J;
	   J=GetElem_Lc(L,qi,ji);//查找
	   cout<<"待查航班为:";
	   cout<<"航班号:"<<J->hangbanhao;
	   cout<<" 起飞城市:"<<J->qifeichengshi;
	   cout<<" 降落城市:"<<J->jiangluochengshi;
	   cout<<" 起飞时间:"<<J->qifeishijian;
	   cout<<" 降落时间:"<<J->jiangluoshijian;
	   cout<<" 座位数:"<<J->zuoweishu;
	   cout<<" 票价:"<<J->piaojia;
       cout<<endl<<endl;
	   break;
    case 4:
//删除
      int shanchu;
	  printf("请输入要删除的航班号:");
	  scanf("%d",&shanchu);
	  ListDelete_L(L,shanchu);//删除
	  show_L(L);
	  cout<<endl<<endl;
	  break;
    case 5:
//插入
   //这里位置始终在第一行
      ListInsert_L(L,1);//插入
      show_L(L);
	  cout<<endl<<endl;
      break;
	case 6:
//修改
      printf("请输入要修改的航班号:");
      int yxg;
      cin>>yxg;
      LinkList q;
	  q=xiugai(L,yxg);//修改
	  cout<<"航班号修改为:";
	  cin>>q->hangbanhao;
	  cout<<"航班起飞城市修改为:";
	  cin>>q->qifeichengshi;
	  cout<<"航班降落城市修改为:";
	  cin>>q->jiangluochengshi;
	  cout<<"航班起飞时间修改为:";
	  cin>>q->qifeishijian;
	  cout<<"航班降落时间修改为:";
	  cin>>q->jiangluoshijian;
	  cout<<"航班座位数修改为:";
      cin>>q->zuoweishu;
	  cout<<"航班票价修改为:";
      cin>>q->piaojia;
      show_L(L);
	  cout<<endl<<endl;
	  break;
    case 7:
//订票
      int renshu;
      cout<<"请选择您要订票的人数:";
      cin>>renshu;
      cout<<endl;
      importren(renshu,C);//录入乘客信息
      cout<<endl;
      cout<<"乘客信息录入成功";
      cout<<endl;
	  int m;
	  cout<<"请输入您要订的航班号:";
	  cin>>m;
	  cout<<endl<<endl;
	  LinkList R;
      R=GetElem_L(L,m);//查找乘客订的航班
	  show_dp(C,R);//写入本地文件,并读取输出显示
	  cout<<endl<<endl;
      break;
    case 8:
//退票
     cout<<"请输入您要退票的航班号:";
	 int yt;
	 cin>>yt;
	 cout<<endl<<endl;
	 LinkList K;
     K=GetElem_L(L,yt);//查找乘客订的航班
	 show_tp(C,K);//写入本地文件,并读取输出显示
     cout<<endl<<endl;
	 break;
	  }//swith的大括号
	}//while的大括号
  return 0;
}//主函数的大括号


**

三、运行结果

**1、录入航班信息
在这里插入图片描述
2、查找航班(根据航班号、起降城市查找航班)
在这里插入图片描述
3、删除航班
在这里插入图片描述
4、插入航班
在这里插入图片描述
5、修改航班
在这里插入图片描述
6、订票、退票
在这里插入图片描述

#include #include #include #include #define OK 1 #define ERROR 0 typedef struct airline{ char air_num[8]; char plane_num[8]; char end_place[20]; int total; int left; struct airline *next; }airline; typedef struct customer{ char name[8]; char air_num[8]; int seat_num; struct customer *next; }customer; airline *start_air() { airline *a; a=(airline*)malloc(sizeof(airline)); if(a==NULL) a->next=NULL; return a; } customer *start_cus() { customer *c; c=(customer*)malloc(sizeof(customer)); if(c==NULL) c->next=NULL; return c; } airline *modefy_airline(airline *l,char *air_num) { airline *p; p=l->next; for(;p!=NULL;p=p->next) { if(strcmp(air_num,p->air_num)==0) { p->left++; return l; } printf("NO the airline!"); return 0; } } int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,int total,int left) { airline *q; q=(airline*)malloc(sizeof(airline)); strcpy(q->air_num,air_num); strcpy(q->plane_num,plane_num); strcpy(q->end_place,end_place); q->total=total; q->left=left; q->next=NULL; (*p)->next=q; (*p)=(*p)->next; return OK; } int insert_cus(customer **p,char *name,char *air_num,int seat_num) { customer *q; q=(customer*)malloc(sizeof(customer)); strcpy(q->name,name); strcpy(q->air_num,air_num); q->seat_num=seat_num; q->next=NULL; (*p)->next=q; (*p)=(*p)->next; return OK; } int book(airline *a,char *air_num,customer *c,char *name) { airline *p=a; customer *q=c->next; p=a->next; for(;q->next!=NULL;q=q->next){} for(;p->next!=NULL;p=p->next) { if(p->left>0) { printf("Your seat number is %d",(p->total-p->left+1)); insert_cus(&q,name,air_num,p->total-p->left+1); p->left--; return OK; } else { printf("seat is full"); return 0; } } return OK; } int del_cus(customer *c,airline *l,char *name) { customer *p,*pr; char air_num[8]; pr=c; p=pr->next; while(p!=NULL) { if(strcmp(p->name,name)==0) { strcpy(air_num,p->air_num); l=modefy_airline(l,air_num); pr->next=p->next; p=pr->next; printf("finish!"); return OK; } pr=pr->next; p=pr->next; } printf("NO the customer!"); return ERROR; } int search_air(airline *head) { airline *p=head->next; printf("air_num plane_num end_place total left\n"); for(;p!=NULL;p=p->next) { printf("%s %-10s %-8s %-8d%-8d\n",p->air_num,p->plane_num,p->end_place,p->total,p->left); } return OK; } int search_cus(customer *head) { struct customer *q=head->next; printf("name air_num seat_num\n"); for(;q!=NULL;q=q->next) { printf("%-8s%-12s%-d\n",q->name,q->air_num,q->seat_num); } return OK; } int creat_air(airline **l) { airline *p=*l; int i=0; char *air_num[3]={"007af","008af","009af"}; char *plane_num[3]={"plane1","plane2","plane3"}; char *end_place[3]={"Beijing","Shanghai","Tianjin"}; int total[3]={100,100,100}; int left[3]={52,54,76}; for(i=0;i<3;i++) insert_air(&p,air_num,plane_num,end_place,total,left); return OK; } int creat_cus(customer **l) { customer *p=*l; int i=0; char *name[3]={"zhsan","lisi","wangwu"}; char *air_num[3]={"007af","008af","009af"}; int seat_num[3]={2,5,7}; for(i=0;i<3;i++) insert_cus(&p,name,air_num,seat_num); return OK; } void main() { int t=1; customer *cus=start_cus(); airline *air=start_air(); char name[8],air_num[8],ch; creat_air(&air); creat_cus(&cus); while(t==1) { printf("\n"); printf("*********************************\n"); printf("* Welcome to air firm! *\n"); printf("* book--------1 *\n"); printf("* cancel------2 *\n"); printf("* search------3 *\n"); printf("* exit--------4 *\n"); printf("*********************************\n"); ch=getch(); if(ch=='1') { printf("Please input a airline number:"); scanf("%s",air_num); printf("Please input a name:"); scanf("%s",name); book(air,air_num,cus,name); } else if(ch=='2') { printf("Please input the cancel name:"); scanf("%s",name); del_cus(cus,air,name); } else if(ch=='3') { search_air(air); printf("\n"); search_cus(cus); } else if(ch=='4') { t=0;
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值