自用日记文件生成小程序

自用日记文件生成小程序

2023年已完结,又到了归档2023年日记,生成2024年日记的时候了。

以下是我自己用的生成日记文件的C++小程序,简介如下:

  • 该程序编写于2019年7月1日,不代表本人当前水平
  • 在当前目录下生成“日期.md”的文本文件,比如“20240101.md”
  • 日记文件首行包括“# 日期 星期几”的文本,比如 “# 20240101 周一”
  • 支持修改年份、起始月份、截止月份(支持闰年)
  • 将生成的文本批量导入MWEB,即可使用
  • 直接将MWEB资源库文件夹打包转移即可备份,十分方便
#include <stdio.h>
#include <string.h>

//g++ -o gen_date_str gen_date_str.cpp

bool is_leap_year(int y)
{
	return ((y % 400 == 0) || (y % 100 != 0 && y % 4 == 0));
}

int days_in_month[12] =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

const char *week_day_names[7] =
{ "周一", "周二", "周三", "周四", "周五", "周六", "周日" };

int get_week_day(int y, int m, int d)
{
	if (m == 1 || m == 2) //把一月和二月换算成上一年的十三月和是四月
	{
		m += 12;
		y--;
	}

	return (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
}

int main()
{
	int y = 2024;

	int start_month = 1;//include
	int last_month = 12;//include

	--start_month;
	--last_month;

	if (is_leap_year(y))
		days_in_month[1] = 29;

	for (int i = start_month; i <= last_month; i++)
	{
		for (int j = 0; j < days_in_month[i]; j++)
		{
			char file_name[1024] = {0};
			sprintf(file_name, "./%04d%02d%02d.md", y, i + 1, j + 1);
			FILE *fp = fopen(file_name, "ab+");
			if(fp == NULL)
			{
				printf("open file [%s] error, quit !\n", file_name);
				return 0;
			}

			char date_str[1024] = {0};
			sprintf(date_str, "# %04d%02d%02d %s\n", y, i + 1, j + 1,
					week_day_names[get_week_day(y, i + 1, j + 1)]);
			fwrite(date_str, 1, strlen(date_str), fp);
			fclose(fp);
		}
	}

	return 0;
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注