C++C#输出阳历万年历

作者在 2020-02-02 06:23:03 发布以下内容
void 输出万年历(int 年, int 月, int 日)

{

	int r = 1, z = r, nn = 年, yy = 月;

	nn = 年; yy = 月;

	while (nn)if (--yy)z += 返回月的天数(nn, yy); else --nn, yy = 13;

	nn = 返回月的天数(年, 月); yy = 1;

	cout << 年 << "年" << 月 << "月" << 日 << "日今天星期 " << (z + 日 - 1) % 7 << "\n星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n.\t";

	while (r <= nn)

	if (yy >= (z %= 7))

		cout << (r > 9 ? "" : "0") << r++ << ((++yy % 7) ? "\t" : "\t\n");

	else

		cout << (r > 1 && r <= 9 ? "0" : "") << (r > 1 ? to_string(r++) : ".") << ((++yy % 7) ? "\t" : "\t\n");

	cout << endl;

}

 

#include <atltime.h>

	CTime time(CTime::GetCurrentTime());

	SYSTEMTIME timeDest;

	time.GetAsSystemTime(timeDest);

	输出万年历(timeDest.wYear, timeDest.wMonth, timeDest.wDay);
void 输出万年历(int 年, int 月, int 日)

{

	int r = 1, z = r, nn = 年, yy = 月;	string aa[] = { "日", "一", "二", "三", "四", "五", "六" };

	nn = 年; yy = 月;

	while (nn)if (--yy)z += 返回月的天数(nn, yy); else --nn, yy = 13;

	nn = 返回月的天数(年, 月); yy = 1;

	cout << 年 << "年" << 月 << "月" << 日 << "日今天星期" << aa[(z + 日 - 1) % 7] << "\n日\t一\t二\t三\t四\t五\t六\n.\t";

	while (r <= nn)

	if (yy >= (z %= 7))

		cout << (r > 9 ? "" : "0") << r++ << ((++yy % 7) ? "\t" : "\t\n");

	else

		cout << (r > 1 && r <= 9 ? "0" : "") << (r > 1 ? to_string(r++) : ".") << ((++yy % 7) ? "\t" : "\t\n");

	cout << endl;

}
        static int 返回月的天数(int N, int Y)

        {//缘由https://bbs.csdn.net/topics/395074486

            return (Y == 2 ? (((((N % 4) == 0 && (N % 100) > 0) || (N % 400) == 0) ? true : false) ? 29 : 28)

                : (((Y <= 7 && (Y % 2) > 0) || (Y > 7 && (Y % 2) == 0)) ? 31 : 30));

        }

        static void 输出万年历(int 年, int 月, int 日)

        {

            int r = 1, z = r, nn = 年, yy = 月; string[] aa = { "日", "一", "二", "三", "四", "五", "六" };

            nn = 年; yy = 月;

            while (nn > 0) if (--yy > 0) z += 返回月的天数(nn, yy); else { --nn; yy = 13; }

            nn = 返回月的天数(年, 月); yy = 1; z %= 7;

            Console.Write("{0}年{1}月{2}日今天星期{3}\n日\t一\t二\t三\t四\t五\t六\n::\t", 年, 月, 日, "日一二三四五六"[(z + 日 - 1) % 7]);

            while (r <= nn)

                if (yy >= z)

                    Console.Write("{0}{1}{2}", (r > 9 ? "" : "0"), (r++).ToString(), ((++yy % 7) > 0 ? "\t" : "\t\n"));

                else

                    Console.Write("{0}{1}{2}", (r > 1 && r <= 9 ? "0" : ""), (r > 1 ? (r++).ToString() : "::"), ((++yy % 7) > 0 ? "\t" : "\t\n"));

        }

 

 

            输出万年历(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); Console.WriteLine();
void 输出万年历(int 年, int 月, int 日)

{

	int r = 1, z = r, nn = 年, yy = 月; string s = "日一二三四五六";

	while (nn)if (--yy)z += 返回月的天数(nn, yy); else --nn, yy = 13;

	nn = 返回月的天数(年, 月); yy = (z + 日 - 1) % 7 * 2;

	cout << 年 << "年" << 月 << "月" << 日 << "日" << ends << "星期"; cout.put(s[yy]).put(s[yy + 1]) << endl;

	cout << "日" << ends << "一" << ends << "二" << ends << "三" << ends << "四" << ends << "五" << ends << "六";

	yy = 0;

	while (r <= nn)

	if (yy >= (z %= 7))

	if (!(yy++ % 7))cout << endl << (r > 9 ? "" : "0") << r++ << ends; else cout << (r > 9 ? "" : "0") << r++ << ends;

	else

	if (!(yy++ % 7))cout << endl << "::" << ends; else cout << (r > 1 && r <= 9 ? "0" : "") << (r > 1 ? to_string(r++) : "::") << ends;

	cout << endl;

}
void 输出万年历(int 年, int 月, int 日)

