?? 航空系統(tǒng).c
字號(hào):
/*航空客運(yùn)訂票系統(tǒng)*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"malloc.h"
#define MAX 1
#define num1 2
int num2;/*替補(bǔ)客戶人數(shù)*/
int sum;
struct custom1
{
char name[11];
int booknum;/*訂票量*/
struct custom1 *next11;
};
struct custom2
{
char name[11];
int neednum;/*所需票量*/
struct custom2 *next22;
};
struct airline
{
char destination[10];/*終點(diǎn)站名*/
char linenumber[11];/*航班號(hào)*/
char airnum[10];/*飛機(jī)號(hào)*/
char time[3];/*飛行周日(星期幾)*/
int totalnum;/*成員定額*/
int extranum;/*余票量*/
struct custom1 *next1;/*已訂票的客戶名單(包括姓名、訂票量)*/
struct custom2 *next2;/*等候替補(bǔ)的客戶名單(包括姓名、所需票量)*/
}airline[MAX];
struct custom1 *tail;
struct custom2 *front,*rear;
/*所有數(shù)據(jù)存放在文件中*/
/*查詢航線*/
/*根據(jù)旅客提出的終點(diǎn)站名輸出下列信息:航班號(hào)、飛機(jī)號(hào)、星期幾飛行,最近一天航班的日期和余票量*/
/*承辦訂票業(yè)務(wù)*/
/*根據(jù)客戶提出的要求(航班號(hào)、訂票數(shù)額)查詢該航班票額情況,若尚有余額,則為客戶辦理訂票手續(xù),輸出座位號(hào);若已滿員或余票額少于訂票額,則需要重新詢問客戶要求。若需要,可登記排隊(duì)候補(bǔ)*/
/*承辦退票業(yè)務(wù)*/
/*根據(jù)客戶提供的情況(日期、航班),為客戶辦理退票手續(xù),然后查詢該航班是否有人排隊(duì)候補(bǔ),首先詢問排在第一的客戶,若所退票額能滿足他的要求,則為他辦理訂票手續(xù),否則依次詢問其他排隊(duì)候補(bǔ)的客戶*/
/*錄入信息*/
int input_message()
{
struct custom1 *p1;
int i=0,j=0,k=0;
do
{
printf("錄入航線信息(最多%d個(gè))\n",MAX); /*各條航線之間呈線性關(guān)系*/
printf(" \n 第%d條航線",i+1);
printf("\n 終點(diǎn)站名:");
scanf("%s",airline[i].destination);
printf("\n 航班號(hào):");
scanf("%s",airline[i].linenumber);
printf("\n 飛機(jī)號(hào):");
scanf("%s",airline[i].airnum);
printf("\n 飛行周日(星期幾):");
scanf("%s",airline[i].time);
printf("\n 成員定額:");
scanf("%d",&airline[i].totalnum);
printf("\n 余票量:");
scanf("%d",&airline[i].extranum);
airline[i].next1=NULL;
airline[i].next2=NULL;
/*訂票客戶用線性表存儲(chǔ),鏈表實(shí)現(xiàn)*/
for(j=1;j<=num1;j++)
{
if(j==1)
airline[i].next1=tail=p1=(struct custom1 *)malloc(sizeof(struct custom1));
else
p1=(struct custom1 *)malloc(sizeof(struct custom1));
printf("請輸入訂票客戶姓名 訂票量\n");
scanf("%s%d",p1->name,&p1->booknum);
p1->next11=NULL;
tail->next11=p1;
tail=p1;
}
/*等候替補(bǔ)客戶之間用隊(duì)列存儲(chǔ),鏈表實(shí)現(xiàn)*/
front=rear=NULL;/*替補(bǔ)隊(duì)列初始化*/
/* for(j=1;j<=num2;j++)
{
if(j==1)
{
airline[i].next2=front=rear=p=(struct custom2 *)malloc(sizeof(struct custom2));
printf("請輸入替補(bǔ)姓名 訂票量\n");
scanf("%s%d",p->name,&p->neednum);
p->next22=NULL;
}
else
{
p=(struct custom2 *)malloc(sizeof(struct custom2));
printf("請輸入替補(bǔ)姓名 訂票量\n");
scanf("%s%d",p->name,&p->neednum);
p->next22=NULL;
rear->next22=p;
rear=p;
}
} */
printf("\n"); /********一條航線信息輸完后換行*********/
i++;
k++;
}while(i<MAX);
printf("\n ---%d個(gè)航線信息輸入完畢!--\n",i);
printf(" \n 按回車鍵返回主菜單!\n");
getchar(); /*接受回車*/
sum=k+sum;
return i;
}
/*航線信息瀏覽*/
output_message()
{
int i;
struct custom1 *p1;
struct custom2 *p2;
printf("\n\n ----航線信息---- \n\n");
printf("終點(diǎn)站名-航班號(hào)-飛機(jī)號(hào)-星期幾-成員定額-余票量\n");
for(i=0;i<MAX;i++)
{
p1=airline[i].next1;
p2=airline[i].next2;
printf("%-4s %-5s %6s %6s %10d %10d\n",airline[i].destination,airline[i].linenumber,airline[i].airnum,airline[i].time,airline[i].totalnum,airline[i].extranum);
printf("已訂票的客戶名單:\n");
while(p1!=NULL)
{
printf("%s,%d\n",p1->name,p1->booknum);
p1=p1->next11;
}
printf("\n");
printf("等候替補(bǔ)的客戶名單:\n");
while(p2!=NULL)
{
printf("%s,%d\n",p2->name,p2->neednum);
p2=p2->next22;
}
printf("\n");
}
return 0;
}
/*根據(jù)終點(diǎn)站名查詢航線*/
void find_message()
{
char findname[10];
int i,j;
printf("請輸入要查詢的終點(diǎn)站名:\n");
scanf("%s",findname);
for(i=0;i<sum;i++)
{
if(strcmp(airline[i].destination,findname)==0)
{
printf("\n --%s的信息--\n",airline[i].destination);
printf("終點(diǎn)站名-航班號(hào)-飛機(jī)號(hào)-星期幾-余票量\n");
printf("%-4s %-5s %6s %6s %10d",airline[i].destination,airline[i].linenumber,airline[i].airnum,airline[i].time,airline[i].extranum);
}
else
j++;
}
if(j==sum) /*j用來控制查找范圍*/
printf("\n\n 該航線不存在!");
}
/*承辦訂票業(yè)務(wù)*/
void book()
{
char name[10],des[10];
int ch;
int number;
int i,j;
struct custom1 *p1;
struct custom2 *p2;
printf("請輸入此人姓名 終點(diǎn)站名和票額數(shù):\n");
scanf("%s%s%d",name,des,&number);
for(i=0;i<MAX;i++)
{
if(strcmp(airline[i].destination,des)==0)
{
if(airline[i].extranum>=number)
{
printf("可以辦理此業(yè)務(wù)!\n");
airline[i].extranum-=number;
printf("座位號(hào)為:\n");
for(j=1;j<=number;j++)
printf("%-3d",airline[i].totalnum-airline[i].extranum+j);/*輸出座位號(hào)*/
p1=(struct custom1 *)malloc(sizeof(struct custom1));
strcpy(p1->name,name);/*賦值*/
p1->booknum=number;
p1->next11=NULL;
tail->next11=p1; /*入棧 將此人接在訂票棧頂*/
tail=p1;
}
else
{
printf("詢問客戶需求(1/2)\n");
scanf("%d",&ch);
switch(ch)
{
case 1: printf("需排隊(duì)候補(bǔ)!\n");
if(front==NULL) /*接在替補(bǔ)隊(duì)列尾*/
{
airline[i].next2=front=rear=p2=(struct custom2 *)malloc(sizeof(struct custom2));
strcpy(p2->name,name);
p2->neednum=number;
p2->next22=NULL;
}
else
{
p2=(struct custom2 *)malloc(sizeof(struct custom2));
strcpy(p2->name,name);
p2->neednum=number;
p2->next22=NULL;
rear->next22=p2;
rear=p2;
}
break;
case 2:
printf("無法辦理此業(yè)務(wù)!\n");
}
}
}
}
}
/*退票*/
reticket()
{
int i,z=0,k=0;
struct custom1 *p1,*p2,*r;
struct custom2 *q1,*q2;
char rname[10],dest[10];
printf("請輸入要退票的人的姓名 終點(diǎn)站名!\n");
scanf("%s %s",rname,dest);
for(i=0;i<MAX;i++)
if(strcmp(airline[i].destination,dest)==0)/*找到退票人的終點(diǎn)站名*/
{
p1=airline[i].next1;
while(strcmp(p1->name,rname)!=0)/*找到此人姓名*/
{
p2=p1;
p1=p1->next11;
z++;
}
airline[i].extranum+=p1->booknum;/*余票量加*/
if(z==0)
{
airline[i].next1=p1->next11;
free(p1);
}
else
{
p2->next11=p1->next11;/*將此節(jié)點(diǎn)從訂票線性表中刪除*/
free(p1);
z=0;
}
q1=airline[i].next2;
while(airline[i].extranum<q1->neednum)
{
q2=q1;
q1=q1->next22;
k++;
}
airline[i].extranum-=q1->neednum;/*余票量減*/
if(k==0)
{
r=(struct custom1 *)malloc(sizeof(struct custom1));
strcpy(r->name,q1->name);
r->booknum=q1->neednum;
r->next11=NULL;
airline[i].next2=q1->next22;
free(q1);
}
else
{
r=(struct custom1 *)malloc(sizeof(struct custom1));
strcpy(r->name,q1->name);
r->booknum=q1->neednum;
r->next11=NULL;
q2->next22=q1->next22; /*從替補(bǔ)隊(duì)列中刪除*/
free(q2);
z=0;
}
tail->next11=r; /*接在訂票線性表之后*/
tail=r;
}
}
int main()
{
int choice;
do
{
printf("\n\n\n *****************************航線信息*************************\n\n");
printf(" 1.信息錄入;\n\n");
printf(" 2.信息瀏覽;\n\n");
printf(" 3.信息查詢;\n\n");
printf(" 4.訂票;\n\n");
printf(" 5.退票;\n\n");
printf(" 0.退出系統(tǒng).\n\n");
printf(" 請選擇(0--5):");
scanf("%d",&choice);
switch(choice)
{
case 1: input_message();break;
case 2: output_message();break;
case 3: find_message();break;
case 4: book();break;
case 5: reticket();break;
case 0:{
getchar();
return 0;
break;
}
}
}while(choice!=0);
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -