C++实现地铁自动售票系统程序设计

 更新时间:2022年03月14日 12:15:23   作者:乔卿  
这篇文章主要为大家详细介绍了C++实现地铁自动售票系统程序设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++实现地铁自动售票系统的具体代码,供大家参考,具体内容如下

题目描述:

地铁是当今城市较为流行的一种铁路运输的形式,地铁能避免城市地面拥挤,充分利用空间,具有运量大、准时、正点率较其他公交高、速度快等优点。请设计一个简易的、带菜单的地铁自动售票机系统。

功能需求:

(1)设计一个地铁路线类Router,包含路线编号,途中的各个站点。

(2)设计一个地图类Map,可以显示所有可以乘坐的地铁站名,以及线路信息。

(3)根据用户输入的起点和终点和人次信息,可以自动计算应付金额;根据用户输入的金额,计算找零信息。

程序设计:

#include <iostream>
#include <vector>
using namespace std;
 
class Router {
 
    private:
 
        string port[100];//经过站点
        int id;//路线编号
        int count=0; //站点数目
 
    public:
 
        void setId(int i) {
            id=i;
        }
 
        void addPort(string name) {
            port[count]=name;
            count++;
        }
 
        void getPort() {
            int i=0;
            for(i=0; i<count; i++) {
                cout<<"第"<<i+1<<"站:";
                cout<<port[i];
                cout<<endl;
            }
        }
 
        int check(string u,string v) {
            int d=0;
            for(int i=0; i<count; i++) {
                if(port[i]==u) {
                    for(int j=0; j<count; j++) {
                        if(port[j]==v) {
                            // u v
                            return ((i-j)>=0)?
                                   (i-j):(j-i);
                        }
                    }
                }
            }
            return 0;
        }
};
 
 
class Map {
 
    private:
        vector<Router> r;//路线图
 
 
    public:
        double charge=2;//每站价格
        void setCharge(double ch) {
            charge=ch;
        }
 
        void init() {
 
            Router temp1;
            temp1.setId(1);
            temp1.addPort("west");
            temp1.addPort("mid1");
            temp1.addPort("south");
            r.push_back(temp1);
 
            Router temp2;
            temp2.setId(2);
            temp2.addPort("south");
            temp2.addPort("mid2");
            temp2.addPort("east");
            r.push_back(temp2);
 
            Router temp3;
            temp3.setId(3);
            temp3.addPort("east");
            temp3.addPort("mid3");
            temp3.addPort("north");
            r.push_back(temp3);
 
            Router temp4;
            temp4.setId(4);
            temp4.addPort("north");
            temp4.addPort("mid4");
            temp4.addPort("west");
            r.push_back(temp4);
        }
 
        int buy(string start, string end) {
            int count=r.size();
            int d=0;
            for(int i=0; i<count; i++) {
                Router temp=r[i];
                d=temp.check(start,end);
                if(d>0) {
                    cout<<"您需要乘坐"<<i+1<<"号线"<<endl;
                    return d;
                }
            }
            return 0;
        }
 
        void show() {
            int count=r.size();
            cout<<"本市地铁线路图如下:"<<endl;
            for(int i=0; i<count; i++) {
                cout<<i+1<<"号线:"<<endl<<endl;
                Router temp=r[i];
                temp.getPort();
                cout<<endl<<endl;
            }
        }
};
 
 
void menu() {
    int m;
    Map map;
    map.init();
    while(1) {
        cout<<endl<<endl<<endl;
        cout<<"----------欢迎来到地铁售票系统-----------"<<endl;
        cout<<"----------1、路线查询-----------"<<endl;
        cout<<"----------2、购票-----------"<<endl;
        cin>>m;
        if(m==1) {
            map.show();
        } else if(m==2) {
            
            cout<<"请输入起点:"<<endl;
            string s;
            cin>>s;
            cout<<"请输入终点:"<<endl;
            string e;
            cin>>e;
            cout<<"请输入人数:"<<endl;
            int c;
            cin>>c;
            int d=map.buy(s,e);
            if(d>0) {
                double rs=(double)c*(double)d*map.charge;
                cout<<"您需要支付的费用为:";
                cout<<rs<<endl;
                cout<<"请输入您支付的金额:";
                double in=0;
                cin>>in;
                if(in>=rs) {
                    cout<<"购票成功!"<<endl;
                    cout<<"找零:"<<in-rs<<"元"<<endl;
                } else {
                    cout<<"金额不足,购票失败!";
                }
            } else {
                cout<<"抱歉,请选择其他交通!";
            }
        }
    }
}
 
int main() {
    menu();
    return 0;
}

程序运行演示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++简单又好用的基本运算符重载

    C++简单又好用的基本运算符重载

    继友元知识过后,就到了今天的C++运算符重载的内容了,运算符重载是C++里比较重要的内容。这篇博文不会一下子讲完各种运算符重载,因为太多了了也不好吸收掌握,所以运算符重载我准备分多次记录和分享,那么接下来进入正文
    2022-06-06
  • C/C++表格组件Qt TableWidget应用详解

    C/C++表格组件Qt TableWidget应用详解

    本文详细讲解了C/C++中使用列表框组件Qt TableWidget的方法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • OpenCV + MFC实现简单人脸识别

    OpenCV + MFC实现简单人脸识别

    这篇文章主要为大家详细介绍了OpenCV + MFC实现简单人脸识别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • C++编程中私有和保护以及公有的类成员访问控制

    C++编程中私有和保护以及公有的类成员访问控制

    这篇文章主要介绍了C++编程中私有和保护以及公有的类成员访问控制,即private和protected以及public关键字的相关作用和用法,需要的朋友可以参考下
    2016-01-01
  • C语言杨辉三角两种实现方法

    C语言杨辉三角两种实现方法

    大家好,本篇文章主要讲的是C语言杨辉三角两种实现方法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 深入理解c++模板中的class与typename

    深入理解c++模板中的class与typename

    在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?下面这篇文章主要给大家介绍了关于c++模板中class与typename的相关资料,需要的朋友可以参考下。
    2017-07-07
  • 使用c语言轻松实现动态内存管

    使用c语言轻松实现动态内存管

    这篇文章主要介绍了使用c语言轻松实现动态内存管,本文章内容详细,具有很好的参考价值,希望对大家有所帮助,需要的朋友可以参考下
    2023-01-01
  • C++ 指针常量和常量指针的区别小结

    C++ 指针常量和常量指针的区别小结

    在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,本文主要介绍了C++ 指针常量和常量指针的区别小结,感兴趣的可以了解一下
    2023-12-12
  • pthread_cond_wait() 用法深入分析

    pthread_cond_wait() 用法深入分析

    以下是对pthread_cond_wait的用法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-07-07
  • C语言详细讲解#error与#line如何使用

    C语言详细讲解#error与#line如何使用

    这篇文章主要介绍了C语言中#error与#line如何使用,#error与#line虽然在语言里面用的比较少,但是还是有必要了解一下
    2022-04-04

最新评论