数据结构:火车售票系统(C语言)

本文介绍了一个使用C语言实现的火车售票系统,涵盖了售票、退票和查询剩余车票等功能。系统通过定义车票结构体,售票函数会检查车票是否售罄并接受用户输入,退票函数能查找并处理有效退票,查询剩余票函数会标记已售座位。主函数提供交互界面,让用户选择不同操作。代码中详细解释了各个关键函数的工作原理及实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

通过此系统可以实现售票、退票、车票剩余情况查询等功能。每张车票包含车次、车厢、座位信息。

问题要求

⑴在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、车厢、座位情况。

⑵为简单起见,在此假设所有出售的车票均为同一车次的车票。

⑶退票时,必须是车站售出的车票才能退,否则视为无效票,不能退票,而且退票可以再次销售。

一、解题思路

1、总体思路

该程序主要围绕车票的售卖、退票和剩余车票查询等功能展开。通过定义车票结构体和相关数组来存储车票信息;售票函数负责在车票未售罄以及非重复票时接受用户输入并添加新售车票;退票函数根据用户提供的信息在车票库中查找匹配车票并进行退票处理;查询剩余票函数则通过标记已售座位来展示剩余座位情况。主函数提供操作选择界面,根据用户选择调用相应函数以实现不同功能,整体实现了一个简单的车票管理系统的基本操作流程。

2、各函数思路

售票函数 sellTicket()

首先检查车票是否售罄。

提示用户输入车厢和座位信息,进行有效性检查,包括检查该票是否已经出售。

若有效,创建车票结构体并添加到车票库数组中,同时增加已售车票数量,并输出售票成功信息。

退票函数 refundTicket()

接收用户输入的要退票的车次、车厢和座位信息并进行有效性检查。

通过循环遍历车票库数组,利用字符串比较和其他信息的匹配来查找要退的车票。

若找到匹配的车票,进行替换操作并减少已售车票数量,输出退票成功信息和车票信息;若未找到,输出无效票提示。

查询剩余票函数 queryRemain()

创建一个表示座位是否为空的二维数组。

遍历已售车票,标记已售出的座位。

然后按车厢输出未被标记(即剩余)的座位号。

3、主函数

 main()

提供一个循环,让用户不断选择操作(售票、退票、查余票、退出)。

根据用户选择调用相应函数。

二、代码

1、头文件 

typedef struct
{
    char trainNumber[10]; //车次
    int  coach; //车厢
    int seat; //座号
}Ticket;

2、售票函数 sellTicket

int ticketCount = 0; //初始化已售车票数量为0

void sellTicket()
{
    Ticket ticket; // 声明一个Ticket类型的局部变量以存储新票的信息
    printf("Please enter coach (1-3):\n");
    scanf("%d", &ticket.coach);
    printf("Please enter seat (1-8):\n");
    scanf("%d", &ticket.seat);

    // 检查输入是否有效
    if (ticket.coach < 1 || ticket.coach > 3 || ticket.seat < 1 || ticket.seat > 8)
    {
        printf("Input error, please re-enter!\n");
        return;
    }

    // 检查是否已经售出相同的票
    int found = 0;
    strcpy(ticket.trainNumber, "G1234");
    for (int i = 0; i < ticketCount; i++)
    {
        if (strcmp(tickets[i].trainNumber, ticket.trainNumber) == 0 &&
            tickets[i].coach == ticket.coach &&
            tickets[i].seat == ticket.seat)
        {
            printf(
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值