密碼保險箱的設計與實現(xiàn)嵌入式系統(tǒng)設計畢業(yè)設計_第1頁
密碼保險箱的設計與實現(xiàn)嵌入式系統(tǒng)設計畢業(yè)設計_第2頁
密碼保險箱的設計與實現(xiàn)嵌入式系統(tǒng)設計畢業(yè)設計_第3頁
密碼保險箱的設計與實現(xiàn)嵌入式系統(tǒng)設計畢業(yè)設計_第4頁
密碼保險箱的設計與實現(xiàn)嵌入式系統(tǒng)設計畢業(yè)設計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、河北經貿大學課程設計報告河北經貿大學課程設計報告嵌入式程序設計密碼保險箱的設計與實現(xiàn)摘 要密碼保險箱可使人們不必刻意去記住過多的密碼,從而解決了容易忘記密碼的問題。該軟件具有兩大模塊,即用戶登錄模塊和密碼記錄管理模塊。其中用戶登錄模塊實現(xiàn)了兩個功能:用戶登錄和用戶密碼修改;密碼記錄管理模塊主要實現(xiàn)了對密碼記錄進行添加、刪除、查詢及預覽的功能。本論文針對該軟件的設計與實現(xiàn)做出了詳細解說。首先簡要介紹了密碼保險箱設計與實現(xiàn)的課題背景、研究的現(xiàn)狀和研究的內容;接著按照軟件工程的開發(fā)步驟重點介紹了密碼保險箱設計與實現(xiàn)的過程:包括系統(tǒng)分析、系統(tǒng)概要設計、系統(tǒng)詳細設計與實現(xiàn)以及系統(tǒng)測試;最后對本次課題設計

2、做出總結。關鍵字:android、java、密碼保險箱、設計、實現(xiàn)目錄密碼保險箱的設計與實現(xiàn)11 緒論11,1 課題背景11,2 研究現(xiàn)狀11,3 研究內容22 系統(tǒng)分析32.1 可行性分析32.2 需求分析32.2.1 功能分析32.2.2 數(shù)據(jù)分析53 系統(tǒng)概要設計63.1 結構設計63.2 數(shù)據(jù)設計64 系統(tǒng)詳細設計與實現(xiàn)84.1 登錄模塊84.2 密碼管理模塊124.2.1 添加密碼記錄134.2.2 查詢密碼記錄174.2.3 預覽密碼記錄254.2.4 數(shù)據(jù)庫的實現(xiàn)315 系統(tǒng)測試345.1 測試的定義及目的345.2 系統(tǒng)功能測試345.3 系統(tǒng)實施運行35結論3635密碼保險箱

3、的設計與實現(xiàn)1 緒論1,1 課題背景當今社會,人們越來越注重個人隱私,因此,對于某些不希望讓別人知道的東西,比如照片、日記、空間等都會設置密碼;各種網站或者論壇都會要求創(chuàng)建一個用戶名和密碼來訪問網站的特定內容;各個銀行卡和銀行賬戶也都要設置一個密碼。但是,密碼設置多了,經常會發(fā)生忘記密碼的情況,帶來諸多不便。因此,開發(fā)一個適和大眾的、兼容性好的手機密碼保險箱是很有必要的。根據(jù)開發(fā)要求,它主要應用于智能手機,完成對密碼的添加、刪除和查詢等操作,實現(xiàn)密碼的基本管理功能。1,2 研究現(xiàn)狀隨著我國經濟的高速發(fā)展和人民生活水平的提高,基于android的智能手機在目前已經得到廣泛的發(fā)展和應用,身受很多大

4、學生和社會人士的喜愛。同時作為它的附屬產業(yè),手機軟件業(yè)這一項新型產業(yè)也得到了迅猛發(fā)展,作為高科技領軍產業(yè)中的一員大將,移動軟件行業(yè)以其多樣化和多功能化吸引了越來越多關注的目光。目前的手機軟件在客戶端的應用極為廣泛,密碼保險箱就是其中之一?,F(xiàn)在,越來越多的程序開發(fā)員基于各種各樣的目的編寫密碼保險箱,使得各式各樣密碼保險箱層出不窮,也使得人們可以根據(jù)自己的實際情況選擇自己喜歡的那一個。1,3 研究內容通過對android的學習和對密碼保險箱的了解,我決定自己設計開發(fā)一個功能簡單但使用的密碼保險箱。該密碼保險箱會運用到嵌入式課本中講到的相應的知識,如layout等來實現(xiàn)用戶對密碼一些基本操作。本軟件

