您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > java-万年历课程设计报告
西安科技大学程序设计综合实训课程设计报告题目:万年历班级:学号:姓名:2103年12月目录1绪论......................................................................11.1选题目的及意义.........................................................11.2系统概述..............................................................11.3人员组成及分工.........................................................12需求分析...................................................................13总体设计...................................................................14详细设计...................................................................15系统实现...................................................................25.1开发环境..............................................................35.2关键技术..............................................................36.运行结果...................................................................67.软件测试...................................................................78.总结......................................................................79参考文献...................................................................81.绪论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-win325.2关键技术(1)界面的绘制与显示publicclasswannianliextendsJFrameimplementsActionListener,MouseListener{privateCalendarcld=Calendar.getInstance();privateString[]astr={星期一,星期二,星期三,星期四,星期五,星期六,星期日};privateDefaultTableModeldtm=newDefaultTableModel(null,astr);privateJTabletable=newJTable(dtm);//装日期的表格privateJScrollPanesp=newJScrollPane(table);privateJButtonbLastYear=newJButton(上一年);privateJButtonbNextYear=newJButton(下一年);privateJButtonbLastMonth=newJButton(上月);privateJButtonbNextMonth=newJButton(下月);privateJTextFieldjtfYear=newJTextField(5);//jtfYear年份显示和输入文本框privateJTextFieldjtfMonth=newJTextField(2);//jtfMonth月份显示文本框privateJPanelp1=newJPanel();//装入控制日期按钮的模块privateJPanelp2=newJPanel();privateJPanelp3=newJPanel(newBorderLayout());privateJPanelp4=newJPanel(newGridLayout(2,1));privateJPanelp5=newJPanel(newBorderLayout());privateJButtonbAdd=newJButton(保存日志);privateJButtonbDel=newJButton(删除日志);背景颜色,字体的显示table.setGridColor(Color.GRAY);//星期之间的网格线是灰色的table.setColumnSelectionAllowed(true);table.setSelectionBackground(Color.BLACK);//当选定某一天时这一天背景黑色table.setSelectionForeground(Color.GREEN);//选定的日期字体是绿色的table.setBackground(newColor(184,207,229));//日期显示表格颜色浅蓝色table.setFont(newFont(黑体,Font.BOLD,24));//日期数字字体格式table.setRowHeight(30);//表格的高度table.addMouseListener(this);//鼠标监听器(2)根据月份判断每个月的天数以及判断是否为闰年判断2月的天数publicintgetDaysOfMonth(intyear,intMonth)//显示所选月份的天数{if(Month==1||Month==3||Month==5||Month==7||Month==8||Month==10||Month==12){return31;}if(Month==4||Month==6||Month==9||Month==11){return30;}if(year%4==0&&year%100!=0||year%400==0)//闰年{return29;}else{return28;}(3)日志的添加与删除if(e.getSource()==bDel){intr=table.getSelectedRow();intc=table.getSelectedColumn();Filefiledel=newFile(ld.getText()+.txt);if(filedel.exists()){if(filedel.delete()){jta.setText(日志删除成功);}else{jta.setText(日志删除失败);}}else{jta.setText(没有找到日志文件);}}}(4)判断年份输入是否正确publicvoidactionPerformed(ActionEvente){if(e.getSource()==jtfYear||e.getSource()==bLastYear||e.getSource()==bNextYear||e.getSource()==bLastMonth||e.getSource()==bNextMonth){intm,y;try//控制输入的年份正确,异常控制{if(jtfYear.getText().length()!=4){thrownewNumberFormatException();}y=Integer.parseInt(jtfYear.getText());m=Integer.parseInt(jtfMonth.getText());}catch(NumberFormatExceptionex){JOptionPane.showMessageDialog(this,请输入4位0-9的数字!,年份有误,JOptionPane.ERROR_MESSAGE);return;}(5)显示系统时间lassTimerextendsThread//显示系统时间{privateJLabellt;privateSimpleDateFormatfy=newSimpleDateFormat(yyyy.MM.ddG'at'HH:mm:ssz);privateSimpleDateFormatfn=newSimpleDateFormat(yyyy.MM.ddG'at'HHmmssz);privatebooleanb=true;publicTimer(JLabellt){this.lt=lt;}publicvoidrun(){while(true){try{if(b){lt.setText(fy.format(newDate()));}else{lt.setText(fn.format(newDate()));}b=!b;this.sleep(500);}catch(InterruptedExceptionex){ex.printStackTrace();}}6.运行结果7.软件测试年份输入错误显示闰年2月份演示以及日志保存8.总结对于本程序的设计,首先考虑其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不是太标准,经常出现代码写错而调
本文标题:java-万年历课程设计报告
链接地址:https://www.777doc.com/doc-7098530 .html