用c#完成并且有执行程序的窗体 计算天数 本题要求编写程序计算某年某月某日是该年中的第几天。 输入格式: 输入在一行中按照格式“yyyy/dd”(即“年/月/日”)给出日期。注意:闰年的判别 条件是该年年份能被 4 整除但不能被 100 整除、或者能被 400 整除。闰年的 2 月有 29 天。 输出格式: 在一行输出日期是该年中的第几天。 输入样例 1: 2009/03/02 输出样例 1: 61 输入样例 2: 2000/03/02 输出样例 2: 62
时间: 2023-06-23 20:07:55 浏览: 83
以下是用 C# 编写的窗体程序,实现计算某年某月某日是该年中的第几天:
```csharp
using System;
using System.Windows.Forms;
namespace 计算天数
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnCalculate_Click(object sender, EventArgs e)
{
string input = tbInput.Text.Trim();
int year, month, day;
if (!IsValidInput(input, out year, out month, out day))
{
MessageBox.Show("输入格式不正确!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
int days = CalculateDays(year, month, day);
tbOutput.Text = days.ToString();
}
private bool IsValidInput(string input, out int year, out int month, out int day)
{
year = month = day = 0;
string[] parts = input.Split('/');
if (parts.Length != 3) return false;
if (!int.TryParse(parts[0], out year)) return false;
if (!int.TryParse(parts[1], out month)) return false;
if (!int.TryParse(parts[2], out day)) return false;
if (year <= 0 || month <= 0 || month > 12 || day <= 0 || day > 31) return false;
if (month == 2 && !IsLeapYear(year) && day > 28) return false;
if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) return false;
return true;
}
private bool IsLeapYear(int year)
{
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
private int CalculateDays(int year, int month, int day)
{
int days = 0;
for (int i = 1; i < month; i++)
{
switch (i)
{
case 2:
days += IsLeapYear(year) ? 29 : 28;
break;
case 4:
case 6:
case 9:
case 11:
days += 30;
break;
default:
days += 31;
break;
}
}
days += day;
return days;
}
}
}
```
其中,`IsValidInput` 方法用于检验输入格式是否正确,`IsLeapYear` 方法用于判断某年是否是闰年,`CalculateDays` 方法用于计算某个日期是该年中的第几天。
在窗体中,通过一个文本框 `tbInput` 输入日期,点击“计算”按钮后,调用 `btnCalculate_Click` 方法计算并输出结果到另一个文本框 `tbOutput` 中。需要注意的是,由于输入格式不正确时无法计算,因此需要在 `btnCalculate_Click` 方法中进行判断,并在出错时弹出错误提示框。
阅读全文