C语言实现简单的航空订票、退票系统
代码可以直接复制粘贴即可使用,本文借鉴于这篇文章航空客运订票系统(数据结构课设)_Czc超的博客-CSDN博客_航空客运订票系统数据结构
做了一些改动,将这个项目的实现变得更简单了一点
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define FALSE -1
#define TRUE 1
typedef int Status;
//已订票乘客的线性链表
typedef struct CustomerNode {
char name[10];//乘客姓名
char identification[20];//乘客身份证号码
int seat;//乘客座位号
CustomerNode *next;
}CustomerNode, *CusLinkList;
//排队的客户的链队列
typedef struct WaitPassenger {
char name[10];//排队等候的客户的姓名
char identification[20];//乘客身份证号码
struct WaitPassenger *next;
} WaitQNode, *PWait;
typedef struct Queue {
PWait front;//等候客户名单域的头指针
PWait rear;//等候客户名单域的尾指针
} LinkQueue;
//航班的线性链表
typedef struct Flight {
char startPoint[20];//起点站名
char destination[20];//终点站名
char flightCodeID[20];//航班ID(相当于主键)
char planeNum[20];//飞机号
char day[20];//飞行日期(星期几)
int totalTickets;//乘员定额(总票数)
int left;//总余票量
CusLinkList cusLinkList;//已订票的客户名单
LinkQueue waitQueue1;//预约登记的客户名单
Flight *next;
} Flight, FlightNode, *PFlight;
//声明函数
Flight *find();
Status InitQueue(LinkQueue &q);
Status InitCusLinkList(CusLinkList &cusLinkList);
int MenuSelect();
void BookTickets();
void ReturnTicket();
void BookticketFace();
void ReturnTicketsFace();
void PrintFilghtlist(Flight *flight);
Status Create(PFlight flight1);
void InitFlight();
CusLinkList insertlink(CusLinkList &head, char name[], char identification[], int seat);
LinkQueue Appendqueue(LinkQueue &q, char name[], char identification[]);
Flight *pFlight;//全局变量
//目前的航班
Flight flight1[6] = {
{"广州", "北京", "1", "B3333", "星期一", 10, 10},
{"广州", "北京", "2", "D5555", "星期二", 8, 8},
{"广州", "北京", "3", "L6666", "星期天", 10, 10},
{"上海", "广州", "4", "K9999", "星期三", 8, 8},
{"广州", "成都", "5", "K7777", "星期三", 10, 10},
{"成都", "广州", "6", "K8888", "星期三", 8, 8}
};
//查询航班时输出航班信息
void PrintFilghtlist(Flight *pflight) {
system("cls");//清屏操作
Flight *p;
p = pflight->next;//p指向第一个结点
//遍历输出
while (p != NULL) {
printf("起点站名:%s\n终点站名:%s\n航班ID:%s\n飞机号:%s\n飞行日期:%s\n乘员定额:%d\n余票量:%d\n\n",p->startPoint, p->destination, p->flightCodeID,p->planeNum, p->day,p->totalTickets, p->left);
p = p->next;
}
printf("\n");
}
//寻找符合客户查找的航班并返回结点的函数
Flight *find() {
char number[10];
printf("请输入航班ID: ");
scanf("%s", number);
//从第一个结点开始遍历
Flight *p = pFlight->next;
while (p != NULL) {
if (!strcmp(number, p->flightCodeID))
return p;
p = p->next;
}
return NULL;
}
//订票函数
void BookTickets() {
system("cls");
PrintFilghtlist(pFlight);
struct Flight *info;
int tickets;
char name[10];
char identification[20];
int loop1;
loop1:
{
info = find();
};
if (info == NULL){
printf("没有这个航班, 请重新输入\n");
goto loop1;
}
int loop2;
loop2:
{ printf("您订票的数量:1\n ");
};
tickets = info->left;
if (1 <= tickets) {
int i;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身份证号码:");
scanf("%s", identification);
CusLinkList head = info->cusLinkList;
//订票成功,插入成员名单链表
insertlink(head, name, identification, info->totalTickets - info->left + 1);
printf("%s 的座位号是: %d\n", name, info->totalTickets - info->left + 1);
info->left -=1;
printf("\n祝您旅途愉快!欢迎再次光临\n");
} else
loop0:
{
char r;
printf("该航班的票不足,订票失败,是否需要重新选择航班(Y/N)\n");
r = getch();
printf("%c", r);
if (r == 'Y' || r == 'y') {//改变计划,重新选择航班
BookTickets();
} else {
printf("\n您是否需要排队等候(Y/N)");
r = getch();
printf("%c", r);
if (r == 'Y' || r == 'y') {//不改变计划,排队候票
printf("\n请输入您的姓名(排队订票客户):");
scanf("%s", name);
printf("\n请输入您的身份证(排队订票客户):");
scanf("%s", identification);
info->waitQueue1 = Appendqueue(info->waitQueue1, name, identification);
printf("\n排队成功!\n");
} else {
printf("\n欢迎您下次再次订购!\n");
}
}
}
}
void BookticketFace() {
system("cls");
int a3;
printf("\n");
printf("\n");
printf("订票模块\n");
printf("1.客户订票\n");
printf("2.返回上一级菜单\n");
printf("请输入您的选择:");
scanf("%d", &a3);
switch (a3) {
case 1:
PrintFilghtlist(pFlight);
BookTickets();
system("PAUSE");
BookticketFace();
break;
case 2:
system("cls");
MenuSelect();
break;
}
}
void ReturnTicketsFace() {
int a3;
system("cls");
printf("\n");
printf("\n");
printf(" 退票模块\n");
printf(" 1.办理退票手续 \n");
printf(" 2.返回上一级菜单 \n");
printf("请输入您的选择:");
scanf("%d", &a3);
switch (a3) {
case 1:
ReturnTicket();
system("PAUSE");
ReturnTicketsFace();
break;
case 2:
MenuSelect();
break;
default:
ReturnTicketsFace();
}
}
void ReturnTicket() {
system("cls");
PrintFilghtlist(pFlight);
struct Flight *info;
int rank;
//p1为遍历指针,p2为辅助指针,指向p1的前驱
CustomerNode *p1, *p2, *head;
//客户姓名
char cusname[10];
//客户身份证
char identification[20];
//info指针,find函数根据航班ID返回该航班节点的指针
int loop;
loop:
{
info = find();
};
if (info == NULL){
printf("没有这个航班, 请重新输入\n");
goto loop;
}
//head为该航班的的乘员名单域的头指针
head = info->cusLinkList;
//带头结点的指针,从head->next开始遍历
p1 = head->next;
printf("请输入你的姓名: ");
scanf("%s", cusname);
printf("请输入你的身份证号码: ");
scanf("%s", identification);
p2 = head;
//根据客户姓名搜索客户是否订票
while (p1 != NULL) {
if ((strcmp(cusname, p1->name) == 0) && (strcmp(identification, p1->identification) == 0)) break;
p2 = p1;
p1 = p1->next;
}
//没有该客户
if (p1 == NULL) {
printf("对不起,您没有订过票或姓名和身份证不对应!\n");
return;
} else {//退票成功
//从乘客名单域中移除该节点
p2->next = p1->next;
//加回该航班的剩余票
info->left += 1;
printf("%s成功退票!\n", p1->name);
free(p1);//释放该节点
}
}
int MenuSelect(){
int select;
Status status;
flag:
{
system("cls");
printf("欢迎来到航空订票系统\n");
printf("1.查询模块\n");
printf("2.订票模块\n");
printf("3.退票模块\n");
printf("请输入(1-3)否则无效! 请输入您的选择:");
scanf("%d", &select);
}
switch (select){
case 1:
//进入查询模块
PrintFilghtlist(pFlight);
system("PAUSE");
MenuSelect();
break;
case 2:
//进入订票模块
BookticketFace();
system("PAUSE");
MenuSelect();
break;
case 3:
//进入退票模块
ReturnTicketsFace();
system("PAUSE");
MenuSelect();
break;
}
}
CusLinkList insertlink(CusLinkList &head,char name[], char identification[], int seat) {
//成员名单域新节点new1
CusLinkList new1;
new1 = (CustomerNode *) malloc(sizeof(CustomerNode));
if (new1 == NULL) {
printf("\n内存不足\n");
return NULL;
}
//将传入乘客信息赋值给new1节点
strcpy(new1->name, name);
strcpy(new1->identification, identification);
new1->seat=seat;
//头插入法加入成员名单域
new1->next = head->next;
head->next = new1;
return head;
}
LinkQueue Appendqueue(LinkQueue &q, char name[], char identification[]) {
PWait new1;
new1 = (PWait) malloc(sizeof(WaitQNode));
strcpy(new1->name, name);
strcpy(new1->identification, identification);
new1->next = NULL;
q.rear->next = new1;
q.rear = new1;
return q;
}
void InitFlight() {
pFlight = (Flight *) malloc(sizeof(Flight));//申请头结点的空间
if (pFlight == NULL) exit(0);
pFlight->next = NULL;//将头结点h的指针域置为空
}
Status Create(PFlight flight1) {
Flight *p = pFlight, *q;
for (int i=0; i < 6; i++) {
q = (Flight *) malloc(sizeof(Flight));
if (q == NULL)
return ERROR;
strcpy(q->startPoint, flight1[i].startPoint);
strcpy(q->destination, flight1[i].destination);
strcpy(q->flightCodeID, flight1[i].flightCodeID);
strcpy(q->planeNum, flight1[i].planeNum);
strcpy(q->day, flight1[i].day);
q->totalTickets = flight1[i].totalTickets;
q->left = flight1[i].left;
//初始化乘客链表
InitCusLinkList(q->cusLinkList);
//初始化等待客户链队列
InitQueue(q->waitQueue1);
q->next = p->next;
p->next = q;
}
return OK;
}
Status InitCusLinkList(CusLinkList &cusLinkList) {
CusLinkList q = cusLinkList;
cusLinkList = (CustomerNode *) malloc(sizeof(CustomerNode));
cusLinkList->next = NULL;
}
Status InitQueue(LinkQueue &q) {
WaitQNode *p;
p = (WaitQNode *) malloc(sizeof(WaitQNode));
if (p == NULL) {
printf("内存不足\n");
return ERROR;
}
p->next = NULL;
q.front = q.rear = p;
return OK;
}
int main(){
InitFlight();
Create(flight1);
MenuSelect();
}
实现后的效果如图所示
C语言实现简单的航空订票、退票系统相关推荐
- Android应用源码航空订票软件客户端
Android应用源码航空订票软件客户端 功能分类:其他 支持平台:Android 运行环境:Android 开发语言:Java 开发工具:Eclipse 源码大小:1.76MB 下载地址:http: ...
- c语言航班订票管理系统源代码,简易C语言航空订票系统
代码片段和文件信息 属性 大小 日期 时间 名称 ----------- --------- ---------- ----- ---- 目录 ...
- 东北大学20级计算机C语言课设-航空订票系统
航空订票系统 开发人员:东北大学20级计算机系学生 开发团队:三人小组 开发语言:C语言 开发工具:vs2015 有疑问欢迎进行讨论 总代码数量大概在三千五百行左右 耗时近一个月的时间完成了该次课设, ...
- C语言课设 航空订票系统
大一写的时候没有写注释,后来也懒得加了.在这里说一下读写文件的思路吧. 就是利用二进制将一整个结构体中的数据存入文件,然后读取文件时再用二进制的形式将结构体中的数据读取出来,边读取边创建链表,将结构体 ...
- 基于微服务技术的全球航空订票平台
摘要 随着互联网技术不断地发展,网络成为了人们生活的一部分,而全球航空订票平台作为网上应用的一个全新的体现,由于其特有的便捷性,已经被人们所接受.目前主流的全球航空订票平台服务不仅不明确并且管理员盈利 ...
- cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计
VC++航空订票系统数据库设计 目录 一 绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...
- 航空订票系统界面java_Java命令行界面(第21部分):航空公司2
航空订票系统界面java 本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个J ...
- 精品基于java开发的航空订票系统SSM
<基于java开发的航空订票系统>该项目含有源码.论文等资料.配套开发软件.软件安装教程.项目发布教程等 使用技术: 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1. ...
- 基于JAVA Web的航空订票系统
基于JAVA Web的航空订票系统 开发语言:JSP,JAVAweb 开发平台:eclipse; 数据库:MYSQL: 系统分为前台和后端: 前台界面图: 登录界面: 主界面图: 后端界面 登录: 后 ...
最新文章
- leecode第二十题(有效的括号)
- POJ 3761:Bubble Sort——组合数学
- 10.QT事件机制源码时序分析(中)
- Inside Linux kernel
- opensuse download
- 巨头纷纷看上的中国Robobus又获1亿美元投资
- Spring与Struts2整合的两种解决方案
- 2021中国餐饮营销力白皮书
- 技术实践丨列存表并发更新时的锁等待问题原理
- jsp文件创建后自动设置其pageEncoding的属性值为UTF-8
- php mysql占位符_php中的占位符
- 发电厂计算机控制系统,火电厂dcs控制系统
- 2022年计算机二级Web程序设计复习题及答案
- SpringBoot集成海康威视Linux版本
- h3c 抓包么 能通过debug_H3C debugging 使用技巧
- 使用UE4开发VR项目_性能优化(三)_思路和方法
- 租车新玩法 神州租车打造行业标杆
- cdc有哪些rapper_获谢帝推荐,合作Higher Brothers,CDC的rapper里竟还藏着这样一位狠角色...
- ec11编码器c语言程序,旋转编码器 关于EC11计数的程序 - 下载 - 搜珍网
- 多变量可视化——QGIS二元分区着色图
热门文章
- 联想电脑G40无法使用 非要睡眠后才能启用wifi
- SpringCloud Alibaba 实战之《配置中心:基于 Nacos 集中管理应用配置》
- 51单片机之蜂鸣器弹钢琴
- UI 标注工具MarkMan的测量像素使用
- TCP/IP协议簇中的子网掩码有什么作用
- facenet 人脸识别原理理解(三)
- 15.真实感图形——光照与明暗+光线跟踪+纹理映射+辐射度方法+阴影
- Java中创建对象有哪几种方式,Java 中创建对象的4种方式--Java学习网
- Outline浏览加速-实操分享今日随笔
- Go语言实现Onvif客户端:9、预置点删改查及跳转