⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 airline.cpp

📁 数据结构课程设计航空定票系统原代码和说明书。
💻 CPP
字号:
//数据结构 课程设计 
/*
订票系统(A类)
功能要求:
(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
(4)退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
(5)修改航班信息:当航班信息改变可以修改航班数据文件
*/

#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<iomanip.h>
#include<stdlib.h>

struct airticket   
{
	char IDcard[18];  //身份证号码  35058219880808853x
    int num;         //航班号
	int day;         //日期
    char time[50];   //时间
    char count[50];  //票数
	char start[50];  //起飞城市
	char ends[50];   //终点城市
	airticket *next;
};

void main();
FILE *fp;
airticket * head=NULL;
void fn();   //输出功能函数声明

airticket * Create()   //创建链表
{
	int flag;
	airticket * ps;
	airticket * pEnd;
	ps=new airticket;   //给ps开辟空间
	//
	head=ps;      //把ps 的地址赋给head,链表的首地址
	//
    cout<<"航班号:";
    cin>>ps->num;
	if (ps->num==0)
	{
		fn();
	}
    cout<<"日期:";
    cin>>ps->day;
	
    cout<<"时间: ";
    cin>>ps->time;
	
	cout<<"身份证号:";
	cin>>ps->IDcard;
	
	cout<<"票数: ";
	cin>>ps->count;
	
	cout<<"起点:";
	cin>>ps->start;
	
    cout<<"终点:";
	cin>>ps->ends;
	
    cout<<endl<<endl;
	//cout<<"如果需要继续服务请按键选择,退出请按0!";
	
    pEnd=ps;
	ps=new airticket;
    while(flag)
	{
		cout<<"航班号:";
		cin>>ps->num;
		flag=ps->num;
		if(flag==0)
			break;
		//while(ps->num!=0)
		//	{
		//if(head==NULL)
		//	head=ps;
		//else
		pEnd->next=ps;
		pEnd=ps;
		
		cout<<"日期: ";
		cin>>ps->day;
		
		cout<<"时间: ";
		cin>>ps->time;
		
		cout<<"身份证号:";
		cin>>ps->IDcard;
		
		cout<<"票数: ";
		cin>>ps->count;
		
		cout<<"起点:";
		cin>>ps->start;
		
		cout<<"终点:";
		cin>>ps->ends;
		
        ps=new airticket;
		cout<<endl<<endl;
	}
    pEnd->next=NULL;
    return head;
}


void Save(airticket * head1)    //保存信息输出到磁盘文件上
{
	if((fp=fopen("BookAirTicket.txt","ab"))==NULL)        //ab 追加   向二进制文件尾增加数据
	{
		return;
	}
	for(;head1;head1=head1->next)
        fwrite(head1,sizeof(struct airticket),1,fp);
	fclose(fp);
}


void  Book()//功能1:订票
{
	airticket * head1=Create();
    Save(head1);
}


void ReturnBook()//功能2:退票 
{
    airticket *tail, *temp=new airticket;
    head=NULL;
	if((fp=fopen("BookAirTicket.txt","rb"))==NULL)      //rb 只读   //为输入打开一个二进制文件
	{
		//system("cls");
        printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
        getchar();
		fn();
	}
    while((fread(temp,sizeof(airticket),1,fp))==1)
	{
		if(head==NULL)
		{
			head=tail=temp;head->next=NULL;
		}
		else
		{
			temp->next=NULL;
			tail->next=temp;
			tail=temp;
		}
		temp=new airticket;
	}
	fclose(fp);
	int num;
	if(!head)
	{
		cout<<"\n数据为空!\n";
		return;
	}
	temp=tail=head;
	cout<<"请输入想退机票的航班号:";
	cin>>num;
	
	int tip=0;
	temp=tail=head;
	for(;tail;tail=tail->next)
	{
		if(head->num==num)
		{
			head=tail->next;
			cout<<"你已经成功完成退票"<<endl;
			tip=1;
		}
		else 
			if(tail->num==num)
			{
				temp->next=tail->next;
				cout<<"你已经成功完成退票"<<endl;
				tip=1;
			}
	}
	if (tip==0)
	{
		cout<<"退票失败! 没有你所查找的信息!"<<endl;
	}
	
	if((fp=fopen("BookAirTicket.txt","wb"))==NULL)     //只写  为输出打开一个二进制文件  
		return;
    for(;head;head=head->next)
        fwrite(head,sizeof(airticket),1,fp);
	fclose(fp);
}


