饼干妹妹的第三次博客作业

一、三次作业的知识点、题量、难度

 考察的知识点

  主要考察了对类的结构设计的理解,以及在处理输入时的方法。

 作业的题量与难度

  三次题目集的内容感觉在熟悉了Java之后并不难,除了在思考类的结构设计时会有一点难度,在其他编码方面感觉没有什么困难。

二、设计与分析

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

    我这里先把源码贴上来:

    题目集7(7-1):

import java.util.*;

class Card implements Comparable<Card>{
    private Shape shape;
    Card() {
        
    }
    Card(Shape shape) {
        this.shape = shape;
    }
    public Shape getShape() {
        return shape;
    }
    public void setShape(Shape shape) {
        this.shape = shape;
    }
    @Override
    public int compareTo(Card card) {
        if(shape.getArea() < card.getShape().getArea())
            return 1;
        else if(shape.getArea() > card.getShape().getArea())
            return -1;
        return 0;
    }
}

abstract class Shape {
    private String shapeName;
    Shape() {
        
    }
    Shape(String shapeName) {
        this.shapeName = shapeName;
    }
    public String getShapeName() {
        return shapeName;
    }
    public void setShapeName(String shapeName) {
        this.shapeName = shapeName;
    }
    public double getArea() {
        return 0;
    }
    public boolean validate() {
        return true;
    }
    public String toString() {
        return "lin";
    }
}

class Trapezoid extends Shape {
    private double topSide;
    private double bottonSide;
    private double height;
    Trapezoid() {
        
    }
    Trapezoid(double topSide,double bottonSide,double height) {
        this.topSide = topSide;
        this.bottonSide = bottonSide;
        this.height = height;
        super.setShapeName("Trapezoid");
    }
    public double getTopSide() {
        return topSide;
    }
    public void setTopSide(double topSide) {
        this.topSide = topSide;
    }
    public double getBottonSide() {
        return bottonSide;
    }
    public void setBottonSide(double bottonSide) {
        this.bottonSide = bottonSide;
    }
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this.height = height;
    }
    @Override
    public double getArea() {
        return (this.topSide + this.bottonSide)*this.height/2;
    }
    @Override
    public boolean validate() {
        if(this.topSide <= 0 || this.bottonSide <= 0 || this.height <= 0)
            return false;
        return true;
    }
}

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

class Rectangle extends Shape {
    private double width;
    private double length;
    Rectangle() {
        
    }
    Rectangle(double width,double length) {
        this.width = width;
        this.length = length;
        super.setShapeName("Rectangle");
    }
    public double getWidth() {
        return width;
    }
    public void setWidth(double width) {
        this.width = width;
    }
    public double getLength() {
        return length;
    }
    public void setLength(double length) {
        this.length = length;
    }
    @Override
    public double getArea() {
        return this.width*this.length;
    }
    @Override
    public boolean validate() {
        if(this.width <= 0 || this.length <= 0)
            return false;
        return true;
    }
}

class Triangle extends Shape {
    private double side1;
    private double side2;
    private double side3;
    Triangle() {
        
    }
    Triangle(double side1,double side2,double side3) {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
        super.setShapeName("Triangle");
    }
    @Override
    public double getArea() {
        return (1.0/4.0)*Math.sqrt((this.side1+this.side2+this.side3)*(this.side1+this.side2-this.side3)*(this.side1+this.side3-this.side2)*(this.side2+this.side3-this.side1));
    }
    @Override
    public boolean validate() {
        if(this.side1 + this.side2 <= this.side3 || this.side1 + this.side3 <= this.side2 || this.side2 + this.side3 <= this.side1)
            return false;
        return true;
    }
}

