第三次Blog作业

一、前言

此次题目集7,8,9的题量比前面几次题目集的量少了一些,但是难度等等也上升了一个层次。当然所要包含的知识点也有很多,例如Arraylist数组的使用,迭代器的使用,以及排序方法的使用与不同等等,最重要的是,涉及到面向对象的基础三大特性封装,继承,多态的重要理解与使用。由此,可看出java学习还需要很大的努力,java中蕴含的知识点也有很多,还需要继续学习。

二、设计与分析

题目集7-1

 

图形卡片排序游戏 (40 分)
 

掌握类的继承、多态性使用方法以及接口的应用。详见作业指导书 2020-OO第07次作业-1指导书V1.0.pdf

输入格式:

  • 首先,在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如: 1 3 4 2 1 3 4 2 1 3 0
  • 然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。

输出格式:

  • 如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出Wrong Format
  • 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
  1. 排序前的各图形类型及面积,格式为图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格;
  2. 排序后的各图形类型及面积,格式同排序前的输出;
  3. 所有图形的面积总和,格式为Sum of area:总面积值

此题给出了编写的类图,具体的设计我们可以根据类图来进行编写。运用好接口的继承,最重要的还是对ArrayList数组中遍历数据的运用,运用这个就方便的进行循环的使用。再就是compareable接口

中compareto()方法的运用。都需要查阅相关资料来进行编写,至于其他部分不是很难。

参考代码如下:

import java.util.Arrays;
import java.util.ArrayList;
import java.util.*;
public class Main {
     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();
     }
}
 abstract class Shape{
    private String shapeName;
    public Shape()
    {
        
    }
    public Shape(String shapeName)
    {
        this.shapeName=shapeName;
    }
    public String getShapeName()
    {
        return shapeName;
    }
    public void setShapeName(String shapeName)
    {
        this.shapeName=shapeName;
    }
    public abstract double getArea();    
    public abstract boolean validate();
    public String toString()
    {
        return getShapeName()+":"+String.format("%.2f ",getArea());
    }
}

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

