万年历课程设计报告Word格式文档下载.docx

上传人:b****5 文档编号:17238521 上传时间:2022-11-29 格式:DOCX 页数:18 大小:49.01KB
下载 相关 举报
万年历课程设计报告Word格式文档下载.docx_第1页
第1页 / 共18页
万年历课程设计报告Word格式文档下载.docx_第2页
第2页 / 共18页
万年历课程设计报告Word格式文档下载.docx_第3页
第3页 / 共18页
万年历课程设计报告Word格式文档下载.docx_第4页
第4页 / 共18页
万年历课程设计报告Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

万年历课程设计报告Word格式文档下载.docx

《万年历课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《万年历课程设计报告Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

万年历课程设计报告Word格式文档下载.docx

确定设计方案;

3.7月7号至7月12号:

方案的实现、调试与验证,撰写课程设计报告;

4.7月12号至7月14:

完善软件功能,修订并完成课程设计报告书;

1.6收集的参考书籍、文献网络等相关资料

1.《C语言程序设计实例精粹》.谭明金.电子工业出版社

2.《C语言编程技巧及实用程序荟萃》.鲁沐浴.电子工业出版社

3.《C语言解惑》.AlanR.Feuer.人民邮电出版社

4.《C语言实例解析精粹》.曹衍龙.人民邮电出版社

5.《C语言实战105例》.王为青.人民邮电出版社

6.MSDN

第2章系统功能需求分析

2.1系统概述

时间是方便人们科学的安排生活历程,而万年历则是为人们更合理的安排时间。

我编写程序(万年历)就是为了方便人们时时刻刻都能明确具体时间。

在此,我衷心希望该程序能为用户提供方便,让用户拥有更科学的时间观!

2.2系统构成

左边:

万年历显示

右边:

万年历帮助

注:

键盘输入左移、右移键、下移键、上移键、向上翻页移键、向下翻页移键、小写字母q、大写字母Q、空格键、可以实现help对应的功能。

2.3各模块的功能

1.日历显示功能。

2.日期查询、闰年判断功能

3.日期合法性检查功能。

4.支持通过键盘操作设定系统日期。

2.4系统的运行环境

系统的运行环境:

Tc

第三章系统设计

3.1总体结构设计

3.2数据库设计

<

stdio.h>

bios.h>

dos.h>

conio.h>

3.3中心算法代码说明

万年历的显示方法:

voidshowCalendar(intyear,intmonth,intday)

{

inti;

intj;

/*输出的日期*/

intoutDay;

intleapFlag;

/*本月第一个星期中,在上月的天数*/

intdayLastMon;

intweek;

/*该数组用于保存每个月的天数*/

inta[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

outDay=0;

dayLastMon=0;

week=0;

/*判断给定年份是否是闰年*/

leapFlag=isLeapyear(year);

/*如果是闰年则2月应该是29天*/

if(leapFlag==1)

{

a[2]++;

}

/*如果给定的日期中,天数大于该月的最大天数*/

if(day>

a[month])

printf("

Thenumberofthismonth'

sdayis%datmost!

\n"

a[month]);

Pressanykeytocontinue......\n"

);

getchar();

/*以当前系统时间重新赋值*/

year=sysTime.da_year;

month=sysTime.da_mon;

day=sysTime.da_day;

currentYear=sysTime.da_year;

currentMonth=sysTime.da_mon;

currentDay=sysTime.da_day;

/*当前月的天数*/

n_currentMon=a[month];

/*上一月的天数*/

n_lastMon=a[month-1];

/*根据给定日期,获取给定月份1号的星期*/

week=dayLastMon=getWeek(year,month,1);

/*清除文本模式窗口*/

clrscr();

\nTHECALENDERIS%d"

year);

textcolor(10);

/*显示给定年份是否是闰年*/

cprintf("

-{leapyear}-"

if(leapFlag==0)

-{notleapyear}-"

textcolor(7);

printSeparator();

textcolor(RED);

/*输出月份提示,1-12分别表示1月到12月*/

switch(month)

case1:

January1"

break;

case2:

February2"

case3:

March3"

case4:

April4"

case5:

May5"

case6:

June6"

case7:

July7"

case8:

August8"

break;

case9:

September9"

case10:

October10"

case11:

Nevember11"

case12:

December12"

\n\n"

textcolor(13);

SunMonTueWedThuFriSat"

/*因为一个月中最多跨度6个星期,所以循环从0到5*/

for(i=0;

i<

6;

i++)

/*如果是该月的第一个星期*/

if(i==0)

/*第一个星期中还要7-dayLastMon天本月,有dayLastMon天在上个月,

所以输出dayLastMon*4个空格符,每个日期在日历中占用4个空格*/

printSpace(dayLastMon*4);

/*剩余在本月的第一个星期中的天数为7-dayLastMon*/

for(j=0;

j<

7-dayLastMon;

j++)

/*到达day的前一天时,输出++outDay*/

if(outDay==day-1)

/*用黄色字体突出显示*/

[%d]"

++outDay);

/*到达day当天时,并且不是星期天*/

elseif(outDay==day&

&

week!

=0)

%3d"

/*到达day当天时,并且是星期天*/

else

%4d"

/*计算当天的星期,如果前一天是星期六(6),则当天是星期天(0),

其他情况则直接星期加1*/

week=(week<

6)?

week+1:

0;

