当前位置:文档之家› Java课程设计-万年历

Java课程设计-万年历

河北科技大学课程设计报告号:学生姓名:学专业班级:程序设计课程设计Java课程名称:学期学年第 2 2 015 学年学期: 2 014 —指导教师:刘伟月年 2 0的?.................................................................. ................................1??2.需求分................................................................... .........析................................1?3.总体设计................................................................... ........................................1?4.详细设计................................................................... ........................................1?5.软件测试................................................................... . (10)6.课程设计总结................................................................... ................................11.一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。

?(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;?(3)学会自己调试程序的方法并掌握一定的技巧。

二、需求分析本程序的要求为:1.使用图形用户界面;?2.本程序能够实现日期与星期的查询。

?三、总体设计(1)可以通过图形界面显示日历。

?(2)能以月历形式显示日期与星期。

?(3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。

??四、详细设计1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。

,0若是取余得几既为星期几,7使总天数除以输出月份第一天为星期几的算法:2.则为星期日。

?3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

?4.查询年份必须为四位有效数字,否则不予显示。

程序源代码:importimportimportimportimportimport;importimportimport ;import;importimportimport java.awt.*;importimport java.text.*;import ;import java.util.*;import javax.swing.*;import .*;import javax.swing.*;importpublic class wannianli extends JFrame implementsActionListener{getInstance();cal Calendar = Calendar. private private String [] str = {星期一, 星期二, 星期三, 星期四, 星期五, 星期六, 星期日};private DefaultTableModel dtm = new DefaultTableModel(null,str);private JTable table = new JTable(dtm); //装日期的表格private JScrollPane sp = new JScrollPane(table);private JButton bLastYear = new JButton(上一年);private JButton bNextYear = new JButton(下一年);private JButton bLastMonth = new JButton(上月);private JButton bNextMonth = new JButton(下月);private JTextField Year = new JTextField(4);//jtfYear年份显示和输入文本);年 JLabel(jla= new private JLabelJTextField(4);= newprivate JTextField month);JLabel(new月private JLabel jla1 =月份显//jtfMonth newJTextField(2); = private JTextField jtfMonth示文本框;JComboBox comb private //new JPanel();装入控制日期按钮的模块p1private JPanel =JPanel();= new JPanel private p2 GridLayout(2,1));new JPanel( new = JPanel private p3 JPanel();new = p4 JPanel privateprivate JPanel p5 = new JPanel();private JLabel l = new JLabel(文本框中可直接键入要查找的年份,以提高查询效率);private JLabel lt = new JLabel();private JLabel com = new JLabel(请选择月份尺);private int lastTime;privatewannianli(){super(万年历); //框架命名EXIT_ON_CLOSE);//窗口关闭函数this.setDefaultCloseOperation(JFrame. GRAY);//星期之间的网格线是灰色的.setGridColor(Color.tabletable.setColumnSelectionAllowed(true);BLACK);//.setSelectionBackground(Color.当选定某一天时这一天背景黑table色GREEN);//选定的日期字体是绿色的table.setSelectionForeground(Color. table.setBackground(new Color(184,207,229));//日期显示表格颜色浅蓝色BOLD日期数字字体格式//,24));,Font.黑体 Font(new.setFont(table table.setRowHeight(30);//表格的高度Year.addActionListener(this);//可输入年份的文本框//month.addActionListener(this);//可输入年份的文本框 //为各个按钮添加监听函数bLastYear.addActionListener(this);bNextYear.addActionListener(this);bLastMonth.addActionListener(this);bNextMonth.addActionListener(this); //将按钮添加到String[] str={?,?,?,?,?,?,?,?,?,?尰,?就,?尲};comb = new JComboBox(str);p1.add(bLastYear);p1.add(Year);//年份输入文本框p1.add(jla);p1.add(month);//年份输入文本框p1.add(jla1););bNextYear.add(p1.p1.add(bLastMonth);p1.add(jtfMonth);p1.add(bNextMonth);p1.add(com);p1.add(comb);p2.setLayout(new FlowLayout());EAST); p4,BorderLayout.p2.add(CENTER); ,BorderLayout..add(p2sp WEST); ,BorderLayout.p2.add(p5p3.add(l);p3.add(lt);SOUTH); p3, BorderLayout.this.add(CENTER); , BorderLayout.this.add(p2NORTH);p1, BorderLayout..add(this getDateInstance().format(new String [] strDate = DateFormat.?);parseIntparseInt(strDate[1])-1,(strDate[0]), Integer..set(Integer.cal0);parseInt(strDate[0]), showCalendar(Integer.parseInt(strDate[1]), cal Integer.);jtfMonth.setEditable(false);//设置月份的文本框为不可编辑Year.setText(strDate[0]);month.setText(strDate[1]);comb.setToolTipText(strDate[1]);comb.addItemListener(new ItemListener() {public void itemStateChanged(ItemEvent e) {jtfMonth.setText((String) comb.getSelectedItem());month.setText((String) comb.getSelectedItem()) ;int m, y;try//控制输入的年份正确,异常控制{if (Year.getText().length() != 4)NumberFormatException();new throw {}parseInt(Year y = Integer..getText()); parseInt(jtfMonth.getText());m = Integer.}catch (NumberFormatException ex){???灏楴湯慐敮献潨?獥慳敧楄污杯琨楨?尠请输入4位的数字!0-9?尠年份有误, JOptionPane.ERROR_MESSAGE);;return }+1; i++)for (int i = 0; i < lastTime{.removeRow(0);dtm}.set(y, m-1, 0);cal);cal showCalendar(y, m,}});jtfMonth.setText(?);month.setText(?);this.setBounds(200,200,700,320);this.setResizable(false);this.setVisible(true);}public static void main(String[] args){new wannianli();}public void showCalendar(int localYear, int localMonth, Calendar cld) {int Days = getDaysOfMonth(localYear, localMonth) +DAY_OF_WEEK) - 2;cld.get(Calendar. Object[7];new Object [] ai =lastTime = 0;DAY_OF_WEEK)-1; i <= Days; i++)i = cld.get(Calendar. (int for {valueOf DAY_OF_WEEK)-2));(i-(cld.get(Calendar. ai[i%7] = String. if (i%7 == 6){dtm.addRow(ai);ai = new Object[7];lastTime++;}}dtm.addRow(ai);}public int getDaysOfMonth(int year, int Month) //显示所选月份的天数{if(Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8|| Month == 10 || Month == 12){return 31;}if(Month == 4 || Month == 6 || Month == 9 || Month == 11){return 30;}if(year%4 == 0 && year_x0010_0 != 0 || year@0 == 0)//闰年{return 29;}else{28;return}}public void actionPerformed(ActionEvent e){if(e.getSource() == Year || e.getSource() == bLastYear ||e.getSource() == bNextYear|| e.getSource() == bLastMonth|| e.getSource()==bNextMonth){int m, y;try//控制输入的年份正确,异常控制{if (Year.getText().length() != 4){ throw new NumberFormatException(); }parseInt(Year.getText()); y = Integer. parseInt(jtfMonth.getText());m = Integer. (NumberFormatException ex) catch }{showMessageDialog(this, 请输入 JOptionPane.4位0-9的ERROR_MESSAGE);, JOptionPane.年份有误数字!, return;}for (int i = 0; i < lastTime+1; i++){dtm.removeRow(0);}if(e.getSource() == bLastYear){valueOf(--y));Year.setText(String.}if(e.getSource() == bNextYear){valueOf(++y));.setText(String.Year}if(e.getSource() == bLastMonth){if(m == 1){valueOf(--y));.setText(String.Yearm = 12;valueOf(m));.setText(String. jtfMonth}else{valueOf(--m));.setText(String. jtfMonth}}if(e.getSource() == bNextMonth){if(m == 12){valueOf(++y));Year.setText(String.m = 1;valueOf(m));jtfMonth.setText(String.}else{valueOf(++m));.setText(String. jtfMonth}}cal.set(y, m-1, 0);showCalendar(y, m, cal);valueOf(m));.setText(String. month//comb.setToolTipText(String.valueOf(m));}}五、软件测试图1 界面图图2 界面图下拉选择2月份六、课程设计总结本次Java课程设计我们这组做的课题是万年历,刚开始拿到题目我们组员都不知如何下手,经过小组成员一起查找资料,并且开会讨论,我们确定了设计的设计目标以及具体实现方式,包括如何将Java的思想运用到实际系统的详细设计之中。

相关主题