万年历C语言课程设计报告Word文档格式.docx

上传人:b****6 文档编号:20169951 上传时间:2023-01-17 格式:DOCX 页数:28 大小:24.32KB
下载 相关 举报
万年历C语言课程设计报告Word文档格式.docx_第1页
第1页 / 共28页
万年历C语言课程设计报告Word文档格式.docx_第2页
第2页 / 共28页
万年历C语言课程设计报告Word文档格式.docx_第3页
第3页 / 共28页
万年历C语言课程设计报告Word文档格式.docx_第4页
第4页 / 共28页
万年历C语言课程设计报告Word文档格式.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

万年历C语言课程设计报告Word文档格式.docx

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

万年历C语言课程设计报告Word文档格式.docx

如果是12月31号,则增加日期后进入到下一年的1月1号,如果是某一个月的最后一天,则增加日期后进入到下一个月的第一天;

如果是Q/q键表示查询日期,此时将输出提示信息,提示用户输入查询日期。

在用户输入查询日期后,系统就爱那个调用日期检查函数对输入日期的合法性进行检测,如果输入日期不合格,则提示错误信息并显示当前系统日期所在月的月历;

如果是空格键表示重置,显示当前系统日期所在月的月历;

如果是Esc键表示退出系统,按此键后,系统将询问用户是否确定退出,在得到确定回答(用户输入Y/y)后将退出系统。

2、函数功能描述

1)checkDate()

函数原型:

voidcheckDate()

checkDate()函数用于检查输入日期的合法性,包括检查输入日期中的年、月、日部分。

对于年,检查其是否是负数或者是0;

对于月,检查其是否是范围在1~12中的值;

对于日,检查其是否是范围在1~31中的值。

如果有一个部分不合法,则程序提示用户。

2)isLeapyear()

intisLeapyear(intyear)

isLeapyear()函数用于判断制定月份是否是闰年。

参数year为待判断的年份。

3)getWeek()

intgetWeek(intyear,intmonth,intday)

getWeek()函数用于计算并返回给定日期对应的星期。

其中参数year、month和day都为整型,分别表示输入的年、月和日。

4)printSpace()

voidprintSpace(intn)

printSpace()函数用于输出制定个数的空格。

其中整型参数n表示需要输出的空格的个数。

5)printSepatator()

voidprintSeparator()

printSeparator()函数用于在制定位置输出用户使用手册。

输出位置在函数中已经设定。

7)printWeek()

voidprintWeek()

printWeek()函数用于输出当前日期对应的星期,即由currentYear,currentMonth和currentDay确定的日期对应的星期。

该函数首先调用getWeek()函数返回当前日期对应的星期。

8)printWeek2()

voidprintWeek2(intweek)

printWeek2()函数用于根据制定值输出星期。

参数week是一个整型变量,其值可取0到6,分别表示星期一到星期日。

8)showCalendar()

voidshowCalendar(intyear,intmonth,intday)

showCalendar()函数用于显示日历。

参数year,month和day分别表示年、月和日。

该函数显示year所在年是否是闰年,显示month所在月的月历,突出显示day所在日的日期。

10)getKeyValue()

voidgetKeyValue()

getKeyValue()函数用于获取键盘的输入。

根据键盘的输入(上下移键、左右移键、上下翻页键、Q/q键)调整当前日期,并显示当前日期所在月的月历等。

4、遇到的问题和相应的解决措施

1.dos.h头文件不能在常用的VisualC++里使用。

若使用TurboC,则键入的汉字无法显示,且无法复制粘贴。

解决措施:

经过上网查询和询问同学,知道了导致问题的原因,但若把dos.h在visualc++中换成time.h,过程太复杂,很难实现。

最后,我们跟同学借了一个win-TC,是C语言程序,且可以使用中文和进行复制粘贴;

2.键入程序代码的时候显示“非法字符’?

(0xa3)在showCalender函数中”

解决措施:

把showCalender函数全部检查一遍也没有找出问题所在,然后咨询老师,经验丰富的老师一眼看出函数中的一个左括号是用拼音输出的,不是英文;

3.程序可以运行,但应该只显示一个向下箭头的地方显示了三行,且覆盖了其他的字符。

认真的又检查了一遍,发现“指定输出字符为向下的箭头”的函数中,_CX=01,写成了_CH=01;

