开发简易飞机订票系统(C/C++)


目录

概述:

该系统包括如下功能模块:

进一步,该系统还可以提供如下高级应用:

[测试数据]

结果展示:

乘客功能  

管理员功能:

 总结:

代码部分

飞机订票系统.cpp

Flight.h


概述:

设计一个飞机订票系统,完成对航空客运订票的业务管理。

该系统包括如下功能模块:

航班信息浏览、查询航线、客票预订和办理退票等。 

(1)    录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);
(2)    航班信息浏览:预览已经建立的全部航线的相关信息;
(3)    查询:可以查询某个航线的情况(如输入航班号,可以查询起、降时间,起飞、抵达城市,航班票价,票价折扣,所属航空公司、确定航班是否满仓等);
(4)    订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
(5)    退票: 可退票,退票后修改相关数据文件;


进一步,该系统还可以提供如下高级应用:

(1)    排序:可以根据票价、时间等信息对相关航线(如相同起飞、抵达城市航线)进行排序;
(2)    合理设计线路:输入两个城市名称,可以根据条件(如出发、到达时间)设计这两座城市之间可能的线路,进而推荐合理线路;
(3)    输出:以城市作为顶点,航线作为边(若两个城市之间具有多条线路,则选取当前最低票价航线),选择合适形式输出航线网络;
(4)    推荐最优化线路:以机票价钱低作为最优量度标准,设计两座城市之间最优线路并输出之;

[测试数据]

可以参考实际航空公司信息或者自行编制虚拟数据作为测试数据,要求城市数目不小于 30,航线数目不小于 600。

(数据信息预览)

开发简易飞机订票系统(C/C++)_第1张图片

开发简易飞机订票系统(C/C++)_第2张图片

 开发简易飞机订票系统(C/C++)_第3张图片

 date2,3如上类似(随机生成的人数,价格)

结果展示:

登录界面

开发简易飞机订票系统(C/C++)_第4张图片

乘客功能  

航线查询(时间排序,价格排序,综合排序)

开发简易飞机订票系统(C/C++)_第5张图片 开发简易飞机订票系统(C/C++)_第6张图片

综合排序按  时间与价格3:2的比例来进行

开发简易飞机订票系统(C/C++)_第7张图片

订票开发简易飞机订票系统(C/C++)_第8张图片

 从当前城市出发到各个城市的推荐最短路线(以价钱最低排序)

开发简易飞机订票系统(C/C++)_第9张图片

管理员功能:

开发简易飞机订票系统(C/C++)_第10张图片

 1.航班信息

开发简易飞机订票系统(C/C++)_第11张图片

3.录入信息 

开发简易飞机订票系统(C/C++)_第12张图片

航线信息

 总结:

飞机订票系统关键在于能否正确的,合理的为购票人提供合理可行的方案,并按票价,时间等进行排序后合理输出。其次在于对数据的使用及存储。
除此之外所有的功能从购票人和管理者两个方面展开设计,遵循以实际情况为准的原则,在数据方面,功能方面,界面方面设计合理得当,且方便。构造航线信息,购票人信息等主要链表,航线信息为更适合图的邻接表,便于查找两座城市之间的所有可行路线以及,经过排序等处理为用户提供最优方案,所有数据经过读写文件操作来实现,保证数据的稳定,提高程序的复用性,订票退票时以链表操作为主,并及时将订票的信息写入文件,在合作写程序时,统一结构体的信息后,函数部分全部放入头文件中,.cpp文件只调用函数,提高合作的效率

数据结构选择、算法设计:
数据结构选择了结构体和链表,方便存储信息以及增加或者删除航线采用邻接表来存储图,找出两点最短路径。
排序时采用冒泡排序。(稳定)
读写文件操作。
链表的增加删除遍历操作。

代码部分

飞机订票系统.cpp

