軟件詳細(xì)設(shè)計(jì)報告_第1頁
軟件詳細(xì)設(shè)計(jì)報告_第2頁
軟件詳細(xì)設(shè)計(jì)報告_第3頁
軟件詳細(xì)設(shè)計(jì)報告_第4頁
軟件詳細(xì)設(shè)計(jì)報告_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心-Android手機(jī)客戶端學(xué)生姓名:宋同煜 張宗森 指導(dǎo)老師:裴斐 專業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 102在移動互聯(lián)網(wǎng)發(fā)展迅猛的今天,在Android完全開源及擁有龐大用戶群的環(huán)境下,迫切需要為計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心網(wǎng)站開發(fā)Andriod手機(jī)客戶端,方便計(jì)算機(jī)學(xué)院師生隨時隨地查看實(shí)驗(yàn)信息、登記實(shí)驗(yàn)等。一、系統(tǒng)分析需求分析查詢實(shí)驗(yàn):教師及學(xué)生可以查詢當(dāng)周及上一周、下一周實(shí)驗(yàn)安排登記實(shí)驗(yàn):教師登錄后可以登記實(shí)驗(yàn)引言為方便計(jì)算機(jī)學(xué)院教師及學(xué)生查詢、登記實(shí)驗(yàn),因此開發(fā)實(shí)驗(yàn)中心Android手機(jī)端軟件編寫目的 本文檔對計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心網(wǎng)站手機(jī)客戶端的功能、用戶界面、運(yùn)行環(huán)境等作出詳細(xì)說明。項(xiàng)目背

2、景軟件的開發(fā)名稱:計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心項(xiàng)目需求單位:計(jì)算機(jī)學(xué)院全體師生項(xiàng)目開發(fā)單位:宋同煜 張宗森二、系統(tǒng)設(shè)計(jì)系統(tǒng)目標(biāo)1.實(shí)現(xiàn)需求分析階段的所有功能2.主界面清晰、簡單、操作易行系統(tǒng)功能預(yù)覽該軟件主要包括查詢、登錄、登記實(shí)驗(yàn)3個功能模塊,主要操作如下:(1) 運(yùn)行軟件后,首先檢查網(wǎng)絡(luò)連接是否正常,如果正常,獲取當(dāng)周實(shí)驗(yàn)安排信息,顯示給用戶,效果如圖(2) 通過“菜單-登記實(shí)驗(yàn)”進(jìn)入等級實(shí)驗(yàn)頁面,要求輸入用戶名密碼才可繼續(xù)點(diǎn)擊“登錄實(shí)驗(yàn)” 后,提示登錄后才能繼續(xù)(3)點(diǎn)擊登錄進(jìn)入登錄頁面,如圖正確輸入用戶名密碼后點(diǎn)提交(4)用戶名密碼輸入正確,就可以登記實(shí)驗(yàn)了,次頁面包含實(shí)驗(yàn)名、課程名、班級、機(jī)房

3、、第幾大節(jié)、實(shí)驗(yàn)日期等信息的填寫,如圖 (5)正確填寫實(shí)驗(yàn)信息后,確認(rèn)登記后點(diǎn)提交,返回登記結(jié)果(6)登記成功后,重新打開軟件即可看到剛才登記的實(shí)驗(yàn),如下圖(7)用戶登錄后可保存、清除登錄信息,不用每次使用都需要登錄,并在軟件主界面右上角顯示當(dāng)前用戶名,效果如下圖:清除登錄信息:點(diǎn)擊后彈出操作結(jié)果(8)通過菜單-上周、下周進(jìn)行上下周跳轉(zhuǎn)查詢,(9)檢查更新、反饋等功能軟件每日啟動都會檢查是否存在新版本并提示用戶下載反饋暫只通過短信方式反饋(10)軟件后臺運(yùn)行因移動網(wǎng)絡(luò)下蝸牛般的網(wǎng)速,故提供后臺運(yùn)行功能,通過手機(jī)上的返回鍵并沒有真正退出而是后臺運(yùn)行了,對于手機(jī)網(wǎng)絡(luò)較慢的用戶(非Wifi下及3G用

4、戶)是完全有必要的,需要通過菜單里的退出才能真正退出。三、軟件頁頭header部分設(shè)計(jì)1.包括軟件名稱,用戶登錄狀態(tài),及提示信息2.XML布局文件 -四、軟件主顯示部分設(shè)計(jì)1. 采用Viewpager+Listview 實(shí)現(xiàn)滑動顯示周一到周日實(shí)驗(yàn)信息2. 部分XML布局文件 五、主Activity設(shè)計(jì)Cslab_listviewActivity.java1. onCreate()窗口生成函數(shù)Android 軟件運(yùn)行后首先運(yùn)行主Activity,一個Activity代表一個窗口(一個類)軟件的登錄及等級實(shí)驗(yàn)分別用一個Activity來處理。每一個Activity都有onCreat()函數(shù),用來生

