Java超级万年历课程设计_第1页
Java超级万年历课程设计_第2页
Java超级万年历课程设计_第3页
Java超级万年历课程设计_第4页
Java超级万年历课程设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1/11/1超级万年历课程设计的目的JAVA程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JAVA程序设计课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。编写一个万年历理解图像界面的基本组织窗口,以及类、方法的调用,以及添加控件、并在窗口中显示,可以对年份、月份、当前的时间进行查询方便用户

2、的使用。设计方案论证2.1需求分析本次课程设计是编写一个万年历程序,主要目的是加强对Java的实际运用,了解图形用户界面的基本组件窗口、按纽(JButton)、标签(JLabel)、下拉表组件(JComboBox)、文本框(TextBox)、选择框、查询事件的处理,菜单的设计还有日期的计算等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java的事件处理机制。万年历是一个强大的日历系统,通过它可以实现对过去,现在以及将来日期的查找,通过在年份对应的下拉菜单中选择要查询的年份,再相应的在月份对应的下拉菜单选择要查询的月份,则可得到相应的日历。此外,还可以显示出数字时间,很方便用户

3、的查询。本实验是对图形用户界面,布局管理器的综合运用,理解JAVA的时间处理机制,编写独立运行的窗口。2.2概要设计本程序涉及三个类,MainFrame为显示日期部分的类,是程序中的主类,ClockAction是对所要查询的年份及其月份进行选择的类,Clock是对当前时间进行显示的类,位与整个界面的底部,程序运行时,只要运行MainFrame即可显示出日期以及时间的详细信息。以下是对这三个类的具体说明。2.2.1自定义类说明ClockAction类作用:获取当前下拉列表中所选择的信息实现的接口:ActionListenerActionListener用于接收操作事件的侦听器接口。使用该类创建的

