20201709-黄世洋 七八九次作业总结

 

一、前言:

一、前言

        本次作业主要是针对Java在PTA上的最后三次的作业进行总结,总结三次作业中所遇见的知识点以及难点总结,以及在Java编程中经常所犯的错误,诉说这次的踩坑心得。

先简单介绍这三次作业中的相关知识点:

1、第七次作业分析:

题量:2

知识点:
7-1:图形卡片的排序,考察类的继承、多态性使用方法以及接口的应用。
7-2:图形卡片的分组,在7-1的基础上更加深入的考察了类的继承多态性使用方法以及接口的应用。


2、第八次作业分析:

题量:1
8-1:ATM机类结构设计,考察类的设计以及类与类之间的关系

3、第九次作业分析:

题量:1

9-1:ATM机类结构设计,考察类的设计以及类与类之间的关系,难度加大。

总分析:

 三次作业的题量虽少,但是总体设计比较大,第七次作业的两题,第一题是第二题的基础,第二题在第一题的基础上难度更加大。第九次的作业是在第八次的作业的基础上难度加大,设计更加复杂,同时这两次的作业都是在进行比较,这样在比较中,就能体会到,类的设计之间的关系,明白类与类之间的关系。通过这几三次的作业,我更加深刻的感受到了,编程时类与类之间的关系,这种关系是在设计中非常重要的,常常关系到乘客代码的复杂度。在编程设计的到过程中,我也在思考如何使代码变得更加简洁,更加高效。

二、设计与分析:

1、题目集7中7-1与7-2的思路及比较:

a、7-1具体思路以及问题:

具体类图设计:

 

源代码:

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] Args){
    Scanner input = new Scanner(System.in);
    ArrayList <Figure> figures = new ArrayList<>();
    int i = 5;
    int k;
    while (i!=0)
       {
        i = input.nextInt();
        switch (i){
            case 0:
                break;
            case 1:
                Figure c = new Circle();
                figures.add(c);
                break;
            case 2:
                Figure r = new Rectangle();
                figures.add(r);
                break;
            case 3:
                Figure t1 = new Triangle();
                figures.add(t1);
                break;
            case 4:
                Figure t2 = new Trapezoid();
                figures.add(t2);
                break;
            default:
                System.out.println("Wrong Format");
        }
    }
    for (k = 0;k<figures.size();k++)
    {
        if (figures.get(k) instanceof Circle )
        {
            double radius = input.nextDouble();
            ((Circle) figures.get(k)).setRadius(radius);
        }
        if (figures.get(k) instanceof Rectangle)
        {
            double l = input.nextDouble();
            double w = input.nextDouble();
            ((Rectangle) figures.get(k)).setLength(l);
            ((Rectangle) figures.get(k)).setWidth(w);
        }
        if (figures.get(k) instanceof Triangle)
        {
            double s1 = input.nextDouble();
            double s2 = input.nextDouble();
            double s3 = input.nextDouble();
            ((Triangle) figures.get(k)).setSide1(s1);
            ((Triangle) figures.get(k)).setSide2(s2);
            ((Triangle) figures.get(k)).setSide3(s3);
        }
        if (figures.get(k) instanceof Trapezoid)
        {
            double us = input.nextDouble();
            double ds = input.nextDouble();
            double h = input.nextDouble();
            ((Trapezoid) figures.get(k)).setUpside(us);
            ((Trapezoid) figures.get(k)).setDowmside(ds);
            ((Trapezoid) figures.get(k)).setHeigh(h);
        }
    }
    boolean b = true;
    for (k=0;k<figures.size();k++)
    {
        if (!figures.get(k).checkvalue())
        {    b = false;
            break;}
    }
    if (!b)
        System.out.println("Wrong Format");
    else {
        Figure[] figures1 = new Figure[figures.size()];
        figures.toArray(figures1);
        Arrays.sort(figures1);
        System.out.println("The original list:");
        for (k = 0; k < figures.size(); k++) {
            System.out.print(figures.get(k).toString() + " ");
        }
        System.out.println("\nThe sorted list:");
         for (k = figures1.length-1; k>=0; k--) {
            System.out.print(figures1[k].toString() + " ");
        }
        double sum = 0;
        for (k = 0; k < figures.size(); k++) {
            sum = sum + figures.get(k).getArea();
        }
        System.out.print("\nSum of area:");
        System.out.printf("%.2f", sum);
    }

}
}
abstract class Figure  implements Comparable<Figure>{
    public abstract double getArea();
    public abstract boolean checkvalue();
    @Override
    public int compareTo(Figure o) {
        if (this.getArea()>o.getArea())
            return 1;
        else if (this.getArea()<o.getArea())
            return -1;
        else
            return 0;
    }
}
class Circle extends Figure{
    private double radius;
    Circle(){}
    Circle(double radius){
    this.radius = radius;
    }
    public void setRadius(double radius) {
        this.radius = radius;
    }
    public double getRadius() {
        return radius;
    }
    @Override
    public double getArea() {
        return Math.PI*getRadius()*getRadius();
    }

    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Circle:"+str;
    }

    @Override
    public boolean checkvalue() {
        if (this.getRadius()<0)
            return false;
        else
            return true;
    }
}
class Rectangle extends Figure{
    private double length;
    private double width;
Rectangle(){

}
Rectangle(double length,double width){
    setLength(length);
    setWidth(width);
}
    public void setWidth(double width) {
        this.width = width;
    }

    public double getWidth() {
        return width;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getLength() {
        return length;
    }

    @Override
    public double getArea() {
        return getLength()*getWidth();
    }
    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Rectangle:"+str;
    }

    @Override
    public boolean checkvalue() {
        if (this.getLength()<0||this.getWidth()<0)
            return false;
        else
            return true;
    }
}
class Triangle extends Figure{
    private double side1;
    private double side2;
    private double side3;

    Triangle(){

    }
    Triangle(double side1,double side2,double side3){
        setSide1(side1);
        setSide2(side2);
        setSide3(side3);
    }

    public double getSide1() {
        return side1;
    }

    public double getSide2() {
        return side2;
    }

    public double getSide3() {
        return side3;
    }

    public void setSide1(double side1) {
        this.side1 = side1;
    }

    public void setSide2(double side2) {
        this.side2 = side2;
    }

    public void setSide3(double side3) {
        this.side3 = side3;
    }

    @Override
    public double getArea() {
        double p  = (this.getSide1()+this.getSide2()+this.getSide3())/2;
        double area = Math.sqrt(p*(p-this.getSide1())*(p-this.getSide2())*(p-this.getSide3()));
        return area;
    }
    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Triangle:"+str;
    }

    @Override
    public boolean checkvalue() {
        if (this.getSide1()<0||this.getSide2()<0||this.getSide3()<0)
            return false;
        else
        if (this.getSide1()+this.getSide2()>this.getSide3()&&this.getSide1()+this.getSide3()>this.getSide2()&&this.getSide2()+this.getSide3()>this.getSide1())
            return true;
        else
            return false;
    }
}
class Trapezoid extends Figure{
    private double upside;
    private double dowmside;
    private double heigh;

    public void setHeigh(double heigh) {
        this.heigh = heigh;
    }

    public double getHeigh() {
        return heigh;
    }

    public double getDowmside() {
        return dowmside;
    }

    public double getUpside() {
        return upside;
    }

    public void setDowmside(double dowmside) {
        this.dowmside = dowmside;
    }

