第三次Blog

一、前言

      又经过了一个多月的学习,java的学习已经进入尾声,在这段时间的学习中,我们学习了新的javafx,也巩固了一下聚合和接口等类的知识,pta的题目也越来越综合,一道题做一个题目集,对整体的把握有了更高的要求。

(1)第七次题目:第七次题目是两种图形卡片游戏,第一题是排序,第二题是分组,第一题不是很难,就先定义一些图形类,卡片类,在对存入的数据进行排序即可,但第二题分组却令我有些头疼,不知怎么将这些数据进行分组,最终只有82分,未通过全部的测试点,在经过两个阶段的教学,老师也意识到不能一直放着这些题目不管,开始给我们讲解一些难题,给我们一些代码,告诉我们思路,让我们能更加理解这个题目,从而写出属于自己的代码。

(2)第八次题目:第八次题目是ATM机类结构设计,我们需要对两家银行,一个银联,五个客户,客户又有几个账户,每个账户对应一张卡,到几个不同编号的ATM机上办理业务,跨行取款、取款超过余额、或者账户与ATM机所对应的银行不同会显示错误,未输入金额时则会显示查询余额业务,输入的金额为正数则为取款,输入负数则为存款,乍一看去感觉非常的麻烦,但我按照老师给的类图一个个去创建类,并分析清楚类与类之间的关系后,这道题便迎刃而解了。

(3)第九次题目:第九次题目是ATM机类结构设计升级版,在其中添加了一个农业银行,几个用户和可实行跨行取款存款等,跨不同银行取款需支付不同百分比的钱,这就需要我将这些类进行修改,增加一些抽象类和一些类图中出现的类,这样就可以进行特殊的跨行取款操作了,在不同的ATM机上进行操作对应不同的手续费,如果输入卡号不存在,则输出“Sorry,this card does not exist.”。 如果输入 ATM 机编号不存在,则输出“Sorry,the ATM's id is wrong.”。  如果输入银行卡密码错误,则输出“Sorry,your password is wrong.”。 如果输入取款金额大于账户余额或者透支金额超过规定最大透支金额, 则输出“Sorry,your account balance is insufficient.”。这些测试点是最基础的,一下就能通过了,最难的还是进行跨行银行业务办理。

二、设计与分析

(1)第七次题目:这次题目集由两道题目组成,第一个是基础些的图形卡片排序,然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,通过代码实现排序前的各图形类型及面积、排序后的各图形类型及面积及所有图形的面积总和。在输入数据时,如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出Wrong Format;其它情况则正常进行输出。第二题是第一题的进阶版,图形卡片分组游戏,需要用到类的继承。多态性使用以及接口的应用,根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,如果图形数量非法(<=0)或图形属性值非法(数值<0以及三角形三边不能组成三角形),则输出 WrongFormat,如果输入合法,则正常输出,输出排序前的各图形类型及面积、输出分组后的图形类型及面积、各组内图形排序后的各图形类型及面积、各组中面积之和的最大值输出。

 

 

 

 以上是这道题的类图和SourceMonitor报表内容,如图可以看出这道题不算很复杂,类的复杂度大多为1或2。

(2)第八次题目:这次题目集就一个大题目,ATM机类结构设计,这是第一次进行如此全面的java的知识的应用,感觉就跟上学期的课设似的,这道题需要我们创建银联、银行、银行用户、银行账户、银行卡和ATM机,尝试使用面向对象技术对银行用户在 ATM 机上进行相关操作的模拟系统设 计,上述的相关概念均要设计为实体类,业务(控制)类请自行根据实际需要进 行扩充和完善。需要实现的功能有,插入银行卡进行余额查询,输入密码正确则进行存取款操作,数额为正则是取款,数额为负则是存款;如果输入卡号不存在,则输出“Sorry,this card does not exist.”。如果输入 ATM 机编号不存在,则输出“Sorry,the ATM's id is wrong.”。 如果输入银行卡密码错误,则输出“Sorry,your password is wrong.”。 如果输入取款金额大于账户余额,则输出“Sorry,your account balance is insufficient.”。  如果检测为跨行存取款,则输出“Sorry,cross-bank withdrawal is not supported.”。至此,实现所有功能。

