万年历课程设计实验报告.docx_第1页
万年历课程设计实验报告.docx_第2页
万年历课程设计实验报告.docx_第3页
万年历课程设计实验报告.docx_第4页
万年历课程设计实验报告.docx_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

黄淮学院JAVA 课程设计报告题目:万年历课程设计学院: 信 息 工 程 学 院 专业: 计算机科学与技术 班级: 计科1101班 指导老师: 二0一三年六月目 录前言21需求分析31.1需求分析31.2功能设计32.概要设计32.1程序设计思路33.流程图74.程序的主要类,和说明:7C19F20G20I20M21S21U21类分层结构22接口分层结构22前言Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。1需求分析1.1需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。1.2功能设计本程序要构建的万年历程序,其功能有以下几个方面:(1)实现图形界面,通过简单的单击按钮能实现查询日期操作。(2)能以月历形式显示日期与星期。(3)提供月份的下拉形式菜单来选择月份。 2.概要设计2.1程序设计思路(1)日期类的设计:设定日期 年 的方法public void changeYear(String year)cal.set(Calendar.YEAR,Integer.parseInt(year) ;updateCalendar();/每次修改年后,更新日期设定日期 月 的方法public void changeMonth(String month)cal.set(Calendar.MONTH,Integer.parseInt(month)-1) ;updateCalendar();/每次修改月后,更新日期日期类的更新日期方法获得当月最大的天是多少天。int maxDay=cal.getActualMaximum(Calendar.DAY_OF_MONTH);获得当月第一天是星期几?1,生成一个格里高利日期对象Calendar c = new GregorianCalendar() ;2,把要求年的年,月,第一天放进去c.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),1);3,获得当前月第一天是当前周的第几天?int begin = c.get(Calendar.DAY_OF_WEEK);(2)日期类面板的设计提供一个日期类的接口,为以后程序修改更新做基础。public interface UIinterface public void initView() ;public void showView() ;public void setCalendar(int maxDay,int currentDay,int begin);设计日期类面板,继承JFrame并实现UIinterface接口。添加按钮/下拉列表/标签等常用组件。实现窗口布局如下:程序运行界面(1)为按钮组件添加监听,以年为例说明。buttonPreYear.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)int resetYear=Integer.parseInt(boxYear.getSelectedItem().toString()-1;if(resetYear1)resetYear=9999;/年小于1单击按钮实现跳转。boxYear.setSelectedIndex(resetYear-1) ;action.changeYear(resetYear+) ; /调用changeYear方法更改年份,以实现更新年的目的) ;(2)刷新标签页,使之显示当前日期下的年份日期:public void setCalendar(int maxDay,int currentDay,int begin)String logs = new String日,一,二,三,四,五,六;for(int i=0;i7;i+)labelDaysi.setText(logsi) ;/初始化label的颜色for(int i=7;ilabelDays.length;i+)labelDaysi.setForeground(Color.black) ;labelDaysi.setText();/给周日改变颜色for(int i=0;ilabelDays.length;i+=7)labelDaysi.setForeground(Color.red) ;/给周六改变颜色for(int i=6;ilabelDays.length;i+=7)labelDaysi.setForeground(Color.green) ;/把日期添加到对应的label中for(int i=1;imaxDay;i+)String str = i=9?0+i:i+ ;labelDaysbegin+i-2+7.setText(str) ;if(currentDay = i)labelDaysbegin+i-2+7.setForeground(Color.blue) ;3.流程图修改年份修改月份更新日期结束程序改变年份上下改变月份上下年份下拉列表月份下拉列表日期类及其功能实现面板类及其功能实现万年历4.程序的主要类,和说明:1,日期类CalendarActionvoidchangeMonth(java.lang.Stringmonth)改变月份voidchangeYear(java.lang.Stringyear)改变年份java.util.CalendargetCal()UIinterfacegetUi()voidsetCal(java.util.Calendarcal)voidsetUi(UIinterfaceui)voidupdateCalendar()package com.calendar.action;import com.calendar.ui.*;import java.util.Calendar;import java.util.GregorianCalendar;/* * 处理整个万年历中的日历操作 * author Chen * */public class CalendarAction private Calendar cal ;private UIinterface ui ;public CalendarAction()cal=Calendar.getInstance();/获得程序启动时间ui = new FrameUi(this);updateCalendar();/* * 改变年份 * param year */public void changeYear(String year)cal.set(Calendar.YEAR,Integer.parseInt(year) ;updateCalendar();/* * 改变月份 * param month */public void changeMonth(String month)cal.set(Calendar.MONTH,Integer.parseInt(month)-1) ;updateCalendar();public void updateCalendar()/添加输出功能,更新界面/获得当前月最大的天int maxDay=cal.getActualMaximum(Calendar.DAY_OF_MONTH);/获得当前月第一天是当前周的第几天?Calendar c = new GregorianCalendar() ;c.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),1);int begin = c.get(Calendar.DAY_OF_WEEK);/*/获得当前天是当前月的第几天/?int currentDay = cal.get(Calendar.DAY_OF_MONTH);/ui.setCalendar(maxDay, currentDay, begin);public Calendar getCal() return cal;public void setCal(Calendar cal) this.cal = cal;public UIinterface getUi() return ui;public void setUi(UIinterface ui) this.ui = ui;2,接口UIinterface接口 UIinterface所有已知实现类:FrameUipublic interface UIinterface方法摘要voidinitView()voidsetCalendar(intmaxDay, intcurrentDay, intbegin)voidshowView()package com.calendar.ui;public interface UIinterface public void initView() ;public void showView() ;public void setCalendar(int maxDay,int currentDay,int begin);3,面板类:FrameUi构造方法摘要FrameUi(CalendarActionaction)方法摘要voidinitView()voidsetCalendar(intmaxDay, intcurrentDay, intbegin)voidshowView()package com.calendar.ui;import com.calendar.action.*;import javax.swing.* ;import java.awt.*;import java.awt.event.*;import java.util.Calendar;SuppressWarnings(serial)public class FrameUi extends JFrame implements UIinterface private int WIDTH = 500 ;private int HEIGHT = 400 ;private JPanel contentPane ;/主面板private JPanel northPane ; /放按钮面板的面板private JPanel centerPane ;/中间日期面板private JPanel buttonPane ;/按钮面板private JButton labelYear,labelMonth ;/用来显示文字,年份月份private JButton buttonPreYear,buttonNextYear ;/上一年,下一年按钮private JButton buttonPreMonth,buttonNextMonth ;/上一月,下一月private JComboBox boxYear,boxMonth;/年月下拉列表private JLabel labelDays;private CalendarAction action;/包含日历逻辑的action 对象引用public FrameUi(CalendarAction action)this.action = action ;initView() ;public void initView()/设置framethis.setTitle(日历) ;this.setSize(WIDTH,HEIGHT) ;/初始化主控件initContentPane();/封装初始化主控件操作this.setContentPane(contentPane) ;/设置窗体的位置Dimension d = Toolkit.getDefaultToolkit().getScreenSize() ;int screeWidth = d.width ;int screeHeight = d.height; this.setLocation(screeWidth-this.WIDTH)/2,(screeHeight-this.HEIGHT)/2);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(true); /改变窗体的大小/* * 初始化主控件 */private void initContentPane() contentPane = new JPanel(new BorderLayout() ;/创建具有指定布局的JPanelnorthPane = new JPanel(new BorderLayout();centerPane = new JPanel(new GridLayout(7,7);/设置面板为七行七列buttonPane = new JPanel();/flowLayout()/labelYear = new JButton(年份 : ) ;labelMonth = new JButton(月份 :) ;buttonPreYear = new JButton() ;/下一年buttonPreMonth = new JButton() ;/下一月boxYear = new JComboBox() ;initBoxYear() ;/封装了给下拉列表赋值的操作boxMonth = new JComboBox() ;initBoxMonth() ;/把按钮放到了按钮面板里northPanelbuttonPane.add(labelYear) ;buttonPane.add(buttonPreYear) ;buttonPane.add(boxYear);buttonPane.add(buttonNextYear);buttonPane.add(labelMonth);buttonPane.add(buttonPreMonth);buttonPane.add(boxMonth);buttonPane.add(buttonNextMonth);/把按钮面板放到了northPanenorthPane.add(buttonPane,BorderLayout.CENTER) ;/完成centerPanel/初始化放日期的labellabelDays = new JLabel49 ;for(int i=0;ilabelDays.length;i+)labelDaysi=new JLabel(,JLabel.CENTER) ;/label里面的文字居中centerPane.add(labelDaysi) ;/把northPanel和centerPane放到主面板里面contentPane.add(northPane,BorderLayout.NORTH) ;contentPane.add(centerPane,BorderLayout.CENTER) ;/给年份下拉列表添加事件给boxYear.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)String year = boxYear.getSelectedItem().toString();action.changeYear(year) ;) ;boxMonth.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)String month = boxMonth.getSelectedItem().toString();action.changeMonth(month) ;) ;buttonPreYear.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)int resetYear=Integer.parseInt(boxYear.getSelectedItem().toString()-1;if(resetYear=9999)resetYear=0;boxYear.setSelectedIndex(resetYear+1) ;/action.changeYear(resetYear+) ;) ;buttonPreMonth.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)/获得改变后的月int resetMonth=Integer.parseInt(boxMonth.getSelectedItem().toString()-1;if(resetMonth=11)resetMonth=-1;/按一下改变上一年的操作,就能同时完成改变年的下拉列表buttonNextYear.doClick() ;boxMonth.setSelectedIndex(resetMonth+1) ;/System.out.println(resetMonth);/action.changeMonth(resetMonth+) ;) ;/* * 封装给年份下拉列表赋值的操作 */private void initBoxYear() for(int i=1;i10000;i+)boxYear.addItem(i) ;/自动封装i/设置下拉列表的选中项是当前年int year = action.getCal().get(Calendar.YEAR) ;boxYear.setSelectedIndex(year-1) ;private void initBoxMonth() for(int i=1;i=12;i+)boxMonth.addItem(i) ;/自动封装iint month = action.getCal().get(Calendar.MONTH) ;/月份返回的是当前月减一boxMonth.setSelectedIndex(month) ;public void setCalendar(int maxDay,int currentDay,int begin)String logs = new String日,一,二,三,四,五,六;for(int i=0;i7;i+)labelDaysi.setText(logsi) ;/初始化label的颜色for(int i=7;ilabelDays.length;i+)labelDaysi.setForeground(Color.black) ;labelDaysi.setText();/给周日改变颜色for(int i=0;ilabelDays.length;i+=7)labelDaysi.setForeground(Color.red) ;/给周六改变颜色for(int i=6;ilabelDays.length;i+=7)labelDaysi.setForeground(Color.green) ;/把日期添加到对应的label中for(int i=1;imaxDay;i+)String str = i=9?0+i:i+ ;labelDaysbegin+i-2+7.setText(str) ;if(currentDay = i)labelDaysbegin+i-2+7.setForeground(Color.blue) ;public void showView()this.setVisible(true) ; /显示4,主测试类:测试程序运行。构造方法摘要CalendarTest()方法摘要staticvoidmain(java.lang.Stringargs)package com.calendar.test;import com.calendar.action.CalendarAction;public class CalendarTest public static void main(String args) CalendarAction action = new CalendarAction();action.getUi().showView();测试分析:下拉列表实现年与月的快速定位按钮实现年或月的快速翻页查找程序中各个类的索引:CCalendarAction-com.calendar.action中的 类处理整个万年历中的日历操作CalendarAction()- 类 com.calendar.action.CalendarAction的构造方法CalendarTest-com.calendar.test中的 类CalendarTest()- 类 com.calendar.test.CalendarTest的构造方法changeMonth(String)- 类 com.calendar.action.CalendarAction中的方法改变月份changeYear(String)- 类 com.calendar.action.CalendarAction中的方法改变年份com.calendar.action- 软件包 com.calendar.actioncom.calendar.test- 软件包 com.calendar.testcom.calendar.ui- 软件包 com.calendar.uiFFrameUi-com.calendar.ui中的 类FrameUi(CalendarAction)- 类 com.calendar.ui.FrameUi的构造方法GgetCal()- 类 com.calendar.action.CalendarAction中的方法getUi()- 类 com.calendar.action.CalendarAction中的方法IinitView()- 类 com.calendar.ui.FrameUi中的方法initView()- 接口 com.calendar.ui.UIinterface中的方法Mmain(String)- 类 com.calendar.test.CalendarTest中的静态方法SsetCal(Calendar)- 类 com.calendar.action.CalendarAction中的方法setCalendar(int, int, int)- 类 com.calendar.ui.FrameUi中的方法setCalendar(int, int, int)- 接口 com.calendar.ui.UIinterface中的方法setUi(UIinterface)- 类 com.calendar.action.CalendarAction中的方法showView()- 类 com.calendar.ui.FrameUi中的方法showView()- 接口 com.calendar.ui.UIinterface中的方法UUIinterface-com.calendar.ui中的 接口updateCalendar()- 类 com.calendar.action.CalendarAction中的方法所有软件包的分层结构软件包分层结构:com.calendar.action,com.calendar.test,com.calendar.ui类分层结构o java.lang.Objecto com.calendar.action.CalendarActiono com.calendar.test.CalendarTesto java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable)o java.awt.Containero java.awt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论