2017-2018-1 20162330 实验五 数据结构综合应用


2017-2018-1 实验报告目录:   1   2   3   4   5


 课程名称:《程序设计与数据结构》

 学生班级:1623班

 学生姓名:刘伟康

 学生学号:20162330

 实验时间:2017年12月15日

 实验名称:数据结构综合应用

 指导老师:娄嘉鹏、王志强老师

目录


实验要求:

实验五 数据结构综合应用

  • 0 分析系统架构

    1 编译、运行、测试系统

    2 修改系统

    3 分析数据结构、排序、查找算法的应用

【返回目录】

实验步骤及代码分析:

团队项目代码托管链接

实验五-0:分析系统架构

  • 所谓的 架构,是一种特定的工作模式,系统架构是系统的组织结构。这部分内容有些专业,所以我一直不知道如何下手。通过查找相关资料,我大致了解了架构涵盖的几部分内容,针对一个软件来说,架构可以分为三个部分,数据访问层业务逻辑层用户接口层。其中,用户接口层可以调用业务逻辑层的方法,业务逻辑层可以调用数据访问层的方法,这三层又可以调用实体层,实体层可以跨层传递数据。业务逻辑层是核心部分,一个业务逻辑方法可以调用多个数据访问层方法,也会产生多个返回信息。

    软件三层架构图如下:

    1062725-20171217180021358-357684458.png

  • 对于我们的项目来说,并没有涉及到数据库的内容,所以使用了之前设计的简易ER图表示 数据访问层 的内容,正好ER图本身就表示实体类型、属性和联系。之后又使用之前设计好的用例图表示 用户接口层 的内容,再联系一些游戏界面构成一幅简易的业务逻辑图(我也不知道算不算逻辑图(¬_¬))。关于软件和硬件之间的联系,我们的项目是一个app软件,硬件是手机。将软件安装到硬件的方式是:通过将项目打包成apk,然后在手机上进行安装。将以上三层结构图联系起来(不包括软件和硬件之间的联系),就得到了一幅相对完整的系统架构图:

    1062725-20171217183541061-1992305098.png

    点击查看大图:【系统架构图】

    如果觉得还不够大请下载查看,文件链接:【系统架构图】

  • 关于分析系统架构,在架构图中就可以体现。由于我对架构图缺乏了解,最后只能设计成这样,有时间 希望老师能讲解一下

实验五-1:编译、运行、测试

  • 1.git clone 小组项目
    2.编译项目,提交编译成功截图(全屏,要有学号信息)
    3.提交运行过程中的截图(全屏,要有学号信息)

  • 首先,打开 Android Studio,配置好SDK等环境变量后依次点击菜单栏中的VCSGitClone,复制项目链接即可,操作如下图:(点击图片可放大)

    1062725-20171217202135889-619861501.png

  • 第二种克隆项目的方法是传统形式,点击FileNewProject from Version ControlGit,之后复制项目链接即可,操作如下图:(点击图片可放大)

    1062725-20171217202206280-84753700.png

  • 克隆过程中难免会遇到一些问题,查下资料,把相关配置更新一下一般就可以解决问题,克隆过程及结果截图如下:(点击图片可放大)

    1062725-20171217202520874-318380841.png

    1062725-20171217202527202-970642201.png

  • OK,接下来编译运行,没有红色提示自然就是编译成功了,运行一下,又会出现一些问题,根据Studio中的提示一步一步来,解决问题后,得到编译和运行过程的截图:

    1062725-20171217202715593-555939045.png

    1062725-20171217202727468-1922998871.jpg

实验五-2:代码修改

  • 1.在小组项目中,找一个合适的地方添加一个按钮,点击显示自己的学号
    2.提交运行截图(全屏,要有学号信息)
    3.在项目中找一个界面,自己复制一份命名为XXXbak,修改代码,替换原来的部分
    4.提交运行截图(全屏,要有学号信息)

  • 首先要加一个按钮,比较基础,我选择了在游戏结束界面中添加这一控件:
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="20162330刘伟康   已结束游戏"
        android:textSize="40dp"/>

如图所示:

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217203312952-566195360.png)
  • 对应的运行过程截图如下:

    1062725-20171217203336139-1741528104.png

    Game Over 之后:

    1062725-20171217203405421-1370970186.png

  • 下一步,在项目中找一个界面,自己复制一份命名为XXXbak,修改代码,替换原来的部分。我在原来的文件夹中复制了这一个项目,更改名称即可:

    1062725-20171217203501405-1559013794.png

    1062725-20171217203511546-456266038.png

  • 这样就完成了,这个实验截图比较多。

实验五-3:代码分析

  • 分析小组代码:

    1.数据结构的应用情况及相关代码
    2.排序算法的应用情况及相关代码
    3.查找算法的应用情况及相关代码
    4.完成实验报告

  • 关于数据结构,我们小组选取的是有关 查找和索引 的内容,对于车辆的查找,我们使用了HashMap类:
 //车辆查找方法
    private boolean Searching(String carName){
        boolean judge = false;
        HashMap hashMap = new HashMap();
        hashMap.put("Flash", R.drawable.car1play);
        hashMap.put("Lightening", R.drawable.car2play);
        hashMap.put("Flat", R.drawable.car4play);
        hashMap.put("Taxi", R.drawable.car3play);
        try {
            //哈希查找
            CarID= (int) hashMap.get(carName);
            judge= true;
        }catch (Exception e){
            Toast.makeText(this,"Can't find the car",Toast.LENGTH_SHORT).show();
        }
        return judge;
    }

我们用车名作为关键字,联系的是图片的id。这一方法是当使用搜索框搜索车辆的时候使用的方法。当在车辆选择界面中的搜索框中输入车辆名的时候,会在哈希表中找该关键字所对应的下标,从而返回车辆图片的id。从而实现用户可以通过查找来查找自己心仪的车辆来进行游戏。

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217204821093-1977209547.png)

上图中的查找框如下:

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217204844155-1088870246.png)

如果用户正确拼写出车辆名称,就会进入接下来的音乐选择界面。如果搜索车辆失败(区分大小写、空格),就会弹出`Can't find the car`的提示:

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217205240796-1965900639.png)
  • 关于查找算法,我们小组项目涉及的查找因为数据量不大,难度也不大。因此我们小组使用的是线性查找算法:
    //线性查找
    public static int  linearSearch(String[] data, String target){
        boolean judge = false;
        int index =0;
        while (index < data.length){
            if(data[index].equals(target)){
                judge = true;
                break;
            }
            index++;
        }
        if (!judge){
            index = -1;
        }
        return index;
    }

这个算法主要用于选择音乐:

        if (view.getId()== R.id.music_searchBtn){
            String target = findSong.getText().toString();
            int resultIndex = Searching.linearSearch(songName,target);
            if (resultIndex!=-1){
                StartGame.putExtra("songID",songID[resultIndex]);
                StartGame.putExtra("carID",idReceiver.getStringExtra("carID"));
                startActivity(StartGame);
                finish();
            }else {
                Toast.makeText(this,"曲目不存在",Toast.LENGTH_SHORT).show();
            }
        }

在音乐选择方法中,有两个数组。下标对应,一个用来放歌曲的名字,一个数组用来放曲目的id。将用户在搜索框中输入的歌曲名,会调用线性查找来查看曲名的数组中是否存在对应的曲目,找到之后会获取对应的曲目id,最后传到主活动中播放曲目。如果找不到也会弹出“曲目不存在”的提示。和车辆查找框一样,音乐查找框也区分大小写和空格。
对应界面如下:

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217210134499-1035516425.png)

背景图和音乐曲目还是很吸引人的,对应的音乐搜索框如下:

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217210141171-2026969544.png)
  • 其实,markdown也是可以添加输入框和搜索框的,来试试输入框吧:

【返回目录】

测试过程及遇到的问题:

1. 克隆时出现:early EOF index-pack faild。

  • 解决办法:(查找相关资料)
    出现此错误的原因是网络环境较差,或者克隆文件过大导致克隆中断。网络上的解决方法复杂多样,由于当时是在宿舍用学校的网下载的,试过几遍之后都是这个问题,之后我 换了一个速度快一些的网 克隆,于是便解决了问题。1062725-20171217224029014-834943157.png

2. 克隆时出现Error:Execution failed for task ':app:transformClassesWithDexForDebug'。

  • 解决办法:(查找相关资料)
    完整错误如下:
Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException:XXX(后面的没有具体保存记录)

查找到的解决方法是:由于build -tools版本与jdk有冲突,所以要更改buildtools版本。
步骤如下:FileProject StructureappBuild Tools Version,替换对应的版本即可。关于如何选择对应的版本,我是一个一个试出来的(¬_¬)。

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217222205374-1827611873.png)

![](http://images2017.cnblogs.com/blog/1062725/201712/1062725-20171217222216858-445597381.png)

其实遇到了很多克隆的问题,根据各种提升更新各种版本,可惜过程没有详细记录。

3. 运行ADB时出现:gradle project sync failed.please fix your project and try again.

  • 解决办法:(查找相关资料)
    这个问题缠了我好久,先是重启 Android Studio,然后又反复更改sdk的位置,并且又下载了一个虚拟设备,还是没用,按照网上的方法:点击工具栏中的Build-->Rebuild project仍然没有用,之后又查找了一些资料并尝试,终于找到了合理的方法:在 SDK Manager 的 SDK Tools 中勾选 Android Emulator 安装即可:

    1062725-20171217223549171-1841418816.png

【返回目录】

分析总结:

  本次实验的题目是“数据结构的综合运用”,我的感受是:只要前面的团队任务做得不错,这次的实验都可以比较容易地完成,除了一些和clone有关的问题和环境变量的问题之外,本次实验的内容还是挺容易的。

  这次实验我遇到的 Android Studio 的环境配置问题很多,因为之前一直没有更新配置文件gradle,所以这次开始克隆时就遇到了一些麻烦,在无奈重装Android Studio之后,仍然没能克隆成功,又根据提示不停更新配件,并且查找资料,再一次成功配置 Studio,可惜的是问题过程记录得太少。

  通过这次实验,我也学到了一些架构的内容,架构可以分为三个部分,数据访问层业务逻辑层用户接口层。业务逻辑层是总体架构的核心。同时我也对软件发布的过程更熟悉了一些,团队合作也给我留下了较为深刻的印象。

PSP(Personal Software Process)时间统计:

  • 步骤耗时百分比
    需求分析20min10%
    设计20min10%
    代码实现20min10%
    测试40min20%
    分析总结100min50%

【返回目录】

参考资料:

【返回目录】

转载于:https://www.cnblogs.com/super925/p/8052290.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值