#include
#include
#include
#include
#include
#include
#include 
#include "Flight.h"
using namespace std;
int main()
{
    readFile();
    readpassage();
    do
	{
		int flag=1;
	    switch(login())
	    {
	    case 1:/*乘客界面*/
			system("pause");
			system("cls");
			do
			{
		        switch(UI())
	            {
		        case 1:/*(3)根据出发地和目的地查询航班*/
					system("cls");
				    query();
					system("pause");
					system("cls");
					break;
				case 2:/*(4)订票*/
					system("cls");
					booking();
					system("pause");
					system("cls");
					break;
				case 3:/*(5)退票*/
					system("cls");
					refund();
					system("pause");
					system("cls");
					break;
				case 4:/*(5)推荐路线*/
					system("cls");
					recommend(); 
					system("pause");
					system("cls");
					break;
				case 0:/*退出登录,返回上一层*/
					flag=0;
					system("cls");
	            }
			}while(flag);
			break;
		case 2:/*管理员界面*/
			system("pause");
			system("cls");
			do
			{
		        switch(administrator())
	            {
		        case 1:/*(2)查看所有航班信息*/
					system("cls");
				    browse();
					system("pause");
					system("cls");
					break;
				case 2:/*查看乘客信息*/
					system("cls");
					//client_list();
					system("pause");
					system("cls");
					break;
				case 3:/*(1)录入*/
					system("cls");
					add();
					system("pause");
					system("cls");
					break;
				case 4:/*(3)根据航班号查询某个航线信息*/
					system("cls");
					query_administrator();
					system("pause");
					system("cls");
					break;
				case 0:/*退出登录,返回上一层*/
					flag=0;
					system("cls");
	            }
			}while(flag);

	    }
	}while(1);

    return 0; 
}

Flight.h

#include
#include
#include
#include
#include
#include
#include 

#ifndef FLIGHT_H_INCLUDED
#define FLIGHT_H_INCLUDED
#include 
using namespace std;

int num;
char Air_Company[20]="中国航空";
int Date[3];
int login(); //用户登录 
char Name[20]="";            /*用于用户登录的姓名*/
int kk;

struct Airline
{

    int Flight;//  航班号
    char starting[20];           //出发城市
    char Destination[20];//          到达城市
    int Boarding_Time_hour;//        出发时间
    int Boarding_Time_minute;
    int Landing_Time_hour;//         落地时间
    int Landing_Time_minute;//

    int Capacity_VIP;           //           头等舱载客量
    int Capacity_VIP_now;
    int Capacity_VIP_day[3];//          头等舱现有载客量


    int Capacity_Economy;           //          经济舱载客量
    int Capacity_Economy_now;
    int Capacity_Economy_day[3];//      经济舱现有载客量
    int Air_price;//头等舱票价是经济舱的1.5倍
    float Air_discount;
    int fly_time;
    struct Airline *next;
};
typedef struct Airline *link;

struct headnode //          表头结点
{
    char name[20];//               出发城市
    link first;//               初始化大问题
} headnode[30];

typedef struct Booking
{
    char Name[20];
    char Flight[2][5];//               航班号
    int month;
    int day;
    struct Booking *next;
    float price;//支付价格 
    int flag;//0为直达,1为中转 
}Book;
Book aaa;Book*head=&aaa;Book*tail=&aaa;//购票人链表 


struct information
{
    bool flag;//如果flag==true,有中转点
    char ch1[20];//起点
    char ch2[20];//中转点,
    char ch3[20];//终点

    int price;
    int time;
    int flight[2];

    int price1;
    int price2;
    
    int Boarding_hour;//起飞时间
    int Boardint_min;

    int Landing_hour;//到达时间
    int Landing_min;

    int count=1;//排序用

}info[30],infotime[30],infoprice[30],infoevenout[30];


//---------------------------------------------------------------------------------------------
//函数部分 

void get_time()       //获取当前时间 ,并得到三天的日期
{
    time_t timep;
    struct tm *p;
    time(&timep);
    p=gmtime(&timep);
    Date[0]=p->tm_mday+(1+p->tm_mon)*100;
    Date[1]=Date[0]+1;
    Date[2]=Date[1]+1;
    printf("\n当前时间:%d 月 %d 日\n",1+p->tm_mon,p->tm_mday);
}
void Initial_headnode()
{
    for(int i=0; i<30; i++)
        headnode[i].first=NULL;
}

