C语言课程设计万年历.docx

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

C语言课程设计万年历.docx

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

C语言课程设计万年历.docx

C语言课程设计万年历

石家庄铁道大学课程设计

 

单位电气与电子工程分院(系)

专业电气信息类

学号

学生姓名

指导教师

 

完成日期2012年6月20日

摘要

万年历是生活中经常用到的东西,它不仅能够查询本年的日期信息,也能查询若干年前或若干年后的日期信息。

本工具就是基于开发工具Win—TC做出的万年历,功能齐全,包括默认显示当前日期,查询年历、月历、日历等,界面整洁,显示清晰。

关键词:

万年历,Win-TC,功能齐全

第1章选题的意义

1.1自我介绍

班级:

电09学号:

姓名:

专业:

电气信息类

1.2选题名称

万年历的设计

1.3选择本题的意义

随着生活节奏的加快,人们不可能仅仅满足对当天的日程进行安排,往往需要对几天、几个月甚至几年之后的工作进行安排,这就需要充分了解当天的信息,包括年、月、日、星期、是否为闰年等等。

万年历就能很好的完成这项工作。

因此,一个界面整洁,显示清晰的万年历显得尤为重要,它不仅能帮助人们了解将来的日期信息,也能帮助人们回忆过去的日子,让看上去烦乱的日期表变得简明而直观。

1.4选择本题对C语言学习的意义

在程序设计过程中,会用到C语言的许多知识,包括数组、指针;结构体、文件、循环结构等等,通过设计的训练,会对C语言有更深刻的了解,掌握利用C语言相关函数开发万年历的基本原理,为以后的学习与开发打下坚实的基础。

1.5时间安排

5月22日对所选题目用到的知识点上机实验。

5月23日初步完成课程设计报告中“选题意义”部分的内容。

根据课程设计任务书要求,进行系统功能需求分析和设计;设计初始代码框架。

5月29日系统功能需求分析,系统设计;初步完成课程设计报告“系统功能需求分析”,“系统设计”部分的内容。

5月30日完善课程设计报告“系统功能需求分析”,“系统设计”部分的内容,并上传服务器;设计初始代码,部分功能实现。

6月5日编写程序代码;部分功能实现;补充完善课程设计报告“系统功能需求分析”、“系统设计”。

6月6日编写程序代码;部分功能实现;补充完善课程设计报告“系统功能需求分析”、“系统设计”。

6月12日编写程序代码;部分功能实现;补充完善课程设计报告“系统功能需求分析”、“系统设计”。

6月13日编写程序代码;完成全部功能;补充完善课程设计报告“系统功能需求分析”、“系统设计”。

6月19日调试代码;完成功能;撰写课程设计报告

6月20日调试代码、美化界面;运行完成全部功能;撰写课程设计报告。

1.6参考资料

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

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

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

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

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

6.MSDN

第2章系统功能需求分析

2.1系统的基本要求

要求实现日历显示、查询任意日期功能,进行日期合法性检查功能。

1.日历显示功能。

该日历能够根据系统日期进行初始化,如果没有任何的输入,则会显示系统日期所在月份的月历,并能突出显示当前日期。

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

输入日期进行查询,查询后将显示查询日期所在月份的月历,并突出显示查询日期。

如果是闰年,则给出提示。

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

程序还设置有对输入的日期进行合法性检查功能,如果年份、月份或者天数不合法,查询将被拒绝,并显示提示信息。

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

通过键盘的操作调整年份、月份和日期,并显示调整后的日期。

还可以通过键盘操作复位到系统所在日期等。

如:

左移键表示减少月份、右移键表示增加月份;上移键表示减少年份、下移键表示增加年份;如S键表示显示系统日期;如果按ESC键,表示退出系统等。

2.2功能模块

显示部分:

显示系统当月月历,突出显示当前日期,并且能够翻阅万年历;

查询部分:

根据用户输入,查询用户所需的日期信息.

2.3流程图说明

(1)显示系统的当前日期

用函数getdate()获得系统当前时间;用printWNL()函数打印当天的日历;根据用户←、→、↑、↓的输入进行年、月的翻查;Tab键表示用户需要输入进行查询,点此键可进入第二部分,Esc退出;

(2)根据用户输入,查询其它日期:

