C#,《小白学程序》第八课:列表(List)其二,编制《高铁列车时刻表》与时间DateTime

1 文本格式
/// <summary>
/// 车站信息类 class
/// </summary>
public class Station
{
/// <summary>
/// 编号
/// </summary>
public int Id { get; set; } = 0;
/// <summary>
/// 车站名
/// </summary>
public string Name { get; set; } = string.Empty;
public Station(int id, string name)
{
this.Id = id;
this.Name = name;
}
}
// 列表的初值
List<Station> stations = new List<Station>() {
new Station(1,"北京"),
new Station(2,"石家庄"),
new Station(3,"香河"),
new Station(4,"唐山"),
new Station(5,"北戴河"),
new Station(6,"秦皇岛"),
new Station(7,"廊坊"),
new Station(8,"天津"),
};
/// <summary>
/// 《小白学程序》第八课:列表(List)应用之二————编制高铁列车时刻表
/// 列车时刻表的每一行一般都是:车站 到达时间 出发时间
/// 两个车站之间的开行时间 time = distance / speed
/// 出发时间 = 到达时间 + 停靠时间
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button8_Click(object sender, EventArgs e)
{
// #1 创建列表(列车车次信息)
List<Station> G103 = new List<Station>();
// #2 添加节点(车站信息)
G103.Add(stations[0]);
G103.Add(stations[2]);
G103.Add(stations[3]);
G103.Add(stations[4]);
G103.Add(stations[5]);
// #3 时间相关的信息
// 各车站之间的距离(公里)
// 每个数据表示与前面一个车站的距离;起点站当然为0;
double[] distance = new double[] { 0, 50, 100, 140, 20 };
// 每个车站的停靠时间(分钟)
// 每个数据表示停靠时间,起点站 与 终点站 不需要!
double[] stop = new double[] { 0, 2, 2, 2, 0 };
// 列车的平均时速(公里/小时,km/h)
double speed = 160;
StringBuilder sb = new StringBuilder();
// #4 计算开始
// 设定开行时间(10点01分)
DateTime start = DateTime.Parse("10:01:00");
for (int i = 0; i < 5; i++)
{
if (i == 0)
{
// 起点站;没有到达时间;只需要输出出发时间;
sb.AppendLine(G103[i].Name + " " + start.ToString("HH:mm") + " 出发<br>");
}
else if (i == 4)
{
// 终点站;没有出发时间,只需要计算到达时间;
// 算出的是列出运行时间(小时),后面一行转为 秒
double t = distance[i] / speed;
t = t * 60 * 60;
// 到达时间 = 上一站出发时间 + 开行时间
// 本函数统一(按秒计算)
DateTime arrive = start.AddSeconds(t);
sb.AppendLine(G103[i].Name + " " + arrive.ToString("HH:mm") + " 到达<br>");
}
else
{
// 其他车站;需要计算到达时间与出发时间
double t = distance[i] / speed;
t = t * 60 * 60;
// 1 到达时间;
DateTime arrive = start.AddSeconds(t);
sb.AppendLine(G103[i].Name + " " + arrive.ToString("HH:mm") + " 到达 ");
// 2 出发时间(分钟,转为秒)
start = arrive.AddSeconds(stop[i] * 60);
sb.AppendLine(start.ToString("HH:mm") + " 出发<br>");
}
}
webBrowser1.DocumentText = sb.ToString();
}

