2015年4月23日 星期四

[2015][Quiz]MidExam_R02945022

Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace midterm2
{
    public partial class Form1 : Form
    {
        MyDateTime date = new MyDateTime();

        public Form1()
        {
            InitializeComponent();
        }

        private void btnEnter_Click(object sender, EventArgs e)
        {
            date._year = Convert.ToInt16(txtYear.Text);
            date._month = cboMonth.SelectedIndex + 1;
            date._day = cboDay.SelectedIndex + 1;

            if (rBtnIsLeap.Checked)
            {
                if (date.IsLeap()==true)
                {
                    txtMessage.Text = date._year.ToString() + "年是閏年";
                }
                else
                {
                    txtMessage.Text = date._year.ToString() + "年是平年";
                }
            }
            else if (rBtnIsValid.Checked)
            {
                if (date.IsValid()==true)
                {
                    txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "合法";
                }
                else
                {
                    txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "不合法";
                }
            }
            else if (rBtnWeekDay.Checked)
            {  
                switch (date.WeekDay())
                {
                    case 0:
                        txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "是星期天";
                        return;
                    case 1:
                        txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "是星期一";
                        return;
                    case 2:
                        txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "是星期二";
                        return;
                    case 3:
                        txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "是星期三";
                        return;
                    case 4:
                        txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "是星期四";
                        return;
                    case 5:
                        txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "是星期五";
                        return;
                    case 6:
                        txtMessage.Text = date._year.ToString() + "/" + date._month.ToString() + "/" + date._day.ToString() + "是星期六";
                        return;
                }
            }
            else if (rBtnCalendar.Checked)
            {
                date._day = 1;
                int start = date.WeekDay();
                txtMessage.AppendText("\tSun\tMon\tTue\tWed\tThu\tFri\tSat\n");
                for (int i = 0; i < start; i++)
                {
                    txtMessage.AppendText("\t");
                }
                for (int i=1;i<=date.DaysOfMonth();i++)
                {
                    txtMessage.AppendText("\t" + i.ToString());
                    if ((start + i) % 7 == 0)
                    {
                        txtMessage.AppendText("\n");
                    }
                }
            }
            else
            {
                txtMessage.Text="請選擇功能";
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            txtMessage.Clear();
        }
    }
}

MyDateTime.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace midterm2
{
    class MyDateTime
    {
        public int _year;
        public int _month;
        public int _day;

        public bool IsLeap()
        {
            if (_year%4==0 && _year%100!=0 || _year%400==0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public int DaysOfMonth()
        {
            switch (_month)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    return 31;
                case 4:
                case 6:
                case 9:
                case 11:
                    return 30;
                case 2:
                    if (IsLeap() != true)
                    {
                        return 28;
                    }
                    else
                    {
                        return 29;
                    }
                default:
                    return 0;
            }   
        }

        public bool IsValid()
        {
            if (_day <= DaysOfMonth())
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public int WeekDay()
        {           
            int tempYear = _year;
            int tempMonth = _month;
            int centry;
            int yearEnd;
            int weekDay;

            tempMonth = ((_month + 9) % 12) + 1;
            if (_month == 1 || _month == 2)
            {
                tempYear -= 1;
            }
            centry=tempYear/100;
            yearEnd = tempYear % 100;
            weekDay = (_day + Convert.ToInt16(Math.Floor(2.6 * tempMonth - 0.2))+yearEnd+(yearEnd/4)+(centry/4)-2*centry)%7;
            if (weekDay<0)
            {
                weekDay += 7;
            }
            return weekDay;
        }
    }
}

1 則留言:

  1. 小細節:私有欄位使用_camelCase,在MyDateTime.cs裡面的"_year, _month, _day"最好也設為private,並配上attribute提供外界存取。(另外,該class可以直接存取自己的private fields,可以不必透過屬性)

    回覆刪除