class DealCardList {
    Scanner input = new Scanner(System.in);
    private ArrayList<Card> cardlist = new ArrayList<Card>();
    DealCardList() {
        
    }
    DealCardList(ArrayList<Integer> list) {
        for(int i = 0;i < list.size();i++) {
            switch(list.get(i)) {
                case 1: cardlist.add(new Card( new Circle( Main.input.nextDouble() ) ));break;
                case 2: cardlist.add(new Card( new Rectangle( Main.input.nextDouble(),Main.input.nextDouble() ) ));break;
                case 3: cardlist.add(new Card( new Triangle( Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble() ) ));break;
                case 4: cardlist.add(new Card( new Trapezoid( Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble() ) ));break;
            }
        }
    }
    public boolean validate() {
        for(int i = 0;i < cardlist.size();i++) {
            if(!cardlist.get(i).getShape().validate())
                return false;
        }
        return true;
    }
    public void cardSort() {
//        Comparator m = new Comparator<Card>() {
//            @Override
//            public int compare(Card card1,Card card2) {
//                if(card1.getShape().getArea() < card2.getShape().getArea())
//                    return 1;
//                else if(card1.getShape().getArea() > card2.getShape().getArea())
//                    return -1;
//                return 0;
//            }
//        };
//        cardlist.sort(m);
        Collections.sort(cardlist);
    }
    public double getAllArea() {
        double num = 0;
        for(int i = 0;i < cardlist.size();i++) {
            num += cardlist.get(i).getShape().getArea();
        }
        return num;
    }
    public void showResult() {
        System.out.println("The original list:");
        for(int i = 0;i < cardlist.size();i++)
            System.out.print(cardlist.get(i).getShape().getShapeName() + ":" + String.format("%.2f",cardlist.get(i).getShape().getArea()) + " ");
        cardSort();
        System.out.println("\nThe sorted list:");
        for(int i = 0;i < cardlist.size();i++)
            System.out.print(cardlist.get(i).getShape().getShapeName() + ":" + String.format("%.2f",cardlist.get(i).getShape().getArea()) + " ");
        System.out.println("\nSum of area:" + String.format("%.2f",getAllArea()));
    }
}

public class Main {
//在Main类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接
//使用Main.input.next…即可(避免采坑)
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args){
        ArrayList<Integer> list = new ArrayList<Integer>(); 
        int num = input.nextInt();
        while(num != 0){
            if(num < 0 || num > 4){
                System.out.println("Wrong Format");
                System.exit(0);
            }
        list.add(num);
        num = input.nextInt();
        }
        DealCardList dealCardList = new DealCardList(list);
        if(!dealCardList.validate()){
            System.out.println("Wrong Format");
            System.exit(0);
        }
        dealCardList.showResult();
        input.close();
    }
}

    类图设计:

 

    题目集7(7-2):

import java.util.*;

class Card implements Comparable<Card>{
    private Shape shape;
    Card() {
        
    }
    Card(Shape shape) {
        this.shape = shape;
    }
    public Shape getShape() {
        return shape;
    }
    public void setShape(Shape shape) {
        this.shape = shape;
    }
    @Override
    public int compareTo(Card card) {
        if(shape.getArea() < card.getShape().getArea())
            return 1;
        else if(shape.getArea() > card.getShape().getArea())
            return -1;
        return 0;
    }
}

abstract class Shape {
    private String shapeName;
    Shape() {
        
    }
    Shape(String shapeName) {
        this.shapeName = shapeName;
    }
    public String getShapeName() {
        return shapeName;
    }
    public void setShapeName(String shapeName) {
        this.shapeName = shapeName;
    }
    public double getArea() {
        return 0;
    }
    public boolean validate() {
        return true;
    }
    public String toString() {
        return "lin";
    }
}

class Trapezoid extends Shape {
    private double topSide;
    private double bottonSide;
    private double height;
    Trapezoid() {
        
    }
    Trapezoid(double topSide,double bottonSide,double height) {
        this.topSide = topSide;
        this.bottonSide = bottonSide;
        this.height = height;
        super.setShapeName("Trapezoid");
    }
    public double getTopSide() {
        return topSide;
    }
    public void setTopSide(double topSide) {
        this.topSide = topSide;
    }
    public double getBottonSide() {
        return bottonSide;
    }
    public void setBottonSide(double bottonSide) {
        this.bottonSide = bottonSide;
    }
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        this.height = height;
    }
    @Override
    public double getArea() {
        return (this.topSide + this.bottonSide)*this.height/2;
    }
    @Override
    public boolean validate() {
        if(this.topSide <= 0 || this.bottonSide <= 0 || this.height <= 0)
            return false;
        return true;
    }
}

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

