飛機訂票系統c語言
⑴ c語言程序設計飛機訂票系統
呵呵 這個也是我在網上搜的  挺不錯 沒有錯誤
#include<stdio.h>  //標准輸入、輸出頭文件
#include<string.h>    //包含字元串函數處理頭文件
#include<stdlib.h>     //包含動態存儲與釋放函數頭文件
#define N 10000  
struct air         //定義結構體數組
{
 int num;
 char start[20];
 char over[20];
 char time[10];
 int count;
}s[N];
int i;
int m=0;
#define PRINT "%-d%12s%12s%10s%12d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count    //定義輸出格式
void input();    //輸入航班信息
void print();    //輸出航班信息
void save();     //保存航班信息 
void read();     //讀取航班信息
void search();   //查找航班信息
void shanchu();  //刪除航班信息
void dingpiao(); //訂票信息
void tuipiao();  //退票信息
void xiugai();   //修改信息
void main()
{
 
 int  j;
 printf("                       ★---您好,歡迎進入中國民航管理系統!---★\n"); 
    printf("================================================================================\n");
    do
 {
  printf("           -------- ☆        1.輸入航班信息            ☆-------- \n\n"
               "     -------- ☆        2.瀏覽航班信息            ☆-------- \n\n"
      "           -------- ☆        3.修改航班信息            ☆-------- \n\n"
      "           -------- ☆        4.查找航班信息            ☆-------- \n\n"
      "           -------- ☆        5.刪除航班信息            ☆-------- \n\n"
      "           -------- ☆        6.訂票信息                ☆-------- \n\n" 
         "           -------- ☆        7.退票信息                ☆-------- \n\n"
         "           -------- ☆        0.退出                    ☆-------- \n\n");
     printf("================================================================================\n");
 printf("請在0-7中選擇以回車鍵結束:\n\n");
  scanf("%d",&j);
  switch(j)
  {
  case 1: input();//調用輸入模塊
    break;
  case 2:print();//調用列印模塊
    break;
  case 3:xiugai();//調用修改模塊
    break;
  case 4:search();//調用查找模塊
    break;
  case 5:shanchu();  //調用刪除模塊
    break;
  case 6:dingpiao();//調用訂票模塊
    break;
  case 7:tuipiao();//調用退票模塊
    break; 
  case 0:;
   break;
  }
 }while(j!=0);     //判斷結束
 printf("謝謝使用,再見!\n");
}//主函數結束
void input()//列印模塊程序
{ 
 char f[]="2008china";    //設置密碼
 int y;
 printf("請輸入密碼並以回車鍵結束:\n\n");
 scanf("%s",f);          //讀取密碼
 if(strcmp(f,"2008china")==0)
 {
  printf("請依次輸入航班信息(機票數位0結束輸入):\n\n"
         "完成輸入信息請鍵入w以回車鍵結束\n\n");      //列印提示信息
  printf("--------------------------------------------------------------------------\n");
   for(i=0;i<N;i++)
   {
  
  printf("請輸入航班號:\n");  
  scanf("%d",&s[i].num);     //讀取航班號
  printf("請輸入起始站:\n");
      scanf("%s",s[i].start);//讀取起始站
  printf("請輸入終點站:\n");
      scanf("%s",s[i].over);//讀取終點站
  printf("請輸入時間:\n");
      scanf("%s",s[i].time);//讀取時間
  printf("請輸入機票數(機票數為0結束輸入):\n",m);
      scanf("%d",&s[i].count);//讀取機票數
  m++;
  
  printf("第%d個信息已經輸完是否繼續?按任意鍵繼續,按 0結束",m);
  scanf("%d",&y);
  if(y==0)
  {
   save();//將結構體信息存檔
   print();//輸出輸入的航班信息
   break;
  }
  
   }
 
 }
 else
  printf("輸入密碼錯誤!請檢查您的密碼是否正確!謝謝!再見!\n\n");
}
void save()//保存模塊程序
{   
 FILE *fp,*fp1;//定義文件指針
 if((fp=fopen("chen.dat","wb"))==NULL)//打開文件並判斷是否出錯  
 {
  printf("創建文件失敗!\n\n");//列印出錯提示
  getchar();
  return;
 }
 if((fp1=fopen("hao.dat","wb"))==NULL)//打開文件並判斷是否出錯  
 {
  printf("創建文件失敗!\n\n");//列印出錯提示
  getchar();
  return;
 }
 
 for(i=0;i<m;i++)
  if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件寫入數據,並判斷是否出錯
 printf("向文件輸入數據失敗!\n\n");
 fprintf(fp1,"%d",m);
 fclose(fp);//關閉文件
 fclose(fp1);//關閉文件
}
void read()//從文件讀取信息模塊
{
 FILE *fp,*fp1;//定義文件指針
 if((fp=fopen("chen.dat","rb"))==NULL)//打開文件,並判斷是否出錯
 {
  printf("出錯,請檢查文件是否存在,按任意鍵返回住菜單");//列印出錯提示
  getchar();
 }
 if((fp1=fopen("hao.dat","rb"))==NULL)//打開文件並判斷是否出錯  
 {
  printf("創建文件失敗!\n\n");//列印出錯提示
  getchar();
  return;
 }
 fscanf(fp1,"%d",&m);
 fclose(fp1);//關閉文件
 for(i=0;i<m;i++) 
 {
  fread(&s[i],sizeof(air),1,fp);//從文件中讀取信息
 }
 fclose(fp);//關閉文件
}
void print()//列印模塊
{
 char w[10];
 read();//調用讀取文件函數
 printf("航班號       起始站      終點站    時間       機票數\n");
 for(i=0;i<m;i++)
 {
       printf(PRINT);//列印信息
 }
 printf("請按任意鍵回車鍵結束返回上層菜單以:\n");
 scanf("%s",w);
}
   
