收藏 分销(赏)

简易的记事本android专业课程设计.doc

上传人:二*** 文档编号:4556246 上传时间:2024-09-29 格式:DOC 页数:26 大小:2.76MB 下载积分:5 金币
下载 相关 举报
简易的记事本android专业课程设计.doc_第1页
第1页 / 共26页
本文档共26页,全文阅读请下载到手机保存,查看更方便
资源描述
河南科技学院 《物联网移动应用开发》课程设计汇报 设 计 题 目: 简易记事本 班 级: 物联网131班 学 号: 1554119 姓 名: 指 导 教 师: 徐睿 成 绩: 信 息 工 程 学 院 课程设计汇报说明 一、写汇报前,请认真阅读《课程设计汇报说明》。 二、打印装订要求 1、一律用A4纸,双面打印,并左侧装订。汇报正文部分均采取宋体小四。《课程设计汇报说明》页也打印。 2、课程设计概述部分占一页;课程设计内容长度依据实际需要填写;结论和指导老师评语及成绩单独占一页。确保打印格式工整。 3、指导老师评语及成绩部分由指导老师填写。 三、汇报内容要求 1、课程设计目标结合实际自己写,不要雷同。 2、课程设计原理简明说明所完成课程设计项目所包含理论知识。 3、课程设计内容 这是课程设计汇报极其关键内容。概括整个课程设计过程。(最好在上述内容基础上画出对应流图、设计思绪和设计方法,再配以对应文字进行说明。) 一、课程设计概述 1、课程设计目标   Window操作系统诞生成就了微软帝国,同时也造就了PC时代繁荣,然而现在,以Android和iPhone手机为代表智能移动设备发明和互联网云技术兴起却敲响了PC时代丧钟!这也预示着移动互联网时代(3G)已经来临。        在这个互联网繁荣时代,有一颗超新星,以它独特征能优势和人性化UI设计使它在短短几年快速占领了智能移动设备市场份额,它就是谷歌Android!这也意味着谷歌在移动互联网时代开始抢跑并领跑。  经过调查显示,大部分消费者全部会使用手机记事本功效。伴随手机记事本功效不停加强和完善,手机记事本对于大家意义,已不仅仅像通常记事簿一样简单统计,而是向着更个性化人性化方向发展。Android[1]系统是开源,它以迅猛姿势已经占领了全球二分之一多市场。记事本在生活和工作也日益凸显出它关键性,它能愈加好地帮助大家愈加好地管理自己工作和生活,极大方便了大家生活。因其开源,我们能够在之上开发安卓记事本软件,同时这也符合广大市场需求。 2、课程设计要求 设计最终作品包含设计汇报和能成功运行程序,能够达成设计指标要求。每个小组在设计完成后,要经指导老师检验。课程设计汇报每个学生一份,由学习委员收齐后统一交给指导老师。 根据课程设计进程,认真完成各个步骤,确保质量,达成目标。 3、课程设计原理 (1) 设计实现添加事件、保留事件、删除事件、导出事件、添加图片等主功效。 (2)利用Android中部分组件和事件监听处理功效实现问题。 (3)利用mysql语句来实现数据库设计为用户保留数据。 (4)使用debug调试来处理程序运行时碰到问题 二、课程设计内容 1、软件功效计划 (1)软件功效  能够提醒用户是否有已写记事本,能够进行记事本标题填写和内容填写,确定后保留。 (2) 界面设计 进入程序提醒“您还没有开始写日志呢!点击下边Menu按钮开始写日志吧!”,点击图片按钮后进入标题和内容填写界面。 2、程序设计 (1)记事本组件设计 本项目包含到以下组件:  TextView:“记事本”,“新建记事”,“编辑记事”等标题。  EditView:“记事本标题”,“内容”等。  ImageButton:“写事件”,“保留”,“加图片”按钮。  Menu:“编译内容”,“删除目前记事”,“修改目前记事”,“导出目前记事” “帮助”,“相关”等。 (2)记事本逻辑设计 (i)添加新记事 假如目前没有记事,点击“listview中事件”后只有一个菜单选项“添加新记事”,写完记事以后,点击“确定”进行保留。 (ii)编辑内容 选中要编辑那一个记事,然后点击“listview中事件”菜单,会出现三个选项“新建记事”,“编辑内容”,“删除目前记事”,点击“编辑内容”对被选中记事进行编辑,然后点击“确定”加以保留。 (iii)删除记事 点击上下键,选中要删除记事,然后点击“listview中事件”菜单,然后点击“删除目前记事”,对选中记事加以删除。 (3)记事本存放实现 Android 中一共提供了5种数据存放方法,不过因为存放这些数据全部是其应用程序私有,所以假如需要在其它应用程序中使用这些数据,就要使用Android提供Content Providers。 Content Providers:Android提供一个特殊存放数据类型,它提供了一套标准接口来获取,操作数据。 Shared Preference:用来存放“key-value paires”格式数据,它是一个轻量级键值存放机制,只能够存放基础数据类型。 Files:它经过File Input Stream 和 File Output Stream对文件进行操作,不过在Android中,文件是一个应用程序私有,一个应用程序无法读写其它应用程序文件。 SQL ite:Android提供一个标准数据库,支持SQL语句。 Network:经过网络来存放和取得数据。 (i)数据存放之SQLite 经过sqlite中增删改查方法来保留、删除、修改、查找数据。来实现对数据操作。 代码: public class DBManage { private Context mContext = null; private SQLiteDatabase mSQLiteDatabase = null;//用于操作数据库对象 private DBHelper dh = null;//用于创建数据库对象 Cursor namecursor=null; private String dbName = "notepad.db"; private int dbVersion = 1; public DBManage(Context context){ mContext = context; } /** * 打开数据库 */ public void open(){ try{ dh = new DBHelper(mContext, dbName, null, dbVersion); if(dh == null){ return ; } mSQLiteDatabase = dh.getWritableDatabase(); //dh.onOpen(mSQLiteDatabase); Log.i("log", "DB is opened"); }catch(SQLiteException se){ se.printStackTrace(); Log.i("log", "open DB faile"); } } /** * 关闭数据库 */ public void close(){ mSQLiteDatabase.close(); dh.close(); Log.i("log", "DB is closed"); } //获取列表 public Cursor selectAll(){ Cursor cursor = null; try{ String sql = "select * from travels"; cursor = mSQLiteDatabase.rawQuery(sql, null); }catch(Exception ex){ ex.printStackTrace(); cursor = null; } return cursor; } public Cursor selectById(int id){ Cursor cursor = null; try{ String sql = "select * from travels where _id='" + id +"'"; cursor = mSQLiteDatabase.rawQuery(sql, null); }catch(Exception ex){ ex.printStackTrace(); cursor = null;} return cursor; } public Cursor selcetPathByName(String name){ Cursor cursor=null; try{ String sql = "select path from icons where filename='"+ name +"'"; cursor=mSQLiteDatabase.rawQuery(sql, null); Log.i("log", sql); }catch(Exception ex){ ex.printStackTrace(); Log.i("log", "select faile"); } return cursor; } //插入数据 public long insert(String title, String content){ Log.i("log", "readyto insert"); long datetime = System.currentTimeMillis(); Log.i("log", "time------>"+datetime); long l = -1; try{ ContentValues cv = new ContentValues(); cv.put("title", title); cv.put("content", content); cv.put("time", datetime); Log.i("log", "data----->"+title+content+datetime); l = mSQLiteDatabase.insert("travels", null, cv); Log.i("log", cv.toString()); Log.i("log", datetime+""+l); }catch(Exception ex){ ex.printStackTrace(); l = -1; } return l; } public long inserticonpath(String filename,String iconpath){ long l=-1; try{ Log.i("log", "ready to insert icon"); ContentValues cv = new ContentValues(); cv.put("filename",filename); cv.put("path", iconpath); l = mSQLiteDatabase.insert("icons", null, cv); Log.i("log", "insert iconname success"); }catch(Exception ex){ ex.printStackTrace(); l = -1; } return l; } //删除数据 public int delete(long id){ int affect = 0; try{ Log.i("log","try to delete the data in databases"); affect=mSQLiteDatabase.delete("travels","_id=?",new String[]{id+""}); Log.i("log", "delete success"); }catch(Exception ex){ ex.printStackTrace(); affect = -1; Log.i("log", "delete faile"); } return affect; } //修改数据 public int update(int id, String title, String content){ int affect = 0; try{ ContentValues cv = new ContentValues(); cv.put("title", title); cv.put("content", content); affect=mSQLiteDatabase.update("travels",cv,"_id=?",new String[]{id+""}); }catch(Exception ex){ ex.printStackTrace(); affect = -1; } return affect; } } (ii)数据存放之Files 我们能够经过自定义copyfile()方法来复制数据 代码: //复制文件 public int copyfile(String from,String into){ try { copyfrom=new FileInputStream(from); copyinto=new FileOutputStream(into); Log.i("log", "fuck you"); byte[] bt = new byte[1024]; int c; while((c=copyfrom.read(bt)) > 0){ copyinto.write(bt,0,c); } copyfrom.close(); copyinto.close(); Log.i("log", "copy success"); return 1; }catch (FileNotFoundException e) { e.printStackTrace(); return -1; } catch (IOException e) { e.printStackTrace(); return -1; } } 3、程序开发 (1)主activity设计 当选择“新建记事本”,“编辑内容”,“删除目前记事”等菜单选项时对应操作 代码: public void initAdapter(){ dm.open();//打开数据库操作对象 cursor = dm.selectAll();//获取全部数据 cursor.moveToFirst();//将游标移动到第一条数据,使用前必需调用 int count = cursor.getCount();//个数 ArrayList<String> items = new ArrayList<String>(); ArrayList<String> times = new ArrayList<String>(); for(int i= 0; i < count; i++){ items.add(cursor.getString(cursor.getColumnIndex("title"))); times.add(cursor.getString(cursor.getColumnIndex("time"))); cursor.moveToNext();//将游标指向下一个 } dm.close();//关闭数据操作对象 adapter = new ListViewAdd(this,items,times);//创建数据源 } public class myOnCreateContextMenuListener implements OnCreateContextMenuListener{ public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { menu.setHeaderTitle(""); //设置选项 Log.i("log", "chooseing menu"); menu.add(0,0,0,"删除"); menu.add(0,1,0,"修改"); menu.add(0,2,0,"查看"); menu.add(0,3,0,"导出到SD卡"); } } public boolean onContextItemSelected(MenuItem item){ AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); dm.open(); switch(item.getItemId()){ case 0://删除 Log.i("log", "selectItem---->"+item.getItemId()); try{ Log.i("log", "cursor ready move "); Log.i("log", "menuInfo position "+menuInfo.position); cursor.moveToPosition(menuInfo.position); Log.i("log", "cursor move success"); adapter.removeListItem(menuInfo.position);//删除数据 adapter.notifyDataSetChanged();//通知数据源,数据已经改变,刷新界面 dm.close(); }catch(Exception ex){ ex.printStackTrace(); } break; case 1://修改 try{ cursor.moveToPosition(menuInfo.position); //用于Activity之间通讯 Intent intent = new Intent(); //通讯时数据传送 intent.putExtra("id", cursor.getString(cursor.getColumnIndex("_id"))); intent.putExtra("state", ALERT_STATE); intent.putExtra("title", cursor.getString(cursor.getColumnIndex("title"))); intent.putExtra("time", cursor.getString(cursor.getColumnIndex("time"))); intent.putExtra("content", cursor.getString(cursor.getColumnIndex("content"))); //设置并开启另一个指定Activity intent.setClass(MainActivity.this, EditTravels.class); MainActivity.this.startActivity(intent); finish(); }catch(Exception ex){ ex.printStackTrace(); } break; case 2://查看 try{ cursor.moveToPosition(menuInfo.position); Intent intent = new Intent(); intent.putExtra("id", cursor.getString(cursor.getColumnIndex("_id"))); intent.putExtra("title", cursor.getString(cursor.getColumnIndex("title"))); intent.putExtra("time", cursor.getString(cursor.getColumnIndex("time"))); intent.putExtra("content", cursor.getString(cursor.getColumnIndex("content"))); intent.setClass(MainActivity.this, CheckTravels.class); MainActivity.this.startActivity(intent); }catch(Exception ex){ ex.printStackTrace(); } break; case 3://导出 try{ cursor.moveToPosition(menuInfo.position); String title=cursor.getString(cursor.getColumnIndex("title")); String content=cursor.getString(cursor.getColumnIndex("content")); HM.htmlmanager(title, content); copyicon(title,content); Toast.makeText(MainActivity.this, "导出成功,快去SD卡\" 记事本 \"里找出来分享吧!!", Toast.LENGTH_LONG).show(); }catch(Exception ex){ Toast.makeText(MainActivity.this, "Sorry!!!导出失败!!", Toast.LENGTH_LONG).show(); ex.printStackTrace(); } break; default:; } dm.close(); return super.onContextItemSelected(item); } (2)修改内容 代码: public class EditTravels extends Activity{ private static final int SELECT_IMAGE =123; int rotate = 0; private EditText titleedit; private EditText travelsedit; private ImageButton save; private ImageButton insertimage; private ImageButton takephoto; private String idString; private int id2; private String title=""; private String travelsdata = ""; private String timeText = ""; public Cursor cursor=null; public String namestr=""; private DBManage dm=null; private Bitmap bitmap = null; private String path = null; private int state =-1; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.edittravels); titleedit=(EditText)findViewById(R.id.titleedit); travelsedit=(EditText)findViewById(R.id.travelsedit); save=(ImageButton)findViewById(R.id.save); save.setOnClickListener(new saveListener()); insertimage=(ImageButton)findViewById(R.id.insertimage); insertimage.setOnClickListener(new insertimageListener()); dm=new DBManage(this); Intent intent = getIntent(); state = Integer.parseInt(intent.getStringExtra("state")); Log.i("log", "state---->"+state); if (state==2) { idString =intent.getStringExtra("id"); Log.i("log", "id---->"+idString); id2 = Integer.parseInt(idString); title = intent.getStringExtra("title"); travelsdata = intent.getStringExtra("content"); timeText = intent.getStringExtra("time"); titleedit.setText(title); dm.open(); int i=0; int start=0; int end=0; String str1=null; String str2="["; String str4="]"; String iconname=null; SpannableString travelsSpan =new SpannableString(travelsdata); for(i=0;i<travelsdata.length();i++) { str1=travelsdata.substring(i, i+1); Log.i("log", str1); if(str1.equals(str2)) { start=i+1; } if(str1.equals(str4)) { end=i; namestr=travelsdata.substring(start,end); Log.i("log", namestr); cursor=dm.selcetPathByName(namestr); cursor.moveToFirst(); path=cursor.getString(cursor.getColumnIndex("path")); cursor.close(); namestr=null; Log.i("log", path); if(!(cursor==null)) { int count=cursor.getCount(); Log.i("log", "count----->"+count); BitmapFactory.Options options =new BitmapFactory.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; bitmap=BitmapFactory.decodeFile(path,options); Drawable drawable = new BitmapDrawable(bitmap); drawable.setBounds(0, 0, 360, 280); ImageSpan span = new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM); travelsSpan.setSpan(span, start-1,end+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } else { Log.i("log", "insert icon faile"); } } } dm.close(); travelsedit.setText(travelsSpan); } } //保留按钮点击事件 class saveListener implements OnClickListener{ public void onClick(View v) { // TODO Auto-generated method stub title = titleedit.getText().toString(); travelsdata= travelsedit.getText().toString(); Log.i("log","title---->"+title); Log.i("log", "travels---->"+travelsdata); try{ dm.open(); if(state==1) dm.insert(title, travelsdata); if (state==2) Log.i("log", "ready to alter"); dm.update(id2, title, travelsdata); dm.close(); }catch(Exception ex){ ex.printStackTrace(); } Intent gobackIntent=new Intent(EditTravels.this,MainActivity.class); EditTravels.this.startActivity(gobackIntent); finish(); } } //插入图片点击事件 class insertimageListener implements OnClickListener{ public void onClick(View v) { Intent intent=new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); intent.putExtra("return-data", true); startActivityForResult(intent, SELECT_IMAGE); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { path=getpath(data.getData()); BitmapFactory.Options options =new BitmapFactory.Options(); options.inJustDecodeBounds =true; //获取这个图片宽和高 bitmap =BitmapFactory.decodeFile(path, options); //此时返回bm为空 options.inJustDecodeBounds =false; //计算缩放比 int be = (in
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服