C语言结构体–火车票查询程序
【问题描述】定义一个火车票的结构体数组,结构体的数据包括车次、始发站、终点站和票价。要求从键盘输入多个火车票数据,票价输入为负数时代表输入结束。
继续输入查询条件和要查询的数据,输出满足查询条件的所有车次信息(不考虑查不到的情况)。
【输入形式】
输入火车票数据信息,输入顺序为车次、始发站、终点站和票价,票价输入为负数时代表输入结束。
再输入查询条件和查询数据,形式如下:
1 站名originst:查询所有始发站为 originst 的车次信息。
2 站名terminal:查询所有终点站为 terminal 的车次信息。
3 票价fare:查询低于该票价 fare 的所有车次信息。
4 车次train:查询该车次 train 的信息。
注:以上四个变量名只是参考,不一定用该名字。不需考虑查不到的情况,不需考虑查询条件非法(不是1~4)的情况。
【输出形式】
输出查询到的车次信息。小数保留一位小数点。
【样例输入】
c6859 guangzhou zhaoqing 65
k9078 guangzhou yiyang 119
k7037 haerbin suihua -19.5
4 c6859
【样例输出】
c6859 guangzhou zhaoqing 65
…
源代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
struct Train //定义一个火车结构体
{
char tra[12]; //车次
char ori[20]; //始发车
char ter[20]; //终点站
float fare; //票价
};
struct Train date[20]; //定义一个火车信息的数组
int i, n, k, j;
char str[20];
for (i = 0;; i++)
{
k = i;
scanf_s("%s %s %s %f", date[i].tra, 12, date[i].ori, 20, date[i].ter, 20, &date[i].fare);
if (date[i].fare < 0)
break;
}
//scanf_s("%d %s", &n, str, 20);
scanf_s("%d", &n);
if (n != 3)
scanf_s("%s", str, 20);
else
scanf_s("%d", &j);
if (n == 1)
{
for (i = 0; i < k; i++)
{
if (strcmp(str, date[i].ori) == 0)
{
printf("%s %s %s %.1f\n", date[i].tra, date[i].ori, date[i].ter, date[i].fare);
}
}
}
if (n == 2)
{
for (i = 0; i < k; i++)
{
if (strcmp(str, date[i].ter) == 0)
{
printf("%s %s %s %.1f\n", date[i].tra, date[i].ori, date[i].ter, date[i].fare);
}
}
}
if (n == 4)
{
for (i = 0; i < k; i++)
{
if (strcmp(str, date[i].tra) == 0)
{
printf("%s %s %s %.1f \n", date[i].tra, date[i].ori, date[i].ter, date[i].fare);
}
}
}
if (n == 3)
{
for (i = 0; i < k; i++)
{
if (date[i].fare < j)
{
printf("%s %s %s %.1f \n", date[i].tra, date[i].ori, date[i].ter, date[i].fare);
}
}
}
system("pause");
return 0;
}
运行情况: