《Java课程设计--大整数运算.docx》由会员分享,可在线阅读,更多相关《Java课程设计--大整数运算.docx(16页珍藏版)》请在课桌文档上搜索。
1、第1章课题概述11.1 课题的目的11.2 课题的要求错误!未定义书签。第2章概要设计22.1整个程序的模块结构及流程22.2年历显示的结构及方法22. 2.1主体构思33. 2.2方法构思4第3章程序功能的实现53.1 主函数的实现53.2 主要功能模块的实现63. 2.1年份显示的实现63. 2.2月份显示的实现74. 2.3日期距今天天数的实现7第4章调试及发现问题的解决H4.1 调试中发现的问题114.2 问题的解决1错误!未定义书签。第5章程序测试125.1某年月份显示测试125.2某一月份显示测试135.3某一日期显示测试13第6章总结14参考文献15第1章课题概述本次课程设计的题
2、目是年历显示。1.1课题的目的年历显示掌握java基本编程,熟悉常见的方法,结构。是在学习完课程后进行的一次全面的综合练习。本课程设计的目的和任务.巩固和加深学生对java语言课程的基本知识的理解和掌握.掌握java语言编程和程序调试的基本技能.利用java语言进行基本的软件设计,掌握书写程序设计说明文档的能力,提高运用java语言解决实际问题的能力.1. 2课题的要求年历显示要求做个简单的年历,输入不同格式的年月日会输出不同功能要求的结果,其功能大体有3个。1 .输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。2 .输入年月,输出该月的日历。3 .输入年
3、月日,输出距今天还有多少天,星期几,是否是公历节日。通过显示年日历程序的设计,培养学生综合利用java语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力。通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固java语言程序设计课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力。第2章概要设计2.1整个程序的模块结构及流程依据课程设计的要求,需要设计一个菜单功能,进入程序后,有菜单可以提供选择,选择L进入年历显示阶段,年历显示完毕,再次进入菜单选择。选择2,进入月历显示阶段,月历显示完
4、毕,再次进入菜单选择。选择3,进入日期查询阶段,日期查询完毕,再次进入菜单。选择0,退出程序。(图2-1整个程序各功能模块间的流程)2. 2年历显示的结构及方法2. 2.1主体构思先采用数组来实现年月的显示,因为1月,3月,5月,7月,8月,10月,12月都是有31天,而4月,6月,9月,11月都是30天。二月比较特殊,如果是闺年就29天,平年就29天。用数组方法:intmonthday12=31,28,31,30,31,30,31,31,30,31,30,31;charmonthname1220=,Janurayl7February2z,March3,April4,zMay5,June6,J
5、uly7,August8z,September9,October10zNovember!/December12;charweekname7(10=,Sun7,Mon7,Tue,7WedzThu,7Fri7Sat);可以实现输出每月的天数显示。本代码用的事SWitCh方法,这更容易理解。;switch(m)case1:case3:case5:case 7:case 8:case10:case12:return31;case4:case6:case9:case11:return30;case2:if(isLeapYear(year)return29;elsereturn28;)default:re
6、turn0;)但代码数量较多。2.2.2方法构思所选月份天数的算法:用SWitCh语句实现。一三五七八十二月份为31天,四六九十一月份为30天对于二月份进行闰年与非闰年的讨论。先算出输入年份的第一天即firstDay,再根据firstDay计算出该输出多少空格,输出空格后依次输出天数到把改月天数全部输完。这样输出第一月,再循环增加月份到12月。这样输入某一年后将依次输出该年的12月每个月的日历。当输入某一年某一月时将特定地输出改月的日历,只输出改月的天数对应的日历。当输入年月日时,调用方法LocaIDateId=LocaIDate.now();将时间对象转换成字符串,再将字符串转换成毫秒,又调
7、用方法算出现在时间的毫秒。用方法longdiff=datel.getTime()-date2.getTime();longdays=diff/(24*60*60*1000);算出距离今天的天数。再有switch方法判断是否为公历节日,若是则输出该节日。输出月份第一天为星期几的算法:使总天数除以7取余得几既为星期几,若是0则为星期日。3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。第3章程序功能的实现3.1主函数的实现importja
8、va.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.time.LocalDate;importjava.time,format.DateTimeFormatter;importjava.util.Calendar;importjava.util.Date;importjava.util.GregorianCalendar;importjava.util.Scanner;publicclassastaticintyear,monthday;/得到各月份的天数pu
9、blicstaticintmonthDay(intm)switch(m)case1:case3:case5:case7:case8:case10:case12:return31;case4:case6:case9:case11:return30;case2:if(iSLeapYear(year)return29;elsereturn28;)default:return0;)publicstaticbooleanisLeapYear(inty)/计算该年第一天是星期几(1年1月1日是星期一,计算y年到它的天数和7取余来算星期几return(y%4=O&y%100!=O)(y%400=O);)pu
10、blicstaticintfirstDay(inty)(longn=y*365;for(inti=1;iy;i+)/计算y年到公元一年的年份中有多少个闰年,然后加1if(isLeapYear(i)(n+;)return(int)n%7;)publicstaticvoidmain(Stringargs)(intchoice;outer:while(true)SyStCln.out.println(请选择功能:”);System, out. PrintIr(“ ”);System, out. PrintIn(System, out. Println( 是否是公历节口);L输入一个年份,输出是在屏幕
11、上显示该年的日历。2 .输入年月,输出该月的日历。);3 .输入年月日,输出距今天还有多少天,星期几,Scannerscanner=newScanner(System,in);choice=scanner,nextlnt();System,out.println();3.2主要功能模块的实现3.2.1年份显示的实现switch(choice)case1:Scannersc=newScanner(SystemJn);SyStem.out.print(请输入年(yyyy);Strings=sc.nextLine();year=Integenparselntfs);intfd=firstDay(ye
12、ar);System.out.println(n+year+年+n,+,);for(intm=1;m=12;m+)System.out.println(n+m+”月”+”0*”+”*)System.out.println(0一二三四五六);for(inti=1;i=fd;i+)System.out.print();)monthday=monthDay(m);for(inti=1;i=monthday;i+)if(i10)System.out.print(i+);elseSystem.out.print(i+);)fd=(fd+1)%7;if(fd=0)System.out.println();
13、)System.out.println();)break;3.2.2月份显示的实现case2:System.out.print(2s请输入年月(yyyy-mm);Scannersc2=newScanner(System.in);Stringtemp=sc2.nextLine();DateFormatformat2=newSimpleDateFormat(yyyy-MM);tr(Datedate=format2.parse(temp);Calendarcalendar=newGregorianCaIendarO;calendar.setTime(date);intday=calendar.get
14、(Calendar.DAE);calendar.set(Calendar.DATEz1);intmaxDate=calendar.getActualMaximum(Calendar.DAE);SyStem.out.println(temp+月);SyStemoutprjtln(,1*),System.out.println(Ht一t二tt四t五t六);for(inti=1;icalendar.get(Calendar.DAY_OF_WEEK);i+)System.out.print(t,);)for(inti=1;i=0)(SyStCm.out.println(距离今天还有+days+天”);
15、elsedays=-days;SyStCm.out.println(己经过去+days+天”);)catch(ParseExceptione)(e.PrintStackTrace();)break;case0:breakouter;default:System.OUt.printIn(输入的选项有误,请重新输入!”);break;第4章调试及发现问题的解决4.1调试中发现的问题调试中发现若用方法,即分别写三个方法,在主类可调用三个方法,三个方法分别是输出年份,输出月份,输出日期。但后来改成了SWiteh,开始是用数字,根据提示依次输出年,再输出月,再根据提示输出日,后发现按照格式yyyy-mm
16、-dd更适合输入习惯,更方便使用。程序能和计算机的日期和时间保持同步,但还不能像网络上提供的万年历一样有节日提醒、农历查询等功能。运行时出现异常。4.2问题的解决输入格式改为yyyy-mm-dd格式形式,这样将字符串输入,再将字符串转换成数字,在根据数字运算。用一个CatCh语句捕获所有的异常。最常见的情形就是使用CatCh(EXCePtiOneX)语句。但实际上,在绝大多数情况下,这种做法不值得提倡。回顾一下catch语句的catch语句表示预期会出现某种异常,而且希望能够处理该异常。异常类的作用就是告诉Java编译器我们想要处理的是哪一种异常。将Java异常看作是一类消息,它传送一些系统问
17、题、故障及未按规定执行的动作的相关信息。异常包含信息,以将信息从应用程序的一部分发送到另一部分。通过多次该后程序正常运行。第5章程序测试在电脑中打开eclipse应用程序,将程序代码输入,运行结果,观察各个功能运行情况。5.1某年月份显示测试输入一个年份,输出是在屏幕上显示该年的日历。日Console汉*JI鼬斓虎图IE里门a(IJjJavaApplicationDjavajdkl.8.0_45binjavaw.exe隋送择功能:1 .输入一个年份,输出是在屏幕上显示该年的日历。2 .输入年月,输出该月的日历。3 .输入年月日,输出距今天还有多少天,星期几,是否是公而节日(图5-ITT菜单功能
18、显示)7月B三四2ZL2六3BX四2五3六445G7aIOS6789e111112*914IS16171213IA1516171818192e2122232419202122232A25252627282930312627282930318月日三四三六B127丁四S五6六7234S71H89e111213IA9IG111211IAIS1516171819202116171820212222232425262728232A2522728293091,月9月日四五六日=四五六12345671214S89l11121324G7nO202122151617181922123IA1%1617IB1,22
19、2322人.293e31272N%30。月IO月日四五六B四五六123412356789e11ABG7n92012131415IG1718211213!XSIG17IO2222221NA2S111192021222326272829302BN272S29,。25月11月曰mhhCT五六12BMB四五六3-5G7891234SG7IO111221K1*IG9192112117181920212219IG17IS1920212A2526272829302229NS2C27283129396同,2月B12丁四4五S六GB12四五4六5/89e1112136789191112141516*718192
20、013151617181921222321(图57T-2,显示2015年年历查询结果)5.2.某一月份显示测试输入年月,输出该月的日历。日Console区*Jl宏砧画画d里a(1)JavaApplicationD:javajdkl.8.0_45binjavaw.exe请选择功能:1 .输入一个年份,输出是在屏幕上显示该年的日历。2 .输入年月,输出该月的日为。3 .输入年月日,输出距今天还有多少天,星期几,是否是公历节日2、,入年月(yyyy-M20i5-e72e15-e7月*鎏*骞*事日一二1四2五3六456789l11121314151617181920212223242526272829
21、331清迭择功能:1 .输入一个年份,输出是在屏幕上显示该年的日历。2 .输入年月,输出该月的日历。3 .*入年月日,输出距今天还有多少天,星期几,是否是公历节日(图5-1-2,2015年7月月历查询结果)5.3.某一日期显示测试输入年月日,输出距今天还有多少天,星期几,是否是公历节日;今天通过系统时间获取。日Console区二11aIgrgii可ca(1)JavaApplicationD:javajdkL8.0_45binjavaw.exe请送泽功能:71 .输入一个年份,输出是在屏幕上显示该年的日历。2 .输入年月,输出该月的日历。3 .输入年月日,输出距今天还有多少天,星期几,是否是公历
22、节日3、请输入年月日(yyyy-三n-dd)2ei5-e7-e这天是建党节已经过去来清选择功能:1 .喻人一个年份,输出是在屏幕上显示该年的日历。2 .*入年月,输出该月的日历。3 .帏入年月日,输出距今天还有多少天,星期几,是否是公历节日(图5-1-3, 2015年7月1日查询结果)第6章总结对于本程序的设计,首先考虑了其功能有哪些,需要显示什么,如何进行窗体构建布局,需要用哪些知识点,如相关的类和对象等。最后,就是根据初步设计的功能和布局构架,考虑用源代码进行实现了。经过了长时间的反复编写调试,课本和网上查阅相关资料相关文章,终于完成了整个课程设计。在这个过程中,在把书本上的知识给系统的复
23、习了一下的同时,同时也发现了自己的太多不足,对JAVA语言整体知识构架不够熟悉,不能灵活地运用所学的知识点。自己的编程方式也不太标准,经常出现代码写错而调试很久的低级错误情况出现。本次作业是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,因此,开始设计的时候先回顾以前所学的内容,明确本次作业设计所要用到的技术点并在网上搜索以及查阅相关的书籍来搜集资料。也非常感谢这次实验让我学到了不少知识。懂得了独立学习中非常重要的方法:自己分析问题,并根据需要查资料,分析资料,真正达到学以致用的目的。通过这次课程设计,我明白了编写程序,不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。还要熟悉常用的编程技巧和编程思想,不能只关心程序的运行结果,更要注重程序代码的结构,编程者更要有严谨地态度。还有通过设计过程中大量地查阅网络文章,对一些关键知识点逐个地了解并解决相关问题。网络这个强大的工具,确实是我们学习之中可以借助的一个很好的帮手。在老师和同学帮助下解决了不少问题,同时自己也在网上查找了很多资料,也找到了很多方法借鉴,总之这次课程设计收获很多。参考文献1李晋,李妙研,张悦JaVa程序设计-基于JDK6和NetBeanS实现M.北京:清华大学出版社,2011.部分资料来源于网络