Java万年历课程设计报告Word下载.docx

上传人:b****2 文档编号:6090025 上传时间:2023-05-06 格式:DOCX 页数:34 大小:55.67KB
下载 相关 举报
Java万年历课程设计报告Word下载.docx_第1页
第1页 / 共34页
Java万年历课程设计报告Word下载.docx_第2页
第2页 / 共34页
Java万年历课程设计报告Word下载.docx_第3页
第3页 / 共34页
Java万年历课程设计报告Word下载.docx_第4页
第4页 / 共34页
Java万年历课程设计报告Word下载.docx_第5页
第5页 / 共34页
Java万年历课程设计报告Word下载.docx_第6页
第6页 / 共34页
Java万年历课程设计报告Word下载.docx_第7页
第7页 / 共34页
Java万年历课程设计报告Word下载.docx_第8页
第8页 / 共34页
Java万年历课程设计报告Word下载.docx_第9页
第9页 / 共34页
Java万年历课程设计报告Word下载.docx_第10页
第10页 / 共34页
Java万年历课程设计报告Word下载.docx_第11页
第11页 / 共34页
Java万年历课程设计报告Word下载.docx_第12页
第12页 / 共34页
Java万年历课程设计报告Word下载.docx_第13页
第13页 / 共34页
Java万年历课程设计报告Word下载.docx_第14页
第14页 / 共34页
Java万年历课程设计报告Word下载.docx_第15页
第15页 / 共34页
Java万年历课程设计报告Word下载.docx_第16页
第16页 / 共34页
Java万年历课程设计报告Word下载.docx_第17页
第17页 / 共34页
Java万年历课程设计报告Word下载.docx_第18页
第18页 / 共34页
Java万年历课程设计报告Word下载.docx_第19页
第19页 / 共34页
Java万年历课程设计报告Word下载.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Java万年历课程设计报告Word下载.docx

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

Java万年历课程设计报告Word下载.docx

万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。

在万年历上添加了显示本地时间以后会更加准确地显示时间。

无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。

系统功能结构图:

主要描述系统要实现的各个模块的功能。

1系统模块设计

1.1需求分析

本程序的要求为:

1.使用图形用户界面

2.能够实现日期与星期的查询

3.能够显示农历

4.能够查看世界时间

5.能够添加闹钟

1.2开发和运行环境

开发工具:

Myeclipse

运行环境:

windows7

1.3功能设计

本程序要构建的万年历程序,其功能有以下几个方面:

(1)通过MainFrame类,实现图形界面和公历日期。

(2)提供年份、月份的下拉形式菜单来选择年份和月份。

(3)通过Lunar类实现农历日期。

(4)通过national类实现世界时间。

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

(6)通过SetClock类来实现闹钟功能。

(7)通过点击世界时间按钮查询世界时间

(8)通过点击闹钟按钮设置闹钟

(9)显示系统当前时间和日期。

(10)显示作者信息。

2万年历详细设计思路

2.1程序设计思路

1.总天数的算法:

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

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

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

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

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

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

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

2.2程序运行主界面

2.3流程图

3各模块功能实现及代码说明

3.1MainFrame类

importaa.Lunar;

publicclassMainFrameextendsJFrameimplementsItemListener//建立主界面