void search()//查詢模塊
{
 char name1[20];
 char name2[20];
 char ii[10];
 int n,no;
do
{
 printf("請選擇查找方式:\n\n");//列印查詢方式菜單
 printf("1.按航班號查找\n\n"
     "2.按終點站查找\n\n"
     "3.按航線查找\n\n"
     "0.返回\n\n");
 printf("請在0-3中選擇:\n\n"
      "按其他鍵以回車鍵結束返回主菜單:\n\n");
 scanf("%d",&n);//讀取查找方式
 if(n==0)
  break;
 switch(n)
 {
 case 1:
  printf("請輸入航班號:\n");
  scanf("%d",&no);//航班號
  break;
 case 2:
  printf("請輸入終點站名稱:\n");
  scanf("%s",name2);//讀取終點站
  break;
 case 3:
  printf("請輸入起始站名稱:\n");
  scanf("%s",name1);//讀取起始站
  printf("請輸入終點站名稱:\n");
  scanf("%s",name2);//終點站
  break;
 }
 read();//調用讀取函數
 for(i=0;i<m;i++)
 {    
  if(strcmp(s[i].over,name1)==0||strcmp(s[i].over,name2)==0)//按終點站起始站判斷輸出條件
  {
   printf("\n查找航班信息成功!\n");
   printf("航班號       起始站      終點站    時間       機票數\n");
   printf(PRINT);//列印信息
   break;
  }
  if(s[i].num==no)//按航班號判斷輸出條件
  {  
   printf("\n查找航班信息成功!\n");
   printf("航班號       起始站      終點站    時間       機票數\n");
   printf(PRINT);//列印信息
   break;
  } 
 }
 no=0;//將航班號賦值為0
 printf("沒有您需要的信息或查找完畢:\n\n"
     "是否繼續查找?請鍵入yes或no以回車鍵結束\n");
  scanf("%s",ii);
}while(strcmp(ii,"yes")==0);//判斷結束
}
void shanchu()//刪除模塊
{
 char name1[20];
 char name2[20];
 char ii[10];
 char f[]="2008china";//設置密碼
 int no,n; 
 printf("請輸入密碼並以回車鍵結束:\n\n");
 scanf("%s",f);//讀取密碼
 if(strcmp(f,"2008china")==0)    //判斷密碼是否正確
 {
  do 
   {
    printf("請選擇刪除以方式回車鍵結束:\n\n");//列印刪除方式菜單
    printf("*1.按航班號刪除\n\n"
        "*2.按航線刪除\n\n"
        "*0.返回\n\n");
    printf("請在0-2中選擇以回車鍵結束:\n");
    scanf("%d",&n);//讀取刪除方式
    if(n==0)
     break;    //跳出循環
    switch(n)
    {
    case 1:
     printf("請輸入航班號:\n");
     scanf("%d",&no);//讀取航班號
     read();//調用讀取函數
     break;//跳出循環
    case 2:
     printf("請輸入起始站 名稱:\n");
     scanf("%s",name1);//讀取起始站
     printf("請輸入終點站名稱:\n");
     scanf("%s",name2);//讀取終點站
     read();//調用讀取函數
     break;//跳出循環
    }
    for(i=0;i<m;i++)
    {
     if(s[i].num==no||strcmp(s[i].start,name1)==0&&strcmp(s[i].over,name2)==0)//判斷輸入信息是否存在
     {       
      s[i]=s[m-1];
      m--;
     }
     
    }
     printf("查找完畢或沒有這個信息\n\n");
        printf("是否繼續刪除\n");     
    printf("請鍵入yes或no以回車鍵結束\n");
    scanf("%s",ii);       //讀取是否繼續信息
    save(); //調用讀取函數
    if(!strcmp(ii,"yes")) //判斷是否繼續刪除    
     printf("請按任意鍵以回車鍵結束返回上層菜單:\n");
    break;
   }while(n!=1&&n!=2&&n!=3&&n!=4&&n!=0);  //判斷結束
 }
 else
  printf("對不起密碼錯誤!您不是管理員,不能使用此項功能!謝謝!再見!\n\n");
}
  