/*如果不是该月的第一个星期*/

/*则输出该星期中的7天*/

7;

/*输出的天数小于该月的最大天数*/

if(outDay<

/*输出一位数字*/

9)

/*输出两位数字*/

[%2d]"

/*计算当天星期*/

if(outDay==a[month])break;

/*输出分隔线*/

/*输出当前选择的日期和星期*/

Thedayyouchooseis:

printWeek();

gotoxy(1,22);

.............................\n"

/*输出系统日期和星期*/

\nTodayis:

%d-%d-%d"

sysTime.da_year,sysTime.da_mon,sysTime.da_day);

printWeek2(getWeek(sysTime.da_year,sysTime.da_mon,sysTime.da_day));

/*显示按键操作*/

printUsage();

gotoxy(1,25);

}

第四章系统实现

4.1登陆模块的设计与实现

(一)日历显示功能。

运行效果;

中心代码如下:

(如上)

(二)日期查询、闰年判断功能。

中心代码:

intisLeapyear(intyear)

/*闰年的判断:

(1)year被4整除,并且year不被100整除

(2)year被4整除,并且year被400整除*/

if(year%4==0&

year%100||year%400==0)

return1;

return0;

(三)日期合法性检查功能。

voidcheckDate()

/*如果给定的日期中年份部分为负数或者0*/

if(currentYear<

gotoxy(1,27);

Theyearshouldbeapositivenumber.\n"

gotoxy(1,28);

Pressanykeytocontinue......"

/*如果给定的日期中月份部分为负数,为0或者大于12*/

if(currentMonth>

12||currentMonth<

1)

Themonthshouldbeanumberbetween1and12.\n"

/*如果给定的日期中天数部分为负数,为0或者大于31*/

if(currentDay>

31||currentDay<

Thedayshouldbeanumberbetween1and31.\n"

(四)支持通过键盘操作设定系统日期。

voidgetKeyValue()

intkey;

charch;

/*默认显示当前系统日期和星期*/

showCalendar(currentYear,currentMonth,currentDay);

while

(1)

/*获取键值,根据键值调整日历输出*/

key=bioskey(0);

/*右移键,增加月份*/

if(key==RIGHT)

/*月份值在1-12之间,则直接加1*/

if(currentMonth<

12&

currentMonth>

=1)

currentMonth++;

/*如果月份为12,则加1后进位,即年份加1,月份变为1*/

currentYear++;

currentMonth=1;

/*左移键,减少月份*/

if(key==LEFT)

/*月份值在1-12之间,则直接减1*/

=12&

currentMonth--;

/*如果月份为1,则减1后,到上一年,月份变为12*/

currentYear--;

currentMonth=12;

/*上移键,增加年份*/

if(key==UP)

/*下移键,减少年份*/

if(key==DOWN)

/*上移键,减少天数*/

if(key==PAGEUP)

/*当前日不是该月的第一天,则天数直接减1*/

if(currentDay!

currentDay--;

/*当前日是该月的第一天,并且是该年的第一个月(即1月1日),

则天数减1后,变为上一年的最后一个月的最后一天(即12月31日)*/

elseif(currentDay==1&

currentMonth==1)

currentDay=31;

/*当前日是该年中某一个月的最后一天,则天数减1后,

变为上个月的最后一天*/

currentDay=n_lastMon;

/*下移键,增加天数*/

if(key==PAGEDOWN)

/*当前日不是该月的最后一天,则天数直接加1*/

if(n_currentMon!

=currentDay)

currentDay++;

/*当前日是该年的最后一天(即12月31日),则天数加1后,

变为下一年的第一个月的第一天(即1月1日)*/

elseif(n_currentMon==currentDay&

currentMonth==12)

currentDay=1;

/*当前日是该年中某一个月的最后一天,则天数加1后,

变为下个月的第一天*/

/*Q或者q键,表示查询指定日期的星期*/

if(key==QLOWER||key==QUPPER)

printf("

Inputdate(eg,%d-%d-%d):

"

scanf("

%d-%d-%d"

&

currentYear,&

currentMonth,&

currentDay);

checkDate();

/*空格键,重置到系统日期*/

if(key==SPACE)

/*Escpe键退出系统*/

if(key==ESC)

Doyoureallywanttoquit?

(Y/N)"

ch=getchar();

if(ch=='

y'

||ch=='

Y'

4.2学生信息维护模块的设计与实现

(无)

第5章总结

5.1总结

这次课程设计感受很多,从一开始的一点头绪没有,茫然不知所措,到慢慢进入状态以及到后来程序运行成功的喜悦。

这之间所经历了太多太多。

从一开始凭着自己的感觉选定题目之后,对着选题一遍又一遍发呆,苦想,再到自己着手写代码,到最后加入自己的思想把功能改进得更加完善完美。

其间我学会了很多很多,并且学会了把书本知识更好的运用于实际,同时也更好的掌握了知识,学会了从容得面对困难,懂得了:

付出就会有收获,坚持就是胜利!

5.2存在的主要问题

(1)对于应用数据库知识编写的代码,在运行程序,计算机报错时,不知错误的原因,更不知如何修改。

(2)由于考虑问题不周,没有给出录入的限制条件,并且不知如何处理。

(3)编制的程序常常不能运行。

参考文献:

6.MSDN

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

当前位置:首页 > 教学研究 > 教学案例设计

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

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