题目集7~9的总结

   PTA 7-9 题目集总结:

(1)前言:总结三次题目集的知识点、题量、难度等情况

         在第七次作业中,题目集7的题量不算多,只有两道题,分别为图形卡片排序游戏以及图形卡片分组游戏,但总体的工作量

  却不少,因为是两道大题,不是那种看一眼就开始 写的题目,题目集7的知识点主要有类的继承、多态性使用方法以及接口的应

  用,ArrayList链表里面的排 序,如何保留两位小数 等,难度适中,可以动手。7-1的难度更大一些,需要进行类的设计等等,7-2

  是在其基础上进行迭代,这一次与上一次的区别在于需要按照不同形状进行分类以及排序,每一个[ ]里面输出相同类型的图形,

  最后求出不同形状总值的最大值;

         第八次跟第九次作业均只有一道题,算是比较大的工程了,知识点主要是类的设计,字符串比较,如何保留两位小数,判断

  各个类之间的关系。第八次作业是三次里面最难的了,主要难在设计上面,老师将作业打回过一次,因为需要设计六个实体类,

  很多人没有设计,都是直接开始动手敲,这样通过pta的测试点是没问题的,但是会达不到训练的目的,第九次作业是在第八次作

  业的基础上进行迭代,因为比较相似的缘故,这次作业相对第八次而言更为容易,而且老师给出了第八次作业的答案,在此基础

  上进行改进还是很方便的,主要知识点仍然是类的设计,字符串进行比较等,以及数据的存储调用。

(2)设计与分析:重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及

  PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相)

  本次Blog必须分析的内容如下:

①题目集7(7-1)、(7-2)两道题目的递进式设计分析总结

  下图是题目集7-1的类图:

 题目集7~9的总结

   根据题目要求需要设计8个类以及一个接口,分别为Shape类,Circle类,Rectangle类,Triangle类,Trapezoid类,Card类

   Main,DealCardList类以及Coaparable接口。Shape类里面的方法主要写判断数据是否合法和计算面积的方法;每一个类

   的各个属性设置为私有的,进行封装,通过set,get方法对其进行改变和获取,提高了代码的可用性和可维护性,Trapezoid

   类继承抽象类Shape,Circle类继承抽象类Shape,Rectangle类继承抽象类Shape,Card类实现接口Comparable。在Main

   类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接使用Main.ipnut.next即可。

   7-2是在7-1的基础上进行迭代的,与上一次的区别在于需要按照不同形状进行分类以及排序,每一个[]里面输出相同类型的

   图形,最后求出不同形状总值的最大值。每一个形状的数值加到同一个链表里,这样能对同一种形状里面的面积进行排序,

   并且求出每一个链表面里总和的最大值,最好输出该值。7-2作业在DealCardList类中划分了更多类型的表,如下:

   

ArrayList<Integer> list = new ArrayList<Integer>();  
     ArrayList<Card> list1 = new ArrayList<Card>();
     ArrayList<Card> listcir = new ArrayList<Card>();
     ArrayList<Card> listrec = new ArrayList<Card>();
     ArrayList<Card> listtri = new ArrayList<Card>();
     ArrayList<Card> listtra = new ArrayList<Card>();

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

 下图为题目集8和9的类图:

  题目集7~9的总结

  题目集8是ATM机类结构设计,包含六个实体类,分别为银联、银行、用户、账户、银行卡、ATM机,这道题如何下手我思考

  了很久,首先我把题目给出的各类信息存在ArrayList中,包括用户名,账户,银行卡和ATM机的信息,将用户与他的其他信息

  相匹配,如下所示:

  

User user1 = new User("杨过","中国建设银行",new String[]{"6217000010041315709","6217000010041315715","6217000010041315718"},10000.00);
        list.add(user1);
        user1= new User("郭靖","中国建设银行",new String[]{"6217000010051320007"},10000.00);
        list.add(user1);
        user1= new User("张无忌","中国工商银行",new String[]{"6222081502001312389","6222081502001312390","6222081502001312399","6222081502001312400"},10000.00);
        list.add(user1);
        user1= new User("韦小宝","中国工商银行",new String[]{"6222081502051320785","6222081502051320786"},10000.00);
        list.add(user1);

  输出时通过获取输入的姓名寻找信息:

  

   System.out.println(user1.name+"在"+user1.bank+"的"+bianhao+"号ATM机上取款¥"+String.format("%.2f", number));
                   System.out.println("当前余额为¥"+String.format("%.2f", 10000-number));
                 }
                 else if(right==true&&number<0){
                     System.out.println(user1.name+"在"+user1.bank+"的"+bianhao+"号ATM机存款¥"+String.format("%.2f", -number));
                   System.out.println("当前余额为¥"+String.format("%.2f", 10000-number));

 

  通过查询数组中存储的信息判断是否为跨行取款等。

  步骤总结:通过初始化知道所有的信息都能在银行通过一层层得到,所以在这个类需要传入银行链表以及输入的内容;种错误情况的判断;

  通过循环得到各个类里面的属性;  输出结果;

  第九次作业是在第八次作业的基础上增加了一些业务,在老师给的代码上进行了一些修改,从老师的代码中可以看到很明显的对应关系

  UnoinPay类里面有银行链表;Bank类里面有账户链表,银行卡链表;Account类里面有银行卡链表,银联与银行是关联关系,用户与账

  户是关联关系,账户与银行卡是关联关系。

  第九次作业有一些地方做出了一些修改,比如根据账户的不同,银行卡一般分为借记卡(针对借记账户)和信用卡(针对贷记账户)

  两类。银行账户分为借记账户和贷记账户两种,其中,借记账户不能够透支取款,而贷记账户可 以透支取款(可能需要支付手续费),

  本次作业中银行卡包含借记卡和信用卡两类,且允许跨行办理相关业务,其中手续费如下图所示:

  题目集7~9的总结

  另外还增加了四个用户,一家银行以及五台ATM机,其他要求都跟第八次作业相似,在第九次作业中增加了利率结算功能,如下:

  

if (!account.getBank().getBankNO().equals(aTM.getBank().getBankNO())) {
            if(account.getBalance()>0) {
                if(aTM.getBank().getBankNO().equals("1001")) 
                    account.setBalance(account.getBalance() - amount*0.02);
                else if(aTM.getBank().getBankNO().equals("1002"))
                    account.setBalance(account.getBalance() - amount*0.03);
                else if(aTM.getBank().getBankNO().equals("1003"))
                    account.setBalance(account.getBalance() - amount*0.04);
            }
        }    

  并且在多次透支的情况下算出利率,

  

if (amount > balance) {
            if(account.getType()==1) {
                System.out.println("Sorry,your account balance is insufficient.");
                System.exit(0);
            }
            else {
                if(account.getBalance()<0) {
                    if(account.getBalance()-amount-0.05*amount>=-50000) {
                        account.setBalance(account.getBalance()-0.05*amount);
                        account.setErdu(account.getErdu()-amount);
                    }
                    else {//出错
                        System.out.println("Sorry,your account balance is insufficient.");
                        System.exit(0);
                    }
                }
                else {
                    if(account.getBalance()-amount<-50000) {//超过余额加额度/出错
                        System.out.println("Sorry,your account balance is insufficient.");
                        System.exit(0);
                    }
                    else {
                        account.setErdu(account.getErdu()+account.getBalance() - amount);                        account.setBalance(account.getBalance()-0.05*(amount-balance));
                    }
                }
            }
        }
        

  其他操作与上一题类似。

 

(3)采坑心得:对源码的提交过程中出现的问题及心得进行总结,务必做到详实,拿数据、源码及测试结果说话,切忌假大空

   对于题目集7的两道题,相对来水难度还是可以的,所以两道题目都得了满分,因为之前也做过几道类似的图形面积的题目,

   并且题目也给出了类的设计。所以往里面填东西就好了,一开始测试的时候对于非法输入的判断方面还是有问题的,就算输入

   不符合规范也能得出结果,原因是代码中对于输入数据的判断一开始存在一些问题,经过修改后解决了,第二题是在第一题的

   基础上进行迭代完成的,相应的增加了一些功能,除了碰到一些输出格式的问题之外其余问题不大。

   对于题目集8,虽然只有一道题,但应该算是做pta以来最综合的一道题目了,需要用到很多知识,最主要的是自己进行类的设

   计,之前做的题目中一般都会给出总的类图,照着写就完事了,这次的需要靠自己,所以在类的设计方面出现了许多问题,不

   知道该从何处下手,设计出来的比较简单,虽然能通过一部分的测试点,但我知道这应该没达到老师所要求的地步,不过自己

   对于这方面确实不太熟悉,需要多加学习,好好努力,最后通过老师在群里的提示,完善了一些,第九次作业是在第八次的基

   础上进行迭代完成的,用的是老师给的代码,修改的部分并不多,主要是手续费这块,一开始一直通不过pta上的测试点,后面

   发现是自己对于贷款额度的理解有误,是加上手续费之后满五万元就已经达到限额了,而不是可以借到五万元,理解了这一点

   之后就解决了上面碰到的问题了。

 

(4)改进建议:对相应题目的编码改进给出自己的见解,做到可持续改进

   有些题目的代码写的比较复杂,还不够精炼,可读性不好,虽然说功能都实现了,但还是需要很多改进的,比如几道图形处理的

   问题,要求用不同的方法写,接口啊抽象类这些,对于多态的运用还是有些模糊,该创建些什么类,定义什么方法如何调用等方

   面还有许多问题,很多代码都写在mian方法里面了,显得很臃肿,这是需要改进的。

 

(5)总结:对本阶段三次题目集的综合性总结,学到了什么,哪些地方需要进一步学习及研究,对教师、课

          程、作业、实验、课上及课下组织方式等方面的改进建议及意见。

    通过这三次的PTA作业,让我进一步学会了如何进行类的设计,印象最深的就是这个,这是一大难点,需要结合生活以及不

    断的练习,类的设计使用很广,很多项目中都需要使用,一定要仔细,不然很容易出错,老师上课讲的很清楚,但是毕竟上

    课时间有限,很多东西需要我们去自学,师傅领进门,修行在个人,在今后的学习中,需要我们自己不断地去自学,提高自

    身水平。


   

 

上一篇:同步方法和同步块


下一篇:Cannot modify mapreduce.job.name at runtime. It is not in list of params that are allowed to be modi