欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    移动应用开发课程设计.docx

    • 资源ID:44284841       资源大小:21.54KB        全文页数:33页
    • 资源格式: DOCX        下载积分:9.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要9.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    移动应用开发课程设计.docx

    移动应用开发课程设计移动应用开发课程设计报告 学院名称: 计算机与信息工程学院 班级名称: 计科对口 学生姓名: 学 号: 题 目: 基于个人理财通的计算器 任课老师 姓 名: 起止日期: 2017年04月18日至04月30日 目 录 移动应用开发课程设计报告 1 摘要 3 1 项目需求分析 3 1.1 需求分析 3 1.2 功能需求 3 2系统总体设计 5 2.1系统架构设计 5 2.2系统功能体系 5 3系统具体设计 6 3.1 数据库设计 6 3.2系统界面设计 7 3.3数据存储设计 13 3.4信息统计设计 14 3.5地图轨迹设计 14 3.6 服务应用设计 24 4系统编码实现 25 4.1框架引用 25 4.2交互实现 25 4.3单元测试 28 5 系统测试发布 29 5.1手机环境的实测 29 5.2 APP的发布实测 29 参考文献 30 成果评定 31 摘要 随着移动终端的快速普及,Android系统平台引用软件的需求随之增大。伴随着Android智能手机与平板电脑已经出现在我们生活的大量的运用,越来越多的基于Android开发平台也随之而出,为丰富人们运用Android智能产品的用途,使其可以帮人们记录一些事情。本设计开发通过探讨Android体系结构和个人理财管理方面的学问,设计并实现了个人理财通系统。能够对理财信息进行获得、汇总、整理、计算等功能,从而实现随身随时随地地进行日常的理财活动。 1 项目需求分析 1.1 需求分析 物质和科技的飞速发展,人们的生活水平也不断的在提高,往往有许多人在快节奏的生活中迷失和迷茫,许多人觉得自己没钱,但每个月的工资也不是很低,却往往不知道钱花在哪,为什么每到月底自己的钱包会空空如也,正因为这样,人们才须要一款个人理财软件,简洁的界面,易懂的操作,非常便携直观的理财方式,可以让人们更好的进行个人理财。以下是本软件的一些功能: 登录界面:初始登陆时没有密码,为了便利用户爱护隐私,可以自行设置密码 新增支出:添加支出金额、时间、类别和地点等信息 新增收入:添加收入金额、时间、类别和付款方等信息 数据管理:支出汇总,收入汇总,便签信息 便签功能:添加便签,设置提示或事项 计 算 器:对数据进行计算,便利记录,长按结果可干脆复制 移动课堂:泛雅平台中的安卓课程访问 帮 助:对个人理财通各个功能部件的运用介绍 退 出:退出该系统 1.2 功能需求 目前国内外理财软件已有上百种之多,如美国的直觉公司QUICKEN软件为美国13个州及加拿大的客户供应金融管理和预算等财务问题。国内在财务管理方面做的比较突出的当属金蝶公司。然而,在手机理财软件方面做的很突出的还没有,本软件是针对个人用户的一款Android软件,主要对个人理财收入、支出做一个记录和统计,可以对用户的收入、支出记录做添加、删除、查询和修改的管理,本软件该具备以下功能: 功能操作要便利、易懂、,不要有多余或困难的操作。 对用户收入支出信息做添加、删除、查询和修改。 系统的功能复合本人的实际状况。 界面直观简洁,便利用户更好的运用。 保证软件的平安性。 2系统总体设计 个人理财通 启动界面 登陆界面界面 新增支出 新增收入 我的支出 我的收入 数据管理 系统设置 收支便签 计算器 移动课堂 帮 助 退 出 2.1系统架构设计 图2-1 系统架构图 2.2系统功能体系 系统总体功能主要包括系统各功能模块的具体划分和定义,以及各子功能模 块详细实现细微环节,通过具体划分和定义细微环节可以将系统各功能进行有效区分,防 止功能重叠,功能冗余等现象,系统总体功能分析如表2-2所示. 用户功能 详细描述 新增支出 用户对新增支出财产进行具体的记录 新增收入 在此处添加了计算器便利用户对收入/支出财产进行具体记录 我的支出 用户对我的支出财产记录进行具体的查询 我的收入 用户对我的收入财产进行具体的查询 数据管理 用户管理个人账户以及虚拟账户等 系统设置 对手机系统进行规范化设置 收支便签 对财产的收支进行记录 计算器 对数据进行计算,可以长按结果进行复制 移动课堂 学习泛亚平台中的安卓课程 3系统具体设计 3.1 数据库设计 (1) 数据类型简要规则 程序中须要定义常量,变量,这些须要指定的类型。下面介绍常见的数据库类型,如表3-1 所示。 数据类型 简写 整形 int 字符型 str 布尔型 bl 单精度浮点型 flt 双精度浮点型 dbl 表3-1 数据类型简要规则 (2) 组件命名规则 全部的组件对象名称的拼音简写,假如发觉冲突可采纳不同的简写规则。组件命名如表3-2所示。控件 缩写形式 EditText txt Button btn Spinner sp ListView lv 表3-2 组件命名规则 个人理财通是一款运行在Android系统上的程序,在Android系统中,集成了一种轻量型的数据库,即SQLite,该数据库是运用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB,运用该数据库,用户可以像运用SQL Server数据库或者Oracle数据库那样来存储、管理和维护数据,本系统采纳了SQLite数据库,并且命名为account.db,该数据库中用到了4个数据表,分别是tb_flag、tb_inaccount、tb_outaccount和tb_pwd。 3.2系统界面设计 1启动界面:清爽简洁的启动界面,标识着个人理财通和开发者微博,提升整体软件美观程度,如图3-1所示。 图3-1 2. 用户登录:首次登录不须要密码,进去后可在系统设置里设置密码。由于本软件属于个人客户端,通常状况下只有本人运用,所以没有用户名,干脆进入密码输入环节,便于爱护用户隐私,如图3-2所示。 图3-2 3. 用户登入后进入软件的主界面,主界面包括软件的全部功能图标,用户可依据须要运用,如图3-3所示。 图3-3 4. 计算器:基本的加减乘除,可以便利用户对金额进行计算,从而便利记录,在本计算机中计算的结果,可以长按结果进行复制,从而到收入支出页面进行快捷的粘贴,如图3-4、3-5所示。 图3-4 图3-5 5.新增支出:此模块的功能是添加用户的新增支出。同样新增支出可以选择金额、时间、类别、地点和备注。类别可以选择餐费、应酬、礼金、车费以及其他,长按金额后面的填写框可以快捷复制计算器的计算结果,如图3-6、3-7所示。 图3-6 图3-7 6. 新增收入:此模块的功能是添加用户新增的收入。在平常理财的过程中,添加收入记录是很频繁操作,所以此模块为用户供应了一个特别好用而且便捷的操作过程。在这个模块中,用户可以添加收入信息记录的内容包括:金额、时间、类别、付款方以及备注。为了用户能够便利的查看收入记录,故将收入类别进行了分类,详细分为五类,分别为工资、兼职、分红、奖金、其他,长按金额后面的填写框可以快捷复制计算器的计算结果,如图3-8、3-9所示。 图3-8 图3-9 7. 我的支出、我的收入:当在新增收入模块进行了添加操作后,添加的收入记录就会显示在模块中。在这两个界面中可以清晰的看到全部的记录,如图3-10、3-11所示。 图3-10 图3-11 8. 数据管理:对于家庭理财系统来说,数据管理功能是特别重要的一个功能,它主要是管理支出、收入以及便签的记录信息,如图3-12所示。 图3-12 9.系统设置:让用户来设置密码。密码设置胜利后,用户再次登录时就须要所设置的密码,如图3-13所示。 图3-13 10.新增便签,主要实现添加便签记录。便签模块可以记录将要进行的收入或支出信息,也就是相当于备忘录的功能,如图3-14所示。 图3-14 11. 移动课堂:泛雅平台的移动应用开发学习界面,用户可以在这里学习安卓有关学问,如图3-15所示。 图3-15 12. 帮助:个人理财通运用帮助,用于解决在系统中遇到的问题,如图3-16所示。 图3-16 13.退出:用户点击退出图标后回到登录界面。 3.3数据存储设计 package cn.edu.chzu.xxy.sp15.dao; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBOpenHelper extends SQLiteOpenHelper private static final int VERSION = 1;/ 定义数据库版本号 private static final String DBNAME = “account.db“;/ 定义数据库名 public DBOpenHelper(Context context)/ 定义构造函数 super(context, DBNAME, null, VERSION);/ 重写基类的构造函数 Override public void onCreate(SQLiteDatabase db)/ 创建数据库 db.execSQL(“create table tb_outaccount (_id integer primary key,money decimal,time varchar(10),“ + “type varchar(10),address varchar(100),mark varchar(200)“);/ 创建支出信息表 db.execSQL(“create table tb_inaccount (_id integer primary key,money decimal,time varchar(10),“ + “type varchar(10),handler varchar(100),mark varchar(200)“);/ 创建收入信息表 db.execSQL(“create table tb_pwd (password varchar(20)“);/ 创建密码表 db.execSQL(“create table tb_flag (_id integer primary key,flag varchar(200)“);/ 创建便签信息表 Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)/ 覆写基类的onUpgrade方法,以便数据库版本更新 3.4信息统计设计 当点击支出汇总、收入汇总或便签信息时,下方就会出现全部的支出、收入或便签信息。如图3-17、3-18所示。 图3-17 图3-18 3.5地图轨迹设计 package cn.edu.chzu.xxy.sp15.hwl; /* * 计算器项目 */ import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.Button; import android.widget.GridLayout; import android.widget.GridLayout.LayoutParams; import android.widget.TextView; import android.widget.Toast; public class Calculator extends Activity private static final boolean isDebug = true;/ 推断项目是否处于debug调试模式,限制是否打印log / char 用来进行推断用 private static final char CJia = +; private static final char CJian = -; private static final char CCheng = *; private static final char CChu = ÷ / String 用来进行显示用 private static final String SJia = “+“; private static final String SJian = “-“; private static final String SCheng = “*“; private static final String SChu = “÷“; private TextView textView; private Button mCopy;/ 複製按鈕 private boolean isTextViewInputted = false;/ 推断textView是否有输入,用来推断0按钮的功能 / private Button btn_c, btn_del;/ C、DEL / private Button btn_jia, btn_jian, btn_chu, btn_cheng;/ +、-、x、÷ / private Button btn_dian, btn_dengyu;/ ., = / private Button btn_0, btn_1, btn_2, btn_3, btn_4;/ 0,1,2,3,4 / private Button btn_5, btn_6, btn_7, btn_8, btn_9;/ 5,6,7,8,9 protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_calculator); / 布局 / 动态的设置Gridlayout中控件的宽度,使其全屏匹配屏幕 GridLayout gridlayout = (GridLayout) findViewById(R.id.gridlayout_c); ViewTreeObserver vto = gridlayout.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() public void onGlobalLayout() GridLayout gl = (GridLayout) findViewById(R.id.gridlayout_c); fillview(gl); ViewTreeObserver obs = gl.getViewTreeObserver(); obs.removeGlobalOnLayoutListener(this); ); / 获得每个按钮的点击事务 initViews(); / 为每个Button设置了onClick属性 public void onClick(View view) switch (view.getId() / 0-9 case R.id.btn_0: button0Function(); break; case R.id.btn_1: button1Function(); break; case R.id.btn_2: button2Function(); break; case R.id.btn_3: button3Function(); break; case R.id.btn_4: button4Function(); break; case R.id.btn_5: button5Function(); break; case R.id.btn_6: button6Function(); break; case R.id.btn_7: button7Function(); break; case R.id.btn_8: button8Function(); break; case R.id.btn_9: button9Function(); break; case R.id.btn_dian: buttonDianFunction(); break; / C case R.id.btn_c: buttonClear(); break; / DEL case R.id.btn_del: buttonDel(); break; / + case R.id.btn_jia: buttonJiaYunSuanFunction(); break; / - case R.id.btn_jian: buttonJianYunSuanFunction(); break; / X case R.id.btn_cheng: buttonChengYunSuanFunction(); break; / ÷ case R.id.btn_chu: buttonChuYunSuanFunction(); break; / = case R.id.btn_dengyu: buttonDengYuFunction(); break; default: Button b = (Button) view; Toast.makeText(this, b.getText(), Toast.LENGTH_SHORT).show(); break; /* = */ /* private 私有方法 */ /* = */ private void fillview(GridLayout gl) Button buttontemp; GridLayout.LayoutParams params; for (int i = 0; i < gl.getChildCount(); i+) buttontemp = (Button) gl.getChildAt(i); params = (LayoutParams) buttontemp.getLayoutParams(); params.width = (gl.getWidth() / gl.getColumnCount() - params.rightMargin - params.leftMargin; buttontemp.setLayoutParams(params); / 初始化全部的控件 private void initViews() textView = (TextView) findViewById(R.id.calculate_textview); mCopy = (Button) findViewById(R.id.fz); mCopy.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO 自动生成的方法存根 if (textView.getText().toString().equals(“) Toast.makeText(Calculator.this, “結果為空“, Toast.LENGTH_SHORT) .show(); return; ); private void printDebugInfo(String str) if (isDebug) Log.i(“TAG“, “Debug: “ + str); / 往Textv的尾部追加内容 private void appendTextView(String str) CharSequence text = textView.getText(); text = text + str; printDebugInfo(text.toString(); textView.setText(text); / 添加数字按钮的功能start= / 对于0的输入的留意点: / 1、当还没有输入时,就是textview显示为0时,什么都不用做,接着保持为0 / 2、当textview的显示不为0时,在textview的尾部追加一个0 / 问题:推断条件怎样来确定。有两个方案 / 1、获得textview的内容,然后调用比较的方法,是否和0相等 / 2、设置一个Boolean标记,当textview第一次输入不为0时,将标记设为true,然后依据标记来进行0按钮的功能实现 / 对比:方案一有点简洁,缺点相对来说耗性能。每次都要读取textview的值然后进行比较;方案二有点性能上比第一个高,但是限制条件比第一个困难 / 0按钮的功能 private void button0Function() if (isTextViewInputted !textView.getText().toString().equals(“0“) / 条件成立,textview的值不是0 appendTextView(“0“); else if (!textView.getText().toString().equals(“0“) textView.setText(“0“);/ 当有运算操作后,isTextViewInputted为false时,须要把textView设置为0 / 假如已经有输入了,则在textview尾部追加一,是第一次输入则将textview显示改为1.此规则同样适用于其他数字按钮 / 1按钮的功能 private void button1Function() if (isTextViewInputted) appendTextView(“1“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“1“); / 2按钮的功能 private void button2Function() if (isTextViewInputted) appendTextView(“2“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“2“); / 3按钮的功能 private void button3Function() if (isTextViewInputted) appendTextView(“3“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“3“); / 4按钮的功能 private void button4Function() if (isTextViewInputted) appendTextView(“4“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“4“); / 5按钮的功能 private void button5Function() if (isTextViewInputted) appendTextView(“5“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“5“); / 6按钮的功能 private void button6Function() if (isTextViewInputted) appendTextView(“6“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“6“); / 7按钮的功能 private void button7Function() if (isTextViewInputted) appendTextView(“7“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“7“); / 8按钮的功能 private void button8Function() if (isTextViewInputted) appendTextView(“8“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“8“); / 9按钮的功能 private void button9Function() if (isTextViewInputted) appendTextView(“9“); else / 第一次进行输入 isTextViewInputted = true; textView.setText(“9“); / 添加数字按钮的功能end= / 功能四的代码start= / C按钮的功能,清除屏幕使其显示0,并且变更输入状态是未输入 private void buttonClear() if (isTextViewInputted) isTextViewInputted = false; textView.setText(“0“); else if (!textView.getText().toString().equals(“0“) textView.setText(“0“); / DEL按钮的功能,当有输入时,每次点击删除最终一位字符。当只有一个字符时,将显示变成0,并且变更输入状态为未输入 private void buttonDel() if (isTextViewInputted) CharSequence text = textView.getText(); int length = text.length(); if (length > 1) if (length = 2) / 假如在只有2个字符并且第一个还为0的状况,这时候假如再删除最终一位时只剩下一个0,所以输入状态要改为false char c = text.charAt(0); if (c = 0) isTextViewInputted = false; text = text.subSequence(0, length - 1);/ 截取前面部分的内容,上网搜寻CharSequence和subSequence()方法 textView.setText(text); printDebugInfo(textView.getText().toString(); else buttonClear();/ 调用清除功能 else if (!textView.getText().toString().equals(“0“) textView.setText(“0“); / 功能四的代码end= / 运算符号添加原则: / 1、假如textview的最终一个字符不是运算符,则干脆在末尾添加,并且修改输入状态为true,激活0和DEL按钮的功能 / 2、假如最终一个字符是运算符时,替换最终一个字符为当前点击的运行符 / 运算符号 start= / +按钮功能 private void buttonJiaYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText(); int length = text.length(); char c = text.charAt(length - 1); if (c = CJia) printDebugInfo(“已经是+号运算符了“); return; else if (c = CJian | c = CCheng | c = CChu) text = text.subSequence(0, length - 1) + SJia; textView.setText(text); else appendTextView(SJia); else isTextViewInputted = true; appendTextView(SJia); / -按钮功能 private void buttonJianYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText(); int length = text.length(); char c = text.charAt(length - 1); if (c = CJian) printDebugInfo(“已经是-号运算符了“); return; else if (c = CJia | c = CCheng | c = CChu) text = text.subSequence(0, length - 1) + SJian; textView.setText(text); else appendTextView(SJian); else isTextViewInputted = true; appendTextView(SJian); / X按钮功能 private void buttonChengYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText(); int length = text.length(); char c = text.charAt(length - 1); if (c = CCheng) printDebugInfo(“已经是X号运算符了“); return; else if (c = CJia | c = CJian | c = CChu) text = text.subSequence(0, length - 1) + SCheng; textView.setText(text); else appendTextView(SCheng); else isTextViewInputted = true; appendTextView(SCheng); / ÷按钮功能 private void buttonChuYunSuanFunction() if (isTextViewInputted) CharSequence text = textView.getText(); in

    注意事项

    本文(移动应用开发课程设计.docx)为本站会员(1398****507)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开