{

	int r = 1, z = r, nn = 年, yy = 月;

	string 星期[] = { "日", "一", "二", "三", "四", "五", "六" };

	while (nn)if (--yy)z += 返回月的天数(nn, yy); else --nn, yy = 13;

	nn = 返回月的天数(年, 月); yy = 0;

	cout << 年 << "年" << (月 > 9 ? "" : "0") << 月 << "月" << (日 > 9 ? "" : "0") << 日 << "日星期" << 星期[(z + 日 - 1) % 7] << endl;

	while (yy < 7)cout << 星期[yy++] << ends; yy = 0;

	while (r <= nn)

		if (yy >= (z %= 7))

			if (!(yy++ % 7))cout << endl << (r > 9 ? "" : "0") << r++ << ends; else cout << (r > 9 ? "" : "0") << r++ << ends;

		else

			if (!(yy++ % 7))cout << endl << "::" << ends; else cout << (r > 1 && r <= 9 ? "0" : "") << (r > 1 ? to_string(r++) : "::") << ends;

	cout << endl;

}


using System.Globalization;//农历
        static string 月历加载()
        {
            System.Globalization.ChineseLunisolarCalendar 微软农历 = new System.Globalization.ChineseLunisolarCalendar();
            int 天 = 微软农历.GetDayOfMonth(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)),
            月 = 微软农历.GetMonth(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)),
            年 = 微软农历.GetSexagenaryYear(DateTime.Now);
            return "月历:" + " 甲乙丙丁戊己庚辛壬癸"[微软农历.GetCelestialStem(年)]
                            + " 鼠牛虎兔龙蛇马羊猴鸡狗猪"[微软农历.GetTerrestrialBranch(年)] + "年"
                            + " 正二三四五六七八九十冬腊"[月] + (天 > 10 ? "月" : "月初") + (" 十廿仨"[天 / 10]).ToString().Replace(" ", "") + " 一二三四五六七八九"[天 % 10];
        }
        static void 输出万年历(int 年, int 月, int 日)
        {
            int r = 1, z = r, nn = 年, yy = 月; string aa = "  :::: ";
            Func<int, string> 补零 = (int 数据) => { return (数据 > 9 ? "" : "0"); };
            while (nn > 0) if (--yy > 0) z += 返回月的天数(nn, yy); else { --nn; yy = 13; }
            nn = 返回月的天数(年, 月); yy = 1; z %= 7;
            //Console.WriteLine("{0}", 月历加载());
            Console.Write("{0}年" + 补零(月) + "{1}月" + 补零(日) + "{2}日星期{3}  {4}\n天 一 二 三 四 五 六\n:: ", 年, 月, 日, "天一二三四五六"[(z + 日 - 1) % 7], 月历加载(年, 月, 日));
            while (r <= nn)
                if (yy >= z)
                {
                    if (r <= 返回月的天数(年, 月)) aa += 月历加载(年, 月, r).Substring(8, 2) + ((++yy % 7) > 0 ? " " : " \n");
                    Console.Write("{0}{1}{2}", 补零(r), (r++).ToString(), ((yy % 7) > 0 ? " " : " "));
                    if (aa.Contains("\n")) { Console.Write("{0}", aa = aa.Replace("  ", " ")); aa = "  "; }
                }
                else
                {
                    if (r <= 返回月的天数(年, 月)) aa += (r > 1 ? 月历加载(年, 月, r).Substring(8, 2) : "::::") + ((yy % 7) > 0 ? " " : " \n");
                    Console.Write("{0}{1}{2}", (r > 1 ? 补零(r) : ""), (r > 1 ? (r++).ToString() : "::"), ((++yy % 7) > 0 ? " " : " \n"));
                    if (aa.Contains("\n")) { Console.Write("{0}", aa = aa.Replace("  ", " ")); aa = "  "; }
                }
        }
Stopwatch 总运行时间 = Stopwatch.StartNew();
Console.WriteLine("\n时间: {0}周期结束。", 总运行时间.ElapsedTicks);

控制台月历.png (上传于2020-02-03 11:04:56)
控制台月历.png

默认分类 | 阅读 1586 次
文章评论,共0条
游客请输入验证码