版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)訓(xùn)報(bào)告實(shí)訓(xùn)項(xiàng)目名稱基于Android計(jì)算器的開發(fā)與測(cè)試二級(jí)學(xué)院信息工程學(xué)院專業(yè)班級(jí)11級(jí)姓名學(xué)號(hào)日期2014-11-19項(xiàng)目名稱基于安卓計(jì)算器的開發(fā)與測(cè)試地點(diǎn)教13603報(bào)告內(nèi)容在本報(bào)告中,我們主要介紹了國內(nèi)目前手機(jī)系統(tǒng)和軟件的現(xiàn)狀和發(fā)展,針對(duì)這方面我們?cè)O(shè)計(jì)了基于Android計(jì)算器。報(bào)告內(nèi)容大致分為三個(gè)部分。第一部分首先介紹了需求分析,其中介紹了計(jì)算器最基本的功能。之后還有一些按鍵的設(shè)置以及計(jì)算器的基本功能。第二部分我們介紹了關(guān)于計(jì)算器的總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)其中我們用了兩個(gè)流程圖來表示,分別是程序設(shè)計(jì)流程圖和軟件設(shè)計(jì)流程圖。然后還包含了計(jì)算器模塊的設(shè)計(jì)。第三部分為計(jì)算器的測(cè)試部分,其中我們對(duì)計(jì)算器進(jìn)行了多方的測(cè)試。此外還有測(cè)試用例圖。教師評(píng)語成績:教師簽名:摘要Android是當(dāng)今最重要的手機(jī)開發(fā)平臺(tái)之一,它是建立在Java基礎(chǔ)之上的,能夠迅速建立手機(jī)軟件的解決方案。Android的功能十分強(qiáng)大,成為當(dāng)今軟件行業(yè)的一股新興力量。Android基于Linux平臺(tái),由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,具有以下5個(gè)特點(diǎn):開放性、應(yīng)用程序無界限、應(yīng)用程序是在平等條件下創(chuàng)建的,應(yīng)用程序可以輕松的嵌入網(wǎng)絡(luò)、應(yīng)用程序可以并行運(yùn)行。而簡(jiǎn)單計(jì)算器又是手機(jī)上必備的小程序,所以此次創(chuàng)新實(shí)踐很有意義。并且具有很強(qiáng)的使用性。關(guān)鍵字:計(jì)算器,Android,移動(dòng)設(shè)備目錄TOC\o"1-3"\h\u1緒論 51.1 研究背景 52游戲系統(tǒng)開發(fā)平臺(tái) 63系統(tǒng)分析與設(shè)計(jì) 73.1 可行性研究 73.2 系統(tǒng)的需求分析 73.3 系統(tǒng)的優(yōu)勢(shì) 83.4系統(tǒng)的流程 84.模板設(shè)計(jì)與實(shí)現(xiàn) 95測(cè)試用列和結(jié)果 125.1測(cè)試用列 125.2測(cè)試用列展示圖 126小結(jié) 15參考文獻(xiàn) 16附錄: 171緒論研究背景計(jì)算器背景目前手機(jī)可以說是普及率非常高的電子設(shè)備了,由于其便于攜帶,使用方便,資費(fèi)適中等等原因,現(xiàn)在手機(jī)已經(jīng)在一定程度開始代替固定電話的通話功能,以及一些原來電腦軟件上的功能了。手機(jī)上的軟件也隨著手機(jī)的發(fā)展變得豐富起來了,時(shí)至今日已經(jīng)出現(xiàn)了很多專門制作手機(jī)軟件的公司,雖然制作的多是游戲軟件,但是一些輔助性的工具軟件也有了很多.我們?cè)诖舜蜗到y(tǒng)中所做的工作主要是設(shè)計(jì)整個(gè)系統(tǒng)以及利用編程語言實(shí)現(xiàn)整個(gè)系統(tǒng),使系統(tǒng)能夠正確的運(yùn)行計(jì)算功能。Android系統(tǒng)簡(jiǎn)介Android系統(tǒng)構(gòu)架簡(jiǎn)介:Android是一個(gè)基于Linux?V2.6內(nèi)核的交互性操作環(huán)境,同時(shí)它也是一個(gè)分層系統(tǒng),Android系統(tǒng)架構(gòu)顯示如下圖1.1。圖1.1系統(tǒng)架構(gòu)圖應(yīng)用層由所有的Android應(yīng)用程序組成。其中包括電子郵件客戶端,SMS程序,地圖,瀏覽器,聯(lián)系人及其他。所有的應(yīng)用程序都是用Java編程語言編寫的。1.Activity顧名思義,Activity就是活動(dòng)。應(yīng)用程序必須至少包含一個(gè)Activity。Activity提供了一個(gè)虛擬的用戶接口,每一個(gè)Activity都有一個(gè)默認(rèn)的窗口可以用來顯示用戶界面,一般情況下,它是全屏的窗口。例如,影音播放軟件的每個(gè)用戶界面就是Activity。2.ServiceService與Activity的主要區(qū)別在于,Service是在后臺(tái)活動(dòng)的,它沒有用戶界面。典型的應(yīng)用場(chǎng)景是,用戶選擇了一個(gè)播放列表開始播放后,離開了該用戶界面(Activity),如果仍然希望歌曲不會(huì)暫停,就可以用Service去調(diào)用播放器,而不是在Activity中調(diào)用播放器。3.Intent在Android中,每一個(gè)行為都可以抽象為一個(gè)Intent??梢院?jiǎn)單地把Intent理解為一個(gè)包含了數(shù)據(jù)的消息。Intent可以用于啟動(dòng)一個(gè)Act-ivity或者Service,可以用于進(jìn)程間的通信。事實(shí)上,應(yīng)用程序的啟動(dòng)也是通過Intent實(shí)現(xiàn)的。4.ContentprovidersAndroid平臺(tái)內(nèi)置了一套SQLite數(shù)據(jù)儲(chǔ)存機(jī)制,并包含一系列管理SQLiteDatabase的相關(guān)方法。在應(yīng)用程序中,可以通過Contentprov-iders訪問數(shù)據(jù)庫。每個(gè)Contentprovider都定義了一系列的方法用于訪問它對(duì)應(yīng)的數(shù)據(jù)庫。應(yīng)用程序在新建數(shù)據(jù)庫時(shí)也可以定義相應(yīng)的Con-tentprovider用于向其他應(yīng)用程序共享數(shù)據(jù)。一般情況下,應(yīng)用程序不直接調(diào)用Contentprovider定義的函數(shù),而是通過ContentResolver間接調(diào)用。2游戲系統(tǒng)開發(fā)平臺(tái)采用Eclipse開發(fā)工具,在Windows7下進(jìn)行,基于Android4.2.2操作系統(tǒng),使用的語言是Java語言。環(huán)境搭建:JDK安裝Eclipse安裝AndroidSDK安裝ADT安裝創(chuàng)建AVDJDK(JavaDevelopmentKit)是SunMicrosystems針對(duì)Java開發(fā)員的產(chǎn)品。自從Java誕生以來,JDK已經(jīng)成為最廣泛的JavaSDK。JDK是整個(gè)Java的核心內(nèi)容,包括了Java運(yùn)行環(huán)境、Java工具和Java基礎(chǔ)類庫三部分。從Sun的JDK1.5開始,提供了一些非常使用的功能,其版本也不斷更新,運(yùn)行效率得到了非常大的提高。Eclipse是一個(gè)開放源代碼的、基于Java的可擴(kuò)展開發(fā)平臺(tái)。就其本身而言,它只是一個(gè)框架和一組服務(wù),用于通過插件組建構(gòu)建開發(fā)環(huán)境。Eclipse附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括Java開發(fā)工具(JavaDevelopmentKit,JDK)。AndroidSDK即軟件開發(fā)工具包(softwaredevelopmentkit)。被軟件開發(fā)工程師用于為特定的軟件包、軟件架構(gòu)、硬件平臺(tái)、操作系統(tǒng)等建立應(yīng)用軟件工具的集合。因此AndroidSDK是Android專屬的開發(fā)工具包。其授權(quán)協(xié)議為Apache,開發(fā)語言為Java、需要Android操作系統(tǒng)的支持。[2]3系統(tǒng)分析與設(shè)計(jì)可行性研究可行性研究是為了弄清楚系統(tǒng)開發(fā)的項(xiàng)目是不是可以實(shí)現(xiàn)和值得進(jìn)行研究的過程,實(shí)際上是一次大大簡(jiǎn)化系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的過程,所以,進(jìn)行可執(zhí)行性的分析是非常必要的,也是很重要的,經(jīng)過最初的設(shè)計(jì)目標(biāo)和進(jìn)行的實(shí)時(shí)調(diào)查得出以下四點(diǎn)的可行性分析:(1)技術(shù)可行性:Eclipse+AndroidADT的技術(shù)已經(jīng)較為成熟,通過SUN公司(現(xiàn)被ORCEL公司收購)推出的跨平臺(tái)、動(dòng)態(tài)的JAVA語言進(jìn)行開發(fā)。(2)運(yùn)行可行性:該系統(tǒng)需要Android虛擬機(jī)環(huán)境,Eclipse中安裝ADT,DDMS等GoogleAndroid相關(guān)插件。其運(yùn)行環(huán)境已經(jīng)相當(dāng)穩(wěn)定,它功能豐富,包括了完備的Android程序的編碼、調(diào)試、測(cè)試和發(fā)布功能,其中支持所有Android應(yīng)用開發(fā)相關(guān)技術(shù),包括SQLite,Skia,3D制作,AndroidXML,能夠很好的發(fā)布Android的應(yīng)用程序APK包。(3)法律可行性:因?yàn)槭亲灾鏖_發(fā)設(shè)計(jì),所以不會(huì)構(gòu)成侵權(quán),在法律上是可行的。通過以上的可行性分析,將采用Eclipse+AndroidADT+DDMS技術(shù),運(yùn)用JAVA語言進(jìn)行系統(tǒng)的開發(fā)。系統(tǒng)的需求分析根據(jù)分析需求,這個(gè)系統(tǒng)必須實(shí)現(xiàn)以下的功能:(1)實(shí)現(xiàn)簡(jiǎn)單的數(shù)字計(jì)算功能。作為計(jì)算器,其核心就是加減乘除。(2)能夠在手機(jī)里面以良好的界面。簡(jiǎn)單計(jì)算器能夠給予用戶良好的人機(jī)互動(dòng)界面。系統(tǒng)的優(yōu)勢(shì)Android是以Linux為核心的手機(jī)操作平臺(tái),作為一款開放式的操作系統(tǒng),隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng)。3.4系統(tǒng)的流程本程序的流程是一個(gè)開機(jī)畫面,開機(jī)畫面之后就是計(jì)算機(jī)的主頁面了所有這個(gè)簡(jiǎn)單程序的流程圖如圖3.1所示。開始開始顯示計(jì)算機(jī)界面顯示計(jì)算機(jī)界面輸入數(shù)值輸入數(shù)值選擇功能鍵選擇功能鍵判斷選項(xiàng)判斷選項(xiàng)加加減乘除clear結(jié)束結(jié)束 圖3.1流程圖4.模板設(shè)計(jì)與實(shí)現(xiàn)4.1計(jì)算模塊詳細(xì)設(shè)計(jì)系統(tǒng)要完成整個(gè)的計(jì)算器的計(jì)算功能,那么計(jì)算模塊就是整個(gè)系統(tǒng)的重點(diǎn)模塊。沒有計(jì)算模塊系統(tǒng)就不能順利的完成計(jì)算,就無法達(dá)到用戶的要求。所以計(jì)算模塊的設(shè)計(jì)也是本次系統(tǒng)設(shè)計(jì)中的重點(diǎn)。系統(tǒng)想要能在屏幕上顯示出計(jì)算器的樣子要有整體的布局,在本模塊中要完成布局的具體設(shè)計(jì),使用戶能夠看到整個(gè)計(jì)算器的畫面。同時(shí)系統(tǒng)想完成計(jì)算功能必須要處理用戶的輸入,當(dāng)輸入模塊的監(jiān)聽傳到計(jì)算模塊中時(shí),計(jì)算模塊就要根據(jù)相應(yīng)的方法進(jìn)行進(jìn)一步的處理。這部分主要是對(duì)輸入進(jìn)行的邏輯判斷,基本會(huì)通過ifelse來實(shí)現(xiàn)邏輯判斷。4.2用戶界面設(shè)計(jì)界面設(shè)計(jì)應(yīng)該盡量簡(jiǎn)潔而美觀,應(yīng)該具有良好的交互性。當(dāng)然,我們每個(gè)人可以根據(jù)自己的喜好來進(jìn)行設(shè)計(jì),根據(jù)我個(gè)人的喜好,我最終設(shè)計(jì)出來的計(jì)算器界面如圖4.1所示。圖4.1界面圖部分代碼:<TableLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:stretchColumns="1"><TableRow><EditTextandroid:id="@+id/result"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@android:drawable/editbox_background"android:layout_span="4"android:textSize="48sp"android:gravity="right|center_vertical"android:cursorVisible="false"android:editable="false"android:lines="1"/></TableRow>4.3計(jì)算模塊設(shè)計(jì)的實(shí)現(xiàn)計(jì)算模塊則主要描述了計(jì)算器的整體,實(shí)現(xiàn)了計(jì)算器的界面,定義了用戶單擊的處理辦法,通過定義的處理辦法來完成用戶的操作命令,實(shí)現(xiàn)用戶的計(jì)算要求,這些計(jì)算要求包括了數(shù)值的輸入,小數(shù)點(diǎn)的輸入,正負(fù)號(hào)的輸入,記憶相關(guān)功能的完成,加、減、乘、除等各種計(jì)算功能的完成,運(yùn)算符的替換,初始化系統(tǒng)等等。部分代碼:privateclassCommandActionimplementsOnClickListener{@OverridepublicvoidonClick(Viewview){Buttonbtn=(Button)view;StringinputCommand=(String)btn.getText();if(firstFlag){//首次輸入"-"的情況if(inputCommand.equals("-")){editText.setText("-");//顯示區(qū)域的內(nèi)容設(shè)置為"-"firstFlag=false;//改變首次輸入的標(biāo)記}}else{if(!clearFlag){//如果flag=false不需要清空顯示區(qū)的值,就調(diào)用方法計(jì)算jsp(Double.parseDouble(editText.getText().toString()));//保存顯示區(qū)域的值,并計(jì)算}//保存你點(diǎn)擊的運(yùn)算符lastCommand=inputCommand;clearFlag=true;//因?yàn)槲疫@里已經(jīng)輸入過運(yùn)算符,}}}加、減、乘、除等各種計(jì)算功能的實(shí)現(xiàn):privatevoidjsp(doublex){if(lastCommand.equals("+")){result+=x;}elseif(lastCommand.equals("-")){result-=x;}elseif(lastCommand.equals("*")){result*=x;}elseif(lastCommand.equals("/")){result/=x;}elseif(lastCommand.equals("=")){result=x;}editText.setText(""+result);}}5測(cè)試用列和結(jié)果5.1測(cè)試用列通過以下的測(cè)試用例進(jìn)行對(duì)游戲各功能模塊的測(cè)試并加以修改,如表5.1所示。測(cè)試編號(hào)測(cè)試輸入期望結(jié)果實(shí)際結(jié)果11+23.03.021*22.02.031/20.50.541/0無結(jié)果錯(cuò)誤51-(-3)4.0-2.06--2程序錯(cuò)誤程序錯(cuò)誤表5.1測(cè)試用例表5.2測(cè)試用列展示圖1.測(cè)試1+2時(shí)的狀態(tài)如圖5.2所示:圖5.2測(cè)試結(jié)果圖2.測(cè)試1*2時(shí)如圖5.3所示:圖5.3測(cè)試結(jié)果圖3.測(cè)試1/2時(shí)如圖5.4所示:圖5.4測(cè)試結(jié)果圖測(cè)試1/0時(shí)如圖5.5所示:圖5.5測(cè)試結(jié)果圖5.測(cè)試1-(-3)如圖5.6所示:圖5.6測(cè)試結(jié)果圖6.測(cè)試輸入--2時(shí)如圖5.7所示:圖5.7測(cè)試結(jié)果圖6小結(jié)這次項(xiàng)目android計(jì)算器項(xiàng)目設(shè)計(jì)是在eclipse平臺(tái)下設(shè)計(jì),到現(xiàn)在為止,該系統(tǒng)的功能基本符合了普通計(jì)算器的要求,整個(gè)系統(tǒng)界面簡(jiǎn)單明了,使用起來十分方便,具有普通計(jì)算器的基本功能,同時(shí)拓展了一些普通計(jì)算器上沒有的部分科學(xué)計(jì)算功能。在整個(gè)開發(fā)過程中,從需求分析到總體架構(gòu)的構(gòu)思,到最后代碼的編寫我投入了大量的時(shí)間和精力,對(duì)系統(tǒng)中的每個(gè)功能都進(jìn)行了反復(fù)的調(diào)試,修改。因?yàn)檫@是我是第一次系統(tǒng)性的進(jìn)行軟件的開發(fā),不論是在知識(shí)層面、開發(fā)平臺(tái)的使用層面還是經(jīng)驗(yàn)方面都有著很大的欠缺和不足,因此本軟件難免會(huì)有一些功能不完善、界面不美觀等一些不盡如人意的地方,但是再短短一個(gè)星期的時(shí)間內(nèi),我已經(jīng)進(jìn)行了很大的努力。通過這個(gè)android計(jì)算器項(xiàng)目設(shè)計(jì),我不經(jīng)鞏固了我們?cè)跁旧蠈W(xué)到和平時(shí)老師傳授的知識(shí),而且還學(xué)到了許多書本上學(xué)不到的知識(shí),并運(yùn)用了網(wǎng)絡(luò)這個(gè)平臺(tái)查詢一些不明白的知識(shí)點(diǎn)。指導(dǎo)老師在我軟件代碼編寫和后期軟件調(diào)試期間,給我很大的幫助。要謝謝各位幫過我的老師和同學(xué)。這次的實(shí)驗(yàn)讓我對(duì)我的學(xué)過的知識(shí)有了深一步的了解。參考文獻(xiàn)[1]劉敏.
移動(dòng)終端的Android移植與應(yīng)用程序設(shè)計(jì)[D].西安電子科技大學(xué)2011[2]王蕾.
哈爾濱招行Android手機(jī)銀行匯率換算模塊的設(shè)計(jì)與實(shí)現(xiàn)[D].吉林大學(xué)2011[3]施金蘭.
基于Android平臺(tái)的網(wǎng)絡(luò)共享研究與實(shí)現(xiàn)[D].華東師范大學(xué)2011[4]趙建勛.
基于Android平臺(tái)的移動(dòng)位置服務(wù)的開發(fā)與實(shí)現(xiàn)[J].現(xiàn)代商貿(mào)工業(yè).2010(20)[5]李林濤,朱珊虹.基于Android系統(tǒng)的手機(jī)游戲黑白棋的設(shè)計(jì)與實(shí)現(xiàn)[J].新鄉(xiāng)學(xué)院學(xué)報(bào)(自然科學(xué)版).2011(03)[6]叢秋波.用于Android手機(jī)操作系統(tǒng)的視頻引擎[J].電子設(shè)計(jì)技術(shù).2010(07)[7]王豐,付明棟,馮海亮,施玉海.智能終端圖形用戶界面設(shè)計(jì)與實(shí)現(xiàn)[J].廣播電視信息.2011(08)[8]溫敏,艾麗蓉,王志國.Android智能手機(jī)系統(tǒng)中文件實(shí)時(shí)監(jiān)控的研究與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程.2009(07)[9]劉牛.
基于Android平臺(tái)的數(shù)字電視機(jī)頂盒模擬器的研究與開發(fā)[D].蘭州大學(xué)2012[10]王康.
AndroidRIL研究及其在無線通訊模塊上的實(shí)現(xiàn)[D].太原科技大學(xué)2012附錄:<?xmlversion="1.0"encoding="utf-8"?><TableLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:stretchColumns="1"><TableRow><EditTextandroid:id="@+id/result"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@android:drawable/editbox_background"android:layout_span="4"android:textSize="48sp"android:gravity="right|center_vertical"android:cursorVisible="false"android:editable="false"android:lines="1"/></TableRow><TableRowandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:layout_weight="1"><Buttonandroid:id="@+id/num7"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/setText"android:layout_weight="1"/><Buttonandroid:id="@+id/num8"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/a"android:layout_weight="1"/><Buttonandroid:id="@+id/num9"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/b"android:layout_weight="1"/><Buttonandroid:id="@+id/divide"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/n"android:layout_weight="1"/></TableRow><TableRowandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:layout_weight="1"><Buttonandroid:id="@+id/num4"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/c"android:layout_weight="1"/><Buttonandroid:id="@+id/num5"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/d"android:layout_weight="1"/><Buttonandroid:id="@+id/num6"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/e"android:layout_weight="1"/><Buttonandroid:id="@+id/multiply"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/m"android:layout_weight="1"/></TableRow><TableRowandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:layout_weight="1"><Buttonandroid:id="@+id/num1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/f"android:layout_weight="1"/><Buttonandroid:id="@+id/num2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/g"android:layout_weight="1"/><Buttonandroid:id="@+id/num3"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/h"android:layout_weight="1"/><Buttonandroid:id="@+id/subtract"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/k"android:layout_weight="1"/></TableRow><TableRowandroid:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:layout_weight="1"><Buttonandroid:id="@+id/num0"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/i"android:layout_weight="1"/><Buttonandroid:id="@+id/point"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:minHeight="48dip"android:text="@string/q"android:textSize="42sp"/><Buttonandroid:id="@+id/add"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/j"android:layout_weight="1"/><Buttonandroid:id="@+id/equal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="42sp"android:text="@string/w"android:layout_weight="1"/></TableRow><TableRow><Buttonandroid:id="@+id/clear"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="30sp"android:text="@string/s"android:layout_span="4"android:gravity="center_vertical|center_horizontal"/></TableRow></TableLayout>packagecom.example;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;publicclassMainActivityextendsActivity{privateButton[]btnNum=newButton[11];//數(shù)值按鈕privateButton[]btnCommand=newButton[5];//符號(hào)按鈕privateEditTexteditText=null;//顯示區(qū)域privateButtonbtnClear=null;//clear按鈕privateStringlastCommand;//用于保存運(yùn)算符privatebooleanclearFlag;//用于判斷是否清空顯示區(qū)域的值,true需要,false不需要privatebooleanfirstFlag;//用于判斷是否是首次輸入,true首次,false不是首次privatedoubleresult;//計(jì)算結(jié)果publicMainActivity(){//初始化各項(xiàng)值result=0;//x的值firstFlag=true;//是首次運(yùn)算clearFlag=false;//不需要清空lastCommand="=";//運(yùn)算符}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//獲取運(yùn)算符btnCommand[0]=(Button)findViewById(R.id.add);btnCommand[1]=(Button)findViewById(R.id.subtract);btnCommand[2]=(Button)findViewById(R.id.multiply);btnCommand[3]=(Button)findViewById(R.id.divide);btnCommand[4]=(Button)findViewById(R.id.equal);//獲取數(shù)字btnNum[0]=(Button)findViewById(R.id.num0);btnNum[1]=(Button)findViewById(R.id.num1);btnNum[2]=(Button)findViewById(R.id.num2);btnNum[3]=(Button)findViewById(R.id.num3);btnNum[4]=(Button)findViewById(R.id.num4);btnNum[5]=(Button)findViewById(R.id.num5);btnNum[6]=(Button)findViewById(R.id.num6);btnNum[7]=(Button)findViewById(R.id.num7);btnNum[8]=(Button)findViewById(R.id.num8);btnNum[9]=(Button)findViewById(R.id.num9);btnNum[10]=(Button)findViewById(R.id.point);//初始化顯示結(jié)果區(qū)域editText=(EditText)findViewById(R.id.result);editText.setText("0.0");//實(shí)例化監(jiān)聽器對(duì)象NumberActionna=newNumberAction();CommandActionca=newCommandAction();for(Buttonbc:btnCommand){bc.setOnClickListener(ca);}for(Buttonbc:btnNum){bc.setOnClickListener(na);}//clear按鈕的動(dòng)作btnClear=(Button)findViewById(R.id.clear);btnClear.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewview){editText.setText("0.0");//初始化各項(xiàng)值result=0;//x的值firstFlag=true;//是首次運(yùn)算clearFlag=false;//不需要清空lastCommand="=";//運(yùn)算符}});}//數(shù)字按鈕監(jiān)聽器privateclassNumberActionimplementsOnClickListener{@OverridepublicvoidonClick(Viewview){Buttonbtn=(Button)view;Stringinput=btn.getText().toString();if(firstFlag){//首次輸入//一上就".",就什么也不做if(input.equals(".")){return;}//如果是"0.0"的話,就清空if(editText.getText().toString().equals("0.0")){editText.setText("");}firstFlag=false;//改變是否首次輸入的標(biāo)記值}else{StringeditTextStr=editText.getText().toString();//判斷顯示區(qū)域的值里面是否已經(jīng)有".",如果有,輸入的又是".",就什么都不做if(editTextStr.indexOf(".")!=-1&&input.equals(".")){return;}//判斷顯示區(qū)域的值里面只有"-",輸入的又是".",就什么都不做if(editTextStr.equals("-")&&input.equals(".")){return;}//判斷顯示區(qū)域的值如果是"0",輸入的不是".",就什么也不做if(editTextStr.equals("0")&&!input.equals(".")){return;}}//如果我點(diǎn)擊了運(yùn)算符以后,再輸入數(shù)字的話,就要清空顯示區(qū)域的值if(clearFlag){editText.setText("");clearFlag=false;//還原初始值,不需要清空}editText.setText(editText.getText().toString()+input);//設(shè)置顯示區(qū)域的值}}//符號(hào)按鈕監(jiān)聽器privateclassCommandActionimplementsOnClickListener{@OverridepublicvoidonClick(Viewview){Buttonbtn=(Button)view;StringinputCommand=(String)btn.getText();if(firstFlag){//首次輸入"-"的情況if(inputCommand.equals("-")){editText.setText("-");//顯示區(qū)域的內(nèi)容設(shè)置為"-"firstFlag=false;//改變首次輸入的標(biāo)記}}else{if(!clearFlag){//如果flag=false不需要清空顯示區(qū)的值,就調(diào)用方法計(jì)算jsp(Double.parseDouble(editText.getText().toString()));//保存顯示區(qū)域的值,并計(jì)算}//保存你點(diǎn)擊的運(yùn)算符lastCommand=inputCommand;clearFlag=true;//因?yàn)槲疫@里已經(jīng)輸入過運(yùn)算符,}}}//計(jì)算用的方法privatevoidjsp(doublex){if(lastCommand.equals("+")){result+=x;}elseif(lastCommand.equals("-")){result-=x;}elseif(lastCommand.equals("*")){result*=x;}elseif(lastCommand.equals("/")){result/=x;}elseif(lastCommand.equals("=")){result=x;}editText.setText(""+result);}}附錄資料:不需要的可以自行刪除perl函數(shù)應(yīng)用一、進(jìn)程處理函數(shù)
1、進(jìn)程啟動(dòng)函數(shù)函數(shù)名eval調(diào)用語法eval(string)解說將string看作Perl語句執(zhí)行。
正確執(zhí)行后,系統(tǒng)變量$@為空串,如果有錯(cuò)誤,$@中為錯(cuò)誤信息。例子$print="print(\"hello,world\\n\");";
eval($print);結(jié)果輸出hello,world函數(shù)名system調(diào)用語法system(list)解說list中第一個(gè)元素為程序名,其余為參數(shù)。
system啟動(dòng)一個(gè)進(jìn)程運(yùn)行程序并等待其結(jié)束,程序結(jié)束后錯(cuò)誤代碼左移八位成為返回值。例子@proglist=("echo","hello,world!");
system(@proglist);結(jié)果輸出hello,world!函數(shù)名fork調(diào)用語法procid=fork();解說創(chuàng)建程序的兩個(gè)拷貝--父進(jìn)程和子進(jìn)程--同時(shí)運(yùn)行。子進(jìn)程返回零,父進(jìn)程返回非零值,此值為子程序的進(jìn)程ID號(hào)。例子$retval=fork();
if($retval==0){
#thisisthechildprocess
exit;#thisterminatesthechildprocess
}else{
#thisistheparentprocess
}結(jié)果輸出無函數(shù)名pipe調(diào)用語法pipe(infile,outfile);解說與fork合用,給父進(jìn)程和子進(jìn)程提供通信的方式。送到outfile文件變量的信息可以通過infile文件變量讀取。步驟:
1、調(diào)用pipe
2、用fork將程序分成父進(jìn)程和子進(jìn)程
3、一個(gè)進(jìn)程關(guān)掉infile,另一個(gè)關(guān)掉outfile例子pipe(INPUT,OUTPUT);
$retval=fork();
if($retval!=0){
#thisistheparentprocess
close(INPUT);
print("Enteralineofinput:\n");
$line=<STDIN>;
printOUTPUT($line);
}else{
#thisisthechildprocess
close(OUTPUT);
$line=<INPUT>;
print($line);
exit(0);
}結(jié)果輸出$
program
Enteralineofinput:
Hereisatestline
Hereisatestline
$函數(shù)名exec調(diào)用語法exec(list);解說與system類似,區(qū)別是啟動(dòng)新進(jìn)程前結(jié)束當(dāng)前程序。常與fork合用,當(dāng)fork分成兩個(gè)進(jìn)程后,子進(jìn)程用exec啟動(dòng)另一個(gè)程序。例子
結(jié)果輸出
函數(shù)名syscall調(diào)用語法syscall(list);解說調(diào)用系統(tǒng)函數(shù),list第一個(gè)元素是系統(tǒng)調(diào)用名,其余為參數(shù)。
如果參數(shù)是數(shù)字,就轉(zhuǎn)化成C的整型數(shù)(typeint)。否則傳遞字符串的指針。詳見UNIX的幫助或Perl文檔。
使用syscall必須包含文件syscall.pl,即:
require("syscall.ph");例子
結(jié)果輸出
2、進(jìn)程終止函數(shù)函數(shù)名Die調(diào)用語法die(message);解說終止程序并向STDERR輸出錯(cuò)誤信息。message可以為字符串或列表。如果最后一個(gè)參數(shù)不包含換行符,則程序文件名和行號(hào)也被輸出。例子die("Cannotopeninputfile");結(jié)果輸出Cannotopeninputfileatmyprogline6.函數(shù)名warn調(diào)用語法warn(message);解說與die類似,區(qū)別是不終止程序。例子warn("Danger!Danger!\n");結(jié)果輸出Danger!Danger!函數(shù)名exit調(diào)用語法exit(retcode);解說終止程序并指定返回值。例子exit(2);結(jié)果輸出無函數(shù)名kill調(diào)用語法kill(signal,proclist);解說給一組進(jìn)程發(fā)送信號(hào)。
signal是發(fā)送的數(shù)字信號(hào),9為殺掉進(jìn)程。
proclist是進(jìn)程ID列表。詳見kill的UNIX幫助。例子
結(jié)果輸出
3、進(jìn)程控制函數(shù)函數(shù)名sleep調(diào)用語法sleep(time);解說將程序暫停一段時(shí)間。time是停止的秒數(shù)。返回值為實(shí)際停止的秒數(shù)。例子sleep(5);結(jié)果輸出無函數(shù)名wait調(diào)用語法procid=wait();解說暫停程序執(zhí)行,等待子進(jìn)程終止。
不需要參數(shù),返回值為子進(jìn)程ID,如果沒有子進(jìn)程,返回-1。例子
結(jié)果輸出
函數(shù)名waitpid調(diào)用語法waitpid(procid,waitflag);解說暫停程序執(zhí)行,等待特定的子進(jìn)程終止。procid為等待的進(jìn)程ID例子$procid=fork();
if($procid==0){
#thisisthechildprocess
print("thislineisprintedfirst\n");
exit(0);
}else{
#thisistheparentprocess
waitpid($procid,0);
print("thislineisprintedlast\n");
}結(jié)果輸出$program
thislineisprintedfirst
thislineisprintedlast
$4、其它控制函數(shù)函數(shù)名caller調(diào)用語法subinfo=caller();解說返回調(diào)用者的程序名和行號(hào),用于PerlDebugger。
返回值為三元素的列表:
1、調(diào)用處的包名
2、調(diào)用者文件名
3、調(diào)用處的行號(hào)例子
結(jié)果輸出
函數(shù)名chroot調(diào)用語法chroot(dir);解說改變程序的根目錄,詳見chroot幫助。例子
結(jié)果輸出
函數(shù)名local調(diào)用語法local($variable);解說在語句塊(由大括號(hào)包圍的語句集合)中定義局域變量,僅在此語句塊中起作用,對(duì)其的改變不對(duì)塊外同名變量造成影響。
千萬不要在循環(huán)中使用,否則每次循環(huán)都定義一個(gè)新的局域變量!例子
結(jié)果輸出
函數(shù)名times調(diào)用語法timelist=times解說返回該程序及所有子進(jìn)程消耗的工作時(shí)間。
返回值為四個(gè)浮點(diǎn)數(shù)的列表:
1、程序耗用的用戶時(shí)間
2、程序耗用的系統(tǒng)時(shí)間
3、子進(jìn)程耗用的用戶時(shí)間
4、子進(jìn)程耗用的系統(tǒng)時(shí)間例子
結(jié)果輸出
二、數(shù)學(xué)函數(shù)函數(shù)名sin調(diào)用語法retval=sin(value);解說參數(shù)為弧度值。函數(shù)名cos調(diào)用語法retval=cos(value);解說參數(shù)為弧度值。函數(shù)名atan2調(diào)用語法retval=atan2(value1,value2);解說運(yùn)算并返回value1除以value2結(jié)果的arctan值,單位為弧度,范圍在-PI~PI。應(yīng)用例:
角度轉(zhuǎn)化成弧度子程序。subdegrees_to_radians{
local($degrees)=@_;
local($radians);11:
$radians=atan2(1,1)*$degrees/45;
}函數(shù)名sqrt調(diào)用語法retval=sqrt(value);解說平方根函數(shù)。value為非負(fù)數(shù)。函數(shù)名exp調(diào)用語法retval=exp(value);解說返回e的value次方。函數(shù)名log調(diào)用語法retval=log(value);解說以e為底的自然對(duì)數(shù)。函數(shù)名abs調(diào)用語法retval=abs(value);解說絕對(duì)值函數(shù)。(Perl4中沒有)函數(shù)名rand調(diào)用語法retval=rand(num);解說隨機(jī)數(shù)函數(shù),返回0和整數(shù)num之間的一個(gè)浮點(diǎn)數(shù)。函數(shù)名srand調(diào)用語法srand(value);解說初始化隨機(jī)數(shù)生成器。保證每次調(diào)用rand真正隨機(jī)。三、字符串處理函數(shù)函數(shù)名index調(diào)用語法position=index(string,substring,position);解說返回子串substring在字符串string中的位置,如果不存在則返回-1。參數(shù)position是可選項(xiàng),表示匹配之前跳過的字符數(shù),或者說從該位置開始匹配。函數(shù)名rindex調(diào)用語法position=rindex(string,substring,position);解說與index類似,區(qū)別是從右端匹配。函數(shù)名length調(diào)用語法num=length(string);解說返回字符串長度,或者說含有字符的數(shù)目。函數(shù)名pos調(diào)用語法offset=pos(string);解說返回最后一次模式匹配的位置。函數(shù)名substr調(diào)用語法substr(expr,skipchars,length)解說抽取字符串(或表達(dá)式生成的字符串)expr中的子串,跳過skipchars個(gè)字符,或者說從位置skipchars開始抽取子串(第一個(gè)字符位置為0),子串長度為length,此參數(shù)可忽略,意味著取剩下的全部字符。
當(dāng)此函數(shù)出現(xiàn)在等式左邊時(shí),expr必須為變量或數(shù)組元素,此時(shí)其中部分子串被等式右邊的值替換。函數(shù)名study調(diào)用語法study(scalar);解說用一種內(nèi)部格式提高變量的訪問速度,同一時(shí)刻只對(duì)一個(gè)變量起作用。函數(shù)名lc
uc調(diào)用語法retval=lc(string);
retval=uc(string);解說將字符串全部轉(zhuǎn)換成小/大寫字母。函數(shù)名lcfirst
ucfirst調(diào)用語法retval=lcfirst(string);
retval=ucfirst(string);解說將第一個(gè)字母轉(zhuǎn)換成小/大寫。函數(shù)名quotameta調(diào)用語法newstring=quotemeta(oldstring);解說將非單詞的字母前面加上反斜線(\)。
語句:$string=quotemeta($string);
等效于:$string=~s/(\W)/\\$1/g;
常用于模式匹配操作中,確保字符串中沒有字符被看作匹配操作符。函數(shù)名join調(diào)用語法join(joinstr,list);解說把字符串列表(數(shù)組)組合成一個(gè)長的字符串,在每兩個(gè)列表元素間插入串joinstr。函數(shù)名sprintf調(diào)用語法sprintf(string,fields);解說與printf類似,區(qū)別是結(jié)果不輸出到文件,而作為返回值賦給變量。例子$num=26;
$outstr=sprintf("%d=%xhexadecimalor%ooctal\n",$num,$num,$num);
print($outstr);結(jié)果輸出26=1ahexadecimalor32octal四、標(biāo)量轉(zhuǎn)換函數(shù)函數(shù)名chop調(diào)用語法$lastchar=chop(var);解說var可為變量或數(shù)組,當(dāng)var為變量時(shí),最后一個(gè)字符被刪除并賦給$lastchar,當(dāng)var為數(shù)組/列表時(shí),所有元素的最后一個(gè)字符被刪除,最后一個(gè)元素的最后一個(gè)字母賦給$lastchar。函數(shù)名chomp調(diào)用語法result=chomp(var);解說檢查字符串或字符串列表中元素的最后一個(gè)字符是否為由系統(tǒng)變量$/定義的行分隔符,如果是就刪除。返回值為實(shí)際刪除的字符個(gè)數(shù)。函數(shù)名crypt調(diào)用語法result=crypt(original,salt);解說用DES算法加密字符串,original是將要加密的字符串,salt是兩個(gè)字符的字符串,定義如何改變DES算法,以使更難解碼。返回值為加密后的串。函數(shù)名hex調(diào)用語法decnum=hex(hexnum);解說將十六進(jìn)制數(shù)(字符串形式)轉(zhuǎn)化為十進(jìn)制數(shù)。函數(shù)名int調(diào)用語法intnum=int(floatnum);解說將浮點(diǎn)數(shù)舍去小數(shù)部分轉(zhuǎn)化為整型數(shù)。函數(shù)名oct調(diào)用語法decnum=oct(octnum);解說將八進(jìn)制數(shù)(字符串形式)或十六進(jìn)制數(shù)("0x.."形式)轉(zhuǎn)化為十進(jìn)制數(shù)。函數(shù)名ord調(diào)用語法asciival=ord(char);解說返回單個(gè)字符的ASCII值,與PASCAL中同名函數(shù)類似。函數(shù)名chr調(diào)用語法$char=chr(asciival);解說返回ASCII值的相應(yīng)字符,與PASCAL中同名函數(shù)類似。函數(shù)名pack調(diào)用語法formatstr=pack(packformat,list);解說把一個(gè)列表或數(shù)組以在實(shí)際機(jī)器存貯格式或C等編程語言使用的格式轉(zhuǎn)化(包裝)到一個(gè)簡(jiǎn)單變量中。參數(shù)packformat包含一個(gè)或多個(gè)格式字符,列表中每個(gè)元素對(duì)應(yīng)一個(gè),各格式字符間可用空格或tab隔開,因?yàn)閜ack忽略空格。
除了格式a、A和@外,重復(fù)使用一種格式多次可在其后加個(gè)整數(shù),如:
$twoints=pack("i2",103,241);
把同一格式應(yīng)用于所有的元素則加個(gè)*號(hào),如:
$manyints=pack("i*",14,26,11,83);
對(duì)于a和A而言,其后的整數(shù)表示要?jiǎng)?chuàng)建的字符串長度,重復(fù)方法如下:
$strings=pack("a6"x2,"test1","test2");
格式@的情況比較特殊,其后必須加個(gè)整數(shù),該數(shù)表示字符串必須的長度,如果長度不夠,則用空字符(null)補(bǔ)足,如:
$output=pack("a@6a","test","test2");
pack函數(shù)最常見的用途是創(chuàng)建可與C程序交互的數(shù)據(jù),例如C語言中字符串均以空字符(null)結(jié)尾,創(chuàng)建這樣的數(shù)據(jù)可以這樣做:
$Cstring=pack("ax",$mystring);
下表是一些格式字符與C中數(shù)據(jù)類型的等價(jià)關(guān)系:字符
等價(jià)C數(shù)據(jù)類型CcharddoubleffloatiintIunsignedint(orunsigned)llongLunsignedlongsshortSunsignedshort
完整的格式字符見下表。格式字符
描述a用空字符(null)補(bǔ)足的字符串A用空格補(bǔ)足的字符串b位串,低位在前B位串,高位在前c帶符號(hào)字符(通常-128~127)C無符號(hào)字符(通常8位)d雙精度浮點(diǎn)數(shù)f單精度浮點(diǎn)數(shù)h十六進(jìn)制數(shù)串,低位在前H十六進(jìn)制數(shù)串,高位在前i帶符號(hào)整數(shù)I無符號(hào)整數(shù)l帶符號(hào)長整數(shù)L無符號(hào)長整數(shù)n網(wǎng)絡(luò)序短整數(shù)N網(wǎng)絡(luò)序長整數(shù)p字符串指針s帶符號(hào)短整數(shù)S無符號(hào)短整數(shù)u轉(zhuǎn)化成uuencode格式vVAX序短整數(shù)VVAX序長整數(shù)x一個(gè)空字節(jié)X回退一個(gè)字節(jié)@以空字節(jié)(null)填充函數(shù)名unpack調(diào)用語法@list=unpack(packformat,formatstr);解說unpack與pack功能相反,將以機(jī)器格式存貯的值轉(zhuǎn)化成Perl中值的列表。其格式字符與pack基本相同(即上表),不同的有:A格式將機(jī)器格式字符串轉(zhuǎn)化為Perl字符串并去掉尾部所有空格或空字符;x為跳過一個(gè)字節(jié);@為跳過一些字節(jié)到指定的位置,如@4為跳過4個(gè)字節(jié)。下面看一個(gè)@和X合同的例子:
$longrightint=unpack("@*X4L",$packstring);
此語句將最后四個(gè)字節(jié)看作無符號(hào)長整數(shù)進(jìn)行轉(zhuǎn)化。下面看一個(gè)對(duì)uuencode文件解碼的例子:1:#!/usr/local/bin/perl
2:
3:open(CODEDFILE,"/u/janedoe/codefile")||
4:die("Can'topeninputfile");
5:open(OUTFILE,">outfile")||
6:die("Can'topenoutputfile");
7:while($line=<CODEDFILE>){
8:$decoded=unpack("u",$line);
9:printOUTFILE($decoded);
10:}
11:close(OUTFILE);
12:close(CODEDFILE);
當(dāng)將pack和unpack用于uuencode時(shí),要記住,雖然它們與UN
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 策劃公司前臺(tái)工作總結(jié)
- 運(yùn)輸物流行業(yè)顧問工作總結(jié)
- 2024新年寄語匯編(32篇)
- 制冷技術(shù)轉(zhuǎn)讓協(xié)議書(2篇)
- 創(chuàng)業(yè)合作投資協(xié)議書(2篇)
- 2024年計(jì)算機(jī)專業(yè)實(shí)習(xí)心得體會(huì)
- 易錯(cuò)點(diǎn)08 中國近代史時(shí)間問題-備戰(zhàn)2023年中考?xì)v史考試易錯(cuò)題(解析版)
- 地理中國的世界遺產(chǎn)課件中圖版選修
- 2025屆陜西省咸陽市武功縣中考生物全真模擬試題含解析
- 《公共政策過程》課件
- 房地產(chǎn)估計(jì)第八章成本法練習(xí)題參考
- 2023年廣東羅浮山旅游集團(tuán)有限公司招聘筆試題庫及答案解析
- 《社會(huì)主義核心價(jià)值觀》優(yōu)秀課件
- DB11-T1835-2021 給水排水管道工程施工技術(shù)規(guī)程高清最新版
- 《妊娠期糖尿病患者個(gè)案護(hù)理體會(huì)(論文)3500字》
- 解剖篇2-1內(nèi)臟系統(tǒng)消化呼吸生理學(xué)
- 《小學(xué)生錯(cuò)別字原因及對(duì)策研究(論文)》
- 便攜式氣體檢測(cè)報(bào)警儀管理制度
- 酒店安全的管理制度
- (大潔王)化學(xué)品安全技術(shù)說明書
- 2022年科學(xué)道德與學(xué)術(shù)規(guī)范知識(shí)競(jìng)賽決賽題庫(含答案)
評(píng)論
0/150
提交評(píng)論