节日查询和任务提醒系统完整程序.docx
《节日查询和任务提醒系统完整程序.docx》由会员分享,可在线阅读,更多相关《节日查询和任务提醒系统完整程序.docx(16页珍藏版)》请在冰豆网上搜索。
节日查询和任务提醒系统完整程序
#include
#include
#include
#include
#defineN100
structremind
{
structtmt;//时间
charthings[100];//内容
}jr[N],rw[N];//节日提醒任务提醒
intlenj;//节日提醒的个数
intlenr;//任务提醒的个数
voidsave()//保存信息
{
FILE*fp;
if((fp=fopen("renwu.dat","wb"))==NULL)//打开任务文件
{
printf("文件打开失败!
");
exit(0);
}
fwrite(&rw,sizeof(structremind),N,fp);//写入文件
fclose(fp);//关闭文件
}
voidload()//读取信息
{
FILE*fp;
inti;
jr[0].t.tm_mon=0;jr[0].t.tm_mday=1;strcpy(jr[0].things,"今天是元旦节");
jr[1].t.tm_mon=2;jr[1].t.tm_mday=8;strcpy(jr[1].things,"今天是国际妇女节");
jr[2].t.tm_mon=2;jr[2].t.tm_mday=12;strcpy(jr[2].things,"今天是植树节");
jr[3].t.tm_mon=3;jr[3].t.tm_mday=22;strcpy(jr[3].things,"今天是世界地球日");
jr[4].t.tm_mon=4;jr[4].t.tm_mday=1;strcpy(jr[4].things,"今天是国际劳动节");
jr[5].t.tm_mon=5;jr[5].t.tm_mday=1;strcpy(jr[5].things,"今天是儿童节");
jr[6].t.tm_mon=6;jr[6].t.tm_mday=1;strcpy(jr[6].things,"今天是建党节");
jr[7].t.tm_mon=7;jr[7].t.tm_mday=1;strcpy(jr[7].things,"今天是建军节");
jr[8].t.tm_mon=9;jr[8].t.tm_mday=1;strcpy(jr[8].things,"今天是国庆节");
jr[9].t.tm_mon=7;jr[9].t.tm_mday=1;strcpy(jr[9].things,"今天是建军节");
jr[10].t.tm_mon=1;jr[10].t.tm_mday=14;strcpy(jr[10].things,"今天是情人节");
jr[11].t.tm_mon=3;jr[11].t.tm_mday=1;strcpy(jr[11].things,"今天是愚人节");
jr[12].t.tm_mon=3;jr[12].t.tm_mday=5;strcpy(jr[12].things,"今天是清明节");
jr[13].t.tm_mon=4;jr[13].t.tm_mday=4;strcpy(jr[13].things,"今天是中国青年节");
jr[14].t.tm_mon=8;jr[14].t.tm_mday=10;strcpy(jr[14].things,"今天是中国教师节");
jr[15].t.tm_mon=9;jr[15].t.tm_mday=31;strcpy(jr[15].things,"今天是万圣节");
jr[16].t.tm_mon=10;jr[16].t.tm_mday=25;strcpy(jr[16].things,"今天是感恩节");
jr[17].t.tm_mon=11;jr[17].t.tm_mday=1;strcpy(jr[17].things,"今天是世界艾滋病日");
jr[18].t.tm_mon=11;jr[18].t.tm_mday=25;strcpy(jr[18].things,"今天是圣诞节");
//初始化各种节日
lenj=19;//节日个数
if((fp=fopen("renwu.dat","rb"))==NULL)//打开任务文件
{
fopen("renwu.dat","wb");//创建文件
}
else
{
fread(&rw,sizeof(structremind),N,fp);//读取文件
for(i=0,lenr=0;iif(strlen(rw[i].things)!
=0)
{
lenr++;//计算日程条数
}
fclose(fp);//关闭文件
}
}
intrun_or_not(intyear)//判断是否是是闰年
{
if(year%400==0)//400的整数倍为闰年,返回1
return1;
elseif(year%4==0&&year%100!
=0)//4的整数倍且不为百年为闰年,返回1
return1;
else
return0;//不是闰年
}
intday_count(intyear,intmonth)//每个月的天数,此函数调用run_or_not
{
switch(month)
{
case1:
return31;
case2:
if(run_or_not(year)==0)return28;
elsereturn29;
case3:
return31;
case4:
return30;
case5:
return31;
case6:
return30;
case7:
return31;
case8:
return31;
case9:
return30;
case10:
return31;
case11:
return30;
case12:
return31;
default:
return0;
}
}
voidmon_calendar(structtmt)//显示月历
{
intwd,max_day;
inti;
system("cls");//清屏
wd=(t.tm_wday-(t.tm_mday%7-1))%7;//计算当月1日是星期几
max_day=day_count(t.tm_year+1900,t.tm_mon+1);//计算本月天数
if(wd<0)//如果星期是负数就加上7
wd+=7;
if(run_or_not(t.tm_year)==0)//不是闰年
printf("%d年%d月\n",t.tm_year+1900,t.tm_mon+1);
else
printf("%d年(闰年)%d月\n",t.tm_year+1900,t.tm_mon+1);
printf("___________________________________\n");
printf("日一二三四五六\n");
for(i=0;iprintf("");//输出空格占上个月的位
for(i=1;i<=max_day;i++,wd++)
{
if(i==t.tm_mday)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//与当前系统日期相等,改变颜色
printf("%-4d",i);
if(i==t.tm_mday)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);//恢复颜色
if(wd%7==6)
printf("\n");//当前为星期6,换行
}
printf("\n___________________________________\n");
printf("←、减少月份→、增加月份\n↑、减少年份↓、增加年份\n1、增加提醒2、删除提醒\n3、修改提醒4、查询提醒\n5、查询节日t、显示系统日期\nf、跳转日期ESC、退出\n");
printf("___________________________________\n");
}
intweek(intyear,intmonth,intday)//计算星期,此函数调用day_count
{
inti;
intweek_year_1_1;//当年1月1日的星期数
intcount_day;//距当年1月1日的天数
week_year_1_1=(year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+1)%7;//计算当年一月一日星期几,接下来星期的计算依次为基准
for(i=1,count_day=0;icount_day+=day_count(year,i);//计算当年所经历的整月的天数,比如:
5月20日,就计算1、2、3、4月的天数,5月未完,接下来计算
count_day+=day-1;//加上当月已经过的天数,减一是因为当天还没过完,不算一天
return(week_year_1_1+count_day%7)%7;
}
voidsearch(structtm*t)//跳转日期
{
printf("请输入要跳转的日期(格式:
年,月,日如:
1949,10,1):
");
while
(1)
{
scanf("%d,%d,%d",&t->tm_year,&t->tm_mon,&t->tm_mday);
getchar();//消除上一步的回车符
if(t->tm_year>9999||t->tm_year<1||t->tm_mon>12||t->tm_mon<1||t->tm_mday>day_count(t->tm_year,t->tm_mon)||t->tm_mday<1)
{
printf("输出错误,请重新输入:
");
continue;//合法性检查出不合法,重新输入
}
else
break;//合法性检查合法,结束输入
}
t->tm_wday=week(t->tm_year,t->tm_mon,t->tm_mday);//计算星期
t->tm_year-=1900;
t->tm_mon-=1;
}
voidlastmon(structtm*t)//上个月的月历
{
t->tm_mon--;//月份减一
if(t->tm_mon==-1)//如果减到1月了,就变成12月
t->tm_mon=11;
t->tm_wday=week(t->tm_year+1900,t->tm_mon+1,t->tm_mday);//计算上月的今天是星期几
}
voidnextmon(structtm*t)//下个月的月历
{
t->tm_mon++;//月份加一
if(t->tm_mon==12)//如果加到12月了,就变成1月
t->tm_mon=0;
t->tm_wday=week(t->tm_year+1900,t->tm_mon+1,t->tm_mday);//计算下月月的今天是星期几
}
voidlastyear(structtm*t)//上一年的本月月历
{
t->tm_year--;//年份减一
if(t->tm_year==1-1901)//如果减到公元0年,就变成9999年
t->tm_year=9999-1900;
t->tm_wday=week(t->tm_year+1900,t->tm_mon+1,t->tm_mday);//计算上月的今天是星期几
}
voidnextyear(structtm*t)//下一年的本月月历
{
t->tm_year++;//年份加一
if(t->tm_year==9999-1900+1)//如果加到公元9999年,就变成1年
t->tm_year=1-1900;
t->tm_wday=week(t->tm_year+1900,t->tm_mon+1,t->tm_mday);//计算上月的今天是星期几
}
intcheckjr(structtmt,intf)//检查今天是否是节日
{
inti,flag;
for(i=0,flag=0;i{
if(jr[i].t.tm_mon==t.tm_mon&&jr[i].t.tm_mday==t.tm_mday)
{
if(f==0)//没有任务提醒需要清屏
system("cls");
flag=1;//标记已经清屏
printf("节日提醒:
");
puts(jr[i].things);//显示提醒
}
}
returnflag;
}
intcheckrw(structtmt)//检查是否有任务提醒
{
inti,flag;
for(i=0,flag=0;i{
if(rw[i].t.tm_mon==t.tm_mon&&rw[i].t.tm_mday==t.tm_mday)
{
if(flag==0)
{
system("cls");//清屏
flag=1;//标记已经清屏
}
printf("任务提醒:
");
puts(rw[i].things);//显示提醒
}
}
if(flag==1)
{
printf("\n\n\n");
}
returnflag;
}
voidcheck(structtm*t)//检查是否有提醒
{
intflag1,flag2;
flag1=checkrw(*t);
flag2=checkjr(*t,flag1);//检查是否有提醒
if(flag1==1||flag2==1)
{
printf("\n\n\n\n\n提醒完毕,回车返回。
");
getchar();
}
}
voidadd()//增加任务提醒
{
inti;
system("cls");//清屏
i=lenr;
printf("请输入提醒年月日(格式:
2011,9,11):
");
scanf("%d,%d,%d",&rw[i].t.tm_year,&rw[i].t.tm_mon,&rw[i].t.tm_mday);
getchar();//消除回车符
rw[i].t.tm_year-=1900;
rw[i].t.tm_mon--;
printf("请输入提醒内容:
");
gets(rw[i].things);
lenr++;//提醒数加1
save();//保存
printf("添加成功!
回车返回。
");
getchar();
}
voiddel()//删除提醒
{
structremindtp;
inti;
system("cls");//清屏
printf("_______________________________________________________________________\n");
printf("编号提醒日期提醒内容\n");
for(i=0;iprintf("%-6d%-4d-%-2.2d-%-2.2d%s\n",i,rw[i].t.tm_year+1900,rw[i].t.tm_mon+1,rw[i].t.tm_mday,rw[i].things);
printf("_______________________________________________________________________\n");
printf("请输入要删除的编号:
");
scanf("%d",&i);
getchar();
while(i<0||i>=lenr)
{
printf("输入错误请重新输入:
");
scanf("%d",&i);
}
rw[i].things[0]='\0';//删除
tp=rw[i];
rw[i]=rw[lenr-1];
rw[lenr-1]=tp;//和最后一个记录交换位置
lenr--;//任务个数减一
save();//保存
printf("_______________________________________________________________________\n");
printf("编号提醒日期提醒内容\n");
for(i=0;iprintf("%-6d%-4d-%-2.2d-%-2.2d%s\n",i,rw[i].t.tm_year+1900,rw[i].t.tm_mon+1,rw[i].t.tm_mday,rw[i].things);
printf("_______________________________________________________________________\n");
printf("删除成功!
回车返回。
");
getchar();
}
voidmod()//修改提醒
{
inti;
system("cls");//清屏
printf("_______________________________________________________________________\n");
printf("编号提醒日期提醒内容\n");
for(i=0;iprintf("%-6d%-4d-%-2.2d-%-2.2d%s\n",i,rw[i].t.tm_year+1900,rw[i].t.tm_mon+1,rw[i].t.tm_mday,rw[i].things);
printf("_______________________________________________________________________\n");
printf("请输入提醒要修改的编号:
");
scanf("%d",&i);
getchar();
while(i<0||i>=lenr)
{
printf("输入错误请重新输入:
");
scanf("%d",&i);
}
printf("请输入新的提醒年月日(格式:
2011,9,11):
");
scanf("%d,%d,%d",&rw[i].t.tm_year,&rw[i].t.tm_mon,&rw[i].t.tm_mday);
getchar();//消除回车符
rw[i].t.tm_year-=1900;
rw[i].t.tm_mon--;
printf("请输入新的提醒内容:
");
gets(rw[i].things);
save();//保存
printf("_______________________________________________________________________\n");
printf("编号提醒日期提醒内容\n");
for(i=0;iprintf("%-6d%-4d-%-2.2d-%-2.2d%s\n",i,rw[i].t.tm_year+1900,rw[i].t.tm_mon+1,rw[i].t.tm_mday,rw[i].things);
printf("_______________________________________________________________________\n");
printf("修改成功!
回车返回。
");
getchar();
}
voidsrh()//查询提醒
{
inti,y,m,d,flag;
system("cls");//清屏
i=lenr;
printf("请输入要查询的年月日(格式:
2011,9,11):
");
scanf("%d,%d,%d",&y,&m,&d);
getchar();//消除回车符
y-=1900;
m--;
for(flag=i=0;i{
if(y==rw[i].t.tm_year&&m==rw[i].t.tm_mon&&d==rw[i].t.tm_mday)
{
flag=1;//标志有提醒
printf("\n任务提醒:
%s\n",rw[i].things);
}
}
if(flag==0)
printf("\n\n\n暂时没有这一天的任务提醒。
回车返回。
\n");
else
printf("\n\n\n查询完毕。
回车返回。
\n");
getchar();
}
voidsrhjr(structtm*t)//查询节日
{
charname[20];
inti;
system("cls");//清屏
printf("请输入要查询的节日名:
");
gets(name);
for(i=0;i{
if(strstr(jr[i].things,name)!
=NULL)//模糊查找节日
{
t->tm_mon=jr[i].t.tm_mon;//当前日历改为节日
t->tm_mday=jr[i].t.tm_mday;
printf("%s是%d月%d日,回车继续。
",name,jr[i].t.tm_mon+1,jr[i].t.tm_mday);
getchar();
return;
}
}
if(i==lenj)
{
printf("对不起!