📄 订票系统.cpp
字号:
#include<malloc.h>
#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>
typedef struct airticket //建立航班数组结构
{
int air_num;//航班号
char day[50];//起飞日期
char time[50];//起飞时间
int count;//每航班的机票总数
char start[50];//起飞地点
char ends[50];//抵达地点
int left;//机票余量
struct airticket *next;//指针
}airticket;
typedef struct customer
{
int air_num;//航班号
char IDcard[25];//客户身份证号
int ticket_num;//每个客户所订的机票数
char name[8]; //客户姓名
struct customer *next;//指针
}customer;
airticket * head=NULL;
customer *head1=NULL;
int menu();//输出函数
int menu()
{
int code;
printf("\n*****************菜单**********************\n");
printf("\n1. 订票\n");
printf("\n2. 退票\n");
printf("\n3. 删除航班信息\n");
printf("\n4. 新增航班信息\n");
printf("\n5. 查询航线信息\n");
printf("\n6. 修改航线信息\n");
printf("\n7. 浏览所有航班信息\n");
printf("\n8. 浏览所有客户信息\n");
printf("\n0. 退出\n");
printf("\n请选择你要执行的操作:\n");
scanf("%d",&code);
return code;
}
customer *Create_cus(customer *head1)//建立客户链表
{
head1=(customer *)malloc(sizeof(customer));
head1->next=NULL;
return head1;
}
customer *Insert_cus(customer *head1)//插入客户数据
{
customer *p;
p=(customer *)malloc(sizeof(customer));
printf("\n请输入您的姓名:\n");
scanf("%s",p->name);
printf("\n请输入您的身份证:\n");
scanf("%s",p->IDcard);
p->next=head1->next;
head1->next=p;
return head1;
}
airticket * Create(airticket *head)//建立航班链表信息
{
airticket *L;
airticket * p;
int n,i;
L=(airticket *)malloc(sizeof(airticket));
L->next=NULL;
printf("********** 航空订票系统演示 **********\n");
printf("\n内存没有数据,请先创建航班信息!\n");
printf("\n请输入您要创建的航班信息个数:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p=(airticket *)malloc(sizeof(airticket));
printf("\n请输入第%d个信息,共%d个信息\n",i+1,n);
printf("\n航班号:\n");
scanf("%d",&p->air_num);
printf("\n日期:\n");
scanf("%s",p->day);
printf("\n时间: \n");
scanf("%s",p->time);
printf("\n总票数: \n");
scanf("%d",&p->count);
p->left=p->count;
printf("\n起点:\n");
scanf("%s",p->start);
printf("\n终点:\n");
scanf("%s",p->ends);
p->next=L->next;
L->next=p;
}
printf("\n航班信息建立完毕!\n\n");
head=L;
return head;
}
airticket * Del_airticket(airticket *head)//删除航班信息
{
int air_num;
int m;
airticket *p;
customer *q;
customer *a;
airticket *b;
a=head1;
b=head;
q=head1->next;
p=head->next;
printf("\n请输入您要删除的航班的航班号:\n");
scanf("%d",&air_num);
while(p!=NULL)
{
if(p->air_num==air_num)
{
printf("\n您要删除的航班为:\n");
printf("\n*********************************************************************\n");
printf("航班号 起飞日期 起飞时间 起飞地点 抵达地点 总票数 余票数\n");
printf("\n%-6d %-10s %-9s %-10s %-10s %-8d %-6d\n",p->air_num,p->day,p->time,p->start,p->ends,p->count,p->left);
while(q!=NULL)
{
if(q->air_num==p->air_num)
{
printf("\n您要删除的航班已有客户订票,是否连同客户信息一起删除?\n");
printf("\n是请按任意键,否请按0.\n");
scanf("%d",&m);
if(m!=0)
{
a->next=q->next;
b->next=p->next;
}
b->next=p->next;
}
if(q->air_num!=p->air_num&&q->next==NULL)
b->next=p->next;
q=q->next;a=a->next;
}
printf("\n删除成功!\n");
return head;break;
}
if(p->air_num!=air_num&&p->next==NULL)
printf("\n没有您要的信息!\n");
p=p->next;b=b->next;
}
return head;
}
airticket *Add_airticket(airticket *head)//插入新航班信息
{
airticket *q;
q=(airticket *)malloc(sizeof(airticket));
printf("\n请输入新航班号:\n");
scanf("%d",&q->air_num);
printf("\n请输入新航班起飞日期:\n");
scanf("%s",q->day);
printf("\n请输入新航班起飞时间:\n");
scanf("%s",q->time);
printf("\n请输入新航班起飞地点:\n");
scanf("%s",q->start);
printf("\n请输入新航班抵达地点:\n");
scanf("%s",q->ends);
printf("\n请输入新航班的总票数:\n");
scanf("%d",&q->count);
q->left=q->count;
q->next=head->next;
head->next=q;
printf("\n添加新航班信息成功!\n");
return head;
}
void dingpiao(airticket *head)//订票
{
airticket *a;
customer *b;
char start[50];
char ends[50];
int air_num;
int ticket_num;
int n=1;
b=(customer *)malloc(sizeof(customer));
a=head->next;
printf("\n请您选择要乘坐的航线!\n");
printf("\n输入您要的起点站:\n");
scanf("%s",start);
printf("\n请输入您要的终点站:\n");
scanf("%s",ends);
while(a!=NULL)
{
if((strcmp(a->start,start)!=0||strcmp(a->ends,ends)!=0)&&a->next==NULL)
{
printf("\n没有您要的航班!\n");
return;
}
if(strcmp(a->start,start)==0&&strcmp(a->ends,ends)==0)
{
printf(
"\n请输入您要订票的航班号:\n");
scanf("%d",&air_num);
if(a->air_num!=air_num&&a->next==NULL)
{
printf("\n没有您要的航班!\n");
return;
}
if(a->air_num==air_num)
{
if(a->left==0)
{
printf("\n您要的航班座位已满!\n");
return;
}
head1=Insert_cus(head1);//调用插入客户信息函数
b=head1->next;
printf("\n请输入您要订的票数:\n");
scanf("%d",&ticket_num);
for(;n!=0;)
{
if(ticket_num>a->left)
{
printf("\n您输入的票数超过了该航班现有的余票数,请您重新输入!!!\n");
printf("\n请输入您要订的票数:\n");
scanf("%d",&ticket_num);
if(ticket_num<=a->left)
n=0;
}
else
n=0;
}
b->ticket_num=ticket_num;
b->air_num=a->air_num;
a->left=a->left-b->ticket_num;
printf("\n您已成功订票!\n");
return;
}
}
a=a->next;
}
}
void show(airticket *head)//显示所有航班信息
{
airticket *tail;
tail=head->next;
if(!tail)
{
printf("\n没有航班信息!\n");
return;
}
printf("\n以下为所有航班信息!\n\n");
printf("*********************************************************************\n");
printf("航班号 起飞日期 起飞时间 起飞地点 抵达地点 总机票数 余机票数\n");
while(tail!=NULL)
{
printf("\n%-7d %-12s %-9s %-9s %-9s %-9d %-8d\n",tail->air_num,tail->day,tail->time,tail->start,tail->ends,tail->count,tail->left);
tail=tail->next;
}
}
void show_cus(customer *head1)//显示所有客户信息
{
customer *tail;
tail=head1->next;
if(!tail)
{
printf("\n没有客户信息!\n");
return;
}
printf("\n以下为所有客户信息!\n\n");
printf("*********************************************************************\n");
printf("客户姓名 身份证号 航班号 所订票数\n");
while(tail!=NULL)
{
printf("\n%-9s %-19s %-7d %-8d\n",tail->name,tail->IDcard,tail->air_num,tail->ticket_num);
tail=tail->next;
}
}
void tuipiao(airticket *head)//退票
{
customer *tail;
airticket *p;
customer *q;
int air_num;
int x;
int n=1;
char name[8];
char IDcard[25];
tail=head1->next;
p=head->next;
q=head1;
if(tail==NULL)
{
printf("\n数据为空!\n");return;
}
if(p==NULL)
{
printf("\n数据为空!\n");return;
}
printf("\n请输入想退机票的航班号:\n");
scanf("%d",&air_num);
while(tail!=NULL)
{
if(tail->air_num!=air_num&&tail->next==NULL)
{
printf("\n没有找到您要退票的航班!\n");
return;
}
if(tail->air_num==air_num)
{
n=1;
printf("\n请输入您的姓名:\n");
scanf("%s",name);
printf("请输入您的身份证号:\n");
scanf("%s",IDcard);
while(n!=0)
{
if((strcmp(tail->name,name)!=0||strcmp(tail->IDcard,IDcard)!=0)&&tail->next==NULL)
printf("\n没有您的资料,您不能执行退票操作!\n");
if(strcmp(tail->name,name)==0&&strcmp(tail->IDcard,IDcard)==0)
{
printf("\n您信息为:\n");
printf("\n********************************************************************\n");
printf("姓名 身份证号 乘坐航班号 已订票数\n");
printf("\n%-6s %-19s %-11d %-5d\n",tail->name,tail->IDcard,tail->air_num,tail->ticket_num);
printf("\n请输入您要退的机票数:\n");
scanf("%d",&x);
if(x>tail->ticket_num)
{
printf("\n您输入的退票数超过了您已订的票数,请您重新输入:\n");
scanf("%d",&x);
}
while(p!=NULL)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -