毕业设计 基于Java GUI 的万年历系统的设计与实现可编辑.docx
- 文档编号:28241117
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:31
- 大小:204.12KB
毕业设计 基于Java GUI 的万年历系统的设计与实现可编辑.docx
《毕业设计 基于Java GUI 的万年历系统的设计与实现可编辑.docx》由会员分享,可在线阅读,更多相关《毕业设计 基于Java GUI 的万年历系统的设计与实现可编辑.docx(31页珍藏版)》请在冰豆网上搜索。
毕业设计基于JavaGUI的万年历系统的设计与实现可编辑
题目:
基于JavaGUI的万年历系统的设计与实现
开发平台:
eclipse
1需求分析
本系统所描述的万年历系统主要是基于JavaGUI来实现的。
其主要功能是致力于为用户提供方便快捷、准确的日历时间信息,以便用户能够迅速地查找出自己所需的相关日历信息。
本万年历系统主要的功能和任务是任意选择一段时间内的某个年份月份进行查询,对相关的日历信息进行公历和农历的换算显示,显示相应日期的节日信息等。
功能描述:
(1)日历查询实现:
主要通过主界面顶端的两个下拉列表框来选择相应待查询的年份和月份以实现具体的月份的日历查询。
(2)公历和农历的时间换算:
当把鼠标指针指向日历表里的某个具体日期数字上时,会自动显示相关的农历年份、月份、和生肖的相关信息。
(3)节日信息的显示:
当某个日期为某个特定的节日时,相应的日期数字所在表格会显示该节日信息,包括了阳历和农历节日。
(4)界面皮肤更改功能:
当要更改界面皮肤颜色时,只需要点击界面右上角的颜色按钮就可以更改相应的颜色,是界面外观效果得到改善。
2总体设计
依据需求分析的结果,万年历系统应设计成一个适合于用户查询需求的、易于操作的查询系统软件,下面从软件的整体结构设计、接口设计等方面阐述一下系统的总体设计。
2.1设计的总体思想与算法描述
依据查询需求分析,万年历系统主要可以分为以下几个功能模块:
用户查询主界面设计模块、用户输入查询日历模块、公历与农历日期信息转换模块、相应日期节日信息显示模块和查询主界面效果更换模块。
主要的算法有农历和公历的换算算法,公历日期号与星期的求解算法,相应节日信息的生成算法,界面换肤算法,实时日期显示算法等。
系统总功能模块如图2-1所示:
万年历查询系统
用户查询主界面设计模块
用户输入查询日历模块
农历与公历日期信息转换模块
相应日期节日信息显示模块
查询主界面效果更换模块
图2-1系统总功能模块图
2.2模块结构图
2.2.1用户查询主界面设计模块
该模块主要是将用户查询主界面按BorderLayout方式分成几个主要区域,再对每个区域的组件进行分区布局。
用户查询主界面设计模块
主界面北部模块设计
主界面中部模块设计
北中部模块设计
北南部模块设计
中北部模块设计
中南部模块设计
中中部模块设计
图2-2用户查询主界面模块图
用户输入查询日历模块
该模块主要是通过两个下拉列表框来让用户选择相应的要查询的年份和月份,另外还可以通过“今天”按钮迅速返回当天的日历信息。
用户输入查询日历模块
年份下拉列表框
月份下拉列表框
当天日期返回按钮
图2-3用户输入查询日历模块图
2.2.3农历与公历日期信息转换模块
该模块主要用于对用户选择的日历信息进行农历和阳历之间的转换,当用户把鼠标指针指向相应的日期时会自动出现显示相应农历信息的消息框。
公历日期信息显示模块
农历日期信息显示模块
鼠标指向日期
图2-4农历与公历日期信息转换示意图
2.2.4相应日期节日信息显示模块
该模块主要用于对某个特定的日期节日信息进行显示,当查询到某个日历表时,相应日历月份的节日信息会自动显示在日期数字表格内。
公历日期信显示模块息
公历与农历节日显示模块
图2-5相应节日信息显示模块示意图
2.2.5查询主界面效果更换模块
该模块主要用于更改查询界面的皮肤效果,主要有红、黄、蓝、绿四个主要界面效果。
主界面皮肤效果更换模块
红色按钮控件显示红色皮肤
蓝色按钮控件显
示蓝色皮肤
绿色按钮控件显示绿色皮肤
默认按钮空间恢复默认皮肤样式
黄色按钮控件显示黄色皮肤
图2-6查询主界面效果更换模块示意图
2.3各模块的功能与处理流程描述
用户查询主界面设计模块功能和处理流程
该模块主要按照javaGUI程序设计中的BorderLayout布局方式,首先将主界面分成东、西、南、北、中五个区域,其中忽略东部和西部两个区域的布局,将主界面分成了北部、中部和南部三个区域。
然后就这三个主要区域进行分别地布局管理。
北部区域又按照BorderLayout布局方式将其分为中部区域和南部区域。
其中的中部区域添加了三个标签,分别为label1(提示标签)、label2(“年”)和label3(“月”),还有两个下拉列表框comboBoxYear和comboBoxMonth分别用来给用户选择要查询的年份和月份。
其中的南部区域则按FlowLayout布局方式添加了五个按钮,分别为button1、button2、button3、button4和button5,分别通过添加相应的ActionEvent事件来实现对界面肤色的改变功能。
中部区域又按照BorderLayout布局方式将其分为北部区域、中部区域和南部区域。
其中的北部区域用FlowLayout布局方式添加了一个按钮button6和一个标签label4,按钮用来返回当天的日期信息,标签用来显示当天日期和系统具体时间信息。
中部区域按GridLayout布局方式添加了7*7个标签,分别用来显示相应的星期和每月当中具体的每天的号数和节日等信息,属于整个界面中最核心的部位。
南部区域按FlowLayout布局方式添加了一个标签label5用来显示相应的提示和版权信息。
2.3.2用户输入查询日历模块
该模块属于整个万年历系统中最为核心的模块。
用户通过两个下拉列表框来选择相应要查询的月份和年份,然后系统会自动把对应的年份中的月份所有信息显示在日历表格中。
通过日历表格显示的信息,用户可以清楚的知道一年中的每个月份、每一天的公历、农历的信息和相应的节日信息。
公历信息和所有的节日信息都自动地显示在了日历表格中,农历信息则只需要用户将鼠标停留在相应的公历日期号数上就会自动出现一个信息框来显示。
该模块当属整个系统中算法最为复杂的模块。
主要用到了公历日期求解算法、公历和农历转换算法、节日求解和添加算法,具体算法求解程序请参考3部分的各功能模块程序设计。
2.3.3公历和农历日期信息转换模块
该模块主要通过公历和农历转换算法来实现了用户可以通过公历日期信息来获取相应的农历日期和节日信息的功能。
具体算法求解程序参见3部分的程序代码。
2.3.4相应日期节日信息显示模块
该模块主要通过节日求解算法和将节日信息添加显示到日期数字表格中的功能代码来实现了显示公历和农历节日信息的功能。
具体算法求解程序参见3部分的程序代码。
查询主界面效果更换模块
该模块主要通过给五个按钮添加相应的事件响应代码程序来实现了给查询主界面更换肤色效果的功能。
具体的算法实现程序参见3部分的程序代码。
2.4界面设计
万年历初始化界面
图2-7万年历初始化界面
特定的日期查询界面
图2-8特定日期查询界面(如2021年1月3号)
特定的日期节日显示界面(如春节、元宵节)
图2-9特定的日期节日显示界面(如春节、元宵节等)
特定的农历和公历日期信息转换界面
图2-10特定的农历和公历日期信息转换界面
查询主界面换肤功能展示界面
图2-11查询主界面换肤功能展示界面一
图2-12查询主界面换肤功能展示界面二
图2-13查询主界面换肤功能展示界面二
3各功能模块程序设计
3.1查询主界面布局设计部分截取代码
panelCenter=newJPanel(newBorderLayout());
panelCenterNorth=newJPanel(newFlowLayout(FlowLayout.CENTER));
panelCenterNorth.setBorder(BorderFactory.createEtchedBorder());
finalJButtonbutton6=newJButton("今天");
button6.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==button6)
{
try{
updateMonthDays(y,m);
}catch(ParseExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
comboBoxMonth.setSelectedIndex(m-1);
comboBoxYear.setSelectedIndex(y-1901);
}
}
});
panelCenterNorth.add(button6);
label4=newJLabel("",JLabel.CENTER);
label4.setText("北京时间:
"+str);
label4.add(newClock(this));
panelCenterNorth.add(label4);
panelCenter.add(panelCenterNorth,BorderLayout.NORTH);
panelCenters=newJPanel(newGridLayout(7,7,3,3));
panelCenters.setBorder(BorderFactory.createEtchedBorder());
for(inti=0;i<7;i++)
{
label[i]=newJLabel(weekdays[i],JLabel.CENTER);
label[i].setFont(font2);
label[i].setForeground(Color.blue);
label[i].setBorder(BorderFactory.createEtchedBorder());
panelCenters.add(label[i]);
}
for(inti=7;i<49;i++)
{
label[i]=newJLabel("",JLabel.CENTER);
label[i].setFont(font1);
label[i].setForeground(Color.blue);
label[i].setBorder(BorderFactory.createEtchedBorder());
panelCenters.add(label[i]);
}
panelCenter.add(panelCenters,BorderLayout.CENTER);
panelCenterSouth=newJPanel();
panelCenterSouth.setBorder(BorderFactory.createEtchedBorder());
JLabellabel5=newJLabel("
将鼠标停留在日历表的日期数字上会有相应的农历信息显示。
08信管王涵
",JLabel.CENTER);label5.setFont(font4);
panelCenterSouth.add(label5);
panelCenter.add(panelCenterSouth,BorderLayout.SOUTH);
contentPane.add(panelCenter,BorderLayout.CENTER);
/*
//南部
panelSouth=newJPanel();
contentPane.add(panelSouth,BorderLayout.SOUTH);
//西部
panelWest=newJPanel();
contentPane.add(panelWest,BorderLayout.WEST);
//东部
panelEast=newJPanel();
contentPane.add(panelEast,BorderLayout.EAST);*/
this.updateMonthDays(y,m);//初始化月份显示为当前月份
comboBoxMonth.setSelectedIndex(m-1);//设置下拉列表显示为当前月
comboBoxYear.setSelectedIndex(y-1901);//设置下拉列表显示为当前年
3.2公历日期求解算法程序截取代码
publicintallDays(intyear,intmonth){
intdaysA=0,daysB=0,allDays;//daysA表示输入年份到1900年经过的天数;daysB表示当年一月一号到输入月份的天数(不包括当月)
for(intn=1900;n { if((n%4==0&&n%100! =0)||n%400==0) { daysA=daysA+366; }else { daysA=daysA+365; } }//输入年份到1900年经过的天数和计算结束 for(inty=1;y { switch(y) { case1: daysB=daysB+31; break; case3: daysB=daysB+31; break; case5: daysB=daysB+31; break; case7: daysB=daysB+31; break; case8: daysB=daysB+31; break; case10: daysB=daysB+31; break; case12: daysB=daysB+31; break; case4: daysB=daysB+30; break; case6: daysB=daysB+30; break; case9: daysB=daysB+30; break; case11: daysB=daysB+30; break; case2: if((year%4==0&&year%100! =0)||year%400==0) { daysB=daysB+29; }else{ daysB=daysB+28; } break; } }//当年1月1号到输入月份经过的天数(不包含当月)和计算结束 allDays=daysA+daysB;//输入年份和月份到1900年1月1号经过的天数(不包含当月)和计算 returnallDays; } publicvoidupdateMonthDays(intyear,intmonth)throwsParseException{ intallDays=this.allDays(year,month); inttheFirstDayOfMonth=1+allDays%7;//判断输入的当月的一号是星期几 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//判断输入的月份是不是大月 { for(inti=0;i { if(theFirstDayOfMonth! =7)//如果当月1号是星期天就不在前面标签里输出空 label[i+7].setText(null); else { theFirstDayOfMonth=0; break; } } for(intj=1;j<=31;j++) { if(Holiday.holiday(year,month,j).equals("0")) { label[j+6+theFirstDayOfMonth].setText(Integer.toString(j)); try{ label[j+6+theFirstDayOfMonth].setToolTipText(LunarString.lunarString(year+"年"+month+"月"+j+"日")); }catch(ParseExceptione){ e.printStackTrace(); } if((allDays+j)%7==0||(allDays+j)%7==6) label[j+6+theFirstDayOfMonth].setForeground(Color.red); if(year==y&&month==m&&j==d) { label[j+6+theFirstDayOfMonth].setForeground(Color.GREEN); label[j+6+theFirstDayOfMonth].setBackground(Color.GREEN); label[j+6+theFirstDayOfMonth].setFont(newFont("楷体-GB2312",Font.ITALIC+Font.BOLD,20)); } } else { label[j+6+theFirstDayOfMonth].setText(" label[j+6+theFirstDayOfMonth].setForeground(newColor(255,51,255)); label[j+6+theFirstDayOfMonth].setFont(font3); try{ label[j+6+theFirstDayOfMonth].setToolTipText(LunarString.lunarString(year+"年"+month+"月"+j+"日")); }catch(ParseExceptione){ e.printStackTrace(); } if(year==y&&month==m&&j==d) { label[j+6+theFirstDayOfMonth].setForeground(Color.GREEN); label[j+6+theFirstDayOfMonth].setBackground(Color.GREEN); label[j+6+theFirstDayOfMonth].setFont(newFont("楷体-GB2312",Font.ITALIC+Font.BOLD,12)); } } } } 3.3农历与公历转换算法程序截取代码 classLunar{ privateintyear; privateintmonth; privateintday; privatebooleanleap; finalstaticStringchineseNumber[]={"正","二","三","四","五","六","七","八","九","十","十一","腊"}; finalstaticStringchineseNumber1[]={"一","二","三","四","五","六","七","八","九","十","十一","十二"}; 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,0x0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 基于Java GUI 的万年历系统的设计与实现可编辑 基于 Java 万年历 系统 设计 实现 编辑