基于Android的課程表App設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于Android的課程表App設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于Android的課程表App設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于Android的課程表App設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于Android的課程表App設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第一章緒論1.1課題背景Android是目前最流行的移動(dòng)端操作系統(tǒng)。在全世界的很多地方的售貨量已經(jīng)超越iPhone系統(tǒng),android成為了世界上最大的智能手機(jī)操作系統(tǒng)。國內(nèi),android社區(qū)十分火爆,這些社區(qū)為android在中國的推廣起到了很好的效果,同時(shí)也為android的相關(guān)產(chǎn)品的提供了消費(fèi)市場。國內(nèi)的廠商和運(yùn)營商也陸陸續(xù)續(xù)的加入了android陣營,其中有華為通訊,聯(lián)想,中國移動(dòng),中國聯(lián)通等大企業(yè)。國內(nèi)廠家也紛紛采用android系統(tǒng)的產(chǎn)品,所以能想到android將會被廣泛應(yīng)用在國產(chǎn)智能聯(lián)網(wǎng)的設(shè)備上,將更進(jìn)一步擴(kuò)大android系統(tǒng)的應(yīng)用領(lǐng)域。從2011年android在全球第一次超過Symbian,成為了全球第一。在2013年09月全世界android設(shè)備達(dá)到了驚人10億臺。2018第一季度Android平臺以驚人42.8%的移動(dòng)廣告流量第一次把iOS甩在身后??紤]到Android自身的優(yōu)勢已經(jīng)技術(shù)的成熟。我選擇了Android系統(tǒng)來完成我的畢業(yè)設(shè)計(jì)——基于Android課程表app,是一款將計(jì)大學(xué)生課程表信息通過網(wǎng)絡(luò)在手機(jī)端表示,這無疑會給大學(xué)生帶來極大的方便。而我的目的就是開發(fā)大學(xué)生課程表和一些對學(xué)生有用的信息保存到MySQL并在手機(jī)顯示,可以實(shí)時(shí)提供學(xué)生查看。首先通過對該系統(tǒng)的開背景及系統(tǒng)功能需求進(jìn)行分析得到了學(xué)生用戶的主要模塊包括:課表的導(dǎo)入、課表的查看與查詢、以及與同學(xué)之間進(jìn)行課上課后在線交流;功能模塊包括:校園頭條推薦、用戶自定義安排提醒。最后對這些模塊進(jìn)行設(shè)計(jì)與實(shí)現(xiàn)。1.2安卓平臺簡介Google于2007年11月5日宣布Android的誕生、一個(gè)致力于為移動(dòng)終端一個(gè)著重打造移動(dòng)終端,真正意義上開放和完整的操作。1.2.1安卓平臺的優(yōu)勢1.開放性2.不受束縛3.齊全的硬件4.方便開發(fā)Android平臺沒有過多的之約象征著自由。因此不難想象,新穎別致的軟件會誕生的必然的。但是它也是一把雙刃劍:讓暴力、血腥、情色方面的負(fù)能量得以鉆了空子。1.2.2安卓系統(tǒng)編程語言在Android中,開發(fā)應(yīng)用大體上分了三部分,大部分開發(fā)者使用Java編程語言來開發(fā)應(yīng)用軟件,小部分通過NDK使用C/C++編程語言來開發(fā)應(yīng)用軟件,還有很小一部分利用腳本語言以及網(wǎng)頁來開發(fā)。如下是分別是游戲和應(yīng)用的比例圖。圖1-1

