天天动画片 > 八卦谈 > 【学习分享】如何用电脑快速画一张列车运行图(上)

【学习分享】如何用电脑快速画一张列车运行图(上)

八卦谈 佚名 2024-04-01 00:27:14


作为一名研究轨道交通的学生,学习过程中总免不了要接触轨道交通运营过程中最重要的计划性文件——列车运行图,它长这样的(图1,虽然画的有点丑):

图 1 一张列车运行图

有多重要呢?可能某一个课程的结课作业就要求画一张列车运行图,或者多年后的毕业设计也和它有关。而我身边的同学大部分还停留在徒手画图或者AutoCAD作图的层面,在铺画运行图方面花费了大量时间,却忽略了优化运行图的步骤。因此这篇经验贴就是为了分享一种计算机自动画图的方法。由于本人并非计算机专业出身,编程基础有限,如果大家有更好的方法,欢迎在评论区交流。

准备:1.一台电脑;2.Visual Studio;3.C#的基础知识(C语言和Java基础也行,都一样);4.面向对象编程思维(了解什么是类);5.没了。

适合:各高校运输学院部分研究轨道交通的被课设和毕设折磨的本科和研一学生。

下面我将分成Visual Studio的安装与配置、明确运行图的数据结构、建立窗体程序和相关的类、文件流操作、显示运行图和运行图的导出六个部分来介绍。

一、Visual Studio的安装与配置

Visual Studio(简称VS)是微软开发的编译器,能运行多种计算机高级语言,特别是在运用C#制作窗体程序时其能提供交互式功能,仅需拖动工具即可设计一个计算机窗口,节省了大量的编程工作量。因此我们选择VS和C#来制作我们的程序。

我们进入VS官网(https://visualstudio.microsoft.com/zh-hans/),下载社区版community版本(这个版本是免费的,如果会破解的专业版和企业版也可以),如图2红框部分

图 2  Visual Studio官网页面

注意是Visual Studio,不是Visual Studio Code!!!如果是Mac电脑,可能就需要安装Windows虚拟机了(Mac OS无法创建WinForm程序)。

下载后的安装包长图3这样(版本号可以不管,长这样就行),双击打开。

图 3  下载后的安装包

经过一系列安装步骤,大家会看到一个选择界面,我们要选择.NET桌面开发,其他的可以根据自身需要选取,点击安装即可,如图4。

图 4  安装时的选择界面

二、明确运行图的数据结构

1、输入数据的结构

安装完成后,我们就可以创建我们的程序。但是,在此之前我们应该先确定我们的运行图以怎样的数据结构输入进程序之中。

 一般运行图有两种形式,一种是类似于从网站爬下来的数据格式,例如表1:

表 1  第一种时刻表格式(应该在表上面)

还有一种格式是矩阵格式,如表2:

表 2 第二种时刻表格式(也应该在表上面)

本贴以第一种时刻表格式为例进行下面步骤,如果是第二种时刻表格式可以进行一下数据转换。之后我们可以把数据存为CSV文件(比较好处理,不容易出BUG)。

CSV文件创建如下:建立Excel表格—>输入需要的数据—>另存为为CSV文件。

对于车站里程数据也是同样是操作,转化为CSV文件。

2、数据在程序中的结构

上面介绍的是输入数据的结构,但是数据输入到程序中需要一定的数据结构来储存以方便调用,在本程序中我们主要用到Dictionary<Key, Value>和List<item>两种数据结构。

 字典Dictionary<Key, Value>是C#中的一个类,具体应用的方法见下面的链接:

https://www.cnblogs.com/hejianchun/articles/3498204.html

列表List<item>是C#中另外一个类,具体应用的方法见下面的链接:

https://www.cnblogs.com/RandyLau/p/7365959.html

(感谢上面两位博主的贴文)

我们用到的字典和列表如下:

所有列车列表List<Train> TrainList

上行列车列表List<Train> upTrainList;

下行列车列表List<Train> downTrainList;

所有列车字典Dictionary<string, Train> TrainDic;

上行列车字典Dictionary<string, Train> UpTrainDic;

下行列车字典Dictionary<string, Train> DownTrainDic;

车站列表List<Station> stationList;

车站名列表List<String> stationStringList;

车站里程列表List<double> stationMileList;

(由于当时是本人第一次设计运行图程序,所以很多数据结构是没必要的或有更简单的表示方法,这个留给各位读者去改进)

三、建立窗体程序和相关的类

1、建立窗体程序

如果大家学过C语言,应该在程序运行时见到过一个黑框框(也就是命令行),这是“控制台程序”运行时的效果,看起来很原始,不像一个软件该有的亚子。今天我们介绍的是另一种程序模板——“窗体程序”。

首先我们还是像创建C语言的步骤一样先创建一个项目,点击文件—>新建—>项目,如图5。

图 5  新建项目

随后我们看到下面的界面,在下拉菜单选择C#和Windows,往下翻大家会看到“Windows窗体应用(.NET Framework)”选择创建就好啦,见图6。

图 6  创建窗体程序

创建之后的编译器界面就长这样,见下图7。

图 7  窗体程序的界面

2、创建相关的类

除了窗体类以外,我们还需要创建一般的类来管理我们的数据,我们先调出“解决方案资源管理器”如下图所示(可能不在这个地方,可按“Ctrl+Alt+L”调出),右键解决方案,添加新建项,图8。

图 8  新建项

点击后进入一个新窗口,选择C#类,给新的类一个需要的名字,按“添加”按钮即可,如下图9所示。

图 9  新建一个类

根据上述步骤,我们可以创建四个类DataManager、PaintTool、Train和Station。

Train类是管理列车这一对象(是Objective,并不是那个对象哦ヽ(・ω・´メ))的类,包括下列各种属性:判断是否初次生成列车字典的变量newbool(bool)、存放车次信息的变量TrainNo(string)、存放始发站的变量OriSta(string)、存放终到站的变量DesSta(string)、存放列车在各站时刻信息的字典staTimeDic(Dictionary<string, List<string>>)、存放列车在各站时刻信息的列表staList(List<string>)、存放列车在各站时刻int信息的字典MinuteDic(Dictionary<string, List<int>>)、存放列车是否停站信息的字典isStopDic(Dictionary<string, bool>)和存放列车运行方向变量Dir(string)。

Station类是管理车站之一对象的类,包括下列各种属性:存放车站序号的变量stationNo(string)、存放车站名称的变量stationName(string)、存放车站累计里程的变量totalMile(int)、存放车站上行到达列车的列表upStaTraArrList(List<Train>)、存放车站上行出发列车的列表upStaTraDepList(List<Train>)、存放车站下行到达列车的列表downStaTraArrList(List<Train>)和存放车站下行出发列车的列表downStaTraDepList(List<Train>)。

PaintTool类(在主程序调用时表示为pt)主要存放各种画图的方法,这些方法主要分为两个函数:绘制运行图框架的函数以及绘制运行图运行线的函数。这点将在第五部分详细介绍。

DataManager类(在主程序调用时表示为dm)主要存放各种数据和数据处理的方法。各种数据已经在2.2节(数据在程序中的结构)中列出,大家可以往上查看。关于数据处理的方法,每个人的处理方式都不同,总之就是将2.1节(输入数据的结构)转化为程序中的字典和列表以方便程序的调用。在这里我引用别人的数据处理方法,把数据处理分为“读取车站文件”、“读取列车信息”、“根据车次尾号将列车存入上行或下行列车字典”、“把车和车站关联,生成车站的列车列表”“将上下行的停站存入是否停站字典”以及“将时间格式转化为整数格式”这6个方法。其中“读取车站文件”的方法如下图10所示,其余方法参见源程序,其中牵扯文件流的知识在第四章展开。

图 10  读取车站文件的函数

上述过程的源程序我已经上传入Github(https://github.com/Julian-Yu/TrainTimetable.git),大家感兴趣可以下载下来。

这部分我们首先分享了如何安装VS,并创建窗体程序。随后我们介绍了输入文件的数据格式以及数据在程序中的存储结构,最后分享了如何创建几个绘制运行图所需要的类。接下来下一个经验贴我们将分享运行图程序中如何读取输入文件,如何在PictureBox中绘制运行图,并将所需要的运行图导出成PNG或JPG格式的图片。

本文标题:【学习分享】如何用电脑快速画一张列车运行图(上) - 八卦谈
本文地址:www.ttdhp.com/article/52869.html

天天动画片声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
扫码关注我们