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


    代码直接CSC编译即可。

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

      1 using System;
      2 using System.Diagnostics;
      3 using System.IO;
      4 
      5 class Program
      6 {
      7     static ConsoleColor DefaultForegroundColor = Console.ForegroundColor; //保留Console前景色
      8     
      9     static int Main(params string[] args)
     10     {
     11         int days = 0; //预售天数
     12         if (args.Length>0)
     13         {
     14             if(!int.TryParse(args[0], out days))
     15             {
     16                 ShowHelpAndExit(1); //第一个参数错误
     17             }
     18             else if(args.Length>1)
     19             {
     20                 DateTime argsDate; //出行日期
     21                 if(args[1].Trim().Equals("now",StringComparison.OrdinalIgnoreCase))
     22                 {
     23                     argsDate = DateTime.Now.AddDays(days - 1); //出行日期为now的话,计算出今天可预订的出行日期
     24                 }
     25                 else if(!DateTime.TryParse(args[1], out argsDate))
     26                 {
     27                     ShowHelpAndExit(2); //第二个参数错误
     28                 }                
     29                 Console.WriteLine("
     * 火车票预售期为:{0}天
    
    出行日期:{1}",days, FormatDate(argsDate));
     30                 OutputBookingDay(days, argsDate); //输出预售日期
     31                 var paused = true;
     32                 if(args.Length>2)
     33                 {
     34                     if(args[2].Trim().Equals("nopause",StringComparison.OrdinalIgnoreCase))
     35                     {
     36                         paused = false; //第三个参数为 nopause 则不暂停直接退出,用于配合命令提示符
     37                     }
     38                 }
     39                 if(paused)
     40                 {
     41                     Console.Write("
    按任意键退出...");
     42                     Console.ReadKey(true);
     43                 }
     44                 Environment.Exit(0); //正常退出
     45             }
     46         }
     47         else
     48         {
     49             Console.WriteLine("计算从哪天起应该购买预售火车票"); //未带参数,输出标题
     50             Console.WriteLine();
     51         }
     52         if(days <= 0)
     53         {
     54             Console.Write("火车票预售期(缺省为60天):");
     55             var input=Console.ReadLine().Trim();  //手动输入预售期
     56             inputToExit(input);
     57             if (!int.TryParse(input, out days)||days<=0)
     58             {
     59                 days = 60; //输入错误,预售期设置为60天
     60                 ConsoleCursorRelativeLine(-1); //光标移动到上一行行首。
     61                 var point = ConsoleCursorGetCurrentPosition();
     62                 if(point!=null)
     63                 {
     64                     ConsoleCursorFillLines(point.Value.Top,point.Value.Top, ' '); //清除光标所在行的显示字符(用空格填充)
     65                     Console.Write("火车票预售期(缺省为60天):{0}
    ", days);
     66                 }
     67             }
     68         }
     69         Console.WriteLine("
     * 火车票预售期为:{0}天",days);
     70         Console.WriteLine(" * 今天可以预定 {0} 的火车票", FormatDate(DateTime.Now.AddDays(days - 1)));
     71         Console.WriteLine(" * 输入"exit"可退出程序,输入"g"打开12306订票网站。
    ");
     72         while(true)
     73         {
     74             Console.Write("出行日期:");  //输入出行日期
     75             var input = Console.ReadLine().Trim();
     76             inputToExit(input);  //若输入exit则退出
     77             if(input.Equals("g",StringComparison.OrdinalIgnoreCase))
     78             {
     79                 const string web = "http://www.12306.cn";
     80                 Process.Start(web); //输入g打开12306网站
     81                 Console.WriteLine("正在打开 {0} ", web);
     82             }
     83             else
     84             {
     85                 DateTime dest;
     86                 if(DateTime.TryParse(input, out dest))
     87                 {
     88                     ConsoleCursorRelativeLine(-1);
     89                     var point = ConsoleCursorGetCurrentPosition();
     90                     if(point!=null)
     91                     {
     92                         ConsoleCursorFillLines(point.Value.Top,point.Value.Top, ' '); //清除前一行显示字符
     93                         Console.WriteLine("出行日期:{0}",FormatDate(dest)); //更新输出日期
     94                     }
     95                     OutputBookingDay(days, dest);
     96                 }
     97                 else
     98                 {
     99                     Console.ForegroundColor = ConsoleColor.Red;
    100                     Console.WriteLine("输入错误"); //显示输出错误
    101                     Console.ForegroundColor = DefaultForegroundColor;
    102                     ConsoleCursorRelativeLine(-3); //光标向上移动3行
    103                     var point = ConsoleCursorGetCurrentPosition();
    104                     if(point!=null)
    105                     {
    106                         ConsoleCursorFillLines(point.Value.Top,point.Value.Top+1, ' ');
    107                     }
    108                 }
    109             }
    110             Console.WriteLine();
    111         }
    112     }
    113     
    114     static void inputToExit(string input)
    115     {
    116         if(input.Equals("exit", StringComparison.OrdinalIgnoreCase))
    117         {
    118              Environment.Exit(0); //用户退出
    119         }
    120     }
    121     
    122     static void ShowHelp()
    123     {
    124         //帮助提示
    125         var appname = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
    126         Console.WriteLine(" * 参数格式:");
    127         Console.WriteLine("   {0} <火车票预售期>", appname);
    128         Console.WriteLine("   {0} <火车票预售期> <出行日期> [nopause]", appname);
    129         Console.WriteLine("   {0} <火车票预售期> now [nopause]", appname);
    130         Console.WriteLine("
     * 例子:预售期60天,查看今天可以预定哪天火车票");
    131         Console.WriteLine("   {0} 60 now", appname);
    132         Console.WriteLine("
     * 批处理:");
    133         Console.WriteLine("   {0} 60 now nopause|Find "出行日期:"", appname);
    134         Console.WriteLine();
    135     }
    136     
    137     static void ShowHelpAndExit(int exitcode)
    138     {
    139         ShowHelp(); //显示帮助提示然后按任意键退出
    140         Console.Write("按任意键退出...");
    141         Console.ReadKey(true);
    142         Environment.Exit(exitcode); //返回错误码(errorlevel)
    143     }
    144     
    145     static string FormatDate(DateTime date)
    146     {
    147         ConsoleColor? cc;
    148         return FormatDate(date, out cc); //格式化日期
    149     }
    150     
    151     static string[] dayOfWeek = new []{ "周日", "周一", "周二", "周三", "周四", "周五", "周六" };
    152     static string FormatDate(DateTime date, out ConsoleColor? consoleColor)
    153     {        
    154         var d = (date.Date - DateTime.Now.Date).Days;
    155         string tip;
    156         switch (d)
    157         {
    158             case -2:
    159                 tip = "(前天)";
    160                 break;
    161             case -1:
    162                 tip = "(昨天)";
    163                 break;
    164             case 0:
    165                 tip = "(今天)";
    166                 break;
    167             case 1:
    168                 tip = "(明天)";
    169                 break;
    170             case 2:
    171                 tip = "(后天)";
    172                 break;
    173             default:
    174                 tip = string.Format("({0})",dayOfWeek[(int)date.DayOfWeek]);
    175                 break;
    176         }
    177         
    178         if (d>=0)
    179         {
    180             consoleColor = ConsoleColor.Green;  //返回建议颜色,下同
    181         }
    182         else
    183         {
    184             consoleColor = ConsoleColor.Yellow;
    185         }
    186         
    187         return string.Format("{0:yyyy-M-d}{1}", date, tip);
    188     }
    189     
    190     static void OutputBookingDay(int days, DateTime destDate)
    191     {
    192         var date = destDate.AddDays(-days + 1);
    193         ConsoleColor? cc;
    194         var formattedDest = FormatDate(date, out cc);
    195         Console.ForegroundColor = DefaultForegroundColor;
    196         Console.Write("预售日期:"); //用缺省前景色显示“预售日期:”这几个字
    197         if(cc.HasValue)
    198         {
    199             Console.ForegroundColor = cc.Value; //更换前景色
    200         }
    201         Console.WriteLine(formattedDest); //按格式输出预售日期
    202         Console.ForegroundColor = DefaultForegroundColor; //还原缺省前景色
    203     }
    204     
    205     static bool ConsoleCursorRelativeLine(int rows)
    206     {
    207         //将ConsoleCursor操作封装成方法,加入try语句,防止在非控制台下输出造成异常,下同
    208         try
    209         {
    210             var t = Console.CursorTop + rows; //相对行号
    211             Console.SetCursorPosition(0, t); //移动光标到相对行
    212             return true; //成功
    213         }
    214         catch
    215         {
    216         }
    217         return false; //失败
    218     }
    219     
    220     static bool ConsoleCursorFillLines(int startLine, int endLine, char @char)
    221     {
    222         var d = endLine - startLine + 1;
    223         if (d>0)
    224         {
    225             try 
    226             {
    227                 var point = ConsoleCursorGetCurrentPosition().Value;            
    228                 Console.SetCursorPosition(0, startLine); //光标移动到起始行
    229                 Console.Write(new string(@char,Console.BufferWidth * d)); //用字符填满指定行数(d)
    230                 Console.SetCursorPosition(point.Left, point.Top); //返回光标原来的位置
    231                 return true; //成功
    232             }
    233             catch
    234             {
    235             }
    236         }
    237         return false; //失败
    238     }
    239     
    240     static Point? ConsoleCursorGetCurrentPosition()
    241     {
    242         try
    243         {
    244             return new Point(Console.CursorLeft, Console.CursorTop); //返回光标位置
    245         }
    246         catch
    247         {
    248         }
    249         return null; //失败
    250     }
    251     
    252     struct Point
    253     {
    254         public int Left;
    255         public int Top;
    256         
    257         public Point(int left, int top)
    258         {
    259             Left = left;
    260             Top = top;
    261         }
    262     }
    263 }
  • 相关阅读:
    C#语言和SQL Server数据库技术_My Bank银行系统
    C#语言和SQL Server数据库技术_深入C#的String类
    C#语言和SQL Server数据库技术_C#语法快速热身
    HTML_利用CSS3制作网页动画
    HTML_定位网页元素
    HTML_浮动
    HTML_盒子模型
    HTML_css3美化网页元素
    iview中select搜索
    第六章、Vue项目预热
  • 原文地址:https://www.cnblogs.com/Bob-wei/p/4444645.html
Copyright © 2020-2023  润新知