📄 订票系统.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define null 0
typedef struct node
{
char start[20],termini[20],number[10];
int price,maxtickets,startyear,startmonth,startday,starthour,startminute,arriveyear,arrivemonth,arriveday,arrivehour,arriveminute;
float discount;
struct node *next;
}flight;//定义航班结构体,包含起始地,航班编号,票价,起降时间,折扣
typedef struct node1
{
char name[20],id[20],flightnum[20];
int count,NO;
struct node1 *next;
}passenger;//定义客户结构体,包含姓名,证件号码,以及预定的航班编号
flight *input()//录入航班信息的子函数
{
flight *h,*p,*t;
int choice;
h=(flight*)malloc(sizeof(flight));
h->next=null;
t=h;
do
{
p=(flight*)malloc(sizeof(flight));
printf("请输入航班编号:");
fflush(stdin);
gets(p->number);
printf("请输入该航班起飞时间:");
fflush(stdin);
printf(" 年 月 日 时 分\n");
scanf("%d %d %d %d %d",&p->startyear,&p->startmonth,&p->startday,&p->starthour,&p->startminute);
printf("请输入该航班抵达时间:");
fflush(stdin);
printf(" 年 月 日 时 分\n");
scanf("%d %d %d %d %d",&p->arriveyear,&p->arrivemonth,&p->arriveday,&p->arrivehour,&p->arriveminute);
printf("请输入出发城市:");
fflush(stdin);
gets(p->start);
printf("请输入抵达城市:");
fflush(stdin);
gets(p->termini);
printf("请输入该航班原始票价:");
fflush(stdin);
scanf("%d",&p->price);
printf("该票价的折扣为X折:\n");
fflush(stdin);
scanf("%f",&p->discount);
printf("请输入票数:");
fflush(stdin);
scanf("%d",&p->maxtickets);
p->next=null;
t->next=p;
t=p;
printf("继续录入另一航班信息? 1.是 2.否");
fflush(stdin);
scanf("%d",&choice);
}
while(choice==1);
return(h);
}
void inquire(flight *h)//查询航班信息的子函数
{
int choice,c,flag=0;
int k;
float g,v;
flight *p;
p=h->next;
char temp[20],t[20];
do
{
printf("请选择查询方式:\n1.按航班号 2.按起飞城市和按抵达城市\n");
fflush(stdin);
scanf("%d",&choice);
switch(choice)
{
case 1:printf("请输入要查询的航班号:");
fflush(stdin);
gets(temp);
while(p!=null)
{
if(strcmp(p->number,temp)==0)
break;//若输入的航班编号与航班单链表中的航班编号匹配,则找到,退出循环
p=p->next;
}
if(p==null)
printf("未找到您想查询的航班!\n");
else
{
printf("%s号航班信息如下:\n",p->number);
printf("起飞时间为:%d年%d月%d日%d时%d分\n",p->startyear,p->startmonth,p->startday,p->starthour,p->startminute);
printf("抵达时间为:%d年%d月%d日%d时%d分\n",p->arriveyear,p->arrivemonth,p->arriveday,p->arrivehour,p->arriveminute);
printf("起飞城市为:%s\n",p->start);
printf("抵达城市为:%s\n",p->termini);
k=p->price;
g=p->discount;
v=k*g*0.1;
printf("原始票价为%d元,打%.1f折,折后价为%.1f元。\n",p->price,p->discount,v);
printf("可出售票%d张\n",p->maxtickets);//输出找到的航班信息
}break;
case 2:printf("请输入起飞城市:");
fflush(stdin);
gets(temp);
printf("请输入抵达城市:");
fflush(stdin);
gets(t);
while(p!=null)
{
if((strcmp(p->start,temp)==0)&&(strcmp(p->termini,t)==0))//若输入的起始地与航班单链表中的航班信息匹配,则找到,退出循环
{
printf("起飞城市为%s,抵达时间为%s的航班信息如下\n",p->start,p->termini);
printf("航班号为:%s\n",p->number);
printf("起飞时间为:%d年%d月%d日%d时%d分\n",p->startyear,p->startmonth,p->startday,p->starthour,p->startminute);
printf("抵达时间为:%d年%d月%d日%d时%d分\n",p->arriveyear,p->arrivemonth,p->arriveday,p->arrivehour,p->arriveminute);
printf("原始票价为%d元,打%.1f折,折后价为%.1f\n",p->price,p->discount,v);
printf("可出售票%d张\n\n",p->maxtickets);
flag=1;//找到航班,变更标记值
}
p=p->next;
}
if((p==null)&&(flag==0))//找到链表尾并且未找到想查找的航班
printf("未找到您想查询的航班!\n");break;
}
printf("是否继续查询?1.是 2.否");
fflush(stdin);
scanf("%d",&c);
if(c==1)
p=h->next;
printf("\n");
}
while(c==1);
}
passenger *book(flight *f)//订票的子函数
{
passenger *h,*p,*t;
int i=1,choice,choice1;
int a;
float b,c;
flight *q,*g,*k;
q=f->next;
g=f->next;
k=f->next;
char temp[20];
h=(passenger*)malloc(sizeof(passenger));
h->next=null;
t=h;
do
{
printf("请输入您要预定的航班号:");
fflush(stdin);
gets(temp);
while(q!=null)
{
if(strcmp(q->number,temp)==0)//判断是否有客户想预定的航班
break;
q=q->next;
}
if(q==null)
printf("没有找到与此匹配的航班!\n");
else if(q->maxtickets<=0)//判断改航班是否满仓
{
printf("很抱歉,该航班的票子已售完\n");
}
else//订票
{
printf("%s号航班信息如下:\n",q->number);
printf("起飞时间为:%d年%d月%d日%d时%d分\n",q->startyear,q->startmonth,q->startday,q->starthour,q->startminute);
printf("抵达时间为:%d年%d月%d日%d时%d分\n",q->arriveyear,q->arrivemonth,q->arriveday,q->arrivehour,q->arriveminute);
printf("起飞城市为:%s\n",q->start);
printf("抵达城市为:%s\n",q->termini);
a=q->price;
b=q->discount;
c=a*b*0.1;
printf("票价为%d元,打%.1f折,折后价为%.1f\n",q->price,q->discount,c);
printf("最多可预定%d张\n",q->maxtickets);
p=(passenger*)malloc(sizeof(passenger));
strcpy(p->flightnum,q->number);
printf("您要预定几张机票?");
fflush(stdin);
scanf("%d",&p->count);
printf("请输入您的姓名:");
fflush(stdin);
gets(p->name);
printf("请输入您的证件号码:");
fflush(stdin);
gets(p->id);
printf("操作成功!\n");
p->NO=i;
printf("您预定了%d张%s号航班的机票,订单编号为%d号\n",p->count,q->number,p->NO);
q->maxtickets-=p->count;
p->next=null;
t->next=p;
t=p;
}
printf("是否还需预定其它航班的机票? 1.是 2.否");
fflush(stdin);
scanf("%d",&choice);
i++;
}
while(choice==1);
return(h);
}
void returnticket(flight *f,passenger *p)//退票的子函数
{
passenger *t;
flight *q;
char tempname[20],tempid[20];
int tempcount,tempno,choice;
do
{
t=p->next;
q=f->next;
printf("请输入您的订单编号:");
fflush(stdin);
scanf("%d",&tempno);
printf("请输入您的姓名:");
fflush(stdin);
gets(tempname);
printf("请输入您的证件号码:");
fflush(stdin);
gets(tempid);
while(t!=null)
{
if((t->NO==tempno)&&(strcmp(t->name,tempname)==0)&&(strcmp(t->id,tempid)==0))//判断客户是否已订票
break;
t=t->next;
}
if(t==null)
printf("您还未预定机票!\n");
else
{
while(f!=null)
{
if(strcmp(f->number,t->flightnum)==0)
break;
f=f->next;
}
}
printf("您预定了%d张%s号航班的机票。",t->count,t->flightnum);
printf("请输入您要退订的机票数:");
fflush(stdin);
scanf("%d",&tempcount);
t->count-=tempcount;
f->maxtickets+=tempcount;
printf("操作成功!\n您退订了%d张%s号航班的机票。\n",tempcount,t->flightnum);
printf("是否继续退票? 1.是 2.否\n");
scanf("%d",&choice);
}
while(choice==1);
}
void edit(flight *h)//修改航班信息的子函数
{
char tnumber[20];
int choice,choice1;
flight *p;
do
{
p=h->next;
printf("请输入要修改的航班号:");
fflush(stdin);
gets(tnumber);
while(p!=null)
{
if(strcmp(p->number,tnumber)==0)//判断是否有改航班
break;
p=p->next;
}
if(p==null)
printf("无此航班!\n");
else
{
printf("请选择要修改的航班信息:\n1.起飞时间 2.抵达时间 3.起飞城市 4.抵达城市 5.票价 6.折扣 7.票数\n");
fflush(stdin);
scanf("%d",&choice);
switch(choice)
{
case 1:printf("请输入起飞时间:");
fflush(stdin);
scanf("%d %d %d %d %d",&p->startyear,&p->startmonth,&p->startday,&p->starthour,&p->startminute);
printf("起飞时间修改为:%d年%d月%d日%d时%d分\n",p->startyear,p->startmonth,p->startday,p->starthour,p->startminute);break;
case 2:printf("请输入到达时间:");
fflush(stdin);
scanf("%d %d %d %d %d",&p->arriveyear,&p->arrivemonth,&p->arriveday,&p->arrivehour,&p->arriveminute);
printf("抵达时间修改为:%d年%d月%d日%d时%d分\n",p->arriveyear,p->arrivemonth,p->arriveday,p->arrivehour,p->arriveminute);break;
case 3:printf("请输入起飞城市:");
fflush(stdin);
gets(p->start);
printf("起飞城市修改为:%s\n",p->start);break;
case 4:printf("请输入抵达城市:");
fflush(stdin);
gets(p->termini);
printf("抵达城市修改为:%s\n",p->termini);break;
case 5:printf("请输入航班票价:");
fflush(stdin);
scanf("%d",&p->price);
printf("票价为%d元\n",p->price);break;
case 6:printf("请输入票价折扣:");
fflush(stdin);
scanf("%f",&p->discount);
printf("票价折扣修改为%.1f折\n",p->discount);break;
case 7:printf("请输入票数:");
fflush(stdin);
scanf("%d",&p->maxtickets);
printf("票数修改为%d",p->maxtickets);break;
}
}
printf("继续修改航班信息? 1.是 2.否\n");
scanf("%d",&choice1);
}
while(choice1==1);
}
void main()
{
int choice0,choice1;
flight *flightinfo;
passenger *passinfo;
printf(" 欢迎进入航空票务系统\n");
do
{
printf("1.输入航班信息 2.查询航班信息 3.我要订票 4.我要退票 5.修改航班信息\n");
scanf("%d",&choice1);
switch(choice1)
{
case 1:flightinfo=input();break;
case 2:inquire(flightinfo);break;
case 3: passinfo=book(flightinfo);break;
case 4:returnticket(flightinfo,passinfo);break;
case 5:edit(flightinfo);break;
}
printf("是否还要继续进行操作? 1.是 2.否\n");
scanf("%d",&choice0);
}
while(choice0==1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -