java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx

上传人:b****6 文档编号:18344527 上传时间:2022-12-15 格式:DOCX 页数:14 大小:238.82KB
下载 相关 举报
java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx_第1页
第1页 / 共14页
java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx_第2页
第2页 / 共14页
java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx_第3页
第3页 / 共14页
java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx_第4页
第4页 / 共14页
java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx

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

java课程设计报告之万年历程序设计报告1Word文档下载推荐.docx

(1)通过网页形式运行,实现图形界面。

(2)能以月历形式显示日期与星期。

(3)支持用户自己输入年份,并提供月份的下拉形式菜单来选择月份。

(4)通过点击“更新”来刷新日历。

2.概要设计

2.1程序设计思路

1.总天数的算法:

首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

2.输出月份第一天为星期几的算法:

使总天数除以7取余加2得几既为星期几,若是7,则为星期日。

3.算出输出月份第一天为星期几的算法:

算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

4.如果年份小于1582年则程序不予判断。

2.2程序运行界面

2.3流程图

3.各模块的功能及程序说明

3.1.初始化组件

importjava.applet.Applet;

importjava.awt.*;

importjava.util.*;

3.2.初始化数据

publicclassCalendarAppletextendsApplet{

staticfinalintTOP=70;

//顶端距离

staticfinalintCELLWIDTH=50,CELLHEIGHT=30;

//单元格尺寸

staticfinalintMARGIN=3;

//边界距离

staticfinalintFEBRUARY=1;

TextFieldtfYear=newTextField("

2004"

5);

//显示年份的文本域

ChoicemonthChoice=newChoice();

//月份选择下拉框

ButtonbtUpdate=newButton("

更新"

);

//更新按钮

GregorianCalendarcalendar=newGregorianCalendar();

//日历对象

FontsmallFont=newFont("

TimesRoman"

Font.PLAIN,15);

//显示小字体

FontbigFont=newFont("

Font.BOLD,50);

//显示大字体

Stringdays[]={"

星期日"

"

星期一"

星期二"

星期三"

"

星期四"

星期五"

星期六"

};

Stringmonths[]={"

一月"

二月"

三月"

四月"

五月"

六月"

七月"

八月"

九月"

十月"

十一月"

十二月"

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

//每个月的天数

intsearchMonth,searchYear;

//查询的年份及月份

3.3.绘制程序界面

publicvoidinit(){

setBackground(Color.white);

//设置背景颜色

searchMonth=calendar.get(Calendar.MONTH);

//得到系统年份

searchYear=calendar.get(Calendar.YEAR);

//得到系统月份

add(newLabel("

年:

"

));

//增加组件到Applet

tfYear.setText(String.valueOf(searchYear));

//设置文本域文字

add(tfYear);

月:

monthChoice.setFont(smallFont);

//设置月份选择下拉框的显示字体

for(inti=0;

i<

12;

i++){

monthChoice.addItem(months[i]);

//增加下拉框选项

}

monthChoice.select(searchMonth);

//设置下拉框当前选择项

add(monthChoice);

add(btUpdate);

intcomponentCount=this.getComponentCount();

//得到Applet中的组件数量

for(inti=0;

i<

componentCount;

i++){

getComponent(i).setFont(smallFont);

//设置所有组件的显示字体

}

4.测试分析

图2在年份输入框内输入1582后点击更新后的情况

图3月份下拉列表框

图4选择月份后的情况

图5点击更新按钮后显示的结果

5.源程序清单

publicvoidinit(){

publicvoidpaint(Graphicsg){

FontMetricsfontMetric;

//显示字体的FontMetrics对象

intfontAscent;

intdayPos;

inttotalWidth,totalHeight;

//总的宽度,高度

intnumRows;

//行数

intxNum,yNum;

//水平和垂直方向单元格数量

intnumDays;

StringdayStr;

//显示天数字符串

intmargin;

g.setColor(Color.lightGray);

//设置当前颜色

g.setFont(bigFont);

//设置当前使用字体

g.drawString(searchYear+"

年"

60,TOP+70);

//绘制字符串

g.drawString((searchMonth+1)+"

月"

200,TOP+130);

g.setColor(Color.black);

g.setFont(smallFont);

fontMetric=g.getFontMetrics();

//获取变量初值

fontAscent=fontMetric.getAscent();

dayPos=TOP+fontAscent/2;

totalWidth=7*CELLWIDTH;

//得到总的表格宽度

7;

g.drawString(days[i],(CELLWIDTH-fontMetric.stringWidth(days[i]))/2+i*CELLWIDTH,dayPos-20);

//绘制表格标题栏

}

numRows=getNumberRows(searchYear,searchMonth);

//计算需要的行的数量

totalHeight=numRows*CELLHEIGHT;

//得到总的表格高度

=totalWidth;

i+=CELLWIDTH){

g.drawLine(i,TOP,i,TOP+totalHeight);

//绘制表格线

for(inti=0,j=TOP;

=numRows;

i++,j+=CELLHEIGHT){

g.drawLine(0,j,totalWidth,j);

xNum=(getFirstDayOfMonth(searchYear,searchMonth)+1)*CELLWIDTH-MARGIN;

yNum=TOP+MARGIN+fontAscent;

numDays=daysInMonth[searchMonth]+((calendar.isLeapYear(searchYear)&

&

(searchMonth==FEBRUARY))?

1:

0);

for(intday=1;

day<

=numDays;

day++){

dayStr=Integer.toString(day);

g.drawString(dayStr,xNum-fontMetric.stringWidth(dayStr),yNum);

//绘制字符串

xNum+=CELLWIDTH;

if(xNum>

totalWidth){

xNum=CELLWIDTH-MARGIN;

yNum+=CELLHEIGHT;

publicbooleanaction(Evente,Objecto){

intsearchYearInt;

if(e.target==btUpdate){

searchMonth=monthChoice.getSelectedIndex();

//得到查询月份

searchYearInt=Integer.parseInt(tfYear.getText(),10);

//得到查询年份

if(searchYearInt>

1581){

searchYear=searchYearInt;

}

repaint();

//重绘屏幕

returntrue;

}

returnfalse;

}

privateintgetNumberRows(intyear,intmonth){//得到行数量

intfirstDay;

intnumCells;

if(year<

1582){//年份小于1582年,则返回-1

return(-1);

if((month<

0)||(month>

11)){

}

firstDay=getFirstDayOfMonth(year,month);

//计算月份的第一天

if((month==FEBRUARY)&

(firstDay==0)&

!

calendar.isLeapYear(year)){

return4;

numCells=firstDay+daysInMonth[month];

(calendar.isLeapYear(year))){

numCells++;

return((numCells<

=35)?

5:

6);

//返回行数

privateintgetFirstDayOfMonth(intyear,intmonth){//得到每月的第一天

inti;

1582){//年份小于1582年,返回-1

11)){//月份数错误,返回-1

firstDay=getFirstDayOfYear(year);

//得到每年的第一天

for(i=0;

month;

i++){

firstDay+=daysInMonth[i];

//计算每月的第一天

if((month>

FEBRUARY)&

calendar.isLeapYear(year)){

firstDay++;

return(firstDay%7);

}

privateintgetFirstDayOfYear(intyear){//计算每年的第一天

intleapYears;

inthundreds;

intfourHundreds;

intfirst;

1582){//如果年份小于1582年

//返回-1

leapYears=(year-1581)/4;

hundreds=(year-1501)/100;

leapYears-=hundreds;

fourHundreds=(year-1201)/400;

leapYears+=fourHundreds;

first=5+(year-1582)+leapYears%7;

//得到每年第一天

returnfirst;

}

6.课程设计体会

(1)选题目的:

本次课程设计为课本后设计题目任选一题进行设计。

思考一段时间后,我们组决定做一个万年历的设计。

主要考虑到以前时间少课程内容多,JAVA课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们组每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA的一些基础知识掌握的更加牢固。

(2)对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。

最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。

经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。

在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。

自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。

通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。

还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。

还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。

所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。

网络是我们学习的最好的老师之一。

有问题,问网络,是一个很好的习惯。

参考文献

[1].曾令明索望甘刚宋波,Java程序设计教程,西安电子科技大学出版社,2007.8

[2].孙全党王吴迪赵枫朝,Java程序设计应用教程,电子工业出版社,2006.2

[3].赵玉阳,Java从入门到精通,清华大学出版社,2006.8

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

当前位置:首页 > 高等教育 > 其它

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

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