class Rectangle extends Shape{
    private double width,length;
    public Rectangle()
    {
        
    }
    public Rectangle(double width,double length)
    {
        this.width=width;
        this.length=length;
    }
    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;
    }
    public double getArea()
    {
        return width*length;
    }
    public boolean validate()
    {
        if(width<0||length<0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

class Triangle extends Shape{
    private double side1,side2,side3;
    public Triangle()
    {
        
    }
    public Triangle(double side1,double side2,double side3)
    {
        this.side1=side1;
        this.side2=side2;
        this.side3=side3;
    }
    public double getArea()
    {
        double p=(side1+side2+side3)/2;
        return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
    }
    public boolean validate()
    {
        if(side1<0||side2<0||side3<0)
        {
            return false;
        }
        else if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1)
        {
            return false;
        }
        else if(side1-side2>=side3||side1-side3>=side2||side2-side3>=side1)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

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;
   }
   public double getArea()
   {
    return  (topSide+bottomSide)*height/2;
   }
   public boolean validate()
   {
          if(topSide<0||bottomSide<0||height<0)
       {
               return false;
       }
       else
       {
                return true;
       }
   }
}

class Card implements Comparable<Card>{
   Shape shape;
   public Card()
   {
   
   }
   public Card(Shape shape)
   {
      this.shape=shape;
   }
   public Shape getShape()
   {
   return shape;
   }
   public void setShape(Shape shape)
   {
    this.shape=shape;
   }
   public int compareTo(Card card)
    {
         return (int) (card.getShape().getArea()-this.shape.getArea()); 
    }
}

class DealCardList{
     ArrayList<Card> cardList=new ArrayList<Card>();
     public DealCardList()
     {
     
     }
     public DealCardList(ArrayList<Integer> list)
     {
          for(Integer integer:list)
          {
              switch(integer)
              {
                case 1:
                   double radius=Main.input.nextDouble();
                   Circle circle=new Circle(radius);
                   Card card1=new Card(circle);
                   card1.getShape().setShapeName("Circle");
                   cardList.add(card1);
                   break;
                case 2:
                   double width=Main.input.nextDouble();
                   double length=Main.input.nextDouble();
                   Rectangle rectangle=new Rectangle(width,length);
                   Card card2=new Card(rectangle);
                   card2.getShape().setShapeName("Rectangle");
                   cardList.add(card2);
                   break;
                 case 3:
                    double side1=Main.input.nextDouble();
                     double side2=Main.input.nextDouble();
                      double side3=Main.input.nextDouble();
                      Triangle triangle=new Triangle(side1,side2,side3);
                      Card card3=new Card(triangle);
                      card3.getShape().setShapeName("Triangle");
                      cardList.add(card3);
                      break;
                  case 4:
                     double topSide = Main.input.nextDouble();
                     double bottomSide = Main.input.nextDouble();
                    double height = Main.input.nextDouble();
                    Trapezoid trapezoid=new Trapezoid(topSide,bottomSide,height);
                    Card card4=new Card(trapezoid);
                    card4.getShape().setShapeName("Trapezoid");
                    cardList.add(card4);
                    break;
              }
              if(integer==0)
              {
              break;
              }
          }
     }
     public boolean validate()
     {
           boolean m=true;
           for(Card card:cardList)
           {
              if(!card.getShape().validate())
              {
                   m=false;
                   
              }
           }
           return m;
     }
     public void cardSort()
     {
        Collections.sort(cardList);
        for(Card card:cardList)
        {
            System.out.print(card.getShape());
        }
     }
     public double getAllArea()
     {
        double sum=0;
        for(Card card:cardList)
        {
           sum=sum+card.getShape().getArea();
        }
        return sum;
     }
     public void showResult()
     {
        System.out.println("The original list:");
        for(Card card:cardList){
            System.out.print(card.getShape());
        }
        System.out.println("\nThe sorted list:");
       cardSort();
       System.out.print("\nSum of area:"+String.format("%.2f",getAllArea()));
     }
}

 

 

 

 类图题目中存在

7-2

7-2 图形卡片分组游戏 (60 分)
 

掌握类的继承、多态性使用方法以及接口的应用。 具体需求参考作业指导书。

2021-OO第07次作业-2指导书V1.0.pdf

输入格式:

  • 在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:1 3 4 2 1 3 4 2 1 3 0
  • 根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。

输出格式:

  • 如果图形数量非法(<=0)或图形属性值非法(数值<0以及三角形三边不能组成三角形),则输出Wrong Format
  • 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
  1. 排序前的各图形类型及面积,格式为[图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ],注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前;
  2. 输出分组后的图形类型及面积,格式为[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积],各组内格式为图形名称:面积值。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出;
  3. 各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;
  4. 各组中面积之和的最大值输出,格式为The max area:面积值

本次实验跟上次实验类似,需要更改的无非就是最后输出结果的格式,将其格式改好了,这道题也就能成功解决了。参考代码如下:

import java.util.ArrayList;
import java.util.*;
public class Main {
     public static Scanner input = new Scanner(System.in);
        public static void main(String[] args)
        {
          ArrayList<Integer> list = new ArrayList<Integer>(); 
           int num = input.nextInt();
            if(num==0)
            {
                System.out.println("Wrong Format");
              System.exit(0);
            }
              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();
     }
}
 abstract class Shape{
    private String shapeName;
    public Shape()
    {
        
    }
    public Shape(String shapeName)
    {
        this.shapeName=shapeName;
    }
    public String getShapeName()
    {
        return shapeName;
    }
    public void setShapeName(String shapeName)
    {
        this.shapeName=shapeName;
    }
    public abstract double getArea();    
    public abstract boolean validate();
    public String toString()
    {
        return getShapeName()+":"+String.format("%.2f ",getArea());
    }
}

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

class Rectangle extends Shape{
    private double width,length;
    public Rectangle()
    {
        
    }
    public Rectangle(double width,double length)
    {
        this.width=width;
        this.length=length;
    }
    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;
    }
    public double getArea()
    {
        return width*length;
    }
    public boolean validate()
    {
        if(width<0||length<0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

class Triangle extends Shape{
    private double side1,side2,side3;
    public Triangle()
    {
        
    }
    public Triangle(double side1,double side2,double side3)
    {
        this.side1=side1;
        this.side2=side2;
        this.side3=side3;
    }
    public double getArea()
    {
        double p=(side1+side2+side3)/2;
        return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3));
    }
    public boolean validate()
    {
        if(side1<0||side2<0||side3<0)
        {
            return false;
        }
        else if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1)
        {
            return false;
        }
        else if(side1-side2>=side3||side1-side3>=side2||side2-side3>=side1)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

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;
   }
   public double getArea()
   {
    return  (topSide+bottomSide)*height/2;
   }
   public boolean validate()
   {
          if(topSide<0||bottomSide<0||height<0)
       {
               return false;
       }
       else
       {
                return true;
       }
   }
}

class Card implements Comparable<Card>{
   Shape shape;
   public Card()
   {
   
   }
   public Card(Shape shape)
   {
      this.shape=shape;
   }
   public Shape getShape()
   {
   return shape;
   }
   public void setShape(Shape shape)
   {
    this.shape=shape;
   }
   public int compareTo(Card card)
    {
         return (int) (card.getShape().getArea()-this.shape.getArea()); 
    }
}