5、成窗口,本軟件的主Activity Cslab_listviewActivity.java的oncreatr()函數(shù)設(shè)計(jì)1、設(shè)置布局文件 setContentView(R.layout.main);2、獲取系統(tǒng)日期時間 SimpleDateFormat formatter = new SimpleDateFormat (yyyy-MM-dd); SimpleDateFormat timef = new SimpleDateFormat (yyyy年MM月dd日); SimpleDateFormat weeknumber = new SimpleDateFormat (EEE); Date cu

6、rDate = new Date(System.currentTimeMillis();/獲取當(dāng)前時間 String str = formatter.format(curDate); String weeknumberString=weeknumber.format(curDate); zhouji=weeknumberString; time=timef.format(curDate); 3、檢查網(wǎng)絡(luò)情況,判斷系統(tǒng)版本 initStrictMode();/判斷系統(tǒng)版本,防止出現(xiàn)NetworkOnMainThreadException 異常處理, if (!CheckNetwork() Net

7、Error(); return; 4.從服務(wù)器獲取當(dāng)前第幾周 GetWeekNumber(); 保存到成員變量中。采用多線程,避免ANRThread t = new Thread() Override public void run() 省略部分代碼 ; t.start(); /接收子線程消息 handler = new Handler() Override public void handleMessage(Message msg) case 2:省略部分代碼 break; ;5.根據(jù)周數(shù)獲取實(shí)驗(yàn)信息private void getExperiment(final String week)并

8、保存String experiment=WebServiceResult(NAMESPACE,Experiment,1,new Stringweeknumber,new Stringweek);JSONObject JsonExperiment = new JSONObject(experiment); ArrayExperiment=JsonExperiment.getJSONArray(ex);6.顯示實(shí)驗(yàn)信息public boolean showexperiment()experimentlist1 = buildexperimentListForSimpleAdapter(星期一);/

9、填充ListView的數(shù)據(jù) notes1 = new MyAdapter(this, experimentlist1, R.layout.experimentinfo, new String section, experiment, new int R.id.section, R.id.experimentinfo); mListView1.setAdapter(notes1); mViews.add(mListView1);7.顯示本周實(shí)驗(yàn)信息private void LoadThisweekExperiment()private void LoadExperiment() Thread T

10、hnextweek = new Thread() Overridepublic void run() ;Thnextweek.start();nehandler = new Handler() Overridepublic void handleMessage(Message msg) switch (msg.what) case 1: break; ;8.用變量記錄程序運(yùn)行時用戶上下周跳轉(zhuǎn)導(dǎo)致的周數(shù)變化,并用private void LoadExperiment() 顯示實(shí)驗(yàn)信息讀取用戶保存的賬號信息private void getusernamefromsetting() service

11、= new PreferencesService(this); Map params = service.getUsername(); usernameString=params.get(username);9.其他六、登錄模塊設(shè)計(jì)loginActivity.java1. 用戶名密碼輸入EditText usernameEdit;EditText passwordEdit;2. 處理登錄請求,提交給Webservice服務(wù)器,并返回登錄結(jié)果成功或失敗private void login()3.返回主界面public class loginActivity extends Activity pr

12、ivate PreferencesService service; private static final String NAMESPACE = /Webservice命名空間private static String URL = / WebService地址String usernameString=;String passwordString=;EditText usernameEdit;EditText passwordEdit;Handler handler; Overridepublic void onCreate(Bundle savedInstanceState) super.

13、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); usernameEdit.addTextCh

14、angedListener(new TextWatcher() 省略代碼); passwordEdit.addTextChangedListener(new TextWatcher() 省略代碼); Button login_button=(Button)findViewById(R.id.signin_button); Button clear=(Button)findViewById(R.id.clear); Button Button01=(Button)findViewById(R.id.Button01); Button01.setOnClickListener(new Button

15、.OnClickListener()Overridepublic void onClick(View arg0) / TODO 自動生成的方法存根省略代碼 ); clear.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) 清除賬號信息,省略代碼); login_button.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) 驗(yàn)證輸入是否正確,省略代碼else

