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

java-万年历课程设计报告

西安科技大学程序设计综合实训课程设计报告题目:万年历班级:学号:姓名:年12 月2103目录1绪论 (1)1.1选题目的及意义 (1)1.2系统概述. (1)1.3人员组成及分工. (1)2需求分析 (1)3总体设计 (1)4详细设计 (1)5系统实现 (2)5.1 开发环境. (3)5.2 关键技术. (3)6.运行结果 (6)7.软件测试 (7)8.总结 (7)9 参考文献 (8)1.绪论1.1选题目的及意义选题目的:本次课程设计为课本后设计题目任选一题进行设计。

思考一段时间后,我们组决定做一个万年历的设计。

主要考虑到以前时间少课程内容多,JAVA 课程基础内容掌握并不是很抓实,而对于设计一个万年历程序,由于其功能简单设计也相对较易,对于我们组每个人的学习情况比较合适,并且通过设计这样的一个日历小组件,也能使自己对JAVA 的一些基础知识掌握的更加牢固。

1.2系统概述随着电子技术的不断发展,人们的不断创新,万年历已经不再局限于书本形式,而是以电脑软件或者电子产品的形式出现。

让其更加便捷。

在学习了JAVA 课程后,将以JAVA 形式编译出一个简易的万年历。

1.3人员组成及分工付磊:负责搜集查找资料王杜超:调试程序两人共同负责程序的编写与修改2.需求分析本程序的要求为:1. 使用图形用户界面;2.本程序能够实现日期与星期的查询。

3.可以添加或者删除日志3.总体设计(1)可以通过图形界面显示日历。

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

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

(4)可以添加或者删除并且点击对应日期显示日志。

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

然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

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

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

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

5.显示系统时间。

6.流程图开始获取当前系统时间年份等数据流程图5.系统实现5.1 开发环境myeclipse-8.5.0-win32 5.2 关键技术 1)界面的绘制与显示public class wannianli extends JFrame implements ActionListener, MouseListener{private Calendar cld = Calendar. getInstance ();private String []astr = { " 星期一 " , " 星期二 " , " 星期三" , " 星期四 " , " 星期 五" , " 星期六 " , " 星期日 " };private DefaultTableModeldtm = new DefaultTableModel( null , astr ); 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 JTextFieldjtfYear= new JTextField(5); //jtfYear年份显示和输 入文本框private JTextFieldjtfMonth= new JTextField(2); //jtfMonth月份显示文本框private JPanel p1 = new JPanel();// 装入控制日期按钮的模块private JPanel p2 = new JPanel();privateJPanelp3 = new JPanel( new BorderLayout()); private JPanel p4 = new JPanel(new GridLayout(2,1));private JPanelp5 = new JPanel(newBorderLayout()); private JButtonbAdd = new JButton( " 保存日志 " ); private JButtonbDel = new JButton(" 删除日志 " );背景颜色,字体的显示table .setGridColor(Color. GRAY);table .setColumnSelectionAllowed( table .setSelectionBackground(Color.景黑色table .setSelectionForeground(Color. GREEN); // 选定的日期字体是绿色的 table .setBackground( new Color(184,207,229)); // 日期显示表格颜色浅蓝// 星期之间的网格线是灰色的 true );BLACK); // 当选定某一天时这一天背table .setFont( new Font( " 黑体 BOLD,24)); // 日期数字字体格table .setRowHeight(30); // 表格的高度table .addMouseListener(this );// 鼠标监听器(2)根据月份判断每个月的天数以及判断是否为闰年判断 2 月的天数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%100 != 0 || year%400 == 0)// 闰年{return 29;}else{return 28;}3)日志的添加与删除if (e.getSource() == bDel ) {if (filedel.delete()){jta .setText(}else{jta .setText( " 日志删除失败 " );elseint r =table .getSelectedRow();int c =table .getSelectedColumn();File filedel =new File( ld .getText() +".txt"{if (filedel.exists())日志删除成功 " );jta .setText ( " 没有找到日志文件 " ); 4 )判断年份输入是否正确public { void actionPerformed(ActionEvent e) if (e.getSource() == e.getSource() == e.getSource()jtfYear || e.getSource() == bLastYear ||in t tr y i fbNextYear || == bLastMonth || e.getSource() m, y;控制输入的年份正确,异常控制 // jtfYea r throw.getText().length() != 4)new NumberFormatException();== bNextMonth )y = Integer. m = Integer.parseIn tparseIn t( jtfYear ( jtfMont h .getText());.getText());catch (NumberFormatException ex)JOptionPane." 年份有误 " , JOptionPane. return showMessageDialogERROR_MESSAGE);5)显示系统时间lass Timer {private private extends Thread // 显示系统时间 HH:mm:ss z" privat e HH mm ss z" privat e publi c {( this , " 请输入 4 位 0-9 的数字! " ,JLabel lt ; SimpleDateFormat ); SimpleDateFormat );boolean b = trueTimer(JLabellt)this . lt = lt;fy = new SimpleDateFormat( fn = new SimpleDateFormat( "yyyy.MM.dd"yyyy.MM.ddG 'at' G 'at'public void run()while ( true ){try{if ( b){lt .setText( fy .format(newDate()));}else{lt .setText( fn .format(newDate()));}b= ! b;this . sleep (500);}catch (InterruptedException ex){ex.printStackTrace();}}6.运行结果7.软件测试年份输入错误显示闰年2 月份演示以及日志保存8. 总结对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。

相关主题