Java课程设计设计题目:万年历系别:计算机科学与工程学院专业:信息管理与信息系统学号:1100340116姓名:岑少兵指导教师:汪华澄时间:2013-6-292目录摘要……………………………………………………………………………………3系统功能结构图………………………………………………………………………31系统模块设计………………………………………………………………………41.1需求设计………………………………………………………………………41.2开发和运行环境………………………………………………………………41.3功能设计………………………………………………………………………42万年历详细设计思路………………………………………………………………42.1程序设计思路…………………………………………………………………52.2程序运行主界面………………………………………………………………52.3流程图…………………………………………………………………………63各模块功能实现及代码说明………………………………………………………63.1MainFramel类…………………………………………………………………63.2Lunar类………………………………………………………………………143.3national类……………………………………………………………………223.4SetClock类……………………………………………………………………264小结………………………………………………………………………………345参考文献…………………………………………………………………………343基于Myeclipse的万年历摘要:万年历是日常生活中不可或缺的小工具,用万年历我们可以准确地查到当前,以后或是过去的日期,极大地方便了我们的生活。在万年历上添加了显示本地时间以后会更加准确地显示时间。无论是对于我们学生还是上班族或是自由职业者需要经常查看和查找万年历来规划自己将要做得一些事情,或是回忆在过去的时间里已经做过的事情,使之更加有利于提升我们的学习或是工作进度。系统功能结构图:主要描述系统要实现的各个模块的功能。万年历世界时间闹钟查询星期农历北京时间纽约时间设置闹钟时间到,闹铃响查询年月日对应的星期关闭将农历与公历一起实现东京时间41系统模块设计1.1需求分析本程序的要求为:1.使用图形用户界面2.能够实现日期与星期的查询3.能够显示农历4.能够查看世界时间5.能够添加闹钟1.2开发和运行环境开发工具:Myeclipse运行环境:windows71.3功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)通过MainFrame类,实现图形界面和公历日期。(2)提供年份、月份的下拉形式菜单来选择年份和月份。(3)通过Lunar类实现农历日期。(4)通过national类实现世界时间。(5)能以月历形式显示日期与星期。(6)通过SetClock类来实现闹钟功能。(7)通过点击世界时间按钮查询世界时间(8)通过点击闹钟按钮设置闹钟(9)显示系统当前时间和日期。(10)显示作者信息。2万年历详细设计思路2.1程序设计思路1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,5否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。2.输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。4.如果年份小于1900年则程序不予判断。2.2程序运行主界面62.3流程图3各模块功能实现及代码说明3.1MainFrame类importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ItemEvent;importjava.awt.event.ItemListener;7importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjavax.swing.JButton;importjavax.swing.JComboBox;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JPanel;importjavax.swing.Timer;importaa.Lunar;publicclassMainFrameextendsJFrameimplementsItemListener//建立主界面{JPanelpanel=newJPanel(newBorderLayout());//建立中层容器并布局JPanelpanel1=newJPanel();JPanelpanel2=newJPanel(newGridLayout(8,7));JPanelpanel3=newJPanel(newGridLayout(4,1));JLabel[]label=newJLabel[49];//标签JLabely_label=newJLabel(年);JLabelm_label=newJLabel(月);JLabeldashao=newJLabel(时间总是在不经意间溜走,我们还得向前走,JLabel.CENTER);JLabelbing=newJLabel(希望在回首时候,不带任何遗憾!,JLabel.CENTER);JLabelfeng=newJLabel(桂电大烧饼制作!,JLabel.CENTER);JLabellabelTime=newJLabel(,JLabel.CENTER);JComboBoxcom1=newJComboBox();//下拉窗口JComboBoxcom2=newJComboBox();JButtonbut1=newJButton(闹钟);//按钮JButtonbut2=newJButton(世界时间);Calendarnow=Calendar.getInstance();8publicMainFrame()//设置主界面,并添加各组件{super(大烧饼万年历);setSize(500,600);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);panel1.add(but1);panel1.add(y_label);panel1.add(com1);panel1.add(m_label);panel1.add(com2);panel1.add(but2);panel3.add(dashao);panel3.add(bing);panel3.add(feng);panel3.add(labelTime);for(inti=0;i49;i++)//日期标签{label[i]=newJLabel(,JLabel.CENTER);panel2.add(label[i]);}panel.add(panel1,BorderLayout.NORTH);//中层容器布局panel.add(panel2,BorderLayout.CENTER);panel.add(panel3,BorderLayout.SOUTH);setContentPane(panel);setVisible(true);init();com1.addItemListener(this);//对下拉组件监听9com2.addItemListener(this);but1.addActionListener(newActionListener(){//按钮动作监听publicvoidactionPerformed(ActionEvente){newaa.SetClock();//闹钟类}});but2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){newaa.national();//世界时间类}});Timertimer=newTimer(1000,newActionListener()//获得系统时间,并将其显示在主界面下方{publicvoidactionPerformed(ActionEventevt){Strings1=newSimpleDateFormat(yyyy-MM-ddHH:mm:ss).format(newDate());labelTime.setText(现在时间是:+s1);}});timer.start();//线程启动}publicvoidinit()//设置日期标签函数{intyear,month,first_day_num;Stringlog[]={星期日,星期一,星期二,星期三,星期四,星期五,星10期六};for(inti=0;i7;i++){label[i].setText(log[i]);}for(inti=0;i49;i=i+7){label[i].setForeground(Color.red);//将星期天设置为红色}for(inti=6;i49;i=i+7){label[i].setForeground(Color.red);//将星期六设置为红色}for(inti=1800;i=2100;i++)//将年份的下拉设置为1800-2100年{com1.addItem(+i);}for(inti=1;i13;i++)//讲月份下拉设置为12月{com2.addItem(+i);}first_day_num=(int)(now.get(Calendar.DAY_OF_WEEK));//获得日期month=(int)(now.get(Calendar.MONTH));//获得月份year=(int)(now.get(Calendar.YEAR));//获得年份com1.setSelectedIndex(year-1800);//将年份设置为当前年份com2.setSelectedIndex(month);//将月份设置为当前月Resetday(first_day_num,year,month);//调用Resetday函数}publicintuse(intyear2,intmonth2)//use函数11{intfirst_day;now.set(year2,month2,1);first_day=(int)(now.get(Calendar.DAY_OF_WEEK));returnfirst_day;}publicvoidstateChanged(){intyear3,month3,week3;year3=Integer.parseInt(com1.getSelectedItem().toString());month3=Integer.parseInt(com2.getSelectedItem().toString())-1;week3=use(year3,month3);Resetday(week3,year3,month3);//调用函数}publicvoidResetday(intweek_log,i