⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 航空客运定票系统.cpp

📁 航空客运定票系统(航空客运定票实习报告)
💻 CPP
字号:
#include "iostream.h"
#include "string.h"
#include <malloc.h>
#define MAX 100

//此结构体用来存储客户信息
typedef struct dkehu
{
	char name[20];      //客户名
	int count;          //票数
	struct dkehu *next; //指向下一个结点
}dkehu;

//队列存储定票客户的信息
typedef struct
{
	struct dkehu *pre;    //头指针
	struct dkehu *tear;   //尾指针
	int len;              //退票客户数
}linkQueue;

//此结构体用来存储一个航班的信息
typedef struct 
{
	char lastplace[20];  //目地地
	int number;          //总票额
	int plane_num;       //航班号
	int fly_week;        //起飞的日期
	int left;            //余下的票数
	int saleout;         //已卖出的票数
	struct dkehu *p;     //指向已定票链表的头
    linkQueue Q;         //退票队列
}airway;


//以顺序的存储结构存储各航班
airway hangxian[10];

//对各航班进行初始化
void init()
{
    strcpy(hangxian[0].lastplace,"上海");
    hangxian[0].number=0;
    hangxian[0].plane_num=112;
    hangxian[0].fly_week=1;
    hangxian[0].saleout=0;
    hangxian[0].left=100;
    hangxian[0].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[0].p->name,"0");
    hangxian[0].p->count=0;
	hangxian[0].p->next=NULL;
    hangxian[0].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[0].Q.tear=hangxian[0].Q.pre;
    strcpy(hangxian[0].Q.pre->name,"0");
    hangxian[0].Q.pre->count=0;
	hangxian[0].Q.pre->next=NULL;

    strcpy(hangxian[1].lastplace,"杭州");
    hangxian[1].number=1;
    hangxian[1].plane_num=123;
    hangxian[1].fly_week=2;
    hangxian[1].saleout=0;
    hangxian[1].left=100;
    hangxian[1].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[1].p->name,"0");
    hangxian[1].p->count=0;
	hangxian[1].p->next=NULL;
    hangxian[1].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[1].Q.tear=hangxian[1].Q.pre;
    strcpy(hangxian[1].Q.pre->name,"0");
    hangxian[1].Q.pre->count=0;
	hangxian[1].Q.pre->next=NULL;

   strcpy(hangxian[2].lastplace,"北京");
    hangxian[2].number=2;
    hangxian[2].plane_num=217;
    hangxian[2].fly_week=3;
    hangxian[2].saleout=0;
    hangxian[2].left=100;
    hangxian[2].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[2].p->name,"0");
    hangxian[2].p->count=0;
	hangxian[2].p->next=NULL;
    hangxian[2].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[2].Q.tear=hangxian[2].Q.pre;
    strcpy(hangxian[2].Q.pre->name,"0");
    hangxian[2].Q.pre->count=0;
	hangxian[2].Q.pre->next=NULL;

   strcpy(hangxian[3].lastplace,"天津");
    hangxian[3].number=3;
    hangxian[3].plane_num=145;
    hangxian[3].fly_week=4;
    hangxian[3].saleout=0;
    hangxian[3].left=100;
    hangxian[3].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[3].p->name,"0");
    hangxian[3].p->count=0;
	hangxian[3].p->next=NULL;
    hangxian[3].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[3].Q.tear=hangxian[3].Q.pre;
    strcpy(hangxian[3].Q.pre->name,"0");
    hangxian[3].Q.pre->count=0;
	hangxian[3].Q.pre->next=NULL;

   strcpy(hangxian[4].lastplace,"宁波");
    hangxian[4].number=4;
    hangxian[4].plane_num=192;
    hangxian[4].fly_week=5;
    hangxian[4].saleout=0;
    hangxian[4].left=100;
    hangxian[4].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[4].p->name,"0");
    hangxian[4].p->count=0;
	hangxian[4].p->next=NULL;
    hangxian[4].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[4].Q.tear=hangxian[4].Q.pre;
    strcpy(hangxian[4].Q.pre->name,"0");
    hangxian[4].Q.pre->count=0;
	hangxian[4].Q.pre->next=NULL;

   strcpy(hangxian[5].lastplace,"广州");
    hangxian[5].number=5;
    hangxian[5].plane_num=112;
    hangxian[5].fly_week=6;
    hangxian[5].saleout=0;
    hangxian[5].left=100;
    hangxian[5].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[5].p->name,"0");
    hangxian[5].p->count=0;
	hangxian[5].p->next=NULL;
    hangxian[5].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[5].Q.tear=hangxian[5].Q.pre;
    strcpy(hangxian[5].Q.pre->name,"0");
    hangxian[5].Q.pre->count=0;
	hangxian[5].Q.pre->next=NULL;

   strcpy(hangxian[6].lastplace,"湖北");
    hangxian[6].number=6;
    hangxian[6].plane_num=112;
    hangxian[6].fly_week=7;
    hangxian[6].saleout=0;
    hangxian[6].left=100;
    hangxian[6].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[5].p->name,"0");
    hangxian[6].p->count=0;
	hangxian[6].p->next=NULL;
    hangxian[6].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[6].Q.tear=hangxian[6].Q.pre;
    strcpy(hangxian[5].Q.pre->name,"0");
    hangxian[6].Q.pre->count=0;
	hangxian[6].Q.pre->next=NULL;

 strcpy(hangxian[7].lastplace,"哈尔滨");
    hangxian[7].number=7;
    hangxian[7].plane_num=112;
    hangxian[7].fly_week=1;
    hangxian[7].saleout=0;
    hangxian[7].left=100;
    hangxian[7].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[7].p->name,"0");
    hangxian[7].p->count=0;
	hangxian[7].p->next=NULL;
    hangxian[7].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[7].Q.tear=hangxian[7].Q.pre;
    strcpy(hangxian[7].Q.pre->name,"0");
    hangxian[7].Q.pre->count=0;
	hangxian[7].Q.pre->next=NULL;

    strcpy(hangxian[8].lastplace,"新疆");
    hangxian[8].number=8;
    hangxian[8].plane_num=112;
    hangxian[8].fly_week=2;
    hangxian[8].left=100;
    hangxian[8].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[8].p->name,"0");
    hangxian[8].p->count=0;
	hangxian[8].p->next=NULL;
    hangxian[8].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[8].Q.tear=hangxian[8].Q.pre;
    strcpy(hangxian[8].Q.pre->name,"0");
    hangxian[8].Q.pre->count=0;
	hangxian[8].Q.pre->next=NULL;

    strcpy(hangxian[9].lastplace,"宁夏");
    hangxian[9].number=9;
    hangxian[9].plane_num=112;
    hangxian[9].fly_week=5;
    hangxian[9].saleout=0;
    hangxian[9].left=100;
    hangxian[9].p=(dkehu *)malloc(sizeof(dkehu));
    strcpy(hangxian[9].p->name,"0");
    hangxian[9].p->count=0;
	hangxian[9].p->next=NULL;
    hangxian[9].Q.pre=(dkehu *)malloc(sizeof(dkehu));
    hangxian[9].Q.tear=hangxian[9].Q.pre;
    strcpy(hangxian[9].Q.pre->name,"0");
    hangxian[9].Q.pre->count=0;
	hangxian[9].Q.pre->next=NULL;
}

