已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北经贸大学课程设计报告嵌入式程序设计密码保险箱的设计与实现专业名称: 软件工程 班 级: 2010级01班 学 号: 201007111326 学生姓名: 肖娇娇 指导老师: 赵彦霞 完成时间: 2013年6月 河北经贸大学课程设计报告摘 要密码保险箱可使人们不必刻意去记住过多的密码,从而解决了容易忘记密码的问题。该软件具有两大模块,即用户登录模块和密码记录管理模块。其中用户登录模块实现了两个功能:用户登录和用户密码修改;密码记录管理模块主要实现了对密码记录进行添加、删除、查询及预览的功能。本论文针对该软件的设计与实现做出了详细解说。首先简要介绍了密码保险箱设计与实现的课题背景、研究的现状和研究的内容;接着按照软件工程的开发步骤重点介绍了密码保险箱设计与实现的过程:包括系统分析、系统概要设计、系统详细设计与实现以及系统测试;最后对本次课题设计做出总结。关键字:Android、Java、密码保险箱、设计、实现目录密码保险箱的设计与实现11 绪论11,1 课题背景11,2 研究现状11,3 研究内容22 系统分析32.1 可行性分析32.2 需求分析32.2.1 功能分析32.2.2 数据分析53 系统概要设计63.1 结构设计63.2 数据设计64 系统详细设计与实现84.1 登录模块84.2 密码管理模块124.2.1 添加密码记录134.2.2 查询密码记录174.2.3 预览密码记录254.2.4 数据库的实现315 系统测试345.1 测试的定义及目的345.2 系统功能测试345.3 系统实施运行35结论3635密码保险箱的设计与实现1 绪论1,1 课题背景当今社会,人们越来越注重个人隐私,因此,对于某些不希望让别人知道的东西,比如照片、日记、空间等都会设置密码;各种网站或者论坛都会要求创建一个用户名和密码来访问网站的特定内容;各个银行卡和银行账户也都要设置一个密码。但是,密码设置多了,经常会发生忘记密码的情况,带来诸多不便。因此,开发一个适和大众的、兼容性好的手机密码保险箱是很有必要的。根据开发要求,它主要应用于智能手机,完成对密码的添加、删除和查询等操作,实现密码的基本管理功能。1,2 研究现状随着我国经济的高速发展和人民生活水平的提高,基于android的智能手机在目前已经得到广泛的发展和应用,身受很多大学生和社会人士的喜爱。同时作为它的附属产业,手机软件业这一项新型产业也得到了迅猛发展,作为高科技领军产业中的一员大将,移动软件行业以其多样化和多功能化吸引了越来越多关注的目光。目前的手机软件在客户端的应用极为广泛,密码保险箱就是其中之一。现在,越来越多的程序开发员基于各种各样的目的编写密码保险箱,使得各式各样密码保险箱层出不穷,也使得人们可以根据自己的实际情况选择自己喜欢的那一个。1,3 研究内容通过对Android的学习和对密码保险箱的了解,我决定自己设计开发一个功能简单但使用的密码保险箱。该密码保险箱会运用到嵌入式课本中讲到的相应的知识,如layout等来实现用户对密码一些基本操作。本软件是一个非常方便快捷的密码管理软件,用户可以随心所欲地添加密码、查询密码、预览密码,删除密码等等,方便了密码管理,提高了管理效率,并且具有一定的安全性。2 系统分析2.1 可行性分析该密码保险箱软件的可行性分析主要从技术、经济、操作以及法律和社会等方面来研究。l 技术可行性:目前使用andriod系统和eclipse应用程序可以很容易的实现该软件。l 经济可行性:该软件的开发成本是很低的,但是却可以供多个用户同时使用,足见其经济效益。l 操作可行性:该软件的操作方式可以在任何基于andriod的智能手机上实现。l 法律和社会可行性:该软件开发过程中不仅没有涉及到各种合同、侵权、责任等与法律、法规吻合或抵触的问题。2.2 需求分析2.2.1 功能分析本软件具有如下主要功能:l 用户登录功能l 用户修改登录密码功能l 修改密码记录功能:包括添加、删除功能l 查询密码记录功能l 预览密码记录功能l 查看开发人员信息功能该系统的数据流图:顶层:如图2-1所示。用户密码保险箱事物数据图 2-1 顶层数据流图1层:如图2-2所示。用户登录密码用户密码库修改登录密码新密码用户修改密码记录查询密码记录库密码记录密码记录请求查询查询结果预览密码记录请求预览预览结果图 2-2 1层数据流图2.2.2 数据分析该系统有两个实体,即用户和密码记录。用户的属性只有用户登录的密码,密码记录的属性有关键字、账号、密码、备注,并且用户管理密码记录,具体E-R图如图2-3所示。用户管理密码记录密码账号密码备注关键字1N图 2-3 E-R图3 系统概要设计3.1 结构设计该密码保险箱系统主要有登录、修改登录密码、管理、查看开发人员信息和退出五部分组成,其中管理又分为密码记录查询、密码记录添加、密码记录预览和密码记录删除三部分,体系结构图如图3-1所示。密码保险箱登录退出密码记录查询密码记录添加密码记录预览密码记录删除查看开发人员信息修改登录密码密码记录查询图3-1 体系结构图3.2 数据设计本系统用到了eclipse应用程序中的数据库,其表结构如表3-1所示。表 3-1 密码记录字段名称数据类型能否为空说明IDstring否记录号keywordstring否关键字accountstring否账号passwordstring否密码remindstring是备注4 系统详细设计与实现4.1 登录模块登录模块由两部分构成,即登录和密码修改。其相应界面如图4-1、4-2所示。图 4-1 登陆界面图 4-2 密码修改界面实现代码如下:package cn.riskycheng;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import 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 SharedPreferences 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(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.hint); shared = getSharedPreferences(passwordshared, Activity.MODE_PRIVATE); temp(); public void temp()/登陆页面editor = shared.edit();/打开指定shared文件,如果 不存在则创建他password01 = shared.getString(password, 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) .setView(DialogView) .setPositiveButton(登陆, new DialogInterfaceOnClick2() .setNeutralButton(修改, new DialogInterfaceOnClick3() .setNegativeButton(退出, new DialogInterfaceOnClick6() .create();/设置取消按钮并创建 dlg.show();/显示public void alter()/修改页面LayoutInflater factory = LayoutInflater.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(取消, new DialogInterfaceOnClick4().create();/设置取消按钮并创建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.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 implements 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 DialogInterfaceOnClick4 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();/点击退出按钮之后调用finish方法结束应用程序 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();/确认新密码if(two.equals(password01)&four.equals(three)/editor = shared.edit(); /打开指定shared文件,如果不存在则创建他editor.putString(password, three);mit();/提交temp();Toast.makeText(login.this, 修改成功, Toast.LENGTH_SHORT).show();else if(!two.equals(password01)Toast.makeText(login.this, 旧密码输入错误, Toast.LENGTH_SHORT).show();temp();else if(!four.equals(three)Toast.makeText(login.this, 两次新密码输入不一致, Toast.LENGTH_SHORT).show();temp(); 4.2 密码管理模块密码管理模块由四部分构成,即添加密码记录、查询密码记录、预览密码记录和查看开发人员信息。主界面如图4-3所示。图 4-3 主界面4.2.1 添加密码记录(1)界面图 4-4 添加界面(2)实现代码package cn.riskycheng;import javax.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.sqlite.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 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_edittext03,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) findViewById(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) findViewById(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) Intent 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 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.makeText(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(keyCode = 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表示 不失效elsereturn 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.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) super.onCreate(savedInstanceState); setContentView(R.layout.update);4.2.2 查询密码记录(1)界面图 4-5 查询界面图4-6 查询结果界面(2)实现代码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;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 savedInstanceState) 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 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.this.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) /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;/设置成false让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.SQLiteDatabase;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.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 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 map;base helper;private Button backButton,indexbButton;ArrayList idList = new ArrayList();private int back = 0;/判断按几次backOverrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.preview);list = (ListView)findViewById(R.id.preview_listview);/拿到ListView控件list.setOnItemClickListener(new ListOnItem();/ListView点击监听器list.setOnItemLongClickListener(new ListOnItemLong();list.setOnCreateContextMenuListener(new ListOnCreate();/ListView长按监听器backButton=(Button)findViewById(R.id.preview_item_back);backButton.setOnClickListener(new OnClickListener() 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() 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 = (String)getIntent().getExtras().get(searchkey); cursor = db.query(information, new StringID,keyword,account,password,remind,base.TABLE_KEYWORD+ like ?,new String %+bundle+%, null, null, ID );/查询数据ArrayListHashMap listItem = new ArrayListHashMap();/创建ListViewwhile(cursor.moveToNext() /判断下一个下标是否有内容Id = cursor.getString(cursor.getColumnIndex(ID);/IDKeyword = cursor.getString(cursor.getColumnIndex(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(); map.put(Itemkeyword, 检索关键字:+Keyword);map.put(Itemaccount, 账号:+Account);map.put(Itempassword,密码:+ Password);map.put(Itemremind,备注:+ Remind);listItem.add(map);SimpleAdapter listAdapter = new SimpleAdapter(search_result.this,listItem, R.layout.preview_item,new StringItemkeyword,Itemaccount,Itempassword,Itemremind,new intR.id.check_textview01,R.id.check_textview02,R.id.check_textview03,R.id.check_textview04);list.setAdapter(listAdapter);/添加到适配器并且显示class appendButton implements OnClickListener/添加按钮监听器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点击监听器 public void onItemClick(AdapterView adapterView, View v, int position,long arg3) /index是list中被选中元素的下标,从0开始indexID = idList.get(position);/点击打开class ListOnItemLong implements OnItemLongClickListener/ListView长按监听器public boolean onItemLongClick(AdapterView parent, View view,int position, long id) indexID = idLis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城乡给排水工程建设事故预防技术服务报告模板
- 《电气控制及PLC》详细笔记
- 保健按摩师(高级)技能理论考试题库(含答案)
- 文书模板-个人所得税退税的租房合同
- 中考物理专项复习:浮力(原卷版)
- 2024年梯度飞片项目投资申请报告代可行性研究报告
- 2024年低温多效海水淡化装置项目资金申请报告代可行性研究报告
- 强化安全责任意识创建和谐平安校园
- 技能评定与评价技术规范
- Python程序设计实践- 习题及答案 ch09 实验5 选择结构程序设计
- 少儿科学实验-直升飞机
- 财政与金融基础知识(中职财经商贸类专业)全套教学课件
- 全国优质课一等奖《计算机应用基础-计算机系统组成》多媒体课件
- 控告法官枉法裁判的范文
- 大学生职业生涯规划智慧树知到课后章节答案2023年下抚顺职业技术学院
- 庭审结束后提交补充意见范本
- 古诗词中的数学
- 26 西门豹治邺 一等奖创新教学设计(2课时)
- 煤矿巷道壁后注浆施工工艺
- 展示灯箱施工方案
- 关于成立消防安全组织机构的通知
评论
0/150
提交评论