    public void setUpside(double upside) {
        this.upside = upside;
    }
    Trapezoid(){

    }
    Trapezoid(double upside,double dowmside){
        setUpside(upside);
        setDowmside(dowmside);
    }

    @Override
    public double getArea() {
        return (this.getUpside()+this.getDowmside())*this.getHeigh()/2;
    }
    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Trapezoid:"+str;
    }

    @Override
    public boolean checkvalue() {
        if (this.getHeigh()<0||this.getDowmside()<0||this.getUpside()<0)
            return false;
        else
            return true;
    }
}

说明:

每一种图形都有一个父类,也就是Shape类,每一个图形都是继承于这个类,里边那种有通用的,获得面积的抽象方法,在它的子类中具体实现,然后,Card类和图形类有关联,也就是每一种卡片都有属于它自己的图形。然后最后一个类,卡片列表类里边集中了这次游戏的所有卡片,在这个类里面可以实现对各种卡片的分类,以及它们面积大小的比较。

做题中遇到的问题:

在做题中遇到的最大问题就是对象和类的相关问题,类的构造方法以及类中方法和类中私有属性的调用问题,以及字符的处理,就是数字转成字符串之间的处理。

解决方法:

查阅书籍后得知,自定义构造方法中如果涉及自定义类需在这个构造方法中new出一个新的另一个类并给它赋值,上网查阅之后用了import java.text.DecimalFormat解决了这个问题。

b、题目集7中7-2题的思路:

具体类的设计:

 

源代码:

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Main {
    public static void main(String[] Args){
        Scanner input = new Scanner(System.in);
        ArrayList <Figure> figures = new ArrayList<>();
        int i = 5;
        int k=0;
        while (i!=0)
        {
            k++;
            i = input.nextInt();
            switch (i){
                case 0:
                    break;
                case 1:
                    Figure c = new Circle();
                    figures.add(c);
                    break;
                case 2:
                    Figure r = new Rectangle();
                    figures.add(r);
                    break;
                case 3:
                    Figure t1 = new Triangle();
                    figures.add(t1);
                    break;
                case 4:
                    Figure t2 = new Trapezoid();
                    figures.add(t2);
                    break;
                default:
                    System.out.println("Wrong Format");
            }
        }
        if (k==1&&figures.size()==0)
        {
            System.out.println("Wrong Format");
            System.exit(0);
        }
        ArrayList<Circle> circles = new ArrayList<>();
        ArrayList<Rectangle> rectangles = new ArrayList<>();
        ArrayList<Triangle> triangles = new ArrayList<>();
        ArrayList<Trapezoid> trapezoids = new ArrayList<>();
        for (k = 0;k<figures.size();k++)
        {
            if (figures.get(k) instanceof Circle )
            {
                double radius = input.nextDouble();
                ((Circle) figures.get(k)).setRadius(radius);
                circles.add((Circle) figures.get(k));
            }
            if (figures.get(k) instanceof Rectangle)
            {
                double l = input.nextDouble();
                double w = input.nextDouble();
                ((Rectangle) figures.get(k)).setLength(l);
                ((Rectangle) figures.get(k)).setWidth(w);
                rectangles.add((Rectangle) figures.get(k));
            }
            if (figures.get(k) instanceof Triangle)
            {
                double s1 = input.nextDouble();
                double s2 = input.nextDouble();
                double s3 = input.nextDouble();
                ((Triangle) figures.get(k)).setSide1(s1);
                ((Triangle) figures.get(k)).setSide2(s2);
                ((Triangle) figures.get(k)).setSide3(s3);
                triangles.add((Triangle) figures.get(k));
            }
            if (figures.get(k) instanceof Trapezoid)
            {
                double us = input.nextDouble();
                double ds = input.nextDouble();
                double h = input.nextDouble();
                ((Trapezoid) figures.get(k)).setUpside(us);
                ((Trapezoid) figures.get(k)).setDowmside(ds);
                ((Trapezoid) figures.get(k)).setHeigh(h);
                trapezoids.add((Trapezoid) figures.get(k));
            }
        }
        boolean b = true;
        for (k=0;k<figures.size();k++)
        {
            if (!figures.get(k).checkvalue())
            {    b = false;
                break;}
        }
        if (!b)
            System.out.println("Wrong Format");
        else {
            String s1="";
            for (k=0;k<figures.size();k++)
              s1 = s1 + figures.get(k).toString();
            System.out.println("The original list:");
            System.out.println("["+s1+"]");
            String s2="";
            String s3="";
            String s4="";
            String s5="";
            for (k=0;k<circles.size();k++)
                s2=s2+circles.get(k).toString();
            for (k=0;k<rectangles.size();k++)
                s3=s3+rectangles.get(k).toString();
            for (k=0;k<triangles.size();k++)
                s4=s4+triangles.get(k).toString();
            for (k=0;k<trapezoids.size();k++)
                s5=s5+trapezoids.get(k).toString();
            System.out.println("The Separated List:");
            System.out.print("["+s2+"]");
            System.out.print("["+s3+"]");
            System.out.print("["+s4+"]");
            System.out.print("["+s5+"]");
            System.out.println("\nThe Separated sorted List:");
            Collections.sort(circles);
            Collections.sort(rectangles);
            Collections.sort(triangles);
            Collections.sort(trapezoids);
             s2="";
             s3="";
             s4="";
             s5="";
            for (k=circles.size()-1;k>=0;k--)
                s2=s2+circles.get(k).toString();
            for (k=rectangles.size()-1;k>=0;k--)
                s3=s3+rectangles.get(k).toString();
            for (k=triangles.size()-1;k>=0;k--)
                s4=s4+triangles.get(k).toString();
            for (k=trapezoids.size()-1;k>=0;k--)
                s5=s5+trapezoids.get(k).toString();
            System.out.print("["+s2+"]");
            System.out.print("["+s3+"]");
            System.out.print("["+s4+"]");
            System.out.print("["+s5+"]");
            double sum1 = 0;
            double sum2 = 0;
            double sum3 = 0;
            double sum4 = 0;
            for (Circle c:circles)
                sum1=sum1+c.getArea();
            for (Rectangle r:rectangles)
                sum2=sum2+r.getArea();
            for (Triangle t:triangles)
                sum3=sum3+t.getArea();
            for (Trapezoid t1:trapezoids)
                sum4=sum4+t1.getArea();
                System.out.print("\nThe max area:");
                double[] sum = {sum1,sum2,sum3,sum4};
                Arrays.sort(sum);
                System.out.printf("%.2f",sum[3]);
        }
    }
}
abstract class Figure  implements Comparable<Figure>{
    public abstract double getArea();
    public abstract boolean checkvalue();
    @Override
    public int compareTo(Figure o) {
        if (this.getArea()>o.getArea())
            return 1;
        else if (this.getArea()<o.getArea())
            return -1;
        else
            return 0;
    }
}
class Circle extends Figure{
    private double r;
    Circle(){}
    Circle(double r){
        this.r = r;
    }
    public void setRadius(double r) {
        this.r = r;
    }
    public double getRadius() {
        return r;
    }
    @Override
    public double getArea() {
        return Math.PI*getRadius()*getRadius();
    }
    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Circle:"+str+" ";
    }
    @Override
    public boolean checkvalue() {
        if (this.getRadius()<0)
            return false;
        else
            return true;
    }
}
class Rectangle extends Figure{
    private double l;
    private double w;
    Rectangle(){ }
    Rectangle(double l,double w){
        setLength(l);
        setWidth(w);
    }
    public void setWidth(double w) {
        this.w = w;
    }
    public double getWidth() {
        return w;
    }
    public void setLength(double l) {
        this.l = l;
    }
    public double getLength() {
        return l;
    }
    @Override
    public double getArea() {
        return getLength()*getWidth();
    }
    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Rectangle:"+str+" ";
    }
    @Override
    public boolean checkvalue() {
        if (this.getLength()<0||this.getWidth()<0)
            return false;
        else
            return true;
    }
}
class Triangle extends Figure{
    private double s1;
    private double s2;
    private double s3;
    Triangle(){ }
    Triangle(double s1,double s2,double s3){
        setSide1(s1);
        setSide2(s2);
        setSide3(s3);
    }
    public double getSide1() {
        return s1;
    }
    public double getSide2() {
        return s2;
    }
    public double getSide3() {
        return s3;
    }
    public void setSide1(double s1) {
        this.s1 = s1;
    }
    public void setSide2(double s2) {
        this.s2 = s2;
    }
    public void setSide3(double s3) {
        this.s3 = s3;
    }
    @Override
    public double getArea() {
        double p  = (this.getSide1()+this.getSide2()+this.getSide3())/2;
        return Math.sqrt(p*(p-this.getSide1())*(p-this.getSide2())*(p-this.getSide3()));
    }
    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Triangle:"+str+" ";
    }
    @Override
    public boolean checkvalue() {
        if (this.getSide1()<0||this.getSide2()<0||this.getSide3()<0)
            return false;
        else
        if (this.getSide1()+this.getSide2()>this.getSide3()&&this.getSide1()+this.getSide3()>this.getSide2()&&this.getSide2()+this.getSide3()>this.getSide1())
            return true;
        else
            return false;
    }
}
class Trapezoid extends Figure{
    private double u;
    private double d;
    private double h;
    public void setHeigh(double h) {
        this.h= h;
    }
    public double getHeigh() {
        return h;
    }
    public double getDowmside() {
        return d;
    }
    public double getUpside() {
        return u;
    }
    public void setDowmside(double d) {
        this.d = d;
    }
    public void setUpside(double u) {
        this.u = u;
    }
    Trapezoid(){ }
    Trapezoid(double u,double d){
        setUpside(u);
        setDowmside(d);
    }
    @Override
    public double getArea() {
        return (this.getUpside()+this.getDowmside())*this.getHeigh()/2;
    }
    @Override
    public String toString() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(this.getArea());
        return "Trapezoid:"+str+" ";
    }
    @Override
    public boolean checkvalue() {
        if (this.getHeigh()<0||this.getDowmside()<0||this.getUpside()<0)
            return false;
        else
            return true;
    }
}

