C++实现车票管理系统

C++实现车票管理系统

系统功能

该车票管理系统主要实现以下功能:

  1. 查询车票信息
  2. 购买车票
  3. 退票操作
  4. 统计车票销售额和余票数操作

设计思路

数据结构

使用结构体来存储车票信息,包括车次、起点站、终点站、发车时间、到达时间、车票价格和车票余量等信息。同时,为了方便对车票信息进行查找、添加和删除等操作,可以使用一个存储车票信息的数组来进行管理。

struct Ticket {
  string train_num; // 车次
  string from_station; // 起点站
  string to_station; // 终点站
  string departure_time; // 发车时间
  string arrival_time; // 到达时间
  int price; // 票价
  int remain; // 剩余票数
};

Ticket tickets[1000]; // 存储车票信息的数组
int ticket_num = 0; // 当前车票数量

功能实现

查询车票信息

查询车票信息是常见的操作,可以根据起点站和终点站来查询符合条件的车票信息。具体实现过程中,可以使用一个循环遍历车票数组,逐一检查每张车票是否符合条件,如果符合则将其展示出来。

void query_ticket() {
  string from, to; // 起点站和终点站
  cout << "请输入起点站:";
  cin >> from;
  cout << "请输入终点站:";
  cin >> to;

  for (int i = 0; i < ticket_num; i++) {
    Ticket ticket = tickets[i];
    if (ticket.from_station == from && ticket.to_station == to && ticket.remain > 0) {
      cout << "车次:" << ticket.train_num << endl
           << "起点站:" << ticket.from_station << endl
           << "终点站:" << ticket.to_station << endl
           << "发车时间:" << ticket.departure_time << endl
           << "到达时间:" << ticket.arrival_time << endl
           << "价格:" << ticket.price << endl
           << "余票数:" << ticket.remain << endl;
      cout << endl;
    }
  }
}

购买车票

购买车票是该系统的核心功能,需要进行以下步骤:

  1. 输入购票信息(车次、起点站、终点站)
  2. 检查所选车票是否有余量,若没有则提示购票失败
  3. 若有余量,则将余票数减去1,同时计算并输出购票信息和售票总额
void buy_ticket() {
  string train_num, from, to; // 车次、起点站和终点站
  cout << "请输入需要购买的车次:";
  cin >> train_num;
  cout << "请输入起点站:";
  cin >> from;
  cout << "请输入终点站:";
  cin >> to;

  for (int i = 0; i < ticket_num; i++) {
    Ticket &ticket = tickets[i];
    if (ticket.train_num == train_num && ticket.from_station == from && ticket.to_station == to && ticket.remain > 0) {
      ticket.remain--; // 余票数减1
      int price = ticket.price;
      int total = price * (1 + 0.1); // 计算售票总额
      cout << "购票成功!" << endl
           << "车次:" << ticket.train_num << endl
           << "起点站:" << ticket.from_station << endl
           << "终点站:" << ticket.to_station << endl
           << "发车时间:" << ticket.departure_time << endl
           << "到达时间:" << ticket.arrival_time << endl
           << "价格:" << ticket.price << endl
           << "余票数:" << ticket.remain << endl
           << "售票总额:" << total << endl;
      return;
    }
  }

  cout << "购票失败,请重新选择车票!" << endl;
}

退票操作

退票操作需要输入订单号,然后根据订单号查询对应车次,将余票数加1,同时输出退票信息。

void return_ticket() {
  string oid; // 订单号
  cout << "请输入订单号:";
  cin >> oid;

  for (int i = 0; i < ticket_num; i++) {
    Ticket &ticket = tickets[i];
    if (ticket.train_num == oid) {
      ticket.remain++;
      cout << "退票成功!" << endl
           << "车次:" << ticket.train_num << endl
           << "起点站:" << ticket.from_station << endl
           << "终点站:" << ticket.to_station << endl
           << "发车时间:" << ticket.departure_time << endl
           << "到达时间:" << ticket.arrival_time << endl
           << "价格:" << ticket.price << endl
           << "余票数:" << ticket.remain << endl;
      return;
    }
  }

  cout << "订单不存在!" << endl;
}

统计车票销售额和余票数操作

统计车票销售额和余票数操作是为商家提供业务数据的重要功能,需要遍历车票数组,累加余票数和售票总额。

void summary() {
  int remain = 0, sales = 0; // 余票数和售票总额

  for (int i = 0; i < ticket_num; i++) {
    Ticket &ticket = tickets[i];
    remain += ticket.remain;
    sales += ticket.price * (1 + 0.1) * (1 - ticket.remain / 100.0); // 考虑余票数的折扣
  }

  cout << "售出车票总额:" << sales << endl
       << "剩余车票数:" << remain << endl;
}

示例

以下是两个示例,分别展示了查询车票信息和购买车票的操作。

查询车票信息

