Java万年历.docx

上传人:b****5 文档编号:11733658 上传时间:2023-03-31 格式:DOCX 页数:25 大小:153.10KB
下载 相关 举报
Java万年历.docx_第1页
第1页 / 共25页
Java万年历.docx_第2页
第2页 / 共25页
Java万年历.docx_第3页
第3页 / 共25页
Java万年历.docx_第4页
第4页 / 共25页
Java万年历.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

Java万年历.docx

《Java万年历.docx》由会员分享,可在线阅读,更多相关《Java万年历.docx(25页珍藏版)》请在冰豆网上搜索。

Java万年历.docx

Java万年历

软件工程学院

JAVA程序设计课程实训报告

(2012~2013)学年第1学期)

 

姓名:

学号:

专业:

班级:

指导教师:

 

JAVA程序设计课程实训报告

日期

2012-9-3至2012-9-14

地点

项目名称

Java程序设计课程综合训练

实训目的能力目标

1、熟悉JAVA开发工具的操作界面

2、掌握JAVA程序语法规则

3、较好完成布置的各实训课题内容

实训要求:

【程序】编写一个万年历的软件。

(1).掌握Eclipse中工程的使用,项目的调试、编译、链接、运行。

(2).面向对象程序设计中类的组织和类之间的关系分析。

(3).构造函数的应用。

(4)继承和派生的使用

(5).多态性和接口的使用。

(6).网络编程的组织与使用。

学会Eclipse完成工程的创建;掌握面向对象中类、继承、多态性的开发思想;掌握网络编程的概念;独立设计B/S螃蟹过街游戏;考试管理管理系统;C/S网络。

实训内容(过程及步骤):

1、创建文件目录:

在E盘下新建以文件夹万年历,将程序保存到此文件下。

2、运行程序:

双击打开eclipse.exe软件,打开文件新建项目,新建java项目,创建项目名,”wannianli”;点击下一步,之后完成,则这个项目就创建好了,如图所示:

4、在新建的项目上单击右键创建包,如图所示:

4、在包上单击右键创建类,输入程序,运行程序,查看结果,保存java程序。

5、输入程序:

packagemyCalendar;

//Downloadby

importjava.awt.Color;

importjava.text.ParseException;

importjava.text.SimpleDateFormat;

importjava.util.Calendar;

importjava.util.Date;

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;i>>=1){

if((lunarInfo[y-1900]&i)!

=0)sum+=1;

}

return(sum+leapDays(y));

}

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

finalprivatestaticintleapDays(inty){

if(leapMonth(y)!

=0){

if((lunarInfo[y-1900]&0x10000)!

=0)

return30;

else

return29;

}else

return0;

}

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

finalprivatestaticintleapMonth(inty){

return(int)(lunarInfo[y-1900]&0xf);

}

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

finalprivatestaticintmonthDays(inty,intm){

if((lunarInfo[y-1900]&(0x10000>>m))==0)

return29;

else

return30;

}

//======传回农历y年的生肖

finalpublicStringanimalsYear(){

finalString[]Animals=newString[]{"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};

returnAnimals[(year-4)%12];

}

//======传入月日的offset传回干支,0=甲子

finalprivatestaticStringcyclicalm(intnum){

finalString[]Gan=newString[]{"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};

finalString[]Zhi=newString[]{"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};

return(Gan[num%10]+Zhi[num%12]);

}

//======传入offset传回干支,0=甲子

finalpublicStringcyclical(){

intnum=year-1900+36;

return(cyclicalm(num));

}

publicstaticStringgetChinaDayString(intday){

StringchineseTen[]={"初","十","廿","卅"};

intn=day%10==0?

9:

day%10-1;

if(day>30)

return"";

if(day==10)

return"初十";

else

returnchineseTen[day/10]+chineseNumber[n];

}

/***//**

*传出y年m月d日对应的农历.

*yearCyl3:

农历年与1864的相差数?

*monCyl4:

从1900年1月31日以来,闰月数

*dayCyl5:

与1900年1月31日相差的天数,再加40?

*@paramcal

*@return

*/

publicStringgetLunarDate(intyear_log,intmonth_log,intday_log){

//@SuppressWarnings("unused")

intyearCyl,monCyl,dayCyl;

intleapMonth=0;

Stringnowadays;

DatebaseDate=null;

Datenowaday=null;

try{

baseDate=chineseDateFormat.parse("1900年1月31日");

}catch(ParseExceptione){

e.printStackTrace();//TochangebodyofcatchstatementuseOptions|FileTemplates.

}

nowadays=year_log+"年"+month_log+"月"+day_log+"日";

try{

nowaday=chineseDateFormat.parse(nowadays);

}catch(ParseExceptione){

e.printStackTrace();//TochangebodyofcatchstatementuseOptions|FileTemplates.

}

//求出和1900年1月31日相差的天数

intoffset=(int)((nowaday.getTime()-baseDate.getTime())/86400000L);

dayCyl=offset+40;

monCyl=14;

//用offset减去每农历年的天数

//计算当天是农历第几天

//i最终结果是农历的年份

//offset是当年的第几天

intiYear,daysOfYear=0;

for(iYear=1900;iYear<10000&&offset>0;iYear++){

daysOfYear=yearDays(iYear);

offset-=daysOfYear;

monCyl+=12;

}

if(offset<0){

offset+=daysOfYear;

iYear--;

monCyl-=12;

}

//农历年份

year=iYear;

yearCyl=iYear-1864;

leapMonth=leapMonth(iYear);//闰哪个月,1-12

leap=false;

//用当年的天数offset,逐个减去每月(农历)的天数,求出当天是本月的第几天

intiMonth,daysOfMonth=0;

for(iMonth=1;iMonth<13&&offset>0;iMonth++){

//闰月

if(leapMonth>0&&iMonth==(leapMonth+1)&&!

leap){

--iMonth;

leap=true;

daysOfMonth=leapDays(year);

}else

daysOfMonth=monthDays(year,iMonth);

offset-=daysOfMonth;

//解除闰月

if(leap&&iMonth==(leapMonth+1))leap=false;

if(!

leap)monCyl++;

}

//offset为0时,并且刚才计算的月份是闰月,要校正

if(offset==0&&leapMonth>0&&iMonth==leapMonth+1){

if(leap){

leap=false;

}else{

leap=true;

--iMonth;

--monCyl;

}

}

//offset小于0时,也要校正

if(offset<0){

offset+=daysOfMonth;

--iMonth;

--monCyl;

}

month=iMonth;

day=offset+1;

if(((month)==1)&&day==1){

return"春节";

}

elseif(((month)==1)&&day==15){

return"元宵";

}

elseif(((month)==5)&&day==5)

return"端午";

elseif(((month)==8)&&day==15)

return"中秋";

elseif(day==1)

returnchineseNumber[month-1]+"月";

else

returngetChinaDayString(day);

}

publicStringtoString(){

if(chineseNumber[month-1]=="一"&&getChinaDayString(day)=="初一")

return"农历"+year+"年";

elseif(getChinaDayString(day)=="初一")

returnchineseNumber[month-1]+"月";

else

returngetChinaDayString(day);

//returnyear+"年"+(leap?

"闰":

"")+chineseNumber[month-1]+"月"+getChinaDayString(day);

}

}

6、如四五所示,创建Clock.java和MainFrame.java类,并且添加代码;

7、Clock.java代码如下:

packagemyCalendar;

//Downloadby

importjava.awt.Canvas;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjava.text.SimpleDateFormat;

importjava.util.Calendar;

classClockextendsCanvasimplementsRunnable{

/**

*

*/

privatestaticfinallongserialVersionUID=3660124045489727166L;

MainFramemf;

Threadt;

Stringtime;

publicClock(MainFramemf){

this.mf=mf;

setSize(280,40);

setBackground(Color.white);

t=newThread(this);//实例化线程

t.start();//调用线程

}

publicvoidrun(){

while(true){

try{

Thread.sleep(1000);//休眠1秒钟

}catch(InterruptedExceptione){

System.out.println("异常");

}

this.repaint(100);

}

}

publicvoidpaint(Graphicsg){

Fontf=newFont("宋体",Font.BOLD,16);

SimpleDateFormatSDF=newSimpleDateFormat("yyyy'年'MM'月'dd'日'HH:

mm:

ss");//格式化时间显示类型

Calendarnow=Calendar.getInstance();

time=SDF.format(now.getTime());//得到当前日期和时间

g.setFont(f);

g.setColor(Color.black);

g.drawString(time,45,25);

}

}

8、MainFrame.java代码如下:

packagemyCalendar;

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.GridLayout;

importjava.awt.Toolkit;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.sql.Date;

importjava.util.Calendar;

importjavax.swing.JComboBox;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JButton;

 

classMainFrameextendsJFrame{

/**

*

*/

privatestaticfinallongserialVersionUID=1L;

JPanelpanel=newJPanel(newBorderLayout());

JPanelpanel1=newJPanel();

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

JPanelpanel3=newJPanel();

JLabel[]label=newJLabel[49];

JLabely_label=newJLabel("年份");

JLabelm_label=newJLabel("月份");

JComboBoxcom1=newJComboBox();

JComboBoxcom2=newJComboBox();

JButtonbut1=newJButton("上个月");

JButtonbut2=newJButton("下个月");

intre_year,re_month;

intx_size,y_size;

Stringyear_num;

Calendarnow=Calendar.getInstance();//实例化Calendar

MainFrame(){

super("万年历");

setSize(600,700);

x_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth());

y_size=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight());

setLocation((x_size-300)/2,(y_size-350)/2);

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);

for(inti=0;i<49;i++){

label[i]=newJLabel("",JLabel.CENTER);//将显示的字符设置为居中

panel2.add(label[i]);

}

panel3.add(newClock(this));

panel.add(panel1,BorderLayout.NORTH);

panel.add(panel2,BorderLayout.CENTER);

panel.add(panel3,BorderLayout.SOUTH);

panel.setBackground(Color.white);

panel1.setBackground(Color.white);

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

当前位置:首页 > 小学教育 > 数学

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

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