当前位置: 首页 > news >正文

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;
}

程序运行演示:

相关文章:

  • t.k.x's ACM(3)---险过的网上预赛
  • 计算机网络实验: 使用Wireshark抓包工具进行应用层和传输层网络协议分析(TCP部分)
  • t.k.x's ACM(5)---平静的上海
  • 计算机网络实验: 使用Wireshark抓包工具进行应用层和传输层网络协议分析(HTTP部分)
  • t.k.x's ACM(6)---总结
  • 数据库理论:计算机数据库技术在信息管理中的应用分析
  • 郁闷的一天
  • 数据结构:参数化循环链表的C++实现(实现异常捕获)
  • 编译原理:TINY语言的语法、词法单元与文法的最全总结
  • ACCESS在NTFS中只能读不能修改问题
  • 学期结束前的聚餐
  • 常见运算符缩写的含义总结:ASSIGN、EQ、LT、GT、PLUS、MINUS、TIMES、OVER、LPAREN、RPAREM、SEMI
  • C++程序设计:三角形图形输出
  • 中国十大名茶及鉴别方法
  • C++程序设计:用户输入判断(判断输入字符是数字、字母还是其他字符,经典问题)
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2019年如何成为全栈工程师?
  • CSS相对定位
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Flex布局到底解决了什么问题
  • Java基本数据类型之Number
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS数组方法汇总
  • Vue 2.3、2.4 知识点小结
  • vue总结
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 阿里云前端周刊 - 第 26 期
  • 百度小程序遇到的问题
  • 从零搭建Koa2 Server
  • 类orAPI - 收藏集 - 掘金
  • 批量截取pdf文件
  • 软件开发学习的5大技巧,你知道吗?
  • 我的zsh配置, 2019最新方案
  • 我与Jetbrains的这些年
  • 因为阿里,他们成了“杭漂”
  • 用jquery写贪吃蛇
  • 云大使推广中的常见热门问题
  • 责任链模式的两种实现
  • 阿里云ACE认证之理解CDN技术
  • 国内开源镜像站点
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • $.ajax()方法详解
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (算法)前K大的和
  • (原創) 未来三学期想要修的课 (日記)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Linux整合apache和tomcat构建Web服务器
  • ***监测系统的构建(chkrootkit )
  • *setTimeout实现text输入在用户停顿时才调用事件!*