class DealCardList{
     ArrayList<Card> cardList=new ArrayList<Card>();
     public DealCardList()
     {
     
     }
     public DealCardList(ArrayList<Integer> list)
     {
          for(Integer integer:list)
          {
              switch(integer)
              {
                case 1:
                   double radius=Main.input.nextDouble();
                   Circle circle=new Circle(radius);
                   Card card1=new Card(circle);
                   card1.getShape().setShapeName("Circle");
                   cardList.add(card1);
                   break;
                case 2:
                   double width=Main.input.nextDouble();
                   double length=Main.input.nextDouble();
                   Rectangle rectangle=new Rectangle(width,length);
                   Card card2=new Card(rectangle);
                   card2.getShape().setShapeName("Rectangle");
                   cardList.add(card2);
                   break;
                 case 3:
                    double side1=Main.input.nextDouble();
                     double side2=Main.input.nextDouble();
                      double side3=Main.input.nextDouble();
                      Triangle triangle=new Triangle(side1,side2,side3);
                      Card card3=new Card(triangle);
                      card3.getShape().setShapeName("Triangle");
                      cardList.add(card3);
                      break;
                  case 4:
                     double topSide = Main.input.nextDouble();
                     double bottomSide = Main.input.nextDouble();
                    double height = Main.input.nextDouble();
                    Trapezoid trapezoid=new Trapezoid(topSide,bottomSide,height);
                    Card card4=new Card(trapezoid);
                    card4.getShape().setShapeName("Trapezoid");
                    cardList.add(card4);
                    break;
              }
              if(integer==0)
              {
              break;
              }
          }
     }
     public boolean validate()
     {
           boolean m=true;
           for(Card card:cardList)
           {
              if(!card.getShape().validate())
              {
                   m=false;
                   
              }
           }
           return m;
     }
     public void cardSort()
     {
        Collections.sort(cardList);
       
     }
    public void show()
    {
     System.out.print("[");
        for(Card card:cardList)
        {
            if(card.getShape().getShapeName()=="Circle")
            {
                 System.out.print(card.getShape());           
            }
            if(card.getShape().getShapeName()=="Rectangle")
            {
                System.out.print(card.getShape());
                
            }
            if(card.getShape().getShapeName()=="Triangle")
            {
                System.out.print(card.getShape());
                
            }
            if(card.getShape().getShapeName()=="Trapezoid")
            {
                System.out.print(card.getShape());
                
            }
        }
        System.out.print("]");  
    }
    public void show1()
    {
          System.out.print("[");
        for(Card card:cardList)
        {
            if(card.getShape().getShapeName()=="Circle")
            {
                 System.out.print(card.getShape());           
            }
        }
        System.out.print("]");
        
        System.out.print("[");
        for(Card card:cardList)
        {
            if(card.getShape().getShapeName()=="Rectangle")
            {
                 System.out.print(card.getShape());           
            }
        }
        System.out.print("]");
        System.out.print("[");
        for(Card card:cardList)
        {
            if(card.getShape().getShapeName()=="Triangle")
            {
                 System.out.print(card.getShape());           
            }
        }
        System.out.print("]");
        
        System.out.print("[");
        for(Card card:cardList)
        {
            if(card.getShape().getShapeName()=="Trapezoid")
            {
                 System.out.print(card.getShape());           
            }
        }
        System.out.print("]");
    }
     public void showResult()
     {
        System.out.println("The original list:");
        show();           
        System.out.println("\nThe Separated List:");
         show1();
        System.out.println("\nThe Separated sorted List:");
        cardSort();
        show1();
        System.out.print("\nThe max area:");
        double[] a=new double[4];
        for(Card card:cardList)
        {
            if(card.getShape().getShapeName()=="Circle")
            {
                 a[0]+=card.getShape().getArea();                                           
            }
            if(card.getShape().getShapeName()=="Rectangle")
            {
                 a[1]+=card.getShape().getArea();                   
            }
            if(card.getShape().getShapeName()=="Triangle")
            {
                 a[2]+=card.getShape().getArea();                  
            }
            if(card.getShape().getShapeName()=="Trapezoid")
            {               
                 a[3]+=card.getShape().getArea();    
            }
        }
        double max=0;
      for(int i=0;i<4;i++)
       {
           if(max<a[i])
           {
               max=a[i];
           }
       }
       System.out.print(String.format("%.2f",max));
     }
}

与之相关的报表类图如下:

 

 

 

 题目集8和9

ATM机类结构设计(一) (100 分)
 

设计ATM仿真系统,具体要求参见作业说明。 OO作业8-1题目说明.pdf

此次题目涉及ATM机的设计,需要用全方面的思维去思考,类的设计,以及面向对象过程中多态,继承的运用。将这些思考好了就可以进行一步一步的编写,达到所想要的目的。还要进行数据的录入,以及执行相应的

规则如果不符合规则,则要输出相应的语句。以及该如何遍历这些数据,而达到想要的结果。

题目二多增加了一些类,我们只需要再第一次题目的基础上,设计的银行类中,增加相应的账户等信息,以及修改题目相应的规则与该相应的输出,完成了题目一的设计,题目二的设计也会就显得十分便捷了。

题目一的参考代码如下:

import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.Scanner;
class Unionpay
{
    private ArrayList<Bank> banklist=new ArrayList<Bank>();
    public Unionpay()
    {
        
    }
    public Unionpay(ArrayList<Bank> banklist)
    {
        this.banklist=banklist;
    }
    public ArrayList<Bank> getBanklist()
    {
        return banklist;
    }
    public void setBanklist(ArrayList<Bank> banklist)
    {
        this.banklist=banklist;
    }
    public void addBank(Bank bank)
    {
        this.banklist.add(bank);
    }
    
}
class Bank{//银行类,存在银行名称,账户,atm
    private String bankname;
    private ArrayList<ATM> atmlist=new ArrayList<ATM>();
    private ArrayList<Account> accountlist=new ArrayList<Account>();
    public Bank()
    {
        
    }
    public  Bank(String bankname)
    {
        this.bankname=bankname;
    }
    public String getBankname()
    {
        return bankname;
    }
    public void setBankname(String bankname)
    {
        this.bankname=bankname;
    }
    public void addAccount(Account account)
    {
        accountlist.add(account);
    }
    public void addAtm(ATM atm)
    {
        atmlist.add(atm);
    }
    public  ArrayList<ATM> getATM()
    {
        return atmlist;
    }
    public void setATM( ArrayList<ATM> atmlist)
    {
        this.atmlist=atmlist;
    }
    public ArrayList<Account> getAccount()
    {
        return accountlist;
    }
    public void setAccount(ArrayList<Account> accountlist)
    {
        this.accountlist=accountlist;
    }
}

class User//用户类,名字,选择账户
{
    private String username;
    private ArrayList<Account> list=new ArrayList<Account>();
    public User()
    {
        
    }
    public User(String username)
    {
        this.username=username;
    }
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username=username;
    }
    public void addAccount(Account account)
    {
        list.add(account);
    }
}

