编写c语言程序,源程序要有适当解释。题目如下:一车站每天有 n 个发车班次,每个班次都有一班次号(1、2、3..… n ),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。 (1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示"此班已发出"的提示信息)。 (3)查询路线:可按班次号查询,,可按终点站查询 (4)售票和退票功能 A :当查询出已定人数于额定载量系统时小于发车时间时才能售票,自动更新已售票人数 B :退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数

时间: 2024-03-24 12:40:43 浏览: 12
好的,下面是车票管理系统的C语言代码实现,我会在代码中加入注释以方便理解: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> // 用于获取系统时间 #define MAXSIZE 100 // 最大班次数 #define FILENAME "data.txt" // 文件名 struct Train { int id; // 班次号 char start[20]; // 起始站 char end[20]; // 终点站 char time[10]; // 发车时间 int duration; // 行车时间 int capacity; // 额定载客量 int sold; // 已售票数 }; struct Train trains[MAXSIZE]; // 存放班次信息 int size = 0; // 班次数 // 保存数据到文件 void saveData() { FILE* fp = fopen(FILENAME, "w"); if (fp == NULL) { printf("无法保存数据到文件!\n"); return; } for (int i = 0; i < size; i++) { fprintf(fp, "%d %s %s %s %d %d %d\n", trains[i].id, trains[i].start, trains[i].end, trains[i].time, trains[i].duration, trains[i].capacity, trains[i].sold); } fclose(fp); } // 读取数据文件中的数据 void readData() { FILE* fp = fopen(FILENAME, "r"); if (fp == NULL) { printf("数据文件不存在!\n"); return; } while (1) { struct Train train; int ret = fscanf(fp, "%d %s %s %s %d %d %d\n", &train.id, train.start, train.end, train.time, &train.duration, &train.capacity, &train.sold); if (ret == EOF) { break; } trains[size++] = train; } fclose(fp); } // 增加班次信息 void addTrain() { struct Train train; printf("请输入班次号:"); scanf("%d", &train.id); printf("请输入起始站:"); scanf("%s", train.start); printf("请输入终点站:"); scanf("%s", train.end); printf("请输入发车时间:"); scanf("%s", train.time); printf("请输入行车时间:"); scanf("%d", &train.duration); printf("请输入额定载客量:"); scanf("%d", &train.capacity); train.sold = 0; // 已售票数初始化为0 trains[size++] = train; printf("班次信息添加成功!\n"); } // 显示所有班次信息 void showTrains() { printf("班次号\t起始站\t终点站\t发车时间\t行车时间\t额定载客量\t已售票数\n"); for (int i = 0; i < size; i++) { printf("%d\t%s\t%s\t%s\t%d\t%d\t%d\n", trains[i].id, trains[i].start, trains[i].end, trains[i].time, trains[i].duration, trains[i].capacity, trains[i].sold); } } // 查询班次信息 void queryTrain() { printf("请选择查询方式:\n"); printf("1. 按班次号查询\n"); printf("2. 按终点站查询\n"); int choice; scanf("%d", &choice); if (choice == 1) { int id; printf("请输入班次号:"); scanf("%d", &id); for (int i = 0; i < size; i++) { if (trains[i].id == id) { printf("班次号\t起始站\t终点站\t发车时间\t行车时间\t额定载客量\t已售票数\n"); printf("%d\t%s\t%s\t%s\t%d\t%d\t%d\n", trains[i].id, trains[i].start, trains[i].end, trains[i].time, trains[i].duration, trains[i].capacity, trains[i].sold); return; } } printf("没有该班次!\n"); } else if (choice == 2) { char end[20]; printf("请输入终点站:"); scanf("%s", end); printf("班次号\t起始站\t终点站\t发车时间\t行车时间\t额定载客量\t已售票数\n"); for (int i = 0; i < size; i++) { if (strcmp(trains[i].end, end) == 0) { printf("%d\t%s\t%s\t%s\t%d\t%d\t%d\n", trains[i].id, trains[i].start, trains[i].end, trains[i].time, trains[i].duration, trains[i].capacity, trains[i].sold); } } } else { printf("输入有误!\n"); } } // 售票 void sellTicket() { int id; printf("请输入班次号:"); scanf("%d", &id); for (int i = 0; i < size; i++) { if (trains[i].id == id) { time_t t = time(NULL); struct tm* tm = localtime(&t); int hour = tm->tm_hour; int minute = tm->tm_min; char currentTime[10]; sprintf(currentTime, "%02d:%02d", hour, minute); if (strcmp(currentTime, trains[i].time) > 0) { printf("此班已发出!\n"); return; } if (trains[i].sold >= trains[i].capacity) { printf("此班已满员!\n"); return; } trains[i].sold++; printf("售票成功!\n"); saveData(); return; } } printf("没有该班次!\n"); } // 退票 void refundTicket() { int id; printf("请输入班次号:"); scanf("%d", &id); for (int i = 0; i < size; i++) { if (trains[i].id == id) { time_t t = time(NULL); struct tm* tm = localtime(&t); int hour = tm->tm_hour; int minute = tm->tm_min; char currentTime[10]; sprintf(currentTime, "%02d:%02d", hour, minute); if (strcmp(currentTime, trains[i].time) > 0) { printf("此班已发出,不能退票!\n"); return; } if (trains[i].sold == 0) { printf("此班没有已售票,不能退票!\n"); return; } trains[i].sold--; printf("退票成功!\n"); saveData(); return; } } printf("没有该班次!\n"); } int main() { readData(); // 读取数据文件中的数据 while (1) { printf("请选择功能:\n"); printf("1. 增加班次信息\n"); printf("2. 浏览班次信息\n"); printf("3. 查询班次信息\n"); printf("4. 售票\n"); printf("5. 退票\n"); printf("6. 退出程序\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: addTrain(); saveData(); break; case 2: showTrains(); break; case 3: queryTrain(); break; case 4: sellTicket(); break; case 5: refundTicket(); break; case 6: printf("谢谢使用,再见!\n"); return 0; default: printf("输入有误!\n"); break; } } return 0; } ``` 注意:本程序中使用了文件来保存班次信息,因此需要在程序运行前创建一个名为`data.txt`的文件,其中每行为一条班次信息,格式为`班次号 起始站 终点站 发车时间 行车时间 额定载客量 已售票数`,例如: ``` 1 北京 上海 08:00 600 100 50 2 上海 广州 09:00 700 120 80 3 广州 深圳 10:00 400 80 0 ```

