最全—航班信息管理系统【数组版】

航班管理系统(数组版)

航班信息查询系统
1、 导言 用所学过的 C 语言,以及链表相关知识,实现一个航班信息的录入、查询、显示、 排序等功能。航班信息
节点设计,请参见附录。
2、 基本功能: 使用链表或数组,实现以下功能:
1) 录入(可以直接从键盘录入,也可通过文件存储)
2) 显示所有航班信息
3) 按照查询要求(比如日期、地点等),列出相关的航班信息。
4) 完善该项目功能。
5) 对录入的信息进行排序(比如按起飞时间排序、按起飞地址排序等)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_FLIGHTS 100 // 定义最大航班数量static int flight_num = 0; // 当前航班的数量typedef struct airplane
{char number[10];     // 航班号char Start_City[20]; // 起飞城市char End_City[20];   // 到达城市// char type;              //机型char Start_Time[20]; // 起飞时间char End_Time[20];   // 到达时间float Price;         // 机票价格float Discount;      // 机票折扣int Tickets;         // 机票剩余数量
} Plane;Plane flights[MAX_FLIGHTS]; // 存储航班信息的数组void Menu();           // 菜单
void addFlight();      // 添加
void findFlight();     // 查询
void displayFlights(); // 显示所有
void modifyFlight();   // 修改
void deleteFlight();   // 删除
void Sort();           // 排序/*功能:  显示菜单信息参数:  无返回值:无*/
void Menu()
{int choice;while (1){printf("        航班管理系统        \n");printf("----------------------------\n");printf("|1、添加航班信息            |\n");printf("|2、显示所有航班信息        |\n");printf("|3、查询航班信息            |\n");printf("|4、修改航班信息            |\n");printf("|5、删除航班信息            |\n");printf("|6、排序                    |\n");printf("|0、退出                    |\n");printf("----------------------------\n");printf("请输入相应的序号选择!       \n");scanf("%d", &choice);getchar();switch (choice){case 1:addFlight();break;case 2:displayFlights();break;case 3:findFlight();break;case 4:modifyFlight();break;case 5:deleteFlight();break;case 6:Sort();break;case 0:exit(0);break;default:printf("无效的选择,请重试!\n");}// 暂停操作printf("\n");system("pause"); // 这行代码会使程序等待用户按下任意键system("cls");   // 清屏操作}
}/*功能:  添加航班信息参数:  无返回值:无
*/
void addFlight()
{if (flight_num >= MAX_FLIGHTS){printf("无法添加更多航班,已达到最大限制!\n");return;}Plane newFlight;printf("请输入航班号: ");gets(newFlight.number);printf("请输入起飞城市: ");gets(newFlight.Start_City);printf("请输入到达城市: ");gets(newFlight.End_City);printf("请输入起飞时间: ");gets(newFlight.Start_Time);printf("请输入到达时间: ");gets(newFlight.End_Time);printf("请输入机票价格: ");scanf("%f", &newFlight.Price);getchar();printf("请输入机票折扣: ");scanf("%f", &newFlight.Discount);getchar();printf("请输入剩余票数: ");scanf("%d", &newFlight.Tickets);getchar();flights[flight_num++] = newFlight; // 将新航班添加到数组中printf("航班添加成功!\n");
}/*功能:  显示所有航班信息参数:  无返回值:无
*/
void displayFlights()
{if (flight_num == 0){ // 检查是否有航班信息printf("没有可显示的航班信息!\n");return;}printf("航班号\t\t起飞城市\t到达城市\t起飞时间\t到达时间\t机票价格\t优惠折扣\t剩余票数\n");for (int i = 0; i < flight_num; i++){printf("%s\t\t%s\t-->\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",flights[i].number, flights[i].Start_City, flights[i].End_City,flights[i].Start_Time, flights[i].End_Time,flights[i].Price, flights[i].Discount, flights[i].Tickets);}
}/*功能:  查询航班信息参数:  无返回值:无
*/
void findFlight()
{if (flight_num == 0){ // 检查是否有航班信息printf("没有可查询的航班信息!\n");return;}char fnum[10];printf("请输入要查询的航班号:");fgets(fnum, sizeof(fnum), stdin);fnum[strcspn(fnum, "\n")] = '\0'; // 去除换行符for (int i = 0; i < flight_num; i++){if (strcmp(fnum, flights[i].number) == 0){printf("航班号\t\t起飞城市\t到达城市\t起飞时间\t到达时间\t机票价格\t优惠折扣\t剩余票数\n");printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",flights[i].number, flights[i].Start_City, flights[i].End_City,flights[i].Start_Time, flights[i].End_Time,flights[i].Price, flights[i].Discount, flights[i].Tickets);return;}}printf("未找到该航班!\n");
}/*功能:  修改航班信息参数:  无返回值:无
*/
void modifyFlight()
{if (flight_num == 0){ // 检查是否有航班信息printf("没有修改的航班信息!\n");return;}printf("请输入要修改的航班号:");char fnum[10];int flag = 0;fgets(fnum, 10, stdin);fnum[strcspn(fnum, "\n")] = 0; // 去掉换行符for (int i = 0; i < flight_num; i++){if (strcmp(fnum, flights[i].number) == 0){flag = 1;printf("修改开始\n请输入航班号: ");gets(flights[i].number);printf("请输入起飞城市: ");gets(flights[i].Start_City);printf("请输入到达城市: ");gets(flights[i].End_City);printf("请输入起飞时间: ");gets(flights[i].Start_Time);printf("请输入到达时间: ");gets(flights[i].End_Time);printf("请输入机票价格: ");scanf("%f", &flights[i].Price);getchar();printf("请输入机票折扣: ");scanf("%f", &flights[i].Discount);getchar();printf("请输入剩余票数: ");scanf("%d", &flights[i].Tickets);getchar();printf("航班修改成功!\n");break;}}if (flag == 0){printf("未找到该航班号对应的航班信息!\n");}
}/*功能:  删除航班信息参数:  无返回值:无
*/void deleteFlight()
{if (flight_num == 0){ // 检查是否有航班信息printf("没有可删除的航班信息!\n");return;}printf("请输入要删除的航班号:");char fnum[10];int flag = 0;fgets(fnum, sizeof(fnum), stdin);fnum[strcspn(fnum, "\n")] = 0;for (int i = 0; i < flight_num; i++){if (strcmp(fnum, flights[i].number) == 0){flag = 1;for (int j = i; j < flight_num - 1; j++){strcpy(flights[j].number, flights[j + 1].number);strcpy(flights[j].Start_City, flights[j + 1].Start_City);strcpy(flights[j].End_City, flights[j + 1].Start_Time);strcpy(flights[j].Start_Time, flights[j + 1].Start_Time);strcpy(flights[j].End_Time, flights[j + 1].End_Time);flights[j].Price = flights[j + 1].Price;flights[j].Discount = flights[j + 1].Discount;flights[j].Tickets = flights[j + 1].Tickets;}flight_num--;printf("删除成功!");break;}}if (!flag)printf("未找到该航班号对应的航班信息!\n");
}/*功能:  删除航班信息参数:  无返回值:无
*/
void Sort()
{if (flight_num == 0){ // 检查是否有航班信息printf("没有可排序的航班信息!\n");return;}printf("请选择排序方式:\n");printf("1.按日期升序排序\n2.按日期降序排序\n3.按价格升序排序\n4.按价格降序排序\n");int num;scanf("%d", &num);if (num == 1 || num == 2) // 1.按日期升序排序 2.按日期降序排序{for (int i = 0; i < flight_num - 1; i++){for (int j = 0; j < flight_num - i - 1; j++){if ((num == 1 && strcmp(flights[j].Start_Time, flights[j + 1].Start_Time) > 0) ||(num == 2 && strcmp(flights[j].Start_Time, flights[j + 1].Start_Time) < 0)){Plane temp = flights[j];flights[j] = flights[j + 1];flights[j + 1] = temp;}}}printf("日期排序成功!\n");}else if (num == 3 || num == 4) // 3.按价格升序排序 4.按价格降序排序{for (int i = 0; i < flight_num - 1; i++){for (int j = 0; j < flight_num - i - 1; j++){if ((num == 3 && (flights[j].Price - flights[j + 1].Price) > 0) ||(num == 4 && (flights[j].Price - flights[j + 1].Price) < 0)){Plane temp = flights[j];flights[j] = flights[j + 1];flights[j + 1] = temp;}}}printf("价格排序成功!\n");}printf("航班号\t\t起飞城市\t到达城市\t起飞时间\t到达时间\t机票价格\t优惠折扣\t剩余票数\n");for (int i = 0; i < flight_num; i++){printf("%s\t\t%s\t-->\t%s\t\t%s\t\t%s\t\t%.2f\t\t%.2f\t\t%d\n",flights[i].number, flights[i].Start_City, flights[i].End_City,flights[i].Start_Time, flights[i].End_Time,flights[i].Price, flights[i].Discount, flights[i].Tickets);}
}int main(int argc, char const *argv[])
{Menu();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发指南047-前端模块版本

平台前端框架内置了一个文件version.vue <template> <div> <br> 应用名称: {{name}} <br> 当前版本&#xff1a;{{version}} <br> 服务网关: {{gateway}} </div> </template> <scrip…

分析示例 | Simufact Additive铺粉增材制造工艺缺陷仿真分析方案

近年来&#xff0c;随着增材制造工艺的快速发展&#xff0c;仿真模拟的重要性日益凸显&#xff0c;越来越多的科研及应用单位选择在实际打印之前&#xff0c;通过仿真预测打印问题&#xff0c;从而优化打印工艺、减少物理试错次数、降低打印成本。就不同增材工艺仿真的占比而言…

netxduo http server 创建回复以及json解析

我们今天要整http的response,比如我创建的http server,我对它发送了一个POST,然后服务器解析出json里的body,再回复过去。今天会用到json的解析库cjson以及postman去发送消息。这次用nx_web_http_server.h这个库,不用之前的nx_http_server.h 本教程在最后附带app_netxduo…

大数据基础:Doris重点架构原理

文章目录 Doris重点架构原理 一、Apache Doris介绍 二、Apache Doris使用场景 三、Apache Doris架构原理 四、Apache Doris 特点 Doris重点架构原理 一、Apache Doris介绍 基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff…

JVM---对象是否存活及被引用的状态

1.如何判断对象是否存活 1.1 引用计数算法 概念&#xff1a;在对象头部增加一个引用计数器,每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1b;任何时刻计数器为零的对象就是不可能再被使用的。 优点&#xff1…

vue2迁移到vue3注意点

vue2迁移到vue3注意点 1、插槽的修改 使用 #default &#xff0c; 以及加上template 模板 2、 类型的定义&#xff0c;以及路由&#xff0c;vue相关资源&#xff08;ref, reactive,watch&#xff09;的引入等 3、类装饰器 1&#xff09;vue-class-component是vue官方库,作…

ubuntu搭建harbor私仓

1、环境准备 链接: https://pan.baidu.com/s/1q4XBWPd8WdyEn4l253mpUw 提取码: 7ekx --来自百度网盘超级会员v2的分享 准备一台Ubuntu 机器:192.168.124.165 将上面两个文件考入Ubuntu上面 2、安装harbor 安装Docker Harbor仓库以容器方式运行,需要先安装好docker,参考:…

详解python基本语法

文章目录 数据变量数据结构 循环-判断-用户输入判断用户输入循环 函数参数返回值将函数存储在模块中 文件和异常读取文件异常操作Json文件 类对象创建类使用类类的继承导入外部类 测试测试函数创建测试 Python 是一种广泛使用的高级编程语言&#xff0c;以其清晰的语法和代码可…

which 命令在Linux中是一个快速查找可执行文件位置的工具

文章目录 0、概念1、which --help2、which命令解释 0、概念 which命令用于查找命令的可执行文件的路径which 命令在 Linux 中用于查找可执行命令的完整路径。当你在 shell 中输入一个命令时&#xff0c;shell 会在环境变量 $PATH 定义的目录列表中查找这个命令。which 命令可以…

React基础学习-Day06

React基础学习-Day06 zustand基本使用方式 1.基础使用 基本使用 zustand 的步骤包括创建状态存储和在组件中使用这些状态和更新函数。以下是一个基础的示例&#xff0c;演示如何使用 zustand 来管理一个简单的计数器状态。 安装 首先&#xff0c;确保你的项目中已经安装了…

socket编程(2) -- TCP通信

TCP通信 2. 使用 Socket 进行TCP通信2.1 socket相关函数介绍socket()bind()listen()accept()connect()2.2 TCP协议 C/S 模型基础通信代码 最后 2. 使用 Socket 进行TCP通信 Socket通信流程图如下&#xff1a; 这里服务器段listen是监听socket套接字的监听文件描述符。如果客户…

Redis--布隆过滤器

解决缓存穿透是构建高效缓存系统中的关键问题之一。缓存穿透指的是恶意或者非法请求经过缓存层直接访问数据库或者后端服务&#xff0c;导致系统资源浪费和性能下降的情况。为了有效应对缓存穿透问题&#xff0c;以下是几种常见的解决方法&#xff1a; 1. 布隆过滤器预检查 布…

运维-Docker-黑马

运维-Docker-黑马 编辑时间&#xff1a;2024/7/15 来源&#xff1a;黑马程序员 docker&#xff1a;快速构建&#xff0c;运行&#xff0c;管理应用的工具 Docker安装 部署mysql 命令解读

[Cesium for Supermap] 加载3dTiles,点击获取属性

代码&#xff1a; // 设为椭球var obj [6378137.0, 6378137.0, 6356752.3142451793];Cesium.Ellipsoid.WGS84 Object.freeze(new Cesium.Ellipsoid(obj[0], obj[1], obj[2]));var viewer new Cesium.Viewer(cesiumContainer);var scene viewer.scenescene.lightSource.ambi…

Oracle TDE(Transparent Data Encryption) 常见问题解答 - 官网

此FAQ来源于官网链接。此为新版&#xff0c;老版的博客参见Oracle TDE(Transparent Data Encryption) 常见问题解答。 通用问题 透明数据加密 (TDE) 提供什么功能&#xff1f; TDE 以透明方式加密 Oracle 数据库中的静态数据。它可以阻止操作系统未经授权尝试访问存储在文件…

彻底改变时尚:使用 GAN 实现 AI 的未来

彻底改变时尚&#xff1a;使用 GAN 实现 AI 的未来 一、介绍 想象一下&#xff0c;在这个世界里&#xff0c;时装设计师永远不会用完新想法&#xff0c;我们穿的每一件衣服都是一件艺术品。听起来很有趣&#xff0c;对吧&#xff1f;好吧&#xff0c;我们可以在通用对抗网络 &a…

鸿蒙基本工程目录

工程级目录 AppScope 中存放应用全局所需要的资源文件。entry 是应用的主模块&#xff0c;存放 HarmonyOS 应用的代码、资源等。oh_modules 是工程的依赖包&#xff0c;存放工程依赖的源文件。build-profile.json5 是工程级配置信息&#xff0c;包括签名、产品配置等。hvigorf…

品牌产业出海指南如何搭建国际化架构的跨境电商平台?

在“品牌&产业出海指南 – 成功搭建跨境电商平台”系列中&#xff0c;我们将从电商分销系统、跨境平台商城/多商户商城系统和国际化架构三个方面对帮助您梳理不同平台模式的优缺点、应用场景、开发重点和运营建议。 在“品牌&产业出海指南 – 成功搭建跨境电商平台”系…

【漏洞复现】Rejetto HTTP文件服务器——远程命令执行(CVE-2024-23692)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 Rejetto HTTP文件服务器是一个轻量级的HTTP服务器软件&#xff…

VBA学习(20):一批简单的Excel VBA编程问题解答

1.如何确定单元格区域内的行数和列数&#xff1f; 使用Range.Rows.Count和Range.Columns.Count属性。 2.Application.Columns指的是什么&#xff1f; 活动工作表中的列。 3.你的程序在列B位置插入一个新列&#xff0c;原来的列B会怎样&#xff1f; 它向右移动成为列C。 4.假…