河北科技大学课程设计报告学生姓名:学号:专业班级:课程名称:Java程序设计课程设计学年学期:2014—2015学年第2学期指导教师:刘伟20年月课程设计成绩评定表学生姓名学号成绩专业班级起止时间设计题目指导教师评语学习态度:端正□较端正□一般□较差□学习纪律:好□较好□一般□较差□出勤情况:好□较好□一般□较差□程序设计:好□较好□一般□较差□动手能力:强□较强□一般□较差□团队精神:好□较好□一般□较差□创新意识:强□较强□一般□较差□课程设计完成情况:优秀□好□一般□较差□课程设计报告完成情况:优秀□好□一般□较差□指导教师:年月日目录1.课程设计目的..................................................................................................12.需求分析...........................................................................................................13.总体设计...........................................................................................................14.详细设计...........................................................................................................15.软件测试...........................................................................................................106.课程设计总结...................................................................................................114一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(3)学会自己调试程序的方法并掌握一定的技巧。二、需求分析本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查询。三、总体设计(1)可以通过图形界面显示日历。(2)能以月历形式显示日期与星期。(3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。四、详细设计1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。2.输出月份第一天为星期几的算法:使总天数除以7取余得几既为星期几,若是0,则为星期日。3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。4.查询年份必须为四位有效数字,否则不予显示。程序源代码:importjava.awt.BorderLayout;importjava.awt.Color;5importjava.awt.FlowLayout;importjava.awt.Font;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ItemEvent;importjava.sql.Date;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.awt.*;importjava.awt.event.*;importjava.text.*;importjava.time.Clock;importjava.util.*;importjavax.swing.*;importjavax.swing.table.*;importjavax.swing.*;importjavax.swing.table.DefaultTableModel;publicclasswannianliextendsJFrameimplementsActionListener{privateCalendarcal=Calendar.getInstance();privateString[]str={星期一,星期二,星期三,星期四,星期五,星期六,星期日};privateDefaultTableModeldtm=newDefaultTableModel(null,str);privateJTabletable=newJTable(dtm);//装日期的表格privateJScrollPanesp=newJScrollPane(table);privateJButtonbLastYear=newJButton(上一年);privateJButtonbNextYear=newJButton(下一年);6privateJButtonbLastMonth=newJButton(上月);privateJButtonbNextMonth=newJButton(下月);privateJTextFieldYear=newJTextField(4);//jtfYear年份显示和输入文本privateJLabeljla=newJLabel(年);privateJTextFieldmonth=newJTextField(4);privateJLabeljla1=newJLabel(月);privateJTextFieldjtfMonth=newJTextField(2);//jtfMonth月份显示文本框privateJComboBoxcomb;privateJPanelp1=newJPanel();//装入控制日期按钮的模块privateJPanelp2=newJPanel();privateJPanelp3=newJPanel(newGridLayout(2,1));privateJPanelp4=newJPanel();privateJPanelp5=newJPanel();privateJLabell=newJLabel(文本框中可直接键入要查找的年份,以提高查询效率);privateJLabellt=newJLabel();privateJLabelcom=newJLabel(请选择月份:);privateintlastTime;privatewannianli(){super(万年历);//框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的table.setColumnSelectionAllowed(true);table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色table.setSelectionForeground(Color.GREEN);//选定的日期字体是绿色的7table.setBackground(newColor(184,207,229));//日期显示表格颜色浅蓝色table.setFont(newFont(黑体,Font.BOLD,24));//日期数字字体格式table.setRowHeight(30);//表格的高度Year.addActionListener(this);//可输入年份的文本框//month.addActionListener(this);//可输入年份的文本框//为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this);//将按钮添加到String[]str={1,2,3,4,5,6,7,8,9,10,11,12};comb=newJComboBox(str);p1.add(bLastYear);p1.add(Year);//年份输入文本框p1.add(jla);p1.add(month);//年份输入文本框p1.add(jla1);p1.add(bNextYear);p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p1.add(com);p1.add(comb);p2.setLayout(newFlowLayout());p2.add(p4,BorderLayout.EAST);p2.add(sp,BorderLayout.CENTER);p2.add(p5,BorderLayout.WEST);8p3.add(l);p3.add(lt);this.add(p3,BorderLayout.SOUTH);this.add(p2,BorderLayout.CENTER);this.add(p1,BorderLayout.NORTH);String[]strDate=DateFormat.getDateInstance().format(newjava.util.Date()).split(-);cal.set(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1])-1,0);showCalendar(Integer.parseInt(strDate[0]),Integer.parseInt(strDate[1]),cal);jtfMonth.setEditable(false);//设置月份的文本框为不可编辑Year.setText(strDate[0]);month.setText(strDate[1]);comb.setToolTipText(strDate[1]);comb.addItemListener(newItemListener(){publicvoiditemStateChanged(ItemEvente){jtfMonth.setText((String)comb.getSelectedItem());month.setText((String)comb.getSelectedItem());intm,y;try//控制输入的年份正确,异常控制{if(Year.getText().length()!=4){thrownewNumberFormatException();}y=Integer.parseInt(Year.getText());m=Integer.parseInt(jtfMonth.getText());}9catch(NumberFormatExceptionex){//JOptionPane.showMessageDialog(this,请输入4位0-9的数字!,年份有误,JOptionPane.ERROR_MESSAGE);return;}for(inti=0;ilastTime+1;i++){dtm.removeRow(0);}cal.set(y,m-1,0);showCalendar(y,m,cal);}})