2 代码格式
/// <summary>
/// 车站信息类 class
/// </summary>
public class Station
{/// <summary>/// 编号/// </summary>public int Id { get; set; } = 0;/// <summary>/// 车站名/// </summary>public string Name { get; set; } = string.Empty;public Station(int id, string name){this.Id = id;this.Name = name;}
}// 列表的初值
List<Station> stations = new List<Station>() {new Station(1,"北京"),new Station(2,"石家庄"),new Station(3,"香河"),new Station(4,"唐山"),new Station(5,"北戴河"),new Station(6,"秦皇岛"),new Station(7,"廊坊"),new Station(8,"天津"),
};/// <summary>
/// 《小白学程序》第八课:列表(List)应用之二————编制高铁列车时刻表
/// 列车时刻表的每一行一般都是:车站 到达时间 出发时间
/// 两个车站之间的开行时间 time = distance / speed
/// 出发时间 = 到达时间 + 停靠时间
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button8_Click(object sender, EventArgs e)
{// #1 创建列表(列车车次信息)List<Station> G103 = new List<Station>();// #2 添加节点(车站信息)G103.Add(stations[0]);G103.Add(stations[2]);G103.Add(stations[3]);G103.Add(stations[4]);G103.Add(stations[5]);// #3 时间相关的信息// 各车站之间的距离(公里)// 每个数据表示与前面一个车站的距离;起点站当然为0;double[] distance = new double[] { 0, 50, 100, 140, 20 };// 每个车站的停靠时间(分钟)// 每个数据表示停靠时间,起点站 与 终点站 不需要!double[] stop = new double[] { 0, 2, 2, 2, 0 };// 列车的平均时速(公里/小时,km/h)double speed = 160;StringBuilder sb = new StringBuilder();// #4 计算开始// 设定开行时间(10点01分)DateTime start = DateTime.Parse("10:01:00");for (int i = 0; i < 5; i++){if (i == 0){// 起点站;没有到达时间;只需要输出出发时间;sb.AppendLine(G103[i].Name + " " + start.ToString("HH:mm") + " 出发<br>");}else if (i == 4){// 终点站;没有出发时间,只需要计算到达时间;// 算出的是列出运行时间(小时),后面一行转为 秒double t = distance[i] / speed;t = t * 60 * 60;// 到达时间 = 上一站出发时间 + 开行时间// 本函数统一(按秒计算)DateTime arrive = start.AddSeconds(t);sb.AppendLine(G103[i].Name + " " + arrive.ToString("HH:mm") + " 到达<br>");}else{// 其他车站;需要计算到达时间与出发时间double t = distance[i] / speed;t = t * 60 * 60;// 1 到达时间;DateTime arrive = start.AddSeconds(t);sb.AppendLine(G103[i].Name + " " + arrive.ToString("HH:mm") + " 到达 ");// 2 出发时间(分钟,转为秒)start = arrive.AddSeconds(stop[i] * 60);sb.AppendLine(start.ToString("HH:mm") + " 出发<br>");}}webBrowser1.DocumentText = sb.ToString();
}