相关推荐

最新推荐

recommend-type

使用C语言编写圣诞表白程序

圣诞节快到了,让我们用C语言制作一个圣诞表白程序吧,下面通过本文学习下实现代码
recommend-type

用C编写一个送给女朋友的情人节小程序 可爱!

非常可爱的情人节小程序!文章为大家分享了用C编写一个送给女朋友的小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

在C语言中输入一个大写字母,将其转变成一个小写字母,并且有相应的提示。

1.学习简单的C语言编程
recommend-type

socket多人聊天程序C语言版(一)

主要为大家详细介绍了socket多人聊天程序C语言版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
recommend-type

单片机C语言程序设计:8X8LED 点阵显示数字

名称:按键控制 8X8LED 点阵屏显示图形 说明:每次按下 K1 时,会使 8X8LED点阵屏循环显示不同图形。本例同时使用外部中断和定时中断。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

云原生架构与soa架构区别?

云原生架构和SOA架构是两种不同的架构模式,主要有以下区别: 1. 设计理念不同: 云原生架构的设计理念是“设计为云”,注重应用程序的可移植性、可伸缩性、弹性和高可用性等特点。而SOA架构的设计理念是“面向服务”,注重实现业务逻辑的解耦和复用,提高系统的灵活性和可维护性。 2. 技术实现不同: 云原生架构的实现技术包括Docker、Kubernetes、Service Mesh等,注重容器化、自动化、微服务等技术。而SOA架构的实现技术包括Web Services、消息队列等,注重服务化、异步通信等技术。 3. 应用场景不同: 云原生架构适用于云计算环境下的应用场景,如容器化部署、微服务
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。