int Count_time(link p)  //计算飞行时间
{
    int a=p->Boarding_Time_hour;
    int b=p->Boarding_Time_minute;
    int c=p->Landing_Time_hour;
    int d=p->Landing_Time_minute;

    p->fly_time=(c-a)*60+d-b;
    if(p->fly_time<=60)
        p->fly_time+=24*60;

    if(p->fly_time<60)
        p->fly_time+=24*60;

    return p->fly_time;
}

void Date_passager(link p) //随机生成当前载客量
{
    p->Capacity_Economy_now=rand()%13+238;
    p->Capacity_VIP_now=rand()%7+44;
}

void readpassage()
{
	FILE *f=fopen("name.txt","r");
	if(NULL == f){
        return ;
    }
    char ch=fgetc(f);
  if(ch==EOF||ch=='0')
   return;
	Book *p=new Book;
	int k,m;
	fscanf(f,"%d",&k); 
	kk=k;
	for(int i=0;iflag);
	fscanf(f,"%s",p->Name);
	fscanf(f,"%s",p->Flight[0]);
	if(p->flag==1)
	fscanf(f,"%s",p->Flight[1]);
	fscanf(f,"%f",&p->price);
	p->next=NULL;
	tail->next=p;
	tail=p;
	}
	fclose(f);
}

void writepassage()
{
	FILE *w=fopen("name.txt","w");
	fprintf(w,"%d\n",kk);
	Book* p=head->next;
	while(p)
	{
	fprintf(w,"%d ",p->flag);
	fprintf(w,"%s ",p->Name);
	fprintf(w,"%.5s ",p->Flight[0]);
	if(p->flag==1)
	   fprintf(w,"%s ",p->Flight[1]);
	fprintf(w,"%.2f ",p->price);fprintf(w,"\n");
	p=p->next;
	}
	
	fclose(w);
	
}