相关文章:
C#,《小白学程序》第八课:列表(List)其二,编制《高铁列车时刻表》与时间DateTime
1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary&g…...
高德地图使用逆地理编码服务
进入高德地图开发者平台申请web服务,并获取web服务生成的key下面是高德地图官网的逆地理编码服务使用说明https://lbs.amap.com/api/webservice/guide/api/georegeo/ getAddressByLocation(latitude, longitude) {const key key; // 高德地图key密钥const url h…...
ArgoCD基本组件
ArgoCD有5个基本组件, $ kubectl get po -n argocd NAME READY STATUS RESTARTS AGE argocd-application-controller-0 1/1 Running 0 19h argocd-dex-server-767fb49f59-7rxn7 1/1 Running 0…...
技术分享 | 在 IDE 插件开发中接入 JCEF 框架
项目背景 当前的开发环境存在多种不同语言的 IDE,如 JetBrains 全家桶、Eclipse、Android Studio 和 VS Code 等等。由于每个 IDE 各有其特定的语言和平台要求,因此开发 IDE 插件时,需要投入大量资源才能尽可能覆盖大部分工具。同时…...
ubuntu 使用webrtc_ros 编译linux webrtc库
ubuntu 使用webrtc_ros 编译linux webrtc库 webrtc_ros 使用WebRTC流式传输ROS图像主题 该节点提供了一个WebRTC对等方,可以将其配置为流ROS图像主题并接收发布到ROS图像主题的流。 该节点托管一个提供简单测试页面的Web服务器,并提供可用于创建和配置W…...
网络通信基础概念介绍
网络通信基础概念介绍 局域网LAN 局域网,即 Local Area Network,简称LAN。 局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。 局域网是指在一个相对较小的…...
quickapp_快应用_全局数据
全局数据 [1]本地数据存储[2] 数据缓存问题 有时在接口请求的某个数据需要在多个页面使用,此时有2个方法 [1] 将数据存储在本地—> 等价于浏览器的localStorage[2] 将数据存储在数据缓存中 -> 等价于vue中的vuex [1]本地数据存储 官方文档:官方…...
Unity接入Protobuf介绍
Protobuf介绍 Protobuf(Protocol Buffers,简称Proto)是一种轻量级和高效率的数据序列化格式,由Google公司开发。与XML和JSON等文本格式不同,Protobuf是一种二进制格式,它具有更小的体积和更快的速度。在大…...
【anaconda】numpy.dot 向量点乘小技巧
假设向量A[1,1], 向量B[2,3]。如果想知道他们的内积就可以输入如下代码: 当然,如果是两个列向量相乘,肯定是不对的 但是如果没有维度也一样可以求得内积,而且结果不会套在列表里...
YOLOv5小目标检测层
目录 一、原理 二、yaml配置文件 一、原理 小目标检测层,就是增加一个检测头,增加一层锚框,用来检测输入图像中像素较小的目标 二、yaml配置文件 # YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters nc: 3 # number of classes depth_multiple: 0.33 # model…...
mysql 更改密码
由于两台设备的mysql数据库的密码不一样,开发时每次连接数据库都需要更改配置文件,所以想修改一下mysql数据库的密码。 mysql 修改密码千万不要直接修改,直接修改的话会出现两种情况: 1,修改成功,无法登录。…...
Android YUV存储方式
排名 性能:YUV444 > YUV422 > YUV420 > YUV411 YUV444:YUV444 提供最高质量的色彩准确性和图像细节,但需要更多的存储空间和传输带宽。适用于对图像质量要求很高的应用,如专业视频编辑或高端图像处理。YUV422࿱…...
SSM家具个性定制管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
一、源码特点 SSM 家具个性定制管理系统是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用…...
来自Microsoft Teams的摄像头背景图片
原文件在👆,下面是预览图 如果你安装了Microsoft Teams也可以搜索MSTeams,就在MSTeams/Backgrounds...
飞书如何接入ChatGPT-打造个人智能问答助手实现无障碍交流
目录 前言 环境列表 1.飞书设置 2.克隆feishu-chatgpt项目 3.配置config.yaml文件 4.运行feishu-chatgpt项目 5.安装cpolar内网穿透 6.固定公网地址 7.机器人权限配置 8.创建版本 9.创建测试企业 10. 机器人测试 总结 前言 在飞书中创建chatGPT机器人并且对话&am…...
Proteus仿真--基于1602LCD的秒表设计
本文介绍基于1602LCD的秒表设计(完整仿真源文件及代码见文末链接) 仿真图如下 本设计中80C51单片机作为主控,用1602LCD作为显示模块,共有2个按键,K1按键用于秒表计时启停控制,K2用于清零显示内容 仿真运…...
香港站群服务器中1C/2C/4C/8C 的概念及区别
在选择香港站群服务器时,经常会看到1C、2C、4C和8C等不同的IP段。这些IP段代表了不同的子网掩码长度,也反映了服务器的IP地址数量和丰富性。 让我们来了解一下什么是IP段。IP段是指一组连续的IP地址,其中每个地址的前三个数字相同&…...
搭建SRS视频服务器
去官方网站下载FFmpeg6.1 https://ffmpeg.org/download.html拷贝到CentOS7.9中的/opt目录下,解压并重命名 tar -xvf ffmpeg-6.1.tar.xz 解压后编译安装 ./configure make make install从github下载SRS4.0release 解压后 如果ffmpeg的路径不在/usr/local/bin/ffmpe…...
【C++初阶】STL详解(八)List的模拟实现
本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…...
Day02嵌入式---按键控灯
一、简单介绍 按键控制灯开关是一种常见的嵌入式系统示例项目,它通常用于演示嵌入式系统的基本控制能力。该项目由一个或多个LED和一个按键组成。通过按下按键,可以控制LED的开关状态,从而实现灯的亮灭控制。 二、查看功能手册 2.1 查看硬件…...
HJ177 可匹配子段计数
知识点双指针 校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。 描述 给定整数数组 aa(长度 nn)与数组 bb(长度 mm,m≦nm≦n)。设一个长度…...
从混凝土到桥梁:手把手教你用Python和LabelImg为裂缝检测任务制作自己的数据集
从混凝土到桥梁:手把手教你用Python和LabelImg为裂缝检测任务制作自己的数据集 在基础设施健康监测领域,裂缝检测一直是计算机视觉技术落地的典型场景。现成的公开数据集虽然提供了便利,但当你的项目遇到特殊材质表面、特定光照条件或非标准拍…...
为什么用户越来越依赖IT服务台?从工单系统看企业效率被“反向放大”的问题
一、一个被忽视的变化:用户越来越“离不开IT”在很多企业的日常运营中,有一个变化正在悄悄发生,但却很少被系统性分析。那就是:业务部门对IT服务台的依赖程度,正在持续上升。最初,IT服务台的设立࿰…...
程序员必备:如何用Raycast和Alfred打造高效macOS开发环境(2023最新配置)
程序员必备:如何用Raycast和Alfred打造高效macOS开发环境(2023最新配置) 在快节奏的开发工作中,效率工具的选择往往能决定一天的产出量。作为长期使用macOS的开发者,我尝试过几乎所有主流效率工具,最终形成…...
深入解析AMD Ryzen处理器硬件调试:5大核心功能实战指南
深入解析AMD Ryzen处理器硬件调试:5大核心功能实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...
Proxmox VE终极配置工具:pvetools高效管理脚本的深度解析
Proxmox VE终极配置工具:pvetools高效管理脚本的深度解析 【免费下载链接】pvetools proxmox ve tools script(debian9 can use it).Including email, samba, NFS set zfs max ram, nested virtualization ,docker , pci passthrough etc. for english user,please …...
【Matlab】MATLAB教程:小波去噪原理、wden函数实操及信号噪声去除应用
本文基于MATLAB R2020b编写(兼容R2018及以上版本),聚焦小波去噪核心原理、wden函数实操细节、信号噪声去除工程应用三大模块,构建“理论基础→函数实操→案例应用→工程拓展”的完整闭环。内容兼顾入门性与实用性,无需深入推导复杂数学公式,重点突出MATLAB实操步骤,结合…...
Noto字体终极指南:如何免费获得900+语言支持的完整字体解决方案
Noto字体终极指南:如何免费获得900语言支持的完整字体解决方案 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 想要彻底告别网页和应用中的"豆腐块"乱码问题吗&…...
大族打标机 TCP 工具类优先设计 + 追溯打标业务落地
本文按工程实施顺序组织:大族 TCP 客户端工具类源码;追溯打标业务源码;IP、端口、模板名动态配置方案(含建表 SQL)。一、大族打标机 TCP 工具类1.1 协议约定大族打标常见指令(ASCII):…...
在Win11上玩转ARM开发:用QEMU搭建openEuler ARM64虚拟机的保姆级避坑指南
在Win11上玩转ARM开发:用QEMU搭建openEuler ARM64虚拟机的保姆级避坑指南 ARM架构正在重塑计算生态——从树莓派到苹果M系列芯片,再到云服务器的ARM实例,开发者越来越需要跨平台兼容能力。本文将带你用QEMU在Windows 11上构建完整的ARM64开发…...
