题目集7~9的总结性Blog

前言:

  • 知识点:
  1. 继承、多态的应用;
  2. ArrayList泛型的应用方法
  3. Comparable接口及泛型的应用
  4. 单一职责原则的应用
  5. “开-闭”原则的应用
  6. “单一职责原则”,思考该程序是否能够符合“开-闭”原则。
  7. Java中的继承;
  8. Java中的面向对象设计; 
  • 题量以及难度:

          这三次的发布题集内的题目数量都比较少但是题目的综合性都较高需要花费时间去调试以及去构思 能够完成但是时间较长

设计与分析:

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

7-1

 

 

 

 

 

 

 

 该类中最复杂函数的复杂度Max Complexity较高,在绿色范围(所推荐的java良好代码,如平均复杂度在2.0-4.0之间)表示良好

 

import java.util.*;
class Shape{
    public Shape(){
        
    }
    public double getArea(){
        return 0.0;
    }
}

class Circle extends Shape{
    private double radius;
 
    public boolean validate() {
        if(radius>0)
            return true;
        else
            return false;
    }
    public Circle(double radius){
        super();
        this.radius = radius;
}
    public double getRadius(){
        return radius;
    }
    
    @Override
    public double getArea(){
        return radius * radius * Math.PI;
    }
}

class Rectangle extends Shape{
    private double width;
    private double length;
    public boolean validate() {
        if(width>=0&&length>=0)
            return true;
        else
            return false;
    }
    public double getLength(){
        return this.length;
    }
    public Rectangle(double length,double width){
            this.length = length;
            this.width = width;
    }
    @Override
    public double getArea(){
        return width * length;
    }
}
class Triangle extends Shape{
        private double side1,side2,side3;
     public Triangle(){
           
        }
     public Triangle(double a ,double b,double c) {
         side1=a;
         side2=b;
         side3=c;
     }
     @Override
        public double getArea(){
         double p=(double)(side1+side2+side3)/2;
         double s=Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
         return s;
        }
     public boolean validate() {
         if(side1+side2>side3&&side1+side3>side2&&side2+side3>side1)
             return true;
         else
             return false;
        }
}
class Trapezoid extends Shape{
    private double topSide,bottomSide,height;

    public Trapezoid() {
    }

    public Trapezoid(double topSide, double bottomSide, double height) {
        this.topSide = topSide;
        this.bottomSide = bottomSide;
        this.height = height;
    }

    @Override
    public double getArea() {
        return (topSide+bottomSide)*height/2;
    }

    public boolean validate() {
        return topSide>0&&height>0&&bottomSide>0;
    }
}
class Ball extends Circle{
 
    public Ball(double radius) {
        super(radius);
        // TODO Auto-generated constructor stub
    }
    @Override
    public double getArea(){
        return 4 * super.getRadius() * super.getRadius() * Math.PI;
    }
    public double getVolume(){
        return 4.0 / 3.0 * Math.PI * Math.pow(super.getRadius(), 3);
    }
}

class Box extends Rectangle{
    public Box(double length, double width) {
        super(length, width);
        // TODO Auto-generated constructor stub
    }
    private double height;
    
    
    public void setHeight(double height){
            this.height = height;
    }
    public double getHeight(){
        return height;
    }


}
class Card{
    private String name;
    private double area;
    void setname(String name) {
        this.name=name;
    }
    String getname() {
        return this.name;
    }
    void setArea(double area) {
        this.area=area;
    }
    double getArea() {
        return this.area;
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList <Card> card =new ArrayList<>();
        ArrayList  num =new ArrayList();
        
        int number=input.nextInt();
        while(number != 0){
            if(number < 0 || number > 4){
                System.out.println("Wrong Format");
                System.exit(0);
            }
            num.add(number);
            number = input.nextInt();
        }
        for(int i = 0 ; i<num.size();i++){
        
        
        switch((int)num.get(i)) {
        case 1: 
                    Card c1=new Card();
                Circle c=new  Circle(input.nextDouble());
                if(c.validate()) {
                    c1.setname("Circle");
                    c1.setArea(c.getArea());
                    card.add(c1);
                }
                else {
                   System.out.println("Wrong Format");
                    System.exit(0);
                }break;
            
        case 2:
            Card c2=new Card();    
            Rectangle r=new Rectangle(input.nextDouble(),input.nextDouble());
            if(r.validate()) {
                 c2.setname("Rectangle");
                 c2.setArea(r.getArea());
                 card.add(c2);}
            else {
                System.out.println("Wrong Format");
                System.exit(0);
               
           }break;
        case 3:
            Card c3=new Card();
            Triangle  t=new Triangle(input.nextDouble(),input.nextDouble(),input.nextDouble());
               if(t.validate()) {
                   c3.setname("Triangle");
                   c3.setArea(t.getArea());
                   card.add(c3);}
               else {
                  System.out.println("Wrong Format");
                    System.exit(0);
               }break;
        case 4:
            Card c4=new Card();
            Trapezoid tr =new Trapezoid(input.nextDouble(),input.nextDouble(),input.nextDouble());
             if(tr.validate()) {
                   c4.setname("Trapezoid");
                   c4.setArea(tr.getArea());
                   card.add(c4);}
               else {
                  System.out.println("Wrong Format");
                    System.exit(0);
               }break;
        }
        }
        System.out.println("The original list:");
        for (Card cards : card) {
            System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());
            
            
        }
        System.out.println();
        System.out.println("The sorted list:");
      Collections.sort(card, new Comparator<Card>() {
             
            @Override
            public int compare(Card o1, Card o2) {
                // 升序
                //return o1.getAge()-o2.getAge();
                return new Double(o2.getArea()).compareTo(new Double(o1.getArea()));
                // 降序
                // return o2.getAge()-o1.getAge();
                // return o2.getAge().compareTo(o1.getAge());
            }
        });
        for (Card cards : card) {
              System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());
            
        }
         double sum = 0;//面积总和
          for (Card cards : card) {
            sum+=cards.getArea();
             
         }
         System.out.println();
         System.out.printf("Sum of area:%.2f\n",sum);
         
    }             
}

 

 

