《Java面向对象》课程设计设计题目:万年历系别:计算机与信息科学系专业:计算机科学与技术学号:2010107208姓名:黄展权指导教师:张延旺时间:2012年11月目录摘要……………………………………………………………………………………1关键词…………………………………………………………………………………1Abstract…………………………………………………………………………1Keywords……………………………………………………………………………1引言…………………………………………………………………………………1Introduction…………………………………………………………………………2系统功能结构图………………………………………………………………………21系统模块设计………………………………………………………………………31.1需求设计………………………………………………………………………31.2开发和运行环境………………………………………………………………31.3功能设计………………………………………………………………………32万年历详细设计思路………………………………………………………………42.1程序设计思路…………………………………………………………………42.2程序运行主界面………………………………………………………………52.3流程图…………………………………………………………………………53各模块功能实现及代码说明………………………………………………………63.1初始化组件……………………………………………………………………63.2初始化数据……………………………………………………………………73.3程序清单………………………………………………………………………83.3.1外观界面………………………………………………………………83.3.2日期星期选择查询界面………………………………………………113.3.3显示星期和日期界面…………………………………………………133.3.4鼠标进入所选日期时显示具体信息的界面………………………………143.3.5显示操作系统当前时间的界面…………………………………………164小结………………………………………………………………………………175参考文献…………………………………………………………………………18基于Myeclipse的万年历计算机科学与技术专业黄展权指导教师张延旺摘要:万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。在万年历上添加了显示本地时间以后会更加准确地显示时间。无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。BasedontheMyeclipsecalendarComputerscienceandtechnologyprofessionalHuangZhanquantutorZhangYanwangAbstract:Calendarisindispensableindailylifewiththecalendargadget,wecanaccuratelyfindthecurrent,futureorpastthedate,greatconveniencetoourlife.Onthecalendartoadddisplaysthelocaltimewillbemoreaccuratelyshowthetime.Nomatterforourstudentsorofficeworkersorfreedomoccupationneedsoftenviewandfindmillionyearshastraditionallybeenplanningtheirwilltodosomething,oristhememoriesinthepasttimehavedone,makingitmoreconducivetoimproveourstudyorworkindegree.关键词:Java[Keywords]Java引言万年历运行程序得出的界面分为五块,第一块有外观,音乐,说明等功能,可以通过选择三种外观改变万年历的外观,还可以通过音乐下拉列表播放万年历自带的音乐,如果用户不会使用该万年历,还可以通过点击说明“按钮”帮助用户使此万年历,如果用户想退出万年历,可以通过点击退出按钮退出;第二块有日期和星期的查询,用户查询完日期之后可以通过今天按钮回到当前日期;第三块为星期和日期面板,用户可以很快查询到对应的日期和星期;第四块为显示当前日期和时间,用户可以更方便了解当前的所在的时间;第五块为显示作者信息和开发此万年历的时间。IntroductionCalendarprogramtheinterfaceisdividedintofivepieces,thefirstpieceofmusic,thathavetheappearance,function,canbeobtainedbyselectingthreekindsofappearancechangecalendarappearance,butalsothroughmusicplaybackcalendardrop-downlistwithmusic,iftheuserdoesnotusethecalendar,alsocanclickonthebuttontohelpusersthecalendar,iftheuserwantstowithdrawfromthecalendar,canclicktheexitbuttontoexit;secondwithadateandweekofinquiries,userqueriescanbefinishedafterthedateofthisbuttontoreturntothecurrentdate;thirdfortheweekanddate,theusercanquicklyquerytothecorrespondingdateandweek;fourthblocktodisplaythecurrentdateandtime,theusercanmoreeasilyunderstandthecurrentlocaltime;fifthpiecesfordisplayauthorinformationanddevelopmentofthecalendartime.系统功能结构图:主要描述系统要实现的各个模块的功能。万年历外观音乐查询星期今天C为默认的外观S为用户系统的外观播放暂停查询年月日对应的星期循环返回当前星期停止M为古典风格1系统模块设计1.1需求分析本程序的要求为:1.使用图形用户界面2.能够实现日期与星期的查询1.2开发和运行环境开发工具:Myeclipse运行环境:windows71.3功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过JFrame,实现图形界面。(2)通过外观三个按钮改变日历的外观。(3)通过点击“说明”按钮,显示日历使用信息。(4)能以月历形式显示日期与星期。(5)提供年份、月份的下拉形式菜单来选择年份和月份,可以通过今天按钮返回当前日期。(6)通过点击“查询星期”来查询日期对应的星期。(7)通过点击“音乐”播放万年历自带的音乐功能。(8)点击“退出”,可以提示用户是否要退出系统。(9)显示系统当前时间和日期。(10)显示作者信息。(11)鼠标进入当前日期的方块时,可以显示当前的日期,星期,星座,润平,年农历的大小,农历的天数,农历的干支,如下图所示:2万年历详细设计思路2.1程序设计思路1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。2.输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。4.如果年份小于1900年则程序不予判断。2.2程序运行主界面2.3流程图3各模块功能实现及代码说明3.1初始化组件importjava.applet.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.border.*;importjava.util.*;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjava.awt.Color;importjava.awt.Font;importjava.text.SimpleDateFormat;importjava.util.Date;importjavax.swing.JLabel;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JLabel;3.2初始化数据publicclassTestextendsJFrameimplementsActionListener{privateJLabeldatas[][]=newJLabel[6][7];//定义显示一个月的日期privateJLabellabel=null;privateJPanelpanel_Header,panel_Surface,panel_Week,panel_Calendar,panel_Time,panel_Declaration;privateJLabelTime=newJLabel();privateCalendarcalendar=null;privateJComboBoxyear_box=null;privateJComboBoxmonth_box=null;privateJComboBoxdate_box=null;privateJRadioButtoncross=null,system=null,motif=null;privateButtonGroupfeel_group=null;privateJMenuBarjmb=null;privateJMenujm=null;privateJMenuItemPlay,Suspend,Loop,Stop=null;privateinttoday;privateJButtonnowday,quit,Query,show_help=null;privateAudioClipsound;publicstaticvoidmain(String[]args){SwingConsole.run(newTest(),650,630);}publicTest(){//增加日历的各种面板setTitle(黄展权的万年历--实现日期与星期查询);setIconImage(this.getToolkit().createImage(title.g