class Account//账户号,余额,卡号
{
    private String accountid;
    private double balance=10000;
    private User user=new User();
    private Bank bank=new Bank();
    private static  ArrayList<Card> cardlist=new ArrayList<Card>();
    public Account()
    {
        
    }
    public Account(String accountid,double balance,User user,Bank bank)
    {
        this.accountid=accountid;
        this.balance=balance;
        this.user=user;
        this.bank=bank;
    }
    public void addCard(Card card)
    {
        cardlist.add(card);
    }
    public String getAccountid()
    {
        return accountid;
    }
    public void setAccountid(String accountid)
    {
        this.accountid=accountid;
    }
    public double getBalance()
    {
        return balance;
    }
    public void setBalance(double balance)
    {
        this.balance=balance;
    }
    public User getUser()
    {
        return user;
    }
    public void setUser(User user)
    {
        this.user=user;
    }
    public Bank getBank()
    {
        return bank;
    }
    public void setBank(Bank bank)
    {
        this.bank=bank;
    }
    public ArrayList<Card> getCardlist()
    {
        return cardlist;
    }
    public void setCardlist(ArrayList<Card> cardlist)
    {
        Account.cardlist=cardlist;
    }
    public static Account getAmount(String cardid)
    {
        Iterator<Card> carditr=Account.cardlist.iterator();
        Card card=new Card();
        while(carditr.hasNext())
        {
            card=carditr.next();
            if(card.getCardid().equals(cardid))
            {
                return card.getAccount();
            }
        }
        return null;
    }
}

class Card//卡号,密码
{
    private String cardid;
    private String password;
    private Account account=new Account();
    public Card()
    {
        
    }
    public Card(String cardid,String password,Account account)
    {
        this.cardid=cardid;
        this.password=password;
        this.account=account;
    }
    public String getCardid()
    {
        return cardid;
    }
    public void setCardid(String cardid)
    {
        this.cardid=cardid;
    }
    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 boolean checkPassword(String password1)
    {
        return password.equals(password1);
    }
}
class ATM//atm号,属于银行
{
    private String atmid;
    private Bank bank=new Bank();
    public ATM()
    {
        
    }
    public ATM(String atmid,Bank bank)
    {
        this.atmid=atmid;
        this.bank=bank;
    }
    public String getAtmid()
    {
        return atmid;
    }
    public void setAtmid(String atmid)
    {
        this.atmid=atmid;
    }
    public Bank getBank()
    {
        return bank;
    }
    public void setBank(Bank bank)
    {
        this.bank=bank;
    }
}

class Check{
    private Unionpay unionpay;
    private String cardid;
    private String password;
    private String atmid;
    private double amount;
    public Check()
    {
        
    }
    public Check(Unionpay unionpay,String cardid,String password,String atmid,double amount)
    {
        this.unionpay=unionpay;
        this.cardid=cardid;
        this.password=password;
        this.atmid=atmid;
        this.amount=amount;
    }
    public void check()
    {
        Card card=Check1.checkCard(unionpay,cardid);
        if(card==null)
        {
            System.out.print("Sorry,this card does not exit.");
            System.exit(0);
        }
        ATM atm=Check1.checkAtm(unionpay, atmid);        
            if(atm==null)
            {
            System.out.print("Sorry,the ATM's id is wrong.");
            System.exit(0);
            }            
    Account account=Account.getAmount(cardid);
    //检验取款金额是否大于余额
        double balance=account.getBalance();
        if(amount>balance)
        {
            System.out.print("Sorry,your account balance is insufficient.");
            System.exit(0);
        }
    if(!card.getPassword().equals(password))
        {
            System.out.print("Sorry,your password is wrong.");
            System.exit(0);
        }
    //检验是否跨行取款        
        if(account.getBank().getBankname()!=atm.getBank().getBankname())
        {
            System.out.print("Sorry,cross-bank withdrawal is not supported.");
            System.exit(0);
        }
    
     //取款更新
     
         account.setBalance(balance-amount);          
          if(amount>=0)
       {
         show(account,1);
       }
        else
       {
         show(account,0);
        }
    }

    public void show(Account account,int num)
    {
        String name=" ";
        if(num==1)
        {
             name="取款";
        }
        else
        {
             name="存款";
            amount=-1*amount;
        }
        String username=account.getUser().getUsername();
        String bankname=account.getBank().getBankname();
        System.out.println(username+"在"+bankname+"的"+atmid+"号ATM机上"+name+"¥"+String.format("%.2f",amount));
        System.out.println("当前余额为"+"¥"+String.format("%.2f",account.getBalance()));
    }
        
}
class Check1
{
    public static Card checkCard(Unionpay unionpay,String cardid)
    {
        //检验卡号是否存在
        Card card=new Card();
        Iterator<Bank> bankitr=unionpay.getBanklist().iterator();
        while(bankitr.hasNext())//遍历银行
        {
            ArrayList<Account> accountlist=bankitr.next().getAccount();
            Iterator<Account> accountitr=accountlist.iterator();
            while(accountitr.hasNext())//遍历账户
            {
                ArrayList<Card> cardlist=accountitr.next().getCardlist();
                Iterator<Card> carditr=cardlist.iterator();
                while(carditr.hasNext())//遍历卡号
                {
                    card=carditr.next();
                    if(card.getCardid().equals(cardid))
                    {
                        return card;
                    }
                }
               
                    System.out.println("Sorry,this card does not exist.");
                    System.exit(0);
                
            }
         }
        return null;
      }
    public static ATM checkAtm(Unionpay unionpay,String atmid)//检验ATM号
    {
        Iterator<Bank> bankitr=unionpay.getBanklist().iterator();
        Bank bank=new Bank();
        ATM atm=new ATM();
        while(bankitr.hasNext())//遍历银行
        {
            bank=bankitr.next();
            Iterator<ATM> atmitr=bank.getATM().iterator();
            while(atmitr.hasNext())//遍历atm号
            {
                atm=atmitr.next();
                if(atm.getAtmid().equals(atmid))
                {
                    return atm;
                }
            }
        }
        return null;
    }
}
  class GetBalance
  {
      private Unionpay unionpay=new Unionpay();
      public GetBalance()
      {
          
      }
      public GetBalance( Unionpay unionpay)
      {
          this.unionpay=unionpay;
      }
      public double getBalance(String cardid)
      {
         
          return Check1.checkCard(unionpay,cardid).getAccount().getBalance();
      }
  }