说明:

每一种图形都有一个父类,也就是Shape类,每一个图形都是继承于这个类,里边那种有通用的,获得面积的抽象方法,在它的子类中具体实现,然后,Card类和图形类有关联,也就是每一种卡片都有属于它自己的图形。然后最后一个类,卡片列表类里边集中了这次游戏的所有卡片,在这个类里面可以实现对各种卡片的分类,以及它们面积大小的比较。这次的每个类中都有一个同一种类进行分别,排序的方法,可以对同一种类型的卡片的面积大小进行排序。

做题过程中遇到的问题:

当时遇到的问题就是那个中国号显示不出来,而且当时的事还有代码长度过长超出限制。

解决方法:

检查整体代码,把冗余的部分删除,对代码进行了整体的优化。

c、7-1、7-2两种卡片类设计的比较

        第二题是在第一题的基础上难度增加,在弟弟的基础上,多了同一种卡片类型的面积的大小排序,两个企业之间的关联是如此的密切,可以说,如果第一题做不出来,那么第二题也是一样的,同样如果你第一题做的非常顺,那么第二题也是非常的简单,这样的出题方式可以让我们更深刻的做出比较,然后认识两者之间的不同。

2、题目集8、题目集9,三种渐进式图形继承设计的思路与技术运用:

 a、题目集8设计的思路和具体技术运用:

具体类的设计:

 

源代码:

package pakage;

import java.util.ArrayList;
import java.util.Scanner;