void watch()//功能3:查看信息
{
	airticket *tail, *temp=new airticket;
    head=tail=NULL;
	int flag=1;
	if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
	{
		//system("cls");
        printf("出错,请检查文件是否存在,按任意键返回主菜单\n");//出错提示
        main();
	}
	
    while((fread(temp,sizeof(struct airticket),1,fp))==1)
	{
		if(head==NULL)
		{
			head=tail=temp;
			head->next=NULL;
		}
		else
		{
			temp->next=NULL;
			tail->next=temp;
			tail=temp;
		}
		cout<<endl;
		cout<<"航班号:"<<tail->num<<endl;
		cout<<"日期:"<<tail->day<<endl;
		cout<<"时间:"<<tail->time<<endl;
		cout<<"身份证号:"<<tail->IDcard<<endl;
		cout<<"票数:"<<tail->count<<endl;
        cout<<"起点站:"<<tail->start<<endl;
        cout<<"终点站:"<<tail->ends<<endl;
		temp=new airticket;
	}
    if(!head)
	{
		cout<<"\n数据为空!\n";
		return;
	}
	delete tail,temp;
	fclose(fp);
}

void  search_num()//查找航班号
{
	int num;
	int k=0;
	airticket *tail, *temp=new airticket;
    head=NULL;
	if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
	{
        printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
        getchar();
		fn();
	}
    while((fread(temp,sizeof(airticket),1,fp))==1)
	{
		if(head==NULL)
		{
			head=tail=temp;
			head->next=NULL;
		}
		else
		{
			temp->next=NULL;
			tail->next=temp;
			tail=temp;
		}
		temp=new airticket;
	}
	cout<<"请输入所要查找航班号:"<<endl;
	cin>>num;
	if(head==NULL)
	{
		printf("数据为空!");
		fn();
	}
	for(;head;head=head->next)
		if(head->num==num)
		{
			cout<<endl<<"找到相匹配的信息"<<endl;
			cout<<"航班号是:"<<head->num<<","<<"日期是:"<<head->day<<",";
			cout<<"时间是(星期):"<<head->time<<",";
			cout<<"身份证号是:"<<head->IDcard<<","<<"票数是:"<<head->count<<",";
			cout<<"起点站是:"<<head->start<<","<<"终点站是:"<<head->ends<<endl;
            k=1;
		}
	        
		while (!k)
		{
			cout<<"没有你所查找的信息!"<<endl;break;
		}
			delete tail,temp;
		fclose(fp);
loop :cout<<endl<<"是否继续? 是请按'1',否请按(0)."<<endl;
	  cin>>k;
	  switch(k)
	  {	
	  case 1:
		  search_num();break;
	  case 0:
		  fn();break;
	  default:
		  cout<<"按键错误!请重新按键!"<<endl;
		  goto loop;break;
	  }
}