class Rectangle extends Shape {
    private double width;
    private double length;
    Rectangle() {
        
    }
    Rectangle(double width,double length) {
        this.width = width;
        this.length = length;
        super.setShapeName("Rectangle");
    }
    public double getWidth() {
        return width;
    }
    public void setWidth(double width) {
        this.width = width;
    }
    public double getLength() {
        return length;
    }
    public void setLength(double length) {
        this.length = length;
    }
    @Override
    public double getArea() {
        return this.width*this.length;
    }
    @Override
    public boolean validate() {
        if(this.width <= 0 || this.length <= 0)
            return false;
        return true;
    }
}

class Triangle extends Shape {
    private double side1;
    private double side2;
    private double side3;
    Triangle() {
        
    }
    Triangle(double side1,double side2,double side3) {
        this.side1 = side1;
        this.side2 = side2;
        this.side3 = side3;
        super.setShapeName("Triangle");
    }
    @Override
    public double getArea() {
        return (1.0/4.0)*Math.sqrt((this.side1+this.side2+this.side3)*(this.side1+this.side2-this.side3)*(this.side1+this.side3-this.side2)*(this.side2+this.side3-this.side1));
    }
    @Override
    public boolean validate() {
        if(this.side1 + this.side2 <= this.side3 || this.side1 + this.side3 <= this.side2 || this.side2 + this.side3 <= this.side1)
            return false;
        return true;
    }
}