考虑一款适合于小学生的卡片(Card)排序游戏,其规则为随机发放一些卡片给学生,卡片分为 四种形状:圆形(Circle)、矩形(Rectangle)、三角形(Triangle)及梯形(Trapezoid),并给出各种 卡片的相应参数,要求学生能够迅速求出各卡片的面积大小然后将卡片按照其面积值从大到小进行排 序,同时求出所有卡片的面积之和。

Comparable 接口的应用 需要对自己自定义的类中的Arraylist 进行排序

调试数据的输入以及对输入数据的正确性校验和对输入数据的图形分类 其中在类的设计中其实差别不大都是一个校验输入数据的合法性以及对于面积的求法  再就是对有效数据分离

在题集7-2中增多了图形的种类在其中需要对相同类的面积元素进行排序

 

import java.util.*;
class Shape{
    public Shape(){
        
    }
    public double getArea(){
        return 0.0;
    }
}

class Circle extends Shape{
    private double radius;
 
    public boolean validate() {
        if(radius>0)
            return true;
        else
            return false;
    }
    public Circle(double radius){
        super();
        this.radius = radius;
}
    public double getRadius(){
        return radius;
    }
    
    @Override
    public double getArea(){
        return radius * radius * Math.PI;
    }
}

class Rectangle extends Shape{
    private double width;
    private double length;
    public boolean validate() {
        if(width>=0&&length>=0)
            return true;
        else
            return false;
    }
    public double getLength(){
        return this.length;
    }
    public Rectangle(double length,double width){
            this.length = length;
            this.width = width;
    }
    @Override
    public double getArea(){
        return width * length;
    }
}
class Triangle extends Shape{
        private double side1,side2,side3;
     public Triangle(){
           
        }
     public Triangle(double a ,double b,double c) {
         side1=a;
         side2=b;
         side3=c;
     }
     @Override
        public double getArea(){
         double p=(double)(side1+side2+side3)/2;
         double s=Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
         return s;
        }
     public boolean validate() {
         if(side1+side2>side3&&side1+side3>side2&&side2+side3>side1)
             return true;
         else
             return false;
        }
}
class Trapezoid extends Shape{
    private double topSide,bottomSide,height;

    public Trapezoid() {
    }

    public Trapezoid(double topSide, double bottomSide, double height) {
        this.topSide = topSide;
        this.bottomSide = bottomSide;
        this.height = height;
    }

    @Override
    public double getArea() {
        return (topSide+bottomSide)*height/2;
    }

    public boolean validate() {
        return topSide>0&&height>0&&bottomSide>0;
    }
}
class Ball extends Circle{
 
    public Ball(double radius) {
        super(radius);
        // TODO Auto-generated constructor stub
    }
    @Override
    public double getArea(){
        return 4 * super.getRadius() * super.getRadius() * Math.PI;
    }
    public double getVolume(){
        return 4.0 / 3.0 * Math.PI * Math.pow(super.getRadius(), 3);
    }
}