void search_day()//查找航班日期
{
	int day,m=0;
	airticket *tail, *temp=new airticket;
    head=NULL;
	if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
	{
        cout<<"出错,请检查文件是否存在,按任意键返回主菜单"<<endl;//出错提示
        getchar();
		fn();
	}
    while((fread(temp,sizeof(airticket),1,fp))==1)
	{
		if(head==NULL)
		{
			head=tail=temp;
			head->next=NULL;
		}
		else
		{
			temp->next=NULL;
			tail->next=temp;
			tail=temp;
		}
		temp=new airticket;
	}
	cout<<"请输入所要查找的飞行日期:"<<endl;
	cin>>day;
	if(head==NULL)
	{
		cout<<endl;
		cout<<"数据为空!"<<endl;
		fn();
	}
	for( ; head; head=head->next)
		if(head->day==day)
		{
			cout<<endl<<"找到相匹配的信息"<<endl;
			cout<<"航班号是:"<<head->num<<","<<"日期是:"<<head->day<<",";
			cout<<"时间是:"<<head->time<<",";
			cout<<"身份证号:"<<head->IDcard<<","<<"票数是:"<<head->count<<",";
			cout<<"起点站是:"<<head->start<<","<<"终点站是:"<<head->ends<<endl<<endl;
		    m=1;
		}
		while (!m)
		{
			cout<<"没有你所查找的信息!"<<endl;
			m=0;
			break;
		}
		delete tail,temp;
		fclose(fp);
loop:cout<<endl<<"是否继续?是(按1),否(按0):"<<endl;
		cin>>m;
		switch(m)
		{  
		case 1:
			search_day();break;
        case 0:
			fn();break;
		default:
			cout<<"按键错误!请重新按键!"<<endl;
			goto loop;
			break;
		}
}

void searchticket()  //功能4:查询航线
{
	int i;
	cout<<"请选择按键 "<<endl;
	cout<<endl<<"按航班号查询请按(1),按日期查询请按(2),返回请按(0)."<<endl;
	cin>>i;
	switch(i)
	{ 
	case 1:
		search_num();break;
	case 2:
		search_day();break;
	case 0:
		fn();break;
	default:cout<<"按键错误!请重新按键!"<<endl;
	}
	fn();
}

void change()//功能5:修改航班信息(当修改信息不存在时,不运行)
{
	int num,k=1;
	int i=0;
	airticket temp;
	if((fp=fopen("BookAirTicket.txt","rb+"))==NULL)
	{
        printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
	}
	cout<<"请输入所要修改的航班号:"<<endl;
	cin>>num;
	
	while((fread(&temp,sizeof(airticket),1,fp))==1)
	{
		i++;
		
		if(temp.num==num)
		{
			cout<<"修改航班号\""<<num<<"\"的航班信息"<<endl;
			cout<<"修改后航班号是:";
			cin>>temp.num;
			
			cout<<"修改后日期是:";
			cin>>temp.day;
			cout<<"修改后时间是:";
			cin>>temp.time;
			cout<<"修改后的身份证号:";
			cin>>temp.IDcard;
			cout<<"修改后票数是:";
			cin>>temp.count;
			cout<<"修改后起点站是:";
			cin>>temp.start;
			cout<<"修改后终点站是:";
			cin>>temp.ends;
			fseek(fp,(i-1)*sizeof(airticket),0);  //fseek(文件类型指针,位移量,起始点)
			fwrite(&temp,sizeof(airticket),1,fp);  
			fseek(fp,0,0); 
			k=0;
			break;
		}
	}
	if (k)
	{
		cout<<endl<<"没有你所查找的信息!"<<endl;
	}
	   fclose(fp);
}

void fn()    //输出信息函数
{
	int i=1;
	while(i)
	{
		cout<<endl<<endl;        //打印提示信息
		cout<<"                     ★★★★★服务信息★★★★★  "<<endl<<endl;   
		cout<<"                ※1   订购机票(航班号为0结束输入)  ※"<<endl;
		cout<<"                ※2   返退机票                     ※"<<endl;
		cout<<"                ※3   查看订票信息                 ※"<<endl;
		cout<<"                ※4   查询航班信息                 ※"<<endl;
		cout<<"                ※5   修改航班信息                 ※"<<endl;
		cout<<"                ※0   结束服务 退出系统            ※"<<endl;
		
		cout<<"请选择按键(0-5):";
		cin>>i;
		cout<<endl;
		//if(i>=0 && i<=5)
		//{
		switch(i)
		{
		case 0:
			exit(0);
		case 1: 
			Book();break;  //进入定票系统
		case 2:
			ReturnBook();break;   //进入退票系统
		case 3:
			watch();break;     //查看定票信息
		case 4: 
			searchticket();break;  //查询航班信息
		case 5: 
			change();break;   //修改航班
			//case 6:
			//	cout<<"谢谢使用! "<<endl;
			//	break;
		default:
			cout<<"按键错误!请重新按键!"<<endl;	
		}
		//}
		//	else
		//		cout<<"按键错误!请重新按键!"<<endl;
		//cout<<endl;
	}
}