public class Main81 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ChinaUnionPay chinaUnionPay = new ChinaUnionPay();
        Bank bank1 = new Bank("中国建设银行",0.02);
        Bank bank2 = new Bank("中国工商银行",0.03);
        Bank bank3 = new Bank("中国农业银行",0.04);
        ArrayList<Bank> bankArrayList = new ArrayList<>();
        bankArrayList.add(bank1);
        bankArrayList.add(bank2);
        bankArrayList.add(bank3);
        chinaUnionPay.setBanks(bankArrayList);
        Atm atm1 = new Atm("01");
        Atm atm2 = new Atm("02");
        Atm atm3 = new Atm("03");
        Atm atm4 = new Atm("04");
        Atm atm5 = new Atm("05");
        Atm atm6 = new Atm("06");
        Atm atm7 = new Atm("07");
        Atm atm8 = new Atm("08");
        Atm atm9 = new Atm("09");
        Atm atm10 = new Atm("10");
        Atm atm11 = new Atm("11");
        ArrayList<Atm> atmArrayList = new ArrayList<>();
        atmArrayList.add(atm1);
        atmArrayList.add(atm2);
        atmArrayList.add(atm3);
        atmArrayList.add(atm4);
        atmArrayList.add(atm5);
        atmArrayList.add(atm6);
        atmArrayList.add(atm7);
        atmArrayList.add(atm8);
        atmArrayList.add(atm9);
        atmArrayList.add(atm10);
        atmArrayList.add(atm11);
        atm1.setAtms(atmArrayList);
        atm2.setAtms(atmArrayList);
        atm3.setAtms(atmArrayList);
        atm4.setAtms(atmArrayList);
        atm5.setAtms(atmArrayList);
        atm6.setAtms(atmArrayList);
        atm7.setAtms(atmArrayList);
        atm8.setAtms(atmArrayList);
        atm9.setAtms(atmArrayList);
        atm10.setAtms(atmArrayList);
        atm11.setAtms(atmArrayList);

        ArrayList<Atm> atmArrayList1 = new ArrayList<>();
        ArrayList<Atm> atmArrayList2 = new ArrayList<>();
        ArrayList<Atm> atmArrayList3 = new ArrayList<>();

        bank1.setAinatms(atmArrayList1);
        bank2.setAinatms(atmArrayList2);
        bank3.setAinatms(atmArrayList3);
        chinaUnionPay.setAtms(atmArrayList);
        bank1.getAinatms().add(atm1);
        bank1.getAinatms().add(atm2);
        bank1.getAinatms().add(atm3);
        bank1.getAinatms().add(atm4);
        bank2.getAinatms().add(atm5);
        bank2.getAinatms().add(atm6);
        bank3.getAinatms().add(atm7);
        bank3.getAinatms().add(atm8);
        bank3.getAinatms().add(atm9);
        bank3.getAinatms().add(atm10);
        bank3.getAinatms().add(atm11);
        atm1.setFbank(bank1);
        atm2.setFbank(bank1);
        atm3.setFbank(bank1);
        atm4.setFbank(bank1);
        atm5.setFbank(bank2);
        atm6.setFbank(bank2);
        atm7.setFbank(bank3);
        atm8.setFbank(bank3);
        atm9.setFbank(bank3);
        atm10.setFbank(bank3);
        atm11.setFbank(bank3);
        User user1 = new User("杨过");
        User user2 = new User("郭靖");
        User user3 = new User("张无忌");
        User user4 = new User("韦小宝");
        User user5 = new User("张三丰");
        User user6 = new User("令狐冲");
        User user7 = new User("乔峰");
        User user8 = new User("洪七公");
        Account account1 = new Account("3217000010041315709",user1,"借记账号");
        Account account2 = new Account("3217000010041315715",user1,"借记账号");
        Account account3 = new Account("3217000010051320007",user2,"借记账号");
        Account account4 = new Account("3222081502001312389",user3,"借记账号");
        Account account5 = new Account("3222081502001312390",user3,"借记账号");
        Account account6 = new Account("3222081502001312399",user3,"借记账号");
        Account account7 = new Account("3222081502051320785",user4,"借记账号");
        Account account8 = new Account("3222081502051320786",user4,"借记账号");
        Account account9 = new Account("3640000010045442002",user5,"贷记账号");
        Account account10 = new Account("3640000010045441009",user6,"贷记账号");
        Account account11 = new Account("3630000010033431001",user7,"贷记账号");
        Account account12 = new Account("3630000010033431008",user8,"贷记账号");
        ArrayList<Account> accountArrayList1 = new ArrayList<>();
        ArrayList<Account> accountArrayList2 = new ArrayList<>();
        ArrayList<Account> accountArrayList3 = new ArrayList<>();
        accountArrayList1.add(account1);
        accountArrayList1.add(account2);
        accountArrayList1.add(account3);
        accountArrayList2.add(account4);
        accountArrayList2.add(account5);
        accountArrayList2.add(account6);
        accountArrayList2.add(account7);
        accountArrayList2.add(account8);
        accountArrayList3.add(account9);
        accountArrayList3.add(account10);
        accountArrayList3.add(account11);
        accountArrayList3.add(account12);
        bank1.setAinaccounts(accountArrayList1);
        bank2.setAinaccounts(accountArrayList2);
        bank3.setAinaccounts(accountArrayList3);
        account1.setBank(bank1);
        account2.setBank(bank1);
        account3.setBank(bank1);
        account4.setBank(bank2);
        account5.setBank(bank2);
        account6.setBank(bank2);
        account7.setBank(bank2);
        account8.setBank(bank2);
        account9.setBank(bank1);
        account10.setBank(bank2);
        account11.setBank(bank3);
        account12.setBank(bank3);
        user1.getAccounts().add(account1);
        user1.getAccounts().add(account2);
        user2.getAccounts().add(account3);
        user3.getAccounts().add(account4);
        user3.getAccounts().add(account5);
        user3.getAccounts().add(account6);
        user4.getAccounts().add(account7);
        user4.getAccounts().add(account8);
        user5.getAccounts().add(account9);
        user6.getAccounts().add(account10);
        user7.getAccounts().add(account11);
        user8.getAccounts().add(account12);
        Card card1 = new Card(bank1,user1,account1, "6217000010041315709");
        Card card2 = new Card(bank1,user1,account1, "6217000010041315715");
        Card card3 = new Card(bank1,user1,account2, "6217000010041315718");
        Card card4 = new Card(bank1,user2,account3, "6217000010051320007");
        Card card5 = new Card(bank2,user3,account4, "6222081502001312389");
        Card card6 = new Card(bank2,user3,account5, "6222081502001312390");
        Card card7 = new Card(bank2,user3,account6, "6222081502001312399");
        Card card8 = new Card(bank2,user3,account6, "6222081502001312400");
        Card card9 = new Card(bank2,user4,account7, "6222081502051320785");
        Card card10 = new Card(bank2,user4,account8, "6222081502051320786");
        Card card11 = new Card(bank1,user5,account9, "6640000010045442002");
        Card card12 = new Card(bank1,user5,account9, "6640000010045442003");
        Card card13 = new Card(bank2,user6,account10, "6640000010045441009");
        Card card14 = new Card(bank3,user7,account11, "6630000010033431001");
        Card card15 = new Card(bank3,user8,account12, "6630000010033431008");
        ArrayList<Card> cardArrayList = new ArrayList<>();
        cardArrayList.add(card1);
        cardArrayList.add(card2);
        cardArrayList.add(card3);
        cardArrayList.add(card4);
        cardArrayList.add(card5);
        cardArrayList.add(card6);
        cardArrayList.add(card7);
        cardArrayList.add(card8);
        cardArrayList.add(card9);
        cardArrayList.add(card10);
        cardArrayList.add(card11);
        cardArrayList.add(card12);
        cardArrayList.add(card13);
        cardArrayList.add(card14);
        cardArrayList.add(card15);
        atm1.setCards(cardArrayList);
        atm2.setCards(cardArrayList);
        atm3.setCards(cardArrayList);
        atm4.setCards(cardArrayList);
        atm5.setCards(cardArrayList);
        atm6.setCards(cardArrayList);
        atm7.setCards(cardArrayList);
        atm8.setCards(cardArrayList);
        atm9.setCards(cardArrayList);
        atm10.setCards(cardArrayList);
        atm11.setCards(cardArrayList);
        account1.getCards().add(card1);
        account1.getCards().add(card2);
        account2.getCards().add(card3);
        account3.getCards().add(card4);
        account4.getCards().add(card5);
        account5.getCards().add(card6);
        account6.getCards().add(card7);
        account6.getCards().add(card8);
        account7.getCards().add(card9);
        account8.getCards().add(card10);
        account9.getCards().add(card11);
        account9.getCards().add(card12);
        account10.getCards().add(card13);
        account11.getCards().add(card14);
        account12.getCards().add(card15);
        String shuru = "";
        ArrayList<String> duoshuru = new ArrayList<>();
        do {
            shuru = input.nextLine();
            duoshuru.add(shuru);
        }while (!shuru.equals("#"));
        int i = 0;
        for (i=0;i<duoshuru.size();i++)
        {

            String[] xinxi  = duoshuru.get(i).split("\\s+");
            if (xinxi.length==4)
            {
                double value = Double.parseDouble(xinxi[3]);
                atm1.cunqukuan(xinxi[0],xinxi[1],xinxi[2],value);
            }
            else if (xinxi.length==1) {
                atm1.inquire(xinxi[0]);
            }
            else
                System.exit(0);
        }
    }
}
class ChinaUnionPay{
    private ArrayList<Bank> banks;
    private ArrayList<Account> accounts;
    private ArrayList<Atm> atms;

    public ArrayList<Bank> getBanks() {
        return banks;
    }

    public void setBanks(ArrayList<Bank> banks) {
        this.banks = banks;
    }

    public ArrayList<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(ArrayList<Account> accounts) {
        this.accounts = accounts;
    }

    public ArrayList<Atm> getAtms() {
        return atms;
    }

    public void setAtms(ArrayList<Atm> atms) {
        this.atms = atms;
    }
}
class Bank extends ChinaUnionPay{
    public Bank(String name,double shouxufei) {
        this.name = name;
        this.shouxufei = shouxufei;
    }
    private double shouxufei;
    private ArrayList<Account> ainaccounts = new ArrayList<>();
    private ArrayList<Atm> ainatms;
    private String name;

    public ArrayList<Account> getAinaccounts() {
        return ainaccounts;
    }

    public double getShouxufei() {
        return shouxufei;
    }

    public void setShouxufei(double shouxufei) {
        this.shouxufei = shouxufei;
    }