void readFile()
{

    FILE *f=fopen("city.txt","r");
    int a=0;
    Initial_headnode();
    while(a<30)
    {
        fscanf(f,"%s",headnode[a].name);
        a++;
    }
    fclose(f);
    FILE *ff=fopen("data.txt","r");
    a=0;
    FILE *f1=fopen("Date1.txt","r");
     FILE *f2=fopen("Date2.txt","r");
      FILE *f3=fopen("Date3.txt","r");
    while(a<600)
    {
        link p=(link)malloc(sizeof(struct Airline));
        fscanf(ff,"%d",&p->Flight);
        fscanf(ff,"%s",p->starting);
        fscanf(ff,"%s",p->Destination);
        fscanf(ff,"%d",&p->Boarding_Time_hour);
        fscanf(ff,"%d",&p->Boarding_Time_minute);
        fscanf(ff,"%d",&p->Landing_Time_hour);
        fscanf(ff,"%d",&p->Landing_Time_minute);
        fscanf(ff,"%d",&p->Capacity_VIP_now);
        fscanf(ff,"%d",&p->Capacity_VIP);
        fscanf(ff,"%d",&p->Capacity_Economy_now);
        fscanf(ff,"%d",&p->Capacity_Economy);
        fscanf(ff,"%d",&p->Air_price);
        fscanf(ff,"%f",&p->Air_discount);
        p->fly_time=Count_time(p);
        fscanf(f1,"%d",&p->Capacity_VIP_day[0]);
        fscanf(f1,"%d",&p->Capacity_Economy_day[0]);
        fscanf(f2,"%d",&p->Capacity_VIP_day[1]);
        fscanf(f2,"%d",&p->Capacity_Economy_day[1]);
        fscanf(f3,"%d",&p->Capacity_VIP_day[2]);
        fscanf(f3,"%d",&p->Capacity_Economy_day[2]);
        //printf(" %d %.2d : %0.2d\n",p->fly_time,p->fly_time/60,p->fly_time%60);
        //Date_passager(p);
        //printf("%d %d \n",p->Capacity_VIP_now,p->Capacity_Economy_now);
        p->next=NULL;
        int i=(p->Flight)/1000;
        link q=headnode[i].first;
        if(q==NULL)
        {
            headnode[i].first=p;
        }
        else
        {
            while(q->next!=NULL)
            {
                q=q->next;
            }
            q->next=p;
        }
        a++;
    }
    fclose(ff);
    fclose(f1);
    fclose(f2);
    fclose(f3);
}
void FindPath(char ch1[],char ch2[])//找到两个城市之间的所有路径
{
    num=0;

    int Path;
    int a;
    for(int i=0;i<30;i++)
    {
        if(strcmp(headnode[i].name,ch1)==0)
        {
            a=i;
            break;
        }
    }

    link p=headnode[a].first;
    while(p)
    {
        if(strcmp(p->Destination,ch2)==0)
        {
            info[num].flag=false;
            strcpy(info[num].ch1,ch1);
            strcpy(info[num].ch3,ch2);
            info[num].price=p->Air_price*p->Air_discount;
            info[num].time=p->fly_time;
            info[num].flight[0]=p->Flight;
            info[num].Boarding_hour=p->Boarding_Time_hour;
            info[num].Boardint_min=p->Boarding_Time_minute;
            info[num].Landing_hour=p->Landing_Time_hour;
            info[num].Landing_min=p->Landing_Time_minute;
            num++;
        }

        else
        {
            int b;
            for(int i=0; i<30; i++)
            {
                if(strcmp(p->Destination,headnode[i].name)==0)
                {
                    b=i;
                    break;
                }
            }


            link q=headnode[b].first;
            while(q)
            {
                if(strcmp(q->Destination,ch2)==0)
                {
                    info[num].flag=true;
                    strcpy(info[num].ch1,ch1);
                    strcpy(info[num].ch2,headnode[b].name);
                    strcpy(info[num].ch3,ch2);
                    info[num].price=p->Air_price*p->Air_discount+q->Air_price*q->Air_discount;
                    info[num].price1=p->Air_price*p->Air_discount;
                    info[num].Boarding_hour=p->Boarding_Time_hour;
                    info[num].Boardint_min=p->Boarding_Time_minute;
                    info[num].flight[0]=p->Flight;
                    info[num].price2=q->Air_price*q->Air_discount;
                    info[num].Landing_hour=q->Landing_Time_hour;
                    info[num].Landing_min=q->Landing_Time_minute;
                    info[num].flight[1]=q->Flight;
                    info[num].time=p->fly_time+q->fly_time;
                    
                    int A=p->Landing_Time_hour*24+p->Landing_Time_minute;
                    int B=q->Boarding_Time_hour*24+q->Boarding_Time_minute;
                    if(B-A<0)
                    {
                        info[num].time+=B-A+24*60;
                    }
                    if(B-A>=0)
                    {
                        info[num].time+=B-A;
                    }

                    num++;
                    break;
                }
                q=q->next;
            }
        }

        p=p->next;
    }
}

void printfpath()//输出路径
{
    for(int i=0;iinfo[i].price&&info[i].count!=0)
            {
                min=info[i].price;
            }
        }

        for(int i=0; iinfo[i].time&&info[i].count!=0)
            {
                min=info[i].time;
            }
        }

        for(int i=0; iinfo[i].time*3+info[i].price*2&&info[i].count!=0)
            {
                min=info[i].time*3+info[i].price*2;
            }
        }

        for(int i=0; iDestination,headnode[b].name)==0)
        {
            break;
        }
        p=p->next;
    }
    return p;
}
void getinfo_Flight(char ch[])//用航班号查询
{
    //printf("%s",ch);
    //printf("%d\n",(int)ch);
    //int n;
    int a=(ch[0]-48)*10+ch[1]-48;
    int b=(ch[3]-48)*10+ch[4]-48;

    link p=headnode[a].first;
    while(p)
    {
        if(strcmp(p->Destination,headnode[b].name)==0)
        {
            break;
        }
        p=p->next;
    }

    printf("%.2d:%.2d %.2d:%.2d %s %s %d %.2f %s ",p->Boarding_Time_hour,p->Boarding_Time_minute,p->Landing_Time_hour,p->Landing_Time_minute,headnode[a].name,p->Destination,p->Air_price,p->Air_discount,Air_Company);

    /*if(p->Capacity_Economy_nowCapacity_Economy)
    {
        printf("经济舱未满舱 ");
    }

    if(p->Capacity_Economy_now==p->Capacity_Economy)
    {
        printf("经济舱已满舱 ");
    }

    if(p->Capacity_VIP_nowCapacity_VIP)
    {
        printf("头等舱未满舱 ");
    }

    if(p->Capacity_VIP_now==p->Capacity_VIP)
    {
        printf("头等舱已满舱 ");
    }
*/
    printf("\n");
    return ;
}