5、是一個非常方便快捷的密碼管理軟件,用戶可以隨心所欲地添加密碼、查詢密碼、預覽密碼,刪除密碼等等,方便了密碼管理,提高了管理效率,并且具有一定的安全性。2 系統(tǒng)分析2.1 可行性分析該密碼保險箱軟件的可行性分析主要從技術、經濟、操作以及法律和社會等方面來研究。l 技術可行性:目前使用andriod系統(tǒng)和eclipse應用程序可以很容易的實現(xiàn)該軟件。l 經濟可行性:該軟件的開發(fā)成本是很低的,但是卻可以供多個用戶同時使用,足見其經濟效益。l 操作可行性:該軟件的操作方式可以在任何基于andriod的智能手機上實現(xiàn)。l 法律和社會可行性:該軟件開發(fā)過程中不僅沒有涉及到各種合同、侵權、責任等與法律、法規(guī)

6、吻合或抵觸的問題。 2.2 需求分析2.2.1 功能分析本軟件具有如下主要功能: l 用戶登錄功能l 用戶修改登錄密碼功能l 修改密碼記錄功能:包括添加、刪除功能l 查詢密碼記錄功能l 預覽密碼記錄功能l 查看開發(fā)人員信息功能該系統(tǒng)的數(shù)據(jù)流圖:頂層:如圖2-1所示。用戶密碼保險箱事物數(shù)據(jù)圖 2-1 頂層數(shù)據(jù)流圖1層:如圖2-2所示。用戶登錄密碼用戶密碼庫修改登錄密碼新密碼用戶修改密碼記錄查詢密碼記錄庫密碼記錄密碼記錄請求查詢查詢結果預覽密碼記錄請求預覽預覽結果圖 2-2 1層數(shù)據(jù)流圖2.2.2 數(shù)據(jù)分析該系統(tǒng)有兩個實體,即用戶和密碼記錄。用戶的屬性只有用戶登錄的密碼,密碼記

7、錄的屬性有關鍵字、賬號、密碼、備注,并且用戶管理密碼記錄,具體e-r圖如圖2-3所示。用戶管理密碼記錄密碼賬號密碼備注關鍵字1n圖 2-3 e-r圖3 系統(tǒng)概要設計3.1 結構設計該密碼保險箱系統(tǒng)主要有登錄、修改登錄密碼、管理、查看開發(fā)人員信息和退出五部分組成,其中管理又分為密碼記錄查詢、密碼記錄添加、密碼記錄預覽和密碼記錄刪除三部分,體系結構圖如圖3-1所示。密碼保險箱登錄退出密碼記錄查詢密碼記錄添加密碼記錄預覽密碼記錄刪除查看開發(fā)人員信息修改登錄密碼密碼記錄查詢圖3-1 體系結構圖3.2 數(shù)據(jù)設計本系統(tǒng)用到了eclipse應用程序中的數(shù)據(jù)庫,其表結構如表3-1所示。表 3-1 密碼記錄字段

8、名稱數(shù)據(jù)類型能否為空說明idstring否記錄號keywordstring否關鍵字accountstring否賬號passwordstring否密碼remindstring是備注4 系統(tǒng)詳細設計與實現(xiàn)4.1 登錄模塊登錄模塊由兩部分構成,即登錄和密碼修改。其相應界面如圖4-1、4-2所示。圖 4-1 登陸界面圖 4-2 密碼修改界面實現(xiàn)代碼如下:package cn.riskycheng;import android.app.activity;import android.app.alertdialog;import android.content.dialoginterface;import

9、 android.content.intent;import android.content.sharedpreferences;import android.content.sharedpreferences.editor;import android.os.bundle;import android.view.layoutinflater;import android.view.view;import android.widget.edittext;import android.widget.toast;public class login extends activity sharedp

10、references shared = null;editor editor = null;private edittext password = null;/登陸密碼private edittext twoedit = null;/舊密碼private edittext threeedit = null;/新密碼private edittext fouredit = null;/確認新密碼string password01;/默認密碼view dialogview = null;view dialogview = null;override public void oncreate(bund

11、le savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.hint); shared = getsharedpreferences("passwordshared", activity.mode_private); temp(); public void temp()/登陸頁面editor = shared.edit();/打開指定shared文件,如果 不存在則創(chuàng)建他password01 = shared.getstring("password"

12、, "admin");layoutinflater factory = layoutinflater.from(this);/得到自定義對話框 dialogview = factory.inflate(r.layout.login, null); password = (edittext)dialogview.findviewbyid(r.id.password);alertdialog dlg = new alertdialog.builder(this) .settitle("請輸入密碼") .seticon(r.drawable.dl_icon)

