




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1章課題概述本次課程設(shè)計的題目是年歷顯示。1.1課題的目的年歷顯示掌握java基本編程,熟悉常見的方法,結(jié)構(gòu)。是在學習完課程后進行的一次全面的綜合練習。本課程設(shè)計的目的和任務.鞏固和加深學生對java語言課程的基本知識的理解和掌握.掌握java語言編程和程序調(diào)試的基本技能.利用java語言進行基本的軟件設(shè)計,掌握書寫程序設(shè)計說明文檔的能力,提高運用java語言解決實際問題的能力.1.2課題的要求年歷顯示要求做個簡單的年歷,輸入不同格式的年月日會輸出不同功能要求的結(jié)果,其功能大體有3個。1.輸入一個年份,輸出是在屏幕上顯示該年的日歷。假定輸入的年份在1940-2040年之間。2.輸入年月,輸出該月的日歷。3.輸入年月日,輸出距今天還有多少天,星期幾,是否是公歷節(jié)日。通過顯示年日歷程序的設(shè)計,培養(yǎng)學生綜合利用java語言進行程序設(shè)計的能力,加強函數(shù)的運用及學生對軟件工程方法的初步認識,提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。通過本項課程設(shè)計,可以培養(yǎng)獨立思考、綜合運用所學有關(guān)相應知識的能力,能更好的鞏固java語言程序設(shè)計課程學習的內(nèi)容,掌握工程軟件設(shè)計的基本方法,強化上機動手編程能力。第2章概要設(shè)計2.1整個程序的模塊結(jié)構(gòu)及流程依據(jù)課程設(shè)計的要求,需要設(shè)計一個菜單功能,進入程序后,有菜單可以提供選擇,選擇1,進入年歷顯示階段,年歷顯示完畢,再次進入菜單選擇。選擇2,進入月歷顯示階段,月歷顯示完畢,再次進入菜單選擇。選擇3,進入日期查詢階段,日期查詢完畢,再次進入菜單。選擇0,退出程序。(圖2-1整個程序各功能模塊間的流程)2.2年歷顯示的結(jié)構(gòu)及方法2.2.1主體構(gòu)思先采用數(shù)組來實現(xiàn)年月的顯示,因為1月,3月,5月,7月,8月,10月,12月都是有31天,而4月,6月,9月,11月都是30天。二月比較特殊,如果是閏年就29天,平年就29天。用數(shù)組方法: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"};可以實現(xiàn)輸出每月的天數(shù)顯示。本代碼用的事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; } }但代碼數(shù)量較多。2.2.2方法構(gòu)思所選月份天數(shù)的算法:用switch語句實現(xiàn)。一三五七八十二月份為31天,四六九十一月份為30天對于二月份進行閏年與非閏年的討論。先算出輸入年份的第一天即firstDay,再根據(jù)firstDay計算出該輸出多少空格,輸出空格后依次輸出天數(shù)到把改月天數(shù)全部輸完。這樣輸出第一月,再循環(huán)增加月份到12月。這樣輸入某一年后將依次輸出該年的12月每個月的日歷。當輸入某一年某一月時將特定地輸出改月的日歷,只輸出改月的天數(shù)對應的日歷。當輸入年月日時,調(diào)用方法LocalDateld=LocalDate.now();將時間對象轉(zhuǎn)換成字符串,再將字符串轉(zhuǎn)換成毫秒,又調(diào)用方法算出現(xiàn)在時間的毫秒。用方法longdiff=date1.getTime()-date2.getTime();longdays=diff/(24*60*60*1000);算出距離今天的天數(shù)。再有switch方法判斷是否為公歷節(jié)日,若是則輸出該節(jié)日。輸出月份第一天為星期幾的算法:使總天數(shù)除以7取余得幾既為星期幾,若是0則為星期日。3.算出輸出月份第一天為星期幾的算法:算出輸出月份第一天為星期幾后,把該日期以前的位置用空格補上,并總該日起一次輸出天數(shù)直到月底,該月中的天數(shù)加上該月一日為星期幾的數(shù)字再除以7得0換行,即可完整的輸出該月的日歷。
第3章程序功能的實現(xiàn)3.1主函數(shù)的實現(xiàn)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; //得到各月份的天數(shù) 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年到它的天數(shù)和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.輸入年月日,輸出距今天還有多少天,星期幾,是否是公歷節(jié)日"); Scannerscanner=newScanner(System.in); choice=scanner.nextInt(); System.out.println();3.2主要功能模塊的實現(xiàn)3.2.1年份顯示的實現(xiàn)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月份顯示的實現(xiàn)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日期距今天天數(shù)的實現(xiàn)/case3: Scannersc3=newScanner(System.in); System.out.print("3、請輸入年月日(yyyy-mm-dd)"); Stringd1=sc3.nextLine(); LocalDateld=LocalDate.now(); //將時間對象轉(zhuǎn)換成字符串 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這天是國際兒童節(jié)\n"); } break; case5: if(d12==1){ System.out.println("\n這天是國際勞動節(jié)\n"); } if(d12==4){ System.out.println("\n這天是五四青年節(jié)\n"); } break; case8: if(d12==1){ System.out.println("\n這天是建軍節(jié)\n"); } break; case10: if(d12==1){ System.out.println("\n這天是國慶節(jié)\n"); } break; case3: if(d12==8){ System.out.println("\n這天是國際婦女節(jié)\n"); } break; case9: if(d12==10){ System.out.println("\n這天是教師節(jié)\n"); } break; case7: if(d12==1){ System.out.println("\n這天是建黨節(jié)\n"); } break; default: System.out.println("\n這天是不是公歷節(jié)日\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("已經(jīng)過去"+days+"天"); } }catch(ParseExceptione){ e.printStackTrace(); } break; case0: breakouter; default: System.out.println("輸入的選項有誤,請重新輸入!"); break; } 第4章調(diào)試及發(fā)現(xiàn)問題的解決4.1調(diào)試中發(fā)現(xiàn)的問題調(diào)試中發(fā)現(xiàn)若用方法,即分別寫三個方法,在主類可調(diào)用三個方法,三個方法分別是輸出年份,輸出月份,輸出日期。但后來改成了switch,開始是用數(shù)字,根據(jù)提示依次輸出年,再輸出月,再根據(jù)提示輸出日,后發(fā)現(xiàn)按照格式y(tǒng)yyy-mm-dd更適合輸入習慣,更方便使用。程序能和計算機的日期和時間保持同步,但還不能像網(wǎng)絡上提供的萬年歷一樣有節(jié)日提醒、農(nóng)歷查詢等功能。運行時出現(xiàn)異常。4.2問題的解決輸入格式改為yyyy-mm-dd格式形式,這樣將字符串輸入,再將字符串轉(zhuǎn)換成數(shù)字,在根據(jù)數(shù)字運算。用一個catch語句捕獲所有的異常。最常見的情形就是使用catch(Exceptionex)語句。但實際上,在絕大多數(shù)情況下,這種做法不值得提倡?;仡櫼幌耤atch語句的catch語句表示預期會出現(xiàn)某種異常,而且希望能夠處理該異常。異常類的作用就是告訴Java編譯器我們想要處理的是哪一種異常。將Java異??醋魇且活愊ⅲ鼈魉鸵恍┫到y(tǒng)問題、故障及未按規(guī)定執(zhí)行的動作的相關(guān)信息。異常包含信息,以將信息從應用程序的一部分發(fā)送到另一部分。通過多次該后程序正常運行。
第5章程序測試在電腦中打開eclipse應用程序,將程序代碼輸入,運行結(jié)果,觀察各個功能運行情況。5.1某年月份顯示測試輸入一個年份,輸出是在屏幕上顯示該年的日歷。(圖5-1-1-1菜單功能顯示)(圖5-1-1-2,顯示20
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 瑜伽館合作合同協(xié)議書
- 藥品保管協(xié)議書
- 資金上繳協(xié)議書
- 故意傷害案私下協(xié)議書
- 快遞代收點轉(zhuǎn)讓協(xié)議書
- 簽署扣稅協(xié)議書
- 線路預定協(xié)議書
- 簡約合伙協(xié)議書
- 調(diào)價建議協(xié)議書
- 工程車租賃合同協(xié)議書
- 期末易錯題型創(chuàng)新改編練習(專項練習)六年級下冊數(shù)學人教版
- 《橋梁工程概況介紹》課件
- 2025年四川成都道德與法制中考試卷(無)
- 2024年不動產(chǎn)登記代理人《地籍調(diào)查》考試題庫大全(含真題、典型題)
- 中醫(yī)基礎(chǔ)學題庫(附答案)
- 大學美育知到智慧樹章節(jié)測試課后答案2024年秋長春工業(yè)大學
- 2024年秋《MySQL數(shù)據(jù)庫應用》形考 實驗訓練1 在MySQL中創(chuàng)建數(shù)據(jù)庫和表答案
- 《數(shù)據(jù)資產(chǎn)會計》 課件 第五章 數(shù)據(jù)資產(chǎn)的價值評估
- 合同到期不續(xù)簽的模板
- 北京市2018年中考歷史真題試卷(含答案)
- (完整版)新概念英語第一冊單詞表(打印版)
評論
0/150
提交評論