哪位大佬帮我修改一下一个航班管理系统

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 60 
typedef struct Customer
{//乘客信息 
char Name[8];//姓名 
int Amount;//定票数 
char Rank;//舱位等级 
int IDinfor;//个人信息 
struct Customer *Next;//指向下一乘客结点 
 } Customer;
 typedef struct Flight
 {//航班信息 
  char Des_Name[10];//终点站名 
  char Flight_No[6];//航班号 
  char Plane_No[6];//飞机型号 
  int Week_Day;//飞行周日(星期几) 
  int Customer_Amount;//乘员定额 
  int Free_Amount;//剩余票数 
  int Price[3];//舱位等级的价格 
  Customer *CustName;//该航班的已定票乘客名单 
  Customer *ReplName;//该航班的候补乘客名单 
  struct Flight *Next;//指示下一航班结点 
 }Flight,*PFlight;
 //全局变量
 int Customer_Count=0;//所有航班的订票乘客总数 
 Flight *Head=NULL;//航班头指针 
 Flight *p2;//航班结点指针 
 Customer *Custp1[MAX];//各航班乘客结点指针 
 Customer *Replp1[MAX];//各航班候补结点指针 
 int IsEmpty=1;//是否有订票乘客 
 int IsReplace=1;//是否有候补乘客 
 Customer *prior;//满足要求的订票乘客的前结点,以作删除操作 
 int shouldsave=0;
 
 
  
   //询问是否继续的函数
   char Continue()
   {
    char answer;
    while(1)
    { printf("\n\t 您是否想继续(Y/N)?");
    scanf("%s",&answer);
    system("cls");
    if(answer=='y'||answer=='Y')
    return 'y';
    else if(answer=='n'||answer=='N')
    return 'n';
    else printf("\n\t 您的输入有误,请重新输入!");
  }

//操作出错函数
void ErrorMess()
{
printf("\n\t对不起,您的操作有误!");
getch();

//核对航班函数
int Find_Line1(PFlight L, char *key)
{
int flag=0;//该标志位0表示未找到相关信息,反之即找到 
Flight *p1;
p1=L;//赋航班首结点 
if(p1==p2) return flag;
while(p1!=p2&&p1!=NULL)
{//本航班号不纳入比较范围,否则会一直提示航班不唯一 
if(strcmp(p1->Flight_No,key)==0)
{flag=1; break; }
p1=p1->Next;//指向下一航班结点 
}
return flag;
 } 
 //按航班号查询函数
 int Find_Line2(PFlight L, char *key,PFlight *pp,int *Flight_No)
 {
  int flag=0;
  Flight *p1;
  p1=L;
  while(p1!=NULL)
  { if(strcmp(p1->Flight_No,key)==0)
  {flag=1; *pp=p1; break;  }
  p1=p1->Next;
  if(p1!=NULL) Flight_No++;
 }
 return flag;
  } 
  //按目的地查找函数
void Line_search()
{
char Desname[50];
Flight *p1=Head;
if(Head==NULL)
{ printf("\n\t 没有到达您想要的终点站的航班!");
getch();
return;
}
printf("\n\t请输入终点站名");
scanf("%s",Desname);
printf("\n\t您所查询的航班的信息:\n");
printf("\n____________________________________   \n");
while(p1!=NULL)
{
if(strcmp(p1->Des_Name,Desname)==0)
{
printf("目的地 航班号 飞机型号 星期 座位数 头等舱价格 普通舱价格 经济舱价格\n");
printf("\n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);
}
p1=p1->Next;
}
printf("\n________________________________________\n");
Continue();
}
//添加新航班函数
  void Line_Add()
  {
  PFlight p,*p1;//建立临时航班结点。p用于链表新结点建立的过渡变量 
  p1=&Head;//传航班链表头指针的地址 
  while(1)
  {
  if(Head==NULL)//航班为空 
  { *p1=(PFlight)malloc(sizeof(Flight));
  (*p1)->Next=NULL;
  p2=Head;//建立首个航班 
 }
 else
 {
  p1=&p;
  *p1=(PFlight)malloc(sizeof(Flight));//建立新航班结点 
  p2->Next=*p1;//前一航班结点指向当前航班节点 
  p2=*p1;//保留当前航班结点地址 
 }
 printf("\n\t添加新的航班\n");
 printf("\n\t请输入终点站名:");
 scanf("%s",&p2->Des_Name);
 while(1)
 {
  printf("\n\t请输入唯一的航班号:");
  sacnf("%s",&p2->Flight_No);
  if(Find_Line1(Head,p2->Flight_No))
  printf("\n\t航班号已经存在\n");
  else break;
 }
 printf("\n\t请输入航班号:");
 scanf("%s",&p2->Plane_No);
 while(1)
 {printf("\n\t请输入航班日期(1-7):"); 
 scanf("%d",&p2->Week_Day);
 if(p2->Week_Day<1||p2->Week_Day>7)
 printf("\n\t输入日期错误,请重新输入\n");
 else break; 
 }
 printf("\n\t请输入座位数量:");
 scanf("%d",&p2->Customer_Amount);
 printf("\n\t请输入头等舱的价钱:");
 scanf("%d",&p2->Price[0]);
 printf("\n\t请输入二等舱的价钱:");
 scanf("%d",&p2->Price[1]);
 printf("\n\t请输入三等舱的价钱:");
 scanf("%d",&p2->Price[2]);
 p2-> Free_Amount=p2-> Customer_Amount;//剩余票数与乘员定额相同 
 p2-> CustName=NULL;//该航班订票乘客头指针为空 
 p2-> ReplName=NULL;//初始候补名单为空 
 shouldsave=1;
 if(Continue()=='n')
 {p2-> Next=NULL;return;  }//航班的下一结点为空 
 }
   } 
//判断航班是否为空函数
int Empty_Flight()
{
if(Head==NULL)
{ system("cls");
printf("\n\t对不起,航班不存在,按任意键返回!");
getch();
return 1;
}
else return 0;
}
//航班查看函数
int Line_See()
{
Flight *p1;
system("cls");
p1=Heaad;
if(Empty_Flight())  return 0;//航线为空 
printf("\n\n\t航班信息:\n");
printf("\n________________________________________n");
printf("目的地 航班号 飞机型号 星期 座位数 头等舱价格 普通舱价格 经济舱价格\n");
while(p1!=NULL)
{printf("\n%-9s%-8s%-8s%-7d%-8d%-10d%-12d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);
 }
 printf("\n_________________________________________________________________________________\n");
 printf("\n\t按任意键返回!\n"); getch();
}
//航班管理模块子菜单界面函数
 void LinemanageMenu()
 {
  char a;
  system("cls");
  whlie(1)
  {
printf("\n\t\t                航班管理菜单                          ");
printf("\n------------------------------------------------------\n\n");
printf("\t                  1. 添 加 新 的 航 班                  \n");
printf("\t                  2. 查 询 航 班                        \n");
printf("\t                  3. 查 看 航 班                        \n");
printf("\t                  4. 返 回 主 菜 单                     \n");
printf("\n--------------------------------------------------------\n");
printf("\t请选择您想要的服务:");
scanf("%s",&a);
switch(a)
{
case'1':Line_Add();
break;
case'2':Line_search();
break;
case'3':Line_See();
break;
case'4':return;
}
}
  }
//订票办理函数
void bookingMenu()
{
int Ticket_Count,IDinfor,i,flag=0;
int Flight_No=0;
Flight *p1;
Customer *c1;
Customer *c2;
char answer[7];
char temp,c;
int tag=0;
int InRep1=0;
if(Empty_Flight())  return;
while(1)
{
printf("\n\t现在您可以订票!");
flag=0;
Flight_No=0;
tag=0;
printf("\n\t请输入航班号:");
scanf("%s",&answer);
if(Find_Line2(Head,answer,&p1,&Flight_No))
{
while(1)
{
printf("\n\t请输入您想要订购的票的数量:");
scanf("%d",&Ticket_Count);
if(Ticket_Count==0)
{
printf("\n\t请再次输入飞机型号:\n");
getch();
}
else break;
}
if(p1->Free_Amount >= Ticket_Count)
{
Customer_Count++;
flag=1;
IsRep1=1;
if(p1->CustName==NULL)
{
Custp1[Flight_No]=c1=(Customer*)malloc(sizeof(Customer));
p1->CustName=Custp1[Flight_No];
}
else
{
c1=(Customer*)malloc(sizeof(Customer));
Custp1[Flight_No]->Next=c1;
Custp1[Flight_No]=c1;
}
IsEmpty=0;
Custp1[Flight_No]->Amount=Ticket_Count;
IDinfor=p1->Customer_Amount-p1->Free_Amount+1;
Custp1[Flight_No]->IDinfor=IDinfor;
p1->Free_Amount-=Ticket_Count;
printf("/n/t请输入您的姓名:");
sacnf("%s",&Custp1[Flight_No]->Name);
while(1)
{
printf("\n\t请输入舱位等级:");
scanf("%s",&Custp1[Flight_No]->Rank);
if(!(Cusp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3'))
{
printf("\n\t输入有误,请重新输入!");
getch();
}
else
   break;
}
printf("\n\t请输入您的ID信息:");
scanf("%d",&Custp1[Flight_No]->IDinfor);
if(Ticket_Count<10)
printf("\n\t");
else
printf("\n\t");
printf("\n\t恭喜您订票成功!\n");
for(i=1;i<=Ticket_Count,i++)
{
printf("\n\t您所预定的座位号是%d",IDinfor++);
if(i%10==0)   printf("\n\t");
}
printf("\n");
}
else if(p1->Free_Amount==0)
{
printf("\n\t对不起,票以售完!\n");
IsRep1=0;
}
else
{
printf("\n\t对不起,当前没有多余的票!\n");
IsRep1=0;
}
if(!IsRep1)
{
printf("\n\t您是否想成为候补乘客(Y/N)?");
scanf("%s",&temp);
if(temp=='y'||temp=='Y')                      //以下为候补操作 
{
if(p1->ReplName==NULL)
{
c2=(Customer*)malloc(sizeof(Customer));
Replp1[Flight_No]=c2;                  //保存 
p1->ReplName=Replp1[Flight_No];

else
{      //新客户 
c2=(Customer*)malloc(sizeof(Customer));
Replp1[Flight_No]->Next=c2;
Replp1[Flgiht_No]=c2;
 } 
 IsReplace=0;                         //候补乘客不为空 
 tag=1;                              //已选择列入候补乘客名单 
 Replp1[Flight_No]->Amount=Ticket_Count;
 printf("\n\t请输入您的姓名:");
 scanf("%s",&Replp1[Flight_No]->Name);
 Replp1[Flight_No]->IDinfor=IDinfor;          //候补乘客的座位 
 Replp1[Flight_No]->Amount=Ticket_Count;       //候补乘客的订票数 
 while(1)
 {//数据合法性检验 
  printf("\n\t请输入舱位等级:");
  scanf("%s",&Replp1[Flight_No]->Rank);
  printf("\n\t请输入您的ID信息:");
 scanf("%d",&Replp1[Flight_No]->IDinfor);
 if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3'))
 {
  printf("\n\t输入有误,请重新输入!");
  getch();
  } 
  else break;
 }
 printf("\n\t没有剩余座位!\n");          //候补乘客无座提示 
 shouldsave=1;

}

else
   printf("\n\t对不起,航班不存在!\n");            //航班不存在 
if(flag)                                       //此处不做处理,则会地址溢出 
   Custp1[Flight_No]->Next=NULL;                 //末位订票乘客的指针置空 
   if(tag)
   { Replp1[Flight_No]->Next=NULL;               //末位候补乘客的指针置空 
   printf("\n\t您已经成功排入候补订票队列之中!");
}
printf("\n\t是否退出菜单?:(y/n)");
scanf("%s",&c);
if(c=='y')  return;
}
 } 
 //订票乘客信息
 void Display_Reserve()
 {
  Flight *p1;
  Customer *c1;
  system("cls");
  p1=Head;
  if(Empty_Flight())         return;
  printf("\n\t订票乘客信息");
  is(IsEmpty)
  {     printf("\n\t对不起,没有订票乘客信息!\n");
  getch();
  return;
}
printf("\n______________________________________________\n");
printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No ID\n");
while(p1!=NULL)
{
if(p1->CustName!=NULL)
{
c1=p1->CustName;
while(c1!=NULL)
{ printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",c1->Name,p1->Flight_No,p1->Plane_No,c1->Amount,p1->Des_Name,c1->Rank,c1->IDinfor);
if(p1->Free_Amount>=1)
printf("\n\n\t还有多余的票!\n");
else printf("\n\n\t票已售完!\n");
c1=c1->Next;
}
}
p1=p1->Next;
printf("\n_____________________________________________________________________\n");
}
printf("\n\t按任意键返回!");
getch();
return;
  } 
  //候补乘客信息
  void Display_Replace()
  {
  Flight *p1;
  Customer *c1;
  system("cls");
  p1=Head;
  if(Empty_Flight())  return;
  pirntf("\n\t候补乘客信息!");
  if(IsReplace)
  {  printf("\n\t对不起,没有候补乘客!\n");
  getch();
  return;
 }
 printf("\n__________________________________________________________________________\n");
 printf(" 姓名 航班号 飞机型号 顶票数 目的地 舱位等级 顾客号\n");
 while(p1!==NULL)
 {
  if(p1->ReplName!=NULL)
  {
  c1=p1->ReplName;
  while(c1!=NULL)
  {  printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",c1->Name,p1->Flight_No,p1->Plane_No,c1->Amount,p1->Des_Name,c1->Rank,c1->IDinfor);
  if(p1->Free_Amount>=1)
  printf("\n\t还有多余的票!");
  else 
     printf("\n\t票已售完!");
     c1=c1->Next;
  } 
 }
 p1=p1->Next;
 }
 printf("\n\n________________________________________________________________________\n");
 printf("\n\t按任意键返回!");
 getch();
 return;
   } 
   //退票办理函数
   void RefundticketMenu()
   {
    int Flight_No=0,flag=0;
    Flight *p1;
    Customer *c2,*c4;
    Customer *c3,*c5;
    char answer[7],name[7];
    int tag=0;
    int IDinfor;
    if(Empty_Flight())
    return;
    printf("\n\t现在开始进行退票手续!");
    if(IsEmpty)
    {
    printf("\n\t对不起,乘客不存在!");
    getch();
    return;
  }
  while(1)
  {
  flag=0;
  tag=0;
  Flight_No=0;
  printf("\n\t请输入航班:");
  scanf("%s",&answer);
  if(Find_Line2(Head,answer,&p1,&Flight_No))
  { c2=p1->CustName;
  printf("\n\t请输入您的姓名:");
  scanf("%s",&name);
  if(c2==NULL)
  { printf("\n\t对不起,乘客不存在!");
  if(Continue()=='n')  return;
  }
  else
  while(c2!=NULL)
  {
  if(strcmp(c2->Name,name)==0)
  {
  if(c2==p1->CustName)
  {
  prior=p1->CustName;
  IDinfor=c2->IDinfor;
  flag=1;
  break;
  }
  }
  else if(c2->Next!=NULL)
  { if(stcrmp(c2->Next->Name,name)==0)
  {  tag=1;
  prior=c2;
  IDinfor=c2->Next->IDinfor;
  flag=1;
  break;
}
  }
  c2=c2->Next;
  shouldsave=1;
  }
  if(!flag)
      printf("\n\t对不起,乘客不存在!\n");
  }
  else printf("\n\t对不起,航班不存在!\n");
  if(flag)
  { if(prior==p1->CustName && !tag)
  {  p1->Free_Amount += prior->Amount;
     p1->CustName=NULL;
  }
  else
  {
  p1->Free_Amount += proir->Next->Amount;
  p1->CustName = prior->Neext;
  }
  }
  else
  {  p1->Free_Amount += prior->Next->Amount;
     prior->Next = prior->Next->Next;
  }
  Customer_Count--;
  if(Customer_Count==0)  IsEmpty=1;
  shouldsave=1;
  }
  if(flag)
  {//存在退票操作
  c3=p1->ReplName;
  while(c3!=NULL)
  {
  if(c3->Amount<=p1->Free_Amount)
  {
  printf("\n\t候补乘客已经存在!\n");
  C4=(Customer*)malloc(sizeof(Customer));
  Custp1[Flight_No]->Next=c4;
  c4->Next=NULL;
  IsEmpty=0;
  if(p1->CustName==NULL)
  p1->CustName=c4;
  strcpy(c4->Name,c3->Name);
  c4->Rank = c3->Rank;
  c4->Amount =c3->Amount;
  c4->IDinfor = IDinfor;
  p1->Free_Amount-=c3->Amount;
  Customer_Count++;
  if(c3->Next==NULL) IsReplace=1;
  if(p1->ReplName==c3)
  {
  if(p1->ReplName->Next==NULL)
  p1->ReplName==NULL;
  else  p1->ReplName=c3->Next;

else c5->Next=c3->Next->Next;
break;
  }
  printf("\n\t退票成功!");
  getch();
  return;

shouldsave=1;
if(Continue()=='n')  return;
  }
  }
//乘客管理子菜单函数
void CustomermagMenu()
{
char c;
system("cls");
while(1)
{
printf("\n\t\t             乘客管理菜单:                  \n");
printf("\n______________________________________________\n\n");
printf("\t              1. 乘 客 信 息                    \n");
printf("\t              2. 候 补 乘 客 信 息              \n");
printf("\t              3. 返 回 主 菜 单                 \n");
printf("\n______________________________________________\n\n");
printf("\t 请选择您想要的服务:");
scanf("%s",&c);
switch(c)
{
case'1': Display_Reserve();
 break;
case'2': Display_Replace();
 break;
 case'3': return;
 default: ErrorMess();
}
}

void main()
 {
  char c;
  Flight *pl;
  pl=Head;
  do{
  system("cls");
  printf("\n\t\t            航空客运订票系统主菜单              \n");
  printf("\n----------------------------------------------------\n");
  printf("\t                1. 航 班 管 理 菜 单                \n");
  printf("\t                2. 订 票 办 理 菜 单                \n");
  printf("\t                3. 退 票 办 理 菜 单                \n");
  printf("\t                4. 乘 客 管 理 菜 单                \n");
  printf("\t                5. 退 出 系 统                      \n");
  printf("\n----------------------------------------------------\n");
  printf("\t请选择您想要的服务:");
  scanf("%s",&c);
  switch(c)
  {
  case'1':LinemanageMenu();//航班管理 
  break;
  case'2':bookingMenu();//订票办理 
  break;
  case'3':RefundticketMenu();//退票办理 
  break;
  case'4':CustomermagMenu();//乘客管理 
  break;
  case'5':exit(0);
  default:break;
}
}while(c!='5');
 }//end main
OOP(机试)[具体要求在压缩文档中给出] 项目名称: Air Infomation System 基于控制台的航班信息系统,简称AIS 具体要求如下: (1)显示航班信息系统主菜单,如图-1所示,包括: 1)列出所有航班 2)按起飞时间查询 3)按目的地查询 4)删除航班 5)更新航班 6)退出系统 (2)列出所有航班:查出所有航班的信息,以列表形式显示,包括:编号,航班号,目的地,起飞日期。 (3)按起飞时间查询:输入起飞时间(格式如2011-2-25),查出所有这一天的航班。 (4)按目的地查询:输入目的地,查出所有飞往此地的航班。 (5)删除航班:删除指定编号的航班。 (6)更新航班:更新指定编号的航班。 (7)退出系统。 三、类的设计 需要定义如下类 航班信息实体类(AirInfo) 航班编号(id) 航班号(flight_number) 目的地(destination) 起飞日期(flight_date) 航班信息管理类AirInfoManager类 程序入口类TestAirInfo类 四、具体要求及推荐实现步骤 6.创建实体类AirInfo,属性私有化,根据业务提供需要的构造方法和setter/getter方法。 7.创建航班管理AirInfoManager类,在类中提供列出所有航班的方法,按起飞时间查询 的方法、按目的地查询的方法、删除航班的方法、更新航班的方法、退出系统的方法。 8.创建TestAirInfo类,启动和运行系统。 9.航班的信息用ArrayList(或数组)保存。 10.要求代码规范,命名正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值