⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 机票.cpp

📁 航空订票系统的课程设计
💻 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 + -