16、login();); private void login() / TODO 自動生成的方法存根Thread t = new Thread() Overridepublic void run() 新線程 處理登錄;t.start();/ 啟動線程/ 接收子線程消息handler = new Handler() Overridepublic void handleMessage(Message msg) / TODO Auto-generated method stubswitch (msg.what) case 1: 處理登錄結(jié)果,并提示用戶,省略代碼break;/web服務(wù)調(diào)用的函數(shù)publ

17、ic String WebServiceResult(String ns,String method,int arg_number,String arg_name,String arg_value)String re =arg_name0+arg_value0;try SoapObject rpc = new SoapObject(ns, method);if (arg_number != 0)for (int i=0;iarg_number;i+)rpc.addProperty(arg_namei.toString(), arg_valuei.toString();AndroidHttpTr

18、ansport ht = new AndroidHttpTransport(URL);ht.debug = true;SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = rpc;envelope.dotNet = true;envelope.setOutputSoapObject(rpc);ht.call(ns + method, envelope);SoapObject result = (SoapObject) envelope.b

19、odyIn;re = result.getProperty(0).toString(); catch (Exception e) e.printStackTrace();return re;七、登記實(shí)驗(yàn)?zāi)K設(shè)計(jì):1. 檢查用戶是否登錄,若登陸繼續(xù),否則返回private void checklogin() 2. 文本輸入框(EditView)、列表選擇框(spanner)、日期控件設(shè)置3. 從服務(wù)器獲取機(jī)房信息private void getTestRoom() 4. 提交實(shí)驗(yàn)信息并返回處理結(jié)果給用戶 private void subExperiment()5. 返回主界面public cla

20、ss addexperiment extends Activity private static final String NAMESPACE = /Webservice命名空間private static String URL = / WebService地址Handler handler;private int mYear; private int mMonth; private int mDay; DatePicker dp;String username=;String password=;String room=;String time=;String name=客戶端測試;Stri

21、ng numberstring=;String teacher=test;String classString=計(jì)科101;String coursenameString=客戶端測試;EditText experimentname;EditText experimentteacher;EditText experimentclass;EditText coursename;Spinner number; private PreferencesService service; String usernameString=; String passwordString=; private Spin

22、ner roomSpinner; private List list = new ArrayList(); private List numberlist = new ArrayList(); private ArrayAdapter roomadapter; private ArrayAdapter numberadapter; Overridepublic void onCreate(Bundle savedInstanceState) checklogin(); Calendar c=Calendar.getInstance(); mYear=c.get(Calendar.YEAR);

23、mMonth=c.get(Calendar.MONTH); mDay=c.get(Calendar.DAY_OF_MONTH); time=+mYear+-+(mMonth+1)+-+mDay; super.onCreate(savedInstanceState); setContentView(R.layout.editcourse); /*取得TextView對象,并調(diào)用updateDisplay()來設(shè)置顯示的初始日期時間*/ /tv= (TextView) findViewById(R.id.showTime); /updateDisplay(); /*取得DatePicker對象,以

24、init() 設(shè)置初始值與onDateChangeListener() */ dp=(DatePicker)findViewById(R.id.dPicker); dp.init(mYear,mMonth,mDay,new DatePicker.OnDateChangedListener() Override public void onDateChanged(DatePicker view,int year, int monthOfYear,int dayOfMonth) mYear=year; mMonth= monthOfYear+1; mDay=dayOfMonth; /*調(diào)用upda

25、teDisplay()來改變顯示日期*/ 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=(EditText)findViewById(R.id.editText_teacher);

26、experimentclass=(EditText)findViewById(R.id.editText_class); experimentname.addTextChangedListener(new TextWatcher() 省略部分代碼); coursename.addTextChangedListener(new TextWatcher() 省略部分代碼); experimentclass.addTextChangedListener(new TextWatcher() 省略部分代碼); numberlist.add(第一大節(jié)); numberlist.add(第二大節(jié)); num

27、berlist.add(第三大節(jié)); numberlist.add(第四大節(jié)); numberlist.add(第五大節(jié)); getTestRoom(); roomSpinner = (Spinner)findViewById(R.id.roomSpinner); roomadapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, list); /第三步:為適配器設(shè)置下拉列表下拉時的菜單樣式。 roomadapter.setDropDownViewResource(android.R.layout.simple_s

28、pinner_dropdown_item); /第四步:將適配器添加到下拉列表上 roomSpinner.setAdapter(roomadapter); /第五步:為下拉列表設(shè)置各種事件的響應(yīng),這個事響應(yīng)菜單被選中 roomSpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() SuppressWarnings(unchecked) public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) 省略部分代碼 ); n

