栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 数据结构课设 航空订票系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 数据结构课设 航空订票系统

目录

实现功能

部分功能测试截图

​

 代码展示


实现功能

        1.订票

        2.退票

        3.查询航班信息

        4.修改航班信息

        5.录入航班信息

        6.打印订票信息

部分功能测试截图

                                                               功能选择界面

查询航班功能测试

                                       

订票功能测试

 

                                                                打印订票信息

 代码展示

代码中需要的二个文件内容如下

第一个是代码中的《新建文档文本2.txt》,第二个是《新建文本文档.txt》,,,建立二个txt文件夹,将下面二个内容复制粘贴,注意文件名中的空格。然后将其放在和代码文件同一个根目录下,或者你也可以自己设置文件的路径

12:3616:1436908:3013:4269906:5811:3669921:3223:5679911:0019:3689909:3615:5536609:3314:4536612:1214:3019908:0012:30899
123456西安北京 200 369369宝鸡北京 220 148758上海北京 120 789456成都南京 220 484565南京揭阳 120 889834咸阳武汉 300 588685长春沈阳 210 789468九州台湾 100 556266香港黄冈 200 
  1. #include 
    #include 
    #include 
    #include 
    #define T1 p->data.fNumber                   //宏定义其中常用变量,便于书写
    #define T2 p->data.place_go
    #define T3 p->data.place_to
    #define T4 p->data.seat_total
    #define T5 p->data.seat_remainder
    #define T6 p->data.goTime
    #define T7 p->data.toTime
    #define T8 p->data.price
    #define R1 p->data.name
    #define R2 p->data.fNumber
    #define R3 p->data.id
    #define R4 p->data.number
    #define R5 p->data.Votes
    typedef struct                  //航班结点定义
    {
    	char place_go[20];          //始发地
    	char place_to[20];			//目的地
    	int seat_total;				//座位总数
    	int seat_remainder;         //剩余座位数
    	int fNumber;				//航班号
    	char goTime[6];				//起飞时间
    	char toTime[6];				//抵达时间
    	char  price[6];				//票价
    }plane;
    
    typedef struct PNode			//航班结构体定义
    {
    	plane data;
    	struct PNode *next;
    }PNode,*PlaneList;
    
    typedef struct            		//乘客结点定义
    {
    	char name[14];				//姓名
    	char id[30];				//身份证号码
    	int number;					//购票数
    	int Votes;					//订单号
    	int fNumber;				//航班号
    }passenger;
    
    typedef struct RNode
    {
    	passenger data;
    	struct RNode *next;
    }RNode,*RenList;
    
    void input(PNode* head){           //用文件输入航班信息的方法
    
    	FILE *fp,*fp1;
    	PlaneList p,r;
    	char qq[3];
    	int i,m;
    	r = head;
    	if((fp=fopen("新建文本文档.txt","r"))==NULL){
    		printf("航空基本信息文件打开失败!");
    	}
    	if((fp1=fopen("新建文本文档2.txt","r"))==NULL){
    		printf("航空补充信息文件打开失败!");
    	}
    	for(i=1;i<=9;i++)               //自定义了9个航班信息,所以这里循环9次
    	{	
    		p = (PlaneList)malloc(sizeof(PNode));
    		p->next = NULL;
    		fscanf(fp,"%d",&p->data.fNumber);
    		fgets(p->data.place_go,5,fp);
    		fgets(p->data.place_to,5,fp);
    		fscanf(fp,"%d",&m);
    		fgets(p->data.goTime,6,fp1);
    		fgets(p->data.toTime,6,fp1);
    		fgets(p->data.price,4,fp1);
    		p->data.seat_total = m;
    		p->data.seat_remainder = m;
    		r->next = p;
    		r = p;
    	}
    }
    
    void input_1(PNode* head){           //由控制台输入航班信息的方法
    
    	PlaneList p,t;
    	int m,x;
    	int fn;
    	char go[20],to[20];
    	p = head;
    	while(p->next!=NULL){
    		p=p->next;                   //将p指向head最后一个航班,方便在其后面链上其他航班信息
    	}                                //也防止新录入的信息顶掉已有信息
    	
    	printf("请输入需要输入的航班数:");
    	scanf("%d",&x);
    	printf(".......................................开始录入.......................................n");
    	for(int i=1;i<=x;i++)
    	{
    		printf("***********开始输入第%d个航班信息***********n",i);
    		t = (PlaneList)malloc(sizeof(PNode));
    		t->next=NULL;
    		printf("请输入航班号:");
    		scanf("%d",&fn);
    
    	in:	while(1){
    		PlaneList p;
    		p = head;
    		int tip = 1;
    		while(p->next!=NULL){
    			p=p->next;
    			if(fn==p->data.fNumber){
    				printf("输入错误!该航班已存在!n");
    				printf("请重新输入航班号:");
    				scanf("%d",&fn);
    				tip = 2;
    				break;
    			}
    		}
    		if(tip==2){
    			goto in;
    		}else{
    			t->data.fNumber = fn;
    			break;
    			}
    	}
    		printf("请输入始发地:");
    		scanf("%s",go);
    		while(1){
    			if(strlen(go)<=8&&strlen(go)>=2){
    				strcpy(t->data.place_go,go);
    				break;
    			}
    			else
    			{
    				printf("请重新输入始发地(1至4个汉字或2至8个英文字符):");
    				scanf("%s",go);
    			}
    		}
    
    
    		printf("请输入目的地:");
    		scanf("%s",to);
    		while(1){
    			if(strlen(to)<=8&&strlen(to)>=2){
    				strcpy(t->data.place_to,to);
    				break;
    			}
    			else
    			{
    				printf("请重新输入目的地(1至4个汉字或2至8个英文字符):");
    				scanf("%s",to);
    			}
    		}
    
    		printf("请输入机票总数:");
    		scanf("%d",&m);
    		t->data.seat_total = m;
    		t->data.seat_remainder = m;
    		printf("请输入飞机起飞时间:");
    		scanf("%s",t->data.goTime);
    		printf("请输入飞机抵达时间:");
    		scanf("%s",t->data.toTime);
    		printf("请输入该航班票价:");
    		scanf("%s",t->data.price);
    		p->next = t;
    		p = t;
    
    	}
    	printf(".......................................录入完成.......................................n");
    }
    
    void inout(PNode* head)                 //查看所有航班信息的方法
    {
    	PlaneList p;     
    	p = head;
    	int i=0;
    	printf(".........................咸阳机场欢迎你.........................n");
    	printf("   航班号	 始发地	     目的地		机票总数      剩余票数    出发时间  抵达时间   价格n");
    	while(p->next!=NULL){
    		p = p->next;
    		printf("%9d   %10s    %8s                %d           %d    %10s    %6s    %4sn",T1,T2,T3,T4,T5,T6,T7,T8);
    	}
    }
    
    void inout_1(RNode* rhead)               //查看乘客订单信息的方法
    { 
    	RenList p;     
    	p = rhead;
    	if(p->next==NULL){
    		printf("没有订单信息!n");
    	}else{
    		printf(".........................咸阳机场欢迎你.........................n");
    		printf("   姓名	        航班      身份证号码	             订单号     票数     n");
    	}
    	while(p->next!=NULL){
    		p = p->next;
    		printf("%8s   %d      %18s           %8d     %dn",R1,R2,R3,R4,R5);
    
    	}
    
    }
    
    void research_1(PNode* head)           //通过航班号查看航班信息的方法
    {
    	int x,tip;
    	PlaneList p;
    	p = head;
    	tip = 1;
    	printf("请输入要查找的航班号:");
    	scanf("%d",&x);
    	printf("开始查找n");
    	while(p->next!=NULL)
    	{
    		p = p->next;
    		if(p->data.fNumber==x)
    		{
    
    			printf("   航班号	 始发地	     目的地		机票总数      剩余票数    出发时间  抵达时间   价格n");
    			printf("%9d   %10s    %8s                %d           %d    %10s    %6s    %4sn",T1,T2,T3,T4,T5,T6,T7,T8);
    			tip = 2;
    			break;
    		}
    
    	}
    
    	if(tip==1){
    		printf("该航班不存在n");
    	}
    
    }
    
    
    void research_2(PNode* head)                //通过目的地和始发地查看航班信息的方法
    {
    	char str1[20],str2[20];
    	PlaneList p;
    	int tip;
    	tip = 1;
    	p = head;
    	printf("请输入要查找的始发地:");
    	scanf("%s",str1);
    	printf("请输入要查找的目的地:");
    	scanf("%s",str2);
    	printf("开始查找n");
    	while(p->next!=NULL){
    		p = p->next;
    		if(!strcmp(str1, p->data.place_go)&&!strcmp(str2, p->data.place_to)){
    			printf("   航班号	 始发地	     目的地		机票总数      剩余票数    出发时间  抵达时间   价格n");
    			printf("%9d   %10s    %8s                %d           %d    %10s    %6s    %4sn",T1,T2,T3,T4,T5,T6,T7,T8);
    			tip = 2;
    			break;
    		}
    	}
    
    	if(tip==1){
    		printf("未找到该航班or该航班不存在n");
    	}
    }
    
    
    void revise(PNode* head)                   //修改航班信息的方法
    {                                          //别问我为什么航空客运订票系统还可以修改航班信息,问就是题目要求的
    	PlaneList p;
    	int x,tip;
    	p = head;
    	printf("请输入要修改的航班号:");
    	scanf("%d",&x);
    	printf("开始修改n");
    	while(p->next!=NULL)
    	{
    		p = p->next;
    		if(p->data.fNumber==x)
    		{
    			printf("请输入要修改的信息n");
    			printf("请输入航班号:");
    			scanf("%d",&p->data.fNumber);
    			fflush(stdin);
    			printf("请输入始发地:");
    			scanf("%s",p->data.place_go);
    			printf("请输入目的地:");
    			scanf("%s",p->data.place_to);
    			printf("请输入机票总数:");
    			scanf("%d",&p->data.seat_total);
    			tip = 2;
    			break;
    		}
    
    	}
    
    	if(tip==1){
    		printf("未找到该航班or该航班不存在n");
    	}
    }
    
    void purchase (PNode* head,RNode* rhead)                 //乘客买票的方法
    {
    	PlaneList p;
    	RenList r,h;
    	r = (RenList)malloc(sizeof(RNode));
    	r->next = NULL;
    	int x,t,tip,tip1;
    	p = head;
    	h = rhead;
    	tip = 1;
    	tip1 = 1;
    	char name[14];
    	char id[30];
    	
    	if(h->next!=NULL){                            //让h指向rhead表尾,防止新输入信息替换掉已有信息
    		h = h->next;                 				
    	}
    	printf("请输入真实姓名:");
    	scanf("%s",name);
    	while(1){
    		if(strlen(name)<=14&&strlen(name)>=4){
    			strcpy(r->data.name,name);           //对信息筛选后赋给新申请的乘客信息结点
    			break;                               //以下大致相同,不在赘述
    		}
    		else
    		{
    			printf("请重新输入姓名(2-7个汉字):");
    			scanf("%s",name);
    		}
    	}
    
    	printf("请输入身份证号:");
    	scanf("%s",id);
    	while(1){
    		if(strlen(id)==18){
    			for(int i=1;i<=18;i++)
    			{
    				if(id[i]<='0'&&id[i]>='9')
    				{
    					break;
    				}
    
    			}
    			strcpy(r->data.id,id);
    			break;
    		}
    		else
    		{
    			printf("请输入合法身份证号码:");
    			scanf("%s",id);
    		}
    	}
    
    
    	printf("请选择乘坐航班:");
    	scanf("%d",&x);
    	while(1){
    		while(p->next!=NULL)
    		{
    			p = p->next;
    			if(p->data.fNumber==x)
    			{
    				tip1 = 2;
    				break;
    			}
    		}
    		if( tip1 != 2 )
    		{
    			printf("该航班不存在,请重新输入:");
    			p = head;
    			scanf("%d",&x);
    		}
    		else break;
    	}
    
    
    
    	printf("请输入需要购买的票数;");
    	scanf("%d",&t);
    	while(1)
    	{
    		while(p!=NULL)
    		{
    			if(p->data.seat_remainder>=t)
    			{
    				p->data.seat_remainder-=t;       //购票成功则修改剩余机票信息
    				tip = 2;
    				r->data.number = x-123;          //依据航班号生成订单号
    				r->data.Votes = t;
    				r->data.fNumber = x;
    				printf("购票成功!n");
    			}
    			break;
    
    		}
    		if(tip!=2)
    		{
    			printf("还要%d张票n",p->data.seat_remainder);
    			printf("机票不足,请重新输入:n");
    			scanf("%d",&t);
    		}
    		else break;
    	}
    
    	h->next=r;                //让h指向新申请并已赋值的乘客结点
    	h = r;					  //其实就是乘客链表的创建过程,只不过中间掺杂了对输入信息的筛选语句
    	                          //所以比较分散
    }
    
    void quash(PNode* head,RNode* rhead)              //乘客退票方法
    {
    	PlaneList p;
    	RenList r;
    	int x,t,tip;
    	p = head;
    	r = rhead;
    	tip = 1;
    	char name[14];
    	char id[18];
    	
    qq:	for(int i=1;i<=3;i++){
    		printf("请输入身份证号:");
    		scanf("%s",id);
    		while(r->next!=NULL){
    			r=r->next;
    			if(!strcmp(id,r->data.id)){
    				printf("请选择航班:");
    				scanf("%d",&x);
    				if(r->data.fNumber!=x){
    					printf("你没有购买过该航班的票!");
    					break;
    				}
    				else{
    					while(p->next!=NULL)
    					{
    						p = p->next;                      
    						if(p->data.fNumber==x)				//找到航班信息,并修改票数
    						{
    							printf("请输入需要退票的票数;");
    							scanf("%d",&t);
    							if(t>=r->data.number){
    								p->data.seat_remainder+=t;
    								tip = 2;
    								printf("退票成功!");
    								break;
    							}else{
    								printf("票数异常!!!n");
    							}
    							
    						}
    					}
    				}
    			}	
    		}
    		printf("身份信息验证错误!您还有%d次机会!!n!",3-i);
    	}
    
    	if(tip==1){
    		printf("退票失败n");
    	}
    }
    
    void print()                     //优化界面,也便于后期维护
    {
    	printf("                  ********************************************************************************        n");
    	printf("                  ****************************欢迎进入航空订票系统********************************        n");
    	printf("n");
    	printf("                                               1  订票                   n");
    	printf("n");
    	printf("                                               2  退票                   n");
    	printf("n");
    	printf("                                               3  查询航班信息           n");
    	printf("n");
    	printf("                                               4  修改航班信息           n");
    	printf("n");
    	printf("                                               5  录入航班信息           n");
    	printf("n");
    	printf("                                               6  打印订票信息           n");
    	printf("n");
    	printf("                                               7  退出程序               n");
    	printf("n");
    	printf("                  ********************************************************************************        n");
    
    }
    
    void print1()                  //优化界面,也便于后期维护
    {
    	printf("                  ********************************************************************************        n");
    	printf("                  ****************************欢迎进入航空订票系统********************************        n");
    	printf("n");
    	printf("n");
    	printf("                                               1  查询所有航班           n");
    	printf("n");
    	printf("                                               2  按航班号查询航班       n");
    	printf("n");
    	printf("                                               3  按航程查询航班         n");
    	printf("n");
    	printf("                                               4  返回                   n");
    	printf("n");
    	printf("n");
    	printf("                  ********************************************************************************        n");
    }
    int main()
    {
    
    	PNode *head;                                 //定义航班链表和乘客链表并进行初始化
    	RNode *rhead;
    	int select;
    	head = (PlaneList)malloc(sizeof(PNode));
    	head->next = NULL;
    	rhead = (RenList)malloc(sizeof(RNode));
    	rhead->next = NULL;
    	input(head);                                 //直接从文件中读取航班信息,这样就可直接测试系统,
                                                     //不用在输入大量航班才能进行测试
    to:	while(1){									 
    		system("cls");
    		printf("n");
    		printf("n");
    		print();
    		printf("请输入要进行的操作:");
    		scanf("%d",&select);
    		switch (select) {
    		case 1:
    			purchase(head,rhead);
    			printf("三秒后程序将返回.......");
    			Sleep(3*1000);                         //让程序停止运行三秒
    			system("cls");						   //清除界面,配合break达到自动返回的目的
    			break;
    		case 2:
    			quash(head,rhead);
    			printf("三秒后程序将返回.......");
    			Sleep(3*1000);
    			system("cls");
    			break;
    		case 3:
    			while(1){
    				system("cls");
    				print1();
    				printf("请选择查询方式:");
    				scanf("%d",&select);
    				switch (select) {
    				case 1:
    					inout(head);
    					printf("五秒后程序将返回.......");
    					Sleep(5*1000);
    					system("cls");
    					break;
    				case 2:
    					research_1(head);
    					printf("五秒后程序将返回.......");
    					Sleep(5*1000);
    					system("cls");
    					break;
    				case 3:
    					research_2(head);
    					printf("五秒后程序将返回.......");
    					Sleep(5*1000);
    					system("cls");
    					break;
    				case 4:
    					goto to;
    					default:
    						printf("            错误指令  #304               ");
    						break;
    				}
    			}
    
    		case 4:
    			revise(head);
    			printf("五秒后程序将返回.......");
    			Sleep(5*1000);
    			system("cls");
    			break;
    		case 5:
    			input_1(head);
    			printf("五秒后程序将返回.......");
    			Sleep(5*1000);
    			system("cls");
    			break;
    		case 6:
    			inout_1(rhead);
    			printf("五秒后程序将返回.......");
    			Sleep(5*1000);
    			//system("cls");
    			break;
    		case 7:
    			exit(0);
    
    			default:
    
    				printf("            错误指令  #304               ");
    				break;
    		    }
    	}
    	return 0;
        //复制粘贴后麻烦大家点个免费的赞哦!
        //复制粘贴后麻烦大家点个免费的赞哦!
        //复制粘贴后麻烦大家点个免费的赞哦!
    }
    
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号