题目集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语言逻辑性有了很大的提升,在以后的学习中我会更加注重逻辑性与严谨性的培养,在写程序时也会考虑它的复杂性与维护难度,通过代码的不断调整,让整个程序变得更好。

 

posted @ 2021-06-20 21:34  20201601  阅读(44)  评论(0)    收藏  举报