📄 机票.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define null 0
#define N 50
typedef struct chengke
{ int jish; //标记
char name[N]; //顾客姓名
char zhj[15]; //证件
int num; //所订票数
struct chengke *next;
}xin;
typedef struct time
{ int hour; //小时
int minute; //分钟
}time;
typedef struct hangban
{ int jishu; //标记
char start[N]; //起飞地点
char end[N]; //降落地点
time ttime; //起飞时间
time dtime; //降落时间
char number[N]; //航班号
double prize; //此航班票价
double zhekou; //票价的折扣
xin *cheng; //乘客的信息
int whole; //总的票数
int kong; //飞机所有位置数目
struct hangban *next;
}ban;
int ceshi(char str[])
{char s[20];int i=0,j=0,k=1,h=0;FILE *fp;
fp=fopen("密码.txt","r");//测试输入的密码的转换是否与文件里贮存的密码相同,如相同返回1,反之,返回0
while((s[i]=fgetc(fp))!=EOF)
i++; //用fgetc函数提取文件里的字符串,EOF控制文件是否结束
s[i]='\0'; printf(" %s ",s);
while(str[h]!='\0')h++; // 计算长度,比较输入的密码与文件里的密码的长度,如果长就返回0,结束循环
if(h>i)return 0;
else
{while(s[j]!='\0')
{if(s[j]==str[j])k=1;
else if(s[j]!=str[j]){k=0;break;}
j++;
}
return k;
}
fclose(fp);
}
xin *creat(int ko)
{int n=0,i=0;
xin *p,*q,*head;head=null;
if(ko!=0)
{
q=(xin *)malloc(sizeof(xin));
printf("顾客姓名:");scanf("%s",q->name);
printf("证件:");scanf("%s",q->zhj);
printf("票数:");scanf("%d",&q->num);
while(q->num!=0)
{if(q->num!=0){
i=0;n++;//控制创建的链表是否是对头结点的创建,可以对链表的创建用if,else来控制
if(n==1) {head=q; p=q;}
else if(n>=2) { p->next=q; p=q;}
q=q->next;
q=(xin *)malloc(sizeof(xin));
printf("------------------请输入是否有下个顾客信息(0没有):-------------");scanf("%d",&q->jish);
if(q->jish!=0)
{printf("顾客姓名:");scanf("%s",q->name);
printf("证件:");scanf("%s",q->zhj);
printf("票数:");scanf("%d",&q->num);}
else break;}
else goto look;
}
}else goto end;
p->next=null;//必须对链表的尾结点的指针域赋值为null,这样可以对程序的输出和处理有好的控制
end:; look:;
return head;}
ban *chushihua(ban *q)
{ printf("------------------请输入是否有下个航班(0没有):-------------");scanf("%d",&q->jishu);
if(q->jishu!=0){printf("请输入此班飞机的航班号: ");scanf("%s",q->number);
printf("请输入起点: ");scanf("%s",q->start);
printf("请输入终点: ");scanf("%s",q->end);
printf("请输入起飞时间:");
scanf("%d",&q->ttime.hour);
scanf("%d",&q->ttime.minute);
printf("请输入降落时间:");
scanf("%d",&q->dtime.hour);
scanf("%d",&q->dtime.minute);
printf("请输入已经订好的票数: ");scanf("%d",&q->whole);
printf("请输入坐仓位数: ");scanf("%d",&q->kong);
printf("请输入机票的价格: ");scanf("%d",&q->prize);
printf("请输入机票的折扣: ");scanf("%d",&q->zhekou);
q->cheng=creat(q->whole);}
return q;
}
ban *create(void)
{ int n=0;
ban *p,*q,*head;head=null;
q=(ban *)malloc(sizeof(ban));
q=chushihua(q);
while(q->jishu!=0)
{n++;//控制创建的链表是否是对头结点的创建,可以对链表的创建用if,else来控制
if(n==1) {head=q; p=q;}
else if(n>=2) { p->next=q; p=q;}
q=q->next;
q=(ban *)malloc(sizeof(ban));
q=chushihua(q);
}
p->next=null;//必须对链表的尾结点的指针域赋值为null,这样可以对程序的输出和处理有好的控制
return head;
}
void Print(xin *la)
{xin * p=la;int i=0;
while(p!=null)//用while来控制指针的指向
{
printf(" *姓名: %s\n ",p->name);
printf(" *证件: %s\n",p->zhj);
printf(" *所订票数:%d\n",p->num);
printf("---------------------------------------------------------\n");
p=p->next;}
}
void print(ban *la)
{ ban * q=la;
while(q!=null)//用while来控制指针的指向
{ printf("---------------------------------------------------------\n");
printf("此班飞机的航班号: %s\n",q->number);
printf(" 起点: %s\n ",q->start);
printf("终点: %s\n",q->end);
printf(" 起飞时间: %d:%d\n",q->ttime.hour,q->ttime.minute);//,q->ttime.second
printf(" 降落时间: %d:%d\n",q->dtime.hour,q->dtime.minute);//,q->dtime.second
printf(" 已经订好的票数: %d\n",q->whole);
printf(" 坐仓位数: %d\n",q->kong);
printf(" 机票的折扣: %d\n",q->zhekou);
printf(" 机票的价格: %d\n",q->prize);
printf(" 顾客信息:\n");
Print(q->cheng);
q=q->next;}
}
void scan(ban *head)
{ int flag=0; ban *p;p=head;char str[N],end[N];
printf("请输入你将要查找的航班的起飞地点和终点:\n");
printf("起飞地点:");scanf("%s",str);
printf("终点:"); scanf("%s",end);
while(p!=null)
{ if((!strcmp(p->start,str))&&(!strcmp(p->end,end))) {flag=1;break;}
p=p->next;
}
if(flag)
printf(" 存在您要查找的航班:%s\n",p->number);
else
printf(" 不存在您要查找的航班\n");}
ban *insert(ban *head,ban *p,int sum)
{ char name[N],zhenj[N];int k;xin *hed,*q;hed=p->cheng;
q=hed;
printf("姓名:");scanf("%s",name);
printf("证件:");scanf("%s",zhenj);
printf("票数(小于%d) ",p->kong-sum);scanf("%d",&k);
while(q!=null)
q=q->next;p->whole=p->whole+k;
q=(xin *)malloc(sizeof(xin));
strcpy(q->name,name);
strcpy(q->zhj,zhenj);
q->num=k;
q->jish=1;
q->next=null;
return head;}
ban *book(ban *head)
{ char str[N];ban *p;p=head;int flag=0,sum;xin *q;q=p->cheng;
printf("请问您需要预定哪个航班的机票?");scanf("%s",str);
while(p!=null)
{ if(!strcmp(p->number,str)) {flag=1;break;}
p=p->next;
}
sum=0;
if(flag)
{ while(q!=null)
{sum=sum+q->num;q=q->next;}
if(p->whole<p->kong) {head=insert(head,p,sum);print(head);}
else printf("对不起!您查找的航班机票已满。\n");
}
else printf("对不起,没有您想要乘坐的航班。\n");
return head;
}
ban *back(ban *head)
{ char str[N],st[N];ban *p;p=head; int flag=0;xin *q,*s;
q=p->cheng;s=q;
printf("请问您需要退还哪个航班的机票?");scanf("%s",str);
while(p!=null)
{ if(!strcmp(p->number,str)) {flag=1;break;}
p=p->next;
}
if(flag) {
printf("请输入您的姓名:");scanf("%s",st);
while(q!=null)
{ if(!strcmp(q->name,st))
{if(q==p->cheng){p->cheng=p->cheng->next;break;}
else {s->next=q->next;break;}
}
s=q;q=q->next;
}
p->whole=p->whole-q->num;free(q);
print(head);
}
else printf("对不起,没有您想要退还机票的航班,请您确认。\n");
return head;
}
ban *Change(ban *head,ban *hed,int h)
{ char str[N];xin *p,*q;p=q=hed->cheng;int k;
if(h==0) printf(" 这个航班暂时没有乘客!\n");
else
{printf("请输入您要修改的乘客姓名:");scanf("%s",str);
while(p!=null)
{ if(!strcmp(p->name,str)) break;
else p=p->next;
}
while(1)
{printf("1--证件,2--票数,3--退出:");
scanf("%d",&k);
switch(k)
{ case 1:printf("证件:");scanf("%s",p->zhj);break;
case 2:printf("票数:");hed->whole=hed->whole-p->num;
scanf("%d",&p->num);
hed->whole=hed->whole+p->num;
break;
case 3:goto roro;
}
}roro:;
}
return head;
}
ban *change(ban *head)
{char str[N],st[N];ban *p;p=head; int flag=0,w;
printf("请问您需要修改哪个航班的信息?");scanf("%s",str);
while(p!=null)
{ if(!strcmp(p->number,str)) {flag=1;break;}
p=p->next;
}
while(flag)
{printf("1--起点,2--终点,3--起飞时间,4--降落时间,5--票价,6--折扣,7--乘客信息,8--退出:\n");
scanf("%d",&w);
switch(w)
{ case 1: printf("请输入起点的名称:");scanf("%s",st);
strcpy(p->start,st);break;
case 2:printf("请输入终点的名称:");scanf("%s",st);
strcpy(p->start,st);break;
case 3: printf("请输入起飞时间:");
scanf("%d",&p->ttime.hour);
scanf("%d",&p->ttime.minute);break;
case 4:printf("请输入降落时间:");
scanf("%d",&p->dtime.hour);
scanf("%d",&p->dtime.minute);break;
case 5: printf("请输入机票的价格: ");scanf("%d",&p->prize);break;
case 6: printf("请输入机票的折扣: ");scanf("%d",&p->zhekou);break;
case 7: head=Change(head,p,p->whole);break;
case 8: goto enf;
}
}enf:;
if(flag)print(head);
else printf("没有您要修改的航班。\n");
return head;}
void main()
{ban *Head;int s,k;char str[N];
Head=create();system("cls");
print(Head);
while(1)
{
printf("1--查询,2--订票,3--退票,4--修改航班信息,5--退出系统:\n");
scanf("%d",&s);
switch(s)
{ case 1:scan(Head);break;
case 2:Head=book(Head);break;
case 3:back(Head);break;
case 4:
printf("请输入密码:");scanf("%s",str);
printf("---------------------------------------------------------\n");
k=ceshi(str);
if(k){Head=change(Head);}
else printf("对不起,您的密码不对!\n");break;
case 5:goto endd;break;
}
}
endd:;
printf("程序已经结束!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -