2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  萬年歷設計</b></p><p><b>  摘要</b></p><p>  Java語言自1995年面世以來,以其與平臺無關性、安全性、面向對象等特性被越來越多的人使用,是目前應用非常廣泛的一門面向對象的程序設計語言,本次課程設計的萬年歷是一個強大的日歷系統(tǒng),通過它可以實現(xiàn)對過去,現(xiàn)在以及將來日期的查找,在開發(fā)

2、的過程中,首先對相應的數(shù)據(jù)和圖形界面初始化,并獲取系統(tǒng)當前的年和月,如果要進行查找,可以通過在年份對話框中輸入要查詢的年份,再相應的在月份對應的下拉菜單選擇要查詢的月份,則可得到相應的日歷。 </p><p>  本設計是對圖形用戶界面,布局管理器的綜合運用,理解JAVA的時間處理機制,編寫獨立運行的窗口。該萬年歷采用Myeclipse為基本開發(fā)環(huán)境和java語言進行編寫,首先可在短時間內建立系統(tǒng)應用原型,然后

3、,對程序進行不斷修正和改進,直到形成可行系統(tǒng)。</p><p>  關鍵詞: java、面向對象、萬年歷</p><p><b>  目錄</b></p><p><b>  1、前言1</b></p><p><b>  2、設計內容1</b></p>&l

4、t;p><b>  3、設計過程1</b></p><p><b>  3.1需求分析1</b></p><p>  3.2 概要設計2</p><p>  3.3 詳細設計2</p><p>  3.4 代碼實現(xiàn)4</p><p>  3.5 運行結果8&

5、lt;/p><p><b>  4、總結9</b></p><p><b>  5、參考文獻10</b></p><p><b>  1、前言</b></p><p>  Java的體系結構由Java語言、Java class、Java API、Java虛擬機組成。它具有簡單、

6、面向對象、健壯、安全、結構中立、可移植和高效能等眾多優(yōu)點。Java支持多線程編程,Java運行時系統(tǒng)在多線程同步方面具有成熟的解決方案。Java的平臺標準有Java ME,Java SE和Java EE。Java發(fā)展到今天,它的卓越成就及在業(yè)界的地位毋庸置疑。目前在眾多的支持Java的開發(fā)工具中主要的工具有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse

7、等。其中Java Development Kit 簡稱JDK是大多開發(fā)工具的基礎。以上的每種開發(fā)工具都有優(yōu)缺點,對于開發(fā)者來說,重要的是要根據(jù)自己的開發(fā)規(guī)模、開發(fā)內容和軟硬件環(huán)境等因素來選擇一種合適的開發(fā)工具。本次萬年歷就是通過JAVA語言來完成的。</p><p><b>  2、設計內容</b></p><p>  萬年歷是一個強大的日歷系統(tǒng),通過它可以實現(xiàn)對過去

8、,現(xiàn)在以及將來日期的查找,通過在年份對話框中輸入要查詢的年份,再相應的在月份對應的下拉菜單選擇要查詢的月份,則可得到相應的日歷。本設計是對圖形用戶界面,布局管理器的綜合運用,理解JAVA的時間處理機制,編寫獨立運行的窗口。</p><p><b>  3、設計過程</b></p><p><b>  3.1需求分析</b></p>

9、<p>  本次設計的要求為通過使用圖形用戶界面,從而能夠實現(xiàn)日期與星期的查詢。本程序的具體功能為如下幾個方面:</p><p>  (1)能夠實現(xiàn)圖形界面</p><p> ?。?)能以月歷形式顯示日期與星期</p><p>  (3)支持用戶自己輸入年份,并提供月份的下拉形式菜單來選擇月份</p><p> ?。?)通過點擊“u

10、pdate”按鈕來更新和刷新日歷</p><p><b>  3.2 概要設計</b></p><p>  (1)總天數(shù)的算法:首先用if語句判斷定義年到輸入年之間每一年是否為閏年,是閏年,該年的總天數(shù)為366,否則,為365。然后判斷輸入的年是否為定義年,若是,令總天數(shù)S=1,否則,用累加法計算出定義年到輸入年之間的總天數(shù),再把輸入年的一月到要輸出的月份之間的天數(shù)累

11、加起來,若該月是閏年中的月份并且該月還大于二月,再使總天數(shù)加1,否則,不加,既算出從定義年一月一日到輸出年的該月一日的總天數(shù)。</p><p>  (2) 輸出月份第一天為星期幾的算法:使總天數(shù)除以7取余加2得幾既為星期幾,若是7,則為星期日。</p><p>  (3)算出輸出月份第一天為星期幾的算法:算出輸出月份第一天為星期幾后,把該日期以前的位置用空格補上,并總該日起一次輸出天數(shù)直

