记事本程序.docx
《记事本程序.docx》由会员分享,可在线阅读,更多相关《记事本程序.docx(23页珍藏版)》请在冰豆网上搜索。
记事本程序
智能终端开发课程设计
记事本程序
专业
计算机科学与技术
学生姓名
班级
学号
任课教师
完成日期
一、概述
随着计算机行业的发展,智能手机在人们的生活中普及开来。
智能手机拥有的独立操作系统使得手机能像个人电脑一样支持用户自定义安装软件等程序,并通过此类操作对手机功能进行扩充,从而在更大程度上满足用户的需求,这是智能手机的优势,也是智能手机赢得市场的主要原因。
具有开放性的Android手机平台,从2007年谷歌将其正式向外界展示以来,发展迅速,手机市场份额不断攀升,至2012年已超过塞班,跃居第一。
手机系统越来越强大,却始终都未放弃其一重要功能——记事本,而记事本又是手机的必备软件。
根据手机功能使用调查显示,大部分的消费者都会使用手机记事本功能。
随着手机记事本功能的不断加强与完善,手机记事本对于人们的意义,已不仅仅像一般记事簿一样做简单记录,而是向着个性化、人性化的方向发展。
这次课程设计的目的是在Android系统的手机开发平台之上,研究与开发一个记事本软件,提供适用手机的记事本功能服务一个简单的个人记事本软件,它是基于安卓平台实现的的个人记事本软件,使用SQlite实现存取。
具有简单的实用性,分为四个功能。
一是添加新的记事项、二是浏览所有记事项、三是删除指定的记事项、四是修改指定记事。
二、设计基本概念和原理
本个人记事本软件一共有三个界面。
第一个是欢迎界面,也就是总控制界面,可以在这里使用全部功能。
第二个是记事列表界面,显示数据库内全部记事项。
第三个是单个记事项编辑界面,可以编辑已有项或者新建项。
使用SQlite数据库存取数据。
实现增、删、改功能。
在Activity的控制下和数据库进行数据交流然后在Layout中显示内容。
开发过程中所使用的组件------Android开发四大组件分别是:
活动(Activity)—用于表现功能。
服务(Service)—后台运行服务,不提供界面呈现;广播接收器(BroadcastReceiver)—用于接收广播;内容提供商(ContentProvider)—支持在多个应用中存储和读取数据,相当于数据库。
->Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity可以算是开发者遇到的最频繁,也是Android当中最基本的模块之一。
->Service是android系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。
Service是没有界面的长生命周期的代码。
Service是一种程序,它可以运行很长时间,但是它却没有用户界面。
->Broadcast是一种广泛运用的在应用程序之间传输信息的机制。
而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件。
可以使用BroadcastReceiver来让应用对一个外部的事件做出响应。
三、总体设计
3.1、开发环境
1、Android设备:
如Android手机或平板电脑,本实验用虚拟机实现
2、在eclipse平台下安卓了安卓androidSDK插件的电脑
3、操作系统:
Windowsxp/Windows7
4、IDE:
Eclipse4.3.1
5、AndroidSDK集成环境
3.2、功能需求
系统用例图描述的是用户眼中的系统,即用户希望系统有哪些功能和通过哪些操作完成这些功能。
一个用例代表用户与系统交互的一种方式。
正如前面介绍过的,识别用例的最好方法是从参与者的角度分析系统。
在Android记事本中,首先的参与者是用户。
系统E-R图如图3-1所示,它从用户角度描述了该系统应该具有何种功能。
图3-1系统E-R图
3.3、系统架构
系统的整体架构如下图3-2所示:
图3-2系统的整体架构图
3.4、工程主体架构
系统工程主体架构如下图3-3所示:
图3-3工程主体架构图
1、src文件夹
src文件夹下com.eoeAndroid.SQLite包下Java为系统主要Activity类:
->ActivityDiaryEdit.java是增加功能的Activity,通过设置两个按钮的监听来实现对输入文本的存储或删除。
->ActivityMain.java是在系统界面中生成记事列表的Activity。
->ActivityMenu.Java是系统界面退出时的Activity
->DiaryDbAdapter.java是数据库基本操作功能实现的Activity,类中主要的函数实现的功能是:
打开、关闭数据库,获得时间,插入数据,删除输入,获得数据,查询数据,更新数据,根据内容生成标题。
2、gen文件夹
gen文件夹是项目自动生成的文件夹R.java是工程下各个资源的标识符负责所有资源的索引。
3、bin文件夹
bin文件夹是编译后的字节码存放的目录,编译的过程首先是编译成为androidjava虚拟机文件classes.dex,再打包成APK格式的包。
4、res文件夹
res是资源目录,res资源目录,它包含项目中的资源文件并将其编译进应用程序中,向此目录添加资源时,会被R.java自动记录。
res目录存放所有程序中用到的资源文件。
“资源文件”指的资料文件、图片等。
子目录有:
drawable、layout、values。
四、详细设计
4.1、界面的设计
1、项目组件设计:
TextView:
标题等提示性语句的组件。
EditView:
“请输入标题”、“请输入内容”等编辑框。
ListView:
列表控件,用于显示所有的记事。
Button:
“添加记事”、“浏览所有记事”等按钮控件。
2、逻辑设计
->添加新记事:
点击欢迎界面“添加新记事”按钮,输入标题和记事,点击“确定”按钮。
->浏览所有记事:
点击欢迎界面“浏览所有记事”按钮,可以查看所有记事。
->删除记事:
选中要删除的记事,点击“删除”按钮即可删除记事。
->修改记事:
选中要修改的记事,修改完成后点击“确定”按钮即可。
4.2、界面控制类设计
->ActivityDiaryEdit.java类:
当添加记事时,该activity通过对“确定”按钮设置监听器,当用户输入完成并点击按钮时,监听器会获取标题和文本内容,如果内容为空,系统提示“标题和内容不能为空”,反之,系统将标题和文本内容存入数据库;activity还通过对“删除”按钮设置监听器来监听用户是否要删除某一项内容。
->ActivityMain.java类:
当用户点击“浏览所有记事”时,系统通过该activity获取数据库中的内容,将记事内容显示到界面上。
->ActivityMenu.java类:
当用户点击“退出个人记事”按钮时,该activity通过对按钮设置监听器,用户一旦点击退出按钮,系统立即跳出“确定要退出”对话框,用户选择是否退出。
4.3、数据库操作类设计
DiaryDbAdapter.java负责实现数据库的连接以及对数据库的操作:
->publicDiaryDbAdapteropen()throwsSQLException:
打开数据库
->publicvoidcloseclose():
关闭数据库
->publiclongcreateDiary(Stringtitle,Stringbody):
数据库增加记录->publicbooleandeleteDiary(longrowId):
数据库删除记录
->publicCursorgetAllNotes():
取得所有记录操作
->publicCursorgetDiary(longrowId)throwsSQLException:
取得指定记录
->publicbooleanupdateDiary(longrowId,Stringtitle..):
数据库内容修改
数据库增加、删除、修改功能的实现:
->添加记事时,数据由用户输入,点击确定按钮。
如下图4-1所示:
图4-1添加记事流程图
->当用户选中一个记事并且选择删除选项,删除其中一条记录,如下图4-2所示:
图4-2删除记事流程图
->进入修改界面修改,点击确定按钮,则更新数据库; 流程如图4-3所示:
图4-3修改记事流程图
五、完成情况
由于以前没有接触过Android的开发,并且这次的课程设计时间也比较紧张,,所以整个记事本的开发不是我自己个人独立完成的,我主要是设计了界面,同时美化界面;另外功能模块的实现我只完成了添加新记事和删除记事,对于修改模块,由于时间紧迫只能从网上截取。
除此之外,整个设计还有一些不足之处,比如如果添加一个以上新记事时,浏览记事只能显示最新添加的记事,之前添加的记事被覆盖了,只有当删除最新记事,后面的记事才会显示,这一点等课后我还要再做改进;同时我觉得这个记事本的程序功能还不完整,只有增、删、改三个功能,完全不能满足当今人们的需求,还需在此基础上添加更多的功能,例如分享、短信发送、闹钟提醒等功能。
六、使用说明
->进入主界面如图5-1所示:
图5-1欢迎主界面
->点击“添加新记事”如图5-2所示:
图5-2添加新记事界面
->添加标题内容和文本内容点击“确定”按钮如图5-3所示:
图5-3添加新记事内容界面
->添加完成点击“保存”按钮如图5-4所示:
图5-4所有记事列表
->选中所要修改的记事点击并进行修改按钮如图5-5所示:
图5-5所有记事列表
->选中所要删除的记事点击“删除”按钮如图5-6所示:
图5-6删除记事界面
->返回主界面点击“退出个人记事”按钮退出如图5-7所示:
图5-7退出界面
七、总结
为期一周的课程设计已经结束了,由于刚刚接触android,遇到的困难很多,在老师的帮助和同学之间的相互探讨下,困难几乎都迎刃而解了。
这次实训Android软件开发是基于java语言,之前曾在选修课中学过java语言,不过对于其理解和运用都不是很擅长,通过这次实训,我看了很多java小程序,对语法有了更深层次的理解。
同时,我们知道了android的发展史,Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
Android是时下最火热的手机操作系统,其未来前景依旧令人看好,我想,能够掌握android的开发对我们以后就业是非常有利的,因为所需的技术人员很多,这次实训我们只能到入门的程度,只有继续深入的研究才能成为一个真正的开发人员,我会努力学习下去!
通过这次基于Android的综合性课程设计,我又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。
总之,在这次实验中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了Android应用程序的开发,以及加深了对Java的认识。
最后,通过这次实验,我收获了很多东西,特别是编程方面的,对于我来说,这次课程设计是一次较为珍贵的充电。
源代码:
页面布局源代码:
//diary_edit.xml
xmlversion="1.0"encoding="utf-8"?
>
android="
android:
orientation="vertical"android:
layout_width="fill_parent"
android:
layout_height="fill_parent"
android:
background="@drawable/background1">
orientation="vertical"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content">
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
text="@string/title"
android:
padding="2dp"/>
android:
id="@+id/title"
android:
hint="@string/hint_title"
android:
layout_width="fill_parent"
android:
layout_height="wrap_content"
android:
layout_weight="1"/>
layout_width="wrap_content"
android:
layout_height="wrap_content"android:
text="@string/body"/>
android:
id="@+id/body"
android:
hint="@string/hint_content"
android:
layout_width="fill_parent"
android:
layout_height="fill_parent"
android:
layout_weight="1"
android:
scrollbars="vertical"
android:
gravity="top"/>
android:
layout_width="fill_parent"
android:
layout_height="wrap_content">
//////////////////////////////////////////////////////////
//diary_list.xml
xmlversion="1.0"encoding="utf-8"?
>
android="
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
background="@drawable/background1">
id="@+id/android:
list"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"/>
id="@+id/android:
empty"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"/>
//欢迎界面和显示记事界面源代码省略
功能实现源代码(两个重要的Activity类):
//ActivityDiaryEdit.java
packagecom.eoeAndroid.SQLite;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.content.Context;
importandroid.content.DialogInterface;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
publicclassActivityDiaryEditextendsActivity{
privateEditTextmTitleText;
privateEditTextmBodyText;
privateLongmRowId;
privateDiaryDbAdaptermDbHelper;
privateContextmcontext=this;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
mDbHelper=newDiaryDbAdapter(this);//创建一个数据库工具类
mDbHelper.open();
setContentView(R.layout.diary_edit);//该Activity采用diary_edit布局
//定义UI组件
mTitleText=(EditText)findViewById(R.id.title);//标题
mBodyText=(EditText)findViewById(R.id.body);//文本区
ButtonconfirmButton=(Button)findViewById(R.id.confirm);//确认保存按钮
ButtondeletButton=(Button)findViewById(R.id.delet);//删除按钮
mRowId=null;
//每一个intent都会带一个Bundle型的extras数据。
Bundleextras=getIntent().getExtras();
if(extras!
=null){
Stringtitle=extras.getString(DiaryDbAdapter.KEY_TITLE);
Stringbody=extras.getString(DiaryDbAdapter.KEY_BODY);
mRowId=extras.getLong(DiaryDbAdapter.KEY_ROWID);
if(title!
=null){
mTitleText.setText(title);
}
if(body!
=null){
mBodyText.setText(body);
}}
confirmButton.setOnClickListener(newView.OnClickListener(){//确认保存按钮监听器
publicvoidonClick(Viewview){
Stringtitle=mTitleText.getText().toString().trim();//获取标题内容
Stringbody=mBodyText.getText().toString().trim();//获取文本内容
if(!
title.equals("")&&!
body.equals("")){
if(mRowId!
=null){
mDbHelper.updateDiary(mRowId,title,body);
}else
mDbHelper.createDiary(title,body);
AlertDialog.Builderbuilder=newAlertDialog.Builder(mcontext);//修改
builder.setTitle("提示");
builder.setMessage("保存成功");
builder.setPositiveButton("确定",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
dialog.dismiss();
finish();
}
});
builder.show();
IntentmIntent=newIntent();
setResult(RESULT_OK,mIntent);
}
else{
AlertDialog.Builderbuilder=newAlertDialog.Builder(mcontext);
builder.setTitle("提示");
builder.setMessage("标题与内容不能为空!
");
builder.setPositiveButton("确定",newDialogInterface.OnClickListener()