




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心Android手機(jī)客戶(hù)端學(xué)生姓名:宋同煜張宗森指導(dǎo)老師:裴斐專(zhuān)業(yè):計(jì)算機(jī)科學(xué)與技術(shù)102在移動(dòng)互聯(lián)網(wǎng)發(fā)展迅猛的今天,在Android完全開(kāi)源及擁有龐大用戶(hù)群的環(huán)境下,迫切需要為計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心網(wǎng)站開(kāi)發(fā)Andriod手機(jī)客戶(hù)端,方便計(jì)算機(jī)學(xué)院師生隨時(shí)隨地查看實(shí)驗(yàn)信息、登記實(shí)驗(yàn)等。一、系統(tǒng)分析需求分析查詢(xún)實(shí)驗(yàn):教師及學(xué)生可以查詢(xún)當(dāng)周及上一周、下一周實(shí)驗(yàn)安排登記實(shí)驗(yàn):教師登錄后可以登記實(shí)驗(yàn)引言為方便計(jì)算機(jī)學(xué)院教師及學(xué)生查詢(xún)、登記實(shí)驗(yàn),因此開(kāi)發(fā)實(shí)驗(yàn)中心Android手機(jī)端軟件編寫(xiě)目的用戶(hù)界面、 運(yùn)行環(huán)境等作出詳細(xì)說(shuō)本文檔對(duì)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心網(wǎng)站手機(jī)客戶(hù)端的功能、項(xiàng)目背景軟件的開(kāi)發(fā)名
2、稱(chēng):計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心項(xiàng)目需求單位:計(jì)算機(jī)學(xué)院全體師生項(xiàng)目開(kāi)發(fā)單位:宋同煜張宗森二、系統(tǒng)設(shè)計(jì)系統(tǒng)目標(biāo)1. 實(shí)現(xiàn)需求分析階段的所有功能2. 主界面清晰、簡(jiǎn)單、操作易行系統(tǒng)功能預(yù)覽該軟件主要包括查詢(xún)、登錄、登記實(shí)驗(yàn)3個(gè)功能模塊,主要操作如下:( 1) 運(yùn)行軟件后,首先檢查網(wǎng)絡(luò)連接是否正常,如果正常,獲取當(dāng)周實(shí)驗(yàn)安排信息,顯示給用戶(hù),效果如圖( 2) 通過(guò)“菜單->登記實(shí)驗(yàn)”進(jìn)入等級(jí)實(shí)驗(yàn)頁(yè)面,要求輸入用戶(hù)名密碼才可繼續(xù)點(diǎn)擊“登錄實(shí)驗(yàn)”后,提示登錄后才能繼續(xù)( 3) 擊登錄進(jìn)入登錄頁(yè)面,如圖正確輸入用戶(hù)名密碼后點(diǎn)提交4)用戶(hù)名密碼輸入正確,就可以登記實(shí)驗(yàn)了,次頁(yè)面包含實(shí)驗(yàn)名、課程名、班級(jí)、機(jī)房、
3、第幾大節(jié)、實(shí)驗(yàn)日期等信息的填寫(xiě),如圖(5)正確填寫(xiě)實(shí)驗(yàn)信息后,確認(rèn)登記后點(diǎn)提交,返回登記結(jié)果(6)登記成功后,重新打開(kāi)軟件即可看到剛才登記的實(shí)驗(yàn),如下圖(7)用戶(hù)登錄后可保存、清除登錄信息,不用每次使用都需要登錄,并在軟件主界面右上角顯示當(dāng)前用戶(hù)名,效果如下圖:清除登錄信息:點(diǎn)擊后彈出操作結(jié)果(8)通過(guò)菜單->上周、下周進(jìn)行上下周跳轉(zhuǎn)查詢(xún),(9)檢查更新、反饋等功能軟件每日啟動(dòng)都會(huì)檢查是否存在新版本并提示用戶(hù)下載反饋暫只通過(guò)短信方式反饋(10)軟件后臺(tái)運(yùn)行因移動(dòng)網(wǎng)絡(luò)下蝸牛般的網(wǎng)速,故提供后臺(tái)運(yùn)行功能,通過(guò)手機(jī)上的返回鍵并沒(méi)有真正退出而是后臺(tái)運(yùn)行了,對(duì)于手機(jī)網(wǎng)絡(luò)較慢的用戶(hù)(非Wifi下及3
4、G用戶(hù))是完全有必要的,需要通過(guò)菜單里的退出才能真正退出。三、軟件頁(yè)頭header部分設(shè)計(jì)1.包括軟件名稱(chēng),用戶(hù)登錄狀態(tài),及提示信息2.XML布局文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#ff009de4&quo
5、t;android:orientation="vertical"><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="38.0dp"android:background="#ff009de4"><ImageView省略部分代碼/><TextView省略部分代碼/><TextView省略部分代碼/><Button省略部分代碼/></RelativeLayo
6、ut><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#ff009de4"><TextView省略部分代碼android:text="獲取網(wǎng)絡(luò)數(shù)據(jù)中."/>-></RelativeLayout></LinearLayout>四、軟件主顯示部分設(shè)計(jì)1 .采用Viewpager+Listview實(shí)現(xiàn)滑
7、動(dòng)顯示周一到周日實(shí)驗(yàn)信息2 .部分XM垃局文件<?xmlversion="1.0"encoding="utf-8"?><LinearLayout省略部分代碼><LinearLayout省略部分代碼><include省略部分代碼layout="layout/header"/></LinearLayout><!-滑動(dòng)-><LinearLayout省略部分代碼><android.support.v4.view.ViewPager省略部分代碼>&l
8、t;android.support.v4.view.PagerTitleStrip省略部分代碼/></android.support.v4.view.ViewPager></LinearLayout><!-滑動(dòng)結(jié)束-></ LinearLayout >五、主Activity設(shè)計(jì)Cslab_listviewActivity.java1.onCreate()窗口生成函數(shù)Android軟件運(yùn)行后首先運(yùn)行主Activity,一個(gè)Activity代表一個(gè)窗口(一個(gè)類(lèi))軟件的登錄及等級(jí)實(shí)驗(yàn)分別用一個(gè)Activity來(lái)處理。每一個(gè)Activity都有on
9、Creat()函數(shù),用來(lái)生成窗口,本軟件的主ActivityCslab_listviewActivity.java的oncreatr()函數(shù)設(shè)計(jì)1、設(shè)置布局文件setContentView(R.layout.main);2、獲取系統(tǒng)日期時(shí)間SimpleDateFormatformatter=newSimpleDateFormat("yyyy-MM-dd");SimpleDateFormattimef=newSimpleDateFormat("yyyy年MM月dd日)SimpleDateFormatweeknumber=newSimpleDateFormat(&qu
10、ot;EEE");DatecurDate=newDate(System.currentTimeMillis();/獲取當(dāng)前時(shí)間String strformatter.format(curDate);StringweeknumberString=weeknumber.format(curDate);zhouji=weeknumberString;time=timef.format(curDate);3、檢查網(wǎng)絡(luò)情況,判斷系統(tǒng)版本initStrictMode();/判斷系統(tǒng)版本,防止出現(xiàn)NetworkOnMainThreadException異常處理,if(!CheckNetwork()
11、NetError();return;4. 從服務(wù)器獲取當(dāng)前第幾周GetWeekNumber();保存到成員變量中。采用多線(xiàn)程,避免ANRThreadt=newThread()Overridepublicvoidrun()省略部分代碼;t.start();/接收子線(xiàn)程消息handler=newHandler()OverridepublicvoidhandleMessage(Messagemsg)case2:省略部分代碼break;并保存5. 根據(jù)周數(shù)獲取實(shí)驗(yàn)信息privatevoidgetExperiment(finalStringweek)Stringexperiment=WebService
12、Result(NAMESPA,C"Experiment",1,newString"weeknumber",newStringweek);JSONObjectJsonExperiment=newJSONObject(experiment);ArrayExperiment=JsonExperiment.getJSONArray("ex");6. 顯示實(shí)驗(yàn)信息publicbooleanshowexperiment()" 星期一 " ); / 填充 ListViewexperimentlist1=buildexperime
13、ntListForSimpleAdapter(的數(shù)據(jù)notes1=newMyAdapter(this,experimentlist1,R.layout.experimentinfonew String "section","experiment",newintR.id.section,R.id.experimentinfo);mListView1.setAdapter(notes1);mViews.add(mListView1);7. 顯示本周實(shí)驗(yàn)信息privatevoidLoadThisweekExperiment()privatevoidLoadEx
14、periment()ThreadThnextweek=newThread()Overridepublicvoidrun();Thnextweek.start();nehandler=newHandler()OverridepublicvoidhandleMessage(Messagemsg)switch(msg.what)case1:break;8. 用變量記錄程序運(yùn)行時(shí)用戶(hù)上下周跳轉(zhuǎn)導(dǎo)致的周數(shù)變化,并用privatevoidLoadExperiment()顯示實(shí)驗(yàn)信息讀取用戶(hù)保存的賬號(hào)信息privatevoidgetusernamefromsetting()service=newPrefer
15、encesService(this);service .getUsername();Map<String,String>params=usernameString=params.get("username");9. 其他六、登錄模塊設(shè)計(jì)loginActivity.java1 .用戶(hù)名密碼輸入EditTextusernameEdit;EditTextpasswordEdit;2 .處理登錄請(qǐng)求,提交給Webservice服務(wù)器,并返回登錄結(jié)果成功或失敗privatevoidlogin()3 .返回主界面publicclassloginActivityextends
16、ActivityprivatePreferencesServiceservice;privatestaticfinalStringNAMESPA(=E"/Webservice命名空間privatestaticStringURL="WebService地址StringusernameString=""StringpasswordString=""EditTextusernameEdit;EditTextpasswordEdit;Handlerhandler;OverridepublicvoidonCreate(BundlesavedIn
17、stanceState)super.onCreate(savedInstanceState);setContentView(R.layout.login);getusernamefromsetting();usernameEdit=(EditText)findViewById(R.id.username_edit);passwordEdit=(EditText)findViewById(R.id.password_edit);usernameEdit.setText(usernameString);passwordEdit.setText(passwordString);usernameEdi
18、t.addTextChangedListener(newTextWatcher()省略代碼);passwordEdit.addTextChangedListener(newTextWatcher()省略代碼signin_button ););Buttonlogin_button=(Button)findViewById(R.id.clear );Buttonclear=(Button)findViewById(R.id.ButtonButton01=(Button)findViewById(R.id.Button01);Button01.setOnClickListener(newButton
19、.OnClickListener()OverridepublicvoidonClick(Viewarg0)/TODO自動(dòng)生成的方法存根省略代碼);clear.setOnClickListener(newButton.OnClickListener()OverridepublicvoidonClick(Viewv)清除賬號(hào)信息,省略代碼);login_button.setOnClickListener(newButton.OnClickListener()OverridepublicvoidonClick(Viewv)驗(yàn)證輸入是否正確,省略代碼elselogin(););privatevoidl
20、ogin()/TODO自動(dòng)生成的方法存根Threadt=newThread()Overridepublicvoidrun()新線(xiàn)程處理登錄;t.start();/啟動(dòng)線(xiàn)程/接收子線(xiàn)程消息handler=newHandler()OverridepublicvoidhandleMessage(Messagemsg)/TODOAuto-generatedmethodstubswitch(msg.what)case1:處理登錄結(jié)果,并提示用戶(hù),省略代碼break;int/web服務(wù)調(diào)用的函數(shù)publicStringWebServiceResult(Stringns,Stringmethod,arg_n
21、umber,Stringarg_name,Stringarg_value)Stringre=arg_name0+arg_value0;trySoapObjectrpc=newSoapObject(ns,method);if(arg_number!=0)for(inti=0;i<arg_number;i+)rpc.addProperty(arg_namei.toString(),arg_valuei.toString();AndroidHttpTransportht=newAndroidHttpTransport(URL);ht.debug=true;SoapSerializationEn
22、velopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut=rpc;envelope.dotNet=true;envelope.setOutputSoapObject(rpc);ht.call(ns+method,envelope);bodyIn ;SoapObjectresult=(SoapObject)envelope.re=result.getProperty(0).toString();catch(Exceptione)e.printStackTrace();returnre;七、登記
23、實(shí)驗(yàn)?zāi)K設(shè)計(jì):1 .檢查用戶(hù)是否登錄,若登陸繼續(xù),否則返回privatevoidchecklogin()2 .文本輸入框(EditView)、列表選擇框(spanner)、日期控件設(shè)置3 .從服務(wù)器獲取機(jī)房信息privatevoidgetTestRoom()4 .提交實(shí)驗(yàn)信息并返回處理結(jié)果給用戶(hù)privatevoidsubExperiment()5 .返回主界面publicclassaddexperimentextendsActivityprivatestaticfinalStringNAMESPAGE"/Webservice命名空間privatestaticStringURL=&q
24、uot;WebService地址Handlerhandler;privateintmYear;privateintmMonth;privateintmDa;yDatePickerdp;Stringusername=""Stringpassword=""Stringroom=""Stringtime=""Stringname="客戶(hù)端測(cè)試"Stringnumberstring=""Stringteacher="test"StringclassString=&
25、quot;計(jì)科101"StringcoursenameString="客戶(hù)端測(cè)試EditTextexperimentname;EditTextexperimentteacher;EditTextexperimentclass;EditTextcoursename;Spinnernumber;privatePreferencesServiceserviceStringusernameString=""StringpasswordString=""privateSpinnerroomSpinner;privateList<Strin
26、g>list=newArrayList<String>();privateList<String>numberlist=newArrayList<String>();privateArrayAdapter<String>roomadapter;privateArrayAdapter<String>numberadapter;OverridepublicvoidonCreate(BundlesavedInstanceState)checklogin();Calendarc=Calendar.getInstance();mYear=
27、c.get(Calendar.YEAR);mMonth=c.get(Calendar.MONT)HmDa=c.get(Calendar.DAY_OF_MON;THtime=""+mYea+"-"+(mMont+1)+”-"+mDaysuper.onCreate(savedlnstanceState);setContentView(R.layout.editcourse);/*取得TextView對(duì)象,并調(diào)用updateDisplay()來(lái)設(shè)置顯示的初始日期時(shí)間*/tv=(TextView)findViewById(R.id.showTime);
28、/updateDisplay();/*取得DatePicker對(duì)象,以init()設(shè)置初始值與onDateChangeListener()*/dp=(DatePicker)findViewById(R.id.dPicker);dp.init(mYearmMonthmDaynewDatePicker.OnDateChangedListener()OverridepublicvoidonDateChanged(DatePickerview,intyear,intmonthOfYear,intdayOfMonth)mYea=year;mMonth=monthOfYear+1;mDay=dayOfMo
29、nth;/*調(diào)用updateDisplay()來(lái)改變顯示日期*/time=""+mYear+"-"+mMonth+"-"+mDay;/updateDisplay(););experimentname=(EditText)findViewById(R.id.experimentname);coursename=(EditText)findViewById(R.id.coursename);number=(Spinner)findViewById(R.id.Spinner_number);experimentteacher=(EditTe
30、xt)findViewById(R.id.editText_teacher);experimentclass=(EditText)findViewById(R.id.editText_class);experimentname.addTextChangedListener(newTextWatcher()省略部分代碼);coursename.addTextChangedListener(newTextWatcher()省略部分代碼);experimentclass.addTextChangedListener(newTextWatcher()省略部分代碼);numberlist.add(&qu
31、ot;第一大節(jié)");numberlist.add("第二大節(jié)");numberlist.add("第三大節(jié)");numberlist.add("第四大節(jié)");numberlist.add("第五大節(jié)");getTestRoom();roomSpinner=(Spinner)findViewById(R.id.roomSpinner);roomadapter=newArrayAdapter<String>(this,android.R.layout.simple_spinner_item,lis
32、t);/第三步:為適配器設(shè)置下拉列表下拉時(shí)的菜單樣式。roomadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);/第四步:將適配器添加到下拉列表上roomSpinner.setAdapter(roomadapter);/第五步:為下拉列表設(shè)置各種事件的響應(yīng),這個(gè)事響應(yīng)菜單被選中roomSpinner.setOnItemSelectedListener(newSpinner.OnItemSelectedListener()SuppressWarningS"unchecked&qu
33、ot;)publicvoidonItemSelected(AdapterViewarg0,Viewargl,intarg2,longarg3)省略部分代碼);numberadapter=newArrayAdapter<String>(this,android.R.layout.simple_spinner_item,numberlist);省略部分代碼Buttonbutton_cancel=(Button)findViewById(R.id.button_cancel);button_cancel.setOnClickListener(newButton.OnClickListen
34、er()OverridepublicvoidonClick(Viewv)finish(););Buttonbutton_save=(Button)findViewById(R.id.button_save);button_save.setOnClickListener(newButton.OnClickListener()OverridepublicvoidonClick(Viewv)newAlertDialog.Builder(addexperiment.this).setTitle("確認(rèn)登記").setMessage("時(shí)間:"+time+&quo
35、t;n"+"節(jié)次:"+numberstring+"n"+"課程名:"+name+"n"+"實(shí)驗(yàn)名:"+coursenameString+"n"+"教師:"+teacher+"n"+"機(jī)房:"+room+"n"+"班級(jí):"+classString).setIcon(android.R.drawable.ic_dialog_info).setPositiveButton(
36、"確定",newDialogInterface.OnClickListener()publicvoidonClick(DialogInterfacedialog,intwhichButton)/編寫(xiě)處理提交實(shí)驗(yàn)的代碼)new.setNegativeButton("取消",DialogInterface.OnClickListener()publicvoidonClick(DialogInterfacedialog,intwhichButton)finish();/取消).show(););privatevoidgetTestRoom()/TODOt取機(jī)房
37、信息ThreadroomExperiment=newThread()Overridepublicvoidrun()多線(xiàn)程處理,避免ANR省略部分代碼;roomExperiment.start();handler=newHandler()OverridepublicvoidhandleMessage(Messagemsg)switch(msg.what)case1:處理登記實(shí)驗(yàn)返回結(jié)果省略部分代碼;privatevoidchecklogin()getusernamefromsetting();/檢查是否登錄if(usernameString.isEmpty()newAlertDialog.Bui
38、lder(addexperiment.this).setTitle("提示").setMessage("請(qǐng)登陸,再繼續(xù)!").setIcon(android.R.drawable.ic_dialog_info).setPositiveButton("登錄",newDialogInterface.OnClickListener()publicvoidonClick(DialogInterfacedialog,intwhichButton)finish();IntentloginIntent=newIntent();loginIntent
39、.setClass(addexperiment.thisloginActivity.class);startActivity(loginlntent);/finish();/編寫(xiě)處理shi的代碼).setNegativeButton("返回",newDialogInterface.OnClickListener()publicvoidonClick(DialogInterfacedialog,intwhichButton)finish();/finish();/編寫(xiě)處理shi的代碼).show();/*d登記實(shí)驗(yàn)*/privatevoidsubExperiment()Thr
40、eadThsubExperiment=newThread()Overridepublicvoidrun()Messagelmsg;Stringarg_name="username","passwd","coursename","experimentname"classname","snumber",testdate"testroom","testtime",;Stringarg_value=usernameString,passwordStrin
41、g,coursenameString,name,classString,"",time,room,numberstring;lmsg=newMessage();tryJSONObjectjsonreg=newJSONObject(WebServiceResult(NAMESPA,C"ERegTest",9,arg_name,arg_value);StringRegTestResult=jsonreg.getString("result");lmsg.obj=RegTestResult;/StringreString=jsonreg.toString();/lmsg.obj=reString;/lmsg.obj=WebServiceResult(NAMESPACE,"RegTest",9,arg_name,arg_value);lmsg.what=1;handler.sendMessage(lmsg);catch(Exceptione)/TODO自動(dòng)生成的catch塊e.printStackTrace();
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 董卿一年級(jí)數(shù)學(xué)試卷
- 肝患者臨床護(hù)理
- 甘肅省臨洮縣數(shù)學(xué)試卷
- 肛癰的護(hù)理課件
- 福州春考數(shù)學(xué)試卷
- 肉鴿養(yǎng)殖技術(shù)課件教學(xué)
- 肉豬養(yǎng)殖技術(shù)課件
- 2024年10月陜西陜西農(nóng)信社社會(huì)招考筆試歷年參考題庫(kù)附帶答案詳解
- 2025至2030國(guó)際快遞行業(yè)市場(chǎng)深度研究與戰(zhàn)略咨詢(xún)分析報(bào)告
- 邯鄲市館陶縣事業(yè)單位招聘考試真題2024
- DB13-T 3035-2023 建筑消防設(shè)施維護(hù)保養(yǎng)技術(shù)規(guī)范
- 汽車(chē) 4S 店防汛應(yīng)急預(yù)案
- 青海省西寧市(2024年-2025年小學(xué)四年級(jí)語(yǔ)文)人教版質(zhì)量測(cè)試(下學(xué)期)試卷及答案
- 2024足球競(jìng)賽規(guī)則全套解讀
- SMAW和GTAW焊接作業(yè)焊接工藝
- 大瀝中學(xué)初一分班考試卷
- 正式委托代理合同范本
- 蘇教版2023-2024學(xué)年小學(xué)五年級(jí)下冊(cè)數(shù)學(xué)暑假練習(xí)(假期作業(yè))合集21份
- 生物-湖南省邵陽(yáng)市2023-2024學(xué)年高二下學(xué)期7月期末聯(lián)考試題和答案
- 西師版三年級(jí)下冊(cè)數(shù)學(xué)練習(xí)冊(cè)思維拓展解決問(wèn)題
- 軟件開(kāi)發(fā)項(xiàng)目進(jìn)度管理
評(píng)論
0/150
提交評(píng)論