




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、生產(chǎn)實(shí)習(xí) android 日歷日程管理 1 校內(nèi)生產(chǎn)實(shí)習(xí)報(bào)告校內(nèi)生產(chǎn)實(shí)習(xí)報(bào)告 androidandroid 日歷日程管理日歷日程管理 指導(dǎo)老師:指導(dǎo)老師: xxx 姓姓 名:名: xxx 專業(yè)班級(jí):專業(yè)班級(jí): xxxxxxxxxxxxx 學(xué)學(xué) 號(hào):號(hào): xxxxxxxx 電電 話:話: xxxxxxxxx 系系 (院):院): 計(jì)算機(jī)與信息工程學(xué)院 2014 年 7 月 14 日 生產(chǎn)實(shí)習(xí) android 日歷日程管理 2 目錄目錄 一.項(xiàng)目概述.4 1.1 編寫目的.4 1.2 項(xiàng)目介紹.4 1.3 軟件相關(guān)信息.4 二 項(xiàng)目需求.4 2.1 概述.4 2.1.1 編寫目的.4 2.1.2
2、項(xiàng)目概述.5 2.1.3 運(yùn)行環(huán)境.5 2.2 項(xiàng)目需求分析.5 2.2.1 項(xiàng)目需求介紹.5 2.2.2 自定義與其他類庫.5 2.2.3 模塊、流程描述.5 2.3 功能需求.6 2.3.1 功能需求點(diǎn)列表.6 2.3.2 其他功能需求.7 2.3.3 系統(tǒng)界面.7 2.4 系統(tǒng)輸入輸出需求.7 三軟件概要設(shè)計(jì).8 3.1 概述.8 3.1.1 編寫目的.8 3.1.2 預(yù)期讀者.8 3.2 系統(tǒng)概要設(shè)計(jì)說明.8 3.2.1 系統(tǒng)功能模塊說明.8 3.2.2 系統(tǒng)功能模塊結(jié)構(gòu)圖.8 四軟件詳細(xì)設(shè)計(jì).11 4.1.系統(tǒng)的日歷界面.11 4.1.1 系統(tǒng)主界面.11 4.1.2 系統(tǒng)的日歷特色
3、顯示.13 4.2 系統(tǒng)日程界面的設(shè)計(jì).14 生產(chǎn)實(shí)習(xí) android 日歷日程管理 3 4.2.1 日程界面的數(shù)據(jù)庫準(zhǔn)備.14 4.2.2 數(shù)據(jù)庫操作.15 4.3 添加日程界面.17 4.3.1 畫圖類.17 4.3.2 日程添加.18 4.4 日程界面.24 4.4.1 日程界面的布局.24 4.2.3 單一日程界面.26 4.2.4 標(biāo)記日程日期.28 4.5 系統(tǒng)菜單項(xiàng).29 4.5.1 日歷界面的菜單項(xiàng).29 4.5.2 其他界面菜單項(xiàng)實(shí)現(xiàn).31 4.6 天氣查詢界面設(shè)計(jì).32 4.7 系統(tǒng)主要實(shí)現(xiàn)類介紹.34 4.7.1 calendaractivity 類.34 4.7.2 c
4、alendarconvert 類.35 4.7.3 calendarview 類.35 4.7.4 scheduleall 類.36 4.7.5 scheduleinfoview 類.37 4.7.6 scheduletypeview 類.37 4.7.7 lunarcalendar 類.38 4.7.8 specialcalendar 類.39 4.7.9 weatheractivity 類.40 五.總結(jié).42 5.1 參考資料.42 5.2 總結(jié)語.42 生產(chǎn)實(shí)習(xí) android 日歷日程管理 4 一.項(xiàng)目概述 1.1 編寫目的 本文檔的編寫主要為了介紹本項(xiàng)目的開發(fā)目的,項(xiàng)目需求,以及開
5、發(fā)的情 況,將本系統(tǒng)的結(jié)構(gòu)進(jìn)行大概的介紹,以便用戶更熟悉的了解本軟件,讓用戶 在使用該軟件前,對(duì)本軟件的使用有一定的了解。 1.2 項(xiàng)目介紹 隨著智能手機(jī)的逐漸普及及其功能的多樣化、實(shí)用化,移動(dòng)設(shè)備逐漸成為 人們生活中不可或缺的一部分。目前,市場(chǎng)占有率最高的兩個(gè)移動(dòng)平臺(tái)系統(tǒng)分 別為蘋果公司的 ios,及 google 作為代表的 android 系統(tǒng),移動(dòng)端也逐漸成為 各行業(yè)商家的爭(zhēng)奪之地,程序開發(fā)人員也將戰(zhàn)場(chǎng)向移動(dòng)端擴(kuò)散。本項(xiàng)目為 android 移動(dòng)端的日歷日程管理軟件,用于顯示日歷及記錄日程,本軟件可以 瀏覽公歷日期,也可以顯示農(nóng)歷日期及公歷和農(nóng)歷假期信息,用戶可以單擊某 一天進(jìn)行日程事
6、件的添加,并瀏覽日程事件,用戶可以跳轉(zhuǎn)到指定日期查看該 日期的相關(guān)信息并查詢當(dāng)天的天氣信息。本項(xiàng)目的開發(fā)是為方便 android 移動(dòng) 端用戶在處理日常事物時(shí)提供日歷日程的服務(wù)。 1.3 軟件相關(guān)信息 軟件名稱:生活日歷 軟件版本:1.0 適用平臺(tái):android4.0 及以上 2項(xiàng)目需求 2.1 概述 2.1.1 編寫目的 本文檔的編寫主要是描述本軟件需要實(shí)現(xiàn)的功能,列出本軟件的需求點(diǎn), 作為開發(fā)人員開發(fā)目標(biāo)系統(tǒng)及編程所需的基礎(chǔ),也作為項(xiàng)目完成驗(yàn)收時(shí)作為產(chǎn) 品是否符合要求的一個(gè)參考。本文檔的預(yù)期讀者為開發(fā)人員,用戶。 生產(chǎn)實(shí)習(xí) android 日歷日程管理 5 2.1.2 項(xiàng)目概述 本項(xiàng)目的
7、目標(biāo)受眾為所有 android 用戶,android 系統(tǒng)現(xiàn)在已經(jīng)成為相當(dāng)主 流的移動(dòng)端系統(tǒng),本系統(tǒng)作為 android 端的應(yīng)用軟件,有很廣泛的受眾群。本 軟件主要為用戶提供日常生活的日歷瀏覽,日程管理,天氣查詢等相關(guān)服務(wù)。 待開發(fā)軟件名稱:生活日歷 2.1.3 運(yùn)行環(huán)境 android 4.0 及以上 2.2 項(xiàng)目需求分析 2.2.1 項(xiàng)目需求介紹 (1)日歷瀏覽:顯示日歷信息,包括公歷,農(nóng)歷,假日信息。日程添加: 在點(diǎn)擊某一日期時(shí)跳轉(zhuǎn)至日程添加界面,進(jìn)行日程信息的添加。 (2)日程刪除:在長(zhǎng)按某一日程信息時(shí)出現(xiàn)是否刪除的對(duì)話框。日程瀏覽: 點(diǎn)擊菜單日程進(jìn)入日程瀏覽界面。 (3)日期跳轉(zhuǎn):
8、選擇要查看的日期進(jìn)行跳轉(zhuǎn)。 (4)天氣查詢:輸入某一中國(guó)城市進(jìn)行當(dāng)天天氣的查詢。 2.2.2 自定義與其他類庫 1.ksoap2 android 用于調(diào)用 webservice 的第三方類庫。 2.netutils 自定義的獲取手機(jī)網(wǎng)絡(luò)狀態(tài)的類 2.2.3 模塊、流程描述 (1)主界面:用于顯示日期信息,信息包括農(nóng)歷日期,公歷日期,節(jié)日信 息,日程標(biāo)記日期,頭部 textview 包括年月信息及閏月,天干地支。 (2)日期跳轉(zhuǎn):用于用戶在輸入想要查看的日期后跳轉(zhuǎn)到指定的日期。 (3)日期轉(zhuǎn)換:用戶在輸入某一個(gè)日期后,輸出改日期的農(nóng)歷日期。 (4)顯示日程:用戶點(diǎn)擊此菜單選項(xiàng)后,系統(tǒng)跳入日程顯示
9、界面,顯示用 戶添加的所有日程。 (5)天氣查詢:用戶點(diǎn)擊此菜單按鈕后悔彈出一個(gè)輸入框,提示用戶輸入 城市,查詢指定城市的天氣信息。 (6)主界面 item:點(diǎn)擊某一日期后,彈出日程編輯界面,用戶可以編 輯 自己的日程并進(jìn)行保存。 生產(chǎn)實(shí)習(xí) android 日歷日程管理 6 據(jù)此得出本軟件運(yùn)行的大概流程,如圖 2-1 圖 2-1 軟件運(yùn)行流程 2.3 功能需求 2.3.1 功能需求點(diǎn)列表 功能名稱功能描述輸入預(yù)期輸出 日歷顯示用于顯示日期信息,包括 公立及農(nóng)歷你年月日,星 期,節(jié)假日信息,頭部應(yīng) 包含當(dāng)前年月、生肖及天 支地干。 點(diǎn)擊軟件圖標(biāo)進(jìn) 入軟件 顯示功能描述的 所有日期信息 日程添加添
10、加日程,用戶選擇日程 類型,提醒重復(fù)方式,設(shè) 置時(shí)間信息。編輯完成后 可以保存。 點(diǎn)擊主界面的 item(即某一日期) 進(jìn)入日程編輯界 面 日程跳轉(zhuǎn)用戶輸入某一日期,點(diǎn)擊 按鈕后跳轉(zhuǎn)到指定日期 在指定方位內(nèi)的 某一日期 跳轉(zhuǎn)至指定日期 進(jìn)入系統(tǒng) 主界面(日歷顯示界面) 日期跳轉(zhuǎn) 日期轉(zhuǎn)換 顯示日程 天氣查詢 (點(diǎn)擊日期進(jìn)入) 添加日程信息 生產(chǎn)實(shí)習(xí) android 日歷日程管理 7 日程瀏覽瀏覽所有日程信息列表, 可以瀏覽日程的相關(guān)信息 點(diǎn)擊菜單的日程 按鈕 顯示所有日程 日程刪除長(zhǎng)按某一日程信息彈出對(duì) 話框,用戶可以選擇是否 刪除日程。 長(zhǎng)按想要?jiǎng)h除的 日程 指定日程被刪除, 或者放棄刪除后
11、 轉(zhuǎn)至日程界面。 天氣查詢用戶輸入城市后,通過 webservice 查詢指定 城市的信息并顯示 點(diǎn)擊菜單的天氣 查詢按鈕,輸入 中國(guó)的某一城市 顯示指定城市的 天氣信息 2.3.2 其他功能需求 a在日歷顯示界面,用戶在屏幕進(jìn)行左右滑動(dòng)時(shí),顯示的日歷的月份相應(yīng) 的進(jìn)入下一個(gè)月或者上一個(gè)月的日歷。 b在日程顯示的界面,添加了添加日程菜單,用于在當(dāng)日按添加日程。 c在日歷顯示界面,今天的日期應(yīng)該特殊顯示。 d在添加日程時(shí)用戶應(yīng)該可以自己選擇想要的提醒類型。 2.3.3 系統(tǒng)界面 系統(tǒng)的界面及介紹: a主界面:默認(rèn)為日歷顯示界面。 b日程添加界面:在點(diǎn)擊某一日期后出現(xiàn),進(jìn)行日程的添加。 c日程顯示
12、界面:在點(diǎn)擊主界面的日程按鈕進(jìn)入。 d天氣查詢:點(diǎn)擊主界面菜單的天氣查詢進(jìn)入。 2.4 系統(tǒng)輸入輸出需求 在本軟件中,當(dāng)在要求輸入的時(shí)候應(yīng)該進(jìn)行輸入檢查,當(dāng)輸入的信息為空時(shí) 應(yīng)該提醒用戶輸入信息;在輸入時(shí)間信息時(shí),若超出指定范圍應(yīng)彈出相應(yīng)的 提 示信息;在輸入城市進(jìn)行天氣查詢時(shí),若無指定城市則提示無此城市的提示 信息。 三軟件概要設(shè)計(jì) 3.1 概述 3.1.1 編寫目的 本部分文檔的編寫是讓讀者盡快的了解本軟件的概要設(shè)計(jì),對(duì)軟件的運(yùn)行 生產(chǎn)實(shí)習(xí) android 日歷日程管理 8 流 程有一個(gè)大概的了解。 3.1.2 預(yù)期讀者 本部分文檔的預(yù)期讀者是詳細(xì)開發(fā)人員,開發(fā)人員,測(cè)試人員。 3.2 系
13、統(tǒng)概要設(shè)計(jì)說明 3.2.1 系統(tǒng)功能模塊說明 (1)日歷查看模塊:擁有一個(gè)完整的日歷界面,包括頭部的年月日、生肖、 閏年的顯示,還有每個(gè)日期上都分別有陽歷和陰歷的日期顯示,并且日歷中 包含了各個(gè)重要的節(jié)日或紀(jì)念日等。在日歷界面上每個(gè)日期都會(huì)跳到當(dāng)前 日 期的日程添加界面或者是日程顯示界面。日歷界面上還有對(duì)存在日程的標(biāo) 記,有利于人們更好的管理日程。 (2)日程管理模塊:在本模塊中包括總的日程顯示頁面和日歷頁面所跳轉(zhuǎn) 到的日程顯示界面或者是日程添加界面???cè)粘田@示界面每一個(gè)日程都會(huì)有它 所包含的日期、時(shí)間、日程類型、重復(fù)類型和日程內(nèi)容。日歷日期所對(duì)應(yīng) 的 日程顯示界面也是相應(yīng)的顯示。而在日程添加
14、界面中包含了顯示界面所對(duì) 應(yīng) 的各項(xiàng)數(shù)據(jù)、添加日程成功后會(huì)有對(duì)應(yīng)日歷日期的標(biāo)記。另外也有對(duì)日程 的 一系列管理操作的功能。 (3)天氣查詢模塊:在本模塊中包括對(duì)指定城市天氣的查詢和顯示。 3.2.2 系統(tǒng)功能模塊結(jié)構(gòu)圖 (1)在程序設(shè)計(jì)分析的基礎(chǔ)上,結(jié)合實(shí)際情況,得出本程序的功能模塊結(jié) 構(gòu)圖。在結(jié)構(gòu)圖中包括了功能模塊的表示及其中部分功能的實(shí)現(xiàn)原理。首先是 一個(gè)總的功能模塊的結(jié)構(gòu)圖,其中包括了系統(tǒng)設(shè)計(jì)時(shí)的總體功能概括,如 圖 3-1: 模塊描述: a.日程模塊:主要是添加日程,顯示日程概況,點(diǎn)擊日程顯示日程詳細(xì)信息。 b.主界面:主界面即為日歷顯示界面,用于顯示日歷及有日程信息的日程的標(biāo) 記。
15、c.天氣模塊:用于查詢指定城市的天氣信息。 d.總?cè)粘田@示:即顯示所有添加的日程列表。 e.單一日程顯示:顯示某一日程的詳細(xì)信息。 生產(chǎn)實(shí)習(xí) android 日歷日程管理 9 圖 3-1 系統(tǒng)模塊結(jié)構(gòu)圖 (2)在日歷模塊分為以下幾部分,如圖 3-2: 日歷日程系統(tǒng) 主界面 日程模塊天氣模塊 日歷顯示 總?cè)粘田@示 單一日程顯示 天氣查詢 生產(chǎn)實(shí)習(xí) android 日歷日程管理 10 圖 3-2 日歷模塊的組成 (3)在日程管理中的添加日程包括以下幾部分,如圖 3-3: 圖 3-3 添加日程界面的組成 (4)系統(tǒng)的主要類調(diào)用 a.程序啟動(dòng)先到 androidmanifest.xml 讀取數(shù)據(jù),啟動(dòng)
16、 calendaractivity。接著加載 main.xml 初始化 layout,接著加 calendarview,該類引用了 calendarview 類,而 calendarview 類聚合了 bordertext、borderedittext和 bordertextview(這 3個(gè)類都是負(fù)責(zé)界面 的繪制) 。因此每次重繪都會(huì)調(diào)用這三個(gè)類。 b.在主界面按 menu 按鈕可以選擇進(jìn)入自己相應(yīng)的界面。選擇“今 天”則 啟動(dòng) calendaractivity 回到日歷顯示界面, ;選擇“跳轉(zhuǎn)” 時(shí)則調(diào)用系統(tǒng)的 datepickerdialog 類彈出日期選擇界面;選擇 “日程”時(shí)則啟動(dòng)
17、scheduleall 類顯示所有日程信息,點(diǎn)擊某一日程時(shí)則啟動(dòng) scheduleinfoview 日歷顯示 日期顯示 農(nóng)歷顯示 節(jié)假日顯示 添加日程界面 日程類型選擇 重復(fù)類型選擇 日程時(shí)間選擇 日程內(nèi)容書寫 生產(chǎn)實(shí)習(xí) android 日歷日程管理 11 類顯示詳細(xì)的日程信息;選擇“日期轉(zhuǎn)換”時(shí)則啟動(dòng)calendarconvert 類來 進(jìn)行日期的跳轉(zhuǎn);選擇“天氣查詢”時(shí)則啟動(dòng)weatheractivity 類來進(jìn)入 天氣查詢界面。 四軟件詳細(xì)設(shè)計(jì) 4.1.系統(tǒng)的日歷界面 4.1.1 系統(tǒng)主界面 系統(tǒng)主界面用到的類包括 calendaractivity,calendarview (1)首先是
18、建立一個(gè)布局文件,上面一部分是顯示年月日、生肖和農(nóng)歷的 干支紀(jì)年。使用的是一個(gè) textview 類,對(duì)應(yīng)的在日歷的 calendaractivity 文 件中加入函數(shù)來添加頭部的年份等信息。首先需要寫了一個(gè) calendarview 類, 這是為日歷顯示所寫的一個(gè)類,在其中使用重載的方法定義了幾個(gè)不同參數(shù)的 calendarview,用于不同的情況。在 calendaractivity 中實(shí)例化 calendarview 并且使用 calendarview 中的一個(gè)方法 calendarview(this,getresources(),jumpmonth,jumpyear,year_c,mo
19、nth_c,da y_c);然后書寫方法來添加頭部的年份 閏哪月等信息。 (2)首先是對(duì)這個(gè)頁面的頭部進(jìn)行布局,通過動(dòng)態(tài)化的方法來完成。然后 建立一個(gè)可以進(jìn)行改變值的 stringbuffer 類型的參數(shù) textdate。對(duì)這個(gè)參數(shù) 進(jìn)行 append 操作,添加例如年月日的知道參數(shù)里。其中有一個(gè)閏年判斷的條件 函數(shù),是通過 calv.getleapmonth()的值驚醒判斷的。完成后對(duì)界面使用 settext 方法來賦值到界面上。最后是對(duì)界面的一些美化,同樣使用動(dòng)態(tài)布局 模式進(jìn)行。 (3)日歷界面中主體日期部分顯示的完成 在 calendaractivity 文件初始化實(shí)例對(duì)象時(shí)加入動(dòng)態(tài)添
20、加布局文件的方 法。我將此方法命名為 addgridview。在這個(gè)方法中同樣是先進(jìn)行動(dòng)態(tài)化布局, 由于這里用的是 gridview,這個(gè) gridview 應(yīng)用于將一系列的空間組織成二維 網(wǎng)格的形式顯示出來,所以適用于在這里進(jìn)行的日期界面的建立。同樣的首先 是動(dòng)態(tài)化布局的建立,這可以實(shí)例化 gridview 為 gridview 參數(shù)進(jìn)行的。在這 里需要添加 gridview 控件的列為 7,列寬為 46。并且還加上判斷屏幕大小的條 件,這需要加入取得屏幕大小的對(duì)應(yīng)函數(shù),這里如果是 800*480 屏幕的話,就 將列寬設(shè)置為 69。然后進(jìn)行設(shè)置水平和豎直的間距、取值邊框、設(shè)置居中等操 生產(chǎn)實(shí)
21、習(xí) android 日歷日程管理 12 作。在這個(gè)方法里面還需加入個(gè) ontouch 方法,用來將 gridview 中的觸摸事件 回傳給 gesturedetector,進(jìn)行下面的觸摸操作,即: /將gridview中的觸摸事件回傳給gesturedetector publicpublic booleanboolean ontouch(view v, motionevent event) returnreturn calendaractivity.thisthis.gesturedetector .ontouchevent(event); ); 創(chuàng)建完日歷的布局后,是在里面添加上具體的日期。
22、就當(dāng)前顯示的頁面來 說,是建立幾個(gè)對(duì)應(yīng)的參數(shù),用來顯示或傳接數(shù)據(jù)。例如在函數(shù)開始時(shí)就 string daynumber = new string49; 這是作為對(duì)gridview控件內(nèi)進(jìn)行標(biāo)記 序列的,用于下面條件語句的判斷等,還有就是界面內(nèi)的一些控件名的實(shí)例化。 然后是動(dòng)態(tài)化的對(duì)頁面進(jìn)行屬性值的設(shè)置。 其中在對(duì)日期中的第一行,即周一等值的這行,設(shè)置字的顏色及背景圖。 得出這行的位置就需要通過對(duì)參數(shù)position(對(duì)應(yīng)編號(hào))進(jìn)行判斷是否在7以內(nèi)。 下一步是當(dāng)前月信息的顯示,這也需要條件函數(shù)來判斷是否為當(dāng)前月,也 是來判斷參數(shù)position是否在范圍內(nèi)。在這個(gè)月中還需對(duì)當(dāng)天來一個(gè)特殊化, 即
23、設(shè)置當(dāng)天日期的背景為圖片current_day_bgc,字色為白。 在這些操作外,還需要得到一些數(shù)值來用于日期數(shù)據(jù)的插入,在這里建立 了個(gè)getcalendar方法,如判斷是否為閏年的函數(shù)返回值isleapyear,某月的總 天數(shù),某月的第一天是星期幾,上個(gè)月總天數(shù)。在這方法中再執(zhí)行方法 getweek,用來得出以后需要標(biāo)記的日期,這個(gè)在后面來介紹。通過上述的步驟 基本完成了日歷界面中的初步建設(shè)。 (3)由于日歷菜單需要能通過手勢(shì)觸摸來進(jìn)行翻頁,所以要在總體布局下 建立一個(gè) viewflipper 類,這個(gè)類是用來實(shí)現(xiàn)屏幕的切換效果的。先是在布局 中建立這個(gè)類,然后實(shí)例化手勢(shì) gestured
24、etector 并取得布局中 viewflipper 用于下面的調(diào)用。然后是書寫書寫手勢(shì)的各個(gè)方法,最主要的是 onfling 的方 法,在這里實(shí)現(xiàn)了頁面的向左及向右滑動(dòng)的操作,這個(gè)操作是由條件語句來實(shí) 現(xiàn)的,由滑動(dòng)兩點(diǎn)的 x 坐標(biāo)的值進(jìn)行差值計(jì)算,如果是起點(diǎn)減去重點(diǎn)大于 120 時(shí)著向左滑動(dòng),反之則向右滑動(dòng)。在滑動(dòng)操作開始,并且已切換一面后就需要 載入新的一張日歷頁面,這里又會(huì)用到參數(shù) calv,當(dāng)向左滑動(dòng)時(shí)則將參數(shù) calv 生產(chǎn)實(shí)習(xí) android 日歷日程管理 13 所代表的函數(shù) calendarview 里的 jumpmonth 加 1,代表下一個(gè)月;當(dāng)向右滑動(dòng) 時(shí)則將參數(shù) calv
25、 所代表的函數(shù) calendarview 里的 jumpmonth 減 1,代表上一 個(gè)月。為了完整性剩余的手勢(shì)函數(shù)只是寫了方法未使用。 4.1.2 系統(tǒng)的日歷特色顯示 在日歷的顯示中除了一些基本的日期顯示,在日期頁面頭部有每年相應(yīng)的 生肖和閏年顯示,在日期上有每日的陰歷以及節(jié)假日的顯示。 這里有兩個(gè)類,分別是 lunarcalendar 和 specialcalendar。在 lunarcalendar 里面包括干支紀(jì)年,陰歷,生肖,節(jié)假日等信息。例如生肖則 是建立一個(gè)字節(jié)數(shù)組來記錄十二生肖,并且用函數(shù)來傳回參數(shù)對(duì)應(yīng)的生肖。 finalfinal publicpublic string an
26、imalsyear(intint year) finalfinal string animals = newnew string 鼠, 牛, 虎, 兔, 龍, 蛇,馬, 羊, 猴, 雞, 狗, 豬 ; returnreturn animals(year - 4) % 12; 在 specialcalendar 是閏年的判斷函數(shù),每月天數(shù),以及對(duì)每月的第一天 星期的判斷。閏年通過傳回年值通過函數(shù)進(jìn)行判斷,并傳回布爾值。每月的天 數(shù)用 switch 進(jìn)行判斷賦值給月份天數(shù)的參數(shù)。對(duì)每月的第一天為星期幾的判斷 并指定。 主要代碼如下: /指定某年中的某月的第一天是星期幾 publicpublic i
27、ntint getweekdayofmonth(intint year, intint month) calendar cal = calendar.getinstance(); cal.set(year, month-1, 1); dayofweek = cal.get(calendar.day_of_week)-1; returnreturn dayofweek; 最終的效果圖如下圖4-1: 生產(chǎn)實(shí)習(xí) android 日歷日程管理 14 圖 4-1 日歷界面的最終實(shí)現(xiàn)圖 4.2 系統(tǒng)日程界面的設(shè)計(jì) 日程界面包括日程主界面(所有日程的顯示)和對(duì)應(yīng)日期日程的顯示,日 程的添加等。在日程界面涉及
28、到日程的數(shù)據(jù)存儲(chǔ),所以先介紹下關(guān)于日程的數(shù) 據(jù)存儲(chǔ)以及有日程的日期存儲(chǔ)(為日歷界面的標(biāo)記服務(wù)) 。 4.2.1 日程界面的數(shù)據(jù)庫準(zhǔn)備 (1)數(shù)據(jù)庫里表的建立 分別建立了 schedule 表(日程的表)和 scheduletagdate(標(biāo)記日期所需 的表)android 提供了標(biāo)準(zhǔn)的數(shù)據(jù)庫創(chuàng)建方式。建立 dbopenhelper 類繼承到 sqliteopenhelper ,實(shí)現(xiàn) oncreate 和 onupgrade 兩個(gè)方法。oncreate 方法是 用于初次使用軟件時(shí)生成數(shù)據(jù)庫,onupgrade 方法是用于升級(jí)軟件時(shí)更新數(shù)據(jù) 庫表結(jié)構(gòu)。 首先是 schedule 表的建立,在這個(gè)表
29、中包括日程 id、日程類型的 id、日 程重復(fù)類型的 id、日程正文內(nèi)容、日程日程時(shí)間這幾個(gè)參數(shù)。建立時(shí)對(duì)應(yīng)需要 寫上參數(shù)名、參數(shù)類型、主鍵等。 生產(chǎn)實(shí)習(xí) android 日歷日程管理 15 db.execsql(create table if not exists schedule(scheduleid integer primary key autoincrement, + scheduletypeid integer,remindid integer,schedulecontent text,scheduledate text); 下面是scheduletagdate表的建立,在這個(gè)表中
30、包括標(biāo)記的id、年信息、月 信息、日信息、日程id這幾個(gè)參數(shù)。 db.execsql(create table if not exists scheduletagdate(tagid integer primary key autoincrement, + year integer,month integer,day integer,scheduleid integer); 建立完表后是繼續(xù)寫入onupgrade方法,這個(gè)方法會(huì)在數(shù)據(jù)庫升級(jí)時(shí)被觸發(fā), 以便于軟件升級(jí)時(shí)更新表結(jié)構(gòu)。 publicpublic voidvoid onupgrade(sqlitedatabase db, intint
31、 oldversion, intint newversion) /更新數(shù)據(jù) db.execsql(drop table if exists schedule); db.execsql(drop table if exists scheduletagdate); oncreate(db); (2)再分別建立schedulevo 和scheduledatetag ,里面分別寫了表里面各 個(gè)數(shù)據(jù)的get(表示獲取某個(gè)變量值)和set(表示設(shè)置某個(gè)變量值)方法,以 便于調(diào)用。 (3)建立scheduledao文件,這個(gè)文件是用來寫數(shù)據(jù)庫的查找、刪除等方法。 首先是需要實(shí)例化dbopenhelper用于
32、數(shù)據(jù)庫數(shù)據(jù)的get與set。 privateprivate dbopenhelper dbopenhelper = nullnull; publicpublic scheduledao(context context) dbopenhelper = newnew dbopenhelper(context, schedules.db); 4.2.2 數(shù)據(jù)庫操作 下面就是對(duì)表中數(shù)據(jù)的操作了,包括了保存日程信息、查詢某一條日程信 息、查詢所有的信息、刪除日程、將日程標(biāo)記的日期保存到數(shù)據(jù)庫中。 (1)保存日程信息,先是從日程添加頁面里獲取日程類型的id、日程重復(fù) 類型的id、日程正文內(nèi)容、日程日程時(shí)間
33、這幾個(gè)參數(shù),然后是使用 contentvalues類(這個(gè)類是一個(gè)鍵值對(duì),是用來存儲(chǔ)名值對(duì),它的名一般是 string類型,而值都是基本類型)來new一個(gè)參數(shù),用這個(gè)參數(shù)的put方法將這 些個(gè)參數(shù)放入到數(shù)據(jù)庫中。 生產(chǎn)實(shí)習(xí) android 日歷日程管理 16 values.put(scheduletypeid, schedulevo.getscheduletypeid(); values.put(remindid, schedulevo.getremindid(); values.put(schedulecontent, schedulevo.getschedulecontent(); val
34、ues.put(scheduledate, schedulevo.getscheduledate(); 最后調(diào)用添加方法insert。 db.insert(schedule, nullnull, values);/插入信息 另外需要movetofirst方法來判斷是否為空,進(jìn)行相關(guān)的操作。 (2)查詢某一條日程信息,由于我這里的設(shè)計(jì)是通過對(duì)日程的點(diǎn)擊來查看 當(dāng)前點(diǎn)擊日期的詳細(xì)信息,即是根據(jù)日程的id來查看的。android sqlite的查 詢方法是query方法,它的查詢語句是: db.query(schedule, newnew stringscheduleid,scheduletypei
35、d,remindid,schedulecontent, scheduledate, scheduleid=?, newnew stringstring.valueof(scheduleid), nullnull, nullnull, nullnull); 另外還需要的是判斷語句,先用 cursor.movetofirst()判斷 curor 是否為 空值,不為空則就給 cursor 賦值,空著直接 cursor.close()來關(guān)閉。 (3)查詢所有的日程信息,由于所有日期可能不止一個(gè),所以返回值設(shè)為 數(shù)組形式。查詢依舊是用query方法,這里的的where語句相關(guān)的就直接設(shè)為 null值。其
36、他的依舊與查詢一條語句相仿。 (4)刪除日程,這里的刪除日程需要將日程及對(duì)應(yīng)日期上的標(biāo)記一起刪除, 這樣才可以便于管理,刪除使用的語句是delete。 db.delete(schedule, scheduleid=?, newnew stringstring.valueof(scheduleid);/刪除日程信息 db.delete(scheduletagdate, scheduleid=?, newnew stringstring.valueof(scheduleid);/刪除日程對(duì)應(yīng)的日期標(biāo)識(shí)信息 (5)將日程標(biāo)志日期保存到數(shù)據(jù)庫中,這里是為了將在日期上標(biāo)識(shí)的信息 存儲(chǔ)到數(shù)據(jù)庫中,方法同第
37、一步的保存相仿,只是數(shù)據(jù)的不一樣,而且使用的 是數(shù)組形式。 forfor(intint i = 0; i datetaglist.size(); i+)/以for循環(huán)的方式進(jìn)行 datetag = datetaglist.get(i); contentvalues values = newnew contentvalues(); values.put(year, datetag.getyear();/放入年信息 values.put(month, datetag.getmonth();/放入月信息 values.put(day, datetag.getday();/放入日信息 values.p
38、ut(scheduleid, datetag.getscheduleid(); /翻入日程的id db.insert(scheduletagdate, nullnull, values); /插入到表scheduletagdate中 生產(chǎn)實(shí)習(xí) android 日歷日程管理 17 (6)只查詢出當(dāng)前日程的日期,這個(gè)查詢語句是通過當(dāng)前月的年和月信息 來得到日程標(biāo)記上的所有信息。這里也是使用query語句進(jìn)行查詢的,只不過改 變了里面的查詢使用的參數(shù)。所以方法類同于上面所有日程的查詢。 (7)當(dāng)點(diǎn)擊每一個(gè)gridview中item時(shí),查詢出此日期上所有的日程標(biāo)記 (scheduleid),通過點(diǎn)擊后
39、得到對(duì)應(yīng)日期的年月日信息,然后用query方法得到 次日程標(biāo)記的id,用于后面得到想到相關(guān)的日程信息。 query(scheduletagdate, newnew stringscheduleid, year=? and month=? and day=?, newnew stringstring.valueof(year),string.valueof(month),string.valueof(d ay), nullnull, nullnull, nullnull); (8)關(guān)閉數(shù)據(jù)庫。判斷后直接關(guān)閉當(dāng)前數(shù)據(jù)庫。 ifif(dbopenhelper != nullnull) dbopenh
40、elper.close(); 4.3 添加日程界面 新增界面是通過對(duì)日歷界面上單一日期的點(diǎn)擊來實(shí)現(xiàn)跳轉(zhuǎn)的。 4.3.1 畫圖類 (1)首先是帶下邊框的textview,主要代碼如下: paint paint = newnew paint();/ 實(shí)例化一支畫筆 paint.setcolor(android.graphics.color.black); / 設(shè)置所繪制的邊框顏色為黑色 canvas.drawline(0, thisthis.getheight() - 1, thisthis.getwidth() - 1, thisthis.getheight() - 1, paint); / 繪
41、制下邊框 (2)帶邊框的edittext,代碼如下: paint paint = new paint();/ 實(shí)例化一支畫筆 paint.setstrokewidth(1);/設(shè)置空心現(xiàn)款 paint.setstyle(style.stroke);/設(shè)置樣式 paint.setcolor(android.graphics.color.gray);/設(shè)置顏色 paint.setantialias(true);/抗鋸齒方法 rectf rectf = new rectf(2,0,this.getwidth()-2,this.getheight()-2); /現(xiàn)在設(shè)置相關(guān)的參數(shù)用于下面的操作。 ca
42、nvas.drawroundrect(rectf, 8, 8, paint);/畫上圓弧 (3)最后一個(gè)是帶邊框的textview 這個(gè)與上述的edittext相類似。完成這些邊框類之后就是使用它們,這個(gè) 生產(chǎn)實(shí)習(xí) android 日歷日程管理 18 與以前的基本類相似,只是將布局中原來的基本類名類,如textview,改為對(duì) 應(yīng)路徑的名稱為com.manage.bordertext.bordertextview。(bordertextview 是新建的textview類的文件名。) (4)新增日程界面的布局,文件名為schedule.xml (5)分別為日程類型及重復(fù)類型這兩個(gè)類型的選擇的點(diǎn)
43、擊框。 android:layout_below=id/scheduletop/文本框的位置設(shè)置 android:layout_width=160dp/文本框的寬 android:layout_height=40dp/文本框的高 android:drawableright=drawable/schedule_type 下面還有時(shí)間的點(diǎn)擊修改框、日程文本框及最后的保存及取消的按鈕。最后效 果如圖 4-2: 圖 4-2 日程添加界面效果圖 生產(chǎn)實(shí)習(xí) android 日歷日程管理 19 4.3.2 日程添加 新增界面的上方有兩個(gè) textview 是用來選擇類型的,另有一個(gè)時(shí)間顯示框 可以用來顯示傳
44、過來的時(shí)間或者修改時(shí)間。選擇類型的實(shí)現(xiàn)方法以其中一個(gè)為 例 首先是取得這 textview 的位置,實(shí)例化它,以便于后面的使用, scheduletype = (bordertextview) findviewbyid(r.id.scheduletype); 點(diǎn)擊時(shí)跳到選擇界面并傳值,跳轉(zhuǎn)的時(shí)候需要獲得原來界面上的日程類型,這 里需要在點(diǎn)擊觸發(fā)效果的方法上將數(shù)據(jù)傳到類型選擇頁面上去,用于顯示它的 默認(rèn)值。 scheduletype.setonclicklistener(newnew onclicklistener() /日程類型的點(diǎn)擊事件 publicpublic voidvoid oncli
45、ck(view v) /點(diǎn)擊時(shí)方法實(shí)現(xiàn)的內(nèi)容 schtext = scheduletext.gettext().tostring(); intent intent = newnew intent(); intent.setclass(scheduleaddactivity.thisthis, scheduletypeview.classclass); /實(shí)現(xiàn)頁面從日程添加頁面到日程類型選擇頁面的跳轉(zhuǎn) intent.putextra(sch_remind, newnew intintsch_typeid,remindid); /跳轉(zhuǎn)時(shí)需要傳過去的數(shù)據(jù),兩個(gè)數(shù)據(jù)組成一個(gè)數(shù)組傳過去 startact
46、ivity(intent);/運(yùn)行 ); 這里還包括一個(gè)calendarconstant類,這個(gè)類是用于記錄日程類型和重復(fù)類型 的字符數(shù)組,以便于類型選擇的調(diào)用。 publicpublic classclass calendarconstant publicpublic finalfinal staticstatic string sch_type = 會(huì)議, 約會(huì), 電話, 紀(jì)念日, 生日, 課程, 其他 ; / 日程類型的值 publicpublic finalfinal staticstatic string remind = 當(dāng)天有效,每天重復(fù),每 周重復(fù),每月重復(fù),每年重復(fù);/重復(fù)類
47、型的值 這里是存儲(chǔ)scheduletypeview和scheduleremindview里面選項(xiàng)的value值。 這個(gè)頁面是通過實(shí)例化來實(shí)現(xiàn)布局的: linearlayout.layoutparams params = newnew linearlayout.layoutparams(layoutparams.fill_parent, layoutparams.wrap_content); /設(shè)置寬與高 cc = newnew calendarconstant(); layout = newnew linearlayout(thisthis); / 實(shí)例化布局對(duì)象 生產(chǎn)實(shí)習(xí) android 日
48、歷日程管理 20 layout.setorientation(linearlayout.vertical); layout.setbackgroundresource(r.drawable.schedule_bk); /設(shè)置背景圖片 layout.setlayoutparams(params); 實(shí)例化布局里的組件為后面使用時(shí)做準(zhǔn)備,用于給這些組件添加各項(xiàng)參數(shù)。 group = newnew radiogroup(thisthis);/選擇按鈕組 btsave = newnew bordertextview(thisthis,nullnull);/保存按鈕實(shí)例化 btcancel = newn
49、ew bordertextview(thisthis, nullnull); /取消按鈕實(shí)例化 texttop = newnew bordertextview(thisthis, nullnull); /頂部文本實(shí)例化 這里有個(gè)從scheduleaddactivity傳來的值,是日程新增界面里的日程類型 的已選擇的id值,用來選擇radiogroup的默認(rèn)選項(xiàng) intent intent = getintent(); intint sch_remind = intent.getintarrayextra(sch_remind); ifif(sch_remind != nullnull) /判斷
50、不為空時(shí)進(jìn)行下列的賦值 sch_typeid = sch_remind0; /日程類型的賦值 remindid = sch_remind1; /重復(fù)類型的賦值 forfor(intint i = 0 ; i cc.sch_type.length ; i+) radio = newnew radiobutton(thisthis); ifif(i = sch_typeid) /判斷是否是當(dāng)前選擇的項(xiàng) radio.setchecked(truetrue); /設(shè)置為已選擇 radio.settext(cc.sch_typei); /設(shè)置文本內(nèi)容 radio.setid(i); /設(shè)置編號(hào) radi
51、o.settextcolor(color.black); /設(shè)置文本顏色 group.addview(radio); /設(shè)這系列的內(nèi)容添加到數(shù)組中 將radiogroup加入到布局中去: layout.addview(group); 最終效果圖如圖4-3: 生產(chǎn)實(shí)習(xí) android 日歷日程管理 21 圖 4-3 日程類型選擇的效果圖 radiogroup的觸發(fā)效果,再點(diǎn)擊這里的每一個(gè)選項(xiàng)都會(huì)顯示已選中并且會(huì) 將選擇項(xiàng)的id值傳到schtype_temp中用于后面的使用。 group.setoncheckedchangelistener(newnew oncheckedchangelisten
52、er() override /重寫oncheckedchanged方法 publicpublic voidvoid oncheckedchanged(radiogroup group, intint checkedid) schtype_temp = checkedid;/給在上面建立的參數(shù)賦值 ); 添加確定和取消按鈕(以確定按鈕為例),按鈕在這邊也是通過動(dòng)態(tài)方法 來實(shí)施的,先新建一個(gè)布局參數(shù) laybutton = newnew linearlayout(thisthis); 然后給參數(shù)設(shè)置各項(xiàng)屬性,這些都是按鈕所需要兼?zhèn)涞幕緦傩?,有利?按鈕的美觀與實(shí)用性, laybutton.set
53、orientation(linearlayout.horizontal); laybutton.setlayoutparams(params); btsave.settextcolor(color.black); /設(shè)置文本顏色 btsave.setbackgroundresource(r.drawable.top_day); /設(shè)置背景 btsave.settext(確定); /設(shè)置按鈕上的文本信息 btsave.setheight(47); /設(shè)置高 btsave.setwidth(160); /設(shè)置寬 btsave.setgravity(gravity.center); /設(shè)置按鈕位置
54、btsave.setclickable(truetrue); /設(shè)置按鈕的可點(diǎn)擊性 laybutton.addview(btsave); /將保存按鈕添加到按鈕參數(shù)中 最后將整個(gè) laybutton 的參數(shù)加入到整體布局中去,這里面包括添加的保 存和取消按鈕這兩個(gè)功能按鈕。 layout.addview(laybutton); 生產(chǎn)實(shí)習(xí) android 日歷日程管理 22 按鈕的界面建立以后這需要為這兩個(gè)按鈕添加它上面的觸發(fā)效果,首先是確定 按鈕,這個(gè)按鈕的設(shè)計(jì)是當(dāng)點(diǎn)擊按鈕后則會(huì)將已得到的schtype_temp值賦給 sch_typeid,然后繼續(xù)通過傳值的方法將其返還到日程添加界面去。這里
55、傳值 的方法與從日程添加界面?zhèn)髦颠^來的方法相類似。 /觸發(fā)確定按鈕 btsave.setonclicklistener(newnew onclicklistener() publicpublic voidvoid onclick(view v) sch_typeid = schtype_temp; /將上面得到的schtype_temp默認(rèn)值或改變后的值傳給傳sch_typeid。 intent intent = newnew intent(); intent.setclass(scheduletypeview.thisthis, scheduleaddactivity.classclass)
56、; /設(shè)置跳轉(zhuǎn)的class文件參數(shù) intent.putextra(schtype, sch_typeid); /將上面得到的sch_typeid傳到schtype中以便于調(diào)用 startactivity(intent); ); 下一步是時(shí)間顯示框的獲得時(shí)間和修改時(shí)間后的獲得,時(shí)間框時(shí)間的獲得 需要從日期頁面?zhèn)魅霑r(shí)間數(shù)據(jù)到本頁面上來,這里的一系列數(shù)據(jù)都放在名為 scheduledate的數(shù)組中。 intent.putstringarraylistextra(scheduledate, scheduledate);/需要傳 遞的數(shù)據(jù) intent.setclass(calendaractivit
57、y.thisthis, scheduleinfoview.classclass);/用于實(shí)現(xiàn)從單一日程界面跳轉(zhuǎn)到日程界面上去 intent.putextra(scheduleid, scheduleids); startactivity(intent); /運(yùn)行 其中scheduleids的數(shù)據(jù)的取得是通過數(shù)據(jù)庫來取的,方法用的就是 scheduledao文件中的數(shù)據(jù)庫查詢方法getschedulebytagdate方法來實(shí)現(xiàn)的,通 過所點(diǎn)擊日期上的標(biāo)記來得到對(duì)應(yīng)日期相關(guān)聯(lián)的日程信息,可以是一個(gè)或者幾 個(gè),所以使用的是字符串?dāng)?shù)組的形式得到日程的id值。 string scheduleids =
58、 dao.getschedulebytagdate(integer.parseint(scheduleyear), integer.parseint(schedulemonth), integer.parseint(scheduleday); 然后是任務(wù)頁面獲得時(shí)間信息,這里的時(shí)間信息包括年月日和星期,都是 用于顯示在日程選擇框上的。而這些日期信息都是從scheduledate這個(gè)數(shù)組中 得來,存在于數(shù)組的各個(gè)位置,首先取得年月日和星期的信息,用于顯示。 生產(chǎn)實(shí)習(xí) android 日歷日程管理 23 scheduleyear = scheduledate.get(0);/日程年份 schedu
59、lemonth = scheduledate.get(1); /日程月份 tempmonth = schedulemonth; /日程年份 ifif (integer.parseint(schedulemonth) 10) schedulemonth = 0 + schedulemonth; /判斷如果當(dāng)前月份小于10時(shí)則在月號(hào)前加0以使得其美觀。 scheduleday = scheduledate.get(2); tempday = scheduleday; ifif (integer.parseint(scheduleday) 10) scheduleday = 0 + schedule
60、day; /判斷如果當(dāng)前天小于10時(shí)則在天前加0 week = scheduledate.get(3); string hour_c = string.valueof(hour); /將小時(shí)數(shù)賦值給所設(shè)參數(shù) string minute_c = string.valueof(minute); /將分鐘數(shù)賦值給所設(shè)參數(shù) ifif(hour 10) hour_c = 0+hour_c; /判斷如果當(dāng)前小時(shí)數(shù)小于10時(shí)則在小時(shí)數(shù)前加0 ifif(minute 0)/判斷正文的長(zhǎng)度 content = content.substring(0, startline)+.; elseelse ifif(co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年員工工資保密協(xié)議模板
- 第四單元-兩、三位數(shù)除以一位數(shù)(單元測(cè)試)-蘇教版數(shù)學(xué)三年級(jí)上冊(cè)(含解析)-
- 期末學(xué)業(yè)水平測(cè)試題(卷)-語文三年級(jí)上冊(cè)(部編版)
- 2025年黑龍江建筑職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫1套
- 2025年湖南省湘潭市單招職業(yè)傾向性測(cè)試題庫參考答案
- 中學(xué)非球類運(yùn)動(dòng)教學(xué)設(shè)計(jì)
- 專題18 電功率-2025年中考《物理》一輪復(fù)習(xí)知識(shí)清單與解題方法
- 2025年度土地承包種植與農(nóng)業(yè)科技成果轉(zhuǎn)化合同
- 2025年度云計(jì)算服務(wù)器采購及運(yùn)維服務(wù)合同
- 2025年度員工向公司借款合同爭(zhēng)議處理規(guī)則合同
- (正式版)HG∕T 21633-2024 玻璃鋼管和管件選用規(guī)定
- 張祖慶祖父的園子教學(xué)課件
- 人教版《道德與法治》二年級(jí)下冊(cè)全冊(cè)優(yōu)秀課件
- 《現(xiàn)代漢語語法》PPT課件(完整版)
- 性病實(shí)驗(yàn)室檢測(cè)與質(zhì)量管理
- 高樁碼頭施工組織設(shè)計(jì)(福建)
- 這一封書信來得巧
- 監(jiān)獄服裝加工企業(yè)開展全面
- 標(biāo)書密封條格式模版(共19頁)
- 小學(xué)一年級(jí)硬筆書法入門(課堂PPT)
- ARM學(xué)習(xí)資料.Cortex-M3處理器體系結(jié)構(gòu)
評(píng)論
0/150
提交評(píng)論