isLeap()判断输入数据是否是闰年;maxDay()判断某年某月最多天数;eachYearTotal()判断这一天是该年的第几天;week判断某年某月某日的编号;output()输出该天星期几;display()显示当前月历;check()检查有效性;display3()输出日历;getMenu()调菜单;

第3章系统设计

3.1流程图

3.2数据结构

a[]={31,28,31,30,31,30,31,31,30,31,30,31};存储1~12月每个月的天数

3.3中心算法代码

voidprintWNL(int,int);简单格式打印万年历

intWeek(int,int,int);求星期几

intgetDays(int,int);计算某个月的天数

intisRunNian(int);判断是否闰年

inteachYearTotal(intyear,intmonth,intday);判断是第几天

intweek(intyear,intmonth,intday);判断星期几

intcheck(intyear,intmonth,intday);检查输入

display();显示当前月历;

voiddisplay3(intyear,intmonth,intday);输出日历;

 

第4章系统实现

4.1程序代码

#include

#include

#include

#include

#include

#include

#defineup72

#definedown80

#defineleft75

#defineright77

#defineTab9

#defineEsc27

#defines115

voidprintWNL(int,int);

intWeek(int,int,int);

intgetDays(int,int);

intisRunNian(int);

intisLeap(intyear);

intmaxDay(intyear,intmonth);

inteachYearTotal(intyear,intmonth,intday);

intweek(intyear,intmonth,intday);

char*chineseWeek(intnumber);

voidoutput(intyear,intmonth,intday);

voiddisplay(intyear,intmonth);

intcheck(intyear,intmonth,intday);

voiddisplay1(intyear);

voiddisplay2(intyear,intmonth);

voiddisplay3(intyear,intmonth,intday);

voidgetMenu();

voidmain()

