第三次Bolg作业

前言

  这三次的题目集又告一段落了,总体来说,这三次题目集的题目相比于上三次的题目集的题目难度有了些许的提高,题目集7的第一题是卡片的排序,要求:掌握类的继承、多态性使用方法以及接口的应用。以及要求学生能够迅速求出各卡片的面积大小然后将卡片按照其面积值从大到小进行排 序,同时求出所有卡片的面积之和。(这里重点是ArrayList的使用以及Comparable 接口的应用)难度不是很高,第二题则是图形卡分组的游戏,要求与第一题大致相同,难度也大致相仿。题目集8是atm机的类结构的设计,这题比上次题目集难度又有了较大的提升。题目集九也是atn机的设计,此次的设计完善的题目集8的ATM机的设计(重点:重点训练内容为抽象类、继承与多态)。总体来说,接近学期尾声,题目集的难度有提升,并且也越来越有挑战了。

总体来说题量不是很多。

设计与分析

题目集7的7-1与7-2的题目是递进的,7-1是图形卡片的排序,运用了ArrayList以及Comparable 接口,而7-2也运用了7-1所运用的,但7-2对于图形的面积存储以及排序与7-1略有不同,7-1是对所有的图形进行存储以及面积排序,而7-2则分为圆形为一类、矩形为一类等。

两者对比:

7-1类图:                                                 


7-2类图:


7-1:复杂度:

 

 

 

 

7-2:复杂度:

 

 

 

从而看出7-2较7-1是有所改进的,难度也较为大。

 

②题目集8和题目集9两道ATM机仿真题目的设计思路分析总结:

 

 题目集8是atm机的类结构设计,考察的要求:(1)务必注意本题目中的各实体类之间的关系,尤其是一对多的组合关系。(2)对实体类的设计要做到单一职责原则,且不能缺少规定的实体类。 (3)编程时考虑面向对象中的封装性本题目中的应用以及是否有能够扩展 的衍生需求。(重点考核类的封装性及类间关系设计(关联、组合及依赖))题目集九则是对题目集8进行了功能的完善(加入了借记卡与贷记卡,以及跨行取钱的相关的手续费)相比于题目集8,题目集九考察的是(重点训练内容为抽象类、继承与多态)。

设计思路:题目集8:除了作业要求给的实体类还要设计判断类来对输入的进行判断,以及存款取款处理后账户的更新。

设计思路:题目集9:在题目集8的基础上设计两个抽象类(卡以及账户)对题目集8存款取款账户处理的方法进行改善(跨行处理以及借记卡,贷记卡的不同处理)

 

题目集8的类图:

 

题目集九的类图:

 

 题目集8的复杂度:

 

 

 

 

题目集九的复杂度:

 

 

 

 

从类图与复杂度可以看出题目集九在题目集8的基础上加了需求以及对题目集8进行了相关的改进。

踩坑心得

这三次的题目集的难度相比于上次的题目集的难度有所提高,所以还是有一些地方会踩坑:

题目集7

7-1中:

 

int compareTo(Card card)

 

如图这个方法在card类里面没完善,导致了排序的错误:

The original list:
Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02 
The sorted list:
Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02 
Sum of area:106.91

所以对此方法进行完善后:

 int compareTo(Card card) {
     if(this.shape.getArea()<card.shape.getArea()) {
      return -1;}
      else if(this.shape.getArea()==card.shape.getArea()){
      return 0;     }
      else if(this.shape.getArea()>card.shape.getArea())
      return 1;
      return 0;
  }

即能正确的排序:

 

题目集8:ATM机的类结构设计

这题我判断输入的方法全部加到了主类里面,导致的条理不是很好,找错误修改的时候会比较的困难。

题目集九中:

有些许的逻辑错误,判断跨行的时候额外交的费我以为是按所属卡的银行交手续费:

