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

article/2025/8/22 5:14:12

目录

实现功能

部分功能测试截图

 代码展示


实现功能

        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 <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    #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    %4s\n",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     %d\n",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    %4s\n",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    %4s\n",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++){if(tip==2)break;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("你没有购买过该航班的票!");printf("您还有%d次机会!!\n!",3-i);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;r->data.number-=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;//复制粘贴后麻烦大家点个免费的赞哦!//复制粘贴后麻烦大家点个免费的赞哦!//复制粘贴后麻烦大家点个免费的赞哦!
    }


http://chatgpt.dhexx.cn/article/xHweVFGX.shtml

相关文章

【计算机毕业设计】41.航空订票系统

摘 要 网络的广泛应用给生活带来了十分的便利。所以把航空订票与现在网络相结合&#xff0c;利用JSP技术建设航空订票系统&#xff0c;实现航空订票的信息化。则对于进一步提高航班公司的发展&#xff0c;丰富航空订票经验能起到不少的促进作用。 航空订票系统能够通过互联网…

航空订票系统(javaweb项目)

航空订票系统课程设计 一、项目选题 航空订票系统 二、项目背景 当今社会知识经济高速发展&#xff0c;信息化在各个行业内正在被越来越广泛的应用。人们生活水平的不断提高&#xff0c;使得出行的交通工具也跟着发展起来。如今乘飞机出行的人越来越多&#xff0c;这方面的市…

数据结构课设——航空航天订票系统

文章目录 一、系统简介    1、业务活动    2、操作和功能二、系统功能模块图    1、系统功能模块图    2、函数功能模块三、详细描述    1、数据结构    2、设计思路四、运行结果    1、查询所有航班    2、根据起点终点搜索航班    3、订…

mysql导出表结构及数据的三种方法

navicat导出表一共有三中用法&#xff1a; 第一种&#xff1a;数据库上右键—>"转储SQL文件"&#xff0c;如图&#xff1a; "转储文件"是把整个数据库表全部导出&#xff0c;所有的表都是先drop然后create&#xff0c;insert。 第二种&#xff1a;部分表…

将mysql中的数据库表导出和导入

目录 导出数据库 导入数据库 导出数据库 如果你的mysql没有配置环境变量&#xff0c;首先需要进到你所安装的mysql目录下的bin目录 进入之后输入&#xff1a; mysqldump -uroot -p booksystem > booksystem.sql 其中booksystem是你要导出的数据库中的名字&#xff0c;book…

MySQL——表的导出和导入

有时会需要将MySQL数据4中的数据导出到外部存储文件中&#xff0c;MySQL数据库中的数据可以导出成qI文本文件、xml文件或者html文件&#xff0c;同样这些导出的文件也可以导入MySQL数据库中&#xff0c; 一. 表的导出 1. 用 SELECT…INTO OUTFILE 导出文本文件 在 MySQ…

C代码实现Mysql导出表数据,sql语句保存

概述 本人最近项目的要求&#xff0c;需要定时检查数据库变化&#xff0c;定时将变化的数据库数据导出来另外保存。 所以研究数据库数据导出功能&#xff0c;并记录下开发过程。因暂时没有需要&#xff0c;没有将数据库的结构保存。 软件环境 编译器&#xff1a;vs2022 数据…

MySQL导出表数据至excel表格

虽然很简单&#xff0c;但还是把步骤记下来&#xff0c;防止以后忘记 第一步&#xff1a;选中表名 点击导出向导 第二步&#xff1a;选择导出格式 第三步&#xff1a;选择导出.xlsx文件的名字以及存放路径 第四步&#xff1a;设置编码格式 第五步&#xff1a;设置导出数据是否…

mysql数据库导入导出sql文件

目录 1.导出sql文件2.导入sql文件 在使用MySQL数据库时&#xff0c;经常需要备份和恢复数据库&#xff0c;通过导出sql文件备份和直接执行sql文件恢复是非常便捷的方式。本篇博客主要介绍如何对MySQL数据库通过cmd命令导出和导入sql文件。 1.导出sql文件 导出sql文件可以使用m…

MySQL表的导出

MySQL表的导出有两种方式&#xff1a;1&#xff0c;select … into outfile … 2&#xff0c;mysqldump工具进行导出 1.select … into outfile … 方式导出&#xff1a; (1)默认导出地址查询&#xff1a;show variables like secure_file_priv&#xff0c;后续将该地址设为数据…

mysql数据库如何导出表和数据

1.选择需要导出的表 2.右击选择转储SQL文件 3.输入文件名选择sql脚本文件 4.完成

mysql导出表_mysql导出表的3种方式

文章转载自 &#xff1a; https://blog.csdn.net/jbb0403/article/details/26359573 navicat导出表一共有三中用法&#xff1a; 第一种&#xff1a;数据库上右键—>"转储SQL文件"&#xff0c;如图&#xff1a; "转储文件"是把整个数据库表全部导出&…

javase转javaee(java web)

1、点击help——>ininstall new software&#xff1b;点击add&#xff0c;输入name&#xff1a;javaweb &#xff1b; location&#xff1a;http://download.eclipse.org/releases/mars(该地址可以根据eclipse版本下载相应的jar包)&#xff1b;等待下载完成后重启ecli…

javase-jdk下载、安装、配置

一.下载 1.地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html 二.安装 安装到默认路径…… 安装完后&#xff1a; 三.配置环境 在系统变量中操作 1.创建一个名为 JAVA_HOME 新的环境变量&#xff0c;输入变量值&#xff0c;如&#…

JavaSE JDK搭建

一、下载JDK 下载链接&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html?ssSourceSiteIdotncn 二、JDK安装 默认安装路径即可 三、环境变量的配置 1 JAVA_HOME 注意&#xff1a;JAVA_HOME的值即为jdk的安装地址 2 pat…

下载安装Java8

下载java的官网&#xff1a;http://www.orcle.com 点击产品。 点击java 点击下载java 点击java archive 点击javaSE8 这里我下载的是windows x64 二. 安装Java 这里我只讲重要部分其余直接单击下一步 这里点击更改位置但是把名字设置为ava\jdk1.8.0_202 后面再次更改位置时改…

java se win10_Win10 JAVASE的下载和环境变量设置

1、Java的下载 官方网站下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据你当前的操作系统以及开发要求选择合适的JaveSE版本&#xff1b; 2.Java的安装 公共JRE可以选择不安装&#xff0c;因为JDK已经包含有JR…

Java 官网下载+安装(Linux)

目录结构&#xff1a; 1. 官网下载JDK 2. 安装JDK 1.官网下载JDK 官网地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1&#xff09;点选“Accept”&#xff0c;点击下载“jdk-8u221-linux-x64.tar.gz” 2&#x…

JavaSE基础知识点思维导图

最近开启新一轮的知识点复习&#xff0c;先从JavaSE开始。文章里是PNG格式&#xff0c;可能不是很清晰&#xff0c;文末附上PDF和xmind工程文件链接&#xff0c;需要的小伙伴自取&#xff0c;都只需要1个币&#xff08;设置成0个币还需要啥下载码&#xff09;。如有错误的地方欢…