void printf_Network(char ch[])//输出航线网络
{
    printf("%s",ch);

    for(int i=0; i<30; i++)
    {
        if(strcmp(ch,headnode[i].name)==0)
        {
            continue;
        }
        printf("\t-->");

        FindPath(ch,headnode[i].name);
        sortprice();
        if(infoprice[0].flag==false)
        {
            printf("\t%d\t-->\t%s\t\n",infoprice[0].price,infoprice[0].ch3);
        }
        else
        {
            printf("\t%d\t-->\t%s\t-->\t%d\t-->\t%s\t\n",infoprice[0].price1,infoprice[0].ch2,infoprice[0].price2,infoprice[0].ch3);
        }

    }

}

void showcity()//显示城市的名字 
{
	FILE*f=fopen("city.txt","r");
	for(int i=0;i<10;i++){
		char n[20];
		fscanf(f,"%s",n);
	printf("%-12s",n);
	}
	printf("\n");
	for(int i=10;i<20;i++){
		char n[20];
		fscanf(f,"%s",n);
	printf("%-12s",n);
    }
    printf("\n");
    for(int i=20;i<30;i++){
		char n[20];
		fscanf(f,"%s",n);
	printf("%-12s",n);
	}
	printf("\n");
	fclose(f);	
}
void booking() //订票函数 
{
	char Airnumber[2][5];//航班号 
	int k;
	printf("\t\t请根据查询结果输入航班号:\n");
	printf("购买直达请输入1,(如需购买中转请输入2)\n");
	scanf("%d",&k);
	scanf("%s",Airnumber[0]);
	link p=find_Airline(Airnumber[0]);
	while(p==NULL)
		{
			printf("请输入正确的航班信息:\n");
			scanf("%s",Airnumber[0]);
			p=find_Airline(Airnumber[0]);
		 } 
	get_time() ;//获取当前日期 
	printf("\t\t请输入购票日期(限购日期为即日起三天):");
	int month,day;
	scanf("%d %d",&month,&day); 
	int mm=month*100+day-Date[0];
	float price;
	if(k==2)
	{
		scanf("%s",Airnumber[1]);
		link q=find_Airline(Airnumber[1]);
		while(q==NULL)
		{
			printf("请输入正确的航班信息:\n");
			scanf("%s",Airnumber[1]);
			q=find_Airline(Airnumber[1]);
		 } 
		
	}
		printf("\t\t请确认航班信息:\n");
		price =(float)p->Air_price*p->Air_discount;
		printf("航班号:%.5d ",p->Flight);
	    cout<<"出发地:"<starting<<" 目的地:"<Destination;
	    printf(" 出发时间:%d:%.2d",p->Boarding_Time_hour,p->Boarding_Time_minute);
	    printf(" 到达时间:%d:%.2d",p->Landing_Time_hour,p->Landing_Time_minute);
	    printf(" 头等舱:%d/%d",p->Capacity_VIP_day[mm],p->Capacity_VIP);
		printf(" 经济舱:%d/%d",p->Capacity_Economy_day[mm],p->Capacity_Economy);
		if(p->Capacity_VIP_day[mm]==p->Capacity_VIP)
		   printf(" vip已满仓"); 
		else 
			printf(" vip未满仓");
		if(p->Capacity_Economy_day[mm]==p->Capacity_Economy) 
		    printf(" 经济舱已满仓"); 
		else 
			printf(" 经济舱未满仓"); 
		if(p->Capacity_VIP_day[mm]==p->Capacity_VIP&&p->Capacity_Economy_day[mm]==p->Capacity_Economy)
		{
		 	printf("无法购票!");return;
		}    
		cout<<" 票价:"<Air_price<<"元 折扣:"<Air_discount*100<<"折"<<" 航空公司:"<Air_price*q->Air_discount; 
		printf("航班号:%.5d ",q->Flight);
	    cout<<"出发地:"<starting<<" 目的地:"<Destination;
	    printf(" 出发时间:%d:%.2d",q->Boarding_Time_hour,q->Boarding_Time_minute);
	    printf(" 到达时间:%d:%.2d",q->Landing_Time_hour,q->Landing_Time_minute);
	    printf(" 头等舱:%d/%d",q->Capacity_VIP_day[mm],q->Capacity_VIP);
		printf(" 经济舱:%d/%d",q->Capacity_Economy_day[mm],q->Capacity_Economy);
		if(q->Capacity_VIP_day[mm]==q->Capacity_VIP)
		   printf(" vip已满仓\n"); 
		else 
			printf(" vip未满仓\n");
		if(q->Capacity_Economy_day[mm]==q->Capacity_Economy) 
		    printf(" 经济舱已满仓\n"); 
		else 
			printf(" 经济舱未满仓\n");
		if(q->Capacity_VIP_day[mm]==q->Capacity_VIP&&q->Capacity_Economy_day[mm]==q->Capacity_Economy)
		{
		 	printf("无法购票!");return;
		}    
		cout<<" 票价:"<Air_price<<"元 折扣:"<Air_discount*100<<"折"<<" 航空公司:"<price=price;
		p->Capacity_VIP_day[0]++;
		if(k==2)
		p->Capacity_VIP_day[0]++;
	    
	}
	else if(ccc=2)
	{
		pp->price=price*1.5;
		
		p->Capacity_Economy_day[0]++;
		if(k==2)
		p->Capacity_Economy_day[0]++;
	}
	pp->month=month;pp->day=day;
	strcpy(pp->Name,Name);
	strcpy(pp->Flight[0],Airnumber[0]);
	strcpy(pp->Flight[1],Airnumber[1]);
	pp->flag=k-1;
	pp->next=NULL;
	tail->next=pp;
	tail=pp;
	printf("请支付%.2f元\n",pp->price);
	printf("购票完成!\n");
	kk++;
	writepassage();
	return ;
}
void refund()  //退票函数 
{
	char name[20];
	printf("请输入退票人的姓名:");
	scanf("%s",name);
	Book *p=head->next;
	Book *p1=head;
	bool flag=false;
	while(p)
	{
		if(strcmp(p->Name,name)==0)
		{
			p1->next=p->next;
		    free(p);
			flag=true;
			kk--;
			writepassage();
		}
		else{
			p1=p;
		    p=p->next;
		}
		
	}
	if(flag==true)
	printf("退票成功!\n");
	else
	printf("未找到订票人信息\n") ; 
	return ;
} 




