星座類 (UserLib.World.Time.Constellation)

以下是星座類,用於判斷你屬於哪個星座,也可以獲取星座對應當日期範圍

 

其中涉及到的類Segment將會在文章末尾解釋

 

using System;

using System.Collections.Generic;

using System.Text;

 

namespace UserLib.World.Time

{

    /// <summary>

    /// 星座

    /// </summary>

    public class Constellation

     {

        private static Segment[] data=new Segment[12];         //保存星座數據

 

        /// <summary>

        /// 日期索引函數

        /// </summary>

        /// <param name="dt">日期</param>

        /// <returns>對應的索引</returns>

        private static int Index(DateTime dt)

        {

            //將年份統一爲

            //因爲年是閏年,當輸入的日期爲月日時,程序不會出錯

            DateTime rdt = new DateTime(2000, dt.Month, dt.Day);

            for(int i=0;i<12;i++)

            {

                if (rdt>=data[i].StartDateTime && rdt<=data[i].EndDateTime)

                {

                    return i;

                }

            }

            return -1;

        }

 

        /// <summary>

        /// 中文名稱索引函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <returns>對應的索引</returns>

        private static int IndexCN(string cnName)

        {

            for (int i = 0; i < 12; i++)

            {

                if (data[i].CNName == cnName)

                {

                    return i;

                }

            }

            return -1;

        }

 

        /// <summary>

        /// 英文名稱索引函數

        /// </summary>

        /// <param name="enName">英文名稱</param>

        /// <returns>對應的索引</returns>

        private static int IndexEN(string enName)

        {

            for (int i = 0; i < 12; i++)

            {

                if (data[i].ENName.ToLower() == enName.ToLower())

                {

                    return i;

                }

            }

            return -1;

        }

 

        /// <summary>

        /// 構造函數

        /// </summary>

        static Constellation()

        {

            data[0] = new Segment("水瓶座", "Aquarius", new DateTime(2000, 1, 21), new DateTime(2000, 2, 18));

            data[1] = new Segment("雙魚座", "Pisces", new DateTime(2000, 2, 19), new DateTime(2000, 3, 20));

            data[2] = new Segment("白羊座", "Aries", new DateTime(2000, 3, 21), new DateTime(2000, 4, 20));

            data[3] = new Segment("金牛座", "Taurus", new DateTime(2000, 4, 21), new DateTime(2000, 5, 21));

            data[4] = new Segment("雙子座", "Gemini", new DateTime(2000, 5, 22), new DateTime(2000, 6, 21));

            data[5] = new Segment("巨蟹座", "Cancer", new DateTime(2000, 6, 22), new DateTime(2000, 7, 22));

            data[6] = new Segment("獅子座", "Leo", new DateTime(2000, 7, 23), new DateTime(2000, 8, 23));

            data[7] = new Segment("處女座", "Virgo", new DateTime(2000, 8, 24), new DateTime(2000, 9, 22));

            data[8] = new Segment("天秤座", "Libra", new DateTime(2000, 9, 23), new DateTime(2000, 10, 23));

            data[9] = new Segment("天蠍座", "Scorpio", new DateTime(2000, 10, 24), new DateTime(2000, 11, 22));

            data[10] = new Segment("射手座", "Sagittarius", new DateTime(2000, 11, 23), new DateTime(2000, 12, 21));

            data[11] = new Segment("摩羯座", "Capricorn", new DateTime(2000, 12, 22), new DateTime(2000, 1, 20));

        }

 

        /// <summary>

        /// 獲取星座的中文名稱

        /// </summary>

        /// <param name="dt">日期</param>

        /// <returns>星座的中文名稱</returns>

        public static string GetCNName(DateTime dt)

        {

            int i = Index(dt);

            return data[i].CNName;

        }

 

        /// <summary>

        /// 獲取星座的英文名稱

        /// </summary>

        /// <param name="dt">日期</param>

        /// <returns>星座的英文名稱</returns>

        public static string GetENName(DateTime dt)

        {

            int i = Index(dt);

            return data[i].ENName;

        }

 

        /// <summary>

        /// 獲取星座的起始日期

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <returns>星座的起始日期</returns>

        public static DateTime GetStartDateByCNName(string cnName)

        {

            int i = IndexCN(cnName);

            if (i != -1)

            {

                return data[i].StartDateTime;

            }

            else

            {

                throw new IndexOutOfRangeException();

            }

        }

 

        /// <summary>

        /// 獲取星座的終止日期

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <returns>星座的終止日期</returns>

        public static DateTime GetEndDateByCNName(string cnName)

        {

            int i = IndexCN(cnName);

            if (i != -1)

            {

                return data[i].EndDateTime;

            }

            else

            {

                throw new IndexOutOfRangeException();

            }

        }

 

        /// <summary>

        /// 獲取星座的起始日期

        /// </summary>

        /// <param name="enName">英文名稱</param>

        /// <returns>星座的起始日期</returns>

        public static DateTime GetStartDateByENName(string enName)

        {

            int i = IndexEN(enName);

            if (i != -1)

            {

                return data[i].StartDateTime;

            }

            else

            {

                throw new IndexOutOfRangeException();

            }

        }

 

        /// <summary>

        /// 獲取星座的終止日期

        /// </summary>

        /// <param name="enName">英文名稱</param>

        /// <returns>星座的終止日期</returns>

        public static DateTime GetEndDateByENName(string enName)

        {

            int i = IndexEN(enName);

            if (i != -1)

            {

                return data[i].EndDateTime;

            }

            else

            {

                throw new IndexOutOfRangeException();

            }

        }

 

        /// <summary>

