031302517  031302319

ps:共同完成一篇随笔,文章中的第一人称我(517),队友(319)

一、功能分析+实现思路+结队讨论

  这里我将功能分析和实现思路还有结对过程中的一些讨论结合在一些来写。因为我等会写的内容可能会在功能分析和实现思路这两者间来回切换,可能会在某一功能的分析之后紧接着实现思路,也可能会写很多的思路,但可能跟功能没什么关系,还有可能写了一堆类似废话的结队讨论。总之我是想起来什么,就赶紧写下来的。讲述上的逻辑可能会有些乱,看看就好,不要计较。最后会给出个小小的总结。好了,下面先来看看这次的功能需求:

将初始的排课excel空表导入系统,再将其展现在你们设计的原型里

仅考虑上述功能的实现,暂不考虑后续细节的可拓展性或全面需求的影响

  好了,上述的功能描述已经很详细了,也就是实现两个功能,一是导入excel表格到数据库,二是从数据库中拿数据。那我们在这里需要对这两个功能分析些什么呢?首先,我觉得我们得先定位下自己项目的系统。什么意思,很简单,你的系统要怎么实现,你的数据库放在哪,你要做成有服务器端来提供数据库供你存取数据,还是说利用安卓自带的数据库,以及在程序后台实现导入。

  在我看来,这是两种可行的思路。而且我一开始就打算采用第二种,即安卓自带的数据库。然而在跟队友讨论项目时,却出现了矛盾。队友跟我说,老师要我们导入数据库肯定就是要导入服务器端的啊,你导入什么安卓自带的系统,那有什么意义啊?又不能共享,难不成你要做成导入数据库的Excel数据只能你自己使用吗?这样的话,你直接解析完Excel就把数据拿去展示不就行了,还特意存入数据库不是多此一举吗?说得好像很有道理,然而仔细想想,Excel数据有要求一定要共享吗?我们增添类似分析数据或者发送邮件的功能不行吗?最后说服队友是,时间不够用。相对于采用服务器端的数据库,安卓自带的SQLite不管是学还是用都教为简单。

  下面先来几张图,不然又是一大堆文件(下图是我们小组在进行界面的改善)

  好了,数据库的方式定下来了。接下去也就是要开始分工了。这里插点后话,结队如何共同完成项目,如何分工这在前期一定要讨论清楚。这次结队下来才发现,由于事先没有统一项目的实现细节,导致两人的学习点完全相反,比如关于数据库我学习的是SQLite,然而队友却是学习的Mysql;还有就是没有规定好统一开发环境,导致clone github项目时报错一大堆,程序根本无法跑起来。当然,这也有我把.idea也push到github的原因;最后就是没有统一好编码规范,导致队友在阅读我代码时困难重重,尤其是队友为了能按时完成,居然熬夜到半夜三点多,都是我的错,以后一定好好命名,好好注释,好好规范,好好讨论。还好的是,这些问题在中期都被发现并趁早解决了。当然,这些都是后话了,但还是得写出来警戒下自己。下面就说说我们的分工,我负责的是excel的解析并导入,还有界面的编写。队友负责的是数据的导出并展示。因此,前期代码的编写基本是我负责,后期则交由队友来完成。刚好,我之前稍微接触过其他语言,学安卓速度快点,队友正好可以借前期由我负责的时间来学习相关知识。

  写完分工,下面就写写功能的实现思路,首先是我负责的部分:(1)解析Excel(2)导入数据库(3)界面编写。要将Excel导入数据库,首先就要对Excel进行解析,就在大家都疑惑安卓能否打开Excel时,立即就有大神给出了思路:jxl.jar,这是一个第三方的库,支持安卓程序对Excel的基本操作。然而作死的我却选择的Apache POI,想搞点特殊的,装装13。当稍微看了些文档,照例子实践时却发现报了一堆错,解决一个又冒出一个,最终考虑到时间因素,实在无法在这部分继续耗下去,果断重新选择jxl.jar。果然,装13也是要看脸的。jxl.jar提供了一些API,供我们对Excel的打开,读取。解析的功能实现了,接下去就是导入。因为选择的数据库是SQLite,它提供的很多接口,可以实现对数据库的CRUD操作。最后就是界面的编写了,因为我们原型设计里采用了列表以及二级列表的形式,所以安卓可以用ListView和ExpandableListView实现。以上,就是我负责部分的实现思路以及我要学习的知识点了。

  下面看看队友负责的部分:(1)导出数据库(2)展示数据。看看队友的思路,下面是他的原话:

