节日查询和任务提醒系统程序设计报告.docx

上传人:b****8 文档编号:9281605 上传时间:2023-02-04 格式:DOCX 页数:33 大小:211.46KB
下载 相关 举报
节日查询和任务提醒系统程序设计报告.docx_第1页
第1页 / 共33页
节日查询和任务提醒系统程序设计报告.docx_第2页
第2页 / 共33页
节日查询和任务提醒系统程序设计报告.docx_第3页
第3页 / 共33页
节日查询和任务提醒系统程序设计报告.docx_第4页
第4页 / 共33页
节日查询和任务提醒系统程序设计报告.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

节日查询和任务提醒系统程序设计报告.docx

《节日查询和任务提醒系统程序设计报告.docx》由会员分享,可在线阅读,更多相关《节日查询和任务提醒系统程序设计报告.docx(33页珍藏版)》请在冰豆网上搜索。

节日查询和任务提醒系统程序设计报告.docx

节日查询和任务提醒系统程序设计报告

程序设计报告

(2011/2012学年第二学期)

 

题目:

日历查询和任务提醒系统

 

专业自动化

学生姓名陈康、李鹏飞、苏沛霖

班级学号B11050218、B11050216、B11050217

指导教师吴敏

指导单位计算机软件教学中心

日期2012-6-5

评分细则

评分项

优秀

良好

中等

遵守机房规章制度

上机时的表现

学习态度

程序准备情况

程序设计能力

团队合作精神

课题功能实现情况

算法设计合理性

用户界面设计

报告书写认真程度

内容详实程度

文字表达熟练程度

回答问题准确度

简短评语

 

教师签名:

年月日

评分等级

备注

评分等级有五种:

优秀、良好、中等、及格、不及格

节日查询和任务提醒系统

一、课题内容和要求

设计一个简单的日历、月历系统,支持节日查询,任务提醒功能,用C或C++语言实现。

本系统的基本功能必须包括:

(1)日历、月历功能:

界面能够显示日历和月历,默认为当月的月历能够通过上下翻页查询每月的月历。

(2)日历查询:

通过日期查询月历。

(3)任务提醒:

可添加、删除、修改、查询任务功能,并完成任务提醒功能。

二、需求分析

本系统的基本功能必须包括:

(1)日历、月历功能:

界面能够显示日历和月历,默认为当月的月历能够通过上下翻页查询每月的月历。

(2)日历查询:

通过日期查询月历。

(3)任务提醒:

可添加、删除、修改、查询任务功能,并完成任务提醒功能。

功能框架如图

(2):

(2)

三、概要设计

<1>主要结构体:

voidmain()

{

charch;

structtm*t;

time_tsec;

load();//读取日程

ch='t';

while

(1)

{

switch(ch)

{

case-32:

ch=getch();

switch(ch)

{

case72:

lastyear(t);

break;//按上,年份减1

case80:

nextyear(t);

break;//按下,年份加1

case75:

lastmon(t);

break;//按左,月份减1

case77:

nextmon(t);

break;//按右,月份加1

}

break;

case'f':

search(t);

break;//跳转日期

case't':

sec=time(NULL);//获取当前系统时间

t=localtime(&sec);//将获取的秒数转换具体为时间

break;//按s,年份加1

case'1':

add();//增加提醒

break;

case'2':

del();//删除提醒

break;

case'3':

mod();//修改提醒

break;

case'4':

srh();//查询提醒

break;

case'5':

srhjr(t);//查询节日

break;

case27:

exit(0);//按ESC退出

}

check(t);//检查是否有提醒

mon_calendar(*t);//显示日历

ch=getch();//获取用户选择输入

}

}

<2>主要函数流程图:

(1)主体函数结构图(见图3-1):

图3-1

(2)闰年判断:

用“400的整数倍”和“4的整数倍且不为百年”为闰年来判断闰年,不满足条件的则不为闰年。

(见图3-2)

图3-2

(3)计算当日星期数:

利用day_count函数,并通过计算得出当日的星期数(见图3-3)

图3-3图3-4

(4)节日提醒系统:

检测当日是否与节日文件中的节日日期相符合,若符合,则显示节日提醒。

(见图3-4)

(5)节日查询系统:

输入节日名,与节日文件中的节日对照,若名称相符则显示节日时间(见图3-5)

图3-5

(6)任务提醒系统:

创建任务提醒文件夹,保存任务提醒,并且通过函数调用实现任务提醒系统的增加、删除、修改、查询等功能。

(见图3-6)

图3-6

四、源程序代码

#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;i

if(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;i

printf("");//输出空格占上个月的位

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;i

count_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;i

printf("%-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;i

printf("%-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("___________________________________________________________________

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1