万年历设计报告1/23JAVA万年历设计报告学习中心:西安翻译学院层次:专升本专业:计算机科学与技术姓名:乔文东学号:61481610310001万年历设计报告2/23JAVA万年历设计报告一课程实习目的:(1)为用户开发一个便捷的万年历;(2)对java技术的灵活应用;(3)掌握日期处理技术;(4)初步了解软件工程理论知识。二课程实习内容与要求:(1)内容通过本课程设计教学所要求达到的目的是:实现一个简洁的万年历,通过日期的处理,能按照用户的需求查看各年份的日期。(2)课程实习的基本要求(1)使用图形用户界面;(2)实现日期与星期的查询。三系统功能分析:1系统的主要功能:(1)可以查看当前的年份、月份和日期;(2)增加了时间栏,便于用户查看当前时间;(3)能够查找1至9999年的日期与星期的关系。2系统功能结构图(1)Clock类:实现了Runnable接口,运用线程,实现时钟的功能,包含了paint方法。Paint方法:从系统获取当前日期,以设置时钟的初始值。万年历设计报告3/23(2)MainFrame类:作为主类实现了JFrame接口,调用Clock类,包含了MainFrame方法,Init方法,use方法,Resetday方法。MainFrame方法:定义各个参数,应用AWT的绘图功能,构建总体框架;获取所要查找的年份和月份,通过调用use方法和Resetday方法,实现“查看”按钮的功能,并得到所需结果。Init方法:调用系统的年份和月份,以设置查看面板和日期面板的初始值。use方法:确定所要查询的年月的第一天的是星期几。Resetday方法:进一步处理所查询的年份月份,确定查询月份的天数;图1系统功能结构四系统运行1.运行界面如下:用户可根据需要在下拉式菜单中选择所要查询的年份和月份,然后点击“查看”按钮:Resetday方法万年历Clock类MainFrame类MainFrame方法Init方法use方法万年历设计报告4/23图2运行界面2.流程图:图3万年历设计报告5/23五课程设计体会本次课程设计为课本后设计题目任选一题进行设计。思考一段时间后,我决定做一个万年历的设计。因为通过设计这样的一个日历小组件,能使自己对JAVA的一些基础知识掌握的更加牢固。对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。经过长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调试很久的低级错误情况出现。通过这次课程设计,我明白了编写程序,不仅要求对课本知识有深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。所以网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。网络是我们学习的最好的老师之一。有问题,问网络,是一个很好的习惯。(附上源代码)importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.table.DefaultTableModel;importjava.io.*;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjava.util.GregorianCalendar;importjava.util.Locale;importjava.util.TimeZone;publicclassh_main1extendsJFrameimplementsActionListener,MouseListener{privateCalendarcld=Calendar.getInstance();//获取一个Calendar类的实例对象privateString[]astr={星期一,星期二,星期三,星期四,星期五,星期六,星期日};万年历设计报告6/23privateDefaultTableModeldtm=newDefaultTableModel(null,astr);privateJTabletable=newJTable(dtm);privateJScrollPanesp=newJScrollPane(table);privateJButtonbLastYear=newJButton(上一年);privateJButtonbNextYear=newJButton(下一年);privateJButtonbLastMonth=newJButton(上月);privateJButtonbNextMonth=newJButton(下月);privateJButtonbAddClock=newJButton(确定);privateJPanelp1=newJPanel();//装入控制日期的按钮模块privateJPanelp2=newJPanel(newGridLayout(3,2));privateJPanelp3=newJPanel(newBorderLayout());privateJPanelp4=newJPanel(newGridLayout(2,1));privateJPanelp5=newJPanel(newBorderLayout());privateJPanelp6=newJPanel(newGridLayout(2,2));privateJPanelp7=newJPanel(newGridLayout(2,1));privateJPanelp8=newJPanel(newBorderLayout());privateJComboBoxtimeBox=newJComboBox(TimeZone.getAvailableIDs());//对所有支持时区进行迭代,获取所有的id;privateJTextFieldjtfYear=newJTextField(5);//jtfYeaar年份显示输入框privateJTextFieldjtfMonth=newJTextField(2);//jtfMouth月份显示输入框privateJTextFieldtimeField=newJTextField();privateJTextFieldh1=newJTextField(5);privateJTextFieldm1=newJTextField(5);privatestaticJTextAreajta=newJTextArea(10,5);privateJScrollPanejsp=newJScrollPane(jta);privateJTextAreajta1=newJTextArea(5,4);privateJScrollPanejsp1=newJScrollPane(jta1);privateJLabell=newJLabel(你可以向年份输入框中输入年份,提高查询效率);privateJLabellt=newJLabel();privateJLabelld=newJLabel();privateJLabelts=newJLabel(请在右边下拉菜单选择你要选择的城市);privateJLabelclock=newJLabel(闹钟);万年历设计报告7/23privateJLabelnotice=newJLabel(备忘录);privateJLabelhour=newJLabel(小时);privateJLabelminute=newJLabel(分钟);privateJLabellu=newJLabel(农历和节气);privateJLabelnull1=newJLabel();privateintlastTime;privateStringlocalTime=null;privateStrings=null;privateSimpleDateFormatdateFormat=newSimpleDateFormat(yyyy年MM月dd日hh时mm分ss秒);publich_main1(){super(MyCalender);//框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数this.getContentPane().setLayout(newBorderLayout(5,5));jta.setLineWrap(true);//长度大于分配长度时候则换行table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的table.setColumnSelectionAllowed(true);//将table中的列设置为可选择的table.setSelectionBackground(Color.GRAY);//当选定某一天时背景颜色为黑色table.setSelectionForeground(Color.GREEN);table.setBackground(newColor(184,207,229));//日期显示表格为浅蓝色table.setFont(newFont(黑体,Font.BOLD,24));//日期数字字体格式table.setRowHeight(30);//表格的高度table.addMouseListener(this);//鼠标监听器jtfYear.addActionListener(this);//可输入年份的文本框//为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this);bAddClock.addActionListener(this);timeBox.addItemListener(newTimeSelectedChangedListener());//将按钮添加到Jpane上p1.add(bLastYear);p1.add(jtfYear);//年份输入文本框p1.add(bNextYear);万年历设计报告8/23p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p2.add(clock);p2.add(bAddClock);p2.add(hour);p2.add(h1);p2.add(minute);p2.add(m1);p3.add(jsp,BorderLayout.SOUTH);p3.add(lu,BorderLayout.CENTER);p3.add(ld,BorderLayout.NORTH);p4.add(l);p4.add(lt);p5.add(p4,BorderLayout.SOUTH);p5.add(sp,BorderLayout.CENTER);p5.add(p1,BorderLayout.NORTH);p6.add(ts);p6.add(timeBox);p6.add(null1);p6.add(timeField);p7.add(notice);p7.add(jsp1);p8.add(p2,BorderLayout.CENTER);p8