题目集7~9总结blog
一.前言
本篇文章将对我近期Java语言学习情况以及三次题目集作业进行分析总结。
题目集七:学习Java语言的普通题目,涉及类的继承、多态性使用方法以及接口的应用,个人认为接口是前后端沟通的桥梁,是数据传输通道,可以实现多重继承,通过对图形卡片游戏的设计,可以有效提升对Java逻辑的思考与应用能力,题目数量较少,难度适中。
题目集八:学习Java语言的进阶题目,涉及各实体类之间的关系,尤其是一对多的组合关系,通过这道题目,我懂得了如何正确灵活地处理类与类之间的关系,了解组合,关联,聚合之间的联系与区别,难度个人感觉较大,逻辑较为繁琐,部分类的功能不知道该如何实现。
题目集九:学习Java语言的进阶题目,对8-1做了进一步的改进,需要将业务设计成相关的实体类,通过这些题目,可以引起我们对面向对象的思考,个人感觉其中最难的部分是设计,类与类之间关系的设计,类的属性和方法的设计,如果在最初的设计不够严谨,后面再更改又将牵一发而动全身。
二.设计与分析
1.对题目集七 7-1,7-2 的两道题目的递进式设计分析总结:
两道题目均为图形卡片游戏,要求通过输入卡片数字,得到相应输出。
7-1:根据得到的卡片种类与数量,给出 排序前和排序后的卡片顺序,同时给出所有卡片的面积之和。
类图:

生成报表:

部分代码:
public static void main(String[] args) { Scanner in=new Scanner(System.in); int z=1; int size=0;//判断输入了多少的卡片 int shuju=0;//判断所需数据的个数 int num[]=new int[100]; for(int i=0;i<z;i++) { num[i]=in.nextInt(); z++; size++; if(num[i]==0) { z=0; } } int znum[]=new int[size]; for(int i=0;i<znum.length;i++){ znum[i]=num[i]; if(znum[i]==1) { shuju++; } if(znum[i]==2) { shuju=shuju+2; } if(znum[i]==3) { shuju=shuju+3; } if(znum[i]==4) { shuju=shuju+3; } } Circle l=new Circle(); Rectangle m= new Rectangle(); Triangle n=new Triangle(); Trapezoid t=new Trapezoid(); checkcheck o=new checkcheck(); if(!o.shapecheck2(znum)) { System.out.println("Wrong Format"); } else { int j=0; double p[]=new double[shuju]; double q[]=new double[size]; int z1=znum.length; for(int i=0;i<znum.length;i++) { //for(int j=0;j<shuju;j++) { if(znum[i]==1) { double r=in.nextDouble(); //将数据存入数组验证是否合法 p[j]=r; j++; //计算面积 l.setRadius(r); q[i]=l.getArea(); } else if(znum[i]==2) { double Length=in.nextDouble(); double Width=in.nextDouble(); //将数据存入数组验证是否合法 p[j]=Length; p[j+1]=Width; j=j+2; //计算面积 m.setLength(Length); m.setWidth(Width); q[i]=m.getArea(); } else if(znum[i]==3) { double s1=in.nextDouble(); double s2=in.nextDouble(); double s3=in.nextDouble(); //将数据存入数组验证是否合法 p[j]=s1; p[j+1]=s2; p[j+2]=s3; j=j+3; //计算面积 if(n.check(s1,s2,s3)) n.seta(s1); n.setb(s2); n.setc(s3); q[i]=n.getArea(); } else if(znum[i]==4) { double sd=in.nextDouble(); double xd=in.nextDouble(); double g=in.nextDouble(); //将数据存入数组验证是否合法 p[j]=sd; p[j+1]=xd; p[j+2]=g; j=j+3; //计算面积 t.setsd(sd); t.setxd(xd); t.setg(g); q[i]=t.getArea(); } //} } if(!o.shapecheck1(p)||q.length<znum.length) { System.out.println("Wrong Format"); } else { System.out.println("The original list:"); for(int i=0;i<znum.length;i++) { /*计算圆的面积*/ if(znum[i]==1) { System.out.printf("Circle:%.2f ",q[i]); } else if(znum[i]==2) { System.out.printf("Rectangle:%.2f ",q[i]); } else if(znum[i]==3) { System.out.printf("Triangle:%.2f ", q[i]); } else if(znum[i]==4) { System.out.printf("Trapezoid:%.2f ", q[i]); } } System.out.println(); System.out.println("The sorted list:"); double temp; int temp1; for(int i=0;i<q.length;i++)/*冒泡排序*/ { for(int j1=1;j1<q.length-i;j1++) { if(q[j1]>q[j1-1]) { temp=q[j1]; q[j1]=q[j1-1]; q[j1-1]=temp; temp1=znum[j1]; znum[j1]=znum[j1-1]; znum[j1-1]=temp1; } } } for (int h = 0; h < q.length ; h++) { if(znum[h]==1) { System.out.printf("Circle:%.2f ",q[h]); } if(znum[h]==2) { System.out.printf("Rectangle:%.2f ",q[h]); } if(znum[h]==3) { System.out.printf("Triangle:%.2f ",q[h]); } if(znum[h]==4) { System.out.printf("Trapezoid:%.2f ",q[h]); } } System.out.println(); System.out.print("Sum of area:");/*计算总面积*/ double sum=0; for(int j1=0;j1<q.length;j1++) { sum=sum+q[j1]; if(j1==q.length-1) System.out.printf("%.2f",sum); } } } } }
本题要求通过多态的方法完成对图形卡片面积的排序求解,首先根据题目要求创建一个public类(Main),再分别创建六个类(Shape,Circle,Rectangle,Triangle,Trapezoid,checkcheck)使得Circle,Rectangle,Triangle,Trapezoid类继承自Shape类,即class Circle extends Shape,class Rectangle extends Shape,class Triangle extends Shape,class Trapezoid extends Shape完成四种不同图形面积的计算,在主类中运用多态调用相关的方法,将数据存入数组中,通过checkcheck类进行数据的检测,再进行数组中数据的冒泡排序,完成题目所需的要求,本题需要通过运用多态的思想,并运用继承实现代码的重复使用,难度较易,通过这道题,我理解了多态方法的使用。
7-2:在7-1的基础上进一步提高要求:对各图形信息进行输入并输出; 输入数据的正确性校验; 对输入的图形按照图形类型进行分组并输出; 对每组内的图形按照面积值降序排序并输出; 求出每组内图形面积的总和; 求出所有组的面积总和的最大值并输出。
类图:

生产报表:

部分代码:
public static void main(String[] args) { Scanner in=new Scanner(System.in); int z=1; int size=0;//判断输入了多少的卡片 int circle=0; int rectangle=0; int triangle=0; int trapezoid=0; double sum1=0; double sum2=0; double sum3=0; double sum4=0; int num[]=new int[100]; for(int i=0;i<z;i++) { num[i]=in.nextInt(); z++; size++; if(num[i]==0) { z=0; } } int znum[]=new int[size]; for(int i=0;i<znum.length;i++) { znum[i]=num[i]; if(znum[i]==1) { circle++; } if(znum[i]==2) { rectangle++; } if(znum[i]==3) { triangle++; } if(znum[i]==4) { trapezoid++; } } double cir[]=new double[circle]; double rec[]=new double[rectangle]; double tri[]=new double[triangle]; double tra[]=new double[trapezoid]; Circle l=new Circle(); Rectangle m= new Rectangle(); Triangle n=new Triangle(); Trapezoid t=new Trapezoid(); checkcheck o=new checkcheck(); if(!o.shapecheck2(znum)) { System.out.println("Wrong Format"); } else { int j=0; int c1=0; int r1=0; int t1=0; int t2=0; double q[]=new double[size]; for(int i=0;i<znum.length;i++) { if(znum[i]==1) { double r=in.nextDouble(); //将数据存入数组验证是否合法 j++; //计算面积 l.setRadius(r); q[i]=l.getArea(); cir[c1]=l.getArea(); sum1=sum1+l.getArea(); c1++; } else if(znum[i]==2) { double Length=in.nextDouble(); double Width=in.nextDouble(); //将数据存入数组验证是否合法 j=j+2; //计算面积 m.setLength(Length); m.setWidth(Width); q[i]=m.getArea(); rec[r1]=m.getArea(); sum2=sum2+m.getArea(); r1++; } else if(znum[i]==3) { double s1=in.nextDouble(); double s2=in.nextDouble(); double s3=in.nextDouble(); //将数据存入数组验证是否合法 j=j+3; //计算面积 //if(n.check(s1,s2,s3)) n.seta(s1); n.setb(s2); n.setc(s3); q[i]=n.getArea(); tri[t1]=n.getArea(); sum3=sum3+n.getArea(); t1++; } else if(znum[i]==4) { double sd=in.nextDouble(); double xd=in.nextDouble(); double g=in.nextDouble(); //将数据存入数组验证是否合法 j=j+3; //计算面积 t.setsd(sd); t.setxd(xd); t.setg(g); q[i]=t.getArea(); tra[t2]=t.getArea(); t2++; sum4=sum4+t.getArea(); } } System.out.println("The original list:"); System.out.print("["); for(int i=0;i<znum.length;i++) { /*计算圆的面积*/ if(znum[i]==1) { System.out.printf("Circle:%.2f ",q[i]); } else if(znum[i]==2) { System.out.printf("Rectangle:%.2f ",q[i]); } else if(znum[i]==3) { System.out.printf("Triangle:%.2f ", q[i]); } else if(znum[i]==4) { System.out.printf("Trapezoid:%.2f ", q[i]); } } System.out.print("]"); System.out.println(); //分类表示面积 System.out.println("The Separated List:"); System.out.print("["); for(int i=0;i<circle;i++) { System.out.printf("Circle:%.2f ",cir[i]); } System.out.print("]"); System.out.print("["); for(int i=0;i<rectangle;i++) { System.out.printf("Rectangle:%.2f ",rec[i]); } System.out.print("]"); System.out.print("["); for(int i=0;i<triangle;i++) { System.out.printf("Triangle:%.2f ",tri[i]); } System.out.print("]"); System.out.print("["); for(int i=0;i<trapezoid;i++) { System.out.printf("Trapezoid:%.2f ",tra[i]); } System.out.print("]"); System.out.println(); System.out.println("The Separated sorted List:"); double temp; int temp1; for(int i=0;i<cir.length;i++)/*冒泡排序*/ { for(int j1=1;j1<cir.length-i;j1++) { if(cir[j1]>cir[j1-1]) { temp=cir[j1]; cir[j1]=cir[j1-1]; cir[j1-1]=temp; } } } System.out.print("["); for (int h = 0; h < cir.length ; h++) { System.out.printf("Circle:%.2f ",cir[h]); } System.out.print("]"); for(int i=0;i<rec.length;i++)/*冒泡排序*/ { for(int j1=1;j1<rec.length-i;j1++) { if(rec[j1]>rec[j1-1]) { temp=rec[j1]; rec[j1]=rec[j1-1]; rec[j1-1]=temp; } } } System.out.print("["); for (int h = 0; h < rec.length ; h++) { System.out.printf("Rectangle:%.2f ",rec[h]); } System.out.print("]"); for(int i=0;i<tri.length;i++)/*冒泡排序*/ { for(int j1=1;j1<tri.length-i;j1++) { if(tri[j1]>tri[j1-1]) { temp=tri[j1]; tri[j1]=tri[j1-1]; tri[j1-1]=temp; } } } System.out.print("["); for (int h = 0; h < tri.length ; h++) { System.out.printf("Triangle:%.2f ",tri[h]); } System.out.print("]"); for(int i=0;i<tra.length;i++)/*冒泡排序*/ { for(int j1=1;j1<tra.length-i;j1++) { if(tra[j1]>tra[j1-1]) { temp=tra[j1]; tra[j1]=tra[j1-1]; tra[j1-1]=temp; } } } System.out.print("["); for (int h = 0; h < tra.length ; h++) { System.out.printf("Trapezoid:%.2f ",tra[h]); } System.out.print("]"); System.out.println(); System.out.print("The max area:");/*计算总面积*/ if(sum1>sum2&&sum1>sum3&&sum1>sum4) { System.out.printf("%.2f",sum1); } else if(sum2>sum1&&sum2>sum3&&sum2>sum4) { System.out.printf("%.2f",sum2); } else if(sum3>sum1&&sum3>sum2&&sum3>sum4) { System.out.printf("%.2f",sum3); } else { System.out.printf("%.2f",sum4); } } } }
本题要求通过多态的方法完成对图形卡片面积的排序求解,首先根据题目要求创建一个public类(Main),再分别创建六个类(Shape,Circle,Rectangle,Triangle,Trapezoid,checkcheck)使得Circle,Rectangle,Triangle,Trapezoid类继承自Shape类,即class Circle extends Shape,class Rectangle extends Shape,class Triangle extends Shape,class Trapezoid extends Shape完成四种不同图形面积的计算,checkcheck类同样进行数据的检测,以上步骤与题目7-1基本相同,这道题目的不同之处主要在于其对图形的分组,以及不同格式类型的输出,在主类中运用多态调用相关的方法,将数据存入数组中,在这个环节我设置了多个不同的数组以及循环,将多种数据进行储存排序以完成题目所需的要求,本题需要通过运用多态的思想,并通过多态实现代码的重复使用,难度较易,通过这道题,我理解了多态方法的使用。
这两道题目之间存在着递进关系,通过接口的使用,可以巧妙实现与多重继承相似的功能,但是我没能更加深入地探究这两道题之间的联系,仅仅是通过设置更多的数组和循环,以一种很笨的方式完成了题目的要求,在以后的学习中,我会更加注重用更加好的方法写程序,减少代码的重复使用以及维护难度。
题目集8和题目集9两道ATM仿真题目的设计思路分析总结
题目集8:要求实现基础数据的初始化,用户存款、取款及查询余额功能。
类图:

生产报表:

部分代码:
public static void main(String[] args) { Scanner input = new Scanner(System.in); String c[]={"6217000010041315709","6217000010041315715","6217000010041315718", "6217000010051320007","6222081502001312389","6222081502001312390", "6222081502001312399","6222081502001312400","6222081502051320785","6222081502051320786"}; String mima[]={"88888888"}; String num[]={"01","02","03","04","05","06"}; String fu[]={"#"}; String str = input.nextLine(); String[] strs=str.split("\\s+|\\n+|\\t+|\\r+"); String str2 = input.nextLine(); // System.out.println(str2); Withdraw withdraw=new Withdraw(); for(int i=0;i<strs.length;i=i+4){ if(strs[i].equals(c[0])||strs[i].equals(c[1])){ if(strs.length!=1&&strs[i+1].equals(mima[0])){ if(strs[i+2].equals(num[0])||strs[i+2].equals(num[1])||strs[i+2].equals(num[2])||strs[i+2].equals(num[3])){ if(withdraw.isNumeric(strs[i+3])){ double money=Double.parseDouble(strs[i+3]); double money1=withdraw.draw(money); if(str2.equals(fu[0])&&money>0&&money1>0){ System.out.printf("杨过在中国建设银行的%s号ATM机上取款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else if(str2.equals(fu[0])&&money<0&&money1>0){ money=0-money; System.out.printf("杨过在中国建设银行的%s号ATM机上存款¥%.2f",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else System.out.println("Sorry,your account balance is insufficient."); } } else if(strs[i+2].equals(num[4])||strs[i+2].equals(num[5])) System.out.println("Sorry,cross-bank withdrawal is not supported."); else System.out.println("Sorry,the ATM's id is wrong."); } else if(strs.length==1&&str2.equals(fu[0])){ System.out.printf("¥10000.00"); } else System.out.println("Sorry,your password is wrong."); } else if(strs[i].equals(c[2])){ if(strs.length!=1&&strs[i+1].equals(mima[0])){ if(strs[i+2].equals(num[0])||strs[i+2].equals(num[1])||strs[i+2].equals(num[2])||strs[i+2].equals(num[3])){ if(withdraw.isNumeric(strs[i+3])){ double money=Double.parseDouble(strs[i+3]); double money1=withdraw.draw(money); if(str2.equals(fu[0])&&money>0&&money1>0){ System.out.printf("杨过在中国建设银行的%s号ATM机上取款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else if(str2.equals(fu[0])&&money<0&&money1>0){ money=0-money; System.out.printf("杨过在中国建设银行的%s号ATM机上存款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else System.out.println("Sorry,your account balance is insufficient."); } } else if(strs[i+2].equals(num[4])||strs[i+2].equals(num[5])) System.out.println("Sorry,cross-bank withdrawal is not supported."); else System.out.println("Sorry,the ATM's id is wrong."); } else if(strs.length==1&&str2.equals(fu[0])){ System.out.printf("¥10000.00"); } else System.out.println("Sorry,your password is wrong."); } else if(strs[i].equals(c[3])){ if(strs.length!=1&&strs[i+1].equals(mima[0])){ if(strs[i+2].equals(num[0])||strs[i+2].equals(num[1])||strs[i+2].equals(num[2])||strs[i+2].equals(num[3])){ if(withdraw.isNumeric(strs[i+3])){ double money=Double.parseDouble(strs[i+3]); double money1=withdraw.draw(money); if(str2.equals(fu[0])&&money>0&&money1>0){ System.out.printf("郭靖在中国建设银行的%s号ATM机上取款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else if(str2.equals(fu[0])&&money<0&&money1>0&&money1>0){ money=0-money; System.out.printf("郭靖在中国建设银行的%s号ATM机上存款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else System.out.println("Sorry,your account balance is insufficient."); } } else if(strs[i+2].equals(num[4])||strs[i+2].equals(num[5])) System.out.println("Sorry,cross-bank withdrawal is not supported."); else System.out.println("Sorry,the ATM's id is wrong."); } else if(strs.length==1&&str2.equals(fu[0])){ System.out.printf("¥10000.00"); } else System.out.println("Sorry,your password is wrong."); } else if(strs[i].equals(c[4])||strs[i].equals(c[5])||strs[i].equals(c[6])||strs[i].equals(c[7])){ if(strs.length!=1&&strs[i+1].equals(mima[0])){ if(strs[i+2].equals(num[4])||strs[i+2].equals(num[5])){ if(withdraw.isNumeric(strs[i+3])){ double money=Double.parseDouble(strs[i+3]); double money1=withdraw.draw(money); if(str2.equals(fu[0])&&money>0&&money1>0){ System.out.printf("张无忌在中国工商银行的%s号ATM机上取款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else if(str2.equals(fu[0])&&money<0&&money1>0){ money=0-money; System.out.printf("张无忌在中国工商银行的%s号ATM机上存款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else System.out.println("Sorry,your account balance is insufficient."); } } else if(strs[i+2].equals(num[0])||strs[i+2].equals(num[1])||strs[i+2].equals(num[2])||strs[i+2].equals(num[3])) System.out.println("Sorry,cross-bank withdrawal is not supported."); else System.out.println("Sorry,the ATM's id is wrong."); } else if(strs.length==1&&str2.equals(fu[0])){ System.out.printf("¥10000.00"); } else System.out.println("Sorry,your password is wrong."); } else if(strs[i].equals(c[8])||strs[i].equals(c[9])){ if(strs.length!=1&&strs[i+1].equals(mima[0])){ if(strs[i+2].equals(num[4])||strs[i+2].equals(num[5])){ if(withdraw.isNumeric(strs[i+3])){ double money=Double.parseDouble(strs[i+3]); double money1=withdraw.draw(money); if(str2.equals(fu[0])&&money>0&&money1>0){ System.out.printf("韦小宝在中国工商银行的%s号ATM机上取款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else if(str2.equals(fu[0])&&money<0&&money1>0){ money=0-money; System.out.printf("韦小宝在中国工商银行的%s号ATM机上存款¥%.2f\n",strs[i+2],money); System.out.printf("当前余额为¥%.2f",money1); } else System.out.println("Sorry,your account balance is insufficient."); } } else if(strs[i+2].equals(num[0])||strs[i+2].equals(num[1])||strs[i+2].equals(num[2])||strs[i+2].equals(num[3])) System.out.println("Sorry,cross-bank withdrawal is not supported."); else System.out.println("Sorry,the ATM's id is wrong."); } else if(strs.length==1&&str2.equals(fu[0])){ System.out.printf("¥10000.00"); } else System.out.println("Sorry,your password is wrong."); } else System.out.println("Sorry,this card does not exist."); } } }
本题要求设计一个银行的ATM机模拟程序,在进行这道题目的编码时,我没能理解多个实体类的使用方法,只使用了两个类,一个public类(Main),一个withdraw类,在withdraw类中通过正则表达式Matcher,Pattern完成对字符串的匹配,以实现存款与取款的功能,通过Main类中通过字符串数组储存输入的语句,在通过if else的方法完成对相应字符的匹配,以实现存取款和查询余额的功能,这道题我使用的方法太过呆板,没能灵活地使用类与类的关系,本题需要通过运用多态的思想,实现类与类的关联,聚合,调用,难度适中。
题目集9:在题目集8的基础上要求进一步实现跨行取款,手续费的计算,以及贷记卡的透支计算。
类图:

生成报表:

部分代码:
public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); UnionPay unionPay = new UnionPay(); Bank ccb = new Bank("1001","中国建设银行"); Bank icbc = new Bank("1002","中国工商银行"); Bank nyyh = new Bank("1003","中国农业银行"); unionPay.addBank(ccb); unionPay.addBank(icbc); unionPay.addBank(nyyh); ATM aTM1 = new ATM("01",ccb); ATM aTM2 = new ATM("02",ccb); ATM aTM3 = new ATM("03",ccb); ATM aTM4 = new ATM("04",ccb); ATM aTM5 = new ATM("05",icbc); ATM aTM6 = new ATM("06",icbc); ATM aTM7 = new ATM("07",nyyh); ATM aTM8 = new ATM("08",nyyh); ATM aTM9 = new ATM("09",nyyh); ATM aTM10 = new ATM("010",nyyh); ATM aTM11 = new ATM("011",nyyh); ccb.addATM(aTM1); ccb.addATM(aTM2); ccb.addATM(aTM3); ccb.addATM(aTM4); icbc.addATM(aTM5); icbc.addATM(aTM6); nyyh.addATM(aTM7); nyyh.addATM(aTM8); nyyh.addATM(aTM9); nyyh.addATM(aTM10); nyyh.addATM(aTM11); User Yangguo = new User("360101200102122324","杨过","13856223254"); User Guojing = new User("360101200012302552","郭靖","13800021124"); User Zhangwuji = new User("360502199805163221","张无忌","13952110011"); User Weixiaobao = new User("360201200513243326","韦小宝","13025996587"); User Zhangsanfeng = new User("3640000010045442002","张三丰","13025996587"); User Linghuchong = new User("3640000010045441009","令狐冲","13025996587"); User Qiaofeng = new User("3630000010033431001","乔峰","13025996587"); User Hongqigong = new User("3630000010033431008","洪七公","13025996587"); Account ccbAcc1 = new Account("3217000010041315709",10000.00,Yangguo,ccb); Account ccbAcc2 = new Account("3217000010041315715",10000.00,Yangguo,ccb); Account ccbAcc3 = new Account("3217000010051320007",10000.00,Guojing,ccb); Account ccbAcc4 = new Account("3640000010045442002",10000.00,Zhangsanfeng,ccb); Account icbcAcc1 = new Account("3222081502001312389",10000.00,Zhangwuji,icbc); Account icbcAcc2 = new Account("3222081502001312390",10000.00,Zhangwuji,icbc); Account icbcAcc3 = new Account("3222081502001312399",10000.00,Zhangwuji,icbc); Account icbcAcc4 = new Account("3222081502051320785",10000.00,Weixiaobao,icbc); Account icbcAcc5 = new Account("3222081502051320786",10000.00,Weixiaobao,icbc); Account icbcAcc6 = new Account("3640000010045441009",10000.00,Linghuchong,icbc); Account nyyhAcc1 = new Account("3630000010033431001",10000.00,Qiaofeng,nyyh); Account nyyhAcc2 = new Account("3630000010033431008",10000.00,Hongqigong,nyyh); ccb.addAccount(ccbAcc1); ccb.addAccount(ccbAcc2); ccb.addAccount(ccbAcc3); ccb.addAccount(ccbAcc4); icbc.addAccount(icbcAcc1); icbc.addAccount(icbcAcc2); icbc.addAccount(icbcAcc3); icbc.addAccount(icbcAcc4); icbc.addAccount(icbcAcc5); icbc.addAccount(icbcAcc6); nyyh.addAccount(nyyhAcc1); nyyh.addAccount(nyyhAcc2); Yangguo.addAccount(ccbAcc1); Yangguo.addAccount(ccbAcc2); Guojing.addAccount(ccbAcc3); Zhangsanfeng.addAccount(ccbAcc4); Zhangwuji.addAccount(icbcAcc1); Zhangwuji.addAccount(icbcAcc2); Zhangwuji.addAccount(icbcAcc3); Weixiaobao.addAccount(icbcAcc4); Weixiaobao.addAccount(icbcAcc5); Linghuchong.addAccount(icbcAcc6); Qiaofeng.addAccount(nyyhAcc1); Hongqigong.addAccount(nyyhAcc2); Card ccbCard1 = new Card("6217000010041315709","88888888",ccbAcc1); Card ccbCard2 = new Card("6217000010041315715","88888888",ccbAcc1); Card ccbCard3 = new Card("6217000010041315718","88888888",ccbAcc2); Card ccbCard4 = new Card("6217000010051320007","88888888",ccbAcc3); Card icbcCard5 = new Card("6222081502001312389","88888888",icbcAcc1); Card icbcCard6 = new Card("6222081502001312390","88888888",icbcAcc2); Card icbcCard7 = new Card("6222081502001312399","88888888",icbcAcc3); Card icbcCard8 = new Card("6222081502001312400","88888888",icbcAcc3); Card icbcCard9 = new Card("6222081502051320785","88888888",icbcAcc4); Card icbcCard10 = new Card("6222081502051320786","88888888",icbcAcc5); Card ccbCard11 = new Card("6640000010045442002","88888888",ccbAcc4); Card ccbCard12 = new Card("6640000010045442003","88888888",ccbAcc4); Card icbcCard13 = new Card("6640000010045441009","88888888",icbcAcc6); Card nyyhCard14 = new Card("6630000010033431001","88888888",nyyhAcc1); Card nyyhCard15 = new Card("6630000010033431008","88888888",nyyhAcc2); ccbAcc1.addCard(ccbCard1); ccbAcc1.addCard(ccbCard2); ccbAcc2.addCard(ccbCard3); ccbAcc3.addCard(ccbCard4); ccbAcc4.addCard(ccbCard11); ccbAcc4.addCard(ccbCard12); icbcAcc1.addCard(icbcCard5); icbcAcc2.addCard(icbcCard6); icbcAcc3.addCard(icbcCard7); icbcAcc3.addCard(icbcCard8); icbcAcc4.addCard(icbcCard9); icbcAcc5.addCard(icbcCard10); icbcAcc6.addCard(icbcCard13); nyyhAcc1.addCard(nyyhCard14); nyyhAcc2.addCard(nyyhCard15); StringBuilder sb = new StringBuilder(); String data; while(!((data = input.nextLine()).equals("#"))) { sb.append(data + "\n"); } String[] dt = sb.toString().split("\n"); for(int i = 0; i < dt.length; i++) { String[] dataLine = dt[i].toString().split("\\s+"); if(dataLine.length == 1) { GetBalance gb = new GetBalance(unionPay); System.out.println(String.format("¥%.2f", gb.getBalance(dataLine[0]))); }else { Withdraw wd = new Withdraw(unionPay,dataLine[0],dataLine[1],dataLine[2],Double.parseDouble(dataLine[3])); wd.withdraw(); } } } }
本题要求实现ATM机系统的更多功能,参考老师给出的8-1的代码,我进行了相关功能的调整,设计一个public类(Main),和九个类(Bank,User,Account,Card,ATM,Withdraw,ValidateData,UnionPay,GetBalance),在Bank类中实现对银行序号和名称的封装以及与Account类的关联,在User类中实现对用户信息的封装并将信息储存在ArrayList数组中,在Account类中实现对账户的封装,在Card类中实现对卡号和密码的封装,在ATM类中实现对ATM信息的封装,在Withdraw类中实现存款,取款,查询余额的功能,在ValidateData中进行信息正确性的检测,最后通过Main类进行调用赋值,完成题目所需的要求,本题需要通过运用多态的思想,通过类与类之间的关联相互调用,难度较大。
三、采坑心得
在完成题目集8的过程中,一开始没有想到运用正则表达式进行字符串的匹配,导致开始时浪费了很多时间。
在这两次的作业当中存在着许多的不足之处,我在进行程序的编写时,没能完全按照实验指导书所要求的内容进行,有一部分的代码仅仅是为过测试点而设计的,在这方面我还需要做很多的改进。
在编写代码的过程,我没有及时将所遇到的问题记录下来,在这一点上我做的仍然不够,我应该及时记录问题以及它的解决方法,在以后的学习中不断进行分析总结,以得到进一步提升。
四,改进建议
根据对生成报表的分析,发现部分代码过于杂糅,我对多态的理解仍然不够,不能灵活地进行类与类之间关系的调用,if语句使用过多,运行效率较慢, 可对代码进一步修改。
在设计ATM模拟系统时,有部分功能仍然无法按照要求实现,部分代码的逻辑性也有待提高。
五.总结
本阶段的三次题目集是将我们使我们能够用Java语言写出简单的模拟小程序,通过题目集七的练习,我掌握了Java语言的关联,继承,多态,接口等基本方法,通过题目集八和九,我的Java语言逻辑性有了很大的提升,在以后的学习中我会更加注重逻辑性与严谨性的培养,在写程序时也会考虑它的复杂性与维护难度,通过代码的不断调整,让整个程序变得更好。

浙公网安备 33010602011771号