欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    Java课程设计--年历显示.docx

    • 资源ID:900993       资源大小:53.27KB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java课程设计--年历显示.docx

    目录第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课程设计的题目是年历的显示并实现多个功能。1.1 课题的目的年历一直在中国的家庭中占有一席之地,传统的年历常为纸质的,不仅笨重,而且查看起来比较麻烦,随着时代的不断变迁,纸质年历早已被电子年历所代替,电子年历有多种功能,多功能日历不仅可以查看所需查看日期的全年日历和月历还具有计算日期与当前日期相差的天数,可以更加方便的为人们提供服务。1.2 课题的要求1.2.1 输入输出的要求(1)程序运行后会在页面显示一个菜单,用户可以通过输入各功能的相应数字选项进入相应功能。(2)用户通过键盘输入所需查询的日期。(3)用户每次输入数据后会显示相应的年历并在下面再次跳出菜单栏,方便用户的再次使用。(4)如果用户需要停止运行程序,也可通过菜单相应提示输入,即可结束程序的运行。如果用户输入有误,程序将自动提醒用户重新输入数据。(5)运行结果的输出应整齐、清晰,以便用户能够验证程序的正确性。1.2.2 程序实现的功能要求(1)输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。(2)输入年月,输出该月的日历。(3)输入年月日,输出距今天还有多少天,星期几,是否是公历节日;今天通过系统时间获取。第2章概要设计2.1整个程序的模块结构及流程根据课题要求,整个程序按功能可划分为显示年历、显示月历和显示两日期相差的天数三个功能。除上述主要功能模块之外,为更好地提供程序的人机交互能力,程序还提供了退出程序、显示错误输入等辅助模块。程序各功能模块的划分,及主要流程如图2T所示。显示年历,显示月历计算两个日期之间的天数。退出,图2-1功能流程图2. 2输入数据合法性的检测及初步处理在菜单选项中:若用户输入与菜单选项有误的选项,程序将提醒用户重新输入。在输入日其中:用户可以查询的年份从公元1年1月1日(格式为:yyyy-MMYd),若用户输入的格式有误,程序将抛出异常。2.3各个操作功能的描述2.3.1显示年历功能首先将输入扫描器中的String类型,再用Integer,parselntO方法将String类型转换成int类型并赋值给year在定义一个int类型fd,并用自己定义的方法firstDayO将year的值作为参数输入得到该年的第一天是星期几,最后用两个for循环嵌套来打印标题和天数。2.3.2显示月历先按格式要求用扫描器输入所要查找的日期,将其赋值给String类型的temp,用ParSe()方法将String类型的temp转换成Date类型,并赋值给date,再用GregorianCa1endar中的方法SetTime()来设置输入的日期为当前GregorianCalendar的默认日期,在用GregorianCalendar中的方法getActualMaximumO来获取该月的天数,最后打印标题用两个for循环嵌套打印输出月历。2.3.3计算两个日期之间的距离先按格式要求用扫描器输入所要查找的日期,将其赋值给String类型的dl,用time包中的方法LoCalDate.now()来获取当前的系统时间,再用方法DateTimeFormatter.OfPattern()将时间对象转换成字符串,定义d2来存方法当前的系统时间对象,最后将两个String类型的dl和d2都转换成Date类型来计算,用方法getTimeO来得到dl和d2的可以计算的值,由于得到的值都是以毫秒来计数的所以在计算的时候要除以(24*60*60*100O)才能得到天数,由于用户可能输入的是以前的日期,所以要使用ifelse语句,如果得到的值是负的,那么将负值变成正值再输出,最后输出两个日期间隔的天数。第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.显示月历);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("输入的选项有误,请重新输入!”);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;/得到各月份的天数publicstaticintmonthDay(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);publicstaticintfirstDay(inty)longn=y*365;for(inti=1;i<y;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(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<10)System,out.print(i+);elseSystem,out.print(i+);fd=(fd+1)%7;if(fd=0)System,out.println();System,out.println();3.2.2实现月历的显示显示月历模块的实现:先按格式要求用扫描器输入所要查找的日期,将其赋值给String类型的temp,用parse()方法将String类型的temp转换成Date类型,并赋值给date,再用GregorianCalendar中的方法SetTime()来设置输入的日期为当前GregorianCalendar的默认日期,在用GregorianCa1endar中的方法getctualMaximum()来获取该月的天数,最后打印标题用两个for循环嵌套打印输出月历。System.out.print(z,2>请输入需要查找的月份(格式:yyyy-MM):);Scannersc2=newScanner(Systen).in);Stringtemp=sc2.nextLine();DateFormatformat2=newSimpleDateFormat(,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;i<calendar,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.2.3实现计算两个日期之间的天数计算两个日期之间的天数模块的实现:先按格式要求用扫描器输入所要查找的日期,将其赋值给String类型的dl,用time包中的方法LocalDate.now()来获取当前的系统时间,再用方法DateTimeFormatter.OfPattern()将时间对象转换成字符串,定义d2来存方法当前的系统时间对象,最后将两个String类型的dl和d2都转换成Date类型来计算,用方法getTimeO来得到dl和d2的可以计算的值,由于得到的值都是以毫秒来计数的所以在计算的时候要除以(24*60*60*1000)才能得到天数,由于用户可能输入的是以前的日期,所以要使用ifelse语句,如果得到的值是负的,那么将负值变成正值再输出,最后输出两个日期间隔的天数。Scannersc3=newScanner(System,in);System.out.print3请输入需要查询的日期:);Stringdl=sc3.nextLine();LocalDateId=LocalDate.now();/将时间对象转换成字符串DateTimeFormatterfDateTimeFormatter.OfPattern(zzyyyy-MM-ddz,);Stringd2=Id.format(f);System,out.println();DateFormatformat3=newSimpleDateFormat(z,yyyy-MM-ddz,);Datedatel=null,date2=null;try(datel=format3.parse(dl);date2=format3.parse(d2);longdiff=datel.getTime()-date2.getTime();longdays=diff/(24*60*60*1000);if(days>=0)SyStCn.out.printin("距离今天还有"+days+天”);elsedays-days;SyStem.out.printin(己经过去+days+天”);System,out.println();Calendarcalendar=newGregorianCalendar();calendar.setTime(datel);intday=calendar,get(Calendar.DATE);calendar,set(Calendar.DATE,1);intmaxDate=calendar.getctualMaximum(Calendar.DATE);System,out.println(z,0t一t二t三t四t五t六");for(inti=1;i<calendar,get(Calendar.DAY_OF_WEEK);i+)System,out.print(,t,);)for(inti=1;i<=maxDate;i+÷)if(i=day)System,out.Print(*);System,out.print(i+t);intw=calendar,get(Calendar.DAY_OF_WEEK);if(w=Calendar.SATURDAY)System,out.print('n,);calendar,add(Calendar.DATE,1);System,out.println();catch(ParseExceptione)e.PrintStackTrace();第4章调试及发现问题的解决在本次课程设计中,我遇到了很多问题是仅凭我一己之力无法解决的,但是通过上网查阅相关资料,去图书馆借阅有关书籍,并与同学相互讨论后,最终一一解决了,程序实现及调试过程中遇到的主要问题及解决方法如下。1、如何实现程序的循环运行?解决方法:在main方法中用WhiIe循环构造一个死循环,在循环体中先显示菜单项列表,同时提示用户选择菜单项,然后用开关语句SWitCh根据用户的不同选择调用具体的相关的多功能日历,也可以选择菜单项“0”用break语句来结束整个程序。2、在功能1:显示年历中如何计算所求年份的第一天是星期几?解决方法:先定义一个方法来判断该年是否为闰年,再定义一个方法来计算该年的第一天是星期几,方法详细:先计算所求年份距离公元1年1月1日的天数,再用for循环:每碰到一次闰年便在总天数上加一,返回总天数对7取余的值。3、在功能1总如何计算每月的天数?解决方法:直接用SWitCh语句定义每个月份的天数,碰到2月调用判断是否为闰年的方法,若是则输出29天,若不是则输出28天。4、在功能3:计算距离今天的天数中,如何获取当前的系统时间?解决方法:通过上网查找,发现在Java8中新增了一个time包,其中有一个方法LOCaIDate.now()可以直接获取当前的系统时间。第5章程序测试及分析运行程序,首先显示程序的主菜单,列出的功能选项有:1、显示年历,2、显示月历,3、显示日期与今天相隔的天数和退出,如下图5-1所示。I,MarkersProperties郴Servers腌DataSourceExplorer曰S!lfe区B×¾YearCalendar2JavaC:Javajdkl.8.0,45binjavaw.exe(201洋7月4日下午12:01:46)多功能日历(谓选择以下功能):1 .显示年历2 .显示月历3 .显示距商今天的天数请选择一项功能(按"0"退出):图5-1多功能年历菜单如果选择选项L先提示输入所需查询的年份。如图5-2-1所示。PMarkersjProperties呆Servers渔DataSourceExplorer日控制台区卜ESnippetsYearCaIendar2JavaC:JavajdkL8.0_45binjavaw.exe(20157月4日下午12:01:46)多功能日历(请选择以下功能)"二一1 .显示年历2 .显示月历3 .显示距离今天的天数请选择一项功能(技“6"退出):1请谕入要查询的年份(格式:yyyy):2152015年B四五六12345678910111213141516171819202122232425262728293031如按照指定格式输入年份,则执行输出输入年份的年历功能,5-2-2所示。=11月=日四五六123456789101112131415161718192212223242526272829301n曰一日jrj一四五六6718293104115121314151617181922122232425262728293031多功能日历(请选择以下功能):1.显示年历2.显示月历3.显示距离今天的天数请选择一项功能(按退出):图5-2-2功能1:年历的显示选择菜单选项2,先提示输入所需查询的年份。如图5-3-1所示。RMarkersI(OProperties4ftServers½DataSourceExplorer日台区×CYearCalendar2JavaC:VaVajdkL8.0_45binjavaw.exe(2015年7月4日下午12:43:28)多功能日历(请选捺以下功能):1 .显示年历2 .显示月历3 .显示距离今天的天数请选搔一项功能(按"0"退出):22、请输入需要查找的月份(格式:yyyyMM):2015-7图5-3-1功能2:月历的显示如按照指定格式输入年份,则执行输出输入年份的年历功能,5-3-2所示。*.Markers口PropertiesHServersDataSourceExplorer日控制台区ILJSnippetsX×earCalendar2JavaC:Javajdkl.8.0_45binjavaw.exe(2015740下午12:43:28)2、请输入需要查找的月份(格式:yyyyMM):2015-7日-三四五六123456789101112131415|16171819202122232425262728293031图5-3-2功能2:月历的显示如果未按照指定格式输入日期,程序将会报错,如图5-3-3所示。圄MarkersProperties酰Servers翘DataSourceExplorer控制台区BX¾VearCalendar2JavaC:Javajdk1.8.0_45binjavaw.exe(201废7月4日下午12:49:45)多功能日历(请选择以下功能):1.显示年历2.显示月历3.显示距离今天的天数请选择一项功能(按"0"退出):22、请输入需要杳找的月份(格式:yyyyMM):23输入的日期有误!图5-3-3功能2:错误格式输入情况如果输入菜单选项3,程序会先提示输入所需查询的日期,如图5-4T所示。MarkersPropertiesServers理DataSourceExplorer曰区Snippets×%YearCalendar2JavaC:Javajdkl.8.045binjavaw.exe(201洋7月4日下午12:52:31)多功能日历(请选择以下功能):1 .显示年历2 .显示月历3 .显示距离今天的天数请选择一项功能(按"0"退出):33、请输入需要查询的日期:2015-7-4如按照指定格式输入日期,且输入的口期为未来的,则执行输出计算距离今天的天数功能,5-4-2所示。,Markers11Properties泉ServersDataSourceExplorerRS台笈ESnippetsYearCalendar2JavaC:JayajdkL8,0_45biniavaw.exe(2015年7月4日下午12:58:18)多功能日历(请选择讨商而:1 .显示年历2 .显示月历3 .显示距宫今天的天数请选择一项功能(技"6"退出):33、话输入需要查谓的日期:2015-7-12距离今天还有8天B一三四5六1234567891011*1213141516171819202122232425262728293031图5-4-2计算距离今天的天数输入的日期为以前的,则执行输出计算距离今天的天数功能,5-4-2所示。,MarkersCPropertieslServersS昼DataSourceExplorer曰控制台S31四Snippets,earCalendar2JavaC:Javajdkl.8Q_45binjavaw.exe(201弹7月4日下午1:00:34)多功能日历(请选择以下功能):1 .显示年历2 .显示月历3 .显示距离今天的天数请选择一项功能(按"0"退出):33、请输入需要查询的日期:2015-6-8已经过去26天日-四五六1234567*89101112131415161718192021222324252627282930图5-4-3计算距离今天的天数如果输入“0”,程序将结束运行。如图5-5所示。Markers1PropertiesvicServersDataSourceExplorerj*x!J?'LjSnippets×YearCalendar2JavaC:Javaidkl.8.0_45binjavaw.exe(201.泮7月4日下午1:03:21)多功能日历(请选捺以下功能):1 .显示年历2 .显示月历3 .显示距离今天的天数请选择一项功能(技"0"退出):感谢使用!图5-5结束程序如果输入的选项不在菜单选项之中,程序将提示错误,并提示重新输入。如图5-6所示。LMarkersPropertiesServers谑DataSourceExplorer曰?t*三笈lit_SnippetsYeUrcelendar2JovaGS®?C:Jevadkl.8.0_45b«njavaw.exe(201泮7月4日下午1:06:10)多功能日历(请选择以下功能):1 显示年历2 .显不月历3 .显示距商今天的天数请选择一项功能(按"0"退出):8输入的选项有误,谙重新输入!多功能日历(请选搔以下功能):I4 .显示年历5 .显示月历6 .显示距离今天的天数请选择一项功能(按"0"退出):图5-6输入错误菜单选项第6章总结转眼间,短短的一周课设就过去了,经过这一周的课设学习使我对于JaVa有了更深层次的理解,这次课程设计不仅是对这学期所学知识的一种综合检验,而且也是对自己实践能力的一种提升。我们都知道,知识要与实践结合在一起,才能发挥出最大的功效,课程设计就是这样一个重要的教学环节,通过课程设计使我们了解到一些实际与理论之间的差异。通过课程设计不仅可以巩固专业知识,为以后的工作打下了坚实的基础,而其还可以培养和熟练使用资料,运用工具书的能力,把我们所学的课本知识与实践结合起来,起到温故而知新的作用。当然,在本次设计中,我们不可能做到一蹴而就,也不可能会有一下子就可以取得成功的,这就要我们不断的总结失败的经验,做任何事情都是这个样子,失败了不可怕,在失败的过程中,我们可以收获更多的成功的原因,让我们对于问题有更多更好的理解。每当我遇到了问题,刚开始可能会有些迷茫,但在通过自己在网络、书本以及同学的帮助下,渐渐的我就能慢慢把所有错误修改出来,这让我发现原来做课设不仅能提高我们的实践能力,还学到了如何在逆境中走出来,我们学到的是一种学习能力。说实话,像课程设计这种对于我这种基础的知识薄弱的人来说确实是个不小的挑战!但是别人能做到的,我也能做到,只是过程会更加坎坷一些罢了!我现在做到了,终于战胜了自己对课程设计的恐惧,也收获了程序运行成功的喜悦,这也可能是为何我会渐渐迷上程序设计的原因吧,有付出,就有收获!通过这次实践,我对编程有了新的理解,编程并不是像大多数人说的那样充满单调,乏味。一件东西的乐趣在于你能去接触去理解。我接触了,我理解了。让所学的运用于生活中,做到灵活运用,学有所成的兴奋是难得的宝贵。总之,这次课程设计使我收获很多、学会很多、比以往更有耐心很多。感谢我的辅导老师,在设计过程中,老师精心的辅导和不厌其烦地的态度才使得我们以顺利的完成这次设计,谢谢老师!参考文献1软件开发技术联盟.JaVa自学视频教程M.北京:清华大学出版社,2014.龙马高新教育,魔乐科技(MLDN)软件实训中心,张玉宏.Java从入门到精通(第2版)ML北京:人民邮电出版社,2015.HerbertSchildt.Java8编程入门官方教程(第6版)M.北京:清华大学出版社,2015.

    注意事项

    本文(Java课程设计--年历显示.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开