//输入终点站代号对对应航班的情况进行查询
void chaxun()
{
	int b;
	cout<<"请输入终点站的代号:";
	cin>>b;
	switch(b)          //对终点站代号进行判断
	{
	case 1:    
		cout<<"航班号是:"<<hangxian[0].number<<endl;
		cout<<"飞机号是:"<<hangxian[0].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[0].fly_week<<endl;
		cout<<"余票是:"<<hangxian[0].left<<endl;
		break;
	case 2:
		cout<<"航班号是:"<<hangxian[1].number<<endl;
		cout<<"飞机号是:"<<hangxian[1].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[1].fly_week<<endl;
		cout<<"余票是:"<<hangxian[1].left<<endl;
		break;
	case 3:
		cout<<"航班号是:"<<hangxian[2].number<<endl;
		cout<<"飞机号是:"<<hangxian[2].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[2].fly_week<<endl;
		cout<<"余票是:"<<hangxian[2].left<<endl;
		break;
	case 4:
		cout<<"航班号是:"<<hangxian[3].number<<endl;
		cout<<"飞机号是:"<<hangxian[3].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[3].fly_week<<endl;
		cout<<"余票是:"<<hangxian[3].left<<endl;
		break;
	case 5:
		cout<<"航班号是:"<<hangxian[4].number<<endl;
		cout<<"飞机号是:"<<hangxian[4].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[4].fly_week<<endl;
		cout<<"余票是:"<<hangxian[4].left<<endl;
		break;
	case 6:
		cout<<"航班号是:"<<hangxian[5].number<<endl;
		cout<<"飞机号是:"<<hangxian[5].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[5].fly_week<<endl;
		cout<<"余票是:"<<hangxian[5].left<<endl;
		break;
	case 7:
		cout<<"航班号是:"<<hangxian[6].number<<endl;
		cout<<"飞机号是:"<<hangxian[6].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[6].fly_week<<endl;
		cout<<"余票是:"<<hangxian[6].left<<endl;
		break;
	case 8:
		cout<<"航班号是:"<<hangxian[7].number<<endl;
		cout<<"飞机号是:"<<hangxian[7].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[7].fly_week<<endl;
		cout<<"余票是:"<<hangxian[7].left<<endl;
		break;
	case 9:
		cout<<"航班号是:"<<hangxian[8].number<<endl;
		cout<<"飞机号是:"<<hangxian[8].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[8].fly_week<<endl;
		cout<<"余票是:"<<hangxian[8].left<<endl;
		break;
	case 10:
		cout<<"航班号是:"<<hangxian[9].number<<endl;
		cout<<"飞机号是:"<<hangxian[9].plane_num<<endl;
		cout<<"飞行日期是:"<<hangxian[9].fly_week<<endl;
		cout<<"余票是:"<<hangxian[9].left<<endl;
		break;
	}
}


