飲水思源:金老師的自學網站算法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.Title = "my title" + DateTime.Now; Console.ForegroundColor = System.ConsoleColor.DarkGreen; Console.BackgroundColor = System.ConsoleColor.White; Console.WriteLine("Hello worldd 2019-04-28"); String userinput = Console.ReadLine(); Console.WriteLine("{0}這是兩個佔位符號{1}", userinput, userinput.Length); Console.Beep(); Console.ReadKey(); // ReadKey是Console類的另外一個方法,用於接收按鍵 Console.ReadKey(true); // 添加true參數不回顯所接收按鍵 // 生成的.exe文件可運行在任何具備相應版本.NET的計算機上 } } }
結構化編程通常設計步驟:編程
PPT截圖:數組
開發時,依據依賴關係由下至上。一般狀況,避免跨層調用。數據結構
namespace CalculateDaysForSP { //封裝日期信息 public struct MyDate { public int Year; //年 public int Month; //月 public int Day; //日 } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CalculateDaysForSP { class Program { //存放每個月天數,第一個元素爲0是由於數組下標從0起,而咱們但願按月份直接獲取天數 static int[] months = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static void Main(string[] args) { MyDate d1, d2; //起始日期和結束日期 //1999年5月10日 d1.Year = 1999; d1.Month = 5; d1.Day = 10; //2006年3月8日 d2.Year = 2006; d2.Month = 3; d2.Day = 8; //計算結果 int days = CalculateDaysOfTwoDate(d1, d2); string str = "{0}年{1}月{2}日到{3}年{4}月{5}日共有天數:"; str = String.Format(str, d1.Year, d1.Month, d1.Day, d2.Year, d2.Month, d2.Day); Console.WriteLine(str + days); //暫停,敲任意鍵結束 Console.ReadKey(); } //計算兩個日期中的成天數 static int CalculateDaysOfTwoDate(MyDate beginDate, MyDate endDate) { int days = 0; days = CalculateDaysOfTwoYear(beginDate.Year, endDate.Year); if (beginDate.Year == endDate.Year) days += CalculateDaysOfTwoMonth(beginDate, endDate, true); else days += CalculateDaysOfTwoMonth(beginDate, endDate, false); return days; } //計算兩年之間的全年天數,不足一年的去掉 static int CalculateDaysOfTwoYear(int beginYear, int endYear) { int days = 0; for (int i = beginYear + 1; i <= endYear - 1; i++) { if (IsLeapYear(i)) days += 366; else days += 365; } return days; } //根據兩個日期,計算出這兩個日期之間的天數 static int CalculateDaysOfTwoMonth(MyDate beginDate, MyDate endDate, bool IsInOneYear) { int days = 0; //對於同一月,天數直接相減 if (beginDate.Month == endDate.Month) if (IsInOneYear) return endDate.Day - beginDate.Day; else if (IsLeapYear(beginDate.Year)) return 366 + (endDate.Day - beginDate.Day); else return 365 + (endDate.Day - beginDate.Day); //不一樣月 int i = 0; if (IsInOneYear) { //同一年 for (i = beginDate.Month; i <= endDate.Month; i++) { days += months[i]; //處理閏二月 if ((IsLeapYear(beginDate.Year) && (i == 2))) days += 1; } //減去月初到起始日的天數 days -= beginDate.Day; //減去結束日到月底的天數 days -= months[endDate.Month] - endDate.Day; } else { //不一樣年 //計算到年末的天數 for (i = beginDate.Month; i <= 12; i++) days += months[i]; //減去月初到起始日的天數 days -= beginDate.Day; //從年初到結束月的天數 for (i = 1; i <= endDate.Month; i++) days += months[i]; //減去結束日到月底的天數 days -= months[endDate.Month] - endDate.Day; } return days; } //根據年數判斷其是否爲閏年 static bool IsLeapYear(int year) { //若是年數能被400整除,是閏年 if (year % 400 == 0) { return true; } //能被4整除,但不能被100整除,是閏年 if (year % 4 == 0 && year % 100 != 0) { return true; } //其餘狀況,是平年 return false; } } }
MyDate.cs同上,但命名空間改成CalculateDaysForOOide
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CalculateDaysForOO { /// <summary> /// 用於完成日期計算 /// </summary> public class DateCalculator { //存放每個月天數,第一個元素爲0是由於數組下標從0起,而咱們但願按月份直接獲取天數 private int[] months = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; //計算兩個日期中的成天數 public int CalculateDaysOfTwoDate(MyDate beginDate, MyDate endDate) { int days = 0; days = CalculateDaysOfTwoYear(beginDate.Year, endDate.Year); if (beginDate.Year == endDate.Year) days += CalculateDaysOfTwoMonth(beginDate, endDate, true); else days += CalculateDaysOfTwoMonth(beginDate, endDate, false); return days; } //計算兩年之間的全年天數,不足一年的去掉 private int CalculateDaysOfTwoYear(int beginYear, int endYear) { int days = 0; for (int i = beginYear + 1; i <= endYear - 1; i++) { if (IsLeapYear(i)) days += 366; else days += 365; } return days; } //根據兩個日期,計算出這兩個日期之間的天數 private int CalculateDaysOfTwoMonth(MyDate beginDate, MyDate endDate, bool IsInOneYear) { int days = 0; //對於同一月,天數直接相減 if (beginDate.Month == endDate.Month) if (IsInOneYear) return endDate.Day - beginDate.Day; else if (IsLeapYear(beginDate.Year)) return 366 + (endDate.Day - beginDate.Day); else return 365 + (endDate.Day - beginDate.Day); //不一樣月 int i; if (IsInOneYear) { //同一年 for (i = beginDate.Month; i <= endDate.Month; i++) { days += months[i]; //處理閏二月 if ((IsLeapYear(beginDate.Year) && (i == 2))) days += 1; } //減去月初到起始日的天數 days -= beginDate.Day; //減去結束日到月底的天數 days -= months[endDate.Month] - endDate.Day; } else { //不一樣年 //計算到年末的天數 for (i = beginDate.Month; i <= 12; i++) days += months[i]; //減去月初到起始日的天數 days -= beginDate.Day; //從年初到結束月的天數 for (i = 1; i <= endDate.Month; i++) days += months[i]; //減去結束日到月底的天數 days -= months[endDate.Month] - endDate.Day; } return days; } //根據年數判斷其是否爲閏年 private bool IsLeapYear(int year) { //若是年數能被400整除,是閏年 if (year % 400 == 0) { return true; } //能被4整數,但不能被100整除,是閏年 if (year % 4 == 0 && year % 100 != 0) { return true; } //其餘狀況,是平年 return false; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CalculateDaysForOO { class Program { static void Main(string[] args) { MyDate d1, d2; //起始日期和結束日期 //1999年5月10日 d1.Year = 1999; d1.Month = 5; d1.Day = 10; //2006年3月8日 d2.Year = 2006; d2.Month = 3; d2.Day = 8; string str = "{0}年{1}月{2}日到{3}年{4}月{5}日共有天數:"; str = String.Format(str, d1.Year, d1.Month, d1.Day, d2.Year, d2.Month, d2.Day); //建立類CalculateDate的對象,讓變量obj引用它 DateCalculator obj = new DateCalculator(); //調用對象obj的CalculateDaysOfTwoDate方法計算 int days = obj.CalculateDaysOfTwoDate(d1, d2); Console.WriteLine(str + days); //暫停,敲任意鍵結束 Console.ReadKey(); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CalculatorDaysUseDotNet { class Program { static void Main(string[] args) { DateTime d1 = new DateTime(1999, 5, 10); DateTime d2 = new DateTime(2006, 3, 8); //計算結果 double days = (d2 - d1).TotalDays; string str = "{0}年{1}月{2}日到{3}年{4}月{5}日共有天數:"; str = String.Format(str, d1.Year, d1.Month, d1.Day, d2.Year, d2.Month, d2.Day); Console.WriteLine(str + days); //暫停,敲任意鍵結束 Console.ReadKey(); } } }