public class Main
{
    public static void main(String[] args)
    {
        Scanner x=new Scanner(System.in);
        Unionpay unionpay=new Unionpay();
        Account account=new Account();
        Bank zgjs=new Bank("中国建设银行");
        Bank zggs=new Bank("中国工商银行");
        unionpay.addBank(zgjs);
        unionpay.addBank(zggs);
        ATM atm1=new ATM("01",zgjs);
        ATM atm2=new ATM("02",zgjs);
        ATM atm3=new ATM("03",zgjs);
        ATM atm4=new ATM("04",zgjs);
        ATM atm5=new ATM("05",zggs);
        ATM atm6=new ATM("06",zggs);
        zgjs.addAtm(atm1);
        zgjs.addAtm(atm2);
        zgjs.addAtm(atm3);
        zgjs.addAtm(atm4);
        zggs.addAtm(atm5);
        zggs.addAtm(atm6);
        User name1=new User("杨过");
        User name2=new User("郭靖");
        User name3=new User("张无忌");
        User name4=new User("韦小宝");
        Account account1=new Account("3217000010041315709",10000.00,name1,zgjs);
        Account account2=new Account("3217000010041315715",10000.00,name1,zgjs);
        Account account3=new Account("3217000010051320007",10000.00,name2,zgjs);
        Account account4=new Account("3222081502001312389",10000.00,name3,zggs);
        Account account5=new Account("3222081502001312390",10000.00,name3,zggs);
        Account account6=new Account("3222081502001312399",10000.00,name3,zggs);
        Account account7=new Account("3222081502051320785",10000.00,name4,zggs);
        Account account8=new Account("3222081502051320786",10000.00,name4,zggs);
        zgjs.addAccount(account1);
        zgjs.addAccount(account2);
        zgjs.addAccount(account3);
        zggs.addAccount(account4);
        zggs.addAccount(account5);
        zggs.addAccount(account6);
        zggs.addAccount(account7);
        zggs.addAccount(account8);
        name1.addAccount(account1);
        name1.addAccount(account2);
        name2.addAccount(account3);
        name3.addAccount(account4);
        name3.addAccount(account5);
        name3.addAccount(account6);
        name4.addAccount(account7);
        name4.addAccount(account8);
        Card card1=new Card("6217000010041315709","88888888",account1);
        Card card2=new Card("6217000010041315715","88888888",account1);
        Card card3=new Card("6217000010041315718","88888888",account2);
        Card card4=new Card("6217000010051320007","88888888",account3);
        Card card5=new Card("6222081502001312389","88888888",account4);
        Card card6=new Card("6222081502001312390","88888888",account5);
        Card card7=new Card("6222081502001312399","88888888",account6);
        Card card8=new Card("6222081502001312400","88888888",account6);
        Card card9=new Card("6222081502051320785","88888888",account7);
        Card card10=new Card("6222081502051320786","88888888",account8);
        account1.addCard(card1);
        account1.addCard(card2);
        account2.addCard(card3);
        account3.addCard(card4);
        account4.addCard(card5);
        account5.addCard(card6);
        account6.addCard(card7);
        account6.addCard(card8);
        account7.addCard(card9);
        account8.addCard(card10);
        StringBuilder buildrer=new StringBuilder();
        String data;
        while(!((data=x.nextLine()).equals("#")))
        {
            buildrer.append(data+"\n");
        }
        String[] dt=buildrer.toString().split("\n");
        for(int i=0;i<dt.length;i++)
        {
            String[] dataline=dt[i].toString().split("\\s+");
            if(dataline.length==1)
            {
                GetBalance gb=new GetBalance(unionpay);
                System.out.println("¥"+String.format("%.2f",gb.getBalance(dataline[0])));
            }
            else
            {
                Check ch=new Check(unionpay,dataline[0],dataline[1],dataline[2],Double.parseDouble(dataline[3]));
                ch.check();                    
            }
        }
    }
}

题目集一的类图,生产报表如下;

 

 

 

 

题目二的参考代码如下