class Box extends Rectangle{
    public Box(double length, double width) {
        super(length, width);
        // TODO Auto-generated constructor stub
    }
    private double height;
    
    
    public void setHeight(double height){
            this.height = height;
    }
    public double getHeight(){
        return height;
    }


}
class Card{
    private String name;
    private double area;
    void setname(String name) {
        this.name=name;
    }
    String getname() {
        return this.name;
    }
    void setArea(double area) {
        this.area=area;
    }
    double getArea() {
        return this.area;
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList <Card> card =new ArrayList<>();
        ArrayList <Card> card1 =new ArrayList<>();
        ArrayList <Card> card2 =new ArrayList<>();
        ArrayList <Card> card3 =new ArrayList<>();
        ArrayList <Card> card4 =new ArrayList<>();
        ArrayList  num =new ArrayList();
        
        int number=input.nextInt();
        if(number==0) {
            System.out.println("Wrong Format");
        System.exit(0);}
        while(number != 0){
            if(number < 0 || number > 4){
                System.out.println("Wrong Format");
                System.exit(0);
            }
            num.add(number);
            number = input.nextInt();
        }
        for(int i = 0 ; i<num.size();i++){
        
        
        switch((int)num.get(i)) {
        case 1: 
                    Card c1=new Card();
                Circle c=new  Circle(input.nextDouble());
                if(c.validate()) {
                    c1.setname("Circle");
                    c1.setArea(c.getArea());
                    card.add(c1);
                   card1.add(c1);
                }
                else {
                   System.out.println("Wrong Format");
                    System.exit(0);
                }break;
            
        case 2:
            Card c2=new Card();    
            Rectangle r=new Rectangle(input.nextDouble(),input.nextDouble());
            if(r.validate()) {
                 c2.setname("Rectangle");
                 c2.setArea(r.getArea());
                 card.add(c2);
                 card2.add(c2);     
            }
            else {
                System.out.println("Wrong Format");
                System.exit(0);
               
           }break;
        case 3:
            Card c3=new Card();
            Triangle  t=new Triangle(input.nextDouble(),input.nextDouble(),input.nextDouble());
               if(t.validate()) {
                   c3.setname("Triangle");
                   c3.setArea(t.getArea());
                   card.add(c3);
                   card3.add(c3);   
               }
               else {
                  System.out.println("Wrong Format");
                    System.exit(0);
               }break;
        case 4:
            Card c4=new Card();
            Trapezoid tr =new Trapezoid(input.nextDouble(),input.nextDouble(),input.nextDouble());
             if(tr.validate()) {
                   c4.setname("Trapezoid");
                   c4.setArea(tr.getArea());
                   card.add(c4);
                   card4.add(c4);  
             }
               else {
                  System.out.println("Wrong Format");
                    System.exit(0);
               }break;
        }
        }
        System.out.println("The original list:");
        System.out.print("[");
        for (Card cards : card) {
            System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());            
        }
        System.out.print("]");
        System.out.println();
        System.out.println("The Separated List:");
       System.out.print("[");
        for (Card cards : card1) {
            System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
        }
        System.out.print("]");
        System.out.print("[");
        for (Card cards : card2) {
            System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
        }
        System.out.print("]");
        System.out.print("[");
        for (Card cards : card3) {
            System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
        }
        System.out.print("]");
        System.out.print("[");
        for (Card cards : card4) {
            System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
        }
        System.out.print("]");
        System.out.println();
      System.out.println("The Separated sorted List:");
      Collections.sort(card, new Comparator<Card>() {
             
            @Override
            public int compare(Card o1, Card o2) {
                // 升序
                //return o1.getAge()-o2.getAge();
                //return new Double(o1.getArea()).compareTo(new Double(o2.getArea()));
                // 降序
                // return o2.getAge()-o1.getAge();
                 return new Double(o2.getArea()).compareTo(new Double(o1.getArea()));
            }
        });
      Collections.sort(card1, new Comparator<Card>() {          
          @Override
          public int compare(Card o1, Card o2) {
               return new Double(o2.getArea()).compareTo(new Double(o1.getArea()));
          }
      });
      Collections.sort(card2, new Comparator<Card>() {          
          @Override
          public int compare(Card o1, Card o2) {
               return new Double(o2.getArea()).compareTo(new Double(o1.getArea()));
          }
      });
      Collections.sort(card3, new Comparator<Card>() {          
          @Override
          public int compare(Card o1, Card o2) {
               return new Double(o2.getArea()).compareTo(new Double(o1.getArea()));
          }
      });
      Collections.sort(card4, new Comparator<Card>() {          
          @Override
          public int compare(Card o1, Card o2) {
               return new Double(o2.getArea()).compareTo(new Double(o1.getArea()));
          }
      });
      System.out.print("[");
      for (Card cards : card1) {
          System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
      }
      System.out.print("]");
      System.out.print("[");
      for (Card cards : card2) {
          System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
      }
      System.out.print("]");
      System.out.print("[");
      for (Card cards : card3) {
          System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
      }
      System.out.print("]");
      System.out.print("[");
      for (Card cards : card4) {
          System.out.printf(cards.getname()+":"+"%.2f"+" ",cards.getArea());       
      }
      System.out.print("]");
     double sum1 = 0;//面积总和
          for (Card cards : card1) {
            sum1+=cards.getArea();
             
         }
         double sum2 = 0;//面积总和
         for (Card cards : card2) {
           sum2+=cards.getArea();
            
        }
         double sum3 = 0;//面积总和
          for (Card cards : card3) {
            sum3+=cards.getArea();
             
         }
         double sum4 = 0;//面积总和
         for (Card cards : card4) {
           sum4+=cards.getArea();
            
        }
        double sum=sum1;
        if(sum<sum2)
            sum=sum2;
        if(sum<sum3)
            sum=sum3;
        if(sum<sum4)
            sum=sum4;
         System.out.println();
         System.out.printf("The max area:%.2f\n",sum);
    }          
}

 

 