12、到月底,該月中的天數(shù)加上該月一日為星期幾的數(shù)字再除以7得0換行,即可完整的輸出該月的日歷。</p><p> ?。?)如果年份小于1582年則程序不予判斷。</p><p><b>  3.3 詳細設計</b></p><p><b>  (1)流程圖</b></p><p><b>  

13、圖1 程序流程圖</b></p><p>  (2)導入程序所需的類</p><p>  import java.applet.Applet; </p><p>  import java.awt.*; </p><p>  import java.util.*; </p><p><b>  

14、(3)初始化數(shù)據(jù)</b></p><p>  public class WanNianLi extends Applet{ </p><p>  static final int TOP = 70; //頂端距離</p><p>  static final int CELLWIDTH=50,CELLHEIGHT = 30; //單元格尺寸</

15、p><p>  static final int MARGIN = 3; //邊界距離</p><p>  static final int FEBRUARY = 1; </p><p>  TextField tfYear = new TextField("2004", 5); //顯示年份的文本域</p><p>  C

16、hoice monthChoice = new Choice(); //月份選擇下拉框</p><p>  Button btUpdate = new Button("update"); //更新按鈕</p><p>  GregorianCalendar calendar=new GregorianCalendar(); //日歷對象</p><

17、;p>  Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //顯示小字體</p><p>  Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //顯示大字體</p><p>  String days[] = {&q

18、uot;星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"}; </p><p>  String months[] = {"1", "2", "3", "4",&

19、quot;5", "6", "7", "8", "9","10", "11", "12"}; </p><p>  int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每個月

20、的天數(shù)</p><p>  int searchMonth,searchYear; //查詢的年份及月份</p><p><b>  }</b></p><p> ?。?)繪制程序的界面</p><p>  public void init(){ </p><p>  setBackground(

21、Color.green); //設置背景顏色 </p><p>  searchMonth = calendar.get(Calendar.MONTH); //得到系統(tǒng)年份,當前的年份</p><p>  searchYear = calendar.get(Calendar.YEAR);//得到系統(tǒng)月份,當前的月份</p><p>  add(new L

22、abel("Year:")); //增加組件到Applet</p><p>  tfYear.setText(String.valueOf(searchYear)); //設置文本域文字</p><p>  add(tfYear); </p><p>  add(new Label("Month:")); </p

23、><p>  monthChoice.setFont(smallFont); //設置月份選擇下拉框的顯示字體</p><p>  for (int i = 0; i < 12; i++) {</p><p>  monthChoice.addItem(months[i]); //增加下拉框選項</p><p><b>  }

24、</b></p><p>  monthChoice.select(searchMonth); //設置下拉框當前選擇項</p><p>  add(monthChoice); </p><p>  add(btUpdate); </p><p>  int componentCount=this.getComponen

25、tCount(); //得到Applet中的組件數(shù)量</p><p>  for (int i=0;i<componentCount;i++){</p><p>  getComponent(i).setFont(smallFont); //設置所有組件的顯示字體</p><p><b>  } </b></p>&

26、lt;p><b>  }</b></p><p><b>  3.4 代碼實現(xiàn)</b></p><p>  package ss2;</p><p>  import java.applet.Applet; </p><p>  import java.awt.*; </p>