import java.util.Iterator;
import java.util.ArrayList;
import java.util.Scanner;
class Unionpay
{
    private ArrayList<Bank> banklist=new ArrayList<Bank>();
    public Unionpay()
    {
        
    }
    public Unionpay(ArrayList<Bank> banklist)
    {
        this.banklist=banklist;
    }
    public ArrayList<Bank> getBanklist()
    {
        return banklist;
    }
    public void setBanklist(ArrayList<Bank> banklist)
    {
        this.banklist=banklist;
    }
    public void addBank(Bank bank)
    {
        this.banklist.add(bank);
    }
    
}
class Bank{//银行类,存在银行名称,账户,atm
    private String bankname;
    private double temp;//手续费
    private ArrayList<ATM> atmlist=new ArrayList<ATM>();
    private ArrayList<Account> accountlist=new ArrayList<Account>();
    public Bank()
    {
        
    }
    public  Bank(String bankname,double temp)
    {
        this.bankname=bankname;
        this.temp=temp;
    }
    public double getTemp()
    {
        return temp;
    }
    public void setTemp(double temp)
    {
        this.temp=temp;
    }
    public String getBankname()
    {
        return bankname;
    }
    public void setBankname(String bankname)
    {
        this.bankname=bankname;
    }
    public void addAccount(Account account)
    {
        accountlist.add(account);
    }
    public void addAtm(ATM atm)
    {
        atmlist.add(atm);
    }
    public  ArrayList<ATM> getATM()
    {
        return atmlist;
    }
    public void setATM( ArrayList<ATM> atmlist)
    {
        this.atmlist=atmlist;
    }
    public ArrayList<Account> getAccount()
    {
        return accountlist;
    }
    public void setAccount(ArrayList<Account> accountlist)
    {
        this.accountlist=accountlist;
    }
}

class User//用户类,名字,选择账户
{
    private String username;
    private ArrayList<Account> list=new ArrayList<Account>();
    public User()
    {
        
    }
    public User(String username)
    {
        this.username=username;
    }
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username=username;
    }
    public void addAccount(Account account)
    {
        list.add(account);
    }
}

class Account//账户号,余额,卡号
{
    private String accountid;
    private double balance=10000;
    private User user=new User();
    private Bank bank=new Bank();
    private double temp;//透支取款手续费
    private double num;//透支取款最大金额
    private static  ArrayList<Card> cardlist=new ArrayList<Card>();
    public Account()
    {
        
    }
    public Account(String accountid,double balance,User user,Bank bank,double temp,double num)
    {
        this.accountid=accountid;
        this.balance=balance;
        this.user=user;
        this.bank=bank;        
        this.temp=temp;
        this.num=num;
    }
    public double getTemp()
    {
        return temp;
    }
    public void setTemp(double temp)
    {
        this.temp=temp;
    }
    public double getNum()
    {
        return num;
    }
    public void setNum(double num)
    {
        this.num=num;
    }
    public void addCard(Card card)
    {
        cardlist.add(card);
    }
    public String getAccountid()
    {
        return accountid;
    }
    public void setAccountid(String accountid)
    {
        this.accountid=accountid;
    }
    public double getBalance()
    {
        return balance;
    }
    public void setBalance(double balance)
    {
        this.balance=balance;
    }
    public User getUser()
    {
        return user;
    }
    public void setUser(User user)
    {
        this.user=user;
    }
    public Bank getBank()
    {
        return bank;
    }
    public void setBank(Bank bank)
    {
        this.bank=bank;
    }
    public ArrayList<Card> getCardlist()
    {
        return cardlist;
    }
    public void setCardlist(ArrayList<Card> cardlist)
    {
        Account.cardlist=cardlist;
    }
    
    public static Account getAmount(String cardid)
    {
        Iterator<Card> carditr=Account.cardlist.iterator();
        Card card=new Card();
        while(carditr.hasNext())
        {
            card=carditr.next();
            if(card.getCardid().equals(cardid))
            {
                return card.getAccount();
            }
        }
        return null;
    }
}
class Card//卡号,密码
{
    private String cardid;
    private String password;
    private Account account=new Account();
    public Card()
    {
        
    }
    public Card(String cardid,String password,Account account)
    {
        this.cardid=cardid;
        this.password=password;
        this.account=account;
    }
    public String getCardid()
    {
        return cardid;
    }
    public void setCardid(String cardid)
    {
        this.cardid=cardid;
    }
    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 boolean checkPassword(String password1)
    {
        return password.equals(password1);
    }
}
class ATM//atm号,属于银行
{
    private String atmid;
    private Bank bank=new Bank();
    public ATM()
    {
        
    }
    public ATM(String atmid,Bank bank)
    {
        this.atmid=atmid;
        this.bank=bank;
    }
    public String getAtmid()
    {
        return atmid;
    }
    public void setAtmid(String atmid)
    {
        this.atmid=atmid;
    }
    public Bank getBank()
    {
        return bank;
    }
    public void setBank(Bank bank)
    {
        this.bank=bank;
    }
}

class Check{
    private Unionpay unionpay;
    private String cardid;
    private String password;
    private String atmid;
    private double amount;
    