        /// 獲取星座的起始日期

        /// </summary>

        /// <param name="dt">日期</param>

        /// <returns>星座的起始日期</returns>

        public static DateTime GetStartDateByDate(DateTime dt)

        {

            int i = Index(dt);

            return data[i].StartDateTime;

        }

 

        /// <summary>

        /// 獲取星座的終止日期

        /// </summary>

        /// <param name="dt">日期</param>

        /// <returns>星座的終止日期</returns>

        public static DateTime GetEndDateByDate(DateTime dt)

        {

            int i = Index(dt);

            return data[i].EndDateTime;

        }

           

     }

}

 

 

下面解釋上文中提到的Segment

 

此類是用於保存每個時間對應當意義或節日名稱,在星座類中用於保存各個星座的時間段。

 

using System;

using System.Collections.Generic;

using System.Text;

 

namespace UserLib.World.Time

{

    /// <summary>

    /// 用於存儲一個時間斷對應的意義

    /// </summary>

    public class Segment

    {

        private string cnName;          //中文名稱

        private string cnShortName;     //中文名稱縮寫

        private string enName;          //英文名稱

        private string enShortName;     //英文名稱縮寫

        private DateTime start;         //起始時間

        private DateTime end;           //終止時間

 

        /// <summary>

        /// 賦值函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <param name="cnShortName">中文名稱縮寫</param>

        /// <param name="enName">英文名稱</param>

        /// <param name="enShortName">英文名稱縮寫</param>

        /// <param name="startDateTime">起始日期</param>

        /// <param name="endDateTime">終止日期</param>

        private void Evaluate(string cnName, string cnShortName, string enName, string enShortName, DateTime startDateTime, DateTime endDateTime)

        {

            this.cnName = cnName;

            this.cnShortName = cnShortName;

            this.enName = enName;

            this.enShortName = enShortName;

            start = startDateTime;

            end = endDateTime;

        }

 

        #region 構造函數

 

        /// <summary>

        /// 構造函數

        /// </summary>

        public Segment() { }

 

        /// <summary>

        /// 構造函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <param name="dateTime">時間</param>

        public Segment(string cnName, DateTime dateTime)

        {

            Evaluate(cnName, null, null, null, dateTime, dateTime);

        }

 

        /// <summary>

        /// 構造函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <param name="enName">英文名稱</param>

        /// <param name="dateTime">時間</param>

        public Segment(string cnName, string enName, DateTime dateTime)

        {

            Evaluate(cnName, null, enName, null, dateTime, dateTime);

        }  

 

        /// <summary>

        /// 構造函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <param name="cnShortName">中文名稱縮寫</param>

        /// <param name="enName">英文名稱</param>

        /// <param name="enShortName">英文名稱縮寫</param>

        /// <param name="dateTime">時間</param>

        public Segment(string cnName, string cnShortName, string enName, string enShortName, DateTime dateTime)

        {

            Evaluate(cnName, cnShortName, enName, enShortName, dateTime, dateTime);

        }

 

        /// <summary>

        /// 構造函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <param name="startDateTime">起始日期</param>

        /// <param name="endDateTime">終止日期</param>

        public Segment(string cnName, DateTime startDateTime, DateTime endDateTime)

        {

            Evaluate(cnName, null, null, null, startDateTime, endDateTime);

        }

 

        /// <summary>

        /// 構造函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <param name="enName">英文名稱</param>

        /// <param name="startDateTime">起始日期</param>

        /// <param name="endDateTime">終止日期</param>

        public Segment(string cnName, string enName, DateTime startDateTime, DateTime endDateTime)

        {

            Evaluate(cnName, null, enName, null, startDateTime, endDateTime);

        }

 

        /// <summary>

        /// 構造函數

        /// </summary>

        /// <param name="cnName">中文名稱</param>

        /// <param name="cnShortName">中文名稱縮寫</param>

        /// <param name="enName">英文名稱</param>

        /// <param name="enShortName">英文名稱縮寫</param>

        /// <param name="startDateTime">起始日期</param>

        /// <param name="endDateTime">終止日期</param>

        public Segment(string cnName, string cnShortName, string enName, string enShortName, DateTime startDateTime, DateTime endDateTime)

        {

            Evaluate(cnShortName, cnShortName, enName, enShortName, startDateTime, endDateTime);

        }

 

        #endregion

 

        #region 屬性

        /// <summary>

        /// 獲取或設置中文名稱

        /// </summary>

        public string CNName

        {

            get

            {

                return cnName;

            }

            set

            {

                cnName = value;

            }

        }

 

        /// <summary>

        /// 獲取或設置中文名稱縮寫

        /// </summary>

        public string CNShortName

        {

            get

            {

                return cnShortName;

            }

            set

            {

                cnShortName = value;

            }

        }

 

        /// <summary>

        /// 獲取或設置英文名稱

        /// </summary>

        public string ENName

        {

            get

            {

                return enName;

            }

            set

            {

                enName = value;

            }

        }

 

        /// <summary>

        /// 獲取或設置英文名稱縮寫

        /// </summary>

        public string ENShortName

        {

            get

            {

                return enShortName;

            }

            set

            {

                enShortName = value;

            }

        }

 

        /// <summary>

        /// 獲取或設置起始時間

        /// </summary>

        public DateTime StartDateTime

        {

            get

            {

                return start;

            }

            set

            {

                start = value;

            }

        }

 

        /// <summary>

        /// 獲取或設置終止時間

        /// </summary>

        public DateTime EndDateTime

        {

            get

            {

                return end;

            }

            set

            {

                end = value;

            }

        }

 

        #endregion

 

    }

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章