安卓记事本实验报告
来源:互联网 发布:查找淘宝用户购买记录 编辑:程序博客网 时间:2024/05/27 09:46
目录
1 系统需求分析……………………………………………………………………………………………2
1.1 系统介绍……………………………………………………………………………………………..2
1.2 系统的功能性需求………………………………………………………………………………..2
1.3 软硬件环境需求…………………………………………………………………………………… 2
2. 系统设计………………………………………………………………………………………………….. 2
2.1 系统概述…………………………………………………………………………………………….. 2
2.2 系统总体结构………………………………………………………………………………………..2
2.3 开发环境的配置……………………………………………………………………………………3
3. 详细设计及实现…………………………………………………………………………………………3
3.1 数据库系统设计……………………………………………………………………………………3
3.2 界面原型设计………………………………………………………………………………………. 4
4系统代码编写………………………………………………………………………………………………5
4.1 代码编写思路………………………………………………………………………………………. 5
4.2 系统主界面的实现……………………………………………………………………………….. 6
4.3 系统功能模块配置的实现…………………………………………………………………….. 10
4.4 模块功能流程设计………………………………………………………………………………. 11
4.5 代码编写实现………………………………………………………………………………………12
5总结…………………………………………………………………………………………………………..17
1 系统需求分析
1.1 系统介绍
本作品是一个简单的记事本程序,能实现事件类别的管理(包括增加、删除、修改),记录的关键信息的包括:事件标题、事件内容、位置信息、照片等。
1.2 系统的功能性需求
1.事件类别的管理(包括增加、删除、修改);
2.提醒类别管理(包括增加修改、删除、增加);
3.事件的管理(包括增加、删除、修改),关键信息包括:事件标题、关键字、事件内容、位置信息(城市、区域的信息)、照片;
1.3 软硬件环境需求
最低硬件配置:单核,256MB的RAM
软件平台:Android2.0以上
2.系统设计
2.1 系统概述
本记事本软件主要用于记录生活点滴的基于Android平台的软件,可以运行于基于Android平台的手持设备。
2.2 系统总体结构
本作品实现的功能模块主要包括:添加、删除、修改事件,增加、删除、修改分类,定位,拍照,总体结构如图1所示:
图1.系统总体结构图
2.3 开发环境的配置
1.eclipse-java-mars-1-win32-x86_64
2. JDK 1.8.0_45
3.详细设计及实现
3.1 数据库系统设计
1.数据库表的定义(TableNames[]):
tbl_type
tbl_note
类型
表名
2.字段定义(FieldNames[][]):
表 字段
_id
note_title
note_type
note_content
_id
tbl_type
tbl_num
3.2 界面原型设计
图1.登录界面 图4.修改界面
图2.主界面 图3.新增(可以实现定位、插入图片、新增记事)
图6.查看界面
4.系统代码编写
4.1 代码编写思路
如图7:
图7.整体代码分布框架
4.2 系统主界面的实现
1.主界面的部分布局文件:
package com.example.Notepad;import java.sql.Date;import java.text.SimpleDateFormat;import java.util.List;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;importandroid.content.Intent;importandroid.database.Cursor;import android.os.Bundle;import android.util.Log;import android.view.ContextMenu;importandroid.view.ContextMenu.ContextMenuInfo;import android.view.KeyEvent;importandroid.view.MenuItem;import android.view.View;importandroid.view.View.OnCreateContextMenuListener;importandroid.view.ViewGroup;importandroid.widget.AdapterView;importandroid.widget.AdapterView.AdapterContextMenuInfo;importandroid.widget.AdapterView.OnItemClickListener;importandroid.widget.BaseAdapter;importandroid.widget.LinearLayout;importandroid.widget.ListView;importandroid.widget.TextView;import android.widget.Toast;importcontroller.NoteBookUtils;import database.Note;public class MainInterfaceActivityextends Activity { private Cursor cursor=null; private static final String TAG =null; private ListView lv; private TextView init; private NoteBookUtils note; @Override protected void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_interface); note = new NoteBookUtils(this); initViews();//获取框架: //refreshView(); update(); lv.setOnItemClickListener(newmyOnItemClickListener()); lv.setOnCreateContextMenuListener(newmyOnCreateContextMenuListener()); //设置长按监听器三个选项 } public voidonItemClick(AdapterView<?> parent, View view, int position,long id) { Intent intent = newIntent(MainInterfaceActivity.this,CheckActivity.class); intent.putExtra("lv_item_id", id); startActivity(intent); } private void update() { if (refreshView()) { lv.setVisibility(View.VISIBLE); init.setVisibility(View.INVISIBLE); } else { lv.setVisibility(View.INVISIBLE); init.setVisibility(View.VISIBLE); } } List<Note> notes; private boolean refreshView() { notes = note.getAll(); if(notes.size()==0){ return false; } lv.setAdapter(new MyAdapter()); return true; } //初始化架构 private void initViews() { // TODO Auto-generatedmethod stub //ll=(LinearLayout)findViewById(R.id.ll); lv=(ListView)findViewById(R.id.lv); init=(TextView)findViewById(R.id.init); } //添加 public void addNote(View view){ Intent intent=new Intent(); intent.setClass(MainInterfaceActivity.this, EditActivity.class); startActivity(intent); } public classmyOnCreateContextMenuListener implementsOnCreateContextMenuListener{ public voidonCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { menu.setHeaderTitle(""); //设置选项 Log.i("log", "chooseingmenu"); menu.setHeaderTitle("记事本操作"); menu.add(0,1,0,"修改"); menu.add(0,2,0,"删除"); } } @SuppressWarnings("null") public booleanonContextItemSelected(MenuItem item) { // 得到当前被选中的item信息 //note.open(); AdapterContextMenuInfomenuInfo = (AdapterContextMenuInfo)item.getMenuInfo(); final Note nt=notes.get(menuInfo.position); Log.v(TAG, "context itemseleted ID="+ menuInfo.id); switch(item.getItemId()) { case 1: Intent intent=new Intent(); intent.putExtra("title", nt.title); intent.putExtra("description", nt.description); intent.setClass(MainInterfaceActivity.this,UpdateActivity.class); MainInterfaceActivity.this.startActivity(intent); break; case 2: String id=nt.getId(); System.out.println("id----->"+id); note.deleteNoteWithId(id); Toast.makeText(MainInterfaceActivity.this, "删除" + nt.getTitle() +"成功",1); refreshView(); break; default: Activityreturnsuper = null; returnsuper.onContextItemSelected(item); } return true; } public class MyAdapter extends BaseAdapter{ //构造方法 @Override public View getView(int position,final View convertView, final ViewGroup parent) { final Note note=notes.get(position);//位置 long datetime=Long.valueOf(note.createtime); SimpleDateFormatformatter = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); LinearLayout ll=newLinearLayout(MainInterfaceActivity.this); ll.setOrientation(LinearLayout.VERTICAL); TextView tv =newTextView(MainInterfaceActivity.this); tv.setText(note.title+" "+formatter.format(datetime)); ll.addView(tv); return ll; } @Override public int getCount() { // TODO Auto-generatedmethod stub return notes.size(); } @Override public Object getItem(int position) { // TODO Auto-generatedmethod stub return null; } @Override public long getItemId(int position) { // TODO Auto-generatedmethod stub return 0; } } public class myOnItemClickListenerimplements OnItemClickListener{ public voidonItemClick(AdapterView<?> arg0, View v, int position,long id) { final Note note=notes.get(position);//位置 long datetime=Long.valueOf(note.createtime); SimpleDateFormatformatter = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Intent intent = new Intent(); // intent.putExtra("id",cursor.getString(cursor.getColumnIndex("_id"))); intent.putExtra("title", note.title); intent.putExtra("description", note.description); intent.putExtra("time",formatter.format(datetime)); intent.setClass(MainInterfaceActivity.this, CheckActivity.class); MainInterfaceActivity.this.startActivity(intent); } }}
2.新增记事界面部分文件:
packagecom.example.Notepad;importjava.util.Calendar;importcom.baidu.location.BDLocation;importcom.baidu.location.BDLocationListener;importcom.baidu.location.LocationClient;importcom.baidu.location.LocationClientOption;import com.baidu.location.LocationClientOption.LocationMode;importandroid.app.Activity;importandroid.app.AlarmManager;importandroid.app.Dialog;importandroid.app.PendingIntent;importandroid.app.TimePickerDialog;importandroid.content.Context;import android.content.Intent;importandroid.database.Cursor;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.drawable.BitmapDrawable;importandroid.graphics.drawable.Drawable;importandroid.media.ExifInterface;import android.net.Uri;importandroid.os.Bundle;importandroid.provider.MediaStore;importandroid.provider.MediaStore.MediaColumns;importandroid.text.Editable;importandroid.text.Spannable;importandroid.text.SpannableString;importandroid.text.TextUtils;importandroid.text.style.ImageSpan;importandroid.util.Log;importandroid.view.View;importandroid.widget.EditText;importandroid.widget.TextView;importandroid.widget.TimePicker;importandroid.widget.Toast;importcontroller.NoteBookUtils;import database.Note;public classEditActivity extends Activity{ private LocationClient mLocationClient; public static final String TAG ="Alarm"; private AlarmManager alarmManager=null; private NoteBookUtils utils; final int DIALOG_TIME = 0; //设置对话框id private EditText ed_title; private EditText ed_local; private EditText ed_content; private String path = null; private Bitmap bitmap = null; int rotate = 0; Calendar cal=Calendar.getInstance(); protected void onCreate(BundlesavedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit); initViews();//获取框架 } private void initViews() { // TODO Auto-generated method stub ed_local=(EditText)findViewById(R.id.local); ed_title=(EditText)findViewById(R.id.edit_title); ed_content=(EditText)findViewById(R.id.editactivity_eidtText); alarmManager=(AlarmManager)getSystemService(Context.ALARM_SERVICE); } public void Save(View view){ Stringtitle=ed_title.getText().toString(); if (TextUtils.isEmpty(title)) { mT("输入的标题不能为空"); return; } String content=ed_content.getText().toString(); if (TextUtils.isEmpty(content)){ mT("输入的标题不能为空"); return; } System.out.println("标题:"+title); System.out.println("内容:"+content); //保存到数据库中; savaToDb(title,content); Intent intent=new Intent(); intent.setClass(EditActivity.this,MainInterfaceActivity.class); startActivity(intent); } private void savaToDb(String title, Stringcontent) { // TODO Auto-generated method stub String createtime =System.currentTimeMillis()+""; Note note=new Note(title, content,createtime); NoteBookUtils utils =newNoteBookUtils(this); if(utils.addNote(note)!=-1){ mT("数据添加成功"); finish(); } } public void TakePhoto(View view){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); } public void Location(View view){ mLocationClient = new LocationClient(this.getApplicationContext()); mLocationClient.registerLocationListener(newMyLocationListener()); InitLocation(); mLocationClient.start(); } public void Clock(View view){ showDialog(DIALOG_TIME);//显示时间选择对话框 } public void SetPciture(View view){ Intent intent=newIntent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); intent.putExtra("return-data",true); startActivityForResult(intent, 1); } //打印方法: private void mT(String message){ Toast.makeText(this, message, 0).show(); } private void InitLocation(){ LocationClientOption option = newLocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式 //option.setCoorType(tempcoor);//返回的定位结果是百度经纬度,默认值gcj02 int span=1000; option.setScanSpan(span);//设置发起定位请求的间隔时间为5000ms option.setIsNeedAddress(true); mLocationClient.setLocOption(option); } protected Dialog onCreateDialog(int id) { Dialog dialog=null; switch (id) { case DIALOG_TIME: dialog=new TimePickerDialog( this, new TimePickerDialog.OnTimeSetListener(){ public void onTimeSet(TimePicker timePicker, int hourOfDay,int minute) { Calendar c=Calendar.getInstance();//获取日期对象 c.setTimeInMillis(System.currentTimeMillis()); //设置Calendar对象 c.set(Calendar.HOUR, hourOfDay); //设置闹钟小时数 c.set(Calendar.MINUTE, minute); //设置闹钟的分钟数 c.set(Calendar.SECOND, 0); //设置闹钟的秒数 c.set(Calendar.MILLISECOND, 0); //设置闹钟的毫秒数 Intent intent = new Intent(EditActivity.this, AlarmReceiver.class); //创建Intent对象 PendingIntent pi = PendingIntent.getBroadcast(EditActivity.this, 0,intent, 0); //创建PendingIntent //alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),pi); //设置闹钟 alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),pi); //设置闹钟,当前时间就唤醒 Toast.makeText(EditActivity.this, "闹钟设置成功",Toast.LENGTH_LONG).show();//提示用户 } }, cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), false); break; } return dialog; } public class MyLocationListener implementsBDLocationListener { @Override public void onReceiveLocation(BDLocationlocation) { StringBuffer lc = newStringBuffer(256); if (location.getLocType() ==BDLocation.TypeGpsLocation){ lc.append(location.getAddrStr()); } else if (location.getLocType() ==BDLocation.TypeNetWorkLocation){ lc.append(location.getAddrStr()); } System.out.println(lc.toString()); ed_local.setText(lc.toString()); } } protected void onActivityResult(intrequestCode, int resultCode, Intent data) { super.onActivityResult(requestCode,resultCode, data); if(resultCode==RESULT_OK){ path=getpath(data.getData()); BitmapFactory.Options options =newBitmapFactory.Options(); options.inJustDecodeBounds=true; //获取照片的宽和高 bitmap=BitmapFactory.decodeFile(path,options); //此时返回bm为空 options.inJustDecodeBounds=false; //计算缩放比 int be = (int)(options.outHeight/(float)100); if (be <= 0) be = 1; options.inSampleSize=be; Log.i("log","be---->"+be); //重新读入图片 bitmap=BitmapFactory.decodeFile(path,options); int bitmapwidth=options.outWidth; int bitmapheight=options.outHeight; //检查图片是否要翻转 try { ExifInterface exifInterface =newExifInterface(path); intresult=exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); switch (result) { caseExifInterface.ORIENTATION_ROTATE_90: rotate=90; Log.i("log","rotate----->"+rotate); break; caseExifInterface.ORIENTATION_ROTATE_180: rotate=180; Log.i("log","rotate----->"+rotate); break; caseExifInterface.ORIENTATION_ROTATE_270: rotate = 270; Log.i("log","rotate----->"+rotate); break; default: break; } } catch (Exception e) { e.printStackTrace(); } if(rotate!=0&&bitmap!=null){ android.graphics.Matrixmatrix=new android.graphics.Matrix(); matrix.reset(); matrix.setRotate(rotate); Bitmap bitmap1=Bitmap.createBitmap(bitmap, 0, 0, options.outWidth, options.outHeight, matrix,true); bitmap = bitmap1; rotate=0; bitmapwidth=options.outHeight; bitmapheight=options.outWidth; } @SuppressWarnings("deprecation") Drawabledrawable = new BitmapDrawable(bitmap); drawable.setBounds(0, 0,bitmapwidth*2,bitmapheight*2); String iconname = path.substring(path.lastIndexOf("/")+1); String iconimfo="["+iconname+"]"; SpannableString spannable = new SpannableString(iconimfo); ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM); spannable.setSpan(span,0,iconimfo.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); int select=ed_content.getSelectionStart(); Editable edit =ed_content.getEditableText(); edit.insert(select, spannable); try { utils.insertPath(iconname,path); } catch (Exception e) { e.printStackTrace(); } } } @SuppressWarnings("deprecation") String getpath(Uri uri) { String[] projection ={MediaColumns.DATA}; Cursor cursor = managedQuery(uri,projection, null, null, null); startManagingCursor(cursor); int column_index =cursor.getColumnIndexOrThrow(MediaColumns.DATA); // 记录图片的位置 Log.i("log","column_index---->"+column_index); cursor.moveToFirst(); return cursor.getString(column_index); }}
4.3 系统功能模块配置的实现
逻辑结构图:
图8.逻辑结构图
各个模块如何实现的 插入 删除 修改 照相 定位 等附上代码?(还是截图都可以吧)
4.4 模块功能流程设计
1.新增事件:
图8.新增事件
2.修改事件:
图9.修改事件
3.删除事件:
图10.删除事件
4.5 代码编写实现
登录代码:
packagecom.example.Notepad;importandroid.os.Bundle;importandroid.app.Activity;importandroid.content.Intent;importandroid.content.SharedPreferences;importandroid.view.Menu;importandroid.view.View;importandroid.widget.Button;importandroid.widget.CheckBox;importandroid.widget.EditText;importandroid.widget.ImageButton;importandroid.widget.Toast;public classMainActivity extends Activity { private EditText userName, password; private Button btn_login; @Override protected void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initview(); } public void Login(View view){ String userNameValue =userName.getText().toString(); String passwordValue =password.getText().toString(); if(userNameValue.equals("chen")&&passwordValue.equals("123")) { Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show(); Intentintent=new Intent(); intent.setClass(MainActivity.this,LogoActivity.class); startActivity(intent); } else{ Toast.makeText(MainActivity.this,"用户名或密码错误,请重新登录",Toast.LENGTH_LONG).show(); } } private void initview() { userName=(EditText)findViewById(R.id.login_user_edit); password=(EditText)findViewById(R.id.login_passwd_edit); btn_login=(Button)findViewById(R.id.login_login_btn); } public void login_mainweixin(View view){ }}
5总结
通过这个课程设计,我们体会到了团队合作的重要性,也收获了一点小小的项目经验。在设计整个软件时,先明确要实现功能是非常重要的,要做什么?要用什么做?其次就是界面设计,界面是与用户交互的接口,如何设计好界面?如何设计界面才能让人看上去更协调?如何设计才能够更友好地操作?这些都是我们要考虑的,等到这些都准备好后,才是开始写代码,这样才不会慌乱,才能写出条理清楚的代码。
本记事本虽然是一个初级的入门小程序,但是涉及到的东西也很多,比如定位,这些平时在课本中都没有接触,就需要我们自己去查找资料,这让我们体会到自学能力的重要性。未来,我们相信我们在拥有一些基本的素质之后,一定能够在代码的路上越走越远。
- 安卓记事本实验报告
- 安卓记事本实验报告
- 安卓记事本
- 安卓应用:简单记事本
- 简单的安卓记事本
- 安卓简单记事本实例
- coco2dx移植安卓的BUG记事本
- paip.备份导出ANDROID安卓自带记事本内容
- 安卓初学者之一个简单的记事本
- 安卓Andriod使用入门(二十六)【记事本】
- 安卓第一次实验解析
- 安卓第二次实验解析
- 实验报告
- 实验报告
- 实验报告
- 实验报告
- 实验报告
- 实验报告
- 基于Unity3D(UGUI)的背包系统<四>完结篇
- eclipse中远程调试JVM(以启动namenode进程为例)
- 蓝牙之六-A2dp代码调用流程
- Children’s Queue大数加法及规律
- 用vlc搭建简单流媒体服务器(UDP和TCP方式)
- 安卓记事本实验报告
- 简述js中 for in 与 for of 区别
- Android 进阶15:HandlerThread 使用场景及源码解析
- sed & awk & grep
- R语言分图散点图
- 欢迎使用CSDN-markdown编辑器
- 现代软件工程-构建之法(第四,五章)
- c++类型转换dynamic_cast
- 三层Datasnap 服务端验证以及心跳包技术