    public void setAinaccounts(ArrayList<Account> ainaccounts) {
        this.ainaccounts = ainaccounts;
    }

    public ArrayList<Atm> getAinatms() {
        return ainatms;
    }

    public void setAinatms(ArrayList<Atm> ainatms) {
        this.ainatms = ainatms;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
class User{
    private String name;
    private ArrayList<Account> accounts = new ArrayList<>();

    public User(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ArrayList<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(ArrayList<Account> accounts) {
        this.accounts = accounts;
    }
}
class Account{
    private String accountnum;
    private String accountkind;
    private ArrayList<Card> cards = new ArrayList<>();
    private User user;
    private Bank bank;
    private double balance = 10000;
    Account(){

    }

    public void setAccountkind(String accountkind) {
        this.accountkind = accountkind;
    }

    public String getAccountkind() {
        return accountkind;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public Account(String accountnum, User user,String accountkind) {
        this.accountnum = accountnum;
        this.user = user;
        this.accountkind = accountkind;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }

    public Bank getBank() {
        return bank;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getAccountnum() {
        return accountnum;
    }

    public void setAccountnum(String accountnum) {
        this.accountnum = accountnum;
    }


    public ArrayList<Card> getCards() {
        return cards;
    }

    public void setCards(ArrayList<Card> cards) {
        this.cards = cards;
    }
}
class Card{
private Bank bank;
private User user;
private Account account;
private String cardnumber;
private String paasword ="88888888";

    public Card(Bank bank, User user, Account account, String cardnumber) {
        this.bank = bank;
        this.user = user;
        this.account = account;
        this.cardnumber = cardnumber;
    }

    public String getPaasword() {
        return paasword;
    }

    public void setPaasword(String paasword) {
        this.paasword = paasword;
    }

    public void setCardnumber(String cardnumber) {
        this.cardnumber = cardnumber;
    }

    public String getCardnumber() {
        return cardnumber;
    }

    public Bank getBank() {
        return bank;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }
}
class Atm{
    private Bank fbank;
    private String atmnum;
    private ArrayList<Card> cards;
    private ArrayList<Atm> atms;

    public Atm(String atmnum) {
        this.atmnum = atmnum;
    }

    public ArrayList<Card> getCards() {
        return cards;
    }

    public void setCards(ArrayList<Card> cards) {
        this.cards = cards;
    }

    public ArrayList<Atm> getAtms() {
        return atms;
    }

    public void setAtms(ArrayList<Atm> atms) {
        this.atms = atms;
    }

    public String getAtmnum() {
        return atmnum;
    }

    public void setAtmnum(String atmnum) {
        this.atmnum = atmnum;
    }

    public Bank getFbank() {
        return fbank;
    }

    public void setFbank(Bank fbank) {
        this.fbank = fbank;
    }
    public void cunqukuan(String cardnumber,String password,String atmnum,double aom){
        int i;
        int k1=-1;
        for (i=0;i<cards.size();i++)
        {
            if (cards.get(i).getCardnumber().equals(cardnumber))
                k1 = i;
        }
        if (k1!=-1) {
            int k2=-1;
            for (i=0;i<atms.size();i++)
            {
                if (atms.get(i).getAtmnum().equals(atmnum))
                k2 = i;
            }
            if (k2!=-1) {
                if (cards.get(k1).getPaasword().equals(password)) {
                    if (cards.get(k1).getBank().getName().equals(atms.get(k2).getFbank().getName())) {
                        if (cards.get(k1).getAccount().getAccountkind().equals("借记账号")) {
                            if (aom > 0) {
                                if (aom > cards.get(k1).getAccount().getBalance()) {
                                    System.out.println("Sorry,your account balance is insufficient.");
                                    System.exit(0);
                                } else {
                                    cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom);
                                    System.out.print("业务:取款 ");
                                    System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                    System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                }
                            }
                        } else {
                            if (aom > 0) {
                                if (cards.get(k1).getAccount().getBalance() > 0) {
                                    if (cards.get(k1).getAccount().getBalance() > aom) {
                                        cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom);
                                        System.out.print("业务:取款 ");
                                        System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                        System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                    } else {
                                        if ((aom + (aom - cards.get(k1).getAccount().getBalance()) * 0.05) > cards.get(k1).getAccount().getBalance() + 50000) {
                                            System.out.println("Sorry,your account balance is insufficient.");
                                            System.exit(0);
                                        } else {
                                            cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - (aom + (aom - cards.get(k1).getAccount().getBalance()) * 0.05));
                                            System.out.print("业务:取款 ");
                                            System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                            System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                        }
                                    }
                                } else {
                                    if (aom * (1 + 0.05) > cards.get(k1).getAccount().getBalance() + 50000) {
                                        System.out.println("Sorry,your account balance is insufficient.");
                                    } else {
                                        cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom * (1 + 0.05));
                                        System.out.print("业务:取款 ");
                                        System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                        System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                    }
                                }
                            }
                        }
                    } else {
                        if (cards.get(k1).getAccount().getAccountkind().equals("借记账号")) {
                            if (aom > 0) {
                                if (aom * (1 + atms.get(k2).getFbank().getShouxufei()) > cards.get(k1).getAccount().getBalance()) {
                                    System.out.println("Sorry,your account balance is insufficient.");
                                    System.exit(0);
                                } else {
                                    cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom * (1 + atms.get(k2).getFbank().getShouxufei()));
                                    System.out.print("业务:取款 ");
                                    System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                    System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                }
                            }
                        } else {
                            if (aom > 0) {
                                if (cards.get(k1).getAccount().getBalance() > 0) {
                                    if (aom * (1 + atms.get(k2).getFbank().getShouxufei()) + (aom - cards.get(k1).getAccount().getBalance()) * 0.05 > cards.get(k1).getAccount().getBalance() + 50000) {
                                        System.out.println("Sorry,your account balance is insufficient.");
                                        System.exit(0);
                                    } else {
                                        if (aom < cards.get(k1).getAccount().getBalance()) {
                                            cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom * (1 + atms.get(k2).getFbank().getShouxufei()));
                                            System.out.print("业务:取款 ");
                                            System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                            System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                        } else {
                                            cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom - (aom - cards.get(k1).getAccount().getBalance()) * 0.05 - aom * atms.get(k2).getFbank().getShouxufei());
                                            System.out.print("业务:取款 ");
                                            System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                            System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                        }
                                    }
                                }
                                else
                                {
                                    if (aom*(1+0.05)>cards.get(k1).getAccount().getBalance()+50000)
                                    {
                                        System.out.println("Sorry,your account balance is insufficient.");
                                    }
                                    else
                                    {
                                        cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance()-aom*(1+0.05));
                                        System.out.print("业务:取款 ");
                                        System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                        System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                    }
                                }
                            }
                        }
                    }
                } else {
                    System.out.println("Sorry,your password is wrong.");
                    System.exit(0);
                }
            }
            else {
                System.out.println("Sorry,the ATM's id is wrong.");
                System.exit(0);
            }

        }
        else
        {
            System.out.println("Sorry,this card does not exist.");
            System.exit(0);
        }
    }

    public void inquire(String cardnumber){
        if (cardnumber.equals("#"))
            System.exit(0);
        else {
            int i;
            int k = -1;
            for (i = 0; i < cards.size(); i++) {
                if (cards.get(i).getCardnumber().equals(cardnumber))
                    k = i;
            }
            if (k != -1) {
                System.out.printf("业务:查询余额 ¥%.2f", cards.get(k).getAccount().getBalance());
            } else
                System.out.println("Sorry,this card does not exist.");
        }
    }
}

  