13、.setview(dialogview) .setpositivebutton("登陸", new dialoginterfaceonclick2() .setneutralbutton("修改", new dialoginterfaceonclick3() .setnegativebutton("退出", new dialoginterfaceonclick6() .create();/設置取消按鈕并創(chuàng)建 dlg.show();/顯示public void alter()/修改頁面layoutinflater factory = l

14、ayoutinflater.from(login.this);/得到自定義對話框dialogview = factory.inflate(r.layout.login_changepwd, null);alertdialog dlg = new alertdialog.builder(login.this).settitle("請修改密碼").setview(dialogview).setpositivebutton("確定", new dialoginterfaceonclick5().setnegativebutton("取消",

15、 new dialoginterfaceonclick4().create();/設置取消按鈕并創(chuàng)建dlg.show();/顯示 class dialoginterfaceonclick2 implements dialoginterface.onclicklistener/登陸public void onclick(dialoginterface dialog, int whichbutton) string pass = password.gettext().tostring();/拿到用戶輸入的值if(pass.equals(password01)toast.maketext(login

16、.this, "登陸成功", toast.length_short).show();intent intent = new intent();intent.setclass(login.this, androidcaseactivity.class);login.this.startactivity(intent);finish();elsetoast.maketext(login.this, "密碼錯誤!", toast.length_short).show();temp(); class dialoginterfaceonclick3 impleme

17、nts dialoginterface.onclicklistener/修改public void onclick(dialoginterface dialog, int whicbutton) alter();twoedit = (edittext)dialogview.findviewbyid(r.id.twoedit);threeedit = (edittext)dialogview.findviewbyid(r.id.threeedit);fouredit = (edittext)dialogview.findviewbyid(r.id.fouredit); class dialogi

18、nterfaceonclick4 implements dialoginterface.onclicklistener/取消public void onclick(dialoginterface dialog, int whichbutton) temp(); class dialoginterfaceonclick6 implements dialoginterface.onclicklistener/退出public void onclick(dialoginterface dialog, int whichbutton) login.this.finish();/點擊退出按鈕之后調用fi

19、nish方法結束應用程序 class dialoginterfaceonclick5 implements dialoginterface.onclicklistener/修改密碼確定public void onclick(dialoginterface dialog, int whichbutton) string two = twoedit.gettext().tostring();/舊密碼string three = threeedit.gettext().tostring();/新密碼string four = fouredit.gettext().tostring();/確認新密碼i

20、f(two.equals(password01)&&four.equals(three)/editor = shared.edit(); /打開指定shared文件,如果不存在則創(chuàng)建他editor.putstring("password", three);mit();/提交temp();toast.maketext(login.this, "修改成功", toast.length_short).show();else if(!two.equals(password01)toast.maketext(login.this, "舊密

21、碼輸入錯誤", toast.length_short).show();temp();else if(!four.equals(three)toast.maketext(login.this, "兩次新密碼輸入不一致", toast.length_short).show();temp(); 4.2 密碼管理模塊密碼管理模塊由四部分構成,即添加密碼記錄、查詢密碼記錄、預覽密碼記錄和查看開發(fā)人員信息。主界面如圖4-3所示。圖 4-3 主界面4.2.1 添加密碼記錄(1)界面圖 4-4 添加界面(2)實現(xiàn)代碼package cn.riskycheng;import jav

22、ax.security.auth.privatecredentialpermission;import android.r.string;import android.app.activity;import android.content.contentvalues;import android.content.context;import android.content.intent;import android.database.cursor;import android.database.sqlite.sqlitedatabase;import android.database.sqli

23、te.sqlitedatabase.cursorfactory;import android.database.sqlite.sqliteopenhelper;import android.os.bundle;import android.view.keyevent;import android.view.view;import android.view.view.onclicklistener;import android.widget.button;import android.widget.edittext;import android.widget.listadapter;import

24、 android.widget.simplecursoradapter;import android.widget.textview;import android.widget.toast;import cn.riskycheng.base;public class add_record extends activity private button add_record_buttonadd,add_record_buttonback; private edittext add_record_edittext01,add_record_edittext02,add_record_edittex

25、t03,add_record_edittext04; private context context; private int back=0; override public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.add_record); add_record_buttonadd=(button) findviewbyid(r.id.add_record_add); add_record_buttonback=(button) fi

26、ndviewbyid(r.id.add_record_back); add_record_edittext01=(edittext) findviewbyid(r.id.add_record_edittext01); add_record_edittext02=(edittext) findviewbyid(r.id.add_record_edittext02); add_record_edittext03=(edittext) findviewbyid(r.id.add_record_edittext03); add_record_edittext04=(edittext) findview

27、byid(r.id.add_record_edittext04); base helperbase=new base(add_record.this, "information.db"); add_record_buttonadd.setonclicklistener(new onclicklistener()public void onclick(view arg0) adddata();); add_record_buttonback.setonclicklistener(newonclicklistener()public void onclick(view v) i

28、ntent intent =new intent();intent.setclass(add_record.this,androidcaseactivity.class);startactivity(intent);add_record.this.finish();); public void adddata() base base01=new base(this.getbasecontext(),"information.db"); string user_keyword=add_record_edittext01.gettext().tostring(); string

29、 user_account=add_record_edittext02.gettext().tostring(); string user_password=add_record_edittext03.gettext().tostring(); string user_remind=add_record_edittext04.gettext().tostring(); if (user_keyword.equals("")|user_account.equals("")|user_password.equals("") toast.m

30、aketext(this, "input basic info!", toast.length_short).show();return; base01.add(user_keyword, user_account, user_password, user_remind); toast.maketext(this, "add successed!", toast.length_short).show(); overridepublic boolean onkeydown(int keycode, keyevent event) /back退出if(key

31、code = keyevent.keycode_back)back+;switch (back) case 1:toast.maketext(add_record.this, "再按一次退出程序", toast.length_long).show();break;case 2:back = 0;/初始化back值add_record.this.finish();android.os.process.killprocess(android.os.process.mypid();break;return true;/設置成false讓back失效 ,true表示 不失效else

32、return super.onkeydown(keycode, event);package cn.riskycheng;import cn.riskycheng.androidcaseactivity;import cn.riskycheng.r;import android.r.integer;import android.app.activity;import android.content.context;import android.content.intent;import android.database.sqlite.sqlitedatabase;import android.

33、database.sqlite.sqlitedatabase.cursorfactory;import android.database.sqlite.sqliteopenhelper;import android.os.bundle;import android.view.view;import android.view.view.onclicklistener;import android.widget.button;public class update extends activitypublic void oncreate(bundle savedinstancestate) sup

34、er.oncreate(savedinstancestate); setcontentview(r.layout.update);4.2.2 查詢密碼記錄(1)界面圖 4-5 查詢界面圖4-6 查詢結果界面(2)實現(xiàn)代碼package cn.riskycheng;import java.security.publickey;import android.r.integer;import android.app.activity;import android.content.intent;import android.os.bundle;import android.view.keyevent;

35、import android.view.view;import android.view.view.onclicklistener;import android.widget.button;import android.widget.edittext;import android.widget.toast;public class search_record extends activity private button button_search,button_back;private int back=0;protected void oncreate(bundle savedinstan

36、cestate) super.oncreate(savedinstancestate);setcontentview(r.layout.query);button_search=(button) findviewbyid(r.id.search_button01);button_back=(button) findviewbyid(r.id.search_button02);final edittext searchtext=(edittext) findviewbyid(r.id.search_edittext01);button_search.setonclicklistener(new

37、onclicklistener() public void onclick(view arg0) intent intent=new intent(); bundle bundle=new bundle(); bundle.putstring("searchkey", searchtext.gettext().tostring(); intent.setclass(search_record.this, search_result.class); intent.putextras(bundle);startactivity(intent);search_record.thi

38、s.finish(););button_back.setonclicklistener(new onclicklistener() public void onclick(view arg0) intent intent=new intent();intent.setclass(search_record.this, androidcaseactivity.class);startactivity(intent);search_record.this.finish(););overridepublic boolean onkeydown(int keycode, keyevent event)

39、 /back退出if(keycode = keyevent.keycode_back)back+;switch (back) case 1:toast.maketext(search_record.this, "再按一次退出程序", toast.length_long).show();break;case 2:back = 0;/初始化back值search_record.this.finish();android.os.process.killprocess(android.os.process.mypid();/關閉進程break;return true;/設置成fal

40、se讓back失效 ,true表示 不失效elsereturn super.onkeydown(keycode, event);package cn.riskycheng;import java.util.arraylist;import java.util.hashmap;import android.app.activity;import android.content.context;import android.content.intent;import android.database.cursor;import android.database.sqlite.sqlitedatab

41、ase;import android.graphics.drawable.drawable;import android.os.bundle;import android.view.contextmenu;import android.view.keyevent;import android.view.menuitem;import android.view.view;import android.view.contextmenu.contextmenuinfo;import android.view.view.onclicklistener;import android.view.view.

42、oncreatecontextmenulistener;import android.widget.adapterview;import android.widget.button;import android.widget.edittext;import android.widget.imagebutton;import android.widget.listview;import android.widget.simpleadapter;import android.widget.simplecursoradapter;import android.widget.toast;import

43、android.widget.adapterview.onitemclicklistener;import android.widget.adapterview.onitemlongclicklistener;public class search_result extends activity intent intent;listview list;string id,keyword,account,password,remind;/查詢到的字段cursor cursor;string indexid;hashmap<string,object> map;base helper;

44、private button backbutton,indexbbutton;arraylist<string> idlist = new arraylist<string>();private int back = 0;/判斷按幾次backoverrideprotected void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate);setcontentview(r.layout.preview);list = (listview)findviewbyid(r.id.previ

45、ew_listview);/拿到listview控件list.setonitemclicklistener(new listonitem();/listview點擊監(jiān)聽器list.setonitemlongclicklistener(new listonitemlong();list.setoncreatecontextmenulistener(new listoncreate();/listview長按監(jiān)聽器backbutton=(button)findviewbyid(r.id.preview_item_back);backbutton.setonclicklistener(new onc

46、licklistener() public void onclick(view arg0) intent intent=new intent(); intent.setclass(search_result.this, search_record.class); startactivity(intent); search_result.this.finish();); indexbbutton=(button)findviewbyid(r.id.preview_item_index); indexbbutton.setonclicklistener(new onclicklistener()

47、public void onclick(view v) intent intent=new intent(); intent.setclass(search_result.this, androidcaseactivity.class); startactivity(intent); search_result.this.finish(););helper = new base(search_result.this,"information.db");sqlitedatabase db = helper.getreadabledatabase();string bundle

48、 = (string)getintent().getextras().get("searchkey"); cursor = db.query("information", new string"id","keyword","account","password","remind",base.table_keyword+" like ?",new string "%"+bundle+"%", nul

49、l, null, "id" );/查詢數(shù)據(jù)arraylist<hashmap<string,object>> listitem = new arraylist<hashmap<string,object>>();/創(chuàng)建listviewwhile(cursor.movetonext() /判斷下一個下標是否有內容id = cursor.getstring(cursor.getcolumnindex("id");/idkeyword = cursor.getstring(cursor.getcolumninde

50、x("keyword"); account = cursor.getstring(cursor.getcolumnindex("account"); password = cursor.getstring(cursor.getcolumnindex("password");remind = cursor.getstring(cursor.getcolumnindex("remind");idlist.add(id);map = new hashmap<string,object>(); map.put(

51、"itemkeyword", "檢索關鍵字:"+keyword);map.put("itemaccount", "賬號:"+account);map.put("itempassword","密碼:"+ password);map.put("itemremind","備注:"+ remind);listitem.add(map);simpleadapter listadapter = new simpleadapter(search_re

52、sult.this,listitem, r.layout.preview_item,new string"itemkeyword","itemaccount","itempassword","itemremind",new intr.id.check_textview01,r.id.check_textview02,r.id.check_textview03,r.id.check_textview04);list.setadapter(listadapter);/添加到適配器并且顯示class appendbutt

53、on implements onclicklistener/添加按鈕監(jiān)聽器public void onclick(view v) /點擊按鈕后跳到輸入頁面(append.java)intent = new intent(search_result.this, add_record.class);startactivity(intent);search_result.this.finish();class listonitem implements onitemclicklistener/listview點擊監(jiān)聽器 public void onitemclick(adapterview<?

54、> adapterview, view v, int position,long arg3) /index是list中被選中元素的下標,從0開始indexid = idlist.get(position);/點擊打開class listonitemlong implements onitemlongclicklistener/listview長按監(jiān)聽器public boolean onitemlongclick(adapterview<?> parent, view view,int position, long id) indexid = idlist.get(position);return false;class listoncreate implements oncreatecontextmenulistener/listview長按監(jiān)聽器彈出菜單public void oncreatecontextmenu(contextmenu m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論