    public Check()
    {
        
    }
    public Check(Unionpay unionpay,String cardid,String password,String atmid,double amount)
    {
        this.unionpay=unionpay;
        this.cardid=cardid;
        this.password=password;
        this.atmid=atmid;
        this.amount=amount;
    }
    public void check()
    {
        Card card=Check1.checkCard(unionpay,cardid);
        if(card==null)
        {
            System.out.print("Sorry,this card does not exit.");
            System.exit(0);
        }
        ATM atm=Check1.checkAtm(unionpay, atmid);        
            if(atm==null)
            {
            System.out.print("Sorry,the ATM's id is wrong.");
            System.exit(0);
            }            
        if(!card.getPassword().equals(password))
        {
            System.out.print("Sorry,your password is wrong.");
            System.exit(0);
        }
        
     //取款更新
        Account account=Account.getAmount(cardid);
        double balance=account.getBalance();
        Bank bank=atm.getBank();
       if(account.getTemp()==0.00)//正常卡
       {                
           double temp=0;//手续费总额
           if(amount+temp>=account.getBalance())
           {
               System.out.print("Sorry,your account balance is insufficient.");
               System.exit(0);
           }
           if(account.getBank().getBankname()!=atm.getBank().getBankname())
           {
               temp+=amount*bank.getTemp();
           }
           account.setBalance(account.getBalance()-amount-temp); 
       }
        
        if(account.getTemp()==0.05)
       {
           double overmoney=0;//透支金额
           double sum=0;//手续费总额
           if(balance>0)
           {
               overmoney=amount-balance;
           }
           else
           {
               overmoney=amount;
           }
           if(account.getBank().getBankname()!=atm.getBank().getBankname())
           {
               sum+=amount*bank.getTemp();
           }
           if(overmoney>0)
           {
               sum+=overmoney*account.getTemp();
           }
           if(amount+sum>account.getBalance()+account.getNum())
           {
               
               System.out.print("Sorry,your account balance is insufficient.");
               System.exit(0);
           }
           account.setBalance(balance-amount-sum);                        
       }  
        
       show(account,atm);
    }

    public void show(Account account,ATM atm)
    {
        String name="取款";
        String username=account.getUser().getUsername();
        String bankname=atm.getBank().getBankname();
        System.out.println("业务:取款 "+username+"在"+bankname+"的"+atmid+"号ATM机上"+name+"¥"+String.format("%.2f",amount));
        System.out.println("当前余额为"+"¥"+String.format("%.2f",account.getBalance()));
    }
        
}
class Check1
{
    public static Card checkCard(Unionpay unionpay,String cardid)
    {
        //检验卡号是否存在
        Card card=new Card();
        Iterator<Bank> bankitr=unionpay.getBanklist().iterator();
        while(bankitr.hasNext())//遍历银行
        {
            ArrayList<Account> accountlist=bankitr.next().getAccount();
            Iterator<Account> accountitr=accountlist.iterator();
            while(accountitr.hasNext())//遍历账户
            {
                ArrayList<Card> cardlist=accountitr.next().getCardlist();
                Iterator<Card> carditr=cardlist.iterator();
                while(carditr.hasNext())//遍历卡号
                {
                    card=carditr.next();
                    if(card.getCardid().equals(cardid))
                    {
                        return card;
                    }
                }
                System.out.println("Sorry,this card does not exist.");
                System.exit(0);
            }
         }
        return null;
      }
    public static ATM checkAtm(Unionpay unionpay,String atmid)//检验ATM号
    {
        Iterator<Bank> bankitr=unionpay.getBanklist().iterator();
        Bank bank=new Bank();
        ATM atm=new ATM();
        while(bankitr.hasNext())//遍历银行
        {
            bank=bankitr.next();
            Iterator<ATM> atmitr=bank.getATM().iterator();
            while(atmitr.hasNext())//遍历atm号
            {
                atm=atmitr.next();
                if(atm.getAtmid().equals(atmid))
                {
                    return atm;
                }
            }
        }
        return null;
    }
}
  class GetBalance
  {
      private Unionpay unionpay=new Unionpay();
      public GetBalance()
      {
          
      }
      public GetBalance( Unionpay unionpay)
      {
          this.unionpay=unionpay;
      }
      public double getBalance(String cardid)
      {
         
          return Check1.checkCard(unionpay,cardid).getAccount().getBalance();
      }
  }
