Java超级万年历课程设计.docx
- 文档编号:23228905
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:17
- 大小:92.19KB
Java超级万年历课程设计.docx
《Java超级万年历课程设计.docx》由会员分享,可在线阅读,更多相关《Java超级万年历课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
Java超级万年历课程设计
超级万年历
1.课程设计的目的
《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
编写一个万年历理解图像界面的基本组织窗口,以及类、方法的调用,以及添加控件、并在窗口中显示,可以对年份、月份、当前的时间进行查询方便用户的使用。
2.设计方案论证
2.1需求分析
本次课程设计是编写一个万年历程序,主要目的是加强对Java的实际运用,了解图形用户界面的基本组件窗口、按纽(JButton)、标签(JLabel)、下拉表组件(JComboBox)、文本框(TextBox)、选择框、查询事件的处理,菜单的设计还有日期的计算等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java的事件处理机制。
万年历是一个强大的日历系统,通过它可以实现对过去,现在以及将来日期的查找,通过在年份对应的下拉菜单中选择要查询的年份,再相应的在月份对应的下拉菜单选择要查询的月份,则可得到相应的日历。
此外,还可以显示出数字时间,很方便用户的查询。
本实验是对图形用户界面,布局管理器的综合运用,理解JAVA的时间处理机制,编写独立运行的窗口。
2.2概要设计
本程序涉及三个类,MainFrame为显示日期部分的类,是程序中的主类,ClockAction
是对所要查询的年份及其月份进行选择的类,Clock是对当前时间进行显示的类,位与整个界面的底部,程序运行时,只要运行MainFrame即可显示出日期以及时间的详细信息。
以下是对这三个类的具体说明。
2.2.1自定义类说明
(1)ClockAction类
作用:
获取当前下拉列表中所选择的信息
实现的接口:
ActionListener
ActionListener用于接收操作事件的侦听器接口。
使用该类创建的对象可使用组件的addActionListener方法向该组件注册。
在发生操作事件时,调用该对象的actionPerformed方法。
ActionEvent指示发生了组件定义的动作的语义事件。
当特定于组件的动作(比如被按下)发生时,由组件生成此高级别事件。
事件被传递给每一个ActionListener对象,这些对象是使用组件的addActionListener方法注册的,用以接收这类事件。
ClockAction类的具体实现如下:
//对当前所选年份、月份的查询
classClockActionimplementsActionListener
{publicvoidactionPerformed(ActionEventarg0)
{intc_year,c_month,c_week;
//得到当前所选年份
c_year=Integer.parseInt(com1.getSelectedItem().toString());
//得到当前月份,并减1,计算机中的月为0-11
c_month=Integer.parseInt(com2.getSelectedItem().toString())-1;
//调用函数use,得到星期几
c_week=use(c_year,c_month);
//调用函数Resetday
Resetday(c_week,c_year,c_month);}
}
(2)MainFrame类
作用:
主类
继承的父类:
JFrame
实现的接口:
没有
JFrame是MainFrame的父类,当用户试图关闭窗口时,JFrame知道如何进行响应。
用户关闭窗口时,默认的行为只是简单地隐藏JFrame。
在多屏幕环境中,可以在不同的屏幕设备上创建一个JFrame。
主要方法说明:
publicstaticvoidmain(String[]args){
JFrame.setDefaultLookAndFeelDecorated(true);
newMainFrame();
}
(3)Clock类
作用:
显示时间的类
继承的父类:
Canvas
实现的接口:
Runnable
Canvas是Clock的父类,它表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
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.setColor(Color.orange);
g.drawString(time,45,25);
}
}
2.3系统总体设计
本程序包括两部分:
一部分是MainFrame.java用来显示日期,另一部分是Clock.java,用来显示时间。
编写程序时,首先创建MainFrame类,在MainFrame类中编写显示日期的代码,再创建Clock类,再向Clock类中编写显示时间的代码,把MainFrame类和Clock类放在同一个项目中,运行程序时,只需运行MainFrame即可显示出所有信息,此时,在界面上会显示出相应的日期,同时,在界面的底部会显示出当前的时间。
以下是程序的第一部分,也是程序的主体部分。
运行时,只要运行MainFrame.java即可实现日期的显示。
根据上面功能描述的介绍,对基于JAVA的超级万年历进行总体功能模块划分,如图1所示。
图1功能模块示意图
2.4系统详细设计
本系统共包括2个java源文件,类之间的关系如图2所示,JAVA源文件及其功能如表所示。
图2类关系图
本程序中有3个源文件分别是MainFrame、Clock、ClockAction,MainFrame是本程序的主程序,为显示日期部分的类。
Clock实现使用线程进行休眠的功能,用来显示当期的时间。
ClockAction对当前所选年份、月份的查询。
如表1所示。
表1JAVA源文件
序号
类名
主要功能
1
MainFrame
本程序的主函数
2
Clock
初始化界面居中
3
ClockAction
监听事件
在主类MainFrame中包括的成员变量有面板、文本框、命令按钮,实现向窗口中添加控件的功能,如表2所示。
表2成员变量
成员变量描述
变量类型
名称
面板
Jpanel
Panel
Panel1
Panel2
Panel3
文本框
JLabel
label
y_label
m_label
命令按钮
JComboBox
Com1
Com2
在主类MainFrame中包括的方法有MaunFrame(),实现初始化界面居中,如表3所示。
表3方法
方法名
功能
备注
MaunFrame()
初始化界面居中
在Clock类中包括的成员变量有类声明、字符串,如表4所示
表4成员变量
成员变量描述
变量类型
名称
类声明
mainframe
mf
类声明
thread
t
字符串
string
time
在Clock类中有4个方法,分别是方法actionPerformed()实现监听获取当前时间的功能、Init()实现界面初始化、ClockAction()实现设置查看的时间、ResetDay()实现使查看的时间正确。
如表5所示。
表5方法
方法名
功能
备注
actionPerformed()
监听获取当前时间
Init()
界面初始化
ClockAction()
设置查看的时间
ResetDay()
使查看的时间正确
在ClockAction类中包括的成员变量有,年、月、周,获取当前下拉列表中所选择的信息,如表6所示。
表6成员变量
成员变量描述
变量类型
名称
年
int
c_year
月
int
c_month
周
int
c_week
ClockAction类中有三个方法,分别是Clock(),该方法实现初始化线程。
Run()方法实现运行休眠。
Paint()方法实现格式化时间显示。
如表7所示。
表7方法
方法名
功能
备注
Clock()
初始化线程
Run()
运行休眠
Paint()
格式化时间显示
3.设计结果与分析
程序正常运行时,显示当前的年份,月份,日期以及数字时间。
如果想要实现对指定日期的查询,可在“年份”对应的下拉框中选择所要查询的年,在“月份”对应的下拉框中选择所要查询的月即可。
例如:
查询2008年5月30日是星期几。
即在“年份”对应的下拉列表中选择2008,在“月份”对应的下拉列表中选择5,通过选择,即可实现对日期的查询,查询后的结果,通过此程序,还可对其他时间查询,按照查询要求进行选择。
如图3所示。
图3选择年份、月份
按照要求输入相应的查询条件后,界面上即可显示所要查询的日期以及对应显示当前的详细时间。
这样,便可以对任何日期进行查询了,为使用者提供了很大的帮助。
如图4所示。
图4显示所选日期
4.设计体会
Java语言是解释执行的高级编程语言,是面向对象的程序设计语言,功能强大,它是解释执行的,能跨平台使用。
具有较高的性能和高度的安全性,Java程序的三级代码安全检查机制可以有效的防止非法代码的入侵,阻止对内存的越权访问,能够避免病毒的侵害,成为Internet上最安全的技术之一。
并且支技多线程,可使用户程序并行执行,即有内存垃圾自动收集机制。
Java语言是一种“直译”式语言,即用Java编写的程序首先被编译成字节码,再通过JVM解释成机器码,字节码是Java专有的一种中间码,必须通过JVM来解释才能运行。
在不同的平台上,Java有不同的JVM,使用Java字节码可以跨越平台的限制,在不同的平台上运行。
经过了一个学期对《Java程序设计》的学习,我们学习了理论知识,了解了Java语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。
经过这次课程设计使我对JAVA图形用户界面的有关知识有了更深入了解,如几种布局管理器的使用方法,事件的处理机制,SWING的基本体系结构,SWING组件的使用方法,多媒体的实现手段等知识。
完成了简单的万年历功能,本次课程设计的主要内容就是设计一个可以查询日期的程序,通过选择下拉列表中的年份以及月份来实现日期的查询,通过它可以查询到日期的一些具体信息,可以查询所选日期是星期几,还对星期六与星期日有特殊颜色的标记,方便查看。
此外,还可以实现显示数字时间的功能,简单实用。
通过课程设计,能够达到全面、深入理解和掌握所学内容,能够进行简单的分析和判断。
这次课程设计,虽说在设计过程中遇到了很多的困难,但是在老师的细心指导下,很多不会的问题都迎刃而解了。
此次课程设计一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
是对自己学习的一次很好的检验。
能完成这次的课程设计,和身边的同学和老师的帮助分不开的。
在此对指导老师表示感谢,还有帮助过我的一些同学,在此也表示谢意。
5.参考文献
[1]王锐.基于单片机的万年历设计[J].河北:
信息技术,2014,09:
213-216.
[2]饶敏,邱德慧,刘雅斌.基于NIOSⅡ的万年历设计[J].北京:
微计算机信息,2009:
45-100
[3]陈佳,高维松.基于桌面的多功能万年历设计与开发[J].河北:
软件刊,2013,02:
72-74.
[4]查荣.基于单片机的多功能万年历设计[J].北京:
机械制造与自化,2012,03:
137-139.
[5]吴其庆.Java程序设计实例教程[M].北京:
冶金工业出版社,2009:
120-230.
[6]陈佳,高维松.基于桌面的多功能万年历设计与开发[J].软件导刊,2013.02:
72-74.
[7]柳西玲,许斌.Java语言应用开发基础[M].北京:
清华大学出版社,2011.2:
100-200
[8]施霞萍.Java程序设计教程[M].北京:
机械工业出版社,2008.6:
111-121
[9]宛延闿.实用Java程序设计教程[M].北京:
机械工业出版社,2010.1:
67-100
附录
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.JComboBox;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
publicclassMainFrameextendsJFrame{
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();
intre_year,re_month;
intx_size,y_size;
Stringyear_num;
Calendarnow=Calendar.getInstance();//实例化Calendar
MainFrame(){
super("万年历");
setSize(300,350);
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(y_label);
panel1.add(com1);
panel1.add(m_label);
panel1.add(com2);
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);
panel2.setBackground(Color.white);
panel3.setBackground(Color.white);
Init();
com1.addActionListener(newClockAction());
com2.addActionListener(newClockAction());
setContentPane(panel);
setVisible(true);
setResizable(false);
}
classClockActionimplementsActionListener{
publicvoidactionPerformed(ActionEventarg0){
intc_year,c_month,c_week;
c_year=Integer.parseInt(com1.getSelectedItem().toString());//得到当前所选年份
c_month=Integer.parseInt(com2.getSelectedItem().toString())-1;//得到当前月份,并减1,计算机中的月为0-11
c_week=use(c_year,c_month);//调用函数use,得到星期几
Resetday(c_week,c_year,c_month);//调用函数Resetday
}
}
publicvoidInit(){
intyear,month_num,first_day_num;
Stringlog[]={"日","一","二","三","四","五","六"};
for(inti=0;i<7;i++){
label[i].setText(log[i]);
}
for(inti=0;i<49;i=i+7){
label[i].setForeground(Color.red);//将星期日的日期设置为红色
}
for(inti=6;i<49;i=i+7){
label[i].setForeground(Color.green);//将星期六的日期设置为绿色
}
for(inti=1;i<10000;i++){
com1.addItem(""+i);
}
for(inti=1;i<13;i++){
com2.addItem(""+i);
}
month_num=(int)(now.get(Calendar.MONTH));//得到当前时间的月份
year=(int)(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)(now.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);//now
Calendarcal=Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH,-1);//前个月
month_day_score=cal.getActualMaximum(Calendar.DAY_OF_MONTH);//最后一天
for(inti=7;i<49;i++){//初始化标签
label[i].setText("");
}
week_log=week_log+6;//将星期数加6,使显示正确
month_day_score=month_day_score+week_log;
for(inti=week_log;i label[i].setText(count+""); } } publicstaticvoidmain(String[]args){ JFrame.setDefaultLookAndFeelDecorated(true); newMainFrame(); } } Clock源文件中的代码如下: importjava.awt.BorderLayout; importjava.awt.Color; importjava.awt.GridLayout; importjava.awt.Toolkit; importjava.awt.event.ActionEvent; importjava.awt.event.Ac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 超级 万年历 课程设计