//---------------------------------------------------------------------------------------------//
void HideCursor();
void color(short x);
void toxy(int x,int y);
void over();
/**界面部分**/



int UI()//用户界面
{
	int s;
	cout<<"***********************************用户界面********************************\n\n"; //用户操作 
	cout<<"   1.查询航班\t   2.订票\t  3.退票\t  4.推荐路线     0.退出登录\n\n\t\t选择操作:";
	fflush(stdin);
	while(s=int(getchar())-48)
	{
	    if(s>=0&&s<=4) 		
		{
			cout<<"\n**********************************************************\n\n";
			return s;
		}
		else cout<<"\t输入错误!! \n\t请重新选择操作:";
	}
	
}

int administrator()//管理员界面
{
	int s;
	cout<<"**************************************管理员界面*******************************\n\n";
	cout<<"   1.航班信息\t   2.乘客名单\t  3.录入信息\t  4.查询航线信息     0.退出登录\n\n\t\t选择操作:"; //管理员共这四个功能 
	fflush(stdin);
	while(s=int(getchar())-48)
	{
	    if(s>=0&&s<=4) 		
		{
			cout<<"\n**********************************************************\n\n";
			return s;
		}
		else cout<<"\t输入错误!! \n\t请重新选择操作:";
	}
}

void query();//用户查询航班
void browse();//管理员浏览全部航班信息 
void query_administrator();//管理员根据航班号查询信息 
void add();//管理员录入信息 
void booking();//用户订票
void refund();//用户退票
void recommend();//用户推荐路线 
void HideCursor()     //隐藏光标
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0};
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void color(short m)
{
	if(m>=0&&m<=15)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),m);
	}
	else
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),m);
	}
}



