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