安卓課程設(shè)計(jì).doc_第1頁(yè)
安卓課程設(shè)計(jì).doc_第2頁(yè)
安卓課程設(shè)計(jì).doc_第3頁(yè)
安卓課程設(shè)計(jì).doc_第4頁(yè)
安卓課程設(shè)計(jì).doc_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

移動(dòng)通信課程設(shè)計(jì) 題 目 聯(lián)系人管理 姓名學(xué)號(hào) 院 系 計(jì)算機(jī)與軟件學(xué)院 專 業(yè) 指導(dǎo)教師 二一二年六月五日27聯(lián)系人管理1概述1.1 設(shè)計(jì)平臺(tái)介紹Android是Google推出的開源手機(jī)操作系統(tǒng)。它基于Linux平臺(tái),由操作系統(tǒng)、中間件、用戶界面和應(yīng)用軟件組成,具有以下5個(gè)特點(diǎn):1、開放性。2、應(yīng)用程序無界限。3、應(yīng)用程序是在平等條件下創(chuàng)建的。4、應(yīng)用程序可以輕松的嵌入網(wǎng)絡(luò)。5、應(yīng)用程序可以并行運(yùn)行。Android平臺(tái)特性: 1、應(yīng)用程序框架 支持組件的重用與替換。2、Dalvik 虛擬機(jī) 專為移動(dòng)設(shè)備優(yōu)化。 3、集成的瀏覽器 基于開源的WebKit 引擎。 4、優(yōu)化的圖形庫(kù) 包括定制的2D圖形庫(kù),3D圖形庫(kù)基于OpenGL ES 1.0 (硬件加速可選)。 5、SQLite 用作結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)。 6、多媒體支持 包括常見的音頻、視頻和靜態(tài)圖像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)。 7、GSM 電話技術(shù) (依賴于硬件)。 8、藍(lán)牙Bluetooth, EDGE, 3G, 和 WiFi (依賴于硬件)。 9、照相機(jī),GPS,指南針,和加速度計(jì)(accelerometer) (依賴于硬件)。 10、豐富的開發(fā)環(huán)境 包括設(shè)備模擬器,調(diào)試工具,內(nèi)存及性能分析圖表,和Eclipse集成開發(fā)環(huán)境插件。Android 架構(gòu):如圖1-1圖1-1 android架構(gòu)Android的應(yīng)用層是用Java語言編寫的運(yùn)行在虛擬機(jī)上的程序,我們課程設(shè)計(jì)中所用到開發(fā)語言就是Java。1.2 課題描敘這次課程設(shè)計(jì)我做的是一個(gè)手機(jī)聯(lián)系人管理的小軟件,它可以設(shè)置聯(lián)系的詳細(xì)資料,幫助你記住你朋友的號(hào)碼,郵編,住址等。把QQ里面的頭像圖片加載了進(jìn)來,可以根據(jù)你的喜愛設(shè)置你的朋友的可愛頭像,并且可以把聯(lián)系人備份到SD卡中,方便保存,以免在刷機(jī)等突發(fā)情況時(shí)丟失聯(lián)系人信息,下次只要重新從SD卡中導(dǎo)入到手機(jī)中即可,非常方便實(shí)用。1.3 需求分析這是個(gè)信息膨脹的時(shí)代,隨著網(wǎng)絡(luò)的發(fā)展,我們的朋友越來越多,所以朋友的信息就越來越多了,朋友的手機(jī)號(hào)碼,固定電話號(hào)碼,家庭住址,郵編等。手機(jī)是現(xiàn)在人們最隨身帶的電子產(chǎn)品之一,所以想到了在手機(jī)上做一款聯(lián)系人管理軟件,來幫助我們記錄和管理聯(lián)系人的資料,隨時(shí)隨地都可以看到,方便實(shí)用,成本也很低。基于以上的想法,進(jìn)行了一些簡(jiǎn)單的可行性分析,主要問題在于技術(shù)的實(shí)現(xiàn)問題。就我們現(xiàn)在所學(xué),對(duì)于實(shí)現(xiàn)我們想要的軟件功能完全是可能的,所以借助于各種參考文獻(xiàn)和網(wǎng)絡(luò)資料,開始了軟件的開發(fā)。2移動(dòng)通信軟件的設(shè)計(jì)2.1功能模塊圖 手機(jī)聯(lián)系人管理軟件包括以下幾個(gè)功能:增加新的聯(lián)系人,查找已有的聯(lián)系人,刪除單個(gè)聯(lián)系人,刪除所有聯(lián)系人,修改聯(lián)系人信息,備份聯(lián)系人,還原聯(lián)系人,檢查軟件更新信息。如圖2-1所示:圖2-1功能總體模塊圖2.2系統(tǒng)流程圖2.2.1系統(tǒng)整體流程圖 用戶進(jìn)入系統(tǒng)后首先看到的是聯(lián)系人列表界面,如果沒有聯(lián)系人則顯示無信息。按下Menw建,我們會(huì)看到添加,查找,刪除,菜單,退出幾個(gè)選項(xiàng),我們可以進(jìn)行聯(lián)系人的添加,查找,刪除等操作。雙擊聯(lián)系人,我們可以進(jìn)入查看聯(lián)系人信息的界面,可以進(jìn)行修改資料,刪除等操作。當(dāng)我們點(diǎn)擊菜單選項(xiàng)時(shí),我們會(huì)看到顯示所有聯(lián)系人,刪除所有,備份,還原,更新等,進(jìn)行各項(xiàng)操作。如圖2-2所示:圖2-2系統(tǒng)整體流程圖2.2.2添加聯(lián)系人模塊流圖添加聯(lián)系人模塊,在我們添加聯(lián)系人時(shí),會(huì)進(jìn)行名字的判斷,聯(lián)系人列表中是否已經(jīng)有該聯(lián)系的名字和信息,如果有則會(huì)提醒出現(xiàn)錯(cuò)誤,要求你返回聯(lián)系人列表。所以該數(shù)據(jù)流圖會(huì)有一個(gè)判定框的功能實(shí)現(xiàn)該檢查功能。具體的數(shù)據(jù)流圖如圖2-3所示:圖2-3添加聯(lián)系人數(shù)據(jù)流圖2.2.3修改聯(lián)系人數(shù)據(jù)流圖我們?cè)诼?lián)系人菜單,對(duì)聯(lián)系人進(jìn)行信息修改時(shí),需要對(duì)我們輸入的聯(lián)系人信息進(jìn)行判斷,判斷其是否合乎我們要求的格式等,所以進(jìn)行了一個(gè)判定,修改信息錯(cuò)誤時(shí)會(huì)報(bào)錯(cuò),具體功能實(shí)現(xiàn),如下圖2-4所示:圖2-4修改信息流程圖2.2.4刪除聯(lián)系人數(shù)據(jù)流圖刪除聯(lián)系人得原理和添加差不多,只是會(huì)提示是否確認(rèn)刪除,以免失誤刪除重要信息,數(shù)據(jù)流圖2-5所示:圖2-5刪除聯(lián)系人數(shù)據(jù)流圖2.2.5備份與還原的數(shù)據(jù)流圖在菜單的選項(xiàng)中,實(shí)現(xiàn)數(shù)據(jù)的備份與還原時(shí),數(shù)據(jù)是在手機(jī)和SD卡之間轉(zhuǎn)換的,導(dǎo)入導(dǎo)出之前都進(jìn)行確認(rèn)詢問,最終完成操作。具體數(shù)據(jù)流圖如圖2-6所示:圖2-6數(shù)據(jù)備份流圖2.3軟件界面風(fēng)格設(shè)計(jì)進(jìn)行了數(shù)據(jù)流圖的分析之后,開始準(zhǔn)備進(jìn)行軟件界面風(fēng)格的整體和細(xì)節(jié)設(shè)計(jì),主界面,聯(lián)系人界面,各種操作的界面,都進(jìn)行了設(shè)想與設(shè)計(jì),以方便軟件功能的實(shí)現(xiàn),由于初次做,所以布局等可能有些不合理,界面比較粗糙。3軟件功能的具體實(shí)現(xiàn)3.1聯(lián)系人主界面模塊我們打開軟件,第一個(gè)看到的就是聯(lián)系人列表,顯示聯(lián)系人得頭像,姓名和手機(jī)號(hào)碼信息,很簡(jiǎn)約的風(fēng)格,如圖5-1所示。按下Menw鍵,我們可以看到下面會(huì)顯示出5個(gè)功能菜單,所實(shí)現(xiàn)的功能是分別是添加新的聯(lián)系人,查找具體的聯(lián)系人,刪除單個(gè)聯(lián)系人,打開菜單選項(xiàng)和退出軟件,如圖5-2所示。圖5-1聯(lián)系人列表界面圖5-2Menw功能選項(xiàng)此時(shí)按下菜單鍵,會(huì)出現(xiàn)菜單的選項(xiàng),出現(xiàn)如圖5-3的功能選項(xiàng)。圖5-3菜單的功能選項(xiàng)關(guān)鍵代碼:public class Main extends Activity ListView lv;ArrayList list;SimpleAdapter adapter;GridView bottomMenuGrid;GridView mainMenuGrid;View mainMenuView;View loginView;LinearLayout searchLinearout;LinearLayout mainLinearLayout;EditText et_search;EditText et_enter_file_name;AlertDialog mainMenuDialog;AlertDialog confirmDialog;AlertDialog progressDialog;AlertDialog enterFileNameDialog;AlertDialog loginDialog;boolean privacy = false;int markedNum;ArrayList deleteId;String main_menu_itemName = 顯示所有, 刪除所有, 備份數(shù)據(jù), 還原數(shù)據(jù), 更新, 后退;/主菜單圖片int main_menu_itemSource = R.drawable.showall, R.drawable.menu_delete, R.drawable.menu_backup, R.drawable.menu_restore, R.drawable.menu_fresh, R.drawable.menu_return;String bottom_menu_itemName = 增加, 查找, 刪除, 菜單,退出 ;String fileName;int bottom_menu_itemSource = R.drawable.menu_new_user,R.drawable.menu_search,R.drawable.menu_delete, R.drawable.controlbar_showtype_list,R.drawable.menu_exit ; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); mainLinearLayout = (LinearLayout)findViewById(R.id.list_ll); DBHelper helper = new DBHelper(this); helper.openDatabase(); list = helper.getAllUser(privacy); lv = (ListView)findViewById(R.id.lv_userlist); /創(chuàng)建ListView對(duì)象 if(list.size() = 0) Drawable nodata_bg = getResources().getDrawable(R.drawable.nodata_bg);mainLinearLayout.setBackgroundDrawable(nodata_bg);setTitle(沒有查到任何數(shù)據(jù)); adapter = new SimpleAdapter(this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) HashMap item = (HashMap)arg0.getItemAtPosition(arg2);int _id = Integer.parseInt(String.valueOf(item.get(_id);Intent intent = new Intent(Main.this,UserDetail.class);User user = new User();user._id = Integer.parseInt(String.valueOf(item.get(_id);user.address = String.valueOf(item.get(address);pany = String.valueOf(item.get(company);user.email = String.valueOf(item.get(email);user.familyPhone = String.valueOf(item.get(familyphone);user.mobilePhone = String.valueOf(item.get(mobilephone);user.officePhone = String.valueOf(item.get(officephone);user.otherContact = String.valueOf(item.get(othercontact);user.position = String.valueOf(item.get(position);user.remark = String.valueOf(item.get(remark);user.username = String.valueOf(item.get(name);user.zipCode = String.valueOf(item.get(zipcode);user.imageId = Integer.parseInt(String.valueOf(item.get(imageid);intent.putExtra(user, user);if(searchLinearout != null & searchLinearout.getVisibility()=View.VISIBLE) searchLinearout.setVisibility(View.GONE);startActivityForResult(intent, arg2);); lv.setCacheColorHint(Color.TRANSPARENT); /設(shè)置ListView的背景為透明 lv.setOnItemLongClickListener(new OnItemLongClickListener()Overridepublic boolean onItemLongClick(AdapterView arg0, View arg1,int arg2, long arg3) if(deleteId = null) deleteId = new ArrayList();HashMap item = (HashMap)arg0.getItemAtPosition(arg2);Integer _id = Integer.parseInt(String.valueOf(item.get(_id);RelativeLayout r = (RelativeLayout)arg1;ImageView markedView = (ImageView)r.getChildAt(2);if(markedView.getVisibility() = View.VISIBLE) markedView.setVisibility(View.GONE);deleteId.remove(_id); else markedView.setVisibility(View.VISIBLE);deleteId.add(_id);return true; ); Drawable bgDrawable = getResources().getDrawable(R.drawable.list_bg); lv.setSelector(bgDrawable); Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) super.onActivityResult(requestCode, resultCode, data);if(deleteId != null) deleteId.clear();if(resultCode = 3 | resultCode = 4) DBHelper helper = new DBHelper(this); list = helper.getAllUser(privacy); adapter = new SimpleAdapter( this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); if(list.size() 0) mainLinearLayout.setBackgroundDrawable(null); lv.setAdapter(adapter);if(resultCode = 3) lv.setSelection(list.size(); else lv.setSelection(requestCode);3.2菜單功能實(shí)現(xiàn)菜單的功能選項(xiàng)是顯示所有聯(lián)系人,刪除所有聯(lián)系人,備份聯(lián)系人,還原聯(lián)系人,檢查更新和返回。如圖5-4所示為備份功能。圖5-4備份功能選項(xiàng)關(guān)鍵代碼:private void loadMainMenuDialog() if(mainMenuDialog = null) LayoutInflater li = LayoutInflater.from(this);mainMenuView = li.inflate(R.layout.main_menu_grid, null); mainMenuDialog = new AlertDialog.Builder(this).setView(mainMenuView).create(); mainMenuGrid = (GridView)mainMenuView.findViewById(R.id.gridview); SimpleAdapter menuAdapter = getMenuAdapter(main_menu_itemName, main_menu_itemSource); mainMenuGrid.setAdapter(menuAdapter); mainMenuGrid.setOnItemClickListener(new OnItemClickListener()Overridepublic void onItemClick(AdapterView arg0, View arg1, int arg2,long arg3) switch(arg2)case 0: DBHelper helper = new DBHelper(Main.this); list = helper.getAllUser(privacy); adapter = new SimpleAdapter( Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter);/顯示所有數(shù)據(jù) mainMenuDialog.dismiss();break;case 1:AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);confirmDialog = builder.create();builder.setTitle(是否刪除所有!?);builder.setPositiveButton(確定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this); helper.deleteAll(0); list = helper.getAllUser(privacy); adapter = new SimpleAdapter( Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter);/顯示所有數(shù)據(jù) mainMenuDialog.dismiss(););builder.setNegativeButton(取消, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) confirmDialog.dismiss(););builder.create().show();break;case 2:mainMenuDialog.dismiss();new AlertDialog.Builder(Main.this).setTitle(是否需要備份記錄到SD卡?).setPositiveButton(確定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) LayoutInflater li = LayoutInflater.from(Main.this);View backup_view = li.inflate(R.layout.backup_progress, null);progressDialog =new AlertDialog.Builder(Main.this).setTitle(備份正在進(jìn)行中.).setView(backup_view).create();progressDialog.show();DBHelper helper = new DBHelper(Main.this);helper.backupData(privacy);ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);bar.setMax(list.size();for(int i=0;i=list.size();i+) bar.setProgress(i);progressDialog.setTitle(備份完成!一共 + list.size() + 條記錄);btn_backup_ok.setVisibility(View.VISIBLE);btn_backup_ok.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) progressDialog.dismiss();mainMenuDialog.dismiss(););).setNegativeButton(取消, null).create().show();break;case 3:LayoutInflater li = LayoutInflater.from(Main.this);View enterFileNameView = li.inflate(R.layout.enterfilename, null);enterFileNameDialog =new AlertDialog.Builder(Main.this).setView(enterFileNameView).setNegativeButton(取消, null).setPositiveButton(確定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this);fileName = et_enter_file_name.getText().toString();if(helper.findFile(fileName)new AlertDialog.Builder(Main.this).setTitle(請(qǐng)選擇方式).setPositiveButton(覆蓋, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this);helper.deleteAll(0);helper.restoreData(fileName);list = helper.getAllUser(privacy);adapter = new SimpleAdapter(Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone);LayoutInflater li = LayoutInflater.from(Main.this);View backup_view = li.inflate(R.layout.backup_progress, null);progressDialog =new AlertDialog.Builder(Main.this).setTitle(正在還原數(shù)據(jù).).setView(backup_view).create();progressDialog.show();ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);bar.setMax(list.size();for(int i=0;i=list.size();i+) bar.setProgress(i);progressDialog.setTitle(還原完成!一共還原了 + list.size() + 條記錄);btn_backup_ok.setVisibility(View.VISIBLE);btn_backup_ok.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) progressDialog.dismiss();mainMenuDialog.dismiss();if(list.size() != 0) mainLinearLayout.setBackgroundDrawable(null);lv.setAdapter(adapter););).setNegativeButton(添加, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) DBHelper helper = new DBHelper(Main.this);int preNum = list.size();helper.restoreData(fileName);list = helper.getAllUser(privacy);adapter = new SimpleAdapter(Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone);LayoutInflater li = LayoutInflater.from(Main.this);View backup_view = li.inflate(R.layout.backup_progress, null);progressDialog =new AlertDialog.Builder(Main.this).setTitle(正在還原數(shù)據(jù).).setView(backup_view).create();progressDialog.show();ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);bar.setMax(list.size();for(int i=0;i=list.size();i+) bar.setProgress(i);progressDialog.setTitle(還原完成!一共還原了 + (list.size()-preNum) + 條記錄);btn_backup_ok.setVisibility(View.VISIBLE);btn_backup_ok.setOnClickListener(new OnClickListener() Overridepublic void onClick(View v) progressDialog.dismiss();mainMenuDialog.dismiss();lv.setAdapter(adapter););).setNeutralButton(取消, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) ).create().show(); else Toast.makeText(enterFileNameDialog.getContext(), 找不到備份文件, Toast.LENGTH_LONG).show();).create();et_enter_file_name = (EditText)enterFileNameView.findViewById(R.id.et_enter_file_name);et_enter_file_name.setText(comm_data);et_enter_file_name.requestFocus();et_enter_file_name.selectAll();enterFileNameDialog.show();adapter = new SimpleAdapter( Main.this, list, R.layout.listitem, new Stringimageid,name,mobilephone, new intR.id.user_image,R.id.tv_name,R.id.tv_mobilephone); lv.setAdapter(adapter);/顯示所有數(shù)據(jù)mainMenuDialog.dismiss();break;3.3刪除所選功能長(zhǎng)按聯(lián)系人選項(xiàng),會(huì)選中聯(lián)系人,然后可以刪除所選擇的聯(lián)系人,這個(gè)功能對(duì)于想刪除多個(gè)聯(lián)系人得時(shí)候比較方便,其如圖5-5所示:關(guān)鍵代碼:public boolean onKeyDown(int keyCode, KeyEvent event) if(keyCode = KeyEvent.KEYCODE_MENU) loadBottomMenu();if(bottomMenuGrid.getVisibility() = View.VISIBLE) if(searchLinearout != null & searchLinearout.getVisibility() = View.VISIBLE) searchLinearout.setVisibility(View.GONE);bottomMenuGrid.setVisibility(View.GONE); else bottomMenuGrid.setVisibility(View.VISIBLE);return super.onKeyDown(keyCode, event);private void loadBottomMenu() if(bottomMenuGrid = null) bottomMenuGrid = (GridView) findViewById(R.id.gv_buttom_menu);bottomMenuGrid.setBackgroundResource(R.drawable.channelgallery_bg);bottomMenuGrid.setNumColumns(5);bottomMenuGrid.setGrav

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論