版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 信息科學(xué)與工程學(xué)院</b></p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 題目: 萬年歷程序的設(shè)計與開發(fā) </p><p> 課程設(shè)計任務(wù)書及成績評定</p><p&
2、gt; 課程設(shè)計的任務(wù)和具體要求任務(wù): 熟練使用eclipse,獨立開發(fā)一些應(yīng)用程序,要求學(xué)生具備較強(qiáng)的自學(xué)能力和系統(tǒng)分析、設(shè)計能力,較好地進(jìn)行團(tuán)隊合作。開發(fā)出的系統(tǒng)運行穩(wěn)定,符合實際需求,界面美觀大方。課程設(shè)計要求:1.界面美觀大方2.應(yīng)完成的基本功能有:完成年份、月份以及具體日期的更新指導(dǎo)教師簽字: 、 日期: </p><
3、p> 指導(dǎo)教師評語成績: 指導(dǎo)教師簽字: 日期: </p><p> 課程設(shè)計所需軟件、硬件等所需軟件:eclipse環(huán)境,JDK所需硬件:一臺電腦</p><p> 課程設(shè)計進(jìn)度計劃</p><p> 起至日期工作內(nèi)容備注</p><p> 2013.11
4、.8-2013.11.152013.11.16-2013.11.182013.11.20-2013.11.262013.11.28-2013.12.32013.12.4-2013.12.6收集相關(guān)資料進(jìn)行總體規(guī)劃編寫程序與調(diào)試程序程序測試撰寫課程設(shè)計任務(wù)書</p><p> 參考文獻(xiàn)、資料索引</p><p> 序號文獻(xiàn)、資料名稱編著者出版單位</p><p> [
5、1].曾令明 索 望 甘 剛 宋 波,Java程序設(shè)計教程,西安電子科技大學(xué)出版社,2007.8[2].孫全黨 王吳迪 趙楓朝,Java程序設(shè)計應(yīng)用教程,電子工業(yè)出版社,2006.2[3].趙玉陽,Java從入門到精通,清華大學(xué)出版社,2006.8</p><p> 目 錄</p><p><b> 前言2</b></p>&
6、lt;p><b> 1需求分析3</b></p><p><b> 1.1需求分析3</b></p><p><b> 1.2功能設(shè)計3</b></p><p><b> 2.概要設(shè)計3</b></p><p> 2.1程序設(shè)計思路
7、3</p><p> 2.2程序運行界面4</p><p><b> 2.3流程圖4</b></p><p> 3.各模塊的功能及程序說明5</p><p> 3.1.初始化組件5</p><p> 3.2.初始化數(shù)據(jù)5</p><p> 3.3.繪
8、制程序界面6</p><p><b> 4.測試分析7</b></p><p><b> 5.源程序清單9</b></p><p> 6.課程設(shè)計體會17</p><p><b> 參考文獻(xiàn)17</b></p><p><b>
9、; 前言</b></p><p> Java的前身是Oak,它一開始只是被應(yīng)用于消費性電子產(chǎn)品中。后來它的開發(fā)者們發(fā)現(xiàn)它還可以被用于更大范圍的Internet上。1995年,Java語言的名字從Oak編程了Java。1997年J2SE1.1發(fā)布。1998年J2SE1.2發(fā)布,標(biāo)志Java2的誕生。十多年來,Java編程語言及平臺成功地運用在網(wǎng)絡(luò)計算及移動等各個領(lǐng)域。Java的體系結(jié)構(gòu)由Java語言
10、、Java class、Java API、Java虛擬機(jī)組成。它具有簡單、面向?qū)ο?、健壯、安全、結(jié)構(gòu)中立、可移植和高效能等眾多優(yōu)點。Java支持多線程編程,Java運行時系統(tǒng)在多線程同步方面具有成熟的解決方案。Java的平臺標(biāo)準(zhǔn)有Java ME,Java SE和Java EE。Java發(fā)展到今天,它的卓越成就及在業(yè)界的地位毋庸置疑。目前在眾多的支持Java的開發(fā)工具中主要的7有Java Development Kit,NetBeans,
11、Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 簡稱JDK是大多開發(fā)工具的基礎(chǔ)。以上的每種開發(fā)工具都有優(yōu)缺點,對于開發(fā)者來</p><p> 本課程設(shè)計是一個JAVA小日歷組件的設(shè)計,利用Frame框架類、面板類進(jìn)行圖形化界面設(shè)計,實現(xiàn)小日歷的公歷顯示等功能。</p><p><b> 1需求分析&l
12、t;/b></p><p><b> 1.1需求分析</b></p><p> 本程序的要求為:1.使用圖形用戶界面;2.本程序能夠?qū)崿F(xiàn)日期與星期的查詢。</p><p><b> 1.2功能設(shè)計</b></p><p> 本程序要構(gòu)建的萬年歷程序,其功能有以下幾個方面:</p&
13、gt;<p> (1)通過網(wǎng)頁形式運行,實現(xiàn)圖形界面。</p><p> (2)能以月歷形式顯示日期與星期。</p><p> (3)支持用戶自己輸入年份,并提供月份的下拉形式菜單來選擇月份。</p><p> (4)通過點擊“更新”來刷新日歷。</p><p><b> 2.概要設(shè)計</b>&l
14、t;/p><p><b> 2.1程序設(shè)計思路</b></p><p> 1. 總天數(shù)的算法:首先用if語句判斷定義年到輸入年之間每一年是否為閏年,是閏年,該年的總天數(shù)為366,否則,為365。然后判斷輸入的年是否為定義年,若是,令總天數(shù)S=1,否則,用累加法計算出定義年到輸入年之間的總天數(shù),再把輸入年的一月到要輸出的月份之間的天數(shù)累加起來,若該月是閏年中的月份并且該
15、月還大于二月,再使總天數(shù)加1,否則,不加,既算出從定義年一月一日到輸出年的該月一日的總天數(shù)。 2. 輸出月份第一天為星期幾的算法:使總天數(shù)除以7取余加2得幾既為星期幾,若是7,則為星期日。</p><p> 3. 算出輸出月份第一天為星期幾的算法:算出輸出月份第一天為星期幾后,把該日期以前的位置用空格補(bǔ)上,并從該日起一次輸出天數(shù)直到月底,該月中的天數(shù)加上該月一日為星期幾的數(shù)字再除7得0換
16、行,即可完整的輸出該月的日歷。</p><p> 4. 如果年份小于1582年則程序不予判斷。</p><p><b> 2.2程序運行界面</b></p><p><b> 圖1程序運行界面</b></p><p><b> 2.3流程圖</b></p>
17、<p> 3.各模塊的功能及程序說明</p><p><b> 3.1.初始化組件</b></p><p> import java.awt.*; </p><p> import java.util.*; </p><p><b> 3.2.初始化數(shù)據(jù)</b></p&g
18、t;<p> public class CalendarApplet extends Applet{ </p><p> static final int TOP = 70; //頂端距離</p><p> static final int CELLWIDTH=50,CELLHEIGHT = 30; //單元格尺寸</p><p> sta
19、tic final int MARGIN = 3; //邊界距離</p><p> static final int FEBRUARY = 1; </p><p> TextField tfYear = new TextField("2004", 5); //顯示年份的文本域</p><p> Choice monthChoice = n
20、ew Choice(); //月份選擇下拉框</p><p> Button btUpdate = new Button("更新"); //更新按鈕</p><p> GregorianCalendar calendar=new GregorianCalendar(); //日歷對象</p><p> Font smallFont =
21、new Font("TimesRoman", Font.PLAIN, 15); //顯示小字體</p><p> Font bigFont = new Font("TimesRoman", Font.BOLD, 50); //顯示大字體</p><p> String days[] = {"星期日", "星期一&
22、quot;, "星期二", "星期三","星期四", "星期五", "星期六"}; </p><p> String months[] = {"一月", "二月", "三月", "四月","五月", "
23、六月", "七月", "八月", "九月","十月", "十一月", "十二月"}; </p><p> int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每個月的天數(shù)</p>
24、<p> int searchMonth,searchYear; //查詢的年份及月份</p><p> 3.3.繪制程序界面</p><p> public void init(){ </p><p> setBackground(Color.white); //設(shè)置背景顏色 </p><p> search
25、Month = calendar.get(Calendar.MONTH); //得到系統(tǒng)年份</p><p> searchYear = calendar.get(Calendar.YEAR);//得到系統(tǒng)月份</p><p> add(new Label(" 年:")); //增加組件到Applet</p><p> tfYear.s
26、etText(String.valueOf(searchYear)); //設(shè)置文本域文字</p><p> add(tfYear); </p><p> add(new Label(" 月:")); </p><p> monthChoice.setFont(smallFont); //設(shè)置月份選擇下拉框的顯示字體</p&g
27、t;<p> for (int i = 0; i < 12; i++) {</p><p> monthChoice.addItem(months[i]); //增加下拉框選項</p><p><b> }</b></p><p> monthChoice.select(searchMonth); //設(shè)置下拉框當(dāng)
28、前選擇項</p><p> add(monthChoice); </p><p> add(btUpdate); </p><p> int componentCount=this.getComponentCount(); //得到Applet中的組件數(shù)量</p><p> for (int i=0;i<compone
29、ntCount;i++){</p><p> getComponent(i).setFont(smallFont); //設(shè)置所有組件的顯示字體</p><p><b> } </b></p><p><b> }</b></p><p><b> 4.測試分析</
30、b></p><p> 圖2 在年份輸入框內(nèi)輸入1582后點擊更新后的情況</p><p> 圖3 月份下拉列表框</p><p> 圖4 選擇月份后的情況</p><p> 圖5點擊更新按鈕后顯示的結(jié)果</p><p><b> 5.源程序清單</b></p>&l
31、t;p> import java.applet.Applet; </p><p> import java.awt.*; </p><p> import java.util.*; </p><p> public class CalendarApplet extends Applet{ </p><p> static fi
32、nal int TOP = 70; //頂端距離</p><p> static final int CELLWIDTH=50,CELLHEIGHT = 30; //單元格尺寸</p><p> static final int MARGIN = 3; //邊界距離</p><p> static final int FEBRUARY = 1; <
33、/p><p> TextField tfYear = new TextField("2004", 5); //顯示年份的文本域</p><p> Choice monthChoice = new Choice(); //月份選擇下拉框</p><p> Button btUpdate = new Button("更新");
34、 //更新按鈕</p><p> GregorianCalendar calendar=new GregorianCalendar(); //日歷對象</p><p> Font smallFont = new Font("TimesRoman", Font.PLAIN, 15); //顯示小字體</p><p> Font bigFo
35、nt = new Font("TimesRoman", Font.BOLD, 50); //顯示大字體</p><p> String days[] = {"星期日", "星期一", "星期二", "星期三","星期四", "星期五", "星期六"};
36、 </p><p> String months[] = {"一月", "二月", "三月", "四月","五月", "六月", "七月", "八月", "九月","十月", "十一月", &
37、quot;十二月"}; </p><p> int daysInMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //每個月的天數(shù)</p><p> int searchMonth,searchYear; //查詢的年份及月份</p><p> public void init()
38、{ </p><p> setBackground(Color.white); //設(shè)置背景顏色 </p><p> searchMonth = calendar.get(Calendar.MONTH); //得到系統(tǒng)年份</p><p> searchYear = calendar.get(Calendar.YEAR);//得到系統(tǒng)月份</
39、p><p> add(new Label(" 年:")); //增加組件到Applet</p><p> tfYear.setText(String.valueOf(searchYear)); //設(shè)置文本域文字</p><p> add(tfYear); </p><p> add(new Label(&quo
40、t; 月:")); </p><p> monthChoice.setFont(smallFont); //設(shè)置月份選擇下拉框的顯示字體</p><p> for (int i = 0; i < 12; i++) {</p><p> monthChoice.addItem(months[i]); //增加下拉框選項</p>
41、<p><b> }</b></p><p> monthChoice.select(searchMonth); //設(shè)置下拉框當(dāng)前選擇項</p><p> add(monthChoice); </p><p> add(btUpdate); </p><p> int component
42、Count=this.getComponentCount(); //得到Applet中的組件數(shù)量</p><p> for (int i=0;i<componentCount;i++){</p><p> getComponent(i).setFont(smallFont); //設(shè)置所有組件的顯示字體</p><p><b> } &
43、lt;/b></p><p><b> }</b></p><p> public void paint(Graphics g){ </p><p> FontMetrics fontMetric; //顯示字體的FontMetrics對象</p><p> int fontAscent; <
44、;/p><p> int dayPos; </p><p> int totalWidth, totalHeight; //總的寬度,高度</p><p> int numRows; //行數(shù)</p><p> int xNum, yNum; //水平和垂直方向單元格數(shù)量 </p><p> int nu
45、mDays; </p><p> String dayStr; //顯示天數(shù)字符串</p><p> int margin; </p><p> g.setColor(Color.lightGray); //設(shè)置當(dāng)前顏色</p><p> g.setFont(bigFont); //設(shè)置當(dāng)前使用字體</p&g
46、t;<p> g.drawString(searchYear+"年",60,TOP+70); //繪制字符串</p><p> g.drawString((searchMonth+1)+"月",200,TOP+130); </p><p> g.setColor(Color.black);</p><p&g
47、t; g.setFont(smallFont);</p><p> fontMetric = g.getFontMetrics(); //獲取變量初值</p><p> fontAscent = fontMetric.getAscent(); </p><p> dayPos = TOP + fontAscent / 2; </p>
48、<p> totalWidth = 7 * CELLWIDTH; //得到總的表格寬度</p><p> for (int i = 0; i < 7; i++) {</p><p> g.drawString(days[i], (CELLWIDTH-fontMetric.stringWidth(days[i]))/2 + i*CELLWIDTH,dayPos-2
49、0); //繪制表格標(biāo)題欄</p><p><b> }</b></p><p> numRows = getNumberRows(searchYear, searchMonth); //計算需要的行的數(shù)量</p><p> totalHeight = numRows * CELLHEIGHT; //得到總的表格高度</p&g
50、t;<p> for (int i = 0; i <= totalWidth; i += CELLWIDTH) {</p><p> g.drawLine(i, TOP , i, TOP+ totalHeight); //繪制表格線</p><p><b> }</b></p><p> for (int i =
51、0, j = TOP ; i <= numRows; i++, j += CELLHEIGHT) {</p><p> g.drawLine(0, j, totalWidth, j); //繪制表格線</p><p><b> }</b></p><p> xNum = (getFirstDayOfMonth(searchYear
52、, searchMonth) + 1) * CELLWIDTH - MARGIN; </p><p> yNum = TOP + MARGIN + fontAscent; </p><p> numDays = daysInMonth[searchMonth] + ((calendar.isLeapYear(searchYear) && (searchMon
53、th == FEBRUARY)) ? 1 : 0); </p><p> for (int day = 1; day <= numDays; day++) { </p><p> dayStr = Integer.toString(day); </p><p> g.drawString(dayStr, xNum - fontMetric.string
54、Width(dayStr), yNum); //繪制字符串</p><p> xNum += CELLWIDTH; </p><p> if (xNum > totalWidth) { </p><p> xNum = CELLWIDTH - MARGIN; </p><p> yNum += CELLHEIGHT;
55、</p><p><b> } </b></p><p><b> } </b></p><p><b> }</b></p><p> public boolean action(Event e, Object o){ </p><p>
56、int searchYearInt; </p><p> if (e.target==btUpdate){ </p><p> searchMonth = monthChoice.getSelectedIndex(); //得到查詢月份</p><p> searchYearInt = Integer.parseInt(tfYear.getText(),
57、 10); //得到查詢年份 </p><p> if (searchYearInt > 1581) {</p><p> searchYear = searchYearInt; </p><p><b> } </b></p><p> repaint(); //重繪屏幕</p>
58、<p> return true; </p><p><b> } </b></p><p> return false; </p><p><b> } </b></p><p> private int getNumberRows(int year, int month
59、) { //得到行數(shù)量</p><p> int firstDay; </p><p> int numCells;</p><p> if (year < 1582) { //年份小于1582年,則返回-1</p><p> return (-1); </p><p><b> }&l
60、t;/b></p><p> if ((month < 0) || (month > 11)) {</p><p> return (-1); </p><p><b> }</b></p><p> firstDay = getFirstDayOfMonth(year, month); //
61、計算月份的第一天</p><p> if ((month == FEBRUARY) && (firstDay == 0) && !calendar.isLeapYear(year)) {</p><p><b> return 4;</b></p><p><b> }</b><
62、/p><p> numCells = firstDay + daysInMonth[month]; </p><p> if ((month == FEBRUARY) && (calendar.isLeapYear(year))) {</p><p> numCells++; </p><p><b> }<
63、;/b></p><p> return ((numCells <= 35) ? 5 : 6); //返回行數(shù)</p><p><b> } </b></p><p> private int getFirstDayOfMonth(int year, int month) { //得到每月的第一天</p>
64、<p> int firstDay; </p><p><b> int i;</b></p><p> if (year < 1582) { //年份小于1582年,返回-1</p><p> return (-1); </p><p><b> }</b></
65、p><p> if ((month < 0) || (month > 11)) { //月份數(shù)錯誤,返回-1</p><p> return (-1); </p><p><b> }</b></p><p> firstDay = getFirstDayOfYear(year);//得到每年的第一天
66、</p><p> for (i = 0; i < month; i++) {</p><p> firstDay += daysInMonth[i]; //計算每月的第一天</p><p><b> }</b></p><p> if ((month > FEBRUARY) &&
67、calendar.isLeapYear(year)) {</p><p> firstDay++; </p><p><b> }</b></p><p> return (firstDay % 7); </p><p><b> } </b></p><p&g
68、t; private int getFirstDayOfYear(int year){ //計算每年的第一天</p><p> int leapYears; </p><p> int hundreds;</p><p> int fourHundreds; </p><p> int first;</p><
69、p> if (year < 1582) { //如果年份小于1582年</p><p> return (-1); //返回-1</p><p><b> } </b></p><p> leapYears = (year - 1581) / 4;</p><p> hundreds = (year
70、 - 1501) / 100;</p><p> leapYears -= hundreds;</p><p> fourHundreds = (year - 1201) / 400; </p><p> leapYears += fourHundreds;</p><p> first=5 + (year - 1582) + lea
71、pYears % 7; //得到每年第一天</p><p> return first; </p><p><b> } </b></p><p><b> }</b></p><p><b> 6.課程設(shè)計體會</b></p><p> ?。?/p>
72、1)選題目的:本次課程設(shè)計為課本后設(shè)計題目任選一題進(jìn)行設(shè)計。思考一段時間后,我們組決定做一個萬年歷的設(shè)計。主要考慮到以前時間少課程內(nèi)容多,JAVA課程基礎(chǔ)內(nèi)容掌握并不是很抓實,而對于設(shè)計一個萬年歷程序,由于其功能簡單設(shè)計也相對較易,對于我們組每個人的學(xué)習(xí)情況比較合適,并且通過設(shè)計這樣的一個日歷小組件,也能使自己對JAVA的一些基礎(chǔ)知識掌握的更加牢固。</p><p> ?。?)對于本程序的設(shè)計,首先考慮其功能有哪
73、些,需要顯示什么,如何進(jìn)行窗體構(gòu)建布局,需要用哪些知識點,如相關(guān)的類和對象等。最后,就是根據(jù)初步設(shè)計的功能和布局構(gòu)架,考慮用源代碼進(jìn)行實現(xiàn)了。</p><p> 經(jīng)過了長時間的反復(fù)編寫調(diào)試,課本和網(wǎng)上查閱相關(guān)資料相關(guān)文章,終于完成了整個課程設(shè)計。在這個過程中,在把書本上的知識給系統(tǒng)的復(fù)習(xí)了一下的同時,同時也發(fā)現(xiàn)了自己的太多不足,對JAVA語言整體知識構(gòu)架不夠熟悉,不能靈活地運用所學(xué)的知識點。自己的編程方式也不是
74、太標(biāo)準(zhǔn),經(jīng)常出現(xiàn)代碼寫錯而調(diào)試很久的低級錯誤情況出現(xiàn)。</p><p> 通過這次課程設(shè)計,我明白了編寫程序,不僅要求對課本知識有較深刻的了解,同時要求程序設(shè)計者有較強(qiáng)的思維和動手能力。還要熟悉常用的編程技巧和編程思想,不能只關(guān)心程序的運行結(jié)果,更要注重程序代碼的結(jié)構(gòu),編程者更要有嚴(yán)謹(jǐn)?shù)貞B(tài)度。還有通過設(shè)計過程中大量地查閱網(wǎng)絡(luò)文章,對一些關(guān)鍵知識點逐個地了解并解決相關(guān)問題。所以網(wǎng)絡(luò)這個強(qiáng)大的工具,確實是我們學(xué)習(xí)之
75、中可以借助的一個很好的幫手。網(wǎng)絡(luò)是我們學(xué)習(xí)的最好的老師之一。有問題,問網(wǎng)絡(luò),是一個很好的習(xí)慣。</p><p><b> 參考文獻(xiàn)</b></p><p> [1].曾令明 索 望 甘 剛 宋 波,Java程序設(shè)計教程,西安電子科技大學(xué)出版社,2007.8</p><p> [2].孫全黨 王吳迪 趙楓朝,Java程序設(shè)計應(yīng)用教程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計--萬年歷
- java課程設(shè)計--萬年歷設(shè)計
- java課程設(shè)計報告-萬年歷
- java萬年歷課程設(shè)計報告
- java超級萬年歷課程設(shè)計
- java課程設(shè)計報告---萬年歷
- java萬年歷課程設(shè)計報告 (2)
- 萬年歷課程設(shè)計--萬年歷電子時鐘
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計
- 萬年歷課程設(shè)計報告
- 數(shù)字萬年歷課程設(shè)計
- 萬年歷課程設(shè)計論文
- 課程設(shè)計-萬年歷系統(tǒng)
- 萬年歷課程設(shè)計報告
評論
0/150
提交評論