class DealCardList {
    Scanner input = new Scanner(System.in);
    private ArrayList<Card> cardlist = new ArrayList<Card>();
    DealCardList() {
        
    }
    DealCardList(ArrayList<Integer> list) {
        for(int i = 0;i < list.size();i++) {
            switch(list.get(i)) {
                case 1: cardlist.add(new Card( new Circle( Main.input.nextDouble() ) ));break;
                case 2: cardlist.add(new Card( new Rectangle( Main.input.nextDouble(),Main.input.nextDouble() ) ));break;
                case 3: cardlist.add(new Card( new Triangle( Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble() ) ));break;
                case 4: cardlist.add(new Card( new Trapezoid( Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble() ) ));break;
            }
        }
    }
    public boolean validate() {
        if(cardlist.size() == 0)
            return false;
        for(int i = 0;i < cardlist.size();i++) {
            if(!cardlist.get(i).getShape().validate())
                return false;
        }
        return true;
    }
    public void cardSort() {
        Collections.sort(cardlist);
    }
    public double getAllArea() {
        double num = 0;
        for(int i = 0;i < cardlist.size();i++) {
            num += cardlist.get(i).getShape().getArea();
        }
        return num;
    }
    public void showResult(ArrayList<Integer> list) {
        
        System.out.println("The original list:");
        System.out.print("[");
        for(int i = 0;i < cardlist.size();i++) {
            System.out.print(cardlist.get(i).getShape().getShapeName() + ":" + String.format("%.2f",cardlist.get(i).getShape().getArea()) + " ");    
        }
        System.out.print("]");

        ArrayList<Card> card1 = new ArrayList<Card>();
        ArrayList<Card> card2 = new ArrayList<Card>();
        ArrayList<Card> card3 = new ArrayList<Card>();
        ArrayList<Card> card4 = new ArrayList<Card>();
        for(int i = 0;i < list.size();i++) {
            switch(list.get(i)) {
                case 1: card1.add(cardlist.get(i));break;
                case 2: card2.add(cardlist.get(i));break;
                case 3: card3.add(cardlist.get(i));break;
                case 4: card4.add(cardlist.get(i));break;
            }
        }
        System.out.println("\nThe Separated List:");
        System.out.print("[");
        for(int i = 0;i < card1.size();i++) {    
            System.out.print(card1.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card1.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
        System.out.print("[");
        for(int i = 0;i < card2.size();i++) {    
            System.out.print(card2.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card2.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
        System.out.print("[");
        for(int i = 0;i < card3.size();i++) {    
            System.out.print(card3.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card3.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
        System.out.print("[");
        for(int i = 0;i < card4.size();i++) {    
            System.out.print(card4.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card4.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
                
        Comparator m = new Comparator<Card>() {
            @Override
            public int compare(Card card1,Card card2) {
                if(card1.getShape().getArea() < card2.getShape().getArea())
                    return 1;
                else if(card1.getShape().getArea() > card2.getShape().getArea())
                    return -1;
                return 0;
            }
        };
        card1.sort(m);
        card2.sort(m);
        card3.sort(m);
        card4.sort(m);
        System.out.println("\nThe Separated sorted List:");
        System.out.print("[");
        for(int i = 0;i < card1.size();i++) {    
            System.out.print(card1.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card1.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
        System.out.print("[");
        for(int i = 0;i < card2.size();i++) {    
            System.out.print(card2.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card2.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
        System.out.print("[");
        for(int i = 0;i < card3.size();i++) {    
            System.out.print(card3.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card3.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
        System.out.print("[");
        for(int i = 0;i < card4.size();i++) {    
            System.out.print(card4.get(i).getShape().getShapeName() + ":" + String.format("%.2f",card4.get(i).getShape().getArea()) + " ");        
        }
        System.out.print("]");
        
        double num1 = 0;
        double num2 = 0;
        double num3 = 0;
        double num4 = 0;
        for(int i = 0;i < card1.size();i++)
            num1 += card1.get(i).getShape().getArea();
        for(int i = 0;i < card2.size();i++)
            num2 += card2.get(i).getShape().getArea();
        for(int i = 0;i < card3.size();i++)
            num3 += card3.get(i).getShape().getArea();
        for(int i = 0;i < card4.size();i++)
            num4 += card4.get(i).getShape().getArea();
        double num = 0;
        if(num < num1)
            num = num1;
        if(num < num2)
            num = num2;
        if(num < num3)
            num = num3;
        if(num < num4)
            num = num4;
        System.out.println("\nThe max area:" + String.format("%.2f",num));
    }
}

public class Main {
//在Main类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接
//使用Main.input.next…即可(避免采坑)
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args){
        ArrayList<Integer> list = new ArrayList<Integer>(); 
        int num = input.nextInt();
        while(num != 0){
            if(num < 0 || num > 4){
                System.out.println("Wrong Format");
                System.exit(0);
            }
        list.add(num);
        num = input.nextInt();
        }
        DealCardList dealCardList = new DealCardList(list);
        if(!dealCardList.validate()){
            System.out.println("Wrong Format");
            System.exit(0);
        }
        dealCardList.showResult(list);
        input.close();
    }
}

  ②题目集8,题目集9两道ATM仿真题目设计思路分析总结

    老规矩,先贴代码:

    题目集8:

import java.util.*;

public class Main {
    public static Scanner input = new Scanner(System.in);
    public static void main(String[] args)
    {
        StringBuilder a = new StringBuilder();
        String str = new String();
        while(!str.equals("#")) {
            str = input.nextLine();
            a.append("\n").append(str);
        }
        operate s = new operate(a);
        s.caozuo();
    }

}
class Card{
    String cardNumber;
    String password;
    Account account;
    Bank bank;
    public Card()
    {
    }
    public Card(String cardNumber,String password,Account account,Bank bank)
    {
        this.cardNumber=cardNumber;
        this.password=password;
        this.account=account;
        this.bank=bank;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getCardNumber() {
        return cardNumber;
    }
    public void setCardNumber(String cardNumber) {
        this.cardNumber = cardNumber;
    }
    public Account getAccount() {
        return account;
    }
    public void setAccount(Account account) {
        this.account = account;
    }
    public Bank getBank() {
        return bank;
    }
    public void setBank(Bank bank) {
        this.bank = bank;
    }    
}
class Account{
    String accountName;
    String accountNumber;
    double money;
    public Account() {
        
    }
    public Account(String accountName,String accountNumber,double money)
    {        this.money=money;
            this.accountName=accountName;
            this.accountNumber=accountNumber;
    }
    public String getAccountName() {
        return accountName;
    }
    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }
    public String getAccountNumber() {
        return accountNumber;
    }
    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
    
}
class Bank{
    String bankName;
    String[] atm;
    public Bank()
    {
        
    }
    public Bank(String bankName,String[] atm)
    {
        this.bankName=bankName; 
        this.atm=atm;
    }
    public String getBankName() {
        return bankName;
    }
    public void setBankName(String bankName) {
        this.bankName = bankName;
    }
    public String[] getAtm() {
        return atm;
    }
    public void setAtm(String[] atm) {
        this.atm = atm;
    }
}
class operate{
     StringBuilder a;
     ArrayList<Account> accountList;
     String[] atm1 = {"01","02","03","04"};
     Bank jsyh = new Bank("中国建设银行", atm1);
     String[] atm2 = {"05","06"};
     Bank gsyh = new Bank("中国工商银行", atm2);
     Account yang1=new Account("杨过","3217000010041315709",10000);
     Account yang2=new Account("杨过","3217000010041315715",10000);
     Account guo1=new Account("郭靖","3217000010051320007",10000);
     Account zhang1=new Account("张无忌","3222081502001312389",10000);
     Account zhang2=new Account("张无忌","3222081502001312390",10000);
     Account zhang3=new Account("张无忌","3222081502001312399",10000);
     Account wei1=new Account("韦小宝","322208150205132785",10000);
     Account wei2=new Account("韦小宝","322208150205132786",10000);
     Card card1=new Card("6217000010041315709","88888888",yang1,jsyh);
     Card card2=new Card("6217000010041315715","88888888",yang1,jsyh);
     Card card3=new Card("6217000010041315718","88888888",yang2,jsyh);
     Card card4=new Card("6217000010051320007","88888888",guo1,jsyh);
     Card card5=new Card("6222081502001312389","88888888",zhang1,gsyh);
     Card card6=new Card("6222081502001312390","88888888",zhang1,gsyh);
     Card card7=new Card("6222081502001312399","88888888",zhang2,gsyh);
     Card card8=new Card("6222081502001312400","88888888",zhang2,gsyh);
     Card card9=new Card("622208150205132785","88888888",wei1,gsyh);
     Card card10=new Card("622208150205132786","88888888",wei2,gsyh);
     Card[] cardlist= {card1,card2,card3,card4,card5,card6,card7,card8,card9,card10};
     
     public operate(StringBuilder a) {
         this.a = a;
    } 
    public void caozuo()
    {
        
        String s = a.toString();
        String[] str = s.split("\n");
        for(int i = 0;i < str.length;i++) {
            int m=-1;
            String[] str1=str[i].split(" +");
            for(int k=0;k<10;k++)
            { 
                if(cardlist[k].getCardNumber().equals(str1[0]))
                {
                    m=i;
                }    
            }
            if(m==-1)
            {    
                System.out.print("Sorry,this card does not exist.");
                return;
            }
            
            if(str.length==1)
            {
                System.out.print("¥"+cardlist[m].getAccount().getMoney());
                continue;
            }
            
            if(!cardlist[m].getPassword().equals(str[1]))
            {
                System.out.print("Sorry,your password is wrong.");
                return;
            }
            
            
            if(cardlist[m].getAccount().getMoney()<Double.parseDouble(str[3]))    
            {
                System.out.print("Sorry,your account balance is insufficient.");
                return ;
            }
            
            
            int z=-1;
            for(int j=0;j<cardlist[j].getBank().getAtm().length;j++)
            {
                if(cardlist[m].getBank().getAtm()[j].equals(str[2]))
                {
                    z=1;
                }
                else if(z==-1)
                {
                    System.out.print("“Sorry,cross-bank withdrawal is not supported.");
                    return;
                }
            }
            
            if(!str[2].equals("01")&&!str[2].equals("02")&&!str[2].equals("03")&&!str[2].equals("04")&&!str[2].equals("05")&&!str[2].equals("06"))
            {    
                System.out.print("Sorry,the ATM's id is wrong.");
                return;
            }
            
            
            if(Double.parseDouble(str[3])<0)
            {
                System.out.println(cardlist[m].getAccount().getAccountName()+"在"+cardlist[m].getBank().getBankName()+"的"+str[2]+"上存款"+"¥"+Math.abs(Double.parseDouble(str[3])));
                System.out.println("当前余额为¥" + String.format("%.2f", cardlist[m].getAccount().getMoney()));
            }
            
            else if(Double.parseDouble(str[3])>0)
            {
                System.out.println(cardlist[m].getAccount().getAccountName()+"在"+cardlist[m].getBank().getBankName()+"的"+str[2]+"上取款"+"¥"+Math.abs(Double.parseDouble(str[3])));
                System.out.println("当前余额为¥" + String.format("%.2f", cardlist[m].getAccount().getMoney()));
            }
        }    
    }

    public StringBuilder getA() {
        return a;
    }
    public void setA(StringBuilder a) {
        this.a = a;
    }
    
}

 

    题目集9:

import java.util.*;
class Card {
    private String cardNumber;
    private String password;
    private Account account;
    private Bank bank;
    public Card() {
        this.cardNumber = "default cardnumber";
        this.password = "88888888";
    }
    public Card(String cardNumber,String password,Account account,Bank bank) {
        this.cardNumber = cardNumber;
        this.password = password;
        this.account = account;
        this.bank = bank;
    }
    public String getCardNumber() {
        return cardNumber;
    }
    public void setCardNumber(String cardNumber) {
        this.cardNumber = cardNumber;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Account getAccount() {
        return account;
    }
    public void setAccount(Account account) {
        this.account = account;
    }
    public Bank getBank() {
        return bank;
    }
    public void setBank(Bank bank) {
        this.bank = bank;
    }
}

class Account {
    private String accountName;
    private String accountNumber;
    private double balance;
    private String type;
    public Account() {
        this.accountName = "default accountname";
        this.accountNumber = "default accountnumber";
        this.balance = 10000;
    }
    public Account(String accountName,String accountNumber,String type) {
        this.accountName = accountName;
        this.accountNumber = accountNumber;
        this.balance = 10000;
        this.type = type;
        /*
         * for(int i = 0;i < card.length;i++) { //card[i] = new Card(); this.card[i] =
         * card[i]; }
         */
    }
    public String getAccountName() {
        return accountName;
    }
    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }
    public String getAccountNumber() {
        return accountNumber;
    }
    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }
    public double getBalance() {
        return balance;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}

class Bank {
    private String bankName;
    private String[] atm = new String[10];
    private double percent;
    public Bank() {
        this.bankName = "default bankname";
    }
    public Bank(String bankName,String[] atm,double percent) {
        this.bankName = bankName;
        this.atm = atm;
        this.percent = percent;
    }
    public String getBankName() {
        return bankName;
    }
    public void setBankName(String bankName) {
        this.bankName = bankName;
    }
    public String[] getAtm() {
        return atm;
    }
    public void setAtm(String[] atm) {
        this.atm = atm;
    }
    public double getPercent() {
        return percent;
    }
    public void setPercent(double percent) {
        this.percent = percent;
    }
}

class Operate {
    Bank jianshe = new Bank("中国建设银行",new String[] {"01","02","03","04"},0.02);
    Bank gongshang = new Bank("中国工商银行",new String[] {"05","06"},0.03);
    Bank nongye = new Bank("中国农业银行",new String[] {"07","08","09","10","11"},0.04);
    Account yang1 = new Account("杨过","3217000010041315709","借记");
    Account yang2 = new Account("杨过","3217000010041315715","借记");
    Account guo = new Account("郭靖","3217000010051320007","借记");
    Account zhang1 = new Account("张无忌","3222081502001312389","借记");
    Account zhang2 = new Account("张无忌","3222081502001312390","借记");
    Account zhang3 = new Account("张无忌","3222081502001312399","借记");
    Account wei1 = new Account("韦小宝","3222081502051320785","借记");
    Account wei2 = new Account("韦小宝","3222081502051320786","借记");
    Account zhang10 = new Account("张三丰","3640000010045442002","贷记");
    Account ling = new Account("令狐冲","3640000010045441009","贷记");
    Account qiao = new Account("乔峰","3640000010033431001","贷记");
    Account hong = new Account("洪七公","3640000010033431008","贷记");
    Card yangCard1 = new Card("6217000010041315709","88888888",yang1,jianshe);
    Card yangCard2 = new Card("6217000010041315715","88888888",yang1,jianshe);
    Card yangCard3 = new Card("6217000010041315718","88888888",yang2,jianshe);
    Card guoCard = new Card("6217000010051320007","88888888",guo,jianshe);
    Card zhangCard1 = new Card("6222081502001312389","88888888",zhang1,gongshang);
    Card zhangCard2 = new Card("6222081502001312390","88888888",zhang2,gongshang);
    Card zhangCard3 = new Card("6222081502001312399","88888888",zhang3,gongshang);
    Card zhangCard4 = new Card("6222081502001312400","88888888",zhang3,gongshang);
    Card weiCard1 = new Card("6222081502051320785","88888888",wei1,gongshang);
    Card weiCard2 = new Card("6222081502051320786","88888888",wei2,gongshang);
    Card zhangCard11 = new Card("6640000010045442002","88888888",zhang10,jianshe);
    Card zhangCard12 = new Card("6640000010045442003","88888888",zhang10,jianshe);
    Card lingCard = new Card("6640000010045441009","88888888",ling,gongshang);
    Card qiaoCard = new Card("6630000010033431001","88888888",qiao,nongye);
    Card hongCard = new Card("6630000010033431008","88888888",hong,nongye);
    Card[] cardList = {yangCard1,yangCard2,yangCard3,guoCard,zhangCard1,zhangCard2,zhangCard3,zhangCard4,weiCard1,weiCard2,zhangCard11,zhangCard12,lingCard,qiaoCard,hongCard};
    StringBuilder an = new StringBuilder();
    public Operate() {
        
    }
    public Operate(StringBuilder an) {
        this.an.append(an.toString());
    }
    public String setMoney(Card card,double money,String atm) {
        double qvkuan = 0;
        double jiekuan = 0;
        String bankname = new String("unknown");
        String[] jianshe = {"01","02","03","04"};
        String[] gongshang = {"05","06"};
        String[] nongye = {"07","08","09","10","11"};
        boolean flag = true;
        while(flag) {
            flag = false;
            int k = 0;
            for(int i = 0;i < card.getBank().getAtm().length;i++) {
                if(!atm.equals(card.getBank().getAtm()[i])) 
                    k++;
            }
            if(k == card.getBank().getAtm().length - 1) {
                qvkuan = 0;
                bankname = card.getBank().getBankName();
                break;
            }
            
            if(!jianshe[0].equals(card.getBank().getAtm()[0])) {
                k = 0;
                for(int i = 0;i < gongshang.length;i++) {
                    if(!atm.equals(gongshang[i])) 
                        k++;
                }
                if(k == gongshang.length - 1) {
                    qvkuan = 0.03;
                    bankname = "中国工商银行";
                    break;
                }
                k = 0;
                for(int i = 0;i < nongye.length;i++) {
                    if(!atm.equals(nongye[i])) 
                        k++;
                }
                if(k == nongye.length - 1) {
                    qvkuan = 0.04;
                    bankname = "中国农业银行";
                    break;
                }
            }
            
            if(!gongshang[0].equals(card.getBank().getAtm()[0])) {
                k = 0;
                for(int i = 0;i < jianshe.length;i++) {
                    if(!atm.equals(jianshe[i])) 
                        k++;
                }
                if(k == jianshe.length - 1) {
                    qvkuan = 0.02;
                    bankname = "中国建设银行";
                    break;
                }
                k = 0;
                for(int i = 0;i < nongye.length;i++) {
                    if(!atm.equals(nongye[i])) 
                        k++;
                }
                if(k == nongye.length - 1) {
                    qvkuan = 0.04;
                    bankname = "中国农业银行";
                    break;
                }
            }
            
            if(!nongye[0].equals(card.getBank().getAtm()[0])) {
                k = 0;
                for(int i = 0;i < gongshang.length;i++) {
                    if(!atm.equals(gongshang[i])) 
                        k++;
                }
                if(k == gongshang.length - 1) {
                    qvkuan = 0.03;
                    bankname = "中国工商银行";
                    break;
                }
                k = 0;
                for(int i = 0;i < jianshe.length;i++) {
                    if(!atm.equals(jianshe[i])) 
                        k++;
                }
                if(k == jianshe.length - 1) {
                    qvkuan = 0.02;
                    bankname = "中国建设银行";
                    break;
                }
            }
        }
        if (card.getAccount().getBalance() < money) 
            jiekuan = 0.05;
        if(card.getAccount().getBalance() >= 0)
            card.getAccount().setBalance(card.getAccount().getBalance() - money - jiekuan*(Math.abs(card.getAccount().getBalance() - money)) - qvkuan*money);
        else if(card.getAccount().getBalance() < 0)
            card.getAccount().setBalance(card.getAccount().getBalance() - money - jiekuan*money - qvkuan*money);
        return bankname;
    }
    public boolean validate(String[] zu,int m) {
        if(!zu[2].equals("01") && !zu[2].equals("02") && !zu[2].equals("03") && !zu[2].equals("04") && !zu[2].equals("05") && !zu[2].equals("06") && !zu[2].equals("07") && !zu[2].equals("08") && !zu[2].equals("09") && !zu[2].equals("10") && !zu[2].equals("11")) {
            System.out.println("Sorry,the ATM's id is wrong.");
            return false;
        }
        if(!zu[1].equals( cardList[m].getPassword() )) {
            System.out.println("Sorry,your password is wrong.");
            return false;
        }
        if(cardList[m].getAccount().getType().equals("借记") && cardList[m].getAccount().getBalance() < 0) {
            System.out.println("Sorry,your account balance is insufficient.");
            return false;
        }
        if(cardList[m].getAccount().getType().equals("贷记") && cardList[m].getAccount().getBalance() < -50000) {
            System.out.println("Sorry,your account balance is insufficient.");
            return false;
        }
        return true;
    }
    public int findCard(String cardnumber) {
        int i = 0;
          while(!cardList[i].getCardNumber().equals(cardnumber)){
              i++;
              if(i == cardList.length)
                  return -1;
          }
        return i;
    }
    public void operate() {
        String s = an.toString();
        String str[] = s.split("\n");
        for(int i = 0;i < str.length;i++) {
            String zu[] = str[i].split(" +");
            int m = findCard(zu[0]);    
            if(m == -1) {
                System.out.println("Sorry,this card does not exist.");
                return;
            }
            if(zu.length == 1) {
                System.out.println("业务:查询余额 ¥" + String.format("%.2f", cardList[m].getAccount().getBalance()));    
                continue;
            }
            String bankname = setMoney(cardList[m],Double.parseDouble(zu[3]),zu[2]);
            if( !validate(zu,m) ) {
                return;
            }
            if(Double.parseDouble(zu[3]) < 0) {
//                saving(cardList[m].getAccount(),Double.parseDouble(zu[3]));
                System.out.println("业务:存款 " + cardList[m].getAccount().getAccountName() + "在" + bankname + "的" + zu[2] + "号ATM机上存款¥" + String.format("%.2f",Math.abs(Double.parseDouble(zu[3]))));
                System.out.println("当前余额为¥" + String.format("%.2f", cardList[m].getAccount().getBalance()));
            }
            else if(Double.parseDouble(zu[3]) > 0) {
//                taking(cardList[m].getAccount(),Double.parseDouble(zu[3]));
                System.out.println("业务:取款 " + cardList[m].getAccount().getAccountName() + "在" + bankname + "的" + zu[2] + "号ATM机上取款¥" + String.format("%.2f",Math.abs(Double.parseDouble(zu[3]))));
                System.out.println("当前余额为¥" + String.format("%.2f", cardList[m].getAccount().getBalance()));
            }
        }
    }
}

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        StringBuilder a = new StringBuilder(in.nextLine());
        String b = in.nextLine();
        while( !b.equals("#") ) {
            a.append('\n').append(b);
            b = in.nextLine();
        }
        Operate operate = new Operate(a);
        operate.operate();
    }

}

 

三、踩坑心得

  这三次作业还是不难的,首次不踩坑,好耶!

四、总结

  这三次题目集我是真切的感受到了Java的魅力,通过对类结构一系列的设计能简化许多很麻烦的操作,收获还是很大的,但是到现在的学习还是不够,对Java的理解还是不够透彻,多操作多实践多提问才能更好学习和研究。

posted @ 2021-12-18 22:33  饼干妹妹  阅读(42)  评论(1)    收藏  举报