void dingpiao()//訂票模塊
{
 int n;
 char a[10];
 do
 {
  search();//調用查詢模塊
  printf("請輸入您要訂的機票數以回車鍵結束:\n");
  scanf("%d",&n);//讀取所訂機票數
  if(n<0)
  {
   printf("請輸入有效的機票數!\n");//判斷機票數是否出錯
   break;
  }
   if(s[i].count!=0&&s[i].count>=n)//判斷是否出錯
  {
   s[i].count=s[i].count-n;
   save();//調用保存函數
   printf("訂票成功!\n\n");
   break;
  }
  if(s[i].count<n)//判斷是否出錯
  {
   printf("請輸入有效的機票數:\n");
      break; 
  }
  printf("是否繼續? 請輸入yes或no以回車鍵結束:\n");//判斷是否繼續訂票
  scanf("%s",a);
 }while(!strcmp(a,"yes"));//判斷結束
 
}
void tuipiao()//退票模塊
{
 int n;
 char a[10];
 do
 {
  search();//調用查詢模塊
  printf("請輸入您要退的機票數目:\n");
  scanf("%d",&n);//輸入所退票數
  if(n<0) //判斷票數是否有效
   printf("請輸入有效的機票數!\n");
  s[i].count=s[i].count+n;
  save(); //調用保存模塊
  printf("退票成功!\n\n");
  printf("是否繼續? 請鍵入yes或no以回車鍵結束:\n\n");//判斷是否繼續退票
  scanf("%s",a);
 }while(!strcmp(a,"yes"));//判斷並跳出循環
 getchar();
}
void xiugai()   //修改模塊
{
 struct xiu    //定義結構體 
 {
  int no;
  char name1[20];
  char name2[20];
  char time[20];
  int count;
 }x[1];
 char j[10];
 char f[]="2008china";//設置密碼
 int n;
 printf("請輸入密碼並以回車鍵結束:\n\n");
 scanf("%s",f);//讀取密碼
 if(strcmp(f,"2008china")==0)//判斷是否出錯
 {
  read();//調用讀取模塊
  do
  {
   printf( "請選擇修改方式:\n\n"
              "*1,按航班號修改:\n\n"
           "*2,按航線修改: \n\n");
   printf("請在1---2中修改以回車鍵結束:\n\n");
   scanf("%d",&n);//讀取修改方式
   switch(n)
   {
   case 1:printf("請輸入航班號:\n");
    scanf("%d",&x[0].no);//讀取航班號
    break;
   case 2:printf("請輸入起始站:\n");
    scanf("%s",x[0].name1);//讀取起始站
    printf("請輸入終點站:\n");
    scanf("%s",x[0].name2);//讀取終點站
    break;
   }
   for(i=0;i<m;i++)
   {    
    if(strcmp(s[i].over,x[0].name1)==0&&strcmp(s[i].over,x[0].name2)==0)//判斷輸出條件
    {
     printf("航班號       起始站      終點站    時間       機票數\n");
     printf(PRINT);
     break;
    }
       if(s[i].num==x[0].no)//判斷輸出條件
    {  
     printf("航班號       起始站      終點站    時間       機票數\n");
     printf(PRINT);
     break;
    }
   }
   x[0].no=0;            //將結構體中的號為零
   printf("請輸入新航班號、起始站、終點站、時間(星期幾)、機票數:\n");
   scanf("%d%s%s%s%d",&x[0].no,x[0].name1,x[0].name2,x[0].time,&x[0].count);//定義輸入格式
      s[i].num=x[0].no;//替換航班號
      strcpy(s[i].start,x[0].name1);//替換其始站
            strcpy(s[i].over,x[0].name2);//替換終點站
            strcpy(s[i].time,x[0].time);//替換時間
      s[i].count=x[0].count;//替換機票數
      save();//調用保存模塊
      printf("是否繼續?請鍵入yes或no以回車鍵結束:\n\n");
      scanf("%s",j);
  }while(strcmp(j,"yes")==0);  //判斷結束
 }
 else
  printf("對不起密碼錯誤!您不是管理員,不能使用此項功能!謝謝!再見!\n\n");
}
⑵ 飛機訂票系統設計 c語言
(已修改,請用最新的代碼)代碼說明:
1級菜單:選擇購買的航班號,並顯示對應座位狀態。
(我只做測試,所以初始化initFlight函數中我只初始了2個航班,需要自己按照我的代碼添)
(注意:實際開發軟體,鏈表數據是從資料庫中讀取的,需要實時同步,如果要多次調用initFlight函數,記得自己寫一個釋放內存的函數,把所有鏈表「SINFO和FLINFO」節點都釋放掉,釋放函數我沒寫,需要你自己寫!!!)
2級菜單:選擇購買對應座位號,完成購買,並實時顯示購買結果。
位置編號、座位最大排數、艙室類型、折扣等參數均由常量參數空值,需要修改自行改常量。
注意:艙室類型(我默認3個類型頭等艙、公務艙、經濟艙)對應折扣參數:tDiscount二維數組。如要如要添加新的艙室類型,必須將參數常量TYPESIZE、typeName、types、tDiscount這4個同時修改,具體看代碼備注!!
座位票價=基礎票價*類型折扣*時段折扣。
因為飛機不讓吸煙,所以我沒做吸煙區(笑),如果你需要,可以作為類型自行添加!
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<malloc.h>
#include<time.h>
//-----------------------相關參數,想改變,在這里修改!!!!!!!-----------------------------
constfloattimeDiscount=1;//時段折扣,影響所有航班最終價格,默認1
constcharcID[5]="ABCD";//位置編號
constintmaxRow=20;//位置最大排號
//注意:如果修改類型數量,types和tDiscount必須同時修改!!!
#defineTYPESIZE3//類型數量
constchartypeName[TYPESIZE][10]={"頭等艙","公務艙","經濟艙"};
constinttypes[TYPESIZE][2]={{1,2},{3,4},{5,20}};//排號對應類型。1~2排頭等艙,3~4排公務艙,5~20排經濟艙
constfloattDiscount[TYPESIZE]={1.5,1.3,1};//類型折扣。頭等艙1.5倍,公務艙1.3倍,經濟艙1倍
//-------------------------------------------------------------------------------
typedefstructseatInfo//座位信息,一條鏈表對應一個航班信息,鏈表順序從第一排左邊第一個開始往後A1~D1,A2~D2。。。
{
charcloID;//位置編號A、B、C、D
introw;//位置排號
inttype;//座位所屬類型:0:頭等艙、1:公務艙、2:經濟艙,不同類型對應不同的類型折扣tDiscount
intsell;//出售狀態,0:未出售;1:已出售
structseatInfo*next;
}SINFO;
typedefstructflightInfo//航班信息
{
charfid[10];//航班號
time_ttfTime;//起飛時間
time_tldTime;//降落時間
chartoCity[20];//抵達城市
floattPrice;//基礎票價,不同位置具有不同折扣,座位票價=基礎票價*類型折扣*時段折扣
structflightInfo*next;
structseatInfo*sHead;//對應座位鏈表的頭節點
}FLINFO;
voidmeError(void*p);
SINFO*getSINFO();//獲取座位鏈表
//addFLINFO:添加航班信息鏈表的節點flinfoHead:頭節點(第一次傳NULL會自動生成),flinfoTail:尾節點,fNew:要添加的結構信息(成員指針無需賦值)
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew);//返回尾節點
time_tgetTime_tfromStr(char*sTime);//將YYYY-MM-DDhh:mm:ss格式的時間字元串轉換成time_t型數值
FLINFO*initFlight();//初始化航班信息,返回航班鏈表頭節點,如果想手動輸入,請在這里添加!!!正常軟體開發,這一步應該是從資料庫讀取!
char*getTString(structtm*tm0);//通過tm獲取時間字元串
voidshowSinfo(FLINFO*flinfo);//顯示航班對應座位信息
voidprintfFlinfo(FLINFO*flinfoHead);
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid);//選擇航班號,返回節點
voidshowSinfo(FLINFO*flinfo);//顯示航班對應座位信息
SINFO*selectSinfo(FLINFO*flinfo,char*sid);//選擇座位,返回節點
intmain()
{
FLINFO*flinfoHead=initFlight(),*ffSelect=NULL;
SINFO*sfSelect=NULL;
charfid[10]={0},sid[10]={10};
while(1)
{
ffSelect=NULL;
sfSelect=NULL;
memset(fid,0,10);
memset(sid,0,10);
printfFlinfo(flinfoHead);
printf("請輸入要購買的航班號:");
scanf("%s",fid);
ffSelect=selectFlinfo(flinfoHead,fid);
if(!ffSelect)
{
printf("未找到對應航班,按任意鍵繼續-----
");
getch();
system("cls");
continue;
}
system("cls");
printf("航班號:%s座位信息如下:
",ffSelect->fid);
showSinfo(ffSelect);
printf("請輸入要購買的座位編號(輸入0返回主菜單):");
scanf("%s",sid);
if(!strcmp(sid,"0"))
{
system("cls");
continue;
}
else
{
sfSelect=selectSinfo(ffSelect,sid);
if(!sfSelect||sfSelect->sell)
{
printf("未找到對應座位或該座位已出售,請重新輸入!按任意鍵繼續-----
");
getch();
system("cls");
continue;
}
printf("購買成功!按任意鍵繼續-----");
sfSelect->sell=1;
getch();
system("cls");
}
}
return0;
}
SINFO*selectSinfo(FLINFO*flinfo,char*sid)//選擇座位,返回節點
{
SINFO*sinfoHead=flinfo->sHead;
while(sinfoHead->next)
{
if(sinfoHead->next->cloID==sid[0]&&sinfoHead->next->row==atoi(sid+1))
returnsinfoHead->next;
sinfoHead=sinfoHead->next;
}
returnNULL;
}
voidshowSinfo(FLINFO*flinfo)//顯示航班對應座位信息
{
SINFO*sinfoHead=flinfo->sHead,*sfp=NULL;
inti,j,k,row=maxRow,clo=strlen(cID);
chartypeStr[10]={0};
for(i=0;i<row;i++)
{
//---------讀取座位所屬艙室------------
memset(typeStr,0,10);
for(k=0;k<TYPESIZE;k++)
if(i+1>=types[k][0]&&i+1<=types[k][1])
strcpy(typeStr,typeName[k]);
//--------------------------------------
printf("
");
for(j=0;j<clo;j++)
printf("-------------");
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%c%02d|",sfp->next->cloID,sfp->next->row);
sfp=sfp->next;
}
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%c|",sfp->next->sell?2:1);
sfp=sfp->next;
}
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%6s:%4.0f|",typeStr,flinfo->tPrice*tDiscount[sfp->next->type]*timeDiscount);
sfp=sfp->next;
}
printf("
");
sinfoHead=sfp;
}
for(j=0;i<clo;j++)
printf("-------");
printf("
");
}
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid)//選擇航班號,返回節點
{
while(flinfoHead->next)
{
if(!strcmp(flinfoHead->next->fid,fid))
returnflinfoHead->next;
flinfoHead=flinfoHead->next;
}
returnNULL;
}
voidprintfFlinfo(FLINFO*flinfoHead)
{
while(flinfoHead->next)
{
printf("目的地:%s,航班號:%s
----起飛時間:%s,抵達時間:%s
",flinfoHead->next->toCity,flinfoHead->next->fid,getTString(localtime(&flinfoHead->next->tfTime)),getTString(localtime(&flinfoHead->next->ldTime)));
flinfoHead=flinfoHead->next;
}
}
char*getTString(structtm*tm0)//通過tm獲取時間字元串
{
char*str=(char*)malloc(sizeof(char)*20),num[5]={0};
meError(str);
memset(str,0,20);
sprintf(num,"%4d",tm0->tm_year+1900);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mon);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mday);
strcat(str,num);
strcat(str,"");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_hour);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_min);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_sec);
strcat(str,num);
returnstr;
}
time_tgetTime_tfromStr(char*sTime)//將YYYY-MM-DDhh:mm:ss格式的時間字元串轉換成time_t型數值
{
time_trt;
structtm*tm1=NULL;
rt=time(NULL);
tm1=localtime(&rt);
sscanf(sTime,("%4d-%2d-%2d%2d:%2d:%2d"),&tm1->tm_year,&tm1->tm_mon,&tm1->tm_mday,&tm1->tm_hour,&tm1->tm_min,&tm1->tm_sec);
tm1->tm_year-=1900;
tm1->tm_mon--;
rt=mktime(tm1);
returnrt;
}
FLINFO*initFlight()//初始化航班信息,返回航班鏈表頭節點,如果想手動輸入,請在這里添加!!!正常軟體開發,這一步應該是從資料庫讀取!
{
FLINFO*ffHead=NULL,*flinfoTail=NULL,fNew;
//--------添加一個航班信息----需要增加按照我下面調用方式寫--------------------------------
strcpy(fNew.fid,"CI502");
fNew.tfTime=getTime_tfromStr("2019-02-2003:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2005:20:30");
strcpy(fNew.toCity,"台北");
fNew.tPrice=1000;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
//--------------------------------------------------------------------------------------------
strcpy(fNew.fid,"9C8921");
fNew.tfTime=getTime_tfromStr("2019-02-2014:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2016:40:30");
strcpy(fNew.toCity,"香港");
fNew.tPrice=500;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
returnffHead;
}
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew)//返回尾節點
//添加航班信息鏈表的節點flinfoHead:頭節點(第一次傳NULL會自動生成),flinfoTail:尾節點,fNew:要添加的結構信息(成員指針無需賦值)
{
FLINFO*flinfoHead=*ffHead;
if(flinfoHead==NULL)
{
*ffHead=(FLINFO*)malloc(sizeof(FLINFO));
flinfoHead=*ffHead;
meError(flinfoHead);
flinfoHead->next=NULL;
}
FLINFO*flinfoNew=(FLINFO*)malloc(sizeof(FLINFO));
meError(flinfoNew);
flinfoNew->next=NULL;
flinfoNew->fid[0]=0;
strcpy(flinfoNew->fid,fNew.fid);
flinfoNew->ldTime=fNew.ldTime;
flinfoNew->tfTime=fNew.tfTime;
flinfoNew->toCity[0]=0;
strcpy(flinfoNew->toCity,fNew.toCity);
flinfoNew->tPrice=fNew.tPrice;
flinfoNew->sHead=getSINFO();
if(flinfoHead->next==NULL)
flinfoHead->next=flinfoNew;
else
flinfoTail->next=flinfoNew;
flinfoTail=flinfoNew;
returnflinfoTail;
}
SINFO*getSINFO()//獲取座位鏈表
{
intmaxClo=strlen(cID),cnt=maxClo*maxRow,clo=0,row=1,i;
SINFO*sinfoHead=(SINFO*)malloc(sizeof(SINFO)),*sinfoTail=NULL;
meError(sinfoHead);
sinfoHead->next=NULL;
SINFO*sinfoNew=NULL;
while(cnt--)//按順序生成對應數量的座位鏈表
{
if(clo==maxClo)
clo=0,row++;
if(row==maxRow+1)
row=1;
sinfoNew=(SINFO*)malloc(sizeof(SINFO));
meError(sinfoNew);
sinfoNew->cloID=cID[clo];
sinfoNew->row=row;
for(i=0;i<TYPESIZE;i++)
if(row>=types[i][0]&&row<=types[i][1])
{
sinfoNew->type=i;
break;
}
sinfoNew->sell=0;
sinfoNew->next=NULL;
if(sinfoHead->next==NULL)
sinfoHead->next=sinfoNew;
else
sinfoTail->next=sinfoNew;
sinfoTail=sinfoNew;
clo++;
}
returnsinfoHead;
}
voidmeError(void*p)//內存申請失敗
{
if(p==NULL)
{
printf("
異常:內存申請失敗!回車結束程序!
");
while(getch()!='
');
exit(0);
}
}
⑶ C語言程序寫飛機訂票系統
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>//overflow
#define ok 1
typedef struct Yidingkehu
{//單鏈表
 char name[15];//已訂票的客戶姓名
 int dingpiaoshu;//已訂票數量
 struct Yidingkehu *next1;//
}Yidingkehu,*Link;
typedef struct Weidingkehu
{//單鏈隊
 char name[15];//預訂票的客戶姓名
 int yudingpiao;// 要訂票數量
 struct Weidingkehu *next2;//下一個鏈隊結點指針
}Weidingkehu,*Qptr;
typedef struct Hangxian
{//創建一個含有六個信息的結構體
 char hangbanhao[15];//航班號-
 char feijihao[15];//飛機號
 int feixingriqi;//起飛時間
 int chenkerenshu;//座位數
 int yupiao;//余票
 char zhongdianzhai[15];//降落城市
 struct Hangxian *next;//指向下一個鏈結點的指針
 struct Yidingkehu *yiding;//定義一個指向已訂票客戶的頭結點指針
 struct Weidingkehu *yudingqueue;
}Hangxian,*Linklist;
Linklist InitLinklist();//01
int InsertLinklist(Linklist &head1);//02
void hbhchaxun();//通過航班號查詢
void mddchaxun();//通過目的地查詢
void lurugongneng();//初始化錄入功能
void chaxungongnen();//查詢功能
void dingpiaogongnen();//訂票功能
void tuipiaogongnen();//退票功能
void main()
{
 
 int n;
 do{ //列印主界面
  printf("\t 歡迎使用航空客運訂票系統\n");
  printf("\t+++++++++++++++++++++++++++++\n");
  printf("\t==>1. 錄入功能 ==\n");
  printf("\t==>2. 查詢功能 ==\n");
  printf("\t==>3. 訂票功能 ==\n");
  printf("\t==>4. 退票功能 ==\n");
  printf("\t==>5. 退出 ==\n");
  printf("\t+++++++++++++++++++++++++++++\n");
  printf("\t請選擇:");
  scanf("%d",&n);printf("\n");
  switch(n)
  {
  case 1: lurugongneng();//錄入功能
   break;
  case 2: chaxungongnen();//查詢功能
   break;
  case 3: dingpiaogongnen();//訂票功能
   break;
  case 4:tuipiaogongnen();//退票功能
   break;
  default :exit(0);//退出
  }
 }while(n==1||n==2||n==3||n==4);
}
void lurugongneng()//初始化的單鏈表*********************************************************錄入功能
{
 
 Linklist p;
 //int m,n;
 if(!p) exit(OVERFLOW);
 printf("\t請依次輸入下面幾項內容:\n\n");//這里的輸入採用一個個單獨輸入,避免了亂賦值的現象
 printf("航班號\n");
 gets(p->hangbanhao);//這里的二個gets主要是因為在回車鍵的輸入,其中的第一個是來接收上次的回車
    gets(p->hangbanhao);
 printf("飛機號\n");
 gets(p->feijihao);
 printf("終點站\n");
 gets(p->zhongdianzhai);
 printf("飛行日期\n");
 scanf("%d",&p->feixingriqi);
 printf("乘客總數\n");
 scanf("%d",&p->chenkerenshu);
 printf("余票數\n");
 scanf("%d",&p->yupiao);
 
}
void chaxungongnen()//******************************************************************查詢功能
{
 int n;
 printf("\t 查 找 航 線 信 息 \n");
 printf("\t+++++++++++++++++++++++++++++\n");
 printf("\t==>1. 通過目的地查詢 ==\n");
 printf("\t==>2. 通過航班號查詢 ==\n");
 printf("\t+++++++++++++++++++++++++++++\n");
 printf("\t請選擇:");
 scanf("%d",&n);
 printf("\n");//格式化
 switch(n)
 {
 case 1:mddchaxun();
  break;
 case 2:hbhchaxun();
  break;
 default :break;
 }
}
void mddchaxun()//通過目的地查詢
{
 char c[15];
 int m;
 Linklist p=L;
 printf("\t請輸入要查詢的目的地:");
 gets(c);
 gets(c);//原因同上
 do{
  p=p->next;
  if(p)
  {
   m=strcmpi((*p).zhongdianzhai,c);//如果==的話則m=0;
   if(m==0)
   {
    printf("\t航班信息:\n");
    printf("\t航班號:%s\n",p->hangbanhao);
    printf("\t飛機號:%s\n",p->feijihao);
    printf("\t飛行時間:周%d\n",p->feixingriqi);
    printf("\t余票量:%d\n",p->yupiao);
   }
  }
  else
  {//如果不匹配的話就做
   printf("\t對不起沒有你要找的目的地:\n\n"); m=0;
  }
 }while(m!=0);
}
void hbhchaxun()//通過目的地查詢
{
 char c[15];
 int m;
 Linklist p=L;
 printf("\t請輸入要查詢的航班號:");
 gets(c); gets(c);printf("\n");
 do{
  p=p->next;
  if(p)
  {
   m=strcmpi((*p).hangbanhao,c);//如果==的話則m=0;這里的(*p).與p->的作用是一樣的
   if(m==0)
   {
    printf("\t航班信息:\n");
    printf("\t航班號:%s\n",p->hangbanhao);
    printf("\t飛機號:%s\n",p->feijihao);
    printf("\t飛行時間:周%d\n",p->feixingriqi);
    printf("\t余票量:%d\n\n",p->yupiao);
   }
  }
  else
  {//如果不匹配的話就做
   printf("\t對不起沒有你要找的航班號:\n"); m=0;
  }
 }while(m!=0);
}
void dingpiaogongnen()//***************************************************************訂票功能
{
 
 char c[15];
 int m=1,piao,ydpiao=0,yd=0,n;//
 gets(c);
 printf("請輸入終點站名:"); gets(c); printf("\n");
 p=L->next;
 if(p) {
  do{//查找一下,是否有這個航班
   if(!p)
   {
    printf("對不起,沒有你要找的航班:\n\n");
    goto loop1;
   }
   m=strcmpi(p->zhongdianzhai,c);
   if(m==0)
   {
    printf("航班信息:\n");
    printf("航班號:%s\n",p->hangbanhao);
    printf("飛機號:%s\n",p->feijihao);
    printf("飛行時間:周%d\n",p->feixingriqi);
    printf("余票量:%d\n",p->yupiao);}
   else p=p->next;
  }while(m!=0);
  if(m==0)
  {
   do{
    printf("\n請輸入你要訂的票數:"); scanf("%d",&piao);
    if(piao<=p->yupiao)
    {
     h=p->yiding;
     if(h)
     {
      h1=h;
      h=h->next1;
      h=(struct Yidingkehu*)malloc(sizeof(Yidingkehu));
      printf("請輸入你的名字:");
      gets(h->name);gets(h->name);
      h->dingpiaoshu=piao;
      h->next1=h1->next1;
      h1->next1=h;
      p->yupiao=p->yupiao-piao;
      printf("訂票成功:\n"); m=2;
     }
    }
    else
    { 
     printf("余票量:%d\n",p->yupiao);
     printf("對不起,余票 %d 張不足,不能完成訂票\n\n",p->yupiao);
     printf(" 是否要重新訂票?\n");
     printf("需要請輸入1 否則請按2 預訂請輸入3 : ");
     scanf("%d",&m);
     printf("\n");
     if(m==3) goto loop3;
    }
   }while(m==1);
  }
 }
 else if(!p) 
 {
loop3: struct Weidingkehu *q3;
printf("對不起,該航班的票已售完\n");
q.front=p->yudingqueue;
if(q.front==q.rear) printf("沒有人預訂票,是否要預訂?\n");
else if(q.front!=q.rear) printf("已有人預訂票,是否要預訂?\n");
printf("預訂請輸入1 否則輸入2 : ");
scanf("%d",&n);
printf("\n");
if(n==1)
{
 
 printf("請輸入你的姓名"); gets(q3->name); gets(q3->name);//q3不能指向name???
 printf("請輸入訂票數"); scanf("%d",&q3->yudingpiao);
 q3->next2=NULL;
 q.rear->next2=q3;
 q.rear=q3;
 printf(" 你已經預訂了 !\n");
}
 }
loop1:;
}
void tuipiaogongnen()//***************************************************************退票功能
{
 
}
請採納答案,支持我一下。