27、<p>  import java.util.*; </p><p>  public class WanNianLi extends Applet{ </p><p>  static final int TOP = 70; //頂端距離</p><p>  static final int CELLWIDTH=50,CELLHEIGHT = 30;

28、 //單元格尺寸</p><p>  static final int MARGIN = 3; //邊界距離</p><p>  static final int FEBRUARY = 1; </p><p>  TextField tfYear = new TextField("2004", 5); //顯示年份的文本域</p>

29、<p>  Choice monthChoice = new Choice(); //月份選擇下拉框</p><p>  Button btUpdate = new Button("update"); //更新按鈕</p><p>  GregorianCalendar calendar=new GregorianCalendar(); //日歷對象&l

30、t;/p><p>  Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //顯示小字體</p><p>  Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //顯示大字體</p><p>  String

31、 days[] = {"星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"}; </p><p>  String months[] = {"1", "2", "3", &q

32、uot;4","5", "6", "7", "8", "9","10", "11", "12"}; </p><p>  int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 3

33、0, 31}; //每個月的天數(shù)</p><p>  int searchMonth,searchYear; //查詢的年份及月份</p><p>  public void init(){ </p><p>  setBackground(Color.green); //設置背景顏色 </p><p>  searchMonth

34、= calendar.get(Calendar.MONTH); //得到系統(tǒng)年份,當前的年份</p><p>  searchYear = calendar.get(Calendar.YEAR);//得到系統(tǒng)月份,當前的月份</p><p>  add(new Label("Year:")); //增加組件到Applet</p><p>  

35、tfYear.setText(String.valueOf(searchYear)); //設置文本域文字</p><p>  add(tfYear); </p><p>  add(new Label("Month:")); </p><p>  monthChoice.setFont(smallFont); //設置月份選擇下拉框的顯

36、示字體</p><p>  for (int i = 0; i < 12; i++) {</p><p>  monthChoice.addItem(months[i]); //增加下拉框選項</p><p><b>  }</b></p><p>  monthChoice.select(searchMonth

37、); //設置下拉框當前選擇項</p><p>  add(monthChoice); </p><p>  add(btUpdate); </p><p>  int componentCount=this.getComponentCount(); //得到Applet中的組件數(shù)量</p><p>  for (int i=0;i

38、<componentCount;i++){</p><p>  getComponent(i).setFont(smallFont); //設置所有組件的顯示字體</p><p><b>  } </b></p><p><b>  }</b></p><p>  public vo

39、id paint(Graphics g){ </p><p>  FontMetrics fontMetric; //顯示字體的FontMetrics對象</p><p>  int fontAscent; </p><p>  int dayPos; </p><p>  int totalWidth, totalHeight;

40、//總的寬度,高度</p><p>  int numRows; //行數(shù)</p><p>  int xNum, yNum; //水平和垂直方向單元格數(shù)量 </p><p>  int numDays; </p><p>  String dayStr; //顯示天數(shù)字符串</p><p>  int m

41、argin; </p><p>  g.setColor(Color.YELLOW); //設置當前顏色</p><p>  g.setFont(bigFont); //設置當前使用字體</p><p>  g.drawString(searchYear+"年",60,TOP+70); //繪制字符串</p><

42、p>  g.drawString((searchMonth+1)+"月",200,TOP+130); </p><p>  g.setColor(Color.black);</p><p>  g.setFont(smallFont);</p><p>  fontMetric = g.getFontMetrics(); //獲取變量

43、初值</p><p>  fontAscent = fontMetric.getAscent(); </p><p>  dayPos = TOP + fontAscent / 2; </p><p>  totalWidth = 7 * CELLWIDTH; //得到總的表格寬度</p><p>  for (int i = 0

44、; i < 7; i++) {</p><p>  g.drawString(days[i], (CELLWIDTH-fontMetric.stringWidth(days[i]))/2 + i*CELLWIDTH,dayPos-20); //繪制表格標題欄</p><p><b>  }</b></p><p>  numRow

45、s = getNumberRows(searchYear, searchMonth); //計算需要的行的數(shù)量</p><p>  totalHeight = numRows * CELLHEIGHT; //得到總的表格高度</p><p>  for (int i = 0; i <= totalWidth; i += CELLWIDTH) {</p><p>

46、;  g.drawLine(i, TOP , i, TOP+ totalHeight); //繪制表格線</p><p><b>  }</b></p><p>  for (int i = 0, j = TOP ; i <= numRows; i++, j += CELLHEIGHT) {</p><p>  g.drawLine(0

47、, j, totalWidth, j); //繪制表格線</p><p><b>  }</b></p><p>  xNum = (getFirstDayOfMonth(searchYear, searchMonth) + 1) * CELLWIDTH - MARGIN; </p><p>  yNum = TOP + MARGIN +

48、fontAscent; </p><p>  numDays = daysInMonth[searchMonth] + ((calendar.isLeapYear(searchYear) && (searchMonth == FEBRUARY)) ? 1 : 0); </p><p>  for (int day = 1; day <= numDays; d

49、ay++) { </p><p>  dayStr = Integer.toString(day); </p><p>  g.drawString(dayStr, xNum - fontMetric.stringWidth(dayStr), yNum); //繪制字符串</p><p>  xNum += CELLWIDTH; </p><

50、;p>  if (xNum > totalWidth) { </p><p>  xNum = CELLWIDTH - MARGIN; </p><p>  yNum += CELLHEIGHT; </p><p><b>  } </b></p><p><b>  } </b>

51、</p><p><b>  }</b></p><p>  public boolean action(Event e, Object o){ </p><p>  int searchYearInt; </p><p>  if (e.target==btUpdate){ </p><p&g

52、t;  searchMonth = monthChoice.getSelectedIndex(); //得到查詢月份</p><p>  searchYearInt = Integer.parseInt(tfYear.getText(), 10); //得到查詢年份 </p><p>  if (searchYearInt > 1581) {</p><p

53、>  searchYear = searchYearInt; </p><p><b>  } </b></p><p>  repaint(); //重繪屏幕</p><p>  return true; </p><p><b>  } </b></p><p&g

54、t;  return false; </p><p><b>  } </b></p><p>  private int getNumberRows(int year, int month) { //得到行數(shù)量</p><p>  int firstDay; </p><p>  int numCells;&l

55、t;/p><p>  if (year < 1582) { //年份小于1582年,則返回-1</p><p>  return (-1); </p><p><b>  }</b></p><p>  if ((month < 0) || (month > 11)) {</p><p

56、>  return (-1); </p><p><b>  }</b></p><p>  firstDay = getFirstDayOfMonth(year, month); //計算月份的第一天</p><p>  if ((month == FEBRUARY) && (firstDay == 0) &&

57、amp; !calendar.isLeapYear(year)) {</p><p><b>  return 4;</b></p><p><b>  }</b></p><p>  numCells = firstDay + daysInMonth[month]; </p><p>  if (

58、(month == FEBRUARY) && (calendar.isLeapYear(year))) {</p><p>  numCells++; </p><p><b>  }</b></p><p>  return ((numCells <= 35) ? 5 : 6); //返回行數(shù)</p>&

59、lt;p><b>  } </b></p><p>  private int getFirstDayOfMonth(int year, int month) { //得到每月的第一天</p><p>  int firstDay; </p><p><b>  int i;</b></p>&

60、lt;p>  if (year < 1582) { //年份小于1582年,返回-1</p><p>  return (-1); </p><p><b>  }</b></p><p>  if ((month < 0) || (month > 11)) { //月份數(shù)錯誤,返回-1</p><p

61、>  return (-1); </p><p><b>  }</b></p><p>  firstDay = getFirstDayOfYear(year);//得到每年的第一天</p><p>  for (i = 0; i < month; i++) {</p><p>  firstDay +

62、= daysInMonth[i]; //計算每月的第一天</p><p><b>  }</b></p><p>  if ((month > FEBRUARY) && calendar.isLeapYear(year)) {</p><p>  firstDay++; </p><p><

63、b>  }</b></p><p>  return (firstDay % 7); </p><p><b>  } </b></p><p>  private int getFirstDayOfYear(int year){ //計算每年的第一天</p><p>  int leapYe

64、ars; </p><p>  int hundreds;</p><p>  int fourHundreds; </p><p>  int first;</p><p>  if (year < 1582) { //如果年份小于1582年</p><p>  return (-1); //返回-1<

65、/p><p><b>  } </b></p><p>  leapYears = (year - 1581) / 4;</p><p>  hundreds = (year - 1501) / 100;</p><p>  leapYears -= hundreds;</p><p>  fourH

66、undreds = (year - 1201) / 400; </p><p>  leapYears += fourHundreds;</p><p>  first=5 + (year - 1582) + leapYears % 7; //得到每年第一天</p><p>  return first; </p><p><b>

67、;  } </b></p><p><b>  }</b></p><p><b>  3.5 運行結果</b></p><p><b>  4、總結</b></p><p>  經(jīng)過這段時間的努力,基本上完成了這次java課程設計,也基本上實現(xiàn)了在需求分析時所要完

68、成的功能。通過這次的課程設計,讓我更好的把課本上學到的理論知識用到了實踐上,從而進一步鞏固和豐富了我所學過的知識,也讓我更深層次的認識了java及其功能的強大,同時也發(fā)現(xiàn)了自己的太多不足,對JAVA語言整體知識構架不夠熟悉,不能靈活地運用所學的知識點。自己的編程方式也不是太標準,經(jīng)常出現(xiàn)代碼寫錯而調試很久的低級錯誤情況出現(xiàn)。</p><p>  通過這次課程設計,進一步加強了我的動手能力。為了完成好這次課程設計,

69、做了較多的準備,上網(wǎng)查閱了好多的相關資料,也翻閱了許多的相關的書籍。在這些過程中也無形的鍛煉了我的思維分析、遇到問題及解決問題的能力,同時我也明白了編寫程序,不僅要求對所學知識有較深刻的了解,同時要求程序設計者有較強的思維和動手能力。還要熟悉常用的編程技巧和編程思想,不能只關心程序的運行結果,更要注重程序代碼的結構,編程者更要有嚴謹?shù)貞B(tài)度。在這次課程設計中我收獲的不僅僅是課本上的知識的實際應用,還有編程的基本習慣和開發(fā)系統(tǒng)時應注意的流程

70、。</p><p><b>  5、參考文獻</b></p><p>  [1].張亦輝,馮華,胡潔. Java面向對象程序設計,人民郵電出版社,2008.10</p><p>  [2].孫全黨 王吳迪 趙楓朝,Java程序設計應用教程,電子工業(yè)出版社,2006.2</p><p>  [3].趙生慧,Java面向對

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論