public class Main
{
    public static void main(String[] args)
    {
        Scanner x=new Scanner(System.in);
        Unionpay unionpay=new Unionpay();
        Account account=new Account();
        Bank zgjs=new Bank("中国建设银行",0.02);
        Bank zggs=new Bank("中国工商银行",0.03);
        Bank zgny=new Bank("中国农业银行",0.04);
        unionpay.addBank(zgjs);
        unionpay.addBank(zggs);
        unionpay.addBank(zgny);
        ATM atm1=new ATM("01",zgjs);
        ATM atm2=new ATM("02",zgjs);
        ATM atm3=new ATM("03",zgjs);
        ATM atm4=new ATM("04",zgjs);
        ATM atm5=new ATM("05",zggs);
        ATM atm6=new ATM("06",zggs);
        ATM atm7=new ATM("07",zgny);
        ATM atm8=new ATM("08",zgny);
        ATM atm9=new ATM("09",zgny);
        ATM atm10=new ATM("10",zgny);
        ATM atm11=new ATM("11",zgny);
        zgjs.addAtm(atm1);
        zgjs.addAtm(atm2);
        zgjs.addAtm(atm3);
        zgjs.addAtm(atm4);
        zggs.addAtm(atm5);
        zggs.addAtm(atm6);
        zgny.addAtm(atm7);
        zgny.addAtm(atm8);
        zgny.addAtm(atm9);
        zgny.addAtm(atm10);
        zgny.addAtm(atm11);
        User name1=new User("杨过");
        User name2=new User("郭靖");
        User name3=new User("张无忌");
        User name4=new User("韦小宝");
        User name5=new User("张三丰");
        User name6=new User("令狐冲");
        User name7=new User("乔峰");
        User name8=new User("洪七公");
        
        Account account1=new Account("3217000010041315709",10000.00,name1,zgjs,0,0);
        Account account2=new Account("3217000010041315715",10000.00,name1,zgjs,0,0);
        Account account3=new Account("3217000010051320007 ",10000.00,name2,zgjs,0,0);
        Account account4=new Account("3222081502001312389",10000.00,name3,zggs,0,0);
        Account account5=new Account("3222081502001312390",10000.00,name3,zggs,0,0);
        Account account6=new Account("3222081502001312399",10000.00,name3,zggs,0,0);
        Account account7=new Account("3222081502051320785",10000.00,name4,zggs,0,0);
        Account account8=new Account("3222081502051320786",10000.00,name4,zggs,0,0);
        Account account9=new Account("3640000010045442002",10000.00,name5,zgjs,0.05,50000);
        Account account10=new Account("3640000010045441009",10000.00,name6,zggs,0.05,50000);
        Account account11=new Account("3630000010033431001",10000.00,name7,zgny,0.05,50000);
        Account account12=new Account("3630000010033431008",10000.00,name8,zgny,0.05,50000);
        
        zgjs.addAccount(account1);
        zgjs.addAccount(account2);
        zgjs.addAccount(account3);
        zggs.addAccount(account4);
        zggs.addAccount(account5);
        zggs.addAccount(account6);
        zggs.addAccount(account7);
        zggs.addAccount(account8);
        zgjs.addAccount(account9);
        zggs.addAccount(account10);
        zgny.addAccount(account11);
        zgny.addAccount(account12);
        
        name1.addAccount(account1);
        name1.addAccount(account2);
        name2.addAccount(account3);
        name3.addAccount(account4);
        name3.addAccount(account5);
        name3.addAccount(account6);
        name4.addAccount(account7);
        name4.addAccount(account8);
        name5.addAccount(account9);
        name6.addAccount(account10);
        name7.addAccount(account11);
        name8.addAccount(account12);
        
        Card card1=new Card("6217000010041315709","88888888",account1);
        Card card2=new Card("6217000010041315715","88888888",account1);
        Card card3=new Card("6217000010041315718","88888888",account2);
        Card card4=new Card("6217000010051320007","88888888",account3);
        Card card5=new Card("6222081502001312389","88888888",account4);
        Card card6=new Card("6222081502001312390","88888888",account5);
        Card card7=new Card("6222081502001312399","88888888",account6);
        Card card8=new Card("6222081502001312400","88888888",account6);
        Card card9=new Card("6222081502051320785","88888888",account7);
        Card card10=new Card("6222081502051320786","88888888",account8);
        Card card11=new Card("6640000010045442002","88888888",account9);
        Card card12=new Card("6640000010045442003","88888888",account9);
        Card card13=new Card("6640000010045441009","88888888",account10);
        Card card14=new Card("6630000010033431001","88888888",account11);
        Card card15=new Card("6630000010033431008","88888888",account12);
        
        account1.addCard(card1);
        account1.addCard(card2);
        account2.addCard(card3);
        account3.addCard(card4);
        account4.addCard(card5);
        account5.addCard(card6);
        account6.addCard(card7);
        account6.addCard(card8);
        account7.addCard(card9);
        account8.addCard(card10);
        account9.addCard(card11);
        account10.addCard(card13);
        account11.addCard(card14);
        account9.addCard(card12);
        account12.addCard(card15);
        
        StringBuilder buildrer=new StringBuilder();
        String data;
        while(!((data=x.nextLine()).equals("#")))
        {
            buildrer.append(data+"\n");
        }
        String[] dt=buildrer.toString().split("\n");
        for(int i=0;i<dt.length;i++)
        {
            String[] dataline=dt[i].toString().split("\\s+");
            if(dataline.length==1)
            {
                GetBalance gb=new GetBalance(unionpay);
                System.out.println("业务:查询余额 "+"¥"+String.format("%.2f",gb.getBalance(dataline[0])));
            }
            else
            {
                Check ch=new Check(unionpay,dataline[0],dataline[1],dataline[2],Double.parseDouble(dataline[3]));
                ch.check();                    
            }
        }
    }
}

相应的报表,类图如下:

 

 

 

 踩坑心得:

对于这三次题目集其中有的题目花费我大量的时间去完成,当然做完之后也感觉收获了很多,对java的理解有了更进一步的提升。例如最后一次题目集的设计中,我对借贷账户与信用账户的

划分思索了许久,该通过什么来区分这俩中用户,最后我想到了通过俩种账户的利率不同来进行编写,也就是初始时候给他们俩种账户的人,给予不同的利率以此来划分执行相应的操作。

接着最后就是图片分组的格式问题,每个输出结果所要的输出内容不同,也就是说要对每一个结果进行编写,这里面就需要用到很多重复的内容,导致我编译过程中一直显示代码长度过长无法运行。

最后我就对这些重复内容编写再一个方法内,在进行调用,以此减少冗余,最后成功的编译完成。

改进建议:我对我的代码也没办法做出更好的改进了。

总结:

这三次题目集的难度都大于以前的题目集,通过编写这三次题目集能够让我们对java的水平能够得到进一步的提升,当然所要花费的时间也是很多很多的。对java的三大特性封装,继承,多态。以及接口,Arraylist

数组的使用都有了很大的进步。总而言之,就是感觉到了有很大的收货与提高。老师,作业等等都很好,就是对javafx的设计,代码的编写感觉有点难度,不会进行图形化设计。总之,就是希望自己能够再java路上

越学越好,越来越棒!

 

posted @ 2021-12-14 16:22  羽川翼x  阅读(52)  评论(0)    收藏  举报