{

JPanelpanel=newJPanel(newBorderLayout());

//建立中层容器并布局

JPanelpanel1=newJPanel();

JPanelpanel2=newJPanel(newGridLayout(8,7));

JPanelpanel3=newJPanel(newGridLayout(4,1));

JLabel[]label=newJLabel[49];

//标签

JLabely_label=newJLabel("

年"

);

JLabelm_label=newJLabel("

月"

JLabeldashao=newJLabel("

时间总是在不经意间溜走,我们还得向前走"

JLabel.CENTER);

JLabelbing=newJLabel("

希望在回首时候,不带任何遗憾!

"

JLabelfeng=newJLabel("

桂电大烧饼制作!

JLabellabelTime=newJLabel("

JComboBoxcom1=newJComboBox();

//下拉窗口

JComboBoxcom2=newJComboBox();

JButtonbut1=newJButton("

闹钟"

//按钮

JButtonbut2=newJButton("

世界时间"

Calendarnow=Calendar.getInstance();

publicMainFrame()//设置主界面,并添加各组件

{

super("

大烧饼万年历"

setSize(500,600);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

panel1.add(but1);

panel1.add(y_label);

panel1.add(com1);

panel1.add(m_label);

panel1.add(com2);

panel1.add(but2);

panel3.add(dashao);

panel3.add(bing);

panel3.add(feng);

panel3.add(labelTime);

for(inti=0;

i<

49;

i++)//日期标签

label[i]=newJLabel("

panel2.add(label[i]);

}

panel.add(panel1,BorderLayout.NORTH);

//中层容器布局

panel.add(panel2,BorderLayout.CENTER);

panel.add(panel3,BorderLayout.SOUTH);

setContentPane(panel);

setVisible(true);

init();

com1.addItemListener(this);

//对下拉组件监听

com2.addItemListener(this);

but1.addActionListener(newActionListener(){//按钮动作监听

publicvoidactionPerformed(ActionEvente){

newaa.SetClock();

//闹钟类

});

but2.addActionListener(newActionListener(){

newaa.national();

//世界时间类

Timertimer=newTimer(1000,newActionListener()//获得系统时间,并将其显示在主界面下方

publicvoidactionPerformed(ActionEventevt)

Strings1=newSimpleDateFormat("

yyyy-MM-ddHH:

mm:

ss"

).format(newDate());

labelTime.setText("

现在时间是:

+s1);

timer.start();

//线程启动

publicvoidinit()//设置日期标签函数

intyear,month,first_day_num;

Stringlog[]={"

星期日"

"

星期一"

星期二"

星期三"

星期四"

星期五"

星期六"

};

7;

i++)

label[i].setText(log[i]);

i=i+7)

label[i].setForeground(Color.red);

//将星期天设置为红色

for(inti=6;

//将星期六设置为红色

for(inti=1800;

=2100;

i++)//将年份的下拉设置为1800-2100年

com1.addItem("

+i);

for(inti=1;

13;

i++)//讲月份下拉设置为12月

com2.addItem("

first_day_num=(int)(now.get(Calendar.DAY_OF_WEEK));

//获得日期

month=(int)(now.get(Calendar.MONTH));

//获得月份

year=(int)(now.get(Calendar.YEAR));

//获得年份

com1.setSelectedIndex(year-1800);

//将年份设置为当前年份

com2.setSelectedIndex(month);

//将月份设置为当前月

Resetday(first_day_num,year,month);

//调用Resetday函数

publicintuse(intyear2,intmonth2)//use函数

intfirst_day;

now.set(year2,month2,1);

first_day=(int)(now.get(Calendar.DAY_OF_WEEK));

returnfirst_day;

publicvoidstateChanged()

intyear3,month3,week3;

year3=Integer.parseInt(com1.getSelectedItem().toString());

month3=Integer.parseInt(com2.getSelectedItem().toString())-1;

week3=use(year3,month3);

Resetday(week3,year3,month3);

//调用函数

publicvoidResetday(intweek_log,intyear_log,intmonth_log){//Resetday函数

intmonth_day_score;

//存储月份的天数

intcount;

Lunarlunar;

//定义lunar

intmonth_day;

String[]LunarDate=newString[49];

//农历标签

month_day_score=0;

count=1;

for(inti=0;

i<

49;

i++){//将农历跟公历一起显示

for(intj=0;

j<

j=j+7)

{

if(i!

=j&

&

i!

=j+6)

label[i].setForeground(Color.black);

}

for(intj=0;

for(intj=6;

Datedate=newDate(year_log,month_log+1,1);

//nowMONTH是从0开始的,对于一月第几天来说,DAY_OF_MONTH第一天就是1.对于一年第几个月来说,MONTH一月份是0,二月份是1...

Calendarcal=Calendar.getInstance();

cal.setTime(date);

cal.add(Calendar.MONTH,-1);

//前个月

month_day_score=cal.getActualMaximum(Calendar.DAY_OF_MONTH);

//最后一天

month_day=month_day_score;

for(inti=7;

i++){//初始化标签

label[i].setText("

week_log=week_log+6;

//将星期数加6,使显示正确

month_day_score=month_day_score+week_log;

lunar=newaa.Lunar();

//调用Lunar类

month_day;

LunarDate[i]=lunar.getLunarDate(year_log,month_log+1,i+1);

//农历的实现

for(inti=week_log;

month_day_score;

i++,count++){//一些假期

if(month_log==9&

count==1)

label[i].setText(count+"

国庆"

);

label[i].setForeground(Color.red);

}

elseif(month_log==0&

元旦"

elseif(month_log==11&

count==24)

平安夜"

count==25)

圣诞"

elseif(month_log==1&

count==14)

情人节"

}

elseif(month_log==4&

劳动节"

elseif(LunarDate[i-week_log].equals("

春节"

)||LunarDate[i-week_log].equals("

元宵"

端午"

中秋"

))

label[i].setText("

\n"

+count+LunarDate[i-week_log]);

else

label[i].setText(count+LunarDate[i-week_log]);

publicvoiditemStateChanged(ItemEvente)

stateChanged();

publicstaticvoidmain(String[]args)//主函数

newMainFrame();

}

3.2Lunar类

packageaa;

publicclassLunar{

privateintyear;

privateintmonth;

privateintday;

privatebooleanleap;

finalstaticStringchineseNumber[]={"

一"

二"

三"

四"

五"

六"

七"

八"

九"

十"

十一"

十二"

staticSimpleDateFormatchineseDateFormat=newSimpleDateFormat("

yyyy年MM月dd日"

finalstaticlong[]lunarInfo=newlong[]

{0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,

0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,

0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,

0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,

0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,

0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,

0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,

0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,

0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,

0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,

0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,

0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,

0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,

0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,

0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0};

//======传回农历y年的总天数

finalprivatestaticintyearDays(inty){

inti,sum=348;

for(i=0x8000;

i>

0x8;

>

=1){

if((lunarInfo[y-1900]&

i)!

=0)sum+=1;

return(sum+leapDays(y));

//======传回农历y年闰月的天数

finalprivatestaticintleapDays(inty){

if(leapMonth(y)!

=0){

0x10000)!

=0)

return30;

else

return29;

}else

return0;

//======传回农历y年闰哪个月1-12,没闰传回0

finalprivatestaticintleapMonth(inty){

return(int)(lunarInfo[y-1900]&

0xf);

//======传

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2