导出数据及展示的思想:

1.在Mainactivity.java中将查询数据方法queryDatabase()定义为返回Bundle类对象,修改队友对Excel进行解析的相关代码,记录表格的行、列值。在queryDatabase()中新建一个Bundle类在用来返回以及存储从数据库中获取的数据,最后建立一个intent对象携带数据跳转,把展示方法在FileDetailActivity.java中实现。

2.在FileDetailActivity.java中,通过方法initDatas()展示数据:在子列表(即点击表格文件展开的详细信息列表)中,将得到的数据一一放进相对应的参数中去,例如child1V.setCourseName(bundle.getString(s1+3)); 这样就实现了数据和组件的绑定,表格详细信息就在APP中的展示出来了。

    

·写了这么多没头没尾的看着又好像废话的想法,下面就来张表总结下:

二、APP界面展示及其他截图

  首先是 Excel文件的打开,点击Excel文件,选择我们的APP进行打开,我们组只提供这种方式进行打开,对于那些还实现了文件管理器,文件扫描的大神们,表示向往。下图就是选择我们APP以及用我们APP打开Excel后显示的页面:

  点击计算机 1.xls,进入详情页面查看。如下图:


下面是我们小组在结队编程中碰到的问题:


以上图是由于开发环境不同导致的冲突和编码没有事先统一细节出现的冲突


以上图是我们小组的commit记录,前期是我负责,后期则交由队友,最后我再进行整合成最终版。

附上我们的Github项目链接CourseManagement

三、PSP表格以及小结

PSP Personal Software Process Stages 花费时间 计划时间
Planning 计划 7天 7天
Estimate 估计这个任务需要多少时间 7天(老师给的期限) 7天
Development 开发 7天(天天都在码) 7天
Analysis 需求分析(包括学习新技术) 5天(前期基本都在学) 4天
Design Spec 生成设计文档 1小时 没预计这个
Design Review 设计复审 1小时 3小时
Coding Standard 代码规范 0.5小时(我知道错了) 忘记做个了
Design 具体设计 1天 半天
Coding 具体编码 7天(还是天天码) 6天
Code Review 代码复审 2小时 8小时
Test 测试(自我测试,修改代码,提交修改) 0 没有做这个
Reporting 报告 3小时
Test Report 测试报告 0
Size Measurement 计算工作量 1小时
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 2小时 1小时

最后附上队友对于这次结队的心得和小结:

心得:第一次看到这次作业我是绝望的。。好多都不会,而且面临着很多要调整的。在经过我们的讨论之后决定使用了splite,队友写了前期的界面,但由于开发环境的不同,在myeclipse转化的时候用了好多时间还是没有成功,所以我决定去学android studio。这几天下来看了Sqlite,android studio的熟悉使用就花掉了好多时间,(调整的辛酸史就不多讲了,前面队友也有谈到)。不知不觉没剩几天了,才开始要步入正轨--学会如何将数据在APP导出显示。好在我队友够给力,界面、以及数据的导入数据库和解析都做得很好,代码也好读懂。所以,我开始网上学习如何导出,在走了很多弯路,终于给实现。过程可谓辛酸,不过功夫不负有心人,好在完成了任务,没有坑了队友。

小结:自学的过程是痛苦的,尤其是还有其他学科的时间压榨。面对好多问题以前出现时,需要一步一个脚印,静下心来。尽管现在差不多会使用bundle类和intend类,但也只是略知皮毛,还需要我后面多去学习。不过一个礼拜的时间真心短,熬夜就要好几天了。接下来要在国庆深入去了解安卓的开发,不然假期结束后,只能挤压晚上睡眠时间来学习了,这样简直作死。还有,在写代码的时候要注重代码规范和可读性,这次我队友就做的很不错,及时是我这种菜鸟级的,也差不多都能看懂。