思路说明:

先创立一个银联对象,创建相关的银行对象,再把银行对象上添加到银联对象里边,创建ATM对象,创建用户还有Card类。然后实现各种类之间的关联,在ATM类中实现取款和存款的功能。

功能实现:

在主函数中创建相关的对象,在ATM类中,实现最终的服务功能,验证密码,查询卡号,余额,存取款等等。

遇到的问题:

在代码编写的过程中没有什么大的问题,唯一的问题就是代码长度过长。

解决方法:

观察代码,去掉冗余部分。

 b、题目集9设计的思路和具体技术运用:

具体类的设

源代码:

package pakage;

import java.util.ArrayList;
import java.util.Scanner;

public class Main81 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ChinaUnionPay chinaUnionPay = new ChinaUnionPay();
        Bank bank1 = new Bank("中国建设银行",0.02);
        Bank bank2 = new Bank("中国工商银行",0.03);
        Bank bank3 = new Bank("中国农业银行",0.04);
        ArrayList<Bank> bankArrayList = new ArrayList<>();
        bankArrayList.add(bank1);
        bankArrayList.add(bank2);
        bankArrayList.add(bank3);
        chinaUnionPay.setBanks(bankArrayList);
        Atm atm1 = new Atm("01");
        Atm atm2 = new Atm("02");
        Atm atm3 = new Atm("03");
        Atm atm4 = new Atm("04");
        Atm atm5 = new Atm("05");
        Atm atm6 = new Atm("06");
        Atm atm7 = new Atm("07");
        Atm atm8 = new Atm("08");
        Atm atm9 = new Atm("09");
        Atm atm10 = new Atm("10");
        Atm atm11 = new Atm("11");
        ArrayList<Atm> atmArrayList = new ArrayList<>();
        atmArrayList.add(atm1);
        atmArrayList.add(atm2);
        atmArrayList.add(atm3);
        atmArrayList.add(atm4);
        atmArrayList.add(atm5);
        atmArrayList.add(atm6);
        atmArrayList.add(atm7);
        atmArrayList.add(atm8);
        atmArrayList.add(atm9);
        atmArrayList.add(atm10);
        atmArrayList.add(atm11);
        atm1.setAtms(atmArrayList);
        atm2.setAtms(atmArrayList);
        atm3.setAtms(atmArrayList);
        atm4.setAtms(atmArrayList);
        atm5.setAtms(atmArrayList);
        atm6.setAtms(atmArrayList);
        atm7.setAtms(atmArrayList);
        atm8.setAtms(atmArrayList);
        atm9.setAtms(atmArrayList);
        atm10.setAtms(atmArrayList);
        atm11.setAtms(atmArrayList);

        ArrayList<Atm> atmArrayList1 = new ArrayList<>();
        ArrayList<Atm> atmArrayList2 = new ArrayList<>();
        ArrayList<Atm> atmArrayList3 = new ArrayList<>();

        bank1.setAinatms(atmArrayList1);
        bank2.setAinatms(atmArrayList2);
        bank3.setAinatms(atmArrayList3);
        chinaUnionPay.setAtms(atmArrayList);
        bank1.getAinatms().add(atm1);
        bank1.getAinatms().add(atm2);
        bank1.getAinatms().add(atm3);
        bank1.getAinatms().add(atm4);
        bank2.getAinatms().add(atm5);
        bank2.getAinatms().add(atm6);
        bank3.getAinatms().add(atm7);
        bank3.getAinatms().add(atm8);
        bank3.getAinatms().add(atm9);
        bank3.getAinatms().add(atm10);
        bank3.getAinatms().add(atm11);
        atm1.setFbank(bank1);
        atm2.setFbank(bank1);
        atm3.setFbank(bank1);
        atm4.setFbank(bank1);
        atm5.setFbank(bank2);
        atm6.setFbank(bank2);
        atm7.setFbank(bank3);
        atm8.setFbank(bank3);
        atm9.setFbank(bank3);
        atm10.setFbank(bank3);
        atm11.setFbank(bank3);
        User user1 = new User("杨过");
        User user2 = new User("郭靖");
        User user3 = new User("张无忌");
        User user4 = new User("韦小宝");
        User user5 = new User("张三丰");
        User user6 = new User("令狐冲");
        User user7 = new User("乔峰");
        User user8 = new User("洪七公");
        Account account1 = new Account("3217000010041315709",user1,"借记账号");
        Account account2 = new Account("3217000010041315715",user1,"借记账号");
        Account account3 = new Account("3217000010051320007",user2,"借记账号");
        Account account4 = new Account("3222081502001312389",user3,"借记账号");
        Account account5 = new Account("3222081502001312390",user3,"借记账号");
        Account account6 = new Account("3222081502001312399",user3,"借记账号");
        Account account7 = new Account("3222081502051320785",user4,"借记账号");
        Account account8 = new Account("3222081502051320786",user4,"借记账号");
        Account account9 = new Account("3640000010045442002",user5,"贷记账号");
        Account account10 = new Account("3640000010045441009",user6,"贷记账号");
        Account account11 = new Account("3630000010033431001",user7,"贷记账号");
        Account account12 = new Account("3630000010033431008",user8,"贷记账号");
        ArrayList<Account> accountArrayList1 = new ArrayList<>();
        ArrayList<Account> accountArrayList2 = new ArrayList<>();
        ArrayList<Account> accountArrayList3 = new ArrayList<>();
        accountArrayList1.add(account1);
        accountArrayList1.add(account2);
        accountArrayList1.add(account3);
        accountArrayList2.add(account4);
        accountArrayList2.add(account5);
        accountArrayList2.add(account6);
        accountArrayList2.add(account7);
        accountArrayList2.add(account8);
        accountArrayList3.add(account9);
        accountArrayList3.add(account10);
        accountArrayList3.add(account11);
        accountArrayList3.add(account12);
        bank1.setAinaccounts(accountArrayList1);
        bank2.setAinaccounts(accountArrayList2);
        bank3.setAinaccounts(accountArrayList3);
        account1.setBank(bank1);
        account2.setBank(bank1);
        account3.setBank(bank1);
        account4.setBank(bank2);
        account5.setBank(bank2);
        account6.setBank(bank2);
        account7.setBank(bank2);
        account8.setBank(bank2);
        account9.setBank(bank1);
        account10.setBank(bank2);
        account11.setBank(bank3);
        account12.setBank(bank3);
        user1.getAccounts().add(account1);
        user1.getAccounts().add(account2);
        user2.getAccounts().add(account3);
        user3.getAccounts().add(account4);
        user3.getAccounts().add(account5);
        user3.getAccounts().add(account6);
        user4.getAccounts().add(account7);
        user4.getAccounts().add(account8);
        user5.getAccounts().add(account9);
        user6.getAccounts().add(account10);
        user7.getAccounts().add(account11);
        user8.getAccounts().add(account12);
        Card card1 = new Card(bank1,user1,account1, "6217000010041315709");
        Card card2 = new Card(bank1,user1,account1, "6217000010041315715");
        Card card3 = new Card(bank1,user1,account2, "6217000010041315718");
        Card card4 = new Card(bank1,user2,account3, "6217000010051320007");
        Card card5 = new Card(bank2,user3,account4, "6222081502001312389");
        Card card6 = new Card(bank2,user3,account5, "6222081502001312390");
        Card card7 = new Card(bank2,user3,account6, "6222081502001312399");
        Card card8 = new Card(bank2,user3,account6, "6222081502001312400");
        Card card9 = new Card(bank2,user4,account7, "6222081502051320785");
        Card card10 = new Card(bank2,user4,account8, "6222081502051320786");
        Card card11 = new Card(bank1,user5,account9, "6640000010045442002");
        Card card12 = new Card(bank1,user5,account9, "6640000010045442003");
        Card card13 = new Card(bank2,user6,account10, "6640000010045441009");
        Card card14 = new Card(bank3,user7,account11, "6630000010033431001");
        Card card15 = new Card(bank3,user8,account12, "6630000010033431008");
        ArrayList<Card> cardArrayList = new ArrayList<>();
        cardArrayList.add(card1);
        cardArrayList.add(card2);
        cardArrayList.add(card3);
        cardArrayList.add(card4);
        cardArrayList.add(card5);
        cardArrayList.add(card6);
        cardArrayList.add(card7);
        cardArrayList.add(card8);
        cardArrayList.add(card9);
        cardArrayList.add(card10);
        cardArrayList.add(card11);
        cardArrayList.add(card12);
        cardArrayList.add(card13);
        cardArrayList.add(card14);
        cardArrayList.add(card15);
        atm1.setCards(cardArrayList);
        atm2.setCards(cardArrayList);
        atm3.setCards(cardArrayList);
        atm4.setCards(cardArrayList);
        atm5.setCards(cardArrayList);
        atm6.setCards(cardArrayList);
        atm7.setCards(cardArrayList);
        atm8.setCards(cardArrayList);
        atm9.setCards(cardArrayList);
        atm10.setCards(cardArrayList);
        atm11.setCards(cardArrayList);
        account1.getCards().add(card1);
        account1.getCards().add(card2);
        account2.getCards().add(card3);
        account3.getCards().add(card4);
        account4.getCards().add(card5);
        account5.getCards().add(card6);
        account6.getCards().add(card7);
        account6.getCards().add(card8);
        account7.getCards().add(card9);
        account8.getCards().add(card10);
        account9.getCards().add(card11);
        account9.getCards().add(card12);
        account10.getCards().add(card13);
        account11.getCards().add(card14);
        account12.getCards().add(card15);
        String shuru = "";
        ArrayList<String> duoshuru = new ArrayList<>();
        do {
            shuru = input.nextLine();
            duoshuru.add(shuru);
        }while (!shuru.equals("#"));
        int i = 0;
        for (i=0;i<duoshuru.size();i++)
        {

            String[] xinxi  = duoshuru.get(i).split("\\s+");
            if (xinxi.length==4)
            {
                double value = Double.parseDouble(xinxi[3]);
                atm1.cunqukuan(xinxi[0],xinxi[1],xinxi[2],value);
            }
            else if (xinxi.length==1) {
                atm1.inquire(xinxi[0]);
            }
            else
                System.exit(0);
        }
    }
}
class ChinaUnionPay{
    private ArrayList<Bank> banks;
    private ArrayList<Account> accounts;
    private ArrayList<Atm> atms;

    public ArrayList<Bank> getBanks() {
        return banks;
    }

    public void setBanks(ArrayList<Bank> banks) {
        this.banks = banks;
    }

    public ArrayList<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(ArrayList<Account> accounts) {
        this.accounts = accounts;
    }

    public ArrayList<Atm> getAtms() {
        return atms;
    }

    public void setAtms(ArrayList<Atm> atms) {
        this.atms = atms;
    }
}
class Bank extends ChinaUnionPay{
    public Bank(String name,double shouxufei) {
        this.name = name;
        this.shouxufei = shouxufei;
    }
    private double shouxufei;
    private ArrayList<Account> ainaccounts = new ArrayList<>();
    private ArrayList<Atm> ainatms;
    private String name;

    public ArrayList<Account> getAinaccounts() {
        return ainaccounts;
    }

    public double getShouxufei() {
        return shouxufei;
    }

    public void setShouxufei(double shouxufei) {
        this.shouxufei = shouxufei;
    }

    public void setAinaccounts(ArrayList<Account> ainaccounts) {
        this.ainaccounts = ainaccounts;
    }

    public ArrayList<Atm> getAinatms() {
        return ainatms;
    }

    public void setAinatms(ArrayList<Atm> ainatms) {
        this.ainatms = ainatms;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
class User{
    private String name;
    private ArrayList<Account> accounts = new ArrayList<>();

    public User(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ArrayList<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(ArrayList<Account> accounts) {
        this.accounts = accounts;
    }
}
class Account{
    private String accountnum;
    private String accountkind;
    private ArrayList<Card> cards = new ArrayList<>();
    private User user;
    private Bank bank;
    private double balance = 10000;
    Account(){

    }

    public void setAccountkind(String accountkind) {
        this.accountkind = accountkind;
    }

    public String getAccountkind() {
        return accountkind;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public Account(String accountnum, User user,String accountkind) {
        this.accountnum = accountnum;
        this.user = user;
        this.accountkind = accountkind;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }

    public Bank getBank() {
        return bank;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getAccountnum() {
        return accountnum;
    }

    public void setAccountnum(String accountnum) {
        this.accountnum = accountnum;
    }


    public ArrayList<Card> getCards() {
        return cards;
    }

    public void setCards(ArrayList<Card> cards) {
        this.cards = cards;
    }
}
class Card{
private Bank bank;
private User user;
private Account account;
private String cardnumber;
private String paasword ="88888888";

    public Card(Bank bank, User user, Account account, String cardnumber) {
        this.bank = bank;
        this.user = user;
        this.account = account;
        this.cardnumber = cardnumber;
    }

    public String getPaasword() {
        return paasword;
    }

    public void setPaasword(String paasword) {
        this.paasword = paasword;
    }

    public void setCardnumber(String cardnumber) {
        this.cardnumber = cardnumber;
    }

    public String getCardnumber() {
        return cardnumber;
    }

    public Bank getBank() {
        return bank;
    }

    public void setBank(Bank bank) {
        this.bank = bank;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Account getAccount() {
        return account;
    }

    public void setAccount(Account account) {
        this.account = account;
    }
}
class Atm{
    private Bank fbank;
    private String atmnum;
    private ArrayList<Card> cards;
    private ArrayList<Atm> atms;

    public Atm(String atmnum) {
        this.atmnum = atmnum;
    }

    public ArrayList<Card> getCards() {
        return cards;
    }

    public void setCards(ArrayList<Card> cards) {
        this.cards = cards;
    }

    public ArrayList<Atm> getAtms() {
        return atms;
    }

    public void setAtms(ArrayList<Atm> atms) {
        this.atms = atms;
    }

    public String getAtmnum() {
        return atmnum;
    }

    public void setAtmnum(String atmnum) {
        this.atmnum = atmnum;
    }

    public Bank getFbank() {
        return fbank;
    }

    public void setFbank(Bank fbank) {
        this.fbank = fbank;
    }
    public void cunqukuan(String cardnumber,String password,String atmnum,double aom){
        int i;
        int k1=-1;
        for (i=0;i<cards.size();i++)
        {
            if (cards.get(i).getCardnumber().equals(cardnumber))
                k1 = i;
        }
        if (k1!=-1) {
            int k2=-1;
            for (i=0;i<atms.size();i++)
            {
                if (atms.get(i).getAtmnum().equals(atmnum))
                k2 = i;
            }
            if (k2!=-1) {
                if (cards.get(k1).getPaasword().equals(password)) {
                    if (cards.get(k1).getBank().getName().equals(atms.get(k2).getFbank().getName())) {
                        if (cards.get(k1).getAccount().getAccountkind().equals("借记账号")) {
                            if (aom > 0) {
                                if (aom > cards.get(k1).getAccount().getBalance()) {
                                    System.out.println("Sorry,your account balance is insufficient.");
                                    System.exit(0);
                                } else {
                                    cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom);
                                    System.out.print("业务:取款 ");
                                    System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                    System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                }
                            }
                        } else {
                            if (aom > 0) {
                                if (cards.get(k1).getAccount().getBalance() > 0) {
                                    if (cards.get(k1).getAccount().getBalance() > aom) {
                                        cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom);
                                        System.out.print("业务:取款 ");
                                        System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                        System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                    } else {
                                        if ((aom + (aom - cards.get(k1).getAccount().getBalance()) * 0.05) > cards.get(k1).getAccount().getBalance() + 50000) {
                                            System.out.println("Sorry,your account balance is insufficient.");
                                            System.exit(0);
                                        } else {
                                            cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - (aom + (aom - cards.get(k1).getAccount().getBalance()) * 0.05));
                                            System.out.print("业务:取款 ");
                                            System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                            System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                        }
                                    }
                                } else {
                                    if (aom * (1 + 0.05) > cards.get(k1).getAccount().getBalance() + 50000) {
                                        System.out.println("Sorry,your account balance is insufficient.");
                                    } else {
                                        cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom * (1 + 0.05));
                                        System.out.print("业务:取款 ");
                                        System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                        System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                    }
                                }
                            }
                        }
                    } else {
                        if (cards.get(k1).getAccount().getAccountkind().equals("借记账号")) {
                            if (aom > 0) {
                                if (aom * (1 + atms.get(k2).getFbank().getShouxufei()) > cards.get(k1).getAccount().getBalance()) {
                                    System.out.println("Sorry,your account balance is insufficient.");
                                    System.exit(0);
                                } else {
                                    cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom * (1 + atms.get(k2).getFbank().getShouxufei()));
                                    System.out.print("业务:取款 ");
                                    System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                    System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                }
                            }
                        } else {
                            if (aom > 0) {
                                if (cards.get(k1).getAccount().getBalance() > 0) {
                                    if (aom * (1 + atms.get(k2).getFbank().getShouxufei()) + (aom - cards.get(k1).getAccount().getBalance()) * 0.05 > cards.get(k1).getAccount().getBalance() + 50000) {
                                        System.out.println("Sorry,your account balance is insufficient.");
                                        System.exit(0);
                                    } else {
                                        if (aom < cards.get(k1).getAccount().getBalance()) {
                                            cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom * (1 + atms.get(k2).getFbank().getShouxufei()));
                                            System.out.print("业务:取款 ");
                                            System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                            System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                        } else {
                                            cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance() - aom - (aom - cards.get(k1).getAccount().getBalance()) * 0.05 - aom * atms.get(k2).getFbank().getShouxufei());
                                            System.out.print("业务:取款 ");
                                            System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                            System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                        }
                                    }
                                }
                                else
                                {
                                    if (aom*(1+0.05)>cards.get(k1).getAccount().getBalance()+50000)
                                    {
                                        System.out.println("Sorry,your account balance is insufficient.");
                                    }
                                    else
                                    {
                                        cards.get(k1).getAccount().setBalance(cards.get(k1).getAccount().getBalance()-aom*(1+0.05));
                                        System.out.print("业务:取款 ");
                                        System.out.println(cards.get(k1).getUser().getName() + "在" + atms.get(k2).getFbank().getName() + "的" + atms.get(k2).getAtmnum() + "号ATM机上取款¥" + aom + "0");
                                        System.out.println("当前余额为¥" + cards.get(k1).getAccount().getBalance() + "0");
                                    }
                                }
                            }
                        }
                    }
                } else {
                    System.out.println("Sorry,your password is wrong.");
                    System.exit(0);
                }
            }
            else {
                System.out.println("Sorry,the ATM's id is wrong.");
                System.exit(0);
            }

        }
        else
        {
            System.out.println("Sorry,this card does not exist.");
            System.exit(0);
        }
    }

    public void inquire(String cardnumber){
        if (cardnumber.equals("#"))
            System.exit(0);
        else {
            int i;
            int k = -1;
            for (i = 0; i < cards.size(); i++) {
                if (cards.get(i).getCardnumber().equals(cardnumber))
                    k = i;
            }
            if (k != -1) {
                System.out.printf("业务:查询余额 ¥%.2f", cards.get(k).getAccount().getBalance());
            } else
                System.out.println("Sorry,this card does not exist.");
        }
    }
}