4、对象可使用组件的addActionListener方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed方法。ActionEvent指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件生成此高级别事件。事件被传递给每一个ActionListener对象,这些对象是使用组件的addActionListener方法注册的,用以接收这类事件。ClockAction类的具体实现如下:对当前所选年份、月份的查询classClockActionimplementsActionListenerpublicvoidactionPerformed(Actio

5、nEventargO)intc_year,c_month,c_week;/得到当前所选年份c_year=Integer.parseInt(coml.getSelectedItem().toString();/得到当前月份,并减1,计算机中的月为011c_month=Integer.parseInt(com2.getSelectedItem().toString()1;/调用函数use,得到星期几c_week=use(c_year,c_month);/调用函数ResetdayResetday(c_week,c_year,c_month);MainFrame类作用:主类继承的父类:JFrame实现

6、的接口:没有JFrame是MainFrame的父类,当用户试图关闭窗口时,JFrame知道如何进行响应。用户关闭窗口时,默认的行为只是简单地隐藏JFrame。在多屏幕环境中,可以在不同的屏幕设备上创建一个JFrame。主要方法说明:publicstaticvoidmain(Stringargs)JFrame.setDefaultLookAndFeelDecorated(true);newMainFrame();Clock类作用:显示时间的类继承的父类:Canvas实现的接口:RunnableCanvas是Clock的父类,它表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区

7、域捕获用户的输入事件。Runnable接口由Clock类来实现,设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。主要方法说明:用来显示时间的方法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.setC

8、olor(Color.orange);g.drawString(time,45,25);2.3系统总体设计本程序包括两部分:一部分是MainFrame.java用来显示日期,另一部分是Clock.java,用来显示时间。编写程序时,首先创建MainFrame类,在MainFrame类中编写显示日期的代码,再创建Clock类,再向Clock类中编写显示时间的代码,把MainFrame类和Clock类放在同一个项目中,运行程序时,只需运行MainFrame即可显示出所有信息,此时,在界面上会显示出相应的日期,同时,在界面的底部会显示出当前的时间。以下是程序的第一部分,也是程序的主体部分。运行时,只

9、要运行MainFrame.java即可实现日期的显示。根据上面功能描述的介绍,对基于JAVA的超级万年历进行总体功能模块划分,如图1所示。图1图1功能模块示意图2.4系统详细设计本系统共包括2个java源文件,类之间的关系如图2所示,JAVA源文件及其功能如表所示。图2图2类关系图本程序中有3个源文件分别是MainFrame、Clock、ClockAction,MainFrame是本程序的主程序,为显示日期部分的类。Clock实现使用线程进行休眠的功能,用来显示当期的时间。ClockAction对当前所选年份、月份的查询。如表1所示。表1JAVA源文件序号类名主要功能1MainFrame本程序

10、的主函数2Clock初始化界面居中3ClockAction监听事件在主类MainFrame中包括的成员变量有面板、文本框、命令按钮,实现向窗口中添加控件的功能,如表2所示。表2成员变量成员变量描述变量类型名称面板JpanelPanelPanellPanel2Panel3文本框JLabellabely_labelm_label命令按钮JComboBoxCom1Com2在主类MainFrame中包括的方法有MaunFrame(),实现初始化界面居中,如表3所示。表3方法方法名功能备注MaunFrame()初始化界面居中在Clock类中包括的成员变量有类声明、字符串,如表4所示表4成员变量成员变量描

11、述变量类型名称类声明mainframemf类声明threadt字符串stringtime在Clock类中有4个方法,分别是方法actionPerformed()实现监听获取当前时间的功能、Init()实现界面初始化、ClockAction()实现设置查看的时间、ResetDay()实现使查看的时间正确。如表5所示。表5方法方法名功能备注actionPerformed()监听获取当前时间Init()界面初始化ClockAction()设置查看的时间ResetDay()使查看的时间正确ClockAction()设置查看的时间ResetDay()使查看的时间正确在ClockAction类中包括的成员

12、变量有,年、月、周,获取当前下拉列表中所选择的信息,表6所示。表6成员变量成员变量描述变量类型名称年intc_year月intc_month周intc_weekClockAction类中有三个方法,分别是Clock(),该方法实现初始化线程。Run()方法实现运行休眠。Paint()方法实现格式化时间显示。如表7所示。表7方法方法名功能备注Clock()初始化线程Run()运行休眠Paint()格式化时间显示设计结果与分析程序正常运行时,显示当前的年份,月份,日期以及数字时间。如果想要实现对指定日期的查询,可在“年份”对应的下拉框中选择所要查询的年,在“月份”对应的下拉框中选择所要查询的月即可

13、。例如:查询2008年5月30日是星期几。即在“年份”对应的下拉列表中选择2008,在“月份”对应的下拉列表中选择5,通过选择,即可实现对日期的查询,查询后的结果,通过此程序,还可对其他时间查询,按照查询要求进行选择。如图3所示。图3选择年份、月份按照要求输入相应的查询条件后,界面上即可显示所要查询的日期以及对应显示当前的详细时间。这样,便可以对任何日期进行查询了,为使用者提供了很大的帮助。如图4所示。而年历200851曰-二三五六12345e7s51012卡31C161718佃ZO212ZZ3Z4262=93012008=4于住IB21L10:p图4显示所选日期设计体会Java语言是解释执行

14、的高级编程语言,是面向对象的程序设计语言,功能强大,它是解释执行的,能跨平台使用。具有较高的性能和高度的安全性,Java程序的三级代码安全检查机制可以有效的防止非法代码的入侵,阻止对内存的越权访问,能够避免病毒的侵害,成为Internet上最安全的技术之一。并且支技多线程,可使用户程序并行执行,即有内存垃圾自动收集机制Java语言是一种直译”式语言,即用Java编写的程序首先被编译成字节码,再通过JVM解释成机器码,字节码是Java专有的一种中间码,必须通过JVM来解释才能运行。在不同的平台上,Java有不同的JVM,使用Java字节码可以跨越平台的限制,在不同的平台上运行。经过了一个学期对J

15、ava程序设计的学习,我们学习了理论知识,了解了Java语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。经过这次课程设计使我对JAVA图形用户界面的有关知识有了更深入了解,如几种布局管理器的使用方法,事件的处理机制,SWING的基本体系结构,SWING组件的使用方法,多媒体的实现手段等知识。完成了简单的万年历功能,本次课程设计的主要内容就是设计一个可以查询日期的程序,通过选择下拉列表中的年份以及月份来实现日期的查询,通过它可以查询到日期的一些具体信息,可以查询所选日期是星期几,还对星期六与星期日有特殊颜色的标记,方便查看。此外,还可以实现显示数字时间的功能,简单实用。通过课程

16、设计,能够达到全面、深入理解和掌握所学内容,能够进行简单的分析和判断。这次课程设计,虽说在设计过程中遇到了很多的困难,但是在老师的细心指导下,很多不会的问题都迎刃而解了。此次课程设计一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。是对自己学习的一次很好的检验。能完成这次的课程设计,和身边的同学和老师的帮助分不开的。在此对指导老师表示感谢,还有帮助过我的一些同学,在此也表示谢意。参考文献王锐.基于单片机的万年历设计J.河北:信息技术,2014,09:213-216.饶敏,邱德慧,刘雅斌.基于NIO

17、SII的万年历设计J.北京:微计算机信息,2009:45-100陈佳,高维松.基于桌面的多功能万年历设计与开发J.河北:软件刊,2013,02:72-74.4查荣.基于单片机的多功能万年历设计J.北京:机械制造与自化,2012,03:137-139.吴其庆.Java程序设计实例教程M.北京:冶金工业出版社,2009:120-230.陈佳,高维松.基于桌面的多功能万年历设计与开发J.软件导刊,2013.02:72-74.柳西玲,许斌.Java语言应用开发基础M.北京:清华大学出版社,2011.2:100-200施霞萍.Java程序设计教程M.北京:机械工业出版社,2008.6:111-121宛延

18、闿.实用Java程序设计教程M.北京:机械工业出版社,2010.1:67-1001/11/1ll/l附录MainFrame源文件中的代码如下: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

19、.JComboBox;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;publicclassMainFrameextendsJFrameprivatestaticfinallongserialVersionUID=1L;JPanelpanel=newJPanel(newBorderLayout();JPanelpanell=newJPanel();JPanelpanel2=newJPanel(newGridLayout(7,7);JPanelpanel3=newJPanel();JLabell

20、abel=newJLabel49;JLabely_label=newJLabel(年份”);JLabelm_label=newJLabel(月份”);JComboBoxcoml=newJComboBox();JComboBoxcom2=newJComboBox();intre_year,re_month;intx_size,y_size;Stringyear_num;Calendarnow=Calendar.getlnstance();/实例化CalendarMainFrame()super(“万年历);setSize(3OO,350);x_size=(int)(Toolkit.getDefa

21、ultToolkit().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(y_label);panel1.add(com1);panel1.add(m_label);panel1.add(com2);for(inti=0;i49;i+)labeli=new

22、JLabel(,JLabel.CENTER);/将显示的字符设置为居中panel2.add(labeli);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);panel2.setBackground(Color.white);panel3.

23、setBackground(Color.white);Init();coml.addActionListener(newClockAction();com2.addActionListener(newClockAction();setContentPane(panel);setVisible(true);setResizable(false);classClockActionimplementsActionListenerpublicvoidactionPerformed(ActionEventargO)intc_year,c_month,c_week;c_year=Integer.parse

24、Int(com1.getSelectedItem().toString();/得至U当前所选年份c_month=Integer.parseInt(com2.getSelectedItem().toString()-1;/得到当前月份,并减1,计算机中的月为011c_week=use(c_year,c_month);/调用函数use,得到星期几Resetday(c_week,c_year,c_month);/调用函数ResetdaypublicvoidInit()intyear,month_num,first_day_num;Stringlog=日,一,二,“三,“四,“五,六;for(inti

25、=0;i7;i+)labeli.setText(logi);for(inti=0;i49;i=i+7)labeli.setForeground(Color.red);/将星期日的日期设置为红色for(inti=6;i49;i=i+7)labeli.setForeground(Color.green);将星期六的日期设置为绿色for(inti=1;i10000;i+)com1.addltem(”+i);for(inti=1;i13;i+)com2.addltem(nn+i);month_num=(int)(now.get(Calendar.MONTH);/得到当前时间的月份year=(int)(

26、now.get(Calendar.YEAR);/得到当前时间的年份com1.setSelectedIndex(year-1);/设置下拉列表显示为当前年com2.setSelectedIndex(month_num);/设置下拉列表显示为当前月first_day_num=use(year,month_num);Resetday(first_day_num,year,month_num);publicintuse(intreyear,intremonth)intweek_num;now.set(reyear,remonth,1);/设置时间为所要查询的年月的第一天week_num=(int)(n

27、ow.get(Calendar.DAY_OF_WEEK);得到第一天的星期returnweek_num;SuppressWarnings(deprecation)publicvoidResetday(intweek_log,intyear_log,intmonth_log)intmonth_day_score;/存储月份的天数intcount;month_day_score=0;count=1;Datedate=newDate(year_log,month_log+1,1);/nowCalendarcal=Calendar.getlnstance();cal.setTime(date);cal

28、.add(Calendar.MONTH,-1);/前个月month_day_score=cal.getActualMaximum(Calendar.DAY_OF_MONTH);最后一天for(inti=7;i49;i+)/初始化标签labeli.setText(H);week_log=week_log+6;/将星期数加6,使显示正确month_day_score=month_day_score+week_log;for(inti=week_log;imonth_day_score;i+,count+)labeli.setText(count+);publicstaticvoidmain(Stringargs)JFrame.setDefaultLookAndFeelDecorated(true);newMainFrame();Clock源文件中的代码如下:importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.GridLayout;importjava.awt.Toolk

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论