//实现定票的函数,如余票能满足客户需求将其插入航班的定票链表中,如不能满足,客户可以选择是否排队侯票,若是则将其插入侯票队列
void dingpiao(int x, int y)
{
    int i,j;
	struct dkehu *t;
	struct dkehu *m;
	char a[20];
	char b[2];
	for(i=0;i<10;i++)                        //找到客户需要的航班
		if(hangxian[i].number==x)break;
	if(y<=hangxian[i].left)                  //判断是否有足够的余票
	{
       cout<<"你的座位号是:";
	   for(j=1;j<=y;j++)
	   cout<<hangxian[i].saleout+j<<"、";    //输出客户的座位号
	   cout<<endl;
       cout<<"请输入你的名字:";
	   cin>>a;
       t=(dkehu *)malloc(sizeof(dkehu));     //动态开辟一个结点存放客户信息
	   strcpy(t->name,a);
	   t->count=y;
	   t->next=hangxian[i].p->next;          
       hangxian[i].p->next=t;                //将此客户插如到定票链表中
	   hangxian[i].saleout=hangxian[i].saleout+y;//卖出的票做相应的改变
	   hangxian[i].left=hangxian[i].left-y;      //剩下的票做相应的改变
	   }
	else              //余票额不能满足客户要求则选择是否侯票
	{
		cout<<"票额不足,是否要排队侯补(y/n)";
	cin>>b;
	 if(strcmp(b,"y")==0)     //选择是插入侯票队列中
	 {
       cout<<"请输入你的名字:";
	   cin>>a;
	   hangxian[i].Q.len++;	   //队列的结点数加一
       m=(dkehu *)malloc(sizeof(dkehu));  //动态开辟一个客户结点
       strcpy(m->name,a);
	   m->count=y;           //存入客户信息
	   m->next=NULL;
       hangxian[i].Q.tear->next=m;
       hangxian[i].Q.tear=m;    //在队列尾部插入此客户
	 }
	}
}


//实现退票的函数
void tuipiao()
{
	char e[20];
	int f;
    int i,x,y;
	struct dkehu *t,*q;
	struct dkehu *s,*r;
	cout<<"请输入日期、航班、姓名、票额:";    //退票客户输入信息
	cin>>x;
	cin>>y;
	cin>>e;
	cin>>f;

	for(i=0;i<10;i++)            //找到相应的航班
		if(hangxian[i].fly_week==x && hangxian[i].number==y)break;
    t=hangxian[i].p;             //t指向此航班定票客户链表的头结点

	while(strcmp(t->next->name,e)!=0 && t->next!=NULL)    //找到要退票客户的结点
		t=t->next;
	q=t->next;                   //指向要退票客户的结点
	while (f > q -> count)       //判断要退的票额是否比所定的票额多
	{
		cout << "你的票额不足,请重新输入:" << endl;   //若不能满足从新输入
       	cout<<"请输入日期、航班、姓名、票额:" << endl;
	cin>>x;
	cin>>y;
	cin>>e;
	cin>>f;
	}
    q->count=q->count-f;         //退票后客户所剩的票数
	if(q->count==0)              //判断是否全额退票,是删除该结点
	{
	t->next=t->next->next;       //将此结点从链表中删除
	free(q);                     //释放此结点的空间
	}
    cout<<"退票成功!"<<endl;
    s=hangxian[i].Q.pre;         //指向侯票队列的头结点
	hangxian[i].left=f+hangxian[i].left;
    hangxian[i].saleout=hangxian[i].saleout-f;
    while(hangxian[i].left>0 && s->next!=NULL)                   //询问侯票队列看是否能满足
	{
		if(s->next==NULL)break;
         if(s->next->count<=hangxian[i].left)           //判断余票额是否能满足侯票队列客户的要求
		 {
	         hangxian[i].left=hangxian[i].left-s->next->count;
             hangxian[i].saleout=hangxian[i].saleout+s->next->count;  //若满足余票额和定票额做相应的改变
			 cout<<"侯票队列中的"<<s->next->name<<"已定票"<<s->next->count<<"张"<<endl;  //输出候补队列中客户的定票信息
			 r=s->next;     //指向候补队列中满足要求的结点
             s->next=s->next->next;   //将此结点删除
			 r->next=hangxian[i].p->next;
             hangxian[i].p->next=r;    //将此结点插入到定票链表中
		 }
		 else 
			 s=s->next;          //若不满足指向下一个结点
	}
}



void main()
{
	int a;
	int i,j;
    init();
	cout<<"              欢迎来到机场"<<endl;
	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<<"9.新疆"<<endl;
	cout<<"10.宁夏"<<endl;
	while(1)
	{
	cout<<"航线查询请按11,定票请按22,退票请按33:"<<endl;
    cin>>a;
	switch(a)
	{
	case 11:
		chaxun();
		break;
	case 22:
        cout<<"请输入航班号及定票数额:";
        cin>>i;
		cin>>j;
		dingpiao(i,j);
		break;
    case 33:
		tuipiao();
		break;
	}
	}
}









⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -