Java课程设计-大整数运算_第1页
Java课程设计-大整数运算_第2页
Java课程设计-大整数运算_第3页
Java课程设计-大整数运算_第4页
Java课程设计-大整数运算_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章课题概述本次课程设计的题目是年历显示。1.1课题的目的年历显示掌握java基本编程,熟悉常见的方法,结构。是在学习完课程后进行的一次全面的综合练习。本课程设计的目的和任务.巩固和加深学生对java语言课程的基本知识的理解和掌握.掌握java语言编程和程序调试的基本技能.利用java语言进行基本的软件设计,掌握书写程序设计说明文档的能力,提高运用java语言解决实际问题的能力.1.2课题的要求年历显示要求做个简单的年历,输入不同格式的年月日会输出不同功能要求的结果,其功能大体有3个。1.输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。2.输入年月,输出该月的日历。3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日。通过显示年日历程序的设计,培养学生综合利用java语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力。通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固java语言程序设计课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力。第2章概要设计2.1整个程序的模块结构及流程依据课程设计的要求,需要设计一个菜单功能,进入程序后,有菜单可以提供选择,选择1,进入年历显示阶段,年历显示完毕,再次进入菜单选择。选择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天。用数组方法:intmonthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};charmonthname[12][20]={"Januray1","February2","March3","April4","May5","June6","July7","August8","September9","October10","November11","December12"};charweekname[7][10]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};可以实现输出每月的天数显示。本代码用的事switch方法,这更容易理解。;switch(m){ case1: case3: case5: case7: case8: case10: case12: return31; case4: case6: case9: case11: return30; case2: if(isLeapYear(year)){ return29; }else{ return28; } default: return0; } }但代码数量较多。2.2.2方法构思所选月份天数的算法:用switch语句实现。一三五七八十二月份为31天,四六九十一月份为30天对于二月份进行闰年与非闰年的讨论。先算出输入年份的第一天即firstDay,再根据firstDay计算出该输出多少空格,输出空格后依次输出天数到把改月天数全部输完。这样输出第一月,再循环增加月份到12月。这样输入某一年后将依次输出该年的12月每个月的日历。当输入某一年某一月时将特定地输出改月的日历,只输出改月的天数对应的日历。当输入年月日时,调用方法LocalDateld=LocalDate.now();将时间对象转换成字符串,再将字符串转换成毫秒,又调用方法算出现在时间的毫秒。用方法longdiff=date1.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;publicclassa{ staticintyear,monthday; //得到各月份的天数 publicstaticintmonthDay(intm){ switch(m){ case1: case3: case5: case7: case8: case10: case12: return31; case4: case6: case9: case11: return30; case2: if(isLeapYear(year)){ return29; }else{ return28; } default: return0; } } 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年到公元一年的年份中有多少个闰年,然后加1 if(isLeapYear(i)){ n++; } } return(int)n%7; } publicstaticvoidmain(String[]args){ intchoice; outer:while(true){ System.out.println("请选择功能:"); System.out.println("1.输入一个年份,输出是在屏幕上显示该年的日历。"); System.out.println("2.输入年月,输出该月的日历。"); System.out.println("3.输入年月日,输出距今天还有多少天,星期几,是否是公历节日"); Scannerscanner=newScanner(System.in); choice=scanner.nextInt(); System.out.println();3.2主要功能模块的实现3.2.1年份显示的实现switch(choice){ case1: Scannersc=newScanner(System.in); System.out.print("请输入年(yyyy)"); Strings=sc.nextLine(); year=Integer.parseInt(s); intfd=firstDay(year); System.out.println("\n"+year+"年"+"\n" +""); for(intm=1;m<=12;m++){ System.out.println("\n"+m+"月"+"\n******************" +"******************"); System.out .println("日一二三四五六"); 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+""); }else{ System.out.print(i+""); } fd=(fd+1)%7; if(fd==0){ System.out.println(); } } System.out.println(); } break;3.2.2月份显示的实现case2: System.out.print("2、请输入年月(yyyy-mm)"); Scannersc2=newScanner(System.in); Stringtemp=sc2.nextLine(); DateFormatformat2=newSimpleDateFormat("yyyy-MM"); try{ Datedate=format2.parse(temp); Calendarcalendar=newGregorianCalendar(); calendar.setTime(date); intday=calendar.get(Calendar.DATE); calendar.set(Calendar.DATE,1); intmaxDate=calendar.getActualMaximum(Calendar.DATE); System.out.println(temp+"月"); System.out.println("****************************************************"); System.out.println("日\t一\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++){ 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); } }catch(ParseExceptione){ e.printStackTrace(); } System.out.println(); break;3.2.3日期距今天天数的实现/case3: Scannersc3=newScanner(System.in); System.out.print("3、请输入年月日(yyyy-mm-dd)"); Stringd1=sc3.nextLine(); LocalDateld=LocalDate.now(); //将时间对象转换成字符串 DateTimeFormatterf=DateTimeFormatter.ofPattern("yyyy-MM-dd"); Stringd2=ld.format(f); System.out.println(); DateFormatformat3=newSimpleDateFormat("yyyy-MM-dd"); Datedate1=null, date2=null; Scannersc31=newScanner(System.in); System.out.print("请输入月"); intd11=sc31.nextInt(); Scannersc32=newScanner(System.in); System.out.print("请输入日"); intd12=sc32.nextInt(); switch(d11){ case1: if(d12==1){ System.out.println("\n这天是元旦\n"); } break; case6: if(d12==1){ System.out.println("\n这天是国际儿童节\n"); } break; case5: if(d12==1){ System.out.println("\n这天是国际劳动节\n"); } if(d12==4){ System.out.println("\n这天是五四青年节\n"); } break; case8: if(d12==1){ System.out.println("\n这天是建军节\n"); } break; case10: if(d12==1){ System.out.println("\n这天是国庆节\n"); } break; case3: if(d12==8){ System.out.println("\n这天是国际妇女节\n"); } break; case9: if(d12==10){ System.out.println("\n这天是教师节\n"); } break; case7: if(d12==1){ System.out.println("\n这天是建党节\n"); } break; default: System.out.println("\n这天是不是公历节日\n"); break; } try{ date1=format3.parse(d1); date2=format3.parse(d2); longdiff=date1.getTime()-date2.getTime(); longdays=diff/(24*60*60*1000); if(days>=0){ System.out.println("距离今天还有"+days+"天"); }else{ days=-days; System.out.println("已经过去"+days+"天"); } }catch(ParseExceptione){ e.printStackTrace(); } break; case0: breakouter; default: System.out.println("输入的选项有误,请重新输入!"); break; } 第4章调试及发现问题的解决4.1调试中发现的问题调试中发现若用方法,即分别写三个方法,在主类可调用三个方法,三个方法分别是输出年份,输出月份,输出日期。但后来改成了switch,开始是用数字,根据提示依次输出年,再输出月,再根据提示输出日,后发现按照格式yyyy-mm-dd更适合输入习惯,更方便使用。程序能和计算机的日期和时间保持同步,但还不能像网络上提供的万年历一样有节日提醒、农历查询等功能。运行时出现异常。4.2问题的解决输入格式改为yyyy-mm-dd格式形式,这样将字符串输入,再将字符串转换成数字,在根据数字运算。用一个catch语句捕获所有的异常。最常见的情形就是使用catch(Exceptionex)语句。但实际上,在绝大多数情况下,这种做法不值得提倡。回顾一下catch语句的catch语句表示预期会出现某种异常,而且希望能够处理该异常。异常类的作用就是告诉Java编译器我们想要处理的是哪一种异常。将Java异常看作是一类消息,它传送一些系统问题、故障及未按规定执行的动作的相关信息。异常包含信息,以将信息从应用程序的一部分发送到另一部分。通过多次该后程序正常运行。

第5章程序测试在电脑中打开eclipse应用程序,将程序代码输入,运行结果,观察各个功能运行情况。5.1某年月份显示测试输入一个年份,输出是在屏幕上显示该年的日历。(图5-1-1-1菜单功能显示)(图5-1-1-2,显示20

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论