思路说明:

思路和上次的一样,就是多了一个功能,可以跨行存取款。

功能实现:

这次比上次要麻烦一点,比上次多加了一个功能,需要判断账户和所属的银行,然后再进行存取款操作。

问题:

在编码的过程中,不知道怎么计算相关的手续费,给我搞糊涂了。

解决方法:

询问同学。

c、这两次作业的总结:

这两次作业基本上没什么太大难度,第二次作业是建立在第一次作业的基础上,稍微改进,这两次作业主要是另一类之间的联系,同样也考察了相关的字符操作。

三、采坑心得

这三次作业,采坑比较多的地方就是代码长度过长,因为有些冗余部分没有及时删除。哦,请问我在编写代码的过程中尽量要缩减代码长度,同时,这两次的代码编写,我也一直到我一些方法知道的少,要及时百度。

Collection集合:

主要有两大类:List类和Set类

List类:有索引,可以储存重复元素,可以保证存储顺序。

Set类:没有索引,不可以储存重复元素,不可以保证存储顺序。

Collection类中的一些方法:

boolean add():添加元素

boolean remove():删除集合中的某个元素

void clear():清空集合中的所有元素

boolean contain():判断集合中是否包含某个元素

boolean isEmpty():判断集合是否为空

int size():获取长度

Object[ ] toArray():将集合转换为一个数组

Map类集合:

特点:
1.Map集合是一个双列集合,一个元素包含两个值(一个key, 一个value)

2.Map集合中的元素,key和value的数据类型可以相同,也可以不同

3.Map集合中的元素, key是不允许重复的,value是可以重复的

4.Map集合中的元素, key和value是一 一对应


HashMap集合的特点:
1.HashMap集合底层是哈希表:查询的速度特别的快

2. HashMop集合是一一个无序的集合,存储元素和提出元素的顺序有可能不一致

LinkedHashMap的特点:

1.LinkedHashMop集合底层是哈希表+链表(保证迭代的顺序)
2.LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的

 Map集合的一些方法:

put(k,v):放进去一个元素。

contain(k):是否包含键k

contain(v):是否包含值v

clear():清楚所有元素

四、改进建议:

以后老师可以把做的pta上题讲一讲。

五、总结:

这三次的作业我感觉我学到了很多,对类的掌握更加深刻,继承、多态都感觉有很大进步,还有接口,集合,对它们的理解个更深刻。同时我也认识到了自身的不足,尤其是在学习效率这方面有待提高,其中很大一部分原因就是没有提前预习,以后要在每次上课及作业发布之前预习相关知识。

posted @ 2021-06-17 18:30  Younghsy  阅读(66)  评论(0)    收藏  举报