第二章系統(tǒng)開發(fā)環(huán)境與相關(guān)技術(shù)2.1系統(tǒng)開發(fā)的環(huán)境Android的上層應(yīng)用程序不僅基于Dalvik虛擬機(jī),還需要采用Java語言開發(fā)的,所以,Google公司推薦使用主流的Java語言繼承開發(fā)環(huán)境Eclipse。不僅需要Eclipse,而且使用Java語言進(jìn)行開發(fā),還需要有由SUN公司提供的JavaSDK。此外,Android和Java開發(fā)有較大的不同,所以才需要有Google提供的AndroidSDK。同時(shí),還要要在Eclipse安裝ADT,為Android開發(fā)提供開發(fā)工具(是Eclipse下開發(fā)工具的升級下載的工具)??偠灾?,需要軟件如下,方可搭建Android的開發(fā)環(huán)境,才能進(jìn)行Android應(yīng)用程序的編程工作。(1)Eclipse(2)JDK(3)AndroidSDK(4)ADT(AndroidDevelopmentTools)2.2安卓環(huán)境的搭建2.2.1軟件下載準(zhǔn)備分別下載JDK、Eclipse、AndroidSDK。2.2.2JDK安裝SDK安裝完成后,設(shè)置環(huán)境變量(非必須)。1.我的電腦,屬性,高級,環(huán)境變量(依次點(diǎn)擊),然后在系統(tǒng)變量中添加以下內(nèi)容:2.JAVA_HOME值為:E:\Android\Java\jdk1.6.0_21(我所安裝JDK的目錄)3.CLASSPATH值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;4.Path:在開始追加%JAVA_HOME%\bin;環(huán)境搭建好以后。首先打開cmd窗口,然后輸入java–version對照下圖JDK的版本信息若一致則JDK安裝成功了,如圖:圖2-1安卓環(huán)境設(shè)置JDK效果測試圖2.2.3AndroidSDK安裝下載完成后我的解壓路徑(我的解壓路徑為E:\Android\android-sdk-windows)第一步運(yùn)行SDKSetup.exe,然后點(diǎn)擊AvailablePackages下載。第二部在用戶變量中新建PATH值為:AndroidSDK中的tools絕對路徑(D:\AndroidDevelop\android-sdk-windows\tools)然后點(diǎn)擊確認(rèn)。第三步重啟計(jì)算機(jī),然后再開機(jī)。運(yùn)行cmd窗口,檢查SDK是不是安裝成功。輸入android–h出現(xiàn)以下的畫面,表明安裝成功,如圖:圖2-2安卓環(huán)境設(shè)置SDK效果測試圖2.2.3ADT安裝雙擊Eclipse,點(diǎn)擊菜單中的"Help"的"InstallNewSoftware"選項(xiàng)點(diǎn)擊Add按鈕,輸入Name和Location:Name(無要求),Location(輸入/android/eclipse)后點(diǎn)擊確認(rèn)。返回后,在workwith選項(xiàng)中找到我們剛才添加的ADT,點(diǎn)擊DeveloperTools,勾選AndroidDDMS和AndroidDevelopmentTool,然后按步驟完成。完成之后:選擇Window>中Preferences...選項(xiàng)在左面板選擇Android,右側(cè)點(diǎn)擊Browse...然后選中SDK路徑(本機(jī)為:E:\Android\android-sdk-windows點(diǎn)擊Apply)。配置完成。2.2.5創(chuàng)建AVD,創(chuàng)建AVD為使Android應(yīng)用程序可以在電腦模擬器上運(yùn)行手機(jī)軟件。1、在Eclipse中。選擇Windows中AndroidSDKandAVDManager選項(xiàng)2、點(diǎn)擊左側(cè)面板的VirtualDevicesan選項(xiàng),再右側(cè)點(diǎn)擊New選項(xiàng)3、輸入Name,選擇Target的API,SDCard(大小不做要求),Skin隨便選一個(gè),Hardware目前保持默認(rèn)就行4、點(diǎn)擊CreateAVDjiu(完成創(chuàng)建AVD)2.3Android架構(gòu)圖2-1展示了Android操作系統(tǒng)的主要組件。2.3.1Android生命周期圖2-2Activity生命周期2.3.2Java特點(diǎn)(1)面對對象(2)可移植性(universality)(3)安全性(security)(4)多線程(thread)(5)多態(tài)(6)解釋執(zhí)行(7)分布性第三章系統(tǒng)需求分析及概要設(shè)計(jì)3.1系統(tǒng)的需求分析我的軟件是一個(gè)安卓平臺的手機(jī)課程表app。它是為大學(xué)生提供課程表方面服務(wù)的,它包括日歷的查看、日歷上日期對應(yīng)課程表的查看、課程表的增加、課程表的刪除、課程表的修改等。3.2系統(tǒng)的概要設(shè)計(jì)1.app功能需求a.核心需求:查詢課程b.基本型需求:記錄課程筆記、課前提醒、蹭課2.設(shè)計(jì)app要求:認(rèn)真的進(jìn)行需求分析,認(rèn)真掌握完成此論文的相關(guān)技術(shù)、在使用Android的技術(shù)的基礎(chǔ)上進(jìn)行主模塊的設(shè)計(jì)及支模塊的獨(dú)立性、在結(jié)合前端HTML使之成為一個(gè)整體,讓app具有完整性、編程語言編輯身份驗(yàn)證功能,考慮數(shù)據(jù)庫安全、數(shù)據(jù)的完整性等問題。

第四章 系統(tǒng)架構(gòu)4.1架構(gòu)的設(shè)計(jì)4.1.1架構(gòu)的層次結(jié)構(gòu)層次結(jié)構(gòu)圖如下。圖4-1結(jié)構(gòu)圖的最頂層,統(tǒng)稱為表現(xiàn)層(UI層),直接為用戶提供手機(jī)視覺界面,引導(dǎo)用戶進(jìn)行操作。通常情況下,UI層間接作用于數(shù)據(jù)庫進(jìn)行交互,通過業(yè)務(wù)邏輯層進(jìn)行的。4.1.2架構(gòu)實(shí)現(xiàn)從架構(gòu)設(shè)計(jì)圖中可以了解到,層與層之間的聯(lián)系是向下依賴的,底層對于它的上一層是不了解的,上層變動(dòng)的設(shè)計(jì)對下一層的調(diào)用是沒有影響的。所以一般先從底層的接口設(shè)計(jì)開始。圖4-2圖4-2:IDAL層的接口模板圖4-3圖4-3:IDALSchedule繼承IDAL接口圖4-4圖4-4:抽象工廠接口的實(shí)現(xiàn)定義數(shù)據(jù)庫字段以及建表語句圖4-5SQLiteHelper輔助類圖4-6(3)定義基礎(chǔ)提供程序圖4-1-3(4)數(shù)據(jù)訪問提供程序的具體實(shí)現(xiàn)圖4-1-4(5)具體工廠的實(shí)現(xiàn)雖然我們封裝好了對數(shù)據(jù)庫進(jìn)行訪問的操作,但是它的實(shí)例化在邏輯層中進(jìn)行是不可取的,而是應(yīng)該通過具體工廠ScheduleProvider提供的實(shí)例,業(yè)務(wù)邏輯層不需要知道ScheduleProvider具體類名的存在,只需要需要知道IDALSchedule接口即可。圖4-1-5(6)業(yè)務(wù)邏輯層圖4-1-6(7)表現(xiàn)層圖4-1-74.1.3小結(jié)不管是網(wǎng)站還是手機(jī)軟件,項(xiàng)目中用的最多的還是mvc設(shè)計(jì)模式。在上例當(dāng)中也是用了mvc設(shè)計(jì)模式,view層理所應(yīng)當(dāng)?shù)脑谖覀兯吹降腢i層,android利用xml文件來布局整個(gè)Ui層,在這方面做的很好。能夠很好的解耦整個(gè)框架,模型層,本項(xiàng)目中ScheduleProvider就是業(yè)務(wù)類,控制層,可以很好的協(xié)調(diào)模型層和Ui層。