{

intyear,month,q,y,m,d1;

structdated;

charch;

intday,flag,select;

getdate(&d);

year=d.da_year;

month=d.da_mon;

day=d.da_day;

y=d.da_year;

m=d.da_mon;

d1=d.da_day;

do

{

system("cls");

printf("今天是:

%d月%d日",m,d1);

q=isLeap(year);

if(q==1)printf("\n注:

本年为闰年.");

printf("\n");

printWNL(year,month);

ch=getch();

if(ch==Esc)

gotostop;;

if(ch==Tab)

break;

elseif(ch==0)

ch=getch();

switch(ch)

{cases:

{year=d.da_year;

month=d.da_mon;

day=d.da_day;};break;

caseleft:

year--;break;

caseright:

year++;break;

caseup:

month--;

if(month==0)

{

month=12;

year--;

}

break;

casedown:

month++;

if(month==13)

{

month=1;

year++;

}

break;

default:

;

}

}while

(1);

printf("\n请选择(输入相应数字):

");

while

(1)

{

getMenu();

printf("输入选择:

");

fflush(stdin);

scanf("%d",&select);

fflush(stdin);

switch(select)

{

case1:

do

{

printf("输入年月日(年、月、日之间加空格):

");

scanf("%d%d%d",&year,&month,&day);

flag=check(year,month,day);

if(flag==0)

{

printf("输入有误,请重新输入!

\n");

}

}while(flag==0);

display3(year,month,day);

break;

case2:

exit(0);

default:

printf("输入有误,请重新输入!

\n\n");

}

q=isLeap(year);

if(q==1)printf("注:

本年为闰年.\n");

}

stop:

printf("谢谢使用!

\n");

}

voidprintWNL(inty,intm)

{

inti,j;

intday=1-Week(y,m,1);

intdays=getDays(y,m);

printf("%4d年%2d月\n",y,m);

printf("日一二三四五六\n");

for(i=1;i<=6;i++)

{

for(j=1;j<=7;j++)

{

if(day<=0||day>days)

printf("");

else

printf("%3d",day);

day++;

}

printf("\n");

}

printf("操作说明:

【←】减年【→】加年【↑】减月【↓】加月\n【Tab】查询【s】复位到系统时间【Esc】退出\n");

}

intWeek(inty,intm,intd)

{

intdays=0;

inti;

for(i=1;i

days+=isRunNian(i)?

366:

365;

for(i=1;i

days+=getDays(y,i);

days+=d;

returndays%7;

}

intisRunNian(inty)

{

return(y%4==0&&y%100!

=0||y%400==0)?

1:

0;

}

intgetDays(inty,intm)

{

intdays=0;

switch(m)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

days=31;break;

case4:

case6:

case9:

case11:

days=30;break;

case2:

days=isRunNian(y)?

29:

28;break;

default:

;

}

returndays;

}

intisLeap(intyear)

{

if(year%4==0&&year%100!

=0||year%400==0)

return1;

else

return0;

}

intmaxDay(intyear,intmonth)

{

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

if(isLeap(year))

a[1]=29;

returna[month-1];

}

inteachYearTotal(intyear,intmonth,intday)

{

inti,sum=0;

for(i=1;i

{

sum+=maxDay(year,i);

}

sum+=day;

returnsum;

}

intweek(intyear,intmonth,intday)

{

intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,day);

number%=7;

returnnumber;

}

char*chineseWeek(intnumber)

{

switch(number)

{

case0:

return"星期天";

case1:

return"星期一";

case2:

return"星期二";

case3:

return"星期三";

case4:

return"星期四";

case5:

return"星期五";

case6:

return"星期六";

default:

return"error";

}

}

voidoutput(intyear,intmonth,intday)

{

intnumber=week(year,month,day);

printf("%d年%d月%d日%10s\n\n",year,month,day,chineseWeek(number));

}

voiddisplay(intyear,intmonth)

{

intmax,number,i,j=1;

max=maxDay(year,month);

number=week(year,month,1);

printf("%5s%5s%4s%4s%4s%4s%4s\n","日","一","二","三","四","五","六");

for(i=0;i

{

printf("");

}

while(j<=max)

{

printf("%4d",j);

if(i%7==6)

{

printf("\n");

}

i++;

j++;

}

printf("\n\n");

}

intcheck(intyear,intmonth,intday)

{

if(year<0||month<1||month>12||day<1||day>maxDay(year,month))

return0;

else

return1;

}

voiddisplay3(intyear,intmonth,intday)

{

printf("\n");

output(year,month,day);

display(year,month);

}

voidgetMenu()

{

printf("\n1.输入查询日期\t2.退出\n");

}

4.2系统使用

进入后默认显示系统当前日期,按←、→键可以进行减年、加年操作;↑、↓可以进行减月、加月操作;在翻阅过程中按s键可以复位到系统日期;按Esc键退出;按Tab键进行查询操作,输入需要查询日期后,会显示查询日期所在月历;如需继续查询,则按1继续查询,否则可按下2退出。

4.3运行效果说明

进入后会显示系统日期,并突出提示当天的日期

可以根据提示进行万年历的翻阅;在翻阅过程中按s键可复位到系统时间;

也可进行查询或者退出.

按下Tab键后,可进行万年历查询,默认显示所查日期的月历.

如果系统日期或者查询日期所在年为闰年,则会给出提示.

第5章总结

5.1独特设计

本万年程序将显示、翻阅、查询合为一体,操作简单,使用方便。

5.2设计中的问题以及收获

在程序设计过程中,最大的问题就是在编写万年历翻阅程序时感觉无从下手,不知道怎样用键盘输入来控制程序的进行,最后在一些资料和老师的帮助下,我才明白,这就是ascall码的运用,只需编写一个条件语句,告诉计算机用户输入控制键的ascall码,就能执行相应的操作。

在switch语句中,编写好每个条件后应该执行的操作即可。

经过这次程序设计之后,我真正明白了理论和实践之间的距离真的很大,把课本上的理论只是运用与实践并不是那么简单,或许在习题中给我一个switch语句让我看,我可以看懂,但是给我一个实际问题,我却没有想到用它,现在程序编写完了,回头想想程序中大部分只是都是学过的,但在实践中的使用却并不容易,这就需要我们在学好理论知识的基础上,多进行实践操作,提高解决实际问题的能力。

5.3设计题目及功能的改进意见

如果能将年历、月历的显示与系统的当前时间加入其中,功能会更加齐全。

5.4结束语

这次C语言课程设计,是真正的将理论与实践结合,不但我的基础知识得到了巩固与提高,同是也增强了我解决实际问题的能力,系统的运用的学过的知识,自己得到了综合的提高。

在课程设计结束后,我还会继续学习C语言,更多的进行实践,不断提高自己。

致谢词

感谢老师在课程设计中对我的帮助,在设计过程中耐心的帮我解决问题,让我的程序更加简单而合理,使设计顺利结束!

鸣谢以下参考文献:

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

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

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

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

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

6.MSDN

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

当前位置:首页 > 求职职场 > 笔试

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

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