【作业三】结队任务二-----CourseManagement的更多相关文章

  1. JAVA作业三

    (一)学习总结 1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Gr ...

  2. jQuery 作业三个按钮

    作业三个按钮 <!--声明 文档--> <!DOCTYPE html> <!--定义字符集--> <html lang="zh-CN"&g ...

  3. 作业三:LINUX内核的启动过程

    作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...

  4. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  5. 20165301 预备作业三:Linux安装及命令入门

    预备作业三:Linux安装及命令入门 VirtualBox虚拟机的安装 在进行安装之前,原本以为有了娄老师的安装教程会是一件很容易的事情.万万没想到,在自己实际动手操作中,还是遇到了许多困难.通过与同 ...

  6. 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 课后习题解答

    今天和大家分享coursera-NTU-機器學習基石(Machine Learning Foundations)-作业三的习题解答.笔者在做这些题目时遇到非常多困难,当我在网上寻找答案时却找不到,而林 ...

  7. 作业三 ATM

    模拟实现一个ATM+购物商场程序 1.额度15000自定义 商城和银行两个帐户 2.实现购物商城,买东西加入购物车,调用信用卡接口结账 3.可以提现,手续费5%,提现额度不能超过50% 4.每月22日 ...

  8. 福大软工 1816:项目UML设计(团队作业三)

    项目UML设计(团队) 团队信息 团队名:第三视角 各成员学号及姓名 姓名 学号 博客链接 张扬(组长) 031602345 http://www.cnblogs.com/sxZhangYang/p/ ...

  9. 20165332 预备作业三 Linux安装及命令入门

    Linux安装及命令入门 一.安装Linux操作系统 由于做的比较晚,结合大多数同学的经验和娄老师的<基于VirtualBox虚拟机安装Ubuntu图文教程>,整个安装过程还算顺利,唯一遇 ...

随机推荐

  1. 编译与解释(java)

    计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序. 翻译的方式有两种,一个是编译,一个是解释.两种方式只是翻译的时间不同 计算机不 ...

  2. MySQL DDL--ghost工具学习

    GHOST工作流程图: GHOST工作原理: .首先新建一张ghost表,结构与源表相同 .使用alter命令修改ghost表 3.1.模拟从库命令获取主库上该表的binlog(基于全镜像的行模式的b ...

  3. typeof 与instanceof

    函数原型链: 2.typeof获取到的是产生该对象的根源object, instanceof获取的是最终产生该对象的父级构造函数 <script> var arr=[1,2,3,4,&qu ...

  4. vue 自学笔记(三) 计算属性与侦听器

    一:计算属性 虽然在模板内使用表达式对属性进行处理十分便利,例如在小胡子语法里写number + 1实现对数据的简单处理,但若我们在其中加入大量的代码,使得逻辑变重,导致难以维护.例如下面的代码,并不 ...

  5. C++primer笔记之顺序容器

    最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间.下面就把这一节的内容做一个简单的 ...

  6. java main()线程是不是最后一个退出的(相比较main中创建的其他多个线程)

    JVM会在所有的非守护线程(用户线程)执行完毕后退出: main线程是用户线程: 仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程. pu ...

  7. oracle查锁及解锁命令

    --查询行锁语句 select sql_text from v$sql a,v$session b where a.sql_id=b.sql_id and b.event='enq: TX - row ...

  8. .net core通过发布nuget实现引用项目

    1 获取 api key 登录  https://www.nuget.org/account 进行api key获取操作 2 安装 nuget package explorer 3 进入要发布的项目目 ...

  9. oc中的oop基础及类的基本介绍

    面向对象的(OOP)的基础知识 类(class):表示一组对象数据的结构体,对象通类来得到自身.类名首字母大写. 对象(objcet):是一种包含值和指向其类的隐藏指针的结构体.运行中的程序中通常会有 ...

  10. .NET内存管理、垃圾回收

    1. Stack和Heap    每个线程对应一个stack,线程创建的时候CLR为其创建这个stack,stack主要作用是记录函数的执行情况.值类型变量(函数的参数.局部变量 等非成员变量)都分配 ...