29、umberadapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, numberlist); 省略部分代碼 Button button_cancel=(Button)findViewById(R.id.button_cancel); button_cancel.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) finish();); Button button_save=(Button)findV

30、iewById(R.id.button_save); button_save.setOnClickListener(new Button.OnClickListener() Overridepublic void onClick(View v) new AlertDialog.Builder(addexperiment.this) .setTitle(確認(rèn)登記) .setMessage(時間:+time+n+節(jié)次:+numberstring+n+ 課程名:+name+n+ 實(shí)驗(yàn)名:+coursenameString+n+ 教師:+teacher+n+ 機(jī)房:+room+n+ 班級:+class

31、String ) .setIcon(android.R.drawable.ic_dialog_info) .setPositiveButton(確定,new DialogInterface.OnClickListener()public void onClick(DialogInterface dialog,int whichButton)/ 編寫處理提交實(shí)驗(yàn)的代碼) .setNegativeButton(取消, new DialogInterface.OnClickListener()public void onClick(DialogInterface dialog,int whichBu

32、tton)finish();/ 取消 ) .show();); private void getTestRoom() / TODO 獲取機(jī)房信息 Thread roomExperiment = new Thread() Overridepublic void run() 多線程處理,避免ANR,省略部分代碼;roomExperiment.start();handler = new Handler() Overridepublic void handleMessage(Message msg) switch (msg.what) case 1: 處理登記實(shí)驗(yàn)返回結(jié)果省略部分代碼 ; privat

33、e void checklogin() getusernamefromsetting(); / 檢查是否登錄 if(usernameString.isEmpty() new AlertDialog.Builder(addexperiment.this) .setTitle(提示) .setMessage(請登陸,再繼續(xù)! ) .setIcon(android.R.drawable.ic_dialog_info) .setPositiveButton(登錄,new DialogInterface.OnClickListener()public void onClick(DialogInterfa

34、ce dialog,int whichButton) finish(); Intent loginIntent=new Intent(); loginIntent.setClass(addexperiment.this, loginActivity.class); startActivity(loginIntent);/finish();/ 編寫處理shi的代碼).setNegativeButton(返回,new DialogInterface.OnClickListener()public void onClick(DialogInterface dialog,int whichButton

35、)finish();/finish();/ 編寫處理shi的代碼).show(); /* * d登記實(shí)驗(yàn) */ private void subExperiment() Thread ThsubExperiment = new Thread() Overridepublic void run() Message lmsg;String arg_name = username, passwd, coursename, experimentname, classname, snumber, testdate, testroom, testtime, ;String arg_value = user

36、nameString,passwordString,coursenameString,name,classString,time,room,numberstring; lmsg=new Message();try JSONObject jsonreg=new JSONObject(WebServiceResult(NAMESPACE,RegTest,9,arg_name,arg_value);String RegTestResult = jsonreg.getString(result);lmsg.obj = RegTestResult;/String reString=jsonreg.toString();/lmsg.obj=reString;/lmsg.obj = WebServiceResult(NAMESPACE,RegTest,9,arg_name,arg_value);lmsg.what = 1;handler.sendMessage(lmsg); catch (Exception e) / TODO 自動生成的 catch 塊e.printStack

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論