//主函数
void main()
{
	system("color 1f");
	system("title **欢迎进入中国民航管理系统**");  //指定命令提示窗口的标题
	int j=1;
	while(j)
	{
		cout<<"                 $---------------------------------$"<<endl;
		cout<<"                 |                                 |"<<endl;
		cout<<"                 |  **欢迎进入中国民航管理系统**   |"<<endl;
		cout<<"                 |                                 |"<<endl;
		cout<<"                 @---------------------------------@"<<endl<<endl;
		
		//cout<<"管理员进入请按1,客户进入请按2: "<<endl;
		//cin>>j;
		//if(j>=1&&j<=2)
		//{
		//			switch(j)
		//			{
		//			case 1:
		//{
		// 					char f[]="2005";    //设置密码
		// 					printf("请输入密码并以回车键结束(密码是2005):\n\n");
		// 					scanf("%s",f);          //读取密码
		// 					if(strcmp(f,"2005")==0)
		fn();//密码正确是时进入系统
		// 					else
		// 						cout<<"密码错误!请重新选择按键!"<<endl;
		//};break;
		
		//			case 2:
		// 				{				
		// 					cout<<"^_^客户能查看和查询航空信息^_^"<<endl;
		// 					cout<<endl<<"按1查看信息,按2查询信息:";
		// 					
		// 					int m;
		// 					cin>>m;
		// 					if(m>=1&&m<=2)
		// 					{ 
		// 						switch(m)
		// 						{
		// 						case 1:
		// 							watch();break;
		// 						case 2:
		// 							{
		// 								int num;
		// 								int k=1;
		// 								airticket *tail, *temp=new airticket;
		// 								head=NULL;
		// 								if((fp=fopen("BookAirTicket.txt","rb"))==NULL)
		// 								{
		// 									printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示
		// 									getchar();
		// 									fn();
		// 								}
		// 								while((fread(temp,sizeof(airticket),1,fp))==1)
		// 								{
		// 									if(head==NULL)
		// 									{
		// 										head=tail=temp;head->next=NULL;
		// 									}
		// 									else
		// 									{
		// 										temp->next=NULL;
		// 										tail->next=temp;
		// 										tail=temp;
		// 									}
		// 									temp=new airticket;
		// 								}
		// 								cout<<endl<<"请输入所要查找航班号:"<<endl;
		// 								cin>>num;
		// 								if(head==NULL)
		// 								{
		// 									printf("没有你所查找的信息!");fn();
		// 								}
		// 								for(;head;head=head->next)
		// 									if(head->num==num)
		// 									{
		// 										cout<<endl<<"找到相匹配的信息"<<endl;
		// 										cout<<"航班号是:"<<head->num<<","<<"日期是:"<<head->day<<",";
		// 										cout<<"时间是(星期):"<<head->time<<",";
		// 										cout<<"身份证号是:"<<head->IDcard<<","<<"票数是:"<<head->count<<",";
		// 										cout<<"起点站是:"<<head->start<<","<<"终点站是:"<<head->ends<<endl;
		// 									}
		// 									delete tail,temp;
		// 									fclose(fp);
		// 									cout<<endl<<"是否继续?是请按1,否请按2."<<endl;
		// 									cin>>k;
		// 									switch(k)
		// 									{
		// 									case 1:
		// 										search_num();break;
		// 									case 2:
		// 										main();break;
		// 									default:cout<<"按键错误!请重新按键!"<<endl;
		// 									}
		// 							};break;
		// 						}
		// 					}
		// 					else
		// 					{
		// 						cout<<"按键错误!请重新选择按键!"<<endl;
		// 					};
		// 				} 
		//				break;
		//			}
		//}
		// 		
		// 		else
		// 		{
		// 			cout<<"按键错误!请重新选择按键!"<<endl;
		// 		}
		
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -