版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 萬(wàn)年歷設(shè)計(jì)</b></p><p><b> 摘要</b></p><p> Java語(yǔ)言自1995年面世以來(lái),以其與平臺(tái)無(wú)關(guān)性、安全性、面向?qū)ο蟮忍匦员辉絹?lái)越多的人使用,是目前應(yīng)用非常廣泛的一門面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,本次課程設(shè)計(jì)的萬(wàn)年歷是一個(gè)強(qiáng)大的日歷系統(tǒng),通過(guò)它可以實(shí)現(xiàn)對(duì)過(guò)去,現(xiàn)在以及將來(lái)日期的查找,在開(kāi)發(fā)
2、的過(guò)程中,首先對(duì)相應(yīng)的數(shù)據(jù)和圖形界面初始化,并獲取系統(tǒng)當(dāng)前的年和月,如果要進(jìn)行查找,可以通過(guò)在年份對(duì)話框中輸入要查詢的年份,再相應(yīng)的在月份對(duì)應(yīng)的下拉菜單選擇要查詢的月份,則可得到相應(yīng)的日歷。 </p><p> 本設(shè)計(jì)是對(duì)圖形用戶界面,布局管理器的綜合運(yùn)用,理解JAVA的時(shí)間處理機(jī)制,編寫?yīng)毩⑦\(yùn)行的窗口。該萬(wàn)年歷采用Myeclipse為基本開(kāi)發(fā)環(huán)境和java語(yǔ)言進(jìn)行編寫,首先可在短時(shí)間內(nèi)建立系統(tǒng)應(yīng)用原型,然后
3、,對(duì)程序進(jìn)行不斷修正和改進(jìn),直到形成可行系統(tǒng)。</p><p> 關(guān)鍵詞: java、面向?qū)ο?、萬(wàn)年歷</p><p><b> 目錄</b></p><p><b> 1、前言1</b></p><p><b> 2、設(shè)計(jì)內(nèi)容1</b></p>&l
4、t;p><b> 3、設(shè)計(jì)過(guò)程1</b></p><p><b> 3.1需求分析1</b></p><p> 3.2 概要設(shè)計(jì)2</p><p> 3.3 詳細(xì)設(shè)計(jì)2</p><p> 3.4 代碼實(shí)現(xiàn)4</p><p> 3.5 運(yùn)行結(jié)果8&
5、lt;/p><p><b> 4、總結(jié)9</b></p><p><b> 5、參考文獻(xiàn)10</b></p><p><b> 1、前言</b></p><p> Java的體系結(jié)構(gòu)由Java語(yǔ)言、Java class、Java API、Java虛擬機(jī)組成。它具有簡(jiǎn)單、
6、面向?qū)ο?、健壯、安全、結(jié)構(gòu)中立、可移植和高效能等眾多優(yōu)點(diǎn)。Java支持多線程編程,Java運(yùn)行時(shí)系統(tǒng)在多線程同步方面具有成熟的解決方案。Java的平臺(tái)標(biāo)準(zhǔn)有Java ME,Java SE和Java EE。Java發(fā)展到今天,它的卓越成就及在業(yè)界的地位毋庸置疑。目前在眾多的支持Java的開(kāi)發(fā)工具中主要的工具有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse
7、等。其中Java Development Kit 簡(jiǎn)稱JDK是大多開(kāi)發(fā)工具的基礎(chǔ)。以上的每種開(kāi)發(fā)工具都有優(yōu)缺點(diǎn),對(duì)于開(kāi)發(fā)者來(lái)說(shuō),重要的是要根據(jù)自己的開(kāi)發(fā)規(guī)模、開(kāi)發(fā)內(nèi)容和軟硬件環(huán)境等因素來(lái)選擇一種合適的開(kāi)發(fā)工具。本次萬(wàn)年歷就是通過(guò)JAVA語(yǔ)言來(lái)完成的。</p><p><b> 2、設(shè)計(jì)內(nèi)容</b></p><p> 萬(wàn)年歷是一個(gè)強(qiáng)大的日歷系統(tǒng),通過(guò)它可以實(shí)現(xiàn)對(duì)過(guò)去
8、,現(xiàn)在以及將來(lái)日期的查找,通過(guò)在年份對(duì)話框中輸入要查詢的年份,再相應(yīng)的在月份對(duì)應(yīng)的下拉菜單選擇要查詢的月份,則可得到相應(yīng)的日歷。本設(shè)計(jì)是對(duì)圖形用戶界面,布局管理器的綜合運(yùn)用,理解JAVA的時(shí)間處理機(jī)制,編寫?yīng)毩⑦\(yùn)行的窗口。</p><p><b> 3、設(shè)計(jì)過(guò)程</b></p><p><b> 3.1需求分析</b></p>
9、<p> 本次設(shè)計(jì)的要求為通過(guò)使用圖形用戶界面,從而能夠?qū)崿F(xiàn)日期與星期的查詢。本程序的具體功能為如下幾個(gè)方面:</p><p> (1)能夠?qū)崿F(xiàn)圖形界面</p><p> ?。?)能以月歷形式顯示日期與星期</p><p> ?。?)支持用戶自己輸入年份,并提供月份的下拉形式菜單來(lái)選擇月份</p><p> ?。?)通過(guò)點(diǎn)擊“u
10、pdate”按鈕來(lái)更新和刷新日歷</p><p><b> 3.2 概要設(shè)計(jì)</b></p><p> ?。?)總天數(shù)的算法:首先用if語(yǔ)句判斷定義年到輸入年之間每一年是否為閏年,是閏年,該年的總天數(shù)為366,否則,為365。然后判斷輸入的年是否為定義年,若是,令總天數(shù)S=1,否則,用累加法計(jì)算出定義年到輸入年之間的總天數(shù),再把輸入年的一月到要輸出的月份之間的天數(shù)累
11、加起來(lái),若該月是閏年中的月份并且該月還大于二月,再使總天數(shù)加1,否則,不加,既算出從定義年一月一日到輸出年的該月一日的總天數(shù)。</p><p> (2) 輸出月份第一天為星期幾的算法:使總天數(shù)除以7取余加2得幾既為星期幾,若是7,則為星期日。</p><p> (3)算出輸出月份第一天為星期幾的算法:算出輸出月份第一天為星期幾后,把該日期以前的位置用空格補(bǔ)上,并總該日起一次輸出天數(shù)直
12、到月底,該月中的天數(shù)加上該月一日為星期幾的數(shù)字再除以7得0換行,即可完整的輸出該月的日歷。</p><p> ?。?)如果年份小于1582年則程序不予判斷。</p><p><b> 3.3 詳細(xì)設(shè)計(jì)</b></p><p><b> ?。?)流程圖</b></p><p><b>
13、圖1 程序流程圖</b></p><p> (2)導(dǎo)入程序所需的類</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(); //日歷對(duì)象</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}; //每個(gè)月
20、的天數(shù)</p><p> int searchMonth,searchYear; //查詢的年份及月份</p><p><b> }</b></p><p> (4)繪制程序的界面</p><p> public void init(){ </p><p> setBackground(
21、Color.green); //設(shè)置背景顏色 </p><p> searchMonth = calendar.get(Calendar.MONTH); //得到系統(tǒng)年份,當(dāng)前的年份</p><p> searchYear = calendar.get(Calendar.YEAR);//得到系統(tǒng)月份,當(dāng)前的月份</p><p> add(new L
22、abel("Year:")); //增加組件到Applet</p><p> tfYear.setText(String.valueOf(searchYear)); //設(shè)置文本域文字</p><p> add(tfYear); </p><p> add(new Label("Month:")); </p
23、><p> monthChoice.setFont(smallFont); //設(shè)置月份選擇下拉框的顯示字體</p><p> for (int i = 0; i < 12; i++) {</p><p> monthChoice.addItem(months[i]); //增加下拉框選項(xiàng)</p><p><b> }
24、</b></p><p> monthChoice.select(searchMonth); //設(shè)置下拉框當(dāng)前選擇項(xiàng)</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); //設(shè)置所有組件的顯示字體</p><p><b> } </b></p>&
26、lt;p><b> }</b></p><p><b> 3.4 代碼實(shí)現(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(); //日歷對(duì)象&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}; //每個(gè)月的天數(shù)</p><p> int searchMonth,searchYear; //查詢的年份及月份</p><p> public void init(){ </p><p> setBackground(Color.green); //設(shè)置背景顏色 </p><p> searchMonth
34、= calendar.get(Calendar.MONTH); //得到系統(tǒng)年份,當(dāng)前的年份</p><p> searchYear = calendar.get(Calendar.YEAR);//得到系統(tǒng)月份,當(dāng)前的月份</p><p> add(new Label("Year:")); //增加組件到Applet</p><p>
35、tfYear.setText(String.valueOf(searchYear)); //設(shè)置文本域文字</p><p> add(tfYear); </p><p> add(new Label("Month:")); </p><p> monthChoice.setFont(smallFont); //設(shè)置月份選擇下拉框的顯
36、示字體</p><p> for (int i = 0; i < 12; i++) {</p><p> monthChoice.addItem(months[i]); //增加下拉框選項(xiàng)</p><p><b> }</b></p><p> monthChoice.select(searchMonth
37、); //設(shè)置下拉框當(dāng)前選擇項(xiàng)</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); //設(shè)置所有組件的顯示字體</p><p><b> } </b></p><p><b> }</b></p><p> public vo
39、id paint(Graphics g){ </p><p> FontMetrics fontMetric; //顯示字體的FontMetrics對(duì)象</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); //設(shè)置當(dāng)前顏色</p><p> g.setFont(bigFont); //設(shè)置當(dāng)前使用字體</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); //繪制表格標(biāo)題欄</p><p><b> }</b></p><p> numRow
45、s = getNumberRows(searchYear, searchMonth); //計(jì)算需要的行的數(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(); //得到查詢?cè)路?lt;/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); //計(jì)算月份的第一天</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ù)錯(cuò)誤,返回-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]; //計(jì)算每月的第一天</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){ //計(jì)算每年的第一天</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 運(yùn)行結(jié)果</b></p><p><b> 4、總結(jié)</b></p><p> 經(jīng)過(guò)這段時(shí)間的努力,基本上完成了這次java課程設(shè)計(jì),也基本上實(shí)現(xiàn)了在需求分析時(shí)所要完
68、成的功能。通過(guò)這次的課程設(shè)計(jì),讓我更好的把課本上學(xué)到的理論知識(shí)用到了實(shí)踐上,從而進(jìn)一步鞏固和豐富了我所學(xué)過(guò)的知識(shí),也讓我更深層次的認(rèn)識(shí)了java及其功能的強(qiáng)大,同時(shí)也發(fā)現(xiàn)了自己的太多不足,對(duì)JAVA語(yǔ)言整體知識(shí)構(gòu)架不夠熟悉,不能靈活地運(yùn)用所學(xué)的知識(shí)點(diǎn)。自己的編程方式也不是太標(biāo)準(zhǔn),經(jīng)常出現(xiàn)代碼寫錯(cuò)而調(diào)試很久的低級(jí)錯(cuò)誤情況出現(xiàn)。</p><p> 通過(guò)這次課程設(shè)計(jì),進(jìn)一步加強(qiáng)了我的動(dòng)手能力。為了完成好這次課程設(shè)計(jì),
69、做了較多的準(zhǔn)備,上網(wǎng)查閱了好多的相關(guān)資料,也翻閱了許多的相關(guān)的書籍。在這些過(guò)程中也無(wú)形的鍛煉了我的思維分析、遇到問(wèn)題及解決問(wèn)題的能力,同時(shí)我也明白了編寫程序,不僅要求對(duì)所學(xué)知識(shí)有較深刻的了解,同時(shí)要求程序設(shè)計(jì)者有較強(qiáng)的思維和動(dòng)手能力。還要熟悉常用的編程技巧和編程思想,不能只關(guān)心程序的運(yùn)行結(jié)果,更要注重程序代碼的結(jié)構(gòu),編程者更要有嚴(yán)謹(jǐn)?shù)貞B(tài)度。在這次課程設(shè)計(jì)中我收獲的不僅僅是課本上的知識(shí)的實(shí)際應(yīng)用,還有編程的基本習(xí)慣和開(kāi)發(fā)系統(tǒng)時(shí)應(yīng)注意的流程
70、。</p><p><b> 5、參考文獻(xiàn)</b></p><p> [1].張亦輝,馮華,胡潔. Java面向?qū)ο蟪绦蛟O(shè)計(jì),人民郵電出版社,2008.10</p><p> [2].孫全黨 王吳迪 趙楓朝,Java程序設(shè)計(jì)應(yīng)用教程,電子工業(yè)出版社,2006.2</p><p> [3].趙生慧,Java面向?qū)?/p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)--萬(wàn)年歷
- java課程設(shè)計(jì)--萬(wàn)年歷設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告-萬(wàn)年歷
- java萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- java超級(jí)萬(wàn)年歷課程設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告---萬(wàn)年歷
- java萬(wàn)年歷課程設(shè)計(jì)報(bào)告 (2)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)--萬(wàn)年歷電子時(shí)鐘
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 數(shù)字萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)論文
- 課程設(shè)計(jì)-萬(wàn)年歷系統(tǒng)
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論