第五章系統(tǒng)的詳細(xì)設(shè)計(jì)5.1課程表啟動(dòng)界面5.2課程表管理模塊界面5.3課程表添加模塊界面從界面中可以看到兩個(gè)文本框和兩個(gè)按鈕(text+button),有兩個(gè)文本框,個(gè)是密碼文本框,一個(gè)用戶名文本框一。用戶的文本框hint屬性值我設(shè)置為“請輸入賬號”,InputType屬性值我設(shè)置為“number”。密碼文本框的hint屬性值我設(shè)置為“請輸入個(gè)人密碼”,InputType屬性值我設(shè)置為“textPassword”。兩個(gè)按鈕分別為注冊和登錄按鈕。如下為文本框和按鈕的部分實(shí)現(xiàn)代碼:<EditTextandroid:id="@+id/Lusername"android:layout_width="match_parent"android:layout_height="44.0dip"android:singleLine="true"android:background="#ffffff"android:hint="請輸入賬號"android:inputType="number"android:maxLength="16"android:maxLines="1"android:paddingLeft="12.0dip"android:textColor="#ff1d1d1d"android:textColorHint="#ff666666"android:textSize="16.0sp"/><Buttonandroid:id="@+id/btlogin"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="12.0dip"android:background="@drawable/login_button_bg"android:gravity="center"android:paddingTop="5.0dip"android:text="登陸"android:textColor="#ff333333"android:textSize="18.0sp"/>登錄按鈕事件代碼:bt_login.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ Stringsql="select*frompersonwherename=" +et_name.getText().toString(); PersonBeenbeen=ScheduleBLL.getInstance(LoginActivity.this) .queryScheduleToDataBase(sql); if(been.getPass()!=null&&been.getPass().equals(et_password.getText().toString())){ OverDatadata=OverData.getInstance(); ScheduleEntityentity=newScheduleEntity(); entity.setName(et_name.getText().toString()); entity.setPass(et_password.getText().toString()); data.setEntity(entity); Intentin=newIntent(LoginActivity.this, MainFragmentActivity.class); LoginActivity.this.startActivity(in); finish(); } else{ Toast.makeText(LoginActivity.this,"用戶不存在或者密碼錯(cuò)誤",Toast.LENGTH_LONG).show(); } } });注冊按鈕事件代碼:bt_resigner.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub Intentin=newIntent(LoginActivity.this, RegisterActivity.class); LoginActivity.this.startActivity(in); } });注冊界面中有一個(gè)按鈕和三個(gè)文本框,兩個(gè)密碼框,一個(gè)用戶名和一個(gè)注冊按鈕。文本框與按鈕的部分實(shí)現(xiàn)代碼分別如下:<EditTextandroid:id="@+id/username"android:layout_width="match_parent"android:layout_height="44.0dip"android:singleLine="true"android:background="#ffffff"android:hint="請輸入賬號"android:inputType="number"android:maxLength="16"android:maxLines="1"android:paddingLeft="12.0dip"android:textColor="#ff1d1d1d"android:textColorHint="#ff666666"android:textSize="16.0sp"/><EditTextandroid:id="@+id/pass"android:layout_width="match_parent"android:layout_height="44.0dip"android:layout_marginTop="3dip"android:singleLine="true"android:background="#ffffff"android:hint="請輸入個(gè)人密碼"android:inputType="textPassword"android:maxLength="16"android:maxLines="1"android:paddingLeft="12.0dip"android:textColor="#ff1d1d1d"android:textColorHint="#ff666666"android:textSize="16.0sp"/><Buttonandroid:id="@+id/btregister"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="12.0dip"android:background="@drawable/login_button_bg"android:gravity="center"android:paddingTop="5.0dip"android:text="注冊"android:textColor="#ff333333"android:textSize="18.0sp"/>5.4課程提醒設(shè)置管理模塊界面注冊按鈕事件代碼:privatevoidinitListener(){ //TODOAuto-generatedmethodstub bt_register.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub if(tv_pass.getText().toString() .equals(tv_restart.getText().toString())){ Stringsql="select*frompersonwherename=" +tv_username.getText().toString(); PersonBeenbeen=ScheduleBLL.getInstance( RegisterActivity.this).queryScheduleToDataBase(sql); if(been.getName()==null){ ScheduleEntityentity=newScheduleEntity(); entity.setName(tv_username.getText().toString()); entity.setPass(tv_pass.getText().toString()); ScheduleBLL.getInstance(RegisterActivity.this) .addScheduleToDataBase(entity,newPersonSet(),DBKey.Schedule.TABLE_SCHEDULE); Toast.makeText(RegisterActivity.this,"用戶已注冊",Toast.LENGTH_LONG).show(); finish(); } else Toast.makeText(RegisterActivity.this,"用戶已經(jīng)存在",Toast.LENGTH_LONG).show(); } else { Toast.makeText(RegisterActivity.this,"2次密碼不一致",Toast.LENGTH_LONG).show(); } } }); }5.5課程筆記主界面課程筆記主界面如下:圖5-1<TextViewandroid:id="@+id/tv_month"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:text="xxxx年14月"android:textColor="#ffffffff"android:textSize="21.0dip"/>頭部的TextView<GridViewandroid:id="@+id/gridview"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#00000000"android:clickable="true"android:clipChildren="true"android:columnWidth="55.0dip"android:horizontalSpacing="1.0dip"android:listSelector="@null"android:numColumns="7"android:paddingBottom="1.0dip"android:stretchMode="columnWidth"android:verticalSpacing="1.0dip"/>GridView日期表格5.6時(shí)間空間模塊界面時(shí)間控件的界面:圖5-2彈出菜單界面主要代碼及事件:(1)<ListViewandroid:id="@+id/behind_list_show"android:layout_width="match_parent"android:layout_height="500dip"android:layout_gravity="top"android:layout_marginBottom="@dimen/list_margin_height"android:layout_marginTop="@dimen/title_height"android:divider="@drawable/dis_behind_side"android:listSelector="#0fff"android:cacheColorHint="#0000"></ListView>(2)publicclassMainFragmentActivityextendsBaseSlidingFragmentActivityimplements SlidingActivityBase{(3)//[start]初始化函數(shù) privatevoidinitSlidingMenu(){ setBehindContentView(R.layout.behind_slidingmenu); //customizetheSlidingMenu sm=getSlidingMenu(); sm.setShadowWidthRes(R.dimen.shadow_width); sm.setBehindOffsetRes(R.dimen.slidingmenu_offset); //sm.setFadeDegree(0.35f); sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE); sm.setShadowDrawable(R.drawable.slidingmenu_shadow); //sm.setShadowWidth(20); sm.setBehindScrollScale(0); }publicvoidqueryDate() { newDatePickerDialog(CalendarActivity.this.getActivity(), newOnDateSetListener(){ publicvoidonDateSet(DatePickerview,intyear, intmonthOfYear,intmonthOfYear1){ //1901-1-1---->2049-12-31 if(year<1901||year>2049){ //不在查詢范圍內(nèi) newAlertDialog.Builder( CalendarActivity.this.getActivity()) .setTitle("錯(cuò)誤日期") .setMessage("跳轉(zhuǎn)日期范圍(1901/1/1-2049/12/31)") .setPositiveButton("確認(rèn)",null).show(); }else{ intxMonth=jumpMonth; intxYear=jumpYear; intgvFlag=0; jumpMonth=0; jumpYear=0; addGridView();//添加一個(gè)gridView year_c=year; month_c=monthOfYear+1; day_c=monthOfYear1; calV=newCalendarAdapter( CalendarActivity.this.getActivity(), getResources(),jumpMonth,jumpYear, year_c,month_c,day_

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論