请输入起点站:北京
请输入终点站:上海

车次:D32
起点站:北京
终点站:上海
发车时间:2021-08-01 09:00
到达时间:2021-08-01 18:00
价格:500
余票数:5

车次:D35
起点站:北京
终点站:上海
发车时间:2021-08-02 08:00
到达时间:2021-08-02 17:00
价格:480
余票数:12

购买车票

请输入需要购买的车次:D35
请输入起点站:北京
请输入终点站:上海

购票成功!
车次:D35
起点站:北京
终点站:上海
发车时间:2021-08-02 08:00
到达时间:2021-08-02 17:00
价格:480
余票数:11
售票总额:528

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现车票管理系统 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • c语言stack(栈)和heap(堆)的使用详解

    C语言 Stack 和 Heap 的使用详解 在C语言中,stack和heap是两种管理内存的方式。了解这两种内存分配的优缺点以及它们的使用方法可以给我们的程序设计带来很多好处。本文将详细讲解stack和heap的用法。 Stack 内存管理 Stack内存管理的定义 Stack是由编译器自动分配和管理的内存区域,其大小可在编译期确定。栈是一种先进后出(LI…

    C 2023年5月23日
    00
  • C++ set到底是什么

    C++的set是一个标准库中的容器,提供了有序关联容器的功能。一个set中的元素是按照特定的顺序排列的,并且每个元素只能在set中出现一次,而且这个元素的值可以作为关键字来使用。下面我们将详细介绍set的主要功能和应用。 1. set的定义和基本操作 定义一个set 定义一个set需要包含头文件<set>,同时set是一个泛型类,可以为任意类型定…

    C 2023年5月23日
    00
  • 从Immutable.js到Redux函数式编程

    从Immutable.js到Redux函数式编程的完整攻略包含以下步骤: 1. 简介 Immutable.js是一个JS库,提供了一组不可变数据结构集合(如List、Map、Set等),可以帮助我们更简洁、高效地处理数据,同时避免出错。而Redux是一个用于JavaScript应用程序的可预测状态容器,可以确保你的应用的行为始终一致且易于测试。借助Immut…

    C 2023年5月22日
    00
  • C++基础学生管理系统

    C++基础学生管理系统:完整攻略 简介 学生管理系统是程序开发中常见的一个小型项目,用于对学生信息、成绩等进行管理。本篇攻略将介绍如何使用C++编写一个简单的学生管理系统。 功能分析 根据需求,我们将实现以下功能: 添加学生信息(包括姓名、学号、性别、年龄、身份证号、联系电话、家庭住址等); 查询所有学生信息; 按条件查询学生信息(可以按学号、姓名、年龄等条…

    C 2023年5月23日
    00
  • C 程序 小写字符串转换为大写字符串

    下面是关于”C程序小写字符串转换为大写字符串”的完整使用攻略。 标题 在文档中,必须标明标题,这样可以很明确地表明当前章节的内容。 C程序小写字符串转换为大写字符串 这是主题的标题,表明了我们要解决的问题。 概述 在讲解使用攻略之前,我们需要了解一下程序的功能和原理。 本程序的主要功能是将小写字符串转换为大写字符串。程序主要利用了C语言标准库中的ctype.…

    C 2023年5月9日
    00
  • VC6.0提示clexe执行出错怎么办? spawningc1exe错误的解决办法

    VC6.0提示clexe执行出错的解决办法 问题描述 在使用VC6.0编译程序时,可能会出现clexe执行出错的提示,这会导致编译无法完成,程序无法正常运行。这个错误一般是由于项目中的某些文件存在问题,导致编译器无法正常编译。 解决步骤 下面是解决clexe执行出错的步骤: 1. 清除编译中间文件 在VC6.0的菜单栏中选择“Build”-〉“Clean”命…

    C 2023年5月23日
    00
  • C++如何判断一个数是不是素数

    当然,作为一个网站的作者,我很乐意为你提供详细的攻略。 在C++中判断一个数是否是素数,通常有两种方法:暴力枚举和筛法。 暴力枚举 暴力枚举是一种较为简单的方法,即对于一个数n,将n分别除以2,3,4,…,n-1,判断它是否能除尽这些数。若一旦出现n%i==0,则说明n不是素数。 暴力枚举的代码实现如下: bool isPrime(int n) { if…

    C 2023年5月23日
    00
  • C语言中栈的两种实现方法

    C语言中栈是一种常用的数据结构,常用于程序中的内存管理、函数调用等场景。在C语言中,栈的实现方法主要有两种:数组实现和链表实现。 数组实现 数组实现是一种简单、直接、易于理解和操作的方式。栈的数组实现要求开辟一段连续的内存空间,容量为栈的最大大小,在程序运行时空间大小固定,但在使用时效率高,适合空间比较紧张的场景。 下面是一个数组实现的栈结构的示意代码: #…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部