Java课程设计--大整数运算.docx
第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章课题概述本次课程设计的题目是年历显示。1.1课题的目的年历显示掌握java基本编程,熟悉常见的方法,结构。是在学习完课程后进行的一次全面的综合练习。本课程设计的目的和任务.巩固和加深学生对java语言课程的基本知识的理解和掌握.掌握java语言编程和程序调试的基本技能.利用java语言进行基本的软件设计,掌握书写程序设计说明文档的能力,提高运用java语言解决实际问题的能力.1. 2课题的要求年历显示要求做个简单的年历,输入不同格式的年月日会输出不同功能要求的结果,其功能大体有3个。1 .输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。2 .输入年月,输出该月的日历。3 .输入年月日,输出距今天还有多少天,星期几,是否是公历节日。通过显示年日历程序的设计,培养学生综合利用java语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力。通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固java语言程序设计课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力。第2章概要设计2.1整个程序的模块结构及流程依据课程设计的要求,需要设计一个菜单功能,进入程序后,有菜单可以提供选择,选择L进入年历显示阶段,年历显示完毕,再次进入菜单选择。选择2,进入月历显示阶段,月历显示完毕,再次进入菜单选择。选择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=,Janurayl'7'February2"z',March3","April4',z"May5",June6','July7",August8"z,September9,"October10"z"November!"/'December12;charweekname7(10=,Sun'7,Mon'7,Tue,7'Wed"z"Thu,7'Fri'7'Sat");可以实现输出每月的天数显示。本代码用的事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:return0;)但代码数量较多。2.2.2方法构思所选月份天数的算法:用SWitCh语句实现。一三五七八十二月份为31天,四六九十一月份为30天对于二月份进行闰年与非闰年的讨论。先算出输入年份的第一天即firstDay,再根据firstDay计算出该输出多少空格,输出空格后依次输出天数到把改月天数全部输完。这样输出第一月,再循环增加月份到12月。这样输入某一年后将依次输出该年的12月每个月的日历。当输入某一年某一月时将特定地输出改月的日历,只输出改月的天数对应的日历。当输入年月日时,调用方法LocaIDateId=LocaIDate.now();将时间对象转换成字符串,再将字符串转换成毫秒,又调用方法算出现在时间的毫秒。用方法longdiff=datel.getTime()-date2.getTime();longdays=diff/(24*60*60*1000);算出距离今天的天数。再有switch方法判断是否为公历节日,若是则输出该节日。输出月份第一天为星期几的算法:使总天数除以7取余得几既为星期几,若是0则为星期日。3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。第3章程序功能的实现3.1主函数的实现importjava.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;/得到各月份的天数publicstaticintmonthDay(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);)publicstaticintfirstDay(inty)(longn=y*365;for(inti=1;i<y;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输入一个年份,输出是在屏幕上显示该年的日历。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(year);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(i<10)System.out.print(i+"");elseSystem.out.print(i+"");)fd=(fd+1)%7;if(fd=0)System.out.println();)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(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;i<calendar.get(Calendar.DAY_OF_WEEK);i+)System.out.print('t,);)for(inti=1;i<=maxDate;i+)System.out.print(i+"t");intw=calendar.get(Calendar.DAY_OF_WEEK);if(w=CaIendanSzvrURDAY)System.out.print('n');)calendar.add(Calendar.DATEz1);)catch(ParseExceptione)e.printStackTrace();)Sy