2015年4月9日 星期四

[2015][Homework]Team03 - Hw03

namespace practice
{
    class Test
    {
        static void KeyInPara(MyDateTime date)
        {
            int year;
            int month;
            int day;
            do
            {
                Console.WriteLine("輸入一個西元年份");
                year = Convert.ToInt16(Console.ReadLine());
                if (year > 0)
                    date.Year = year;
                else
                    Console.WriteLine("重新輸入");
            } while (date.Year < 0);
            do
            {
                Console.WriteLine("輸入一個西元月份");
                month = Convert.ToInt16(Console.ReadLine());
                if (month > 0)
                    date.Month = month;
                else
                    Console.WriteLine("重新輸入");
            } while (date.Month < 0);
            do
            {
                Console.WriteLine("輸入一個西元日期");
                day = Convert.ToInt16(Console.ReadLine());
                if (month > 0)
                    date.Day = day;
                else
                    Console.WriteLine("\n重新輸入");
            } while (date.Day < 0);
        }
        static void DetermineWeeks(MyDateTime date,int year, int month, int day)
        {
            Console.WriteLine("{0}/{1}/{2} : ", year,month,day);
            switch(date.DetermineWeek(year,month,day))
            {
                case 0:
                    Console.WriteLine("星期日");
                    break;
                case 1:
                    Console.WriteLine("星期一");
                    break;
                case 2:
                    Console.WriteLine("星期二");
                    break;
                case 3:
                    Console.WriteLine("星期三");
                    break;
                case 4:
                    Console.WriteLine("星期四");
                    break;
                case 5:
                    Console.WriteLine("星期五");
                    break;
                case 6:
                    Console.WriteLine("星期六");
                    break;
            }
        }
        static void Main(string[] args)
        {
            MyDateTime date = new MyDateTime();
            string iscontinue="y";
            do
            {
                KeyInPara(date);
                Console.WriteLine("====================我是分隔線====================");
                Console.WriteLine("{0}/{1}/{2}", date.Year, date.Month, date.Day);
                if (date.DetermineLeapYear(date.Year) == true)
                {
                    Console.WriteLine("{0}是閏年", date.Year);
                    Console.WriteLine("{0}年有366天", date.Year);
                }
                else
                {
                    Console.WriteLine("{0}是平年", date.Year);
                    Console.WriteLine("{0}年有365天", date.Year);
                }
                Console.WriteLine("{0}/{1}月 有{2}天", date.Year, date.Month, date.CountDayofMonth(date.Year, date.Month));
                DetermineWeeks(date, date.Year, date.Month, date.Day);
                Console.WriteLine("====================我是分隔線====================");
                Console.WriteLine("\n是否繼續(y)");
                iscontinue = Console.ReadLine();
            } while (iscontinue == "y");
            Console.WriteLine("按任意鍵結束");
            Console.ReadKey();
        }
    }
}
namespace practice
{
    class MyDateTime
    {
        public int Year;
        public int Month;
        public int Day;

        public bool DetermineLeapYear(int year)
        {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) //可被4整除 && 不可被100整除 ||可被400整除
                return true;
            return false;
        }
        public int CountDayofMonth(int year, int month)
        {
            if ((1 <= month) && (month <= 12) && month != 2)
            {
                if (month <= 7)
                {
                    if ((month % 2) == 1)
                        return 31;
                    else
                        return 30;
                }
                else
                {
                    if ((month % 2) == 1)
                        return 30;
                    else
                        return 31;
                }
            }
            else
                if (DetermineLeapYear(year) == true)
                    return 29;
                else
                    return 28;
        }
        public int DetermineWeek(int year, int month, int day)
        {
            double frontofyears, behindofyear;
            double week;
            frontofyears = year / 100;
            behindofyear = year % 100;
            if (month == 1 || month == 2)
            {
                if (month == 1)
                {
                    month = 13;
                    year--;
                }
                else
                {
                    month = 14;
                    year--;
                }
            }
            week = behindofyear + Math.Floor(behindofyear / 4) + Math.Floor(frontofyears / 4) - 2 * frontofyears +
                Math.Floor((26 * ((double)month + 1)) / 10) + day - 1;
            if (week < 0)
                week = (week % 7 + 7) % 7;
            else
                week %= 7;

            if (month == 13)
            {
                month = 1;
                year++;
            }
            else 
            {
                month = 2;
                year++;
            }
            return (int)week;
        }
        public bool DetermineDayIslegal(int year,int month,int day)
        {
            if (year < 0)
                return false;
            else
                if (month < 1 || month > 12)
                    return false;
                else
                    if (day > CountDayofMonth(year, month))
                        return false;
                    else
                        return true;
        }
        public int CountDayBetweenOther(int year, int month, int day, int year2, int month2, int day2)
        {
            int sumOfDay = 0;
            for (int i = year2; year < i; i--)
            {
                if (DetermineLeapYear(year++) == true)
                    sumOfDay += 366;
                else
                    sumOfDay += 365;
            }
            for (int i = month2 - 1; i >= 1; i--)
                sumOfDay += CountDayofMonth(year2, i);
            for (int i = month - 1; i >= 1; i--)
                sumOfDay -= CountDayofMonth(year2, i);
            return sumOfDay + day2 - day - 1;
            
        }
    }
}

沒有留言:

張貼留言