万年历课程设计说明书Word文件下载.docx
《万年历课程设计说明书Word文件下载.docx》由会员分享,可在线阅读,更多相关《万年历课程设计说明书Word文件下载.docx(36页珍藏版)》请在冰豆网上搜索。
关键词:
万年历;
图形界面;
java技术
序言
1996年Java第一次发布就引起了人们的极大兴趣。
关注Java的人士不仅限于计算机出版界,还有诸如《纽约时报》、《华盛顿邮报》、《商业周刊》这样的主流媒体。
Java时第一种也是唯一一种在NationalPublicRadio上占用了十分钟时间进行介绍的程序设计语言,并且还得到了$100000000的风险投资基金。
这些基金全部用来支持这种特别的计算机语言开发的产品。
Java语言在Internet舞台上以及亮相便名声大噪,其原因在于它将有望成为连接用户与信息的万能胶,而不论这些信息来源于Web服务器、数据库、信息提供商,还是任何其他渠道,Java固有的可靠性与安全性不仅令Java程序员放心,也令使用Java程序的用户放心。
而此次将用Java设计一个万年历表,我们更加了解Java面向对象的程序设计语言。
正文
一、系统分析与设计
1、系统的要求
(1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒);
(2)定义一个日期类Date,记录年、月、日,并提供日期增加的方法(按天);
(3)由类Time和日期类Date,派生出DateTime类,除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差;
(4)输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
2、系统的总体设计
系统的界面结构设计图如下:
图1万年历界面结构图
二、详细设计
2.1类Calendars
主类Calendars实现Runnable、ActionListener、ItemListener接口中的run()方法、actionPerformed()方法和itemStateChanged()方法。
创建构造方法calendar()完成构造窗体的功能。
创建主方法main()构造对象,实现线程机制调度,进入程序开始操作。
实现run方法(),完成线程机制,即动态显示时间。
创建内部类BgoAction和BstopAction实现按钮的功能。
2.2类Time
设置私有成员变量hour、minute、second都为整型。
设置成员方法如下:
publicvoidchangeBtoG(Timea,Timeb)此方法以将北京时间转变为格林威治时间
publicvoidgethour(Timet,Stringstr)、publicvoidgetminute(Timet,Stringstr)和publicvoidgetsecond(Timet,Stringstr)三个成员方法分别用以获得设置的北京时间时、分、秒。
publicvoidsetzero(Timetimer)此方法用于将时间全部归零。
publicvoidtimeadd(Timetimer)此方法用于时间的增加。
publicStringshowhour()、publicStringshowminute()publicStringshowsecond()此三个成员方法分别用于返回设置的时、分、秒。
publicStringshowtime(Timeobj)用字符串方式返回设置的时间。
2.3类CalTabel
此类用于构造日历并用表Table的形式显示。
设置了三个按钮JButtonlastMonthButton=newJButton("
<
"
);
JButtonnextMonthButton=newJButton("
>
JButtoncurrentButton=newJButton("
今"
并设置三个内部类LML、NML和CBL分别通过实现接口ActionListener中的actionPerformed()方法来完成三个按钮的功能。
构造方法CalTabel()用于创建显示日历的Tabel表。
三、系统测试
3.1万年历界面制作如下:
图2万年历操作界面
3.2在操作界面上按“》”按钮,显示下一月如下:
图3显示下一个月的日历
3.3在图3中点击按钮“《”显示上一月如下图:
图4显示上一月的日历
3.4在图4中设置时间的时、分、秒分别为10,20.30如下图所示:
图5设置北京时间
3.5在图5中点击按钮“确定”,北京时间和格林威治时间将自动运行,截图如下:
图6时间自动运行
3.6在图6中点击按钮“停止”,时间将停止在某一时刻如下图:
图7设置的时间停止运行
四、软件使用说明书
1在图2中所示,按钮“《”、“》”、“今”的功能分别为在日历表中显示上一月日历,在日历表中设置下一月日历,在日历表中显示本月日历。
2列表“时”、“分”、“秒”分别用来选择北京时间的时、分、秒的设置。
3按钮“确定”用来确定北京时间设置并运行北京时间和格林威治时间。
4按钮“停止”用来停止北京时间和格林威治时间的运行。
设计总结
万年历表的设计,是通过Java图形界面来实现的。
在设计过程中,我遇到了很多不曾知道的困难,如采用布局管理器布局后,将组件精确放置在指定地方,以及对组件的设计和实现组件在窗体中的功能。
对于遇到的这些困难,刚开始的时候我是一筹莫展的,也让我在设计过程中十分狼狈。
此后,我就又回到书本,把在设计中遇到的问题对照着书一一了解,一一分析,虽然仍然还有很多问题,但是设计总算在推进中,这一点让我很欣慰。
在自己重新学习的过程中,感觉自己对Java的了解真是九牛一毛。
所以我下定决心要虚心求教,在后来毫无头绪的设计中,我通过不断地询问,也非常幸运地获得了同学们的细心指导。
于是让我这对Java知之甚少的人完成了这次对万年历的设计。
在对万年历设计的过程中,通过那些对我产生困难的问题,让我重新明白了Java这门程序设计语言,也让我深深地体会到了程序设计的苦涩和甘甜。
参考文献
[1]曲朝阳,杨杰明等.Java程序设计.北京:
清华大学出版社,2008.10
[2]耿祥以,张跃平.Java大学生实用教程.北京:
电子工业出版社,2012.6
[3]明日科技.Java经典编程.北京:
清华大学出版社,2012.10
[4]李尊朝,苏军.Java语言程序设计.北京:
中国铁道出版社,2004.2
[5]王博.面向对象的建模、设计技术与方法.北京希望电脑公司,1990.
致谢
能比较顺利地完成这次课程设计,很大程度上得力于老师和同学们的帮助,在此向他们致以诚挚的谢意。
这次很多细节的地方能完成都得感谢老师的耐心指导,他们的严谨治学让我受益匪浅,也让对我以后的学习和工作的态度产生了积极地影响。
在程序设计中,同学们七嘴八舌,各抒己见,相互帮助,以使我们能够我们能在这枯燥的程序设计中自娱自乐,并且比较顺利地完成。
这不仅让我们在技术上更上一层楼,还让我们的感情更进一步了,在此感谢他们。
附录1(源代码)
packagecalender;
importjava.util.*;
importjava.awt.*;
importjava.awt.List;
importjava.awt.event.*;
importjava.text.SimpleDateFormat;
publicclassCalendarsimplementsRunnable,ActionListener,ItemListener{
Calendarcal1=newGregorianCalendar();
CalTabletabel=newCalTable(cal1);
Timetimer=newTime();
Timegtimer=newTime();
Framecalendar;
Panelpanel1,panel2,panel3,panel4;
Panelpanel21,panel22;
Labellabel1;
Labellabelhour,labelminute,labelsecond,labeltime,labelbeijing,labelGreenwich;
Labellabel,labelbeijingtime,labelGreenwichtime,labelnull,labelnull2;
LabellabelSouth;
Listlisthour,listminute,listsecond;
Buttonbuttonsure,buttonstop;
privatebooleanstate;
publicbooleangetstate(){returnstate;
}
publicCalendars(){
*创建、设置窗体*
calendar=newFrame("
Calendars"
calendar.setSize(500,365);
calendar.setLayout(newBorderLayout());
calendar.setResizable(false);
窗体大小不可改变
calendar.setVisible(true);
*创建、设置面板1*
panel1=newPanel();
panel1.setBackground(Color.lightGray);
label1=newLabel("
"
Label.RIGHT);
panel1.add(label1);
将面板1加入到窗体calendar
calendar.add(panel1,BorderLayout.NORTH);
*创建、设置面板2*
panel2=newPanel();
panel2.setLayout(newGridLayout());
panel2.setBackground(Color.lightGray);
创建按钮
Buttonbuttonsure=newButton("
确定"
buttonsure.addActionListener(newBgoAction());
Buttonbuttonstop=newButton("
停止"
buttonstop.addActionListener(newBstopAction());
labelnull=newLabel("
labelnull2=newLabel();
labelbeijingtime=newLabel("
labelGreenwichtime=newLabel("
00:
00"
创建标签
labelhour=newLabel("
时:
labelminute=newLabel("
分:
labelsecond=newLabel("
秒:
创建列表
listhour=newList(1,true);
for(inti=0;
i<
24;
i++){listhour.add(String.valueOf(i));
listminute=newList(1,true);
60;
i++){listminute.add(String.valueOf(i));
listsecond=newList(1,true);
i++){listsecond.add(String.valueOf(i));
列表不设置多项选择,只允许单项选择
listhour.setMultipleMode(false);
listminute.setMultipleMode(false);
listsecond.setMultipleMode(false);
设置列表大小
listhour.setSize(20,10);
给列表添加事件监听器
listhour.addActionListener(this);
listhour.addItemListener(this);
listminute.addActionListener(this);
listminute.addItemListener(this);
listsecond.addActionListener(this);
listsecond.addItemListener(this);
将标签和列表添加到面板
panel2.add(labeltime);
panel2.add(labelnull);
panel2.add(labelhour);
panel2.add(listhour);
panel2.add(labelminute);
panel2.add(listminute);
panel2.add(labelsecond);
panel2.add(listsecond);
panel2.add(buttonsure);
panel2.add(buttonstop);
panel2.add(labelbeijing);
panel2.add(labelbeijingtime);
panel2.add(labelGreenwich);
panel2.add(labelGreenwichtime);
将面板2加入到窗体calendar
calendar.add(panel2,BorderLayout.EAST);
*创建、设置面板3*
panel3=newPanel();
panel3.setLayout(newGridLayout(1,1));
panel3.add(tabel);
将面板3加入到窗体中
calendar.add(panel3,BorderLayout.CENTER);
*创建、设置面板4*
panel4=newPanel();
panel4.setLayout(newGridLayout(1,1));
panel4.setBackground(Color.lightGray);
labelSouth=newLabel("
thankyou!
panel4.add(labelSouth);
*将面板4加入窗体*
calendar.add(panel4,BorderLayout.SOUTH);
*关闭窗口*
calendar.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
}
publicstaticvoidmain(String[]args){
TODOAuto-generatedmethodstub
Calendarsmy=newCalendars();
Threadthread=newThread(my);
thread.start();
publicvoidrun(){
while(true){
SimpleDateFormatsdf=newSimpleDateFormat("
yyyy-MM-dde)
{}
}
publicvoidactionPerformed(ActionEvente){
publicvoiditemStateChanged(ItemEvente){
Listtemp;
StringsList[];
Stringmgr=newString("
if(e.getItemSelectable()instanceofList){
temp=(List)(e.getItemSelectable());
sList=temp.getSelectedItems();
for(inti=0;
sList.length;
i++)
mgr=mgr+sList[i]+"
;
if(e.getSource()==listhour)timer.gethour(timer,mgr);
if(e.getSource()==listminute)timer.getminute(timer,mgr);
if(e.getSource()==listsecond)timer.getsecond(timer,mgr);
privateclassBgoActionimplementsActionListener{
state=true;
}}
privateclassBstopActionimplementsActionListener{
state=false;
classTime{
privateintstr;
else
returns;
publicStringshowminute(){
Strings,str;
s=String.valueOf(minute);
if(minute<
10){
str="
0"
+s;
returnstr;
publicStringshowsecond(){
s=String.valueOf(second);
if(second<
publicStringshowtime(Timeobj){
Stringstr;
str=obj.showhour()+"
:
+obj.showminute()+"
+obj.showsecond();
importjavax.swing.*;
importjava.text.*;
importjavax.swing.table.DefaultTableCellRenderer;
importjavax.swing.table.DefaultTableModel;
importjavax.swing.table.TableCellRenderer;
importjava.awt.Font;
importjavax.swing.table.JTableHeader;
publicclassCalTableextendsJPanel{
privatestaticfinallongserialVersionUID=1L;
JButtonlastMonthButton=newJButton("
JButtonnextMonthButton=newJButton("
JButtoncurrentButton=newJButton("
JLabelcurrentMonthLabel=newJLabel();
JTabletable=newJTable();
Calendarcalendar;
inttoday;
intmonthDays;
intwhiteDay;
publicCalTable(Calendarcalendar){
this.calendar=calendar;
setOpaque(false);
lastMonthButton.setToolTipText("
上个月"
nextMonthButton.setToolTipText("
下个月"
currentButton.setToolTipText("
今天"
lastMonthButton.setBackground(Color.WHITE);
nextMonthButton.setBackground(Color.WHITE);
currentButton.setBackground(Color.WHITE);
updateTable(calendar);
setSelected();
lastMonthButton.addActionListener(newLML());
nextMonthButton.addActionListener(newNML());
currentButton.addActionListener(newCBL());
BoxbuttonPane=Box.createHorizontalBox();
buttonPane.add(lastMonthButton);
buttonPane.add(Box.createHorizontalGlue());
buttonPane.add(currentM