(3)第九次题目:第九次题目就是第八次题目的升级版,上次老师给的代码和类图为我们提供了方便,在已经写好的类上进行增加和修改即可,不同的是,第九次作业里的ATM可以进行跨行办理业务,还要支付不同的费用,这使得存取款的类变得挺复杂,这也让我捋了半天,才将这些关系整明白,还新增了银行卡最高透支5w元的功能,在将这些弄明白后,这些存取款啥的一下就清楚了,毕竟其他的都在上一题写了。同时,插入银行卡进行余额查询,输入密码正确则进行存取款操作,数额为正则是取款,数额为负则是存款;如果输入卡号不存在,则输出“Sorry,this card does not exist.”。如果输入 ATM 机编号不存在,则输出“Sorry,the ATM's id is wrong.”。 如果输入银行卡密码错误,则输出“Sorry,your password is wrong.”。 如果输入取款金额大于账户余额,则输出“Sorry,your account balance is insufficient.”。  如果检测为跨行存取款,则输出“Sorry,cross-bank withdrawal is not supported.”。功能的实现其实主要在于存取款的手续费,跨行取款对应上手续费,只要将这些搞定,就能很快搞定了。

三、采坑心得

(1)第七次题目集的两道图形卡片游戏一开始写的时候让我感觉这两道题目其实是差不多的,但写了之后才发现,第二题和第一题还是不一样的,不能直接用第一题构造的类。

 

 

(2)第七次题目第二题,有限制代码长度为10kb,第一次写的时候代码太长了,导致无法运行,编译错误,没有分数,经过修改删减,才通过。第九题也是这样,限制代码23kb,我写的远远超过了这个限制,所以我删掉了很多没有用的类,和一些测试点没有用到的用户,才终于通过。

(3)第八次题目集是一道ATM机类结构设计的大题,刚开始入手无从下手,经过梳理,先用了正则表达式将输入的数据分段,在用一个主类将所需要进行的运算全计算出来了。但是,这样的代码虽然可以通过,却不易于修改,第九次题目就是第八次题目的一个升级,如果按老师的类图一个个构造,在进行运算,修改起来会十分的方便,老师也是这样建议我们的,下次一定这样写。

四、改进建议

        总的来说,这三次作业对于我的知识操作要求有很大的挑战,从第七题第一次碰这种继承,聚合类结合的题,手忙脚乱,写一两天都没有头绪到现在对ATM机类结构设计随便怎么修改都能快速完成,学到现在,我从一开始不知道如何输入输出到知道要对自己的代码进行包装,到类的学习,类的继承,封装,多态,接口,聚合等,到现在学习javafx等,在以后的java学习中,我要好好的学习每天坚持打代码,不能松懈,毕竟这是以后的饭碗,在今后的学习中不论对什么都要认真对待。建议pta的题目不要限制代码长度,这样会让我们很困扰,对着写好的代码一直删。

        对这几次代码的改进建议:像第八次、第九次的ATM机类结构设计的大题,需要我们自己构思类图,再按照类图将这些类构造出来,这样以后需要修改一些类或者功能就会简单快捷很多,这也是老师建议我们这样写的。

五、总结

        这三次题目集,让我学到了类继承、聚合等,这些内容中我对类的继承学的较好,是在老师上课时就学会了的,聚合在下课看了视频之后也学会了,这些内容还是不算很难,这三次的题目集大都是大题目,题目量不大,但写起来还是要挺久的。第三阶段的学习,是java的主要部分的学习,这些知识在java的主体中占据很重要的一部分,java课程也迎来了尾声,我会做好期末考试的准备。

        对于教师等其他的方面,我没什么意见,因为在我看来,老师这段时间讲的很细,而且还讲了一些pta上的难题,让我们更好的理解并掌握知识。老师上课虽然讲的很多,但主要还是要靠自己去多钻研,多思考,不能一味的靠老师,大学本来就是自学的地方,靠的是自觉和自律,为了以后能找到好工作,现在就要好好学好这门专业课,做到专精。

        java课程即将结束,但我们并不会因为没了课程而停止对java的学习,java还有太多我没有学会的东西,我想在暑假好好的在将java巩固一遍,然后再去学习一些java的进阶知识,我想做界面,想要做小程序,我知道,现在的知识肯定是不够的,所以,java学习还没结束,才刚刚开始。

posted @ 2021-06-11 16:53  炻岍  阅读(98)  评论(0)    收藏  举报