int login()
{
    system("cls");
	int f;
	char password[20],*p="123456";       //管理员密码
	cout<<"*************************登录*****************************\n\n";
	cout<<"           1.乘客登录         2.管理员登录\n  请选择用户身份:";
	fflush(stdin);   //刷新输入流缓冲区
	while(f=int(getchar())-48)
	{
		if(f==1) 
		{ 
			cout<<"  姓名:";
			cin>>Name;
			cout<<"\n\t\t登录成功!!\n\n**********************************************************\n\n";
			return 1;
		}
		else if(f==2) 
		{
			cout<<"\n  输入管理员密码(提示:123456):";
			fflush(stdin);
			while(cin>>password)
			{
			    if(!strcmp(password,p)) 
			    {
				cout<<"\n\t\t登录成功!!\n\n**********************************************************\n\n";
				return 2;
			    }
				else cout<<"\n密码错误!! 请重新输入\n\n  输入管理员密码:";
			}
		}
		else if(f==3)
		{
			fflush(stdin);
			writepassage();
		}
		else cout<<"输入错误!! 请重新输入\n  请选择用户身份: ";
	}
}

void query()
{
	char from[20];//起点城市 
    char destination[20];//终点城市 
	int i,s=0;
	showcity();
	cout<<"****************************************************查询***********************************************\n\n\t\t 出发地:";
	cin>>from;
	cout<<"\n\n\t\t 目的地:";
	cin>>destination;
	FindPath(from,destination);
	cout<<"\n\n";
	cout<<"********************1.时间升序\t  2.价格升序 3. 综合排序*****************************\n\n\t\t";
	fflush(stdin);
	int k;
	k=int(getchar())-48;
    if(k==1){
    	system("cls");
    	sorttime();
    	printfpathtime();
    	return;
	}
	else if(k==2){
		system("cls");
		sortprice();
		printfpathprice();
		return;
	} 
	else if(k==3)
	{
		system("cls");
		sortevenout();
		printfpathevenout();
		return;
	}
	/*for(i=0;i<30;i++){
		link p=headnode[i].first;
		while(p){
			if(strcmp(from,p->starting)==0&&strcmp(destination,p->Destination)==0){
				s++;
				printf("航班号:%.5d ",p->Flight);
                cout<<"出发地:"<starting<<" 目的地:"<Destination;
                printf(" 出发时间:%d:%d",p->Boarding_Time_hour,p->Boarding_Time_minute);
                printf(" 到达时间:%d:%d",p->Landing_Time_hour,p->Landing_Time_minute);
                printf(" 头等舱:%d/%d",p->Capacity_VIP_now,p->Capacity_VIP);
                printf(" 经济舱:%d/%d",p->Capacity_Economy_now,p->Capacity_Economy);
                if(p->Capacity_VIP_now==p->Capacity_VIP&&p->Capacity_Economy_now==p->Capacity_Economy) printf(" 已满仓"); 
                else  printf(" 未满仓"); 
                cout<<" 票价:"<Air_price<<" 折扣:"<Air_discount*100<<"折"<<" 航空公司:"<next;
		}
	} 
	if(s==0) cout<<"\n无此航线信息!(请检查输入的城市是否正确)\n\n";
	cout<<"**********************************************************\n\n";*/
}
void browse()
{
   int i=0;
   for(i=0;i<30;i++){
   link p=headnode[i].first;
   while(p){
   printf("航班号:%.5d ",p->Flight);
   cout<<"出发地:"<starting<<" 目的地:"<Destination;
   printf(" 出发时间:%d:%.2d",p->Boarding_Time_hour,p->Boarding_Time_minute);
   printf(" 到达时间:%d:%.2d",p->Landing_Time_hour,p->Landing_Time_minute);
   printf(" 头等舱:%d/%d",p->Capacity_VIP_now,p->Capacity_VIP);
   printf(" 经济舱:%d/%d",p->Capacity_Economy_now,p->Capacity_Economy);
   if(p->Capacity_VIP_now==p->Capacity_VIP&&p->Capacity_Economy_now==p->Capacity_Economy) printf(" 已满仓"); 
   else  printf(" 未满仓"); 
   cout<<" 票价:"<Air_price<<"元 折扣:"<Air_discount*100<<"折"<<" 航空公司:"<next; 
   }
  }
}
void query_administrator()
{
	int i,s=0;
	int number; 
	cout<<"*************************查询*****************************\n\n\t\t 航班号:";
	cin>>number;
	for(i=0;i<30;i++){
		link p=headnode[i].first;
		while(p){
			if(number==p->Flight){
				s++;
				printf("航班号:%.5d ",p->Flight);
                cout<<"出发地:"<starting<<" 目的地:"<Destination;
                printf(" 出发时间:%d:%.2d",p->Boarding_Time_hour,p->Boarding_Time_minute);
                printf(" 到达时间:%d:%.2d",p->Landing_Time_hour,p->Landing_Time_minute);
                /*printf(" 头等舱:%d/%d",p->Capacity_VIP_now,p->Capacity_VIP);
                printf(" 经济舱:%d/%d",p->Capacity_Economy_now,p->Capacity_Economy);
                if(p->Capacity_VIP_now==p->Capacity_VIP&&p->Capacity_Economy_now==p->Capacity_Economy) printf(" 已满仓"); 
                else  printf(" 未满仓"); */
                cout<<" 票价:"<Air_price<<"元 折扣:"<Air_discount*100<<"折"<<" 航空公司:"<next;
		}
	} 
	if(s==0) cout<<"\n无此航线信息!(请检查输入的航班号是否正确)\n\n";
	cout<<"**********************************************************\n\n";
 } 
void add()
 {
 	int f=1;
 	while(f==1){
	system("cls");
 	link p=(link)malloc(sizeof(struct Airline));
 	cout<<"*************************录入*****************************\n\n\t\t 航班号:"; cin>>p->Flight; 
 	cout<<"\n\n\t\t 出发地:"; cin>>p->starting;
 	cout<<"\n\n\t\t 目的地:"; cin>>p->Destination;
 	cout<<"\n\n\t\t 出发时间(几时):"; cin>>p->Boarding_Time_hour;
 	cout<<"\n\n\t\t 出发时间(几分):"; cin>>p->Boarding_Time_minute;
 	cout<<"\n\n\t\t 到达时间(几时):"; cin>>p->Landing_Time_hour;
 	cout<<"\n\n\t\t 到达时间(几分):"; cin>>p->Landing_Time_minute;
 	p->Capacity_VIP_now=0; p->Capacity_VIP=50;
	p->Capacity_Economy_now=0; p->Capacity_Economy=250; 
 	cout<<"\n\n\t\t 票价:"; cin>>p->Air_price;
 	cout<<"\n\n\t\t 折扣:"; cin>>p->Air_discount;
    p->fly_time=Count_time(p);
    p->next=NULL;
        int i=(p->Flight)/1000;
        link q=headnode[i].first;
        if(q==NULL)
        {
            headnode[i].first=p;
        }
        else
        {
            while(q->next!=NULL)
            {
                q=q->next;
            }
            q->next=p;
        }
    cout<<"*************************录入成功!*****************************\n\n";
    cout<<"*************************是否继续?*****************************\n\n";
    cout<<"***********************1.Yes\t  2.No****************************\n\n";
    fflush(stdin);
    int s;
	s=int(getchar())-48;
    if(s==1) f=1;
    else if(s==2) f=0;
   }
 }

void recommend()
{
	char from[20];//起点城市 
    char destination[20];//终点城市 
	int i;
	cout<<"*************************推荐路线*****************************\n\n\t\t 出发地:";
	cin>>from;
	cout<<"\n\n\t\t 目的地:";
	cin>>destination;
	FindPath(from,destination);
	sortprice();
	i=0;
    if(infoprice[i].flag==1)
        {
            printf("航班号1:%.5d ",infoprice[i].flight[0]); printf("航班号2:%.5d ",infoprice[i].flight[1]);
		    cout<<"出发地:"<

你可能感兴趣的:(c++,数据结构)