You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

363 lines
8.0 KiB

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_MEMO_LENGTH 100 // 备忘录内容最大长度
#define MAX_MEMOS 100
#define MAX_LENGTH 100
#define FILE_NAME "memos.txt"
#define D 0.2422
int isHoliday(int year,int month,int day) //判断是否节假日
{
int n,L=0;
float C;
if(year%4==0&&year%100!=0||year%400==0)
{
L=1;
}
if(year>1949&&month==1&&day==1)//元旦
{
return 1;
}
if(year>=2021&&month==1&&day==10)//中国人民警察节
{
return 2;
}
if(year>1910&&month==3&&day==8)//妇女节
{
return 3;
}
if(year>1915&&month==3&&day==12)//植树节
{
return 4;
}
if(year>=1900&&year<2000)//清明节
{
C=4.81;
if((year%100*D+C)-L==day)
{
return 5;
}
}
if(year>2000)
{
C=5.59;
if((year%100*D+C)-L==day)
{
return 5;
}
}
if(month==5&&day==1) //劳动节
{
return 6;
}
if(year>1939&&month==5&&day==4) //青年节
{
return 7;
}
if(year>1912&&month==5&&day==12)//护士节
{
return 8;
}
if(year>2017&&month==5&&day==30)//全国科技工作者日
{
return 9;
}
if(year>1949&&month==6&&day==1)//儿童节
{
return 10;
}
if(year>1932&&month==8&&day==1)//中国人民解放军建军节
{
return 11;
}
if(year>2018&&month==8&&day==19)//中国医师节
{
return 12;
}
if(year>1984&&month==9&&day==10)//教师节
{
return 13;
}
if(year>1949&&month==10&&day==1)//国庆节
{
return 14;
}
if(year>2000&&month==11&&day==8)//记者节
{
return 15;
}
if(year>1971&&month==2&&day==7)//二七纪念日
{
return 16;
}
if(year>2015&&month==4&&day==15) //全民国家安全教育日
{
return 17;
}
if(year>2016&&month==4&&day==24)//中国航天日
{
return 18;
}
if(year>2017&&month==5&&day==10)//中国品牌日
{
return 19;
}
if(year>2009&&month==5&&day==12)//全民防灾减灾日
{
return 20;
}
if(year>2011&&month==5&&day==19)//中国旅游日
{
return 21;
}
if(year>1990&&getWeekDay(year,month,day)==0&&month==5&&day>=15&&day<=21)//中国助残日
{
return 22;
}
if(year>1925&&month==5&&day==30)//五州纪念日
{
return 23;
}
if(year>1972&&month==6&&day==5)//环境日
{
return 24;
}
if(year>2017&&getWeekDay(year,month,day)==6&&month==6&&day>=8&&day<=13)//文化和自然遗产日
{
return 25;
}
if(year>1991&&month==6&&day==25)//全国土地日
{
return 26;
}
if(year>1937&&month==7&&day==7)//七七抗战纪念日
{
return 27;
}
if(year>2005&&month==7&&day==11)//中国航海日
{
return 28;
}
if(year>2009&&month==8&&day==8)//全名健身日
{
return 29;
}
if(year>2023&&month==8&&day==15)//全民生态日
{
return 30;
}
if(year>2017&&month==8&&day==25)//残疾预防日
{
return 31;
}
if(year>1945&&month==9&&day==3)//中国人民抗日战争胜利纪念日
{
return 32;
}
if(year>2016&&month==9&&day==5)//中华慈善日
{
return 33;
}
if(year>1931&&month==9&&day==18)//九一八纪念日
{
return 34;
}
if(year>2001&&getWeekDay(year,month,day)==6&&month==9&&day>=15&&day<=20)//全民国防教育日
{
return 35;
}
if(year>2014&&month==9&&day==30)//烈士纪念日
{
return 36;
}
if(year>2014&&month==10&&day==17)//国家扶贫日
{
return 37;
}
if(year>2012&&month==12&&day==2)//全国交通安全日
{
return 38;
}
if(year>2014&&month==12&&day==4)//国家宪法日和全国法制宣传日
{
return 39;
}
if(year>2001&&year<=2014&&month==12&&day==4)//全国法制宣传日
{
return 40;
}
if(year>2013&&month==12&&day==13)//南京大屠杀死难者国家公祭日
{
return 41;
}
if(year>=1900&&year<=2100&&month==12&&day==25)
{
return 42;
}
else
{
return 0;
}
}
// 备忘录结构体
typedef struct {
char content[MAX_LENGTH];
int completed;
} Memo;
// 全局备忘录数组
Memo memos[MAX_MEMOS];
int memo_count = 0;
// 从文件加载备忘录数据
void load_memos() {
FILE *fp = fopen(FILE_NAME, "r");
if (fp == NULL) {
// 文件不存在,无需加载数据
return;
}
char line[MAX_LENGTH];
while (fgets(line, MAX_LENGTH, fp)!= NULL && memo_count < MAX_MEMOS) {
// 移除换行符
line[strcspn(line, "\n")] = '\0';
strcpy(memos[memo_count].content, line);
fgets(line, MAX_LENGTH, fp);
memos[memo_count].completed = (line[0] == '1');
memo_count++;
}
fclose(fp);
}
// 将备忘录数据保存到文件
void save_memos() {
int i;
FILE *fp = fopen(FILE_NAME, "w");
if (fp == NULL) {
printf("无法保存备忘录数据!\n");
return;
}
for ( i = 0; i < memo_count; i++) {
fprintf(fp, "%s\n", memos[i].content);
fprintf(fp, "%d\n", memos[i].completed);
}
fclose(fp);
}
// 添加备忘录
void add_memo() {
if (memo_count < MAX_MEMOS) {
printf("请输入备忘录内容:(xx年xx月xx日和内容)");
fgets(memos[memo_count].content, MAX_LENGTH, stdin);
// 移除换行符
memos[memo_count].content[strcspn(memos[memo_count].content, "\n")] = '\0';
memos[memo_count].completed = 0;
memo_count++;
printf("备忘录添加成功!\n");
save_memos();
system("pause");
} else {
printf("备忘录已满,无法添加!\n");
system("pause");
}
}
// 查看备忘录
void view_memos() {
int i;
if (memo_count == 0) {
printf("没有备忘录事项!\n");
system("pause");
} else {
printf("备忘录列表:\n");
for ( i = 0; i < memo_count; i++) {
printf("%d. [%c] %s\n", i + 1, memos[i].completed? 'X' : ' ', memos[i].content);
}
system("pause");
}
}
// 标记备忘录为已完成
void mark_completed() {
int index;
printf("请输入要标记为已完成的备忘录编号:");
scanf("%d", &index);
getchar(); // 消耗换行符
if (index > 0 && index <= memo_count) {
memos[index - 1].completed = 1;
printf("备忘录已标记为已完成!\n");
save_memos();
system("pause");
} else {
printf("无效的备忘录编号!\n");
system("pause");
}
}
// 删除备忘录
void delete_memo() {
int index,i;
printf("请输入要删除的备忘录编号:");
scanf("%d", &index);
getchar(); // 消耗换行符
if (index > 0 && index <= memo_count) {
for ( i = index - 1; i < memo_count - 1; i++) {
memos[i] = memos[i + 1];
}
memo_count--;
printf("备忘录删除成功!\n");
save_memos();
system("pause");
} else {
printf("无效的备忘录编号!\n");
system("pause");
}
}
void memo() {
int choice;
// 加载备忘录数据
load_memos();
do {
system("cls");
printf("1. 添加备忘录\n");
printf("2. 查看备忘录\n");
printf("3. 标记为已完成\n");
printf("4. 删除备忘录\n");
printf("0. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
getchar(); // 消耗换行符
switch (choice) {
case 1:
add_memo();
break;
case 2:
view_memos();
break;
case 3:
mark_completed();
break;
case 4:
delete_memo();
break;
case 0:
printf("感谢使用备忘录程序!\n");
save_memos();
break;
default:
printf("无效的选择,请重新输入!\n");
system("pause");
}
} while (choice!= 0);
}