计算从哪天起应该购买预售火车票.cs

代码直接CSC编译即可。

using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;

class Program
{
	static ConsoleColor DefaultForegroundColor = Console.ForegroundColor;

	static int Main(params string[] args)
	{
		int days = 0;
		if (args.Length>0)
		{
			if(!int.TryParse(args[0], out days))
			{
				ShowHelp();
				Console.Write("按任意键退出...");
				Console.ReadKey(true);
				Environment.Exit(1); //第一个参数错误
			}
			else if(args.Length>1)
			{
				DateTime argsDate;
				if(args[1].Trim().Equals("now",StringComparison.OrdinalIgnoreCase))
				{
					argsDate = DateTime.Now.AddDays(days - 1);
				}
				else if(!DateTime.TryParse(args[1], out argsDate))
				{
					ShowHelp();
					Console.Write("按任意键退出...");
					Console.ReadKey(true);
					Environment.Exit(2); //第二个参数错误
				}
				Console.WriteLine("\r\n * 火车票预售期为:{0}天\r\n\r\n出行日期:{1}",days, FormatDate(argsDate));
				OutputDays(days, argsDate);
				var paused = true;
				if(args.Length>2)
				{
					if(args[2].Trim().Equals("nopause",StringComparison.OrdinalIgnoreCase))
					{
						paused = false;
					}
				}
				if(paused)
				{
					Console.Write("\r\n按任意键退出...");
					Console.ReadKey(true);
				}
				Environment.Exit(0);
			}
		}
		else
		{
			Console.WriteLine("计算从哪天起应该购买预售火车票");
			Console.WriteLine();
		}
		if(days <= 0)
		{
			Console.Write("火车票预售期(缺省为60天):");
			var input=Console.ReadLine().Trim();
			inputToExit(input);
			if (!int.TryParse(input, out days)||days<=0)
			{
				days = 60;
				ConsoleCursorRelativeLine(-1);
				var point = ConsoleCursorGetCurrentPosition();
				if(point!=null)
				{
					ConsoleCursorFillLines(point.Value.Top,point.Value.Top);
					Console.Write("火车票预售期(缺省为60天):{0}\r\n", days);
				}
			}
		}
		Console.WriteLine("\r\n * 火车票预售期为:{0}天",days);
		Console.WriteLine(" * 今天可以预定 {0} 的火车票", FormatDate(DateTime.Now.AddDays(days - 1)));
		Console.WriteLine(" * 输入\"exit\"可退出程序,输入\"g\"打开12306订票网站。\r\n");
		while(true)
		{
			Console.Write("出行日期:");
		    var input = Console.ReadLine().Trim();
			inputToExit(input);
			if(input.Equals("g",StringComparison.OrdinalIgnoreCase))
			{
				const string web = "http://www.12306.cn";
				Process.Start(web);
				Console.WriteLine("正在打开 {0} ", web);
			}
			else
			{
				DateTime dest;
				if(DateTime.TryParse(input, out dest))
				{
					ConsoleCursorRelativeLine(-1);
					var point = ConsoleCursorGetCurrentPosition();
					if(point!=null)
					{
						ConsoleCursorFillLines(point.Value.Top,point.Value.Top);
						Console.WriteLine("出行日期:{0}",FormatDate(dest));
					}
					OutputDays(days, dest);
				}
				else
				{
					Console.ForegroundColor = ConsoleColor.Red;
					Console.WriteLine("输入错误");
					Console.ForegroundColor = DefaultForegroundColor;
					ConsoleCursorRelativeLine(-3);
					var point = ConsoleCursorGetCurrentPosition();
					if(point!=null)
					{
						ConsoleCursorFillLines(point.Value.Top,point.Value.Top+1);
					}
				}
			}
			Console.WriteLine();
		}
	}

	static void inputToExit(string input)
	{
		if(input.Equals("exit", StringComparison.OrdinalIgnoreCase))
		{
			 Environment.Exit(0);
		}
	}

	static void ShowHelp()
	{
		var appname = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
		Console.WriteLine(" * 参数格式:");
		Console.WriteLine("   {0} <火车票预售期>", appname);
		Console.WriteLine("   {0} <火车票预售期> <出行日期> [nopause]", appname);
		Console.WriteLine("   {0} <火车票预售期> now [nopause]", appname);
		Console.WriteLine("\r\n * 例子:预售期60天,查看今天可以预定哪天火车票");
		Console.WriteLine("   {0} 60 now", appname);
		Console.WriteLine("\r\n * 批处理:");
		Console.WriteLine("   {0} 60 now nopause|Find \"出行日期:\"", appname);
		Console.WriteLine();
	}

	static string FormatDate(DateTime date)
	{
		ConsoleColor? cc;
		return FormatDate(date, out cc);
	}

	static string FormatDate(DateTime date, out ConsoleColor? consoleColor)
	{
		var dayOfWeek = new []{ "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
		var d = (date.Date - DateTime.Now.Date).Days;
		string tip;
		switch (d)
		{
			case -2:
				tip = "(前天)";
				break;
			case -1:
				tip = "(昨天)";
				break;
			case 0:
				tip = "(今天)";
				break;
			case 1:
				tip = "(明天)";
				break;
			case 2:
				tip = "(后天)";
				break;
			default:
				tip = string.Format("({0})",dayOfWeek[(int)date.DayOfWeek]);
				break;
		}

		if (d>=0)
		{
			consoleColor = ConsoleColor.Green;
		}
		else if(d<0)
		{
			consoleColor = ConsoleColor.Yellow;
		}
		else
		{
			consoleColor = null;
		}

		return string.Format("{0:yyyy-M-d}{1}", date, tip);
	}

	static void OutputDays(int days, DateTime destDate)
	{
		var date = destDate.AddDays(-days + 1);
		ConsoleColor? cc;
		var formattedDest = FormatDate(date, out cc);
		Console.ForegroundColor = DefaultForegroundColor;
		Console.Write("预售日期:");
		if(cc.HasValue)
		{
			Console.ForegroundColor = cc.Value;
		}
		Console.WriteLine(formattedDest);
		Console.ForegroundColor = DefaultForegroundColor;
	}

	static bool ConsoleCursorRelativeLine(int rows)
	{
		try
		{
			var t = Console.CursorTop + rows;
			Console.SetCursorPosition(0, t);
			return true;
		}
		catch
		{
		}
		return false;
	}

	static bool ConsoleCursorFillLines(int startLine, int endLine, char @char = ‘ ‘)
	{
		var d = endLine - startLine + 1;
		if (d>0)
		{
			try
			{
				var point = ConsoleCursorGetCurrentPosition().Value;
				Console.SetCursorPosition(0, startLine);
				Console.Write(new string(@char,Console.BufferWidth * d));
				Console.SetCursorPosition(point.Left, point.Top);
			}
			catch
			{
			}
		}
		return false;
	}

	static Point? ConsoleCursorGetCurrentPosition()
	{
		try
		{
			return new Point(Console.CursorLeft, Console.CursorTop);
		}
		catch
		{
		}
		return null;
	}

	struct Point
	{
		public int Left;
		public int Top;

		public Point(int left, int top)
		{
			Left = left;
			Top = top;
		}
	}
}
时间: 2024-10-16 02:58:34

计算从哪天起应该购买预售火车票.cs的相关文章

doeNET Framework 农历 ChineseLunisolarCalendar

C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe test.cs # test.cs using System; using System.Diagnostics; using System.Globalization; using System.IO; class Program { private static readonly ConsoleColor DefaultForegroundColor = Console.ForegroundCol

小程序分销系统扫码点餐预售商城App

微信自从公测之后,铺天盖地的消息都是微信小程序,而且每天都开放新接口,不断更新功能,给企业带来很多创造商机.对于一直关注移动互联网相关项目开发商的赢在移动来说,也是一个很好的开发市场. 小程序扫码点餐系统找150/1315/1740微电,小程序预售商城,小程序分销平台,微信小程序制作,小程序三级分销,小程序购物返利,小程序软件,小程序开发,小程序功能,微信商城,小程序源码 一开始很多人都不知道微信小程序是什么,更别说开发.随着微信小程序系统的出现,认为小程序在未来的确有很多发展的潜能.说个例子,

感动到流泪!数据分析师的福音:跨视图粒度计算

作者:王文开 在网易有数中,我们的目标是使数据分析成为一种愉快的行为. 个人认为一款优秀的数据分析工具应该是能够做到:当用户在使用它做数据分析的时候,已经忘记了工具的存在,而是能够集中关注于发现数据背后揭示的故事.这个可以叫做experience flow,是一种沉浸在数据分析中的喜悦状态. 同时,你一定遇到过这样的情况:有时,你遇到了一个问题,其实是很容易描述清楚的,但当你试图在网易有数中展示并回答,会发现它竟是很难的.此时,刚才提到的experience flow,就没有了感觉,你需要开始思

阿里云云计算认证ACP模拟考试练习题第6套模拟题分享(共10套)

阿里云认证考试包含ACA.ACP.ACE三种认证类型,报名考试最多的是ACP认证考试,本人整理了100道全真阿里云ACP认证考试模拟试题,适合需要参加阿里云ACP认证考试的人复习,模拟练习.此为第6套模拟题分享. 阿里云云计算认证ACP模拟考试练习题6 认证级别 云计算 大数据 云安全 中间件 助理工程师(ACA) 云计算助理工程师认证报名入口 大数据助理工程师认证报名入口 云安全助理工程师认证报名入口 专业工程师(ACP) 云计算工程师认证报名入口 大数据工程师认证报名入口 大数据分析师认证报

c# NPOI通过单元格里的公式,计算数值

业务场景 公司B是母公司A的子公司,每个月都需要将耗材销售情况统计向总公司报账. 其中计算的内容如下: 1.该时间段客户a.b.c ...z的分别购买耗材金额,即该客户端销售额 2.对于a.b.c ...z公司,每销售一个单位数量的耗材都有居间费(抽成) 以上Excel中A-P列是从系统导出来的,其中Q(佣金总额).P(业绩)列是公式拖拽生成的. Q列的公式 H2 * M2(M列如果没有,默认为0) R列的公式 L2 - Q2 以上公式,如果在任何一个Excel中,经过拖拽都很容易实现. 笔者以

计算幂函数的几种方法

引言 我们知道,自然对数的底 e 定义为以下极限值: 这个公式很适合于对幂函数的计算进行一些测试,得到的结果是 e 的近似值,不用担心当 n 很大时计算结果会溢出. 测试程序 下面就是 Tester.cs: 1 using System; 2 using System.Numerics; 3 using System.Diagnostics; 4 using Skyiv.Extensions; 5 6 namespace Skyiv.Test 7 { 8 sealed class Tester

买房哪层好

楼层优劣大比较 买房选择让你更直观了解详细 一层 当发生意外时,比如地震.倒塌.火灾等事故,一层当属最安全的楼层了.这种情况下,如果外窗没有安装用于防盗的栏杆,从一层的房间内逃生就简单一些. 一楼最不安静,如果临街,受路上的汽车尾气.扬尘污染最重.在一些老小区,地下室还会返上来潮气,而且更易受到蚊虫的侵扰.此外,一楼还最易遭盗窃. 二层 相对一楼来说比较安全,尤其是对那些有小孩的家庭而言,更是如此.和一楼的不足之处一样,二楼的楼层也稍低了一些. 三层 综合各方面因素,如果是普通老式的五.六层楼高

模板主要变量注解 - $postlist 帖子内容页

$postlist => $post变量注释: $post => Array(    => 楼层ID    => 版块ID    => 帖子ID    => 1=楼主贴 0=普通楼层    => 作者用户名    => 作者UID    => 主题标题    => 发布时间    => 帖子内容    => 作者IP    => 楼层状态 0=普通    => 匿名用户 0=非匿名    => 是否启用签名 0=否

个人项目——买书

用折后最低价买书 一.程序要求 书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示: 本数                    折扣 2                       5% 3                       10% 4                       20% 5                       25% 根据购买的卷数以及本数,会对应不同折扣规则情况.单数一本书只会对应一个折