




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计说明书 NO. 16超级万年历1课程设计的目的JAVA程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JAVA程序设计课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。编写一个万年历理解图像界面的基本组织窗口,以及类、方法的调用,以及添加控件、并在窗口中显示,可以对年份、月份、当前的时
2、间进行查询方便用户的使用。2设计方案论证2.1需求分析本次课程设计是编写一个万年历程序,主要目的是加强对Java的实际运用,了解图形用户界面的基本组件窗口、按纽(JButton)、标签(JLabel)、下拉表组件(JComboBox)、文本框(TextBox)、选择框、查询事件的处理,菜单的设计还有日期的计算等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java的事件处理机制。万年历是一个强大的日历系统,通过它可以实现对过去,现在以及将来日期的查找,通过在年份对应的下拉菜单中选择要查询的年份,再相应的在月份对应的下拉菜单选择要查询的月份,则可得到相应的日历。此外,还可以显示出
3、数字时间,很方便用户的查询。本实验是对图形用户界面,布局管理器的综合运用,理解JAVA的时间处理机制,编写独立运行的窗口。2.2概要设计本程序涉及三个类,MainFrame为显示日期部分的类,是程序中的主类,ClockAction是对所要查询的年份及其月份进行选择的类,Clock是对当前时间进行显示的类,位与整个界面的底部,程序运行时,只要运行MainFrame即可显示出日期以及时间的详细信息。以下是对这三个类的具体说明。2.2.1自定义类说明(1) ClockAction类作用:获取当前下拉列表中所选择的信息实现的接口:ActionListenerActionListener用于接收操作事件
4、的侦听器接口。使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。ActionEvent指示发生了组件定义的动作的语义事件。当特定于组件的动作(比如被按下)发生时,由组件生成此高级别事件。事件被传递给每一个 ActionListener 对象,这些对象是使用组件的 addActionListener 方法注册的,用以接收这类事件。ClockAction类的具体实现如下:/对当前所选年份、月份的查询class ClockAction implements ActionListener publ
5、ic void actionPerformed(ActionEvent arg0) int c_year, c_month, c_week; / 得到当前所选年份 c_year = Integer.parseInt(com1.getSelectedItem().toString();/ 得到当前月份,并减1,计算机中的月为011c_month = Integer.parseInt(com2.getSelectedItem().toString()1; / 调用函数use,得到星期几c_week = use(c_year, c_month); / 调用函数ResetdayResetday(c_w
6、eek, c_year, c_month); (2) MainFrame类作用:主类继承的父类:JFrame实现的接口:没有JFrame是MainFrame的父类,当用户试图关闭窗口时,JFrame 知道如何进行响应。用户关闭窗口时,默认的行为只是简单地隐藏 JFrame。在多屏幕环境中,可以在不同的屏幕设备上创建一个 JFrame。主要方法说明:public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); new MainFrame();(3) Clock类作用:显示时间的类继承的父类:Ca
7、nvas实现的接口:RunnableCanvas是Clock的父类,它表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。Runnable接口由Clock类来实现,设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。主要方法说明:/用来显示时间的方法public void paint(Graphics g) Font f=new Font("宋体",Font.BOLD,16); /格式化时间显示类型SimpleDateFormat SDF=new SimpleDateFormat("yyyy'年'
8、MM'月'dd'日'HH:mm:ss"); Calendar now=Calendar.getInstance();/得到当前日期和时间time=SDF.format(now.getTime(); g.setFont(f); g.setColor(Color.orange); g.drawString(time,45,25); 2.3系统总体设计本程序包括两部分:一部分是MainFrame.java用来显示日期,另一部分是Clock.java,用来显示时间。编写程序时,首先创建MainFrame类,在MainFrame类中编写显示日期的代码,再创建Cl
9、ock类,再向Clock类中编写显示时间的代码,把MainFrame类和Clock类放在同一个项目中,运行程序时,只需运行MainFrame即可显示出所有信息,此时,在界面上会显示出相应的日期,同时,在界面的底部会显示出当前的时间。以下是程序的第一部分,也是程序的主体部分。运行时,只要运行MainFrame.java即可实现日期的显示。超级万年历月份选择年份选择 根据上面功能描述的介绍,对基于JAVA的超级万年历进行总体功能模块划分,如图1所示。图1功能模块示意图2.4系统详细设计本系统共包括2个java源文件,类之间的关系如图2所示,JAVA源文件及其功能如表所示。MainFrameCloc
10、kActionClock图2 类关系图本程序中有3个源文件分别是MainFrame、Clock、ClockAction,MainFrame是本程序的主程序,为显示日期部分的类。Clock实现使用线程进行休眠的功能,用来显示当期的时间。ClockAction对当前所选年份、月份的查询。如表1所示。表1 JAVA源文件序号类名主要功能1MainFrame本程序的主函数2Clock初始化界面居中3ClockAction监听事件在主类MainFrame中包括的成员变量有面板、文本框、命令按钮,实现向窗口中添加控件的功能,如表2所示。表2成员变量成员变量描述变量类型名称面板JpanelPanelPane
11、l1Panel2Panel3文本框JLabellabely_labelm_label命令按钮JComboBoxCom1Com2在主类MainFrame中包括的方法有MaunFrame(),实现初始化界面居中,如表3所示。表3方法方法名功能备注MaunFrame()初始化界面居中在Clock类中包括的成员变量有类声明、字符串,如表4所示表4成员变量成员变量描述变量类型名称类声明mainframemf类声明threadt字符串stringtime在Clock类中有4个方法,分别是方法actionPerformed()实现监听获取当前时间的功能、Init()实现界面初始化、ClockAction()
12、实现设置查看的时间、ResetDay()实现使查看的时间正确。如表5所示。表5方法方法名功能备注actionPerformed()监听获取当前时间Init()界面初始化ClockAction()设置查看的时间ResetDay()使查看的时间正确在ClockAction类中包括的成员变量有,年、月、周,获取当前下拉列表中所选择的信息,如表6所示。表6成员变量成员变量描述变量类型名称年int c_year 月 int c_month 周intc_weekClockAction类中有三个方法,分别是Clock(),该方法实现初始化线程。Run()方法实现运行休眠。Paint()方法实现格式
13、化时间显示。如表7所示。表7方法方法名功能备注Clock()初始化线程Run()运行休眠Paint()格式化时间显示3设计结果与分析程序正常运行时,显示当前的年份,月份,日期以及数字时间。如果想要实现对指定日期的查询,可在“年份”对应的下拉框中选择所要查询的年,在“月份”对应的下拉框中选择所要查询的月即可。例如:查询2008年5月30日是星期几。即在“年份”对应的下拉列表中选择2008,在“月份”对应的下拉列表中选择5,通过选择,即可实现对日期的查询,查询后的结果,通过此程序,还可对其他时间查询,按照查询要求进行选择。如图3所示。图3 选择年份、月份按照要求输入相应的查询条件后,界面上即可显示
14、所要查询的日期以及对应显示当前的详细时间。这样,便可以对任何日期进行查询了,为使用者提供了很大的帮助。如图4所示。图4显示所选日期4设计体会Java 语言是解释执行的高级编程语言,是面向对象的程序设计语言,功能强大,它是解释执行的,能跨平台使用。具有较高的性能和高度的安全性,Java程序的三级代码安全检查机制可以有效的防止非法代码的入侵,阻止对内存的越权访问,能够避免病毒的侵害,成为Internet上最安全的技术之一。并且支技多线程,可使用户程序并行执行,即有内存垃圾自动收集机制。Java语言是一种“直译”式语言,即用Java编写的程序首先被编译成字节码,再通过JVM解释成机器码,字节码是Ja
15、va 专有的一种中间码,必须通过JVM来解释才能运行。在不同的平台上,Java有不同的JVM,使用Java 字节码可以跨越平台的限制,在不同的平台上运行。经过了一个学期对Java程序设计的学习,我们学习了理论知识,了解了Java语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。经过这次课程设计使我对JAVA图形用户界面的有关知识有了更深入了解,如几种布局管理器的使用方法,事件的处理机制,SWING的基本体系结构,SWING组件的使用方法,多媒体的实现手段等知识。完成了简单的万年历功能,本次课程设计的主要内容就是设计一个可以查询日期的程序,通过选择下拉列表中的年份以及月份来实现日
16、期的查询,通过它可以查询到日期的一些具体信息,可以查询所选日期是星期几,还对星期六与星期日有特殊颜色的标记,方便查看。此外,还可以实现显示数字时间的功能,简单实用。通过课程设计,能够达到全面、深入理解和掌握所学内容,能够进行简单的分析和判断。这次课程设计,虽说在设计过程中遇到了很多的困难,但是在老师的细心指导下,很多不会的问题都迎刃而解了。此次课程设计一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。是对自己学习的一次很好的检验。能完成这次的课程设计,和身边的同学和老师的帮助分不开的。在此对指导老
17、师表示感谢,还有帮助过我的一些同学,在此也表示谢意。5参考文献1王锐. 基于单片机的万年历设计J. 河北:信息技术,2014,09:213-216.2饶敏,邱德慧,刘雅斌. 基于NIOS的万年历设计J. 北京:微计算机信息,2009:45-1003陈佳,高维松. 基于桌面的多功能万年历设计与开发J. 河北:软件刊,2013,02:72-74.4查荣. 基于单片机的多功能万年历设计J. 北京:机械制造与自化,2012,03:137-139.5 吴其庆. Java程序设计实例教程M. 北京:冶金工业出版社,2009:120-230.6 陈佳,高维松. 基于桌面的多功能万年历设计与开发J. 软件导刊
18、,2013.02:72-74.7 柳西玲,许斌. Java语言应用开发基础M .北京:清华大学出版社,2011.2:100-2008 施霞萍. Java程序设计教程M.北京:机械工业出版社, 2008.6:111-1219 宛延闿.实用Java程序设计教程M.北京:机械工业出版社, 2010.1:67-100附录MainFrame源文件中的代码如下:import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.ev
19、ent.ActionEvent; import java.awt.event.ActionListener;import java.sql.Date; import java.util.Calendar; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel;import javax.swing.JPanel;public class MainFrame extends JFrame private static final long serialVersionUID = 1L; J
20、Panel panel = new JPanel(new BorderLayout();JPanel panel1 = new JPanel();JPanel panel2 = new JPanel(new GridLayout(7, 7); JPanel panel3 = new JPanel();JLabel label = new JLabel49; JLabel y_label = new JLabel("年份"); JLabel m_label = new JLabel("月份"); JComboBox com1 = new JComboBox
21、();JComboBox com2 = new JComboBox();int re_year, re_month; int x_size, y_size; String year_num; Calendar now = Calendar.getInstance(); / 实例化Calendar MainFrame() super("万年历"); setSize(300, 350); x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth();y_size = (int) (Toolkit.g
22、etDefaultToolkit().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 (int i = 0; i < 49; i+) labeli = new JLabel("", JLabel.CENT
23、ER);/ 将显示的字符设置为居中 panel2.add(labeli); panel3.add(new Clock(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.setBa
24、ckground(Color.white); Init();com1.addActionListener(new ClockAction();com2.addActionListener(new ClockAction();setContentPane(panel);setVisible(true); setResizable(false); class ClockAction implements ActionListener public void actionPerformed(ActionEvent arg0) int c_year, c_month, c_week; c_year =
25、 Integer.parseInt(com1.getSelectedItem().toString(); / 得到当前所选年份 c_month = Integer.parseInt(com2.getSelectedItem().toString() - 1; / 得到当前月份,并减1,计算机中的月为011 c_week = use(c_year, c_month); / 调用函数use,得到星期几 Resetday(c_week, c_year, c_month); / 调用函数Resetday public void Init() int year, month_num, first_day
26、_num; String log = "日", "一", "二", "三", "四", "五", "六" ; for (int i = 0; i < 7; i+) labeli.setText(logi); for (int i = 0; i < 49; i = i + 7) labeli.setForeground(Color.red); / 将星期日的日期设置为红色 for (int i = 6; i < 49; i = i + 7)
27、 labeli.setForeground(Color.green);/ 将星期六的日期设置为绿色 for (int i = 1; i < 10000; i+) com1.addItem("" + i); for (int i = 1; i < 13; i+) com2.addItem("" + i); month_num = (int) (now.get(Calendar.MONTH); / 得到当前时间的月份 year = (int) (now.get(Calendar.YEAR); / 得到当前时间的年份 com1.setSelecte
28、dIndex(year - 1); / 设置下拉列表显示为当前年 com2.setSelectedIndex(month_num); / 设置下拉列表显示为当前月 first_day_num = use(year, month_num); Resetday(first_day_num, year, month_num); public int use(int reyear, int remonth) int week_num; now.set(reyear, remonth, 1); / 设置时间为所要查询的年月的第一天 week_num = (int) (now.get(Calendar.D
29、AY_OF_WEEK);/ 得到第一天的星期 return week_num; SuppressWarnings("deprecation") public void Resetday(int week_log, int year_log, int month_log) int month_day_score; / 存储月份的天数 int count; month_day_score = 0; count = 1;Date date = new Date(year_log, month_log + 1, 1); / now Calendar cal = Calendar.g
30、etInstance();cal.setTime(date); cal.add(Calendar.MONTH, -1); / 前个月 month_day_score = cal.getActualMaximum(Calendar.DAY_OF_MONTH);/ 最后一天 for (int i = 7; i < 49; i+) / 初始化标签 labeli.setText(""); week_log = week_log + 6; / 将星期数加6,使显示正确 month_day_score = month_day_score + week_log; for (int
31、i = week_log; i < month_day_score; i+, count+) labeli.setText(count + ""); public static void main(String args) JFrame.setDefaultLookAndFeelDecorated(true); new MainFrame(); Clock源文件中的代码如下:import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Date; import java.u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人股份转让的合同范例二零二五年
- 合同担保的含义和类型
- 二零二五版办公用品采购协议合同
- 厨房安全生产课件
- 肾造瘘管的护理要点
- 南通岩棉夹芯板施工方案
- 礼仪培训动画
- 电机临时用电施工方案
- 天棚维修施工方案
- 网页广告协议书与羊角大椒干购销合同9篇
- DB34∕T 3791-2021 智慧药房验收规范
- 阿里巴巴操作手册
- 专利挖掘课件
- 地下综合管廊工程机电安装工程施工方案
- 2024年甘肃省定西市中考地理试卷(含答案解析)
- 高速公路路网数字底座研究与建设
- 药学专业岗位分析报告范文
- 七年级道法上册 第一单元 少年有梦 单元测试卷(人教版 2024年秋)
- 一年级古诗带拼音
- DL-T586-2008电力设备监造技术导则
- 河南省南阳市唐河县2023-2024学年八年级下学期期末数学试题
评论
0/150
提交评论