4.万年历需要获取系统时间,不知从何下手。

经查阅资料,得知应用:

currentYear=sysTime.da_year;

currentMnth=sysTime.da_mon;

currentDay=sysTime.da_day;

5、心得体会

经历了这次课程设计的设计和制作的整个过程,我们才发现我们知识的贫乏和知识面的狭窄,原本以为不就是一个小小的课程设计,小case,很容易就可以搞定,可是到了后来实际的操作的时候可是花费了我们九牛二虎之力,不说其他的,只说时间上面,我们就花费了大把的时间,当然我们也从中体会了很多平时不能收获的东西。

经过一个多月的自主上机和三个多星期的大作业编写,我们一队三人的齐心努力,查阅书籍,上网查询等各种途径,完成了这次的大作业编写。

其中遇到了很多问题,一一解决的过程让我们学会了很多,当然有很多最初的构想没有实现,这也是我们的遗憾之处。

这次作课程设计我们也是收获很大,我们更深入的体会到团队的重要性,通过自学学到了更多C语言的编译,如插入颜色,读取系统时间等,这会是我们终身的财富。

首先,我们对C语言有了更深的了解,使用起来也更加的熟练,原来有一些不知道和不熟悉的函数,我们学会用了。

其次,我们这一次找了不少的资料,找专业的书籍、上网找各方面的资料,也使我们学到了一些书本中学不到的知识,让我们长了见识。

同时我们同学之间也互相的探讨,也增进了我们同学之间的感情。

这次的万年历设计,虽然我们自己觉的很有的成就感,但是这必竟是我们第一次C语言的课程设计,必然会有很多的不足之处有待改进,相信以后我们一定会做的更好。

同时也感谢老师们的耐心讲解与指导,我们期待下一次可以做的更好!

【程序代码】

/*加载头文件*/

#include<

stdio.h>

bios.h>

dos.h>

conio.h>

graphics.h>

string.h>

stdlib.h>

/*定义常量*/

/*左移键*/

#defineLEFT0x4b00

/*右移键*/

#defineRIGHT0x4d00

/*下移键*/

#defineDOWN0x5000

/*上移键*/

#defineUP0x4800

/*向上翻页键*/

#definePAGEUP0x4900

/*向下翻页键*/

#definePAGEDOWN0x5100

/*小写字母q*/

#defineQLOWER0x1071

/*大写字母Q*/

#defineQUPPER0x1051

/*空格键*/

#defineSPACE0x3920

/*Esc键*/

#defineESC0x011b

/*定义全局变量*/

structdatesysTime;

intcurrentYear;

intcurrentMonth;

intcurrentDay;

intn_currentMon;

intn_lastMon;

/*--------------------------自定义函数-------------------------*/

voidcheckDate();

intisLeapyear(intyear);

intgetWeek(intyear,intmonth,intday);

voidprintSpace(intn);

voidprintSaparator();

voidprintUsage();

voidprintWeek();

voidprintWeek2(intweek);

voidshowCalendar(intyear,intmonth,intday);

voidgetKeyValue();

welcome()

{

inti,graphdriver,graphmode,size,page;

chars[30];

graphdriver=DETECT;

initgraph(&

graphdriver,&

graphmode,"

"

);

cleardevice();

setbkcolor(BLUE);

setviewport(40,40,600,440,1);

setfillstyle(1,2);

setcolor(YELLOW);

rectangle(1,1,560,400);

floodfill(50,50,14);

rectangle(20,20,540,380);

setfillstyle(1,13);

/*开图视口*/

/*用绿色填画出的矩形框*/

floodfill(2l,300,14);

setcolor(BLACK);

settextstyle(1,0,6);

/*用淡洋红色填画出的矩形框*/

/*设要显示字符串的字形方向,尺寸*/

outtextxy(100,60,"

Welcomyou"

setviewport(100,150,540,380,0);

/*又开一窗口*/

setcolor(14);

setfillstyle(1,10);

rectangle(20,20,420,120);

settextstyle(2,0,9);

floodfill(21,100,14);

/*用深蓝色填充*/

sprintf(s,"

Heygirl!

!

Doyouwanttoknow?

/*将字符串存到s字符数组*/

setcolor

(1);

settextstyle(10,0,10);

/*设选用字形4,放大3倍,水平设置*/

outtextxy(110,80,s);

/*显示s字符串*/

getch();

closegraph();

}

/*功能控制模块*/

/*检查日期有效性函数*/

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

if(currentYear<

=0)

gotoxy(1,27);

printf("

Theyearshouldbeapositivenumber!

\n"

gotoxy(1,28);

Pressanykeytocomtinue......."

getchar();

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

currentMonth=sysTime.da_mon;

currentDay=sysTime.da_day;

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

if(currentMonth>

12||currentMonth<

1)

{gotoxy(1,27);

Themonthshouldbeanumberbetween1and12!

Pressanykeytocontinue......"

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

if(currentDay>

31||currentDay<

Thedayshouldbeanumberbetween1and31!

}

/*判断是否是闰年函数*/

/*闰年的判断:

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

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

if(year%4==0&

&

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

return1;

else

return0;

/*根据给定日期计算星期函数*/

intleapFlag;

intweek;

inti;

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

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

intcount=0;

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

leapFlag=isLeapyear(year);

/*如果是闰年则2月份的日期应该为29天*/

if(leapFlag==1)

a[2]++;

/*计算从给定年份的1月1日到给定月份的1号之间的天数*/

for(i=1;

i<

month;

i++)

{

count+=a[i];

}

/*计算从给定年份的1月1日到给定日期之间的天数*/

count+=day;

/*计算星期*/

week=(year+1+(year-1)/4+(year-1)/100+(year-1)/400+count)%7;

returnweek;

/*打印输出模块*/

/*输出指定个数空格函数*/

for(i=0;

n;

printf("

"

/*输出分割线函数*/

38;

="

/*输出使用方法函数*/

voidprintUsage()

gotoxy(45,3);

/*设定字体颜色*/

textcolor(YELLOW);

/*送格式化输出至屏幕*/

cprintf("

-----------Usage-----------"

gotoxy(45,5);

YEAR"

gotoxy(50,5);

Upkey()toincrease;

gotoxy(50,7);

Downkey()todecrease.\n"

gotoxy(45,9);

MONTH:

gotoxy(50,9);

Rightkey()toincrease;

gotoxy(50,11);

Leftkey()todecrease.\n"

gotoxy(45,13);

DAY"

gotoxy(50,13);

PageDownkeytoincrease;

gotoxy(50,15);

PageUpkeytodecrease.\n"

gotoxy(45,17);

QUERY"

gotoxy(50,17);

Q/qkey\n"

gotoxy(45,19);

RESET"

gotoxy(50,19);

SPACEkey.\n"

gotoxy(45,21);

EXIT"

gotoxy(50,21);

Esckey\n"

gotoxy(59,5);

/*设置寄存器,表示在指定位置输出一次指定的字符*/

_CX=01;

_AH=0xa;

/*指定输出字符为向上的箭头*/

_AL=24;

/*产生一次中断,输出向上的箭头*/

geninterrupt(0x10);

gotoxy(61,7);

/*指定输出字符为向下的箭头*/

_AL=25;

gotoxy(62,9);

_AL=26;

/*指定输出字符为向右的箭头*/

gotoxy(61,11);

/*指定输出字符为向左的箭头*/

_AL=27;

/*还原字体颜色*/

textcolor(7);

/*根据系统日期输出星期函数*/

intday;

/*根据日期获得星期*/

day=getWeek(currentYear,currentMonth,currentDay);

textcolor(11);

/*输出星期,0表示星期天,1表示星期一……6表示星期六*/

if(day==0)

%d-%d-%d,Sunday!

currentYear,currentMonth,currentDay);

if(day==1)

%d-%d-%d,Monday!

if(day==2)

%d-%d-%d,Tuesday!

if(day==3)

%d-%d-%d,Wednesday!

if(day==4)

%d-%d-%d,Thursday!

if(day==5)

%d-%d-%d,Friday!

if(day==6)

%d-%d-%d,Saterday!

/*输出指定星期函数*/

if(week==0)

Sunday"

if(week==1)

Monday"

if(week==2)

Tuesday"

if(week==3)

Wendesday"

if(week==4)

Thursday"

if(week==5)

Friday"

if(week==6)

Staturday"

/*日历显示模块*/

/*显示日历函数*/

intj;

/*输出的日期*/

intoutDay;

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

intdayLastMon;

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

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

当前位置:首页 > 党团工作 > 党团建设

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

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