if(aTM.getBank().getBankName().equals("中国农业银行")) {    
        if(account.getBank().getBankName().equals("中国建设银行")||account.getBank().getBankName().equals("中国工商银行")) {         

 

结果是按ATM机所对应的银行交手续费:

if(account.getBank().getBankName().equals("中国建设银行")||account.getBank().getBankName().equals("中国工商银行")) {
        if(aTM.getBank().getBankName().equals("中国农业银行")) {    

还有的就是测试借记卡跨行取全部余额的这个测试点考虑不周,没有想到跨行收取手续费后导致余额为负的情况,修改后加入:

if(amount>balance||balance-amount-(amount*0.03)<0) {
                    System.out.print("Sorry,your account balance is insufficient.");
                        System.exit(0);}

即可以。

以及贷记卡的跨行贷记余额透支情况判断:

if(balance>=0&&balance-amount-(amount*0.02)>-50000.00) {

改进建议

相比于上三次次的题目集,这次的三个题目集对于我来说有了很大的一个提升,但是还是有一些地方可以进行改进。例如一些逻辑上的问题:

像题目集9:ATM机类结构设计的例子,多处地方没有考虑到位,如上述的踩坑心得中导致了测试点的未通过。以及:

 

 

 测试点的格式错误。

还有的就是设计的代码的严谨性不够强,看起来条理没有那么的清晰。

例如这种存数据的方法:

public Account Allinformationaccount1() {
        Account account1=new Account();
        ArrayList<Card>cardlist=new ArrayList<Card>();
        account1.setBanlance(10000.00);
        account1.setNumber1("3217000010041315709");
        cardlist.add(Allinformationcard1());
        cardlist.add(Allinformationcard2());
        account1.setCardlist(cardlist);
        return account1;    
    }

没有这样的好:

        DebitAccount ccbAcc1 = new DebitAccount("3217000010041315709",10000.00,Yangguo,ccb,"DebitAccount");
        DebitAccount ccbAcc2 = new DebitAccount("3217000010041315715",10000.00,Yangguo,ccb,"DebitAccount");
        DebitAccount ccbAcc3 = new DebitAccount("3217000010051320007",10000.00,Guojing,ccb,"DebitAccount");
        DebitAccount icbcAcc1 = new DebitAccount("3222081502001312389",10000.00,Zhangwuji,icbc,"DebitAccount");
        DebitAccount icbcAcc2 = new DebitAccount("3222081502001312390",10000.00,Zhangwuji,icbc,"DebitAccount");
        DebitAccount icbcAcc3 = new DebitAccount("3222081502001312399",10000.00,Zhangwuji,icbc,"DebitAccount");
        DebitAccount icbcAcc4 = new DebitAccount("3222081502051320785",10000.00,Weixiaobao,icbc,"DebitAccount");
        DebitAccount icbcAcc5 = new DebitAccount("3222081502051320786",10000.00,Weixiaobao,icbc,"DebitAccount");
        CreditAccount ccbAcc4=new CreditAccount("3640000010045442002",10000.00,zhangsanfeng,ccb,"CreditAccount");

这都是我要改进的地方。

总结

 

  慢慢的接近了学期的尾声。这三次的题目集到这里就告一段落了,总体来说,这三次题目集的难度比上次的难度有提高,但是这三次的题目集都涉及到了新的知识的使用(ArrayList的使用以及Comparable 接口的应用),还有继承、多态以及接口的练习。这三次题目集对我的帮助还是挺大的,不仅让我巩固了前面学的知识,还有的就是继承、多态以及接口也熟练了许多,以及面对对象的程序设计,让我们能更好的接受新的东西(面对对象设计)Java我个人觉得带给我的不仅仅只是这门课的专业知识,还有的就是其中的思维。这是非常重要的一点。

我需要进一步改进的还是思维上的转变,虽说现在对面对对象的思维有了提高,但是我认为还是不够的,这方面需要自己多去做做题去提高相应的思维能力,还有的就是,逻辑思维上存在的一些问题,想问题并没有想的很全面就开始动手去敲代码,然后导致的就是很多题目并不能一遍就通过,然后找错误的时候会花费自己比较多的时间,形成了找错误比写代码的时间还长,这是我认为自己不好的点也是自己需要去改进的地方。

  我个人认为老师的教学方法是可以的,这种线上+线下的教学方法我认为是可行的,这种教学的方式能让学生更好的去学习新的知识(对于我来说)。但是总体来说这种方式是可以的。这后面的ATM机的类结构的设计老师给了源码,这更大大的降低了难度。但是这也有相关的好处(对于自律的人来说),但是这对于自律性不怎么强的学生是比较不友好的。

课程,作业的话其实这几次的题目集的难度并不是很高,但是添加了新的内容,这对于大部分来说是比较好的锻炼。慕课上的作业可以适当增加一两题,这可以更好的去锻炼学生。

  课上及课下组织方式等方面的改进建议及意见:这部分老师做的挺好的,开设了实验课,以及晚自习的上机,这其实给了我们很多的时间去研究、学习。

  总体来说,这次题目集虽说难度不大,但是能让我学到很多的新东西。

 

 

posted @ 2021-06-20 15:03  zgj2020  阅读(45)  评论(0)    收藏  举报