精华内容
下载资源
问答
  • 航空客运订票系统航空客运订票系统航空客运订票系统航空客运订票系统航空客运订票系统航空客运订票系统航空客运订票系统
  • 航空客运订票系统

    2018-01-03 19:38:38
    航空客运订票系统: 航空客运订票的业务活动包括:查询航线、客票预定和办理退票等。 要求:(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、 飞行日期(星期几)、乘员定额、余票量、已经订票的客户名单(包括...
  • 航空客运订票系统 课程设计 源代码 文档
  • C++实现的航空客运订票系统:实现了乘客和管理员两种不同的身份登录系统,而且实现了航班的基本增删改查等功能。
  • 用C语言写的简单的航空客运订票系统,数据结构课设,简单易懂
  • C语言程序设计 航空客运订票系统源代码
  • 航空客运订票系统 程序要求 1 问题描述 航空客运订票的业务活动包括查询航线客票预订和办理退票等设计一 个航空客运订票系统以使上述业务可以借助计算机完成 2 要求 1 每条航线所涉及的信息有终点站名航班号飞机号...
  • 航空客运订票系统 程序要求 1 问题描述 航空客运订票的业务活动包括查询航线客票预订和办理退票等设计一 个航空客运订票系统以使上述业务可以借助计算机完成 2 要求 1 每条航线所涉及的信息有 终点站名航班号飞机号...
  • 数据结构航空客运订票系统 航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。设计一个航空客运订票系统,以使上述业务可以借助计算机完成。
  • 航空客运订票系统源代码 有注释 C语言
  • 该代码为数据结构中航空客运订票系统代码,代码完整且带详细注释
  • C++课程设计:航空客运订票系统

    万次阅读 多人点赞 2019-04-07 22:33:16
    航空客运订票系统   选题背景 ①背景: 现在人们更多的使用飞机作为出行交通工具,因此机票票务市场也在快速发展。国内外航空事业在飞速发展,各航空公司对票务管理的要求也在不断的提高,对航空的信息管理...

    航空客运订票系统
     

    选题背景

    方案论证

    过程论述

    运行结果

    完整代码

     

    选题背景

    ①背景: 现在人们更多的使用飞机作为出行交通工具,因此机票票务市场也在快速发展。国内外航空事业在飞速发展,各航空公司对票务管理的要求也在不断的提高,对航空的信息管理系统提出了更高的要求。

    ②应达到的技术要求: 为实现航空管理员和乘客的不同需要,技术上应实行多级用户。管理员能够查看所有航班信息,乘客名单以及修改航班票价等;乘客用户能够查询航班信息,购买机票以及退票等操作。
    为实现上述功能,需要完成文本文件的基本编辑:增、删、改、查,创建多文件适应不同需要,同时为了在内存中创建对应对象,需要良好的面向对象的知识。

    ③指导思想: 为航空管理员和乘客提高良好的管理系统。

     

    方案论证(设计理念)

    **设计理念:**   基于C++程序设计基础,实现了多级用户管理。乘客用户可以查询航班,根据旅客提出的终点站名输出信息;根据提供的航班号进行购票,可选择购票数,若有余票,则为用户办理订票;若无余票或余票不满足用户需求,可询问旅客是否登记排队候补。乘客可退票,若有旅客在次航班候补,可按顺序为满足订票数的乘客购票。 航空公司管理员可查看所有航班信息和乘客名单,并且可以修改航班票价。

    实现方案:
      C++ MVC模式:win32控制台为界面(view)、文本文件提供数据(model)、面向对象中类、实例及链表。应用运行环境为visual studio 2010。

    这个方案的特点:
      1.win32控制台界面简洁、用户交互良好,同时可以让程序制作者更专注于逻辑代码的编辑和落实上。虽然UI略显简陋,但是用户提示足够详细,界面上的不足完全可以由技术和逻辑弥补。
      2.使用文本文件可直接打开获取、修改、保存数据,直观性好。
      3.使用面向对象的方法设计程序,以管理员和乘客为基本点出发,结构和层次更清晰。同时先将文本文件的数据读取到内存中,作为链式储存,容易插入、删除数据,再与用户进行交互,避免了重复打开文件,多次操作文件带来的效率低下的问题。同时也利用了操作内存速度远比操作文件速度要快的特点,提升了程序性能。

     

    过程论述

    1.建立对象:
      实现多级用户管理。乘客用户可以查询航班,根据旅客提出的终点站名输出信息;票或余票不满足用户需求,可询问旅客是否登记排队候补。乘客可退票,若有旅客在次航班候补,可按顺序为满足订票数的乘客购票。航空公司管理员可查看所有航班信息和乘客名单,并且可以修改航班票价。
      定义结构Client,表示乘客,具有next指针指向下一结点,可以实现链式结构。
    在这里插入图片描述

      具有next指针指向下一结点,可以实现链式结构。定义类对象airline,表示航班:
    在这里插入图片描述
      具有next指针指向下一结点,可以实现链式结构。具有终点站名、航班号、飞机号、飞行日、乘员定额、余票量、已订票的客户名单文件名以及等候替补的客户名单文件名等私有数据成员,保证了数据的安全性。以及一系列的友元函数,可以完成对航班的访问,来实现特定的功能。

    2.通过文本文件读取、存放数据

      将文本文件的数据读取到内存中,作为链式储存,容易插入、删除数据,再与用户进行交互,避免了重复打开文件,多次操作文件带来的效率低下的问题。同时也利用了操作内存速度远比操作文件速度要快的特点,提升了程序性能。
      本实验设计了一个航班信息的文本文件,以及每条航班线对应有一个乘客名单文件和排队候补旅客名单文件,这两份名单文件名在该航班信息中存放。
      程序运行时,将航班信息文本文件读取到内存中,每次数据有修改时,对文本文件进行数据修改。
    在这里插入图片描述

      以下是文本内容:
    在这里插入图片描述
    在这里插入图片描述
    3.基本功能的实现(以下简单介绍几个较为重要的函数)

      登录界面,通过选择乘客登录或管理员登录:
    在这里插入图片描述

      本次实验对登录界面进行简化,实际中较为复杂,乘客登录只需输入姓名,管理员登录输入管理员密码(666666)。根据不同的登录方式将进入不同的用户界面。

    查询功能:
      乘客根据终点站名查询航班,通过链表顺序查找,匹配终点站名,并判断是否找到,若找到则打印航班信息。
    在这里插入图片描述

    订票功能:
      系统根据乘客提供的航班号链式顺序查找该航班,若找到,则询问购票数。
      然后分为两个分支:一是余票量满足购票数,则购票成功,改用户列入乘客名单
    在这里插入图片描述
      二是余票不足,则继续询问,是否登记排队候补
    在这里插入图片描述
    退票功能:
      分为两个部分,一是退票,二是若有用户排队候补次航班,则根据需求票数和排队顺序为候补乘客购票。
      在该航班的乘客名单中根据姓名查找,若找到则询问退票数量。
      首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户
    在这里插入图片描述

    修改票价功能:
      管理员通过输入航班号,找到该航班进行票价修改
    在这里插入图片描述
    4.完善用户界面系统

      通过main函数完成,switch分支选择调用不同的函数,到达不同的界面,实现各种功能。如图所示;
    在这里插入图片描述

     

    运行结果

    图1 乘客登录
                图1 乘客登录

    在这里插入图片描述
                图2 乘客用户界面

    在这里插入图片描述
                图3 乘客查询航班

    在这里插入图片描述
                图4 乘客订票(余票足)

    在这里插入图片描述
                图5乘客订票(余票不足)

    在这里插入图片描述
                图6 乘客退票

    在这里插入图片描述
                图7 管理员登录

    在这里插入图片描述
                图8 管理员操作界面

    在这里插入图片描述
                图9 管理员查看所有航班信息

    在这里插入图片描述
                图10 管理员查看乘客名单

    在这里插入图片描述
                图11 管理员修改票价

     

    完整代码

    #include<iostream>
    #include<fstream>
    #include<stdio.h>
    #include<cstring>
    using namespace std;
    
    struct client   
    { /*客户*/
    	char name[20];          /*姓名*/
    	int ordering_number;    /*订票量*/
    	int grade;             /*舱位等级*/
    	client *next;
    };
    class airline
    { /*航班信息*/
    private:
    	char end_station[20];   /*终点站名*/
    	char air_num[10];       /*航班号*/
    	char plane_num[10];     /*飞机号*/
    	char day[7];            /*飞行日(星期几)*/
    	int people_quota;       /*乘员定额*/
    	double price;           /*票价*/
    	int more_ticket;        /*余票量*/
    	char passenger_list[50];   /*乘客名单*/
    	char waiting_list[50];     /*等候替补的客户名单*/   
    	static int number;       /*航班总数*/
    public:
    	void print()
    	{/*打印航班信息*/
    	    cout<<"  终点站名:"<<end_station<<"  \t 航班号:"<<air_num<<"\t    飞机号:"<<plane_num
    			<<"\n  时间:"<<day<<"\t\t  乘员定额:"<<people_quota<<"\n  票价:"<<price<<"\t\t 余票量:"<<more_ticket<<"\n\n";
    	} 
    	friend airline* get_airline();                   /*读取文件中的航班信息*/
    	friend void client_list();
    	friend void put_airline(airline*);
    	friend void print_airline();
    	friend void search();
    	friend void booking();
    	friend void refund();
    	friend client* get_passenger(airline);
    	friend client* get_wait(airline);
    	friend void put_passenger(airline,client*);
    	friend void put_wait(airline,client*);
    	friend void re_price();
    };
    
    int airline::number=0;
    char Name[20]="";            /*用于用户登录的姓名*/
    airline *L;                  /*全局变量,航线指针*/      
    
    void app_client(client *c,client *q)
    {/*增加乘客*/
    	client *p=c;
    	while(p->next) p=p->next;
    	p->next=q;
    	q->next=NULL;
    }
    int login()
    {/*登录*/
    	int f;
    	char password[20],*p="666666";       /*管理员密码*/
    	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  输入管理员密码(提示6个6):";
    			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 cout<<"输入错误!! 请重新输入\n  请选择用户身份: ";
    	}
    }
    void search()
    {/*查询操作*/
    	char s[20];
    	int i=0;
    	cout<<"*************************查询*****************************\n\n\t\t终点站名:";
    	cin>>s;
    	while(i<L->number&&strcmp(s,L[i].end_station)) i++;    /*按链表顺序匹配终点站名*/
    	if(i<L->number)          
    		L[i].print();
    	else cout<<"\n无此航班信息!\n\n";
    	cout<<"**********************************************************\n\n";
    }
    void refund()
    {/*退票操作*/
    	char s[20];
    	int i=0,n;
    	cout<<"*************************退票*****************************\n\n\t\t航班号:";
    	cin>>s;
    	while(i<L->number&&strcmp(s,L[i].air_num)) i++;       /*按航班号匹配*/
    	if(i<L->number)
    	{/*找到此航班*/
    	    client *c1=get_passenger(L[i]),*c2=get_wait(L[i]),*p=c1,*q,*r;
    		    /*获得次航班的乘客和候补乘客链表*/
    
    		while(p->next&&strcmp(Name,p->next->name)) p=p->next;     /*姓名查找*/
    		if(p->next)
    		{/*找到该用户姓名*/
    			cout<<"您在"<<L[i].air_num<<"航班(终点站:"<<L[i].end_station<<")订了"
    				<<p->next->ordering_number<<"张票\n请输入退票数量:";
    			do
    			{/*输入退票数*/
    			    cin>>n;
    				if(n>0&&n<=p->next->ordering_number) break;
    				else cout<<"\n输入错误!!请重新输入:";
    			}while(1);
    			if(n==p->next->ordering_number) 
    			{/*全部退票*/
    				r=p->next;
    				q=r->next;
    				p->next=q;
    				delete r;	
    			}
    			else if(n<p->next->ordering_number) p->next->ordering_number-=n;  /*退部分票*/
    			L[i].more_ticket+=n;   /*余票增加*/
    			int f=1;
    			while(L[i].more_ticket&&f)
    			{/*有余票且未访问完所有候补乘客*/
    				p=c2;
    				while(p->next&&L[i].more_ticket<p->next->ordering_number) p=p->next; 
    				if(p->next)
    				{/*找到需求票数满足的*/
    					L[i].more_ticket-=p->next->ordering_number;
    					r=p->next;
    				    q=r->next;
    				    p->next=q;
    					app_client(c1,r);
    				}
    				else f=0;  /*访问完*/
    			}
    			put_passenger(L[i],c1);   /*刷新乘客名单*/
    			put_wait(L[i],c2);
    		}
    		else cout<<"\n退票错误!! 您没有在此航班订票\n";
    	}
    	else cout<<"\n无此航班信息!\n\n";
    	cout<<"\n 退票完成!\n";
    	cout<<"**********************************************************\n\n";
    	put_airline(L);
    }
    void booking()
    {/*订票操作*/
    	char s[20];
    	int i=0,n,y,g;
    	cout<<"*************************订票*****************************\n\n\t\t航班号:";
    	cin>>s;
    	while(i<L->number&&strcmp(s,L[i].air_num)) i++;
    	if(i<L->number)
    	{/*找到该航班*/
    		L[i].print();
    		client *c1=get_passenger(L[i]);
    		client *c2=get_wait(L[i]);
    		cout<<" 舱位等级(1:头等舱,2:普通舱,3:经济舱):";cin>>g;
    		cout<<" 购买票数:";
    	    do
    		{/*合理输入购买票数*/
    			cin>>n;
    	        if(n<=L[i].people_quota) break;
    			else
    				cout<<"错误!!不能超过最大乘员数("<<L[i].people_quota<<"),重新输入:";
    		}while(1);
    
    		if(L[i].more_ticket)
    		{/*有余票*/
    			if(n<=L[i].more_ticket) 
    			{/*余票足够*/
    				client *p=new client;
    				strcpy_s(p->name,Name);
    				p->ordering_number=n;
    				L[i].more_ticket-=n;
    				p->grade=g;
    
    				app_client(c1,p);
    				cout<<"\n 购票完成!\n";
    			}
    			else if (n>L[i].more_ticket)
    			{/*余票小于购买数*/
    				int x;
    				client *p1=new client,*p2=new client;
    
    				/*询问用户*/
    			    cout<<"\n\n(1:只买"<<L[i].more_ticket<<"张  2:买"<<L[i].more_ticket<<"张,"
    					<<n-L[i].more_ticket<<"张等候  3:不买)\n 余票不足"<<n<<"张,是否继续购买?:";
    				cin>>x;
    				switch(x)
    				{
    				case 1:
    			        strcpy_s(p1->name,Name);
    					p1->ordering_number=L[i].more_ticket;
    					L[i].more_ticket=0;
    		            p1->grade=g;
    					app_client(c1,p1);
    					cout<<"\n 购票完成!\n";
    					break;
    				case 2:
    			        strcpy_s(p1->name,Name);
    					p1->ordering_number=L[i].more_ticket;
    		            p1->grade=g;
    					app_client(c1,p1);
    
    					strcpy_s(p2->name,Name);
    				    p2->ordering_number=n-L[i].more_ticket;
    					L[i].more_ticket=0;
    				    p2->grade=g;
    					app_client(c2,p2);
    
    					cout<<"\n 购票完成!\n";
    					break;
    				}
    			}
    		}
    		else 	
    		{/*无余票*/
    			cout<<"\n 无余票! 是否排队等候票?(1:是 0:否)";cin>>y;
    			if(y) 
    			{/*进入等候名单*/
    				client *p=new client;
    				strcpy_s(p->name,Name);
    				p->ordering_number=n;
    				p->grade=g;
    				app_client(c2,p);
    			}
    		}
    		put_passenger(L[i],c1);    /*刷新乘客名单*/
    		put_wait(L[i],c2);
    	}
    	else cout<<"\n无此航班信息!\n\n";
    	cout<<"\n**********************************************************\n\n";
    	put_airline(L);
    }
    
    void put_wait(airline l,client *c)
    {/*输出等候替补名单*/
        fstream f;
    	client *p=c->next;
    	f.open(l.waiting_list,ios::out|ios::trunc);
    	while(p)
    	{
    		f<<p->name<<" "<<p->ordering_number<<" "<<p->grade<<'\n';
    		p=p->next;
    	}
    	f.close();
    }
    client* get_passenger(airline l)
    {/*读取某航班乘客信息*/
    	fstream f;int i=0;
    	client *c=new client,*p=new client,*q=c;
    	f.open(l.passenger_list,ios::in);
    	while(f>>p->name>>p->ordering_number>>p->grade)
    	{
    		q->next=p;
    		p=new client;
    		q=q->next;
    	}
    	q->next=NULL;
    	f.close();
    	return c;
    }
    void put_passenger(airline l,client *c)
    {/*输出乘客信息到文件*/
    	fstream f;
    	client *p=c->next;
    	f.open(l.passenger_list,ios::out|ios::trunc);
    	while(p)
    	{
    		f<<p->name<<" "<<p->ordering_number<<" "<<p->grade<<'\n';
    		p=p->next;
    	}
    	f.close();
    }
    client* get_wait(airline l)
    {/*读取某航班等候替补名单*/
    	fstream f;int i=0;
    	client *c=new client,*p=new client,*q=c;
    	f.open(l.waiting_list,ios::in);
    	while(f>>p->name>>p->ordering_number>>p->grade)
    	{
    		q->next=p;
    		p=new client;
    		q=q->next;
    	}
    	q->next=NULL;
    	f.close();
    	return c;
    }
    airline* get_airline()
    {/*读取文件中的航班信息*/
    	fstream f;int i=0;
    	airline *line=new airline [100];
    	f.open("航班信息.txt",ios::in);
    	while(f>>line[i].end_station>>line[i].air_num>>line[i].plane_num>>
    		line[i].day>>line[i].people_quota>>line[i].price>>line[i].more_ticket
    		>>line[i].passenger_list>>line[i].waiting_list)
    			i++;
    	line->number=i;
    	f.close();
    	return line;
    }
    void put_airline(airline *L)
    {/*输出修改后的航班信息*/
    	fstream f;int i;
    	f.open("航班信息.txt",ios::out);
    	
    	for(i=0;i<L->number;i++)  f<<L[i].end_station<<" "<<L[i].air_num<<" "
    		<<L[i].plane_num<<" "<<L[i].day<<" "<<L[i].people_quota<<" "<<
    		L[i].price<<" "<<L[i].more_ticket<<" "<<L[i].passenger_list<<" "<<L[i].waiting_list<<'\n';
    	f.close();
    }
    void print_airline()
    {/*打印所有航班信息(管理员操作)*/
    	L=get_airline();
    	int i=0;
    	cout<<"*************************航班信息*************************\n\n";
    	for(int i=0;i<L->number;i++)
    		L[i].print();
    	cout<<"\n**********************************************************\n\n";
    }
    void client_list()
    {/*查看某航班乘客名单(管理员操作)*/
    	int i=0;char s[20],*g;
    	cout<<"*************************乘客名单*************************\n\n\t\t航班号:";
    	cin>>s;
    	while(i<L->number&&strcmp(s,L[i].air_num)) i++;
    	if(i<L->number)
    	{
            client c;
    	    fstream f;
    	    f.open(L[i].passenger_list,ios::in);
    		cout<<"\n  已购票乘客名单:\n";
    		while(f>>c.name>>c.ordering_number>>c.grade)
    		{
    			switch(c.grade)
    			{
    			case 1:g="头等舱";break;
    			case 2:g="普通舱";break;
    			case 3:g="经济舱";
    			}
    			cout<<"\t姓名:"<<c.name<<"\t舱位等级:"<<g<<"\t购票数:"<<c.ordering_number<<endl;
    		}
    		f.close();
    		f.open(L[i].waiting_list,ios::in);
    		cout<<"\n  候补订票乘客名单:\n";
    		while(f>>c.name>>c.ordering_number>>c.grade)
    		{
    			switch(c.grade)
    			{
    			case 1:g="头等舱";break;
    			case 2:g="普通舱";break;
    			case 3:g="经济舱";
    			}
    			cout<<"\t姓名:"<<c.name<<"\t舱位等级:"<<g<<"\t预订票数:"<<c.ordering_number<<endl;
    		}
    	    f.close();
    	}
    	else cout<<"\n无此航班信息!\n\n";
    	cout<<"\n**********************************************************\n\n";
    	
    }
    void re_price()
    {/*修改某航班票价(管理员操作)*/
    	int i=0,p;char s[20];
    	cout<<"*************************修改票价*************************\n\n\t\t航班号:";
    	cin>>s;
    	while(i<L->number&&strcmp(s,L[i].air_num)) i++;
    	if(i<L->number)
    	{
    		cout<<"  终点站名:"<<L[i].end_station<<"\t  飞机号:"<<L[i].plane_num
    			<<"\n\n\t    原票价:"<<L[i].price<<"\n\t    新票价:";
    		cin>>p;
    		L[i].price=p;
    		cout<<"\n   修改票价完成\n";
    	}
    	else cout<<"\n无此航班信息!\n\n";
    	put_airline(L);
    	cout<<"\n**********************************************************\n\n";
    }
    int form1()
    {/*乘客用户界面*/
    	int s;
    	cout<<"*************************用户界面*************************\n\n";
    	cout<<"   1.查询航班\t   2.订票\t  3.退票     0.退出登录\n\n\t\t选择操作:";
    	fflush(stdin);
    	while(s=int(getchar())-48)
    	{
    	    if(s>=0&&s<=3) 		
    		{
    			cout<<"\n**********************************************************\n\n";
    			return s;
    		}
    		else cout<<"\t输入错误!! \n\t请重新选择操作:";
    	}
    	
    }
    int form2()
    {/*管理员界面*/
    	int s;
    	cout<<"***********************管理员界面*************************\n\n";
    	cout<<"   1.航班信息\t   2.乘客名单\t  3.修改票价     0.退出登录\n\n\t\t选择操作:";
    	fflush(stdin);
    	while(s=int(getchar())-48)
    	{
    	    if(s>=0&&s<=3) 		
    		{
    			cout<<"\n**********************************************************\n\n";
    			return s;
    		}
    		else cout<<"\t输入错误!! \n\t请重新选择操作:";
    	}
    }
    int main()
    {
    	L=get_airline();
    	do
    	{
    		int f=1;
    	    switch(login())
    	    {
    	    case 1:/*乘客界面*/
    			system("pause");
    			system("cls");
    			do
    			{
    		        switch(form1())
    	            {
    		        case 1:/*调用查询函数*/
    					system("cls");
    				    search();
    					system("pause");
    					system("cls");
    					break;
    				case 2:/*订票*/
    					system("cls");
    					booking();
    					system("pause");
    					system("cls");
    					break;
    				case 3:/*退票*/
    					system("cls");
    					refund();
    					system("pause");
    					system("cls");
    					break;
    				case 0:/*退出登录,返回上一层*/
    					f=0;
    					system("cls");
    	            }
    			}while(f);
    			break;
    		case 2:/*管理员界面*/
    			system("pause");
    			system("cls");
    			do
    			{
    		        switch(form2())
    	            {
    		        case 1:/*查看所有航班信息*/
    					system("cls");
    				    print_airline();
    					system("pause");
    					system("cls");
    					break;
    				case 2:/*查看乘客名单*/
    					system("cls");
    					client_list();
    					system("pause");
    					system("cls");
    					break;
    				case 3:/*修改票价*/
    					system("cls");
    					re_price();
    					system("pause");
    					system("cls");
    					break;
    				case 0:/*退出登录,返回上一层*/
    					f=0;
    					system("cls");
    	            }
    			}while(f);
    	    }
    
    	}while(1);
    }
    

     
     
    注: 需要在工程项目中Debug文件夹中加入以下文本文件

    在这里插入图片描述
    在这里插入图片描述
    其中:北京 001 KN9500 星期一 150 2000 18 001a.txt 001b.txt
    对应:终点站 航班号 飞机号 星期 总票数 票价 余票数 已购票文件名 候补订票文件名

     
    工程文件打包下载地址:

    https://download.csdn.net/download/qq_33966112/11095091

    展开全文
  • 航空客运订票系统vcvc

    2009-12-15 14:54:54
    航空客运订票系统,用VC++编写,供大家学习使用
  • 航空客运订票系统 课程设计 数据结构C语言
  • 数据结构课程设计--航空客运订票系统

    万次阅读 多人点赞 2017-12-21 15:42:19
    航空客运订票系统 本次课程设计做的航空客运订票系统,主要用到了,线性表、链表、图的存储结构(编译环境:code::blocks 12.04)
    航空客运订票系统
    本次课程设计做的航空客运订票系统,主要用到了,线性表、链表、图的存储结构,本次课程设计仍然使用多文件组织工程,点击此处参考(编译环境:code::blocks 12.04)
     
    工程文件视角图如下:
    实现源代码如下:
     
    1.mainFram.h
    //*Copyright  (c)2017,烟台大学计算机与控制工程学院*
    //*All rights reservrd.*
    //*文件名称 :mainFram.h*
    //*作者:田长航*
    //*完成时间:2017年12月21日*
    //*版本号:v1.0*
    //*问题描述:定义界面实现的部分宏定义、要实现算法的函数的声明*
    //*输入描述:无*
    //*程序输出:无*
    #ifndef MAINFRAM_H_INCLUDED
    #define MAINFRAM_H_INCLUDED
    #define flight_max 5//最大航班数
    struct passanager //乘客信息结构体
    {
        char name[10];//名字
        char id[20];//身份证号
        float money; //资产
        int ifstu;  //是否学生认证
        char airnum[10];  //航班号
        int sex;   //性别,男1女0
        char phone[15]; //预留手机号
    };
    typedef struct passanager pass;
     struct airplane//航班信息
    {
        char num[10];  //航班号
        float price;   //票价
        float discount;  //折扣
        char start[10];  //起始地
        char arrive[10];  //目的地
        int count;    //余票数
        int min,sec;   //时间
    };
    typedef struct airplane air;
    int setdiscount(air *a);    //设定折扣函数,只需要传递air指针即可,包含这些函数的模块只能对航班操作
    void disairline(air *a);//显示航班信息,顺序结构,顾客用
    bool stu_confrim(pass *p);   //学生认证函数,传递pass指针,只需对乘客操作
    #endif // MAINFRAM_H_INCLUDED
    


     
    2.mainFram.cpp
     
    //*Copyright  (c)2017,烟台大学计算机与控制工程学院*
    //*All rights reservrd.*
    //*文件名称 :mainFrame.h*
    //*作者:田长航*
    //*完成时间:2017年12月21日*
    //*版本号:v1.0*
    //*问题描述:界面实现函数以及各模块功能的实现函数代码*
    //*输入描述:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    //*程序输出:各模块实现功能*
    #include "mainFram.h"
    #include "linklist.h"
    #include <malloc.h>
    #include <cstdio>
    #include <iostream>
    #include <conio.h>
    #include <string.h>
    #include <fstream>
    #include <stdlib.h>
    #include "graph.h"
    using namespace std;
    /***********************************************************
    * 功能描述:主函数
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数:无
    * 返回值  :无
    * 其他说明:入口函数
    ************************************************************/
    void mainFram(DLinkList *L,pass *p,air *a,ALGraph *&G)
    {
        system("cls");//清屏
    	system("color 9f");//改变界面颜色,管理颜色为红色背景,普通服务为蓝色背景
        cout<<endl<<endl;
        cout<<"             **        *        ** ****** *       ****    ****       *         *      ******"<<endl;
        cout<<"              **      ***      **  *      *      *       *    *     * *       * *     *     "<<endl;
        cout<<"               **    ** **    **   *****  *      *       *    *    *   *     *   *    ***** "<<endl;
        cout<<"                **  **   **  **    *      *      *       *    *   *     *   *     *   *     "<<endl;
        cout<<"                 ***      ***      *      *      *       *    *  *       * *       *  *     "<<endl;
        cout<<"                  *        *       ****** ******  ****    ****  *         *         * ******"<<endl;
        cout<<endl<<endl<<endl;
        cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆    TCH Airplane Synthetic System   ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
        cout<<endl;
        cout<<"                                   ┏━━━━━━━━━━━━━┓\n";
        cout<<"                                   ┃  航空客运订票综合系统    ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃1.用户服务系统            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃2.管理员管理系统          ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃3.关于我们                ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃0.退出                    ┃\n";
        cout<<"                                   ┗━━━━━━━━━━━━━┛\n";
    	cout<<"请输入数字实现功能:"<<endl;
    	int n;
    	cin>>n;
    	switch(n)
    	{
        case 1:
            mainFram_pa(L,p,a,G);//调用用户服务认证界面
            break;
        case 2:
            if(rootlog(L,p,a,G))  //由函数返回的布尔值继续进行
            {
                getch();
                mainFram_ma(L,p,a,G); //登录成功之后,进入管理主界面
            }
            else
            {
                cout<<"密码或用户名不对!登陆失败"<<endl;
                getch();
            }
            break;
        case 3:
            system("cls");//清屏
             cout<<endl<<endl<<endl;
             cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆    TCH Airplane Synthetic System   ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;//我的信息
             cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆       航空客运订票综合系统         ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
             cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆版本号:V1.0   联系邮箱:153199613@qq.com☆☆☆☆☆☆☆☆☆☆☆"<<endl;
             cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆    烟台大学计算机与控制工程学院    ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
             getch();
    
            break;
        default:
    
            break;
    	}
    }
    /***********************************************************
    * 功能描述:用户服务系统主界面
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 认证界面
    * 返回值  :无
    * 其他说明:入口函数
    ************************************************************/
    void mainFram_pa(DLinkList *L,pass *p,air *a,ALGraph *&G)
    {
        int i1;//此变量用于存储LocateElem返回的值,判断认证顾客在链表中的位置
        pass pa1;//用于传递参数
        char name1[10];
        system("cls");
        cout<<"请输入您的身份证号来验证身份:"<<endl;
        cin>>pa1.id;
        i1=LocateElem(L,1,pa1);
        if(i1!=0)
        {
            cout<<"已确认身份合法,请输入您的姓名完成身份鉴定。"<<endl<<"请输入您的用户名:"<<endl;
            cin>>name1;
            int j=0;
            DLinkList *c=L;
            while (j<i1)
            {
                j++;
                c=c->next;
            }
                strcpy(pa1.name,c->data.name);
            if(!strcmp(name1,pa1.name))
            {
                pass *wo;
                wo=&c->data;
                cout<<"鉴定成功,您的信息如下:"<<endl;
                mainFram_pa_su(L,wo,a,G);//compare success
            }
            else
            {
                cout<<"鉴定故障,原因可能是您输入的用户名与您的身份证号不匹配。\nPress any key to continue..."<<endl;
                getch();
                mainFram(L,p,a,G);
            }
        }
        else
        {
            cout<<"该身份证号不存在,您的信息没有在数据库中,如有需要请联系管理员及时添加。"<<endl;
            cout<<"Press any key to continue..."<<endl;
            getch();
            mainFram(L,p,a,G);
        }
    
    
    }
    /***********************************************************
    * 功能描述:用户服务系统主界面1
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 用户服务主界面
    * 返回值  :无
    * 其他说明:用户服务入口窗口
    ************************************************************/
    void mainFram_pa_su(DLinkList *L,pass *p, air *a,ALGraph *&G)//认证之后的p指针是认证时的顾客,这样进行操作时,就会有目的进行修改
    {
        system("cls");//清屏
    	system("color 9f");//改变界面颜色
        cout<<endl<<endl;
        cout<<"             **        *        ** ****** *       ****    ****       *         *      ******"<<endl;
        cout<<"              **      ***      **  *      *      *       *    *     * *       * *     *     "<<endl;
        cout<<"               **    ** **    **   *****  *      *       *    *    *   *     *   *    ***** "<<endl;
        cout<<"                **  **   **  **    *      *      *       *    *   *     *   *     *   *     "<<endl;
        cout<<"                 ***      ***      *      *      *       *    *  *       * *       *  *     "<<endl;
        cout<<"                  *        *       ****** ******  ****    ****  *         *         * ******"<<endl;
        cout<<endl<<endl<<endl;
        cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆ TCH Airplane Servervice System ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
        cout<<endl;
        cout<<"                                   ┏━━━━━━━━━━━━━┓\n";
        cout<<"                                   ┃ 欢迎使用航空客运订票系统 ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃1.购买机票                ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃2.查询航班信息            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃3.学生认证                ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃0.退出                    ┃\n";
        cout<<"                                   ┗━━━━━━━━━━━━━┛\n";
    	cout<<"请输入数字实现功能:"<<endl;
    	int me;
    	cin>>me;
    	switch(me)
    	{
        case 0:
            break;
        case 1:
            system("cls");
            if(!purtic(p,a))//根据返回的布尔值进行下列程序
            {
                cout<<"购买失败,给自己节省点时间吧,看看别的航班,请不要购买没有余票的航班!"<<endl;
                getch();
                purtic(p,a);
            }
            mainFram_pa_su(L,p,a,G);
            break;
        case 2:
            system("cls");
            cout<<endl<<endl;
            cout<<"\t\t"<<"*****航班信息表*****"<<endl;
            disairline(a);
            getch();
            mainFram_pa_su(L,p,a,G);
            break;
        case 3:
            if(stu_confrim(p))//此处进行学生认证
            {
                p->ifstu=1;
                cout<<"认证成功,您在购买机票的时候将享受半价优惠。\n";
                getch();
                mainFram_pa_su(L,p,a,G);
            }
            else
            {
                cout<<"您所在的大学不存在或者未与我方合作,认证失败!\n";
                getch();
                mainFram_pa_su(L,p,a,G);
            }
            break;
    
    	}
    }
    /***********************************************************
    * 功能描述:学生认证函数
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 认证界面
    * 返回值  :认证结果
    * 其他说明:使用文件输入流
    ************************************************************/
    bool stu_confrim(pass *p)//学生认证函数
    {
        ifstream infile;
        infile.open("G://大学.txt");  //此处文件保存学校信息,只有在文件中的学校才能获得认证资格
        if(!infile) cout<<"error"<<endl;  //文件读入数据操作
        char school[20];
        char input[20];
        cout<<"请输入您所在的大学:"<<endl;
        cin>>input;
        while(infile.getline(school,sizeof(school))) //以循环的方式
        {
            if(!strcasecmp(school,input))
                return true;
        }
        return false;
    }
    
    bool purtic(pass *p,air *a)//购票函数
    {
        system("cls");
        int i;
        cout<<endl<<endl;
        cout<<"#####欢迎来到购票系统#####"<<endl;
        cout<<"请您选择购票的航班"<<endl;
        for(i=1;i<=flight_max;i++)
        {
            cout<<i<<"."<<(a+i-1)->num<<"  "<<(a+i-1)->start<<"-->"<<(a+i-1)->arrive<<"  票数剩余:"<<(a+i-1)->count<<endl;
            cout<<"单价:"<<(a+i-1)->price<<endl;
        }
        cout<<"输入0取消购买。"<<endl;
        cin>>i;
        if(i==0)
        {
            return true;
        }
        if((a+i-1)->count!=0)
        {
            float in;//purchase sucess
            if((strcmp(p->airnum,"无"))!=0)//判断该用户是否已经购买机票
            {
                cout<<"您已经买过票了,给别人个机会吧,有钱也不要任性啊!"<<endl;
                return false;
            }
            if(p->ifstu==1)//判断是否是在校学生
            {
    
                cout<<"您是在校学生,享有半价优惠。"<<endl;
                in=p->money-(a+i-1)->price*0.5;
                if(in<0)//确保不赊账
                {
                    cout<<"大哥,没钱就别出来混了,快去充点钱吧,要不连家都回不去了。\n";
                    return false;
                }
                in=p->money;
                cout<<"购买成功,账单明细:";
                p->money=p->money-(a+i-1)->price*0.5;
                strcpy(p->airnum,(a+i-1)->num);
                printf("\n您购票前账户余额:%0.2f\n您花费的金额为:%0.2f\n您当前余额为:%0.2f\n",in,(a+i-1)->price,p->money);
                cout<<"Press any key to continue..."<<endl;
                (a+i-1)->count--;
                getch();
                return true;
            }
                in=p->money-(a+i-1)->price;
                if(in<0)
                {
                    cout<<"大哥,没钱就别出来混了,快去充点钱吧,要不连家都回不去了。\n";
                    return false;
                }
                in=p->money;
                cout<<"购买成功,账单明细:";
                p->money=(p->money-(a+i-1)->price);
                strcpy(p->airnum,(a+i-1)->num);
                printf("\n您购票前账户余额:%0.2f\n您花费的金额为:%0.2f\n您当前余额为:%0.2f\n",in,(a+i-1)->price,p->money);
                cout<<"Press any key to continue..."<<endl;
                (a+i-1)->count--;
                getch();
                return true;
    
        }
        else
            return false;
    }
    /*g管理界面系统*/
    /***********************************************************
    * 功能描述:管理系统主界面
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 主界面
    * 返回值  :无
    * 其他说明:管理员入口函数
    ************************************************************/
    void mainFram_ma(DLinkList *&L,pass *p,air *a,ALGraph *&G)//管理界面
    {
        system("cls");//清屏
    	system("color 4f");//改变界面颜色
        cout<<endl<<endl;
        cout<<"             **        *        ** ****** *       ****    ****       *         *      ******"<<endl;
        cout<<"              **      ***      **  *      *      *       *    *     * *       * *     *     "<<endl;
        cout<<"               **    ** **    **   *****  *      *       *    *    *   *     *   *    ***** "<<endl;
        cout<<"                **  **   **  **    *      *      *       *    *   *     *   *     *   *     "<<endl;
        cout<<"                 ***      ***      *      *      *       *    *  *       * *       *  *     "<<endl;
        cout<<"                  *        *       ****** ******  ****    ****  *         *         * ******"<<endl;
        cout<<endl<<endl<<endl;
        cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆ TCH Airplane Reservation System ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
        cout<<endl;
        cout<<"                                   ┏━━━━━━━━━━━━━┓\n";
        cout<<"                                   ┃ 航空订票服务高级管理系统 ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃1.用户信息管理            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃2.设置票价优惠            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃3.管理航班信息            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃0.退出                    ┃\n";
        cout<<"                                   ┗━━━━━━━━━━━━━┛\n";
    	cout<<"请输入数字实现功能:"<<endl;
        int m;
        cin>>m;
        switch(m)
        {
        case 1:
            chapass(L,p,a,G); //更改用户信息
            break;
        case 2:
            float pr;
            pr=setdiscount(a);//设置折扣
            if(pr!=0)
            {
               cout<<"打折之后的票价为:"<<endl;
               cout<<pr<<endl;
               cout<<endl<<endl<<"Press any key to continue..."<<endl;
            }
            else
            {
                cout<<"设置失败!"<<endl;
            }
            getch();
            mainFram_ma(L,p,a,G);
            break;
        case 3:
            maairline(a,L,G);//管理航班信息
            mainFram_ma(L,p,a,G);
            break;
        case 0:
            break;
        default:
            cout<<"您的输入有误,系统无法提供服务,按任意键返回。"<<endl;
            mainFram_ma(L,p,a,G);
        }
    
    }
    /***********************************************************
    * 功能描述:查看航班信息
    * 输入参数:air型指针
    * 输出参数: 航班的详细信息
    * 返回值  :无
    * 其他说明:入口函数
    ************************************************************/
    void disairline(air *a)  //用户查看航班信息,表格形式,顺序结构
    {
        int i;
        printf("|航班号| | 票价 | |折扣| |起始地| |目的地| | 发车时间 | |余票|\n");
        for(i=0;i<flight_max;i++)
        {
            printf("|%-6s| |%-6.2f| |%-4.2f| |%-6s| |%-6s| | %-2d : %-2d  | |%-4d|\n",(a+i)->num,(a+i)->price,(a+i)->discount,(a+i)->start,(a+i)->arrive,(a+i)->min,(a+i)->sec,(a+i)->count);
        }
        printf("\nPress any key to continue...");
    }
    /* 用户信息管理界面 */
    /***********************************************************
    * 功能描述:用户信息更改实现界面
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 选择功能
    * 返回值  :无
    * 其他说明:更改信息,实现增删改查
    ************************************************************/
    void chapass(DLinkList *L,pass *p,air *a,ALGraph *&G)//更改顾客信息
    {
        system("cls");//清屏
        cout<<endl<<endl<<endl;
        cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆ TCH Airplane Reservation System ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
        cout<<endl;
        cout<<"                                   ┏━━━━━━━━━━━━━┓\n";
        cout<<"                                   ┃      用户信息管理界面    ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃1.查看所有用户信息        ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃2.添加一个用户            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃3.删除一个用户            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃4.更改用户信息            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃5.查找用户                ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃0.退出                    ┃\n";
        cout<<"                                   ┗━━━━━━━━━━━━━┛\n";
    	cout<<"请输入数字实现功能:"<<endl;
        int m;
        cin>>m;
        switch(m)
        {
        case 1:
            system("cls");//清屏
            DispList(L);
            getch();
            chapass(L,p,a,G);
            break;
        case 2:
            system("cls");
            int i;
            cout<<"请输入您要插入的位置:"<<endl;
            cin>>i;
            pass e;
            if(ListInsert(L,i,e))
                cout<<"信息添加成功,请按任意键返回。。。"<<endl;//插入一个节点
            else
                cout<<"添加失败,可能是超过最大名额限制或者插入的位置超过上限,请联系开发人员(17865569098)。"<<endl;
            getch();
            chapass(L,p,a,G);
            break;
        case 3:
            int i1;
            pass e1;
            system("cls");
            cout<<endl<<endl;
            cout<<"warning : Your action is sensitive operation !"<<endl<<"警告:您现在的操作为敏感操作,请慎重考虑后再行删除!"<<endl;
            cout<<"请选择删除模式"<<endl<<"1.按照身份证号删除"<<endl<<"2.按照预留手机号删除"<<endl;
            int mode;
            cin>>mode;     //此处的mode变量为模式,将模式的值传递给LocateElem函数,进行相应的操作
            if(mode==1)
            {
                cout<<"请输入您要删除用户的身份证号:"<<endl;
                cin>>e1.id;
                i1=LocateElem(L,mode,e1); //查找一个节点
                if(i1!=0)
                {
                    if(ListDelete(L,i1,e1)) //删除一个节点
                    {
                        cout<<"删除该用户信息成功!按任意键退回。。。"<<endl;
                        getch();
                        chapass(L,p,a,G);
                    }
                    else
                    {
                        cout<<"删除失败,没有找到该身份证号对应的用户。。。"<<endl;
                        getch();
                        chapass(L,p,a,G);
                    }
                }
    
                else
                {
                    cout<<"未找到符合条件的用户,查找失败。。。"<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
    
            }
            else if(mode==2)
            {
                cout<<"请输入您要删除用户的手机号:"<<endl;
                cin>>e1.phone;
                i1=LocateElem(L,mode,e1); //查找一个节点
                if(i1!=0)
                {
    
                    if(ListDelete(L,i1,e1)) //删除一个节点
                    {
                        cout<<"删除该用户信息成功!按任意键退回。。。"<<endl;
                        getch();
                        chapass(L,p,a,G);
                    }
                    else
                    {
                        cout<<"删除失败,没有找到该手机号对应的用户。。。"<<endl;
                        getch();
                        chapass(L,p,a,G);
                    }
                }
                else
                {
                    cout<<"未找到符合条件的用户,查找失败。。。"<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
            }
            break;
        case 4:
            int i3;
            pass e3;
            system("cls");//清屏
            cout<<endl<<endl<<"warning : Your action is sensitive operation !"<<endl<<"警告:您现在的操作为敏感操作,请谨慎操作!"<<endl;  //敏感操作要警告
            cout<<endl<<"####更改用户信息####"<<endl;
            cout<<"请输入您要更改的用户的身份证号:"<<endl;
            cin>>e3.id;
            i3=LocateElem(L,1,e3);
            if(i3!=0)
            {
                cout<<"查找成功,可以进行修改操作,请谨慎进行!"<<endl;
                if(ListInsert(L,i3,e3))
                {
                    cout<<"修改成功,Press any key to continue..."<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
                else
                {
                    cout<<"修改失败,可能是您没有操作权限或者操作非法!"<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
            }
            else
            {
                cout<<"未能找到符合条件的用户,Press any key to continue..."<<endl;
                getch();
                chapass(L,p,a,G);
            }
            break;
        case 5:
            system("cls");
            cout<<endl<<endl<<"#####查找用户信息#####"<<endl;
            int i2,mode2;
            pass e2;
            cout<<endl<<"请选择查找方式:"<<endl<<"1.按照身份证号查找"<<endl<<"2.按照预留手机号查找"<<endl;
            cin>>mode2;
            cout<<endl;
    
            if(mode2==1)
            {
                cout<<"请输入您要找的用户身份证号:"<<endl;
                cin>>e2.id;
                i2=LocateElem(L,mode2,e2);
                if(i2!=0)
                {
                    cout<<"查找成功!以下是身份证为"<<e2.id<<"的信息:"<<endl;
                    GetElem(L,i2,e2);
                    cout<<"|姓名\t| |     身份证号     | |性别|  |  电话号码  | |航班号\t| |学生认证|";
                    printf("\n");
                    printf("%-10s",e2.name);
                    printf(" %-20s",e2.id);
                    if(e2.sex==1)
                        cout<<"  男\t";
                    else
                        cout<<"  女\t";
                    printf("%-11s",e2.phone);
                    printf("    %-12s",e2.airnum);
                    if(e2.ifstu==1)
                        cout<<"  是"<<"\t";
                    else
                        cout<<"  否"<<"\t";
                    cout<<endl<<endl<<"按任意键继续。。。"<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
                else
                {
                    cout<<"未能查到符合条件的用户信息,Press any key to continue..."<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
            }
            else
            {
                cout<<"请输入您要找的手机号:"<<endl;
                cin>>e2.phone;
                i2=LocateElem(L,mode2,e2);
                if(i2!=0)
                {
                    cout<<"查找成功!以下是手机号为"<<e2.phone<<"的信息:"<<endl;
                    GetElem(L,i2,e2);
                    cout<<"|姓名\t| |     身份证号     | |性别|  |  电话号码  | |航班号\t| |学生认证|";
                    printf("\n");
                    printf("%-10s",e2.name);
                    printf(" %-20s",e2.id);
                    if(e2.sex==1)
                        cout<<"  男\t";
                    else
                        cout<<"  女\t";
                    printf("%-11s",e2.phone);
                    printf("    %-12s",e2.airnum);
                    if(e2.ifstu==1)
                        cout<<"  是"<<"\t";
                    else
                        cout<<"  否"<<"\t";
                    cout<<endl<<endl<<"按任意键继续。。。"<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
                else
                {
                    cout<<"未能查到符合条件的用户信息,Press any key to continue..."<<endl;
                    getch();
                    chapass(L,p,a,G);
                }
            }
            break;
        case 0:
            mainFram_ma(L,p,a,G);
            break;
        default:
            cout<<"您的指令有误,请按正确的格式输入!Press any key to continue!"<<endl;
            getch();
            chapass(L,p,a,G);
            break;
        }
    }
    /***********************************************************
    * 功能描述:设置折扣
    * 输入参数:air型指针与折扣
    * 输出参数:折扣后的票价
    * 返回值  :票价
    * 其他说明:入口函数
    ************************************************************/
    int setdiscount(air *a)
    {
        int i;
        float dis;
        system("cls");
        cout<<"请输入您想设置优惠的航班号:"<<endl;
        char hang[10];
        cin>>hang;
        for(i=0;i<flight_max;i++)
        {
            if(!strcmp(((a+i)->num),hang))
            {
                cout<<"请输入您要设置的优惠:"<<endl;
                cin>>dis;
                (a+i)->discount=dis;
                cout<<"设置成功。"<<endl;
                (a+i)->price=(a+i)->price*(a+i)->discount;
                getch();
                return (a+i)->price;
            }
        }
        cout<<"没有该航班。"<<endl;
        getch();
        return 0;
    
    }
    /*航班管理函数*/
    /***********************************************************
    * 功能描述:管理航班信息函数
    * 输入参数:air型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 功能实现
    * 返回值  :无
    * 其他说明:入口函数
    ************************************************************/
    void maairline(air *a,struct DNode *L,ALGraph *&G)
    {
        system("cls");
        cout<<endl<<endl;
        cout<<"             **        *        ** ****** *       ****    ****       *         *      ******"<<endl;
        cout<<"              **      ***      **  *      *      *       *    *     * *       * *     *     "<<endl;
        cout<<"               **    ** **    **   *****  *      *       *    *    *   *     *   *    ***** "<<endl;
        cout<<"                **  **   **  **    *      *      *       *    *   *     *   *     *   *     "<<endl;
        cout<<"                 ***      ***      *      *      *       *    *  *       * *       *  *     "<<endl;
        cout<<"                  *        *       ****** ******  ****    ****  *         *         * ******"<<endl;
        cout<<endl<<endl<<endl;
        cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆ TCH   Airplane  Airline  System ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
        cout<<endl;
        cout<<"                                   ┏━━━━━━━━━━━━━┓\n";
        cout<<"                                   ┃   航空订票航班管理系统   ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃1.更改航班信息            ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃2.显示所有航班信息        ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃0.退出                    ┃\n";
        cout<<"                                   ┗━━━━━━━━━━━━━┛\n";
        cout<<endl<<endl<<"请输入数字以实现功能:"<<endl;
        int me5;
        cin>>me5;
        switch(me5)
        {
        case 0:
            break;
        case 1:
            chairline(a,L,G);
            getch();
            break;
        case 2:
            DispAdj(G);
            getch();
            break;
        default:
            cout<<"您的指令有误,请重新输入。"<<endl;
            getch();
            maairline(a,L,G);
            break;
    
        }
    }
    /***********************************************************
    * 功能描述:更改航班信息界面
    * 输入参数:air型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 实现界面与修改实现
    * 返回值  :无
    * 其他说明:入口函数
    ************************************************************/
    void chairline(air *a,struct DNode *L,ALGraph *&G)
    {
        system("cls");
        cout<<endl<<endl;
        cout<<"          ☆☆☆☆☆☆☆☆☆☆☆☆☆ TCH   Airplane  Airline  System ☆☆☆☆☆☆☆☆☆☆☆☆☆☆"<<endl;
        cout<<endl;
        cout<<"                                   ┏━━━━━━━━━━━━━┓\n";
        cout<<"                                   ┃1.更改航班号              ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃2.放票、收票              ┃\n";
        cout<<"                                   ┃━━━━━━━━━━━━━┃\n";
        cout<<"                                   ┃0.退出                    ┃\n";
        cout<<"                                   ┗━━━━━━━━━━━━━┛\n";
         cout<<endl<<endl<<"请输入数字以实现功能:"<<endl;
        int me4;
        cin>>me4;
        switch(me4)
        {
        case 0:
            break;
        case 1:
            system("cls");
            if(chline(a,L,G))
                cout<<"修改成功!按任意键继续!"<<endl;
            else
                cout<<"您输入的航班号不存在,修改失败!"<<endl;
            getch();
            chairline(a,L,G);
            break;
        case 2:
            system("cls");
            if(chticcount(a,L,G))
                cout<<"修改成功!按任意键继续!"<<endl;
            else
                cout<<"您输入的航班号不存在或者操作非法,修改失败!"<<endl;
            getch();
            chairline(a,L,G);
            break;
        default:
            cout<<"您的指令有误,请重新输入。"<<endl;
            getch();
            maairline(a,L,G);
            break;
    
        }
    }
    /*变更航班号函数*/
    /***********************************************************
    * 功能描述:变更航班号
    * 输入参数:air型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 认证界面
    * 返回值  :无
    * 其他说明:入口函数
    ************************************************************/
    bool chline(air *a,struct DNode *L,ALGraph *&G)
    {
            system("cls");
            cout<<endl<<endl;
            cout<<"请输入您要更改的航班号:"<<endl;
            char hangn[10];
            cin>>hangn;
            int i;
            ArcNode *p;  //创建节点
            for (i=0; i<G->n; i++)   //用循环进行遍历
            {
                p=G->adjlist[i].firstarc;
                while (p!=NULL)
                {
                    if(!strcmp(G->adjlist[i].data.num,hangn))
                    {
                        char nnum[10];
                        cout<<"请输入新的航班号:"<<endl;
                        cin>>nnum;
                        strcpy(G->adjlist[i].data.num,nnum);
                        strcpy(a[i].num,nnum);
                        cout<<"修改成功!";
                        return true;
                    }
                    p=p->nextarc;
                }
            }
            return false;
    }
    /*变更航班票数函数*/
    /***********************************************************
    * 功能描述:放票收票函数
    * 输入参数:air型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 实现界面
    * 返回值  :实现结果
    * 其他说明:
    ************************************************************/
    bool chticcount(air *a,struct DNode *L,ALGraph *&G)
    {
        system("cls");
            cout<<endl<<endl;
            cout<<"请输入您要更改的航班号:"<<endl;
            char hangn[10];
            cin>>hangn;
            int i;
            ArcNode *p;
            for (i=0; i<G->n; i++)
            {
                p=G->adjlist[i].firstarc;//给p初始值
                while (p!=NULL)
                {
                    if(!strcmp(G->adjlist[i].data.num,hangn))
                    {
                        int ncount;
                        cout<<"请选择模式:1.放票 2.收票"<<endl;
                        cout<<"当前此航班剩余票数:"<<G->adjlist[i].data.count<<endl;
                        int sel;
                        cin>>sel;
                        if(sel==1)
                        {
                            cout<<"请输入放票数量:"<<endl;
                            cin>>sel;
                            ncount=G->adjlist[i].data.count+sel; //条件判断值
                            if(ncount>60)
                            {
                                cout<<"大哥,飞机不是货车,哪有那么多票啊!"<<endl;
                                return false;
                            }
                            G->adjlist[i].data.count=ncount;//同步图结构的值与线性表中的一致!!!!重要
                            a[i].count=ncount;
                            cout<<"放票成功!"<<endl;
                            return true;
                        }
                        else if(sel==2)
                        {
                            cout<<"请输入收票数量:"<<endl;
                            cin>>sel;
                            ncount=G->adjlist[i].data.count-sel;
                            if(ncount<0)
                            {
                                cout<<"大哥,票都收没了,别收了!"<<endl;
                                return false;
                            }
                            G->adjlist[i].data.count=ncount;
                            a[i].count=ncount;
                            cout<<"收票成功!"<<endl;
                            return true;
                        }
                        else
                        {
                            cout<<"error!错误输入!"<<endl;
                            return false;
                        }
                    }
                    p=p->nextarc;
                }
            }
            return false;
    }
    /*管理员登录函数*/
    /***********************************************************
    * 功能描述:管理员登录
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 认证界面
    * 返回值  :无
    * 其他说明:管理员入口函数
    ************************************************************/
    bool rootlog(struct DNode *L,pass *p,air *a,ALGraph *&G)
    {
        system("cls");
        char username[10]="root";
        char password[10]="123456";
        char username1[10];
        char password1[10];
        cout<<endl<<endl<<endl<<endl;
        cout<<"              ********************************************"<<endl;
        cout<<"              *                                          *"<<endl;
        cout<<"              *            欢迎进入管理登录系统          *"<<endl;
        cout<<"              *                                          *"<<endl;
        cout<<"              ********************************************"<<endl;
        cout<<endl<<endl<<endl<<endl;
        cout<<"                              请输入用户名:";
        cin>>username1;
        cout<<endl;
        cout<<"                              请输入密码:";
        cin>>password1;
        if((!strcmp(username1,username))&& (!strcmp(password1,password)))  //匹配固定密码
        {
            cout<<"登录成功!"<<endl;
            return true;
        }
        else
            return false;
    
    }
    

     
     
    3.linklist.h
    //*Copyright  (c)2017,烟台大学计算机与控制工程学院*
    //*All rights reservrd.*
    //*文件名称 :linklist.h*
    //*作者:田长航*
    //*完成时间:2017年12月21日*
    //*版本号:v1.0*
    //*问题描述:定义双链表数据结构的代码、宏定义、要实现算法的函数的声明*
    //*输入描述:无*
    //*程序输出:无*
    #ifndef LINKLIST_H_INCLUDED
    #define LINKLIST_H_INCLUDED
    #include "mainFram.h"
    #include "graph.h"
    typedef struct passanager NewType;
    typedef struct DNode        //定义双链表结点类型
    {
        NewType data;
        struct DNode *prior;    //指向前驱结点
        struct DNode *next;     //指向后继结点
    } DLinkList;
    void CreateListF(DLinkList *&L,NewType a[],int n);//头插法建双链表
    void CreateListR(DLinkList *&L,NewType a[],int n);//尾插法建双链表
    void InitList(DLinkList *&L); //初始化双链表
    void DestroyList(DLinkList *&L); //销毁双链表
    bool ListEmpty(DLinkList *L); //判断链表是否为空
    int ListLength(DLinkList *L); //求链表的长度
    void DispList(DLinkList *L); //输出链表
    bool GetElem(DLinkList *L,int i,NewType &e); //获取节点的值,并按要求输出输出
    int LocateElem(DLinkList *L,int mode,NewType e); //查找一个节点
    bool ListInsert(DLinkList *&L,int i,NewType e) ;//插入一个节点
    bool ListDelete(DLinkList *&L,int i,NewType &e); //删除一个节点
    #endif // LINKLIST_H_INCLUDED
    

     
    4.linklist.cpp
    //*Copyright  (c)2017,烟台大学计算机与控制工程学院*
    //*All rights reservrd.*
    //*文件名称 :linklist.cpp*
    //*作者:田长航*
    //*完成时间:2017年12月21日*
    //*版本号:v1.0*
    //*问题描述:双链表数据结构的函数实现代码*
    //*输入描述:Dlinklist型指针以及air、pass型指针*
    //*程序输出:无*
    #include <stdio.h>
    #include <malloc.h>
    #include <conio.h>
    #include <iostream>
    #include "linklist.h"
    #include <string.h>
    using namespace std;
    /***********************************************************
    * 功能描述:头插法创建双链表
    * 输入参数:Dlinklist 型引用指针,NewType 型数组首地址,插入数量
    * 输出参数: 创建结果
    * 返回值  :无
    * 其他说明:无
    ************************************************************/
    void CreateListF(DLinkList *&L,NewType a[],int n)
    //头插法建双链表
    {
        DLinkList *s;
        int i;
        L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点
        L->prior=L->next=NULL;
        for (i=0; i<n; i++)
        {
            s=(DLinkList *)malloc(sizeof(DLinkList));//创建新结点
            s->data=a[i];
            s->next=L->next;            //将*s插在原开始结点之前,头结点之后
            if (L->next!=NULL) L->next->prior=s;
            L->next=s;
            s->prior=L;
        }
    }
    /***********************************************************
    * 功能描述:尾插法创建双链表
    * 输入参数:Dlinklist 型引用指针,NewType 型数组首地址,插入数量
    * 输出参数: 创建结果
    * 返回值  :无
    * 其他说明:无
    ************************************************************/
    void CreateListR(DLinkList *&L,NewType a[],int n)
    //尾插法建双链表
    {
        DLinkList *s,*r;
        int i;
        L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点
        L->prior=L->next=NULL;
        r=L;                    //r始终指向终端结点,开始时指向头结点
        for (i=0; i<n; i++)
        {
            s=(DLinkList *)malloc(sizeof(DLinkList));//创建新结点
            //a[i].signinfo();
            s->data=a[i];
            r->next=s;
            s->prior=r; //将*s插入*r之后
            r=s;
        }
        r->next=NULL;           //终端结点next域置为NULL
    }
    /***********************************************************
    * 功能描述:插入链表
    * 输入参数:Dlinklist 型引用指针
    * 输出参数:Dlinklist 型指针引用
    * 返回值  :无
    * 其他说明:无
    ************************************************************/
    void InitList(DLinkList *&L)
    {
        L=(DLinkList *)malloc(sizeof(DLinkList));   //创建头结点
        L->prior=L->next=NULL;
    }
    /***********************************************************
    * 功能描述:销毁链表
    * 输入参数:Dlinklist 型引用指针
    * 输出参数:Dlinklist 型指针引用
    * 返回值  :无
    * 其他说明:无
    ************************************************************/
    void DestroyList(DLinkList *&L)
    {
        DLinkList *p=L,*q=p->next;
        while (q!=NULL)
        {
            free(p);
            p=q;
            q=p->next;
        }
        free(p);
    }
    /***********************************************************
    * 功能描述:判断链表是否为空
    * 输入参数:Dlinklist 型指针
    * 输出参数:
    * 返回值  :bool型变量表示结果
    * 其他说明:无
    ************************************************************/
    bool ListEmpty(DLinkList *L)
    {
        return(L->next==NULL);
    }
    /***********************************************************
    * 功能描述:求链表长度
    * 输入参数:Dlinklist 型指针
    * 输出参数:长度
    * 返回值  :int整形长度信息
    * 其他说明:无
    ************************************************************/
    int ListLength(DLinkList *L)
    {
        DLinkList *p=L;
        int i=0;
        while (p->next!=NULL)
        {
            i++;
            p=p->next;
        }
        return(i);
    }
    /***********************************************************
    * 功能描述:按格式显示链表内容
    * 输入参数:Dlinklist 型指针
    * 输出参数:显示列表
    * 返回值  :无
    * 其他说明:无
    ************************************************************/
    void DispList(DLinkList *L)
    {
        DLinkList *p=L->next;
        cout<<"|姓名\t| |     身份证号     | |性别|  |  电话号码  | |航班号\t| |学生认证| |用户资产|";//按格式输出
        while (p!=NULL)
        {
            printf("\n");
            printf("%-10s",p->data.name);
            printf(" %-20s",p->data.id);
            if(p->data.sex==1)
                cout<<"  男\t";
            else
                cout<<"  女\t";
            printf("%-11s",p->data.phone);
            printf("    %-12s",p->data.airnum);
            if(p->data.ifstu==1)
                cout<<"  是";
            else
                cout<<"  否";
            printf("        %0.2f",p->data.money);//p->data.display();   //一定要回头改,将全局变量问题解决之后
            p=p->next;
        }
        printf("\n信息显示完毕,请按任意键继续。。。\n");
        getch();
    }
    /***********************************************************
    * 功能描述:获取节点值
    * 输入参数:Dlinklist 型指针,位置,NewType型引用结构体
    * 输出参数:无
    * 返回值  :bool型结果
    * 其他说明:无
    ************************************************************/
    bool GetElem(DLinkList *L,int i,NewType &e)
    {
        int j=0;
        DLinkList *p=L;
        while (j<i && p!=NULL)
        {
            j++;
            p=p->next;
        }
        if (p==NULL)
            return false;
        else
        {
            e=p->data;
            return true;
        }
    }
    /***********************************************************
    * 功能描述:获取用户位置
    * 输入参数:Dlinklist 型引用指针,模式,NewType 型
    * 输出参数:Dlinklist 型指针引用
    * 返回值  :int型位置
    * 其他说明:无
    ************************************************************/
    int LocateElem(DLinkList *L,int mode,NewType e)
    {
        int n=1;
        DLinkList *p=L->next;
        if(mode==1)
        {
           while (p!=NULL && (strcmp(p->data.id,e.id)))
            {
                n++;
                p=p->next;
            }
            if (p==NULL)
                return(0);
            else
                return(n);
        }
        else if(mode==2)
        {
            while (p!=NULL && (strcmp(p->data.phone,e.phone)))
            {
                n++;
                p=p->next;
            }
            if (p==NULL)
                return(0);
            else
                return(n);
        }
        else
        {
            cout<<"您输入的模式有误,不能完成您的要求。。。"<<endl;
            getch();
            return(0);
        }
    
    }
    bool ListInsert(DLinkList *&L,int i,NewType e)
    {
        cout<<endl<<endl<<endl;
        cout<<"请输入该用户的用户名:"<<endl;
        cin>>e.name;
        cout<<"请输入该用户的身份证号:"<<endl;
        cin>>e.id;
        cout<<"请输入该用户的缴存金额:"<<endl;
        cin>>e.money;
        cout<<"请输入该用户的性别(男为1,女为0):"<<endl;
        cin>>e.sex;
        cout<<"请输入该用户的预留手机号:"<<endl;
        cin>>e.phone;
        strcpy(e.airnum,"无");
        e.ifstu=0;
        int j=0;
        DLinkList *p=L,*s;
        while (j<i-1 && p!=NULL)
        {
            j++;
            p=p->next;
        }
        if (p==NULL)    //未找到第i-1个结点
            return false;
        else            //找到第i-1个结点*p
        {
            s=(DLinkList *)malloc(sizeof(DLinkList));   //创建新结点*s
            s->data=e;
            s->next=p->next;        //将*s插入到*p之后
            if (p->next!=NULL) p->next->prior=s;
            s->prior=p;
            p->next=s;
            return true;
        }
    }
    /***********************************************************
    * 功能描述:删除用户实现
    * 输入参数:Dlinklist 型引用指针 int型位置 NewType临时
    * 输出参数:删除后的链表
    * 返回值  :bool型结果
    * 其他说明:无
    ************************************************************/
    bool ListDelete(DLinkList *&L,int i,NewType &e)
    {
        int j=0;
        DLinkList *p=L,*q;
        while (j<i-1 && p!=NULL)
        {
            j++;
            p=p->next;
        }
        if (p==NULL)                //未找到第i-1个结点
            return false;
        else                        //找到第i-1个结点*p
        {
            q=p->next;              //q指向要删除的结点
            if (q==NULL)
                return false;       //不存在第i个结点
            e=q->data;
            p->next=q->next;        //从单链表中删除*q结点
            if (p->next!=NULL) p->next->prior=p;
            free(q);                //释放*q结点
            return true;
        }
    }
    

     
     
    5.graph.h
    //*Copyright  (c)2017,烟台大学计算机与控制工程学院*
    //*All rights reservrd.*
    //*文件名称 :graph.h*
    //*作者:田长航*
    //*完成时间:2017年12月21日*
    //*版本号:v1.0*
    //*问题描述:定义图数据结构的代码、宏定义、要实现算法的函数的声明*
    //*输入描述:无*
    //*程序输出:无*
    #ifndef GRAPH_H_INCLUDED
    #define GRAPH_H_INCLUDED
    #define MAXV 5               //最大顶点个数
    #define INF 32767       //INF表示∞
    #include "mainFram.h"
    #include "linklist.h"
    //0烟1德2聊3菏
    //0-1 0-2 1-3 2-3 3-0
    typedef char InfoType;
    
    //以下定义邻接矩阵类型
    typedef struct
    {
        int no;                     //顶点编号
        InfoType info[10];              //顶点其他信息,在此存放带权图权值
    } VertexType;                   //顶点类型
    
    typedef struct                  //图的定义
    {
        int edges[MAXV][MAXV];      //邻接矩阵
        int n,e;                    //顶点数,弧数
        VertexType vexs[MAXV];      //存放顶点信息
    } MGraph;                       //图的邻接矩阵类型
    
    //以下定义邻接表类型
    typedef struct ANode            //弧的结点结构类型
    {
        int adjvex;                 //该弧的终点位置
        struct ANode *nextarc;      //指向下一条弧的指针
        int info;              //该弧的相关信息,这里用于存放权值
    } ArcNode;
    
    typedef struct airplane Vertex;
    
    typedef struct Vnode            //邻接表头结点的类型
    {
        Vertex data;                //顶点信息
        int count;                  //存放顶点入度,只在拓扑排序中用
        ArcNode *firstarc;          //指向第一条弧
    } VNode;
    
    typedef VNode AdjList[MAXV];    //AdjList是邻接表类型
    
    typedef struct
    {
        AdjList adjlist;            //邻接表
        int n,e;                    //图中顶点数n和边数e
    } ALGraph;                      //图的邻接表类型
    
    //功能:由一个反映图中顶点邻接关系的二维数组,构造出用邻接矩阵存储的图
    //参数:Arr - 数组名,由于形式参数为二维数组时必须给出每行的元素个数,在此将参数Arr声明为一维数组名(指向int的指针)
    //      n - 矩阵的阶数
    //      g - 要构造出来的邻接矩阵数据结构
    void ArrayToList(int *Arr, int n, ALGraph *&,air *&a); //用普通数组构造图的邻接表
    void MatToList(MGraph g,ALGraph *&G);//将邻接矩阵g转换成邻接表G
    void DispAdj(ALGraph *G);//输出邻接表G
    /*航班信息管理函数声明*/
    //此处函数传值为airline结构体类型指针,将存放航班信息的头指针传递过来,进而可以实现遍历操作,增删改查
    //传值还有DNode型指针,由于使用别名会造成其他头文件无法识别,故此处用前向声明,解决此矛盾,此为顾客链表的头结点
    //图结构ALGraph型指针,传递此参数便于对图结构存储的信息进行操作,要注意与airline的数据统一
    void maairline(air *a,struct DNode *L,ALGraph *&G);//航班管理界面,界面函数无需返回值
    void chairline(air *a,struct DNode *L,ALGraph *&G);//更改航班信息界面
    bool chline(air *a,struct DNode *L,ALGraph *&G);//更改航班号实现,返回布尔值判断是否修改成功
    bool chticcount(air *a,struct DNode *L,ALGraph *&G);//放票收票实现,返回布尔值判断是否修改成功
    /*主界面函数声明*/
    //此处函数传值多一个passanager型指针,将乘客的头结点传入可以,对乘客进行修改及其他操作
    void mainFram(struct DNode *L,pass *p,air *a,ALGraph *&G);  //系统主界面
    void mainFram_ma(struct DNode *&L,pass *p,air *a,ALGraph *&G);//管理员管理主界面
    void chapass(struct DNode *L,pass *p,air *a,ALGraph *&G); //用户信息管理界面
    void mainFram_pa(struct DNode *L,pass *p,air *a,ALGraph *&G);//顾客服务主界面认证
    void mainFram_pa_su(struct DNode *L,pass *p,air *a,ALGraph *&G);//顾客服务主界面
    bool rootlog(struct DNode *L,pass *p,air *a,ALGraph *&G);//管理员登录函数,此处声明为布尔型,返回登录成功与否的状态
    bool purtic(pass *p,air *a); //购票实现,返回布尔型值判断是否购票成功
    #endif // GRAPH_H_INCLUDED
    

     
    6.graph.cpp
    //*Copyright  (c)2017,烟台大学计算机与控制工程学院*
    //*All rights reservrd.*
    //*文件名称 :graph.cpp*
    //*作者:田长航*
    //*完成时间:2017年12月21日*
    //*版本号:v1.0*
    //*问题描述:定义栈数据结构的代码、宏定义、要实现算法的函数的声明*
    //*输入描述:ALgraph型指针*
    //*程序输出:各种实现*
    #include <stdio.h>
    #include <malloc.h>
    #include "graph.h"
    #include <iostream>
    using namespace std;
    //功能:由一个反映图中顶点邻接关系的二维数组,构造出用邻接矩阵存储的图
    //参数:Arr - 数组名,由于形式参数为二维数组时必须给出每行的元素个数,在此将参数Arr声明为一维数组名(指向int的指针)
    //      n - 矩阵的阶数
    //      g - 要构造出来的邻接矩阵数据结构
    /***********************************************************
    * 功能描述:数组转邻接表
    * 输入参数:air型指针,pass型指针,Dlinklist型指针,ALGRAPH型指针
    * 输出参数: 认证界面
    * 返回值  :无
    * 其他说明:入口函数
    ************************************************************/
    void ArrayToList(int *Arr, int n, ALGraph *&G, air *&a)
    {
        int i,j,count=0;  //count用于统计边数,即矩阵中非0元素个数
        ArcNode *p;
        G=(ALGraph *)malloc(sizeof(ALGraph));
        G->n=n;
        for (i=0; i<n; i++)                 //给邻接表中所有头节点的指针域置初值
            G->adjlist[i].firstarc=NULL;
        for (i=0; i<n; i++)                 //检查邻接矩阵中每个元素
            for (j=n-1; j>=0; j--)
                if (Arr[i*n+j]!=0)      //存在一条边,将Arr看作n×n的二维数组,Arr[i*n+j]即是Arr[i][j]
                {
                    p=(ArcNode *)malloc(sizeof(ArcNode));   //创建一个节点*p
                    p->adjvex=j;
                    p->info=Arr[i*n+j];
                    p->nextarc=G->adjlist[i].firstarc;      //采用头插法插入*p
                    G->adjlist[i].firstarc=p;
                    G->adjlist[i].data=a[i];
                }
    
        G->e=count;
    }
    /***********************************************************
    * 功能描述:
    * 输入参数:Dlinklist 型引用指针
    * 输出参数:Dlinklist 型指针引用
    * 返回值  :无
    * 其他说明:图算法库
    ************************************************************/
    void DispAdj(ALGraph *G)
    //输出邻接表G
    {
        cout<<endl<<endl;
        cout<<"当前的航班信息为:"<<endl;
        int i;
        ArcNode *p;
        for (i=0; i<G->n; i++)
        {
            p=G->adjlist[i].firstarc;
            printf("%5s: ",G->adjlist[i].data.start);//首先输出起始地点
            while (p!=NULL)
            {
                printf("-->终止地:%s/里程:%dkm/余票:%d/票价:%0.2f ",G->adjlist[i].data.arrive,p->info,G->adjlist[i].data.count,G->adjlist[i].data.price);//按格式输出
                p=p->nextarc;//实现循环
            }
            printf("\n");
        }
    }
    

    7.main.cpp
    //*Copyright  (c)2017,烟台大学计算机与控制工程学院*
    //*All rights reservrd.*
    //*文件名称 :main.cpp*
    //*作者:田长航*
    //*完成时间:2017年12月21日*
    //*版本号:v1.0*
    //*问题描述:主函数,用于初始化某些存储结构,并对各个源文件进行传值*
    //*输入描述:各类初始数据*
    //*程序输出:无*
    #include <iostream>
    #include <cstdio>
    #include <malloc.h>
    #include <conio.h>
    #include "mainFram.h"
    #include "linklist.h"
    #include "graph.h"
    using namespace std;
    /***********************************************************
    * 功能描述:主函数
    * 输入参数:无
    * 输出参数:无
    * 返回值  :int
    * 其他说明:给所有功能实现主界面函数传值,并初始化一些数据
    ************************************************************/
    int main()
    {
        ALGraph *G;//图结构传值使用该指针,ALGraph型
        int gr[4][4]=   //此数组存储航班路线信息,弧权值为里程
        {
            {0,200,300,0},
            {0,0,0,50},
            {0,0,0,100},
            {700,0,0,0}
        };
        air *conver;//传递航班信息
        air a[flight_max]=
        {
            {"SD001",200,0,"烟台","德州",22,10},//航班信息SD001烟台-->德州,SD002德州-->菏泽,SD003德州-->烟台
            {"SD002",200,0,"烟台","聊城",17,55},
            {"SD003",200,0,"聊城","菏泽",01,16},
            {"SD004",200,0,"德州","菏泽",06,30},
            {"SD005",200,0,"菏泽","烟台",02,22},
        };//初始化赋值
        conver=a;
        ArrayToList(gr[0],4,G,conver);   //将数组转换为邻接表形式,存储航班路线信息,其顶点信息为航班信息
        pass p[5]=
        {
            {"tch","37256464467464655",300,0,"无",1,"17888888888"},
            {"zx","372458199823236636",1000,1,"无",1,"17899999999"},
            {"hcj","375864645531154566",600,1,"无",0,"17854545454"},
            {"zqb","376545555578951323",500,0,"无",0,"17877777777"},
            {"zkw","371165456486453125",1500,1,"无",0,"17892229222"}
        };//初始化乘客链表
        DLinkList *l;
        InitList(l);
        CreateListR(l,p,5);  //创建双链表
        while(1)
            mainFram(l,p,a,G);
        return 0;
    }
    

     

     
    运行结果截图如下:
     
    展开全文
  • C++课程设计:航空客运订票系统工程文件 基于C++程序设计基础,实现了多级用户管理。乘客用户可以查询航班,根据旅客提出的终点站名输出信息;根据提供的航班号进行购票,可选择购票数,若有余票,则为用户办理订票...
  • 用C语言写的,航空客运订票系统,字符界面,适合数据结构的学习者下载学习。
  • 航空客运订票系统,包括实验报告,代码,exe
  • 数据结构课程设计 航空客运订票系统 课程设计报告 设计名称 数据结构课程设计 选题名称 航空客运订票系统 姓名张庆凤 学号 专业班级 计算机科学与技术 系院 计算机工程学院 设计时间 .12.19~ .12.30 设计地点 软件...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 330
精华内容 132
关键字:

航空客运订票系统