《Java课程设计--年历显示.docx》由会员分享,可在线阅读,更多相关《Java课程设计--年历显示.docx(19页珍藏版)》请在优知文库上搜索。
1、目录第1章课题简介11.1课题的目的11.2课题的要求11.2 .1输入输出的要求11.3 .2程序实现的功能要求1第2章概要设计22.1整个程序的模块结构及流程22.2输入数据合法性的检测及初步处理22.3各个操作功能的描述22. 3.1显示年历功能23. 3.2显示月历24. 3.3计算两个日期之间的距离3第3章程序功能的实现43.1 主函数的实现43.2 主要功能模块的实现53.2.1实现年历的显示53.2.2实现月历的显示83.2.3实现计算两个日期之间的天数9第4章调试及发现问题的解决12第5章程序测试及分析13第6章总结18参考文献19第1章课题简介本次Java课程设计的题目是年历
2、的显示并实现多个功能。1.1 课题的目的年历一直在中国的家庭中占有一席之地,传统的年历常为纸质的,不仅笨重,而且查看起来比较麻烦,随着时代的不断变迁,纸质年历早已被电子年历所代替,电子年历有多种功能,多功能日历不仅可以查看所需查看日期的全年日历和月历还具有计算日期与当前日期相差的天数,可以更加方便的为人们提供服务。1.2 课题的要求1.2.1 输入输出的要求(1)程序运行后会在页面显示一个菜单,用户可以通过输入各功能的相应数字选项进入相应功能。(2)用户通过键盘输入所需查询的日期。(3)用户每次输入数据后会显示相应的年历并在下面再次跳出菜单栏,方便用户的再次使用。(4)如果用户需要停止运行程序
3、,也可通过菜单相应提示输入,即可结束程序的运行。如果用户输入有误,程序将自动提醒用户重新输入数据。(5)运行结果的输出应整齐、清晰,以便用户能够验证程序的正确性。1.2.2 程序实现的功能要求(1)输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。(2)输入年月,输出该月的日历。(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日;今天通过系统时间获取。第2章概要设计2.1整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为显示年历、显示月历和显示两日期相差的天数三个功能。除上述主要功能模块之外,为更好地提供程序的人机交互能力,程序还提供了
4、退出程序、显示错误输入等辅助模块。程序各功能模块的划分,及主要流程如图2T所示。显示年历,显示月历计算两个日期之间的天数。退出,图2-1功能流程图2. 2输入数据合法性的检测及初步处理在菜单选项中:若用户输入与菜单选项有误的选项,程序将提醒用户重新输入。在输入日其中:用户可以查询的年份从公元1年1月1日(格式为:yyyy-MMYd),若用户输入的格式有误,程序将抛出异常。2.3各个操作功能的描述2.3.1显示年历功能首先将输入扫描器中的String类型,再用Integer,parselntO方法将String类型转换成int类型并赋值给year在定义一个int类型fd,并用自己定义的方法fir
5、stDayO将year的值作为参数输入得到该年的第一天是星期几,最后用两个for循环嵌套来打印标题和天数。2.3.2显示月历先按格式要求用扫描器输入所要查找的日期,将其赋值给String类型的temp,用ParSe()方法将String类型的temp转换成Date类型,并赋值给date,再用GregorianCa1endar中的方法SetTime()来设置输入的日期为当前GregorianCalendar的默认日期,在用GregorianCalendar中的方法getActualMaximumO来获取该月的天数,最后打印标题用两个for循环嵌套打印输出月历。2.3.3计算两个日期之间的距离先按
6、格式要求用扫描器输入所要查找的日期,将其赋值给String类型的dl,用time包中的方法LoCalDate.now()来获取当前的系统时间,再用方法DateTimeFormatter.OfPattern()将时间对象转换成字符串,定义d2来存方法当前的系统时间对象,最后将两个String类型的dl和d2都转换成Date类型来计算,用方法getTimeO来得到dl和d2的可以计算的值,由于得到的值都是以毫秒来计数的所以在计算的时候要除以(24*60*60*100O)才能得到天数,由于用户可能输入的是以前的日期,所以要使用ifelse语句,如果得到的值是负的,那么将负值变成正值再输出,最后输出两
7、个日期间隔的天数。第3章程序功能的实现3.1 主函数的实现先定义一个整数ChOiCe,然后进入程序的主循环。在主循环中,先打印菜单,再用scanner扫描器将输入的值赋值给choice,然后根据用户选择的菜单项,调用相应的功能模块,功能模块调用过程中或调用结束后,循环实现菜单项,直到用户输入“0”结束循环。publicstaticvoidmain(Stringargs)intchoice;outer:while(true)SyStem.out.println(多功能日历(请选择以下功能):);System.out.PrintIr(1.显示年历“);System.out.printin(z,2.
8、显示月历);System.out.PrintIr1(3.显示距离今天的天数”);SyStem.out.print(请选择一项功能(按“0”退出):“);Scannerscanner=newScanner(System,in);choice=scanner,nextlnt();System,out.println();switch(choice)case 1:functionl();break;case 2:function2();break;case 3:function3();break;case0:breakouter;default:System.OUt.printIn(输入的选项有误,
9、请重新输入!”);break;System,out.println();System.OUt.printIn(感谢使用!);)3.2主要功能模块的实现3.2.1实现年历的显示显示年历功能模块的实现:首先将输入扫描器中的String类型,再用Integer.parselnt()方法将String类型转换成Int类型并赋值给year在定义一个int类型fd,并用自己定义的方法firstDay()将year的值作为参数输入得到该年的第一天是星期几,最后用两个for循环嵌套来打印标题和天数。publicclassYearCalendarstaticintyear,monthday;/得到各月份的天数p
10、ublicstaticintmonthDay(intm)switch(m)case1:case3:case5:case7:case8:case10:case12:return31;case4:case6:case9:case11:return30;case2:if(isLeapYear(year)return29;elsereturn28;default:returnO;publicstaticbooleanisLeapYear(inty)/计算该年第一天是星期几(1年1月1日是星期一,计算y年到它的天数和7取余来算星期几return(y%4-0&y%100!=0)(y%400=二0);pub
11、licstaticintfirstDay(inty)longn=y*365;for(inti=1;iy;i+)/计算y年到公元一年的年份中有多少个闰年,然后加1if(isLeapYear(i)n+;return(int)n%7;publicstaticvoidfunctionl()Scannersc=newScanner(Systen).in);SyStCn.out.print(请输入要查询的年份(格式:yyyy):,);Strings=sc.nextLine();year=Integer,parselnt(s);intfd=firstDay(year);System,out.println(
12、z,11,z+year+年+);for(intm=1;m=12;m+)System,out.println(z,11z,=+m+月+=);System,out.Printlri(日一二三四五六);for(inti=1;i=fd;i+)System,out.print();)monthday=monthDay(m);for(inti=1;i=monthday;i+)if(i请输入需要查找的月份(格式:yyyy-MM):);Scannersc2=newScanner(Systen).in);Stringtemp=sc2.nextLine();DateFormatformat2=newSimpleD
13、ateFormat(,yyyy-MM,z);tryDatedate=format2.parse(temp);Calendarcalendar=newGregorianCalendar();calendar.setTime(date);intmaxDate=calendar.getActualMaximum(Calendar.DATE);System.out.PrintIn(日t一t二tt四t五t六”);for(inti=1;icalendar,get(Calendar.DAYOFWEEK);i+)(System,out.print(,t,);for(inti=1;i=maxDate;i+)System,out.print(i+t);intw=calendar,get(Calendar.DAYOFWEEK);if(w=Calendar.SATURDAY)System,out.print(,n,);calendar,add(Calendar.DATE,1);catch(ParseExceptione)System.out.Println(输入的日期有误!);e.PrintStackTrace();System,out.println();3.