沿袭作业 7-1,本次作业主要对卡片(Card)进行分组游戏,其规则为随机发放一些卡片给学生, 卡片仍然分为四种形状:圆形(Circle)、矩形(Rectangle)、三角形(Triangle)及梯形(Trapezoid), 并给出各种卡片的相应参数,要求学生首先根据卡片类型将所有卡片进行分组(一个类型分为一组, 所以最多四组),然后能够对每组内的卡片根据面积值从大到小进行排序,同时求出该组内所有卡片 的面积之和,最后求出每组卡片面积之和中的最大值。输出分组后的图形类型及面积,格式为“[圆形分组各图形类型及面积][矩形分组各图形类型 及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积]”,各组内格式为“图形 名称:面积值”。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出; ➢ 各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出; ➢ 各组中面积之和的最大值输出,格式为“The max area:面积值”

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

首先是对输入的数据进行按行分离

Scanner input=new Scanner(System.in);
String s=input.nextLine();
WithDraw m=new WithDraw();
while(!s.equals("#")) {
String[] arr=s.split("\\s+");

再是对于只是查询业务的进行分开对于不同的业务进行具体分类再对用户数据进行一个存储不过最复杂的是银行卡比对同一账户可以有多个卡号在比对银行以及账户时添加了内部类其他的就是一个一个功能慢慢实现以及自己不断地调试

 

 

 

 

 

import java.util.*;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input=new Scanner(System.in);
        String s=input.nextLine();
        WithDraw m=new WithDraw();
        while(!s.equals("#")) {
            String[] arr=s.split("\\s+");
                if(arr.length==1) {
                    for(int i=0;i<arr.length;i++) {
                    
                        double x=m.account(arr[0],m).getbalance();    
                        System.out.printf("¥%.2f",x);
                        System.out.println();
                        
                    
                    }                
            
            }
            else if(arr.length==4) {
                if(m.cardNa(arr[0])) {
                    if(m.ATM(arr[2])) {
                        if(arr[1].equals("88888888")) {
                            
                            
                            if(m.amount(arr[3],m.account(arr[0],m))) {
                                
                                if(m.ATMID(arr[2],m.user(arr[0],m))) {
                                    m.showResult(arr[2], arr[3], m.user(arr[0],m), m.account(arr[0],m));
                                }
                                else{
                                    System.out.println("Sorry,cross-bank withdrawal is not supported.");
                                    
                                    System.exit(0);
                                }
                            }
                            else{
                                System.out.println("Sorry,your account balance is insufficient.");
                                System.exit(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);
                }
            }        
             s=input.nextLine();                          
        }
    }
}
 class WithDraw{
    UP up=new UP();
    int flag=0;
    boolean cardNa(String s) {
        String str="6217000010041315709|6217000010041315715|6217000010041315718|6217000010051320007|6222081502001312389|6222081502001312390|6222081502001312399|6222081502001312400|6222081502051320785|6222081502051320786";
        String str2="6217000010041315709|6217000010041315715|6217000010041315718|6217000010051320007";
        if(!s.matches(str2)) {
            flag=1;
        }
        boolean card = s.matches(str);
        return card;
    }
    boolean ATM(String s) {
        if(s.equals("01")||s.equals("02")||s.equals("03")||s.equals("04")||s.equals("05")||s.equals("06"))
            return true;
        else
            return false;
    }
    boolean ATMID(String s,User a) {
        if(a.getBank().equals("中国建设银行")) {
            if(s.equals("01")||s.equals("02")||s.equals("03")||s.equals("04"))
                return true;
            else
                return false;
        }
        else {
            if(s.equals("05")||s.equals("06"))
                return true;
            else
                return false;
        }
    }
    Account account(String s,WithDraw a) {
        if(s.equals("6217000010041315709"))
            return a.up.CCB.user1.a1;
        else if(s.equals("6217000010041315715")) 
            return a.up.CCB.user1.a1;
        else if(s.equals("6217000010041315718"))
            return a.up.CCB.user1.a2;
        else if(s.equals("6217000010051320007"))
            return a.up.CCB.user2.a1;
        else if(s.equals("6222081502001312389"))
            return a.up.ICBC.user1.a1;
        else if(s.equals("6222081502001312390"))
            return a.up.ICBC.user1.a2;
        else if(s.equals("6222081502001312399"))
            return a.up.ICBC.user1.a3;
        else if(s.equals("6222081502001312400"))
            return a.up.ICBC.user1.a3;
        else if(s.equals("6222081502051320785"))
            return a.up.ICBC.user2.a1;
        else 
            return a.up.ICBC.user2.a2;
    }
    User user(String s,WithDraw a) {
        if(s.equals("6217000010041315709"))
            return a.up.CCB.user1;
        else if(s.equals("6217000010041315715")) 
            return a.up.CCB.user1;
        else if(s.equals("6217000010041315718"))
            return a.up.CCB.user1;
        else if(s.equals("6217000010051320007"))
            return a.up.CCB.user2;
        else if(s.equals("6222081502001312389"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502001312390"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502001312399"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502001312400"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502051320785"))
            return a.up.ICBC.user2;
        else 
            return a.up.ICBC.user2;
    }
    boolean amount(String s,Account account) {
        double x=Double.parseDouble(s);
        if(x<account.balance)
            return true;
        else
            return false;
    }
    void showResult(String a ,String b,User c,Account d) {
        double x=Double.parseDouble(b);
        double y=d.balance-x;
        d.setBalance(y);
        if(x<0) {
        System.out.printf(c.getName()+"在"+c.getBank()+"的"+a+"号ATM机上存款¥"+"%.2f",-x);
        System.out.println();
        }
        else {
            System.out.printf(c.getName()+"在"+c.getBank()+"的"+a+"号ATM机上取款¥"+"%.2f",x);
            System.out.println();
        }
        System.out.printf("当前余额为¥"+"%.2f",y);
        System.out.println();
    }
}

 class UP
{
    int flag=0;
    Bank CCB=new Bank();
    Bank ICBC=new Bank();
    public  UP() {
        CCB.user1.setName("杨过");
        CCB.user2.setName("郭靖");
        CCB.user1.setBank("中国建设银行");
        CCB.user2.setBank("中国建设银行");
        CCB.user1.a1.one.setCard("6217000010041315709");
        CCB.user1.a1.two.setCard("6217000010041315715");
        CCB.user1.a2.one.setCard("6217000010041315718");
        CCB.user2.a1.one.setCard("6217000010051320007");

        ICBC.user1.setName("张无忌");
        ICBC.user2.setName("韦小宝");
        ICBC.user1.setBank("中国工商银行");
        ICBC.user2.setBank("中国工商银行");
        ICBC.user1.a1.one.setCard("6222081502001312389");
        ICBC.user1.a2.one.setCard("6222081502001312390");
        ICBC.user1.a3.one.setCard("6222081502001312399");
        ICBC.user1.a3.two.setCard("6222081502001312400");
        ICBC.user2.a1.one.setCard("6222081502051320785");
        ICBC.user2.a2.one.setCard("6222081502051320786");
    }
}
 class User{
     String name="";
     int flag=0;
    Account a1=new Account();
    Account  a2=new Account();
    Account a3=new Account();
    String bank="";
    void setBank(String a) {
        this.bank=a;
    }
    String getBank() {
        return bank;}
    void setName(String name) {
        this.name=name;
    }
    String getName() {
        return name;}
    
}
 class Bank{
     int flag=0;
    User user1=new User();
    User user2=new User();
    ATM ATM=new ATM();
    void setUser1(User user)
    {
        user1=user;
    }
    User getUser1() {
        return user1;
    }
    User getUser2() {
        return user2;
    }
}

 class ATM{
     int flag=0;
    String number1;
    String number2;
    String number3;
    String number4;
}
 class Account{
     int flag=0;
    String account;
    BK one=new BK();
    BK two=new BK();
    double balance=10000.00;
    void setAccount(String account) {
        this.account=account;
    }
    String getAccount() {
        return account;
    }
    void setBalance(double balance) {
        this.balance=balance;
    }
    double getbalance() {
        return balance;
    }
}
 class BK{
     int flag=0;
    String card;
    void setCard(String card) {
        this.card=card;
    }
    String getCard() {
        return card;
    }
}
import java.util.*;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner input=new Scanner(System.in);
        String s=input.nextLine();
        WithDraw m=new WithDraw();
        while(!s.equals("#")) {
            String[] arr=s.split("\\s+");
                if(arr.length==1) {
                    for(int i=0;i<arr.length;i++) {
                    if( m.Account(arr[0],m).flag==0) {
                        double x=m.Account(arr[0],m).getbalance();    
                        System.out.printf("业务:查询余额 ¥%.2f",x);
                        System.out.println();
                    }    
                    else {
                        double x=m.Account(arr[0],m).getbalance2();    
                        System.out.printf("业务:查询余额 ¥%.2f",x-50000);
                        System.out.println();
                    }
                    }                
            
            }
            else if(arr.length==4) {
                if(m.CardNa(arr[0])) {
                    if(m.ATM(arr[2])) {
                        if(arr[1].equals("88888888")) {
                            
                            
                            if(m.Amount(arr[3],m.Account(arr[0],m))) {
        
                                    m.ShowResult(arr[2], arr[3], m.User(arr[0],m), m.Account(arr[0],m),m.ATMID(arr[2],m.User(arr[0],m)),m.ATMName(arr[2]));

                        
                            }
                            else{
                                System.out.println("Sorry,your account balance is insufficient.");
                                System.exit(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);
                }
            }        
             s=input.nextLine();                          
        }
    }
}
 class WithDraw{
    UP up=new UP();
    int flag=0;
    boolean CardNa(String s) {
        String str="6217000010041315709|6217000010041315715|6217000010041315718|6217000010051320007|6222081502001312389|6222081502001312390|6222081502001312399|6222081502001312400|6222081502051320785|6222081502051320786|6640000010045442002|6640000010045442003|6640000010045441009|6630000010033431001|6630000010033431008";
        String str2="6217000010041315709|6217000010041315715|6217000010041315718|6217000010051320007";
        if(!s.matches(str2)) {
            flag=1;
        }
        boolean card = s.matches(str);
        return card;
    }
    boolean ATM(String s) {
        
        if(s.equals("01")||s.equals("02")||s.equals("03")||s.equals("04")||s.equals("05")||s.equals("06")||s.equals("07")||s.equals("08")||s.equals("09")||s.equals("10")||s.equals("11"))
            return true;
        else
            return false;
    }
    String ATMName(String s) {
        if(s.equals("01")||s.equals("02")||s.equals("03")||s.equals("04"))
            return "中国建设银行";
        else if(s.equals("05")||s.equals("06"))
            return "中国工商银行";
        else 
            return "中国农业银行";
    }
double ATMID(String s,User a) {
        if(a.getBank().equals("中国建设银行")) {
            if(s.equals("01")||s.equals("02")||s.equals("03")||s.equals("04"))
                return 1.00;
            else if (s.equals("05")||s.equals("06"))
                return 1.03;
            else
                return 1.04;
        }
        else if(a.getBank().equals("中国工商银行"))  {
            if(s.equals("01")||s.equals("02")||s.equals("03")||s.equals("04"))
                return 1.02;
            else if (s.equals("05")||s.equals("06"))
                return 1.00;
            else
                return 1.04;
        }
        else {
            if(s.equals("01")||s.equals("02")||s.equals("03")||s.equals("04"))
                return 1.02;
            else if (s.equals("05")||s.equals("06"))
                return 1.03;
            else
                return 1.00;
        }
    }
    Account Account(String s,WithDraw a) {
        if(s.equals("6217000010041315709"))
            return a.up.CCB.user1.a1;
        else if(s.equals("6217000010041315715")) 
            return a.up.CCB.user1.a1;
        else if(s.equals("6217000010041315718"))
            return a.up.CCB.user1.a2;
        else if(s.equals("6217000010051320007"))
            return a.up.CCB.user2.a1;
        else if(s.equals("6222081502001312389"))
            return a.up.ICBC.user1.a1;
        else if(s.equals("6222081502001312390"))
            return a.up.ICBC.user1.a2;
        else if(s.equals("6222081502001312399"))
            return a.up.ICBC.user1.a3;
        else if(s.equals("6222081502001312400"))
            return a.up.ICBC.user1.a3;
        else if(s.equals("6222081502051320785"))
            return a.up.ICBC.user2.a1;
        else if(s.equals("6222081502051320786"))
            return a.up.ICBC.user2.a2;
        else if(s.equals("6640000010045442002"))
            return a.up.CCB.user3.a1;
        else if(s.equals("6640000010045442003"))
            return a.up.CCB.user3.a1;
        else if(s.equals("6640000010045441009"))
            return a.up.ICBC.user3.a1;
        else if(s.equals("6630000010033431001"))
            return a.up.ABC.user1.a1;
        else
            return a.up.ABC.user2.a1;
    }
    User User(String s,WithDraw a) {
        if(s.equals("6217000010041315709"))
            return a.up.CCB.user1;
        else if(s.equals("6217000010041315715")) 
            return a.up.CCB.user1;
        else if(s.equals("6217000010041315718"))
            return a.up.CCB.user1;
        else if(s.equals("6217000010051320007"))
            return a.up.CCB.user2;
        else if(s.equals("6222081502001312389"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502001312390"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502001312399"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502001312400"))
            return a.up.ICBC.user1;
        else if(s.equals("6222081502051320785"))
            return a.up.ICBC.user2;
        else if(s.equals("6222081502051320786"))
            return a.up.ICBC.user2;
        else if(s.equals("6640000010045442002"))
            return a.up.CCB.user3;
        else if(s.equals("6640000010045442003"))
            return a.up.CCB.user3;
        else if(s.equals("6640000010045441009"))
            return a.up.ICBC.user3;
        else if(s.equals("6630000010033431001"))
            return a.up.ABC.user1;
        else
            return a.up.ABC.user2;
    }
    boolean Amount(String s,Account account) {
        double x=Double.parseDouble(s);
        if(account.flag==0) {
        if(x<account.balance&&account.balance>=0)
            return true;
        else
            return false;
        }
        else
        {
            if(x<account.balance2&&account.balance2>=0)
                return true;
            else
                return false;
        }
    }
    void ShowResult(String a ,String b,User c,Account d,double e,String name) {
        double x=Double.parseDouble(b);
        if(d.flag==0) {
        double y=d.balance-x*e;
        d.setBalance(y);
        if(x<0) {
        System.out.printf("业务:存款 "+c.getName()+"在"+name+"的"+a+"号ATM机上存款¥"+"%.2f",-x);
        System.out.println();
        }
        else {
            System.out.printf("业务:取款 "+c.getName()+"在"+name+"的"+a+"号ATM机上取款¥"+"%.2f",x);
            System.out.println();
        }
        System.out.printf("当前余额为¥"+"%.2f",y);
        System.out.println();
    }
    
    else {
        double y;
        if(d.balance2<50000) {
             y = d.balance2-x*1.05;
                if(y<0) {
                    System.out.println("Sorry,your account balance is insufficient.");
                    System.exit(0);
                }
             d.setBalance2(y);
                if(x<0) {
                System.out.printf("业务:存款 "+c.getName()+"在"+name+"的"+a+"号ATM机上存款¥"+"%.2f",-x);
                System.out.println();
                }
                else {
                    System.out.printf("业务:取款 "+c.getName()+"在"+name+"的"+a+"号ATM机上取款¥"+"%.2f",x);
                    System.out.println();
                }
                System.out.printf("当前余额为¥"+"%.2f",y-50000);
                System.out.println();
        }
        else {
            if(d.balance2-x*e<=50000) {
            y=d.balance2-(d.balance2-50000)*e-(x-(d.balance2-50000))*(0.05+e);
            if(y<0) {
                System.out.println("Sorry,your account balance is insufficient.");
                System.exit(0);
            }
             d.setBalance2(y);
                if(x<0) {
                System.out.printf("业务:存款 "+c.getName()+"在"+name+"的"+a+"号ATM机上存款¥"+"%.2f",-x);
                System.out.println();
                }
                else {
                    System.out.printf("业务:取款 "+c.getName()+"在"+name+"的"+a+"号ATM机上取款¥"+"%.2f",x);
                    System.out.println();
                }
                System.out.printf("当前余额为¥"+"%.2f",y-50000);
                System.out.println();
            
            }

            else {
                y=d.balance2-x*e;
                if(y<0) {
                    System.out.println("Sorry,your account balance is insufficient.");
                    System.exit(0);
                }
                d.setBalance2(y);
                if(x<0) {
                System.out.printf("业务:存款 "+c.getName()+"在"+name+"的"+a+"号ATM机上存款¥"+"%.2f",-x);
                System.out.println();
                }
                else {
                    System.out.printf("业务:取款 "+c.getName()+"在"+name+"的"+a+"号ATM机上取款¥"+"%.2f",x);
                    System.out.println();
                }
                System.out.printf("当前余额为¥"+"%.2f",y-50000);
                System.out.println();
            }    
        }
    }
 }
 }
 class UP
{
    int flag=0;
    Bank CCB=new Bank();
    Bank ICBC=new Bank();
    Bank ABC=new Bank();
    
    public  UP() {
        CCB.user1.setName("杨过");
        CCB.user2.setName("郭靖");
        CCB.user3.setName("张三丰");
        CCB.user3.a1.setFlag(1);
        
        CCB.user1.setBank("中国建设银行");
        CCB.user2.setBank("中国建设银行");
        CCB.user3.setBank("中国建设银行");
        CCB.user1.a1.one.setCard("6217000010041315709");
        CCB.user1.a1.two.setCard("6217000010041315715");
        CCB.user1.a2.one.setCard("6217000010041315718");
        CCB.user2.a1.one.setCard("6217000010051320007");
        CCB.user3.a1.one.setCard("6640000010045442002");
        CCB.user3.a1.two.setCard("6640000010045442003");

        ICBC.user1.setName("张无忌");
        ICBC.user2.setName("韦小宝");
        ICBC.user3.setName("令狐冲");
        ICBC.user3.a1.setFlag(1);
        ICBC.user1.setBank("中国工商银行");
        ICBC.user2.setBank("中国工商银行");
        ICBC.user3.setBank("中国工商银行");
        ICBC.user1.a1.one.setCard("6222081502001312389");
        ICBC.user1.a2.one.setCard("6222081502001312390");
        ICBC.user1.a3.one.setCard("6222081502001312399");
        ICBC.user1.a3.two.setCard("6222081502001312400");
        ICBC.user2.a1.one.setCard("6222081502051320785");
        ICBC.user2.a2.one.setCard("6222081502051320786");
        ICBC.user3.a1.one.setCard("6640000010045441009");
        
        ABC.user1.setName("乔峰");
        ABC.user2.setName("洪七公");
        ABC.user1.a1.setFlag(1);
        ABC.user2.a1.setFlag(1);
        ABC.user1.setBank("中国农业银行");
        ABC.user2.setBank("中国农业银行");
        ABC.user1.a1.one.setCard("6630000010033431001");
        ABC.user2.a1.one.setCard("6630000010033431008");
    }
}
 class User{
     String name="";
     int flag=0;
    Account a1=new Account();
    Account  a2=new Account();
    Account a3=new Account();
    String bank="";
    void setBank(String a) {
        this.bank=a;
    }
    String getBank() {
        return bank;}
    void setName(String name) {
        this.name=name;
    }
    String getName() {
        return name;}
    
}
 class Bank{
     int flag=0;
    User user1=new User();
    User user2=new User();
    User user3=new User();
    ATM ATM=new ATM();
    void setUser1(User user)
    {
        user1=user;
    }
    User getUser1() {
        return user1;
    }
    User getUser2() {
        return user2;
    }
}

 class ATM{
     int flag=0;
    String number1;
    String number2;
    String number3;
    String number4;
}
 class Account{
     int flag=0;
    String account;
    BK one=new BK();
    BK two=new BK();
    double balance=10000.00;
    double balance2=60000.00;
    void setFlag(int i) {
        this.flag=i;
    }
    int getFlag() {
        return flag;
    }
    void setAccount(String account) {
        this.account=account;
    }
    String getAccount() {
        return account;
    }
    void setBalance(double balance) {
        this.balance=balance;
    }
    double getbalance() {
        return balance;
    }
    void setBalance2(double balance2) {
        this.balance2=balance2;
    }
    double getbalance2() {
        return balance2;
    }
}
 class BK{
     int flag=0;
    String card;
    void setCard(String card) {
        this.card=card;
    }
    String getCard() {
        return card;
    }
}

 

踩坑心得:


在题集7中的卡片分组游戏代码中在运用Arraylist中将自定义的Arraylist中的自定义的元素对其中的元素排序进行方法重写

ArrayList的sort方法重写:

 

当ArrayList中存放的为含有多个成员变量的数据类型时,在进行sort排序时要重写比较方法,一般都写在这个数据类型类的内部如:

import java.util.*;
public class Text {
    static ArrayList<node> a=new ArrayList<node>();
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
        node n1=new node();
        n1.end=5;
        node n2=new node();
        n2.end=6;
        node n3=new node();
        n3.end=3;
        node n4=new node();
        n4.end=1;
        node n5=new node();
        n5.end=7;
        a.add(n1);
        a.add(n2);
        a.add(n3);
        a.add(n4);
        a.add(n5);//在a中加入node类型的五个数
        for(int i=0;i<a.size();i++)//输出未排序的
        {
            System.out.println(a.get(i).end+"  ");
        }
        a.sort(null);//排序
        for(int i=0;i<a.size();i++)//输出排序之后的
        {
            System.out.println(a.get(i).end+"  ");
        }
    }
    static class node implements Comparable<node>
    {
        int start;
        int end;
        node(){}
        @Override
        public int compareTo(node n) {//重写比较方法
            // TODO Auto-generated method stub
            int i=end-n.end;
            if(i<0)
                    return -1;
            else if(i>0)
                return 1;
            return 0;
        };
        
    }

}

这只是其中的一个例子 大部分都是可以是这种方法进行重写

改进建议 :

 

  • 多使用Java中的思想封装啊多态啊接口啊理解其中的优缺点以及适用性;
  • 对于很多未知的功能查阅资料 最快的还是看实例 有时候一大堆文字可能看不懂这个时候需要我们通过实例去理解以及自己去设断点去调试;
  • 对于第七次的第二个卡片的题目我认为在相同的类型的图形面积进行比较这一块可以再新建一个arraylist进行自定义排序这样就省略了一次一次去必 让代码看上去更加的整洁了;

总结:

1.对于复杂的功能有了一定的规划能力以及对于程序的整体构思会比刚学进步很多;

2.对于编程应该有默认遵守的规则,在自己的编程过程中也犯过很多也花费了大量时间去修改自己代码的错误;

3.功能实现要慢慢来 不能急还有有些功能不要一想不出来就去查阅 不然很容易被思维局限住,先入为主的代入进去 后面完成一些别的功能就会更加复杂花费时间 。还是要因题而异,对功能进行规划;

4.对于编程整体的思想还有待学习以及非常需要细心;

 

posted @ 2021-06-20 20:15  AverageJoe24  阅读(48)  评论(0)    收藏  举报