在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例常规C/C++编程 → c++航空机票订票系统源码

c++航空机票订票系统源码

常规C/C++编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:8.99KB
  • 下载次数:38
  • 浏览次数:373
  • 发布时间:2019-10-12
  • 实例类别:常规C/C++编程
  • 发 布 人:jina
  • 文件格式:.cpp
  • 所需积分:2
 相关标签: 航空机票订票系统

实例介绍

【实例简介】一、设计任务与要求
1. 设计任务
1)录入:可以录入航班情况(数据存储在一个数据文件中)
2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
3)订票:(订票情况存在一个数据文件中)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
4)退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息:当航班信息改变可以修改航班数据文件

实验要求
系统:1.可以录入航班,修改航班信息
2.乘客按条件查询航班时,系统显示航班信息
      3.乘客订票时,让乘客选择查询航班方式,并显示乘客所需航班的信息
      4.乘客订票时要求乘客输入并保存乘客的相关信息,如果订票失败,显示其他方案
      5.乘客退票,系统修改相应航班信息
乘客:1.查询
      2.订票

      3.退票

【实例截图】

from clipboard

【核心代码】



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h> 
#include <iostream> 
#define MAXSIZE 5         /*定义航线数量,可修改*/
typedef struct wat_ros    /*单链队列存储等候替补的客户信息*/
{
	char name[10];        /*姓名*/
	int req_amt;          /*订票量*/
	struct wat_ros *next;
}qnode, *qptr;
typedef struct pqueue    /*等候替补的客户名单*/
{
	qptr front;          /*等候替补客户名单域的队头指针*/
	qptr rear;           /*等候替补客户名单域的队尾指针*/
}linkqueue;
typedef struct ord_ros   /*乘员名单*/
{
	char name[10];       /*客户姓名*/
	int ord_amt;           /*订票量*/
	int grade;              /*舱位等级*/
	struct ord_ros *next;
}linklist;
struct airline
{
	char ter_name[10];   /*抵达城市*/
	char air_num[10];    /*航班号*/
	char time[10];       /*飞机时间*/
	char pri[7];         /*票价*/
	int tkt_amt;         /*乘员定额*/
	int tkt_sur;         /*余票量*/
	linklist *order;     /*乘员名单域,指向乘员名单链表的头指针*/
	linkqueue wait;      /*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/
}lineinfo;
struct airline *start;
void display(struct airline *info)   /*打印每条航线的基本信息*/
{
	printf("%8s\t%3s\t%s\t\t%4s\t%3d\t%10d\n", info->ter_name, info->air_num, info->time, info->pri, info->tkt_amt, info->tkt_sur);
}
void list()           /*打印全部航线信息*/
{
	struct airline *info;
	int i = 0;
	info = start;
	printf("终点站名\t航班号\t飞行时间\t票价\t乘员定额\t余票量\n");
	while (i<MAXSIZE)
	{
		display(info);   /*调用display函数来输出*/
		info  ;
		i  ;
	}
	printf("\n\n");
}
void search()            /*根据客户提出的终点站名输出航线信息*/
{
	struct airline *info, *find();
	char name[10];       /*要抵达的城市名称*/
	int i = 0;
	info = start;
	printf("请输入要抵达城市的名称:");
	scanf("%s", name);
	while (i<MAXSIZE)
	{
		if (!strcmp(name, info->ter_name))  /*有该站名strcmp则返回,if(!0)即break*/
		{
			break;
		}
		info  ;
		i  ;
	}
	if (i >= MAXSIZE)        /*没有匹配的航线*/
	{
		printf("对不起,没有这条航线!\n");
	}
	else
	{
		printf("终点站名\t航班号\t飞行时间\t票价\t乘员定额\t余票量\n");
		display(info);     /*调用display函数输出航线信息*/
	}
}
struct airline *find()     /*根据系统提出的航班号查询并以指针形式返回*/
{
	struct airline *info;
	char number[10];       /*查询的航班号*/
	int i = 0;
	info = start;
	printf("请输入航班号:");
	scanf("%s", number);
	while (i<MAXSIZE)
	{
		if (!strcmp(number, info->air_num))   /*有匹配航班*/
		{
			return info;
		}
		info  ;
		i  ;
	}                                       /*无匹配航班*/
	printf("对不起,没有这条航线!\n");
	return NULL;
}
void prtlink()      /*打印订票乘员名单域的客户名单信息*/
{
	linklist *p;
	struct airline *info;
	info = find();
	p = info->order;
		if (p != NULL)     /*按顺序输出客户信息链表*/
		{
			printf("客户姓名  订票数额  舱位等级\n");
			while (p)
			{
				printf("%s\t\t%d\t%d\n", p->name, p->ord_amt, p->grade);
				p = p->next;
			}
		}
		else            /*没有人订这个航班*/
			printf("该航线没有客户信息!\n");
}
linklist *insertlink(linklist *head, int amount, char name[], int grade)   /*增加订票乘员名单域的客户信息*/
{
	linklist *p1, *new1;
	p1 = head;
	new1 = (linklist*)malloc(sizeof(linklist));
	if (!new1)                  /*存储空间不足*/
	{
		printf("\nOut of memory!!\n");
		return NULL;
	}
	strcpy(new1->name, name);
	new1->ord_amt = amount;
	new1->grade = grade;
	new1->next = NULL;
	if (head == NULL)           /*若原订票客户信息为空*/
	{
			head = new1;
			new1->next = NULL;
	}
	else
	{
		head = new1;
	}
	new1->next = p1;
	return head;
	}
linkqueue appendqueue(linkqueue q, char name[], int amount)   /*增加排队等候的客户名单域*/
{
	qptr new1;
	new1 = (qptr)malloc(sizeof(qnode));
	strcpy(new1->name, name);
	new1->req_amt = amount;
	new1->next = NULL;
	if (q.front == NULL)       /*若原排队等候客户名单域为空*/
	{
		q.front = new1;
	}
	else
	{
		q.rear->next = new1;
	}
	q.rear = new1;
	return q;
}
void order()                /*办理订票业务*/
{
	struct airline *info;
	int amount, grade;       /*订票数量,舱位等级*/
	char name[10];          /*要订的航班号*/
	info = start;
	if (!(info = find()))      /*根据客户提供的航班号进行查询,如为空,退出该模块*/
	{
		return;
	}
	printf("请输入您需要的票数:");
	scanf("%d", &amount);
	if (amount>info->tkt_amt)             /*若客户订票额超过乘员定票总额,退出*/
	{
		printf("\n对不起,您输入票数已经超过乘员定额!");
			return;
	}
	if (amount <= info->tkt_sur)            /*若客户订票额末超过余票量,订票成功并等记信息*/
	{
			int i;
			printf("请输入您的姓名:");
			scanf("%s", name);
			printf("请输入您需要的舱位等级(1,2或3):");
			scanf("%d", &grade);
			info->order = insertlink(info->order, amount, name, grade);    /*在订票乘员名单域中添加客户信息*/
			for (i = 0; i < amount; i  )           /*依次输出该订票客户的座位号*/
			{
				printf("%s的座位号是:%d\n", name, info->tkt_amt - info->tkt_sur   i   1);
			}
			info->tkt_sur -= amount;         /*该航线的余票量应减掉该客户的订票量*/
			printf("\n祝您乘坐愉快!\n");
		
	}
	else                                  /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/
	{
		char r;
		printf("\n没有这么多票了,您需要排队等候吗?(Y/N)");
		r = getch();
		printf("%c", r);
		if (r == 'Y' || r == 'y')
		{
			printf("\n请输入您的姓名:");
			scanf("%s", name);
			info->wait = appendqueue(info->wait, name, amount); /*在排队等候乘员名单域中添加客户信息*/
			printf("\n注册排队成功!\n");
		}
		else
		{
			printf("\n欢迎您再次订购!\n");
		}
	}
}
void return_tkt()            /*退票模块*/
{
	struct airline *info;
	qnode *t, *back, *f, *r;
	int grade;
	linklist *p1, *p2, *head;
	char cusname[10];
	if (!(info = find()))       /*调用查询函数,根据客户提供的航线进行搜索*/
	{
		return;
	}
	head = info->order;
	p1 = head;
	printf("请输入你的姓名:");
	scanf("%s", cusname);
	while (p1 != NULL)          /*根据客户提供的姓名到订票客户名单域进行查询*/
	{
		if (!strcmp(cusname, p1->name))
		{
			break;
		}
		p2 = p1;
		p1 = p1->next;
	}
	if (p1 == NULL)             /*若未找到,退出本模块*/
	{
		printf("对不起,您没有订过票!\n");
		return;
	}
	else                     /*若信息查询成功,删除订票客户名单域中的信息*/
	{
		if (p1 == head)
		{
			head = p1->next;
		}
		else
		{
			p2->next = p1->next;
		}
		info->tkt_sur  = p1->ord_amt;
		grade = p1->grade;
		printf("%s退票成功!\n", p1->name);
		free(p1);
	}
	info->order = head;       /*重新将航线名单域指向订票单链表的头指针*/
	f = (info->wait).front;   /*f指向排队等候名单队列的头结点*/
	r = (info->wait).rear;    /*r指向排队等候名单队列的尾结点*/
	t = f;                    /*t为当前满足条件的排队候补名单域*/
	while (t)
	{
		if (info->tkt_sur >= info->wait.front->req_amt)      /*若满足条件者为头结点*/
		{
			int i;
			info->wait.front = t->next;
			printf("%s订票成功!\n", t->name);
			for (i = 0; i<t->req_amt; i  )
				/*输出座位号*/
			{
				printf("%s的座位号是:%d\n", t->name, (info->tkt_sur) - i);
			}
			info->tkt_sur -= t->req_amt;
			info->order = insertlink(info->order, t->req_amt, t->name, grade);/*插入到订票客户名单链表中*/
			free(t);
			break;
		}
		back = t;
		t = t->next;
		if ((info->tkt_sur) >= (t->req_amt) && t != NULL)/*若满足条件者不为头结点*/
		{
			int i;
			back->next = t->next;
			printf("%s订票成功!\n", t->name);
			for (i = 0; i<t->req_amt; i  )             /*输出座位号*/
			{
				printf("<%s>'s seat number is:%d\n", t->name, (info->tkt_sur) - i);
			}
			info->tkt_sur -= t->req_amt;
			info->order = insertlink(info->order, t->req_amt, t->name, grade);/*插入到订票客户名单链表中*/
			free(t); break;
			
		}
		if (f == r)
		{
			break;
		}
	}
}
int menu_select()           /*菜单界面*/
{
	int c;
	char s[20];
	printf("\t订票系统\n");
	printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	printf("1.查看航线信息\n");
	printf("2.查看已订票客户信息\n");
	printf("3.查询航线\n");
	printf("4.办理订票业务\n");
	printf("5.办理退票业务\n");
	printf("6.退出系统\n");
	printf("~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	do
	{
		printf("请选择(1-6):");
		scanf("%s", s);
		c = atoi(s);
	} while (c<1 || c>6);
	return c;
}
int main()
{
	struct airline air[MAXSIZE] =       /*初始化航线信息*/
	{
		{ "beijing","1","1200","860",30,30 },
	{ "shanghai","2","1000","770",20,20 },
	{ "london","3","1330","960",10,10 },
	{ "harbin","4","1700","760",50,50 },
	{ "dalian","5","1400","550",40,40 }
	};
	start = air;
	for (;;)                            /*无限循环(除非用户选择.退出)*/
	{
		system("cls");                 /*清空屏幕*/
		switch (menu_select())
		{
		case 1:list();             /*打印全部航线信息*/
			break;
		case 2:prtlink();          /*浏览已订票客户信息*/
			break;
		case 3:search();           /*查询航线*/
			break;
		case 4:order();            /*订票*/
			break;
		case 5:return_tkt();       /*退票*/
			break;
		case 6:printf("\n感谢您的使用,再见!\n");  /*退出系统*/
			exit(0);               /*正常退出程序*/
		}
		printf("\n任意键继续...\n");
		getch();                       /*任意键继续*/
		return 0;
	}
}


实例下载地址

c++航空机票订票系统源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警