一个看网课时做的小练习程序,几年前刚学编程时挣扎了一节课都没有写出来,再次挑战没想到思路清晰流畅,一口气写下来了。下面是所有的代码,可以参考借鉴,也请大佬们多多指教。 (〃'▽'〃)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace yearCalendar
{
class Program
{
enum Month { 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月 };
/// <summary>
/// 根据年月日,获取星期数的方法
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">月份</param>
/// <param name="day">天</param>
/// <returns>星期数</returns>
private static int GetWeekByDay(int year, int month, int day)
{
DateTime dt = new DateTime(year, month, day);
return (int)dt.DayOfWeek;
}
/// <summary>
/// 判断是否是闰年
/// </summary>
/// <param name="year">年份</param>
/// <returns>ture是闰年,false不是闰年</returns>
private static bool IsLeapYear(int year)
{
bool flag;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
flag = true;
else
flag = false;
return flag;
}
/// <summary>
/// 输入年份和月份,获取当月的天数
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">月份</param>
/// <returns>当月天数</returns>
private static int GetMonthDay(int year, int month)
{
int dayFlag = 0;
switch (month)
{
case 2:
bool flag = IsLeapYear(year);
if (flag == false) dayFlag = 1;
else dayFlag = 2;
break;
case 4:
case 6:
case 9:
case 11:
dayFlag = 3;
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayFlag = 4;
break;
default:
Console.WriteLine("Something wrong when count the days of the month!");
break;
/*优秀代码参考
if (month < 1 || month > 12) return 0;
switch (month)
{
case 2:
return IsLeapYear(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
*/
}
if (dayFlag == 1) return 28;
else if (dayFlag == 2) return 29;
else if (dayFlag == 3) return 30;
else if (dayFlag == 4) return 31;
else
{
Console.WriteLine("Flag was wrong!");
return 0;
}
}
/// <summary>
/// 输入年份和月份,打印月历
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">月份</param>
private static void CreateMonth(int year, int month)
{
Console.Write(year + "年");
Console.WriteLine(Enum.GetName(typeof(Month),month-1));
Console.WriteLine("\r\n日\t一\t二\t三\t四\t五\t六");
int weekDay = GetWeekByDay(year, month, 1);
int monthDay = GetMonthDay(year, month);
int flag = weekDay;
for (int i = 0; i < weekDay; i++)
{
Console.Write("\t");
}
for (int i = 1; i < monthDay + 1; i++)
{
Console.Write("{0}\t",i);
flag++;
if (flag % 7 == 0)
{
Console.Write("\r\n");
}
}
Console.Write("\r\n");
Console.WriteLine("------------------------------------------------------");
}
/// <summary>
/// 输入年份,打印年历
/// </summary>
/// <param name="year">年份</param>
private static void CreateYear(int year)
{
for (int i = 1; i < 13; i++)
{
CreateMonth(year, i);
}
}
static void Main(string[] args)
{
//int weekday = GetWeekByDay(2020,3,10);
//bool flag = IsLeapYear(2000);
//int monthDay = GetMonthDay(2020,3);
//Console.WriteLine(monthDay);
//CreateMonth(2020,3);
//Console.ReadLine();
Console.WriteLine("Please enter the year:");
int year = int.Parse(Console.ReadLine());
CreateYear(year);
Console.ReadLine();
}
}
}