题目集7-9总结性Blog

前言:

本次作业难度较大,图形卡片排序游戏和图形卡牌分组游戏难度中等,ATM机类结构设计第一次难度适中,第二次难度较大。

 

目录(java题目集):

1.题目集七(7-1 图形卡片排序游戏)

2.题目集七(7-2 图形卡片分组游戏)

3.题目集八(7-1 ATM机类结构设计(一)),题目集九(7-1 ATM机类结构设计(二))

 

1. 题目集七(7-1 图形卡片排序游戏)

题目要求:本程序仅用于为学生所玩的游戏提供正确答案的功能,即根据学生得到的卡片种类与数量,给出排序前和排序后的卡片顺序,同时给出所有卡片的面积之和。

 

输入格式:

首先,在一行上输入一串数字(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:总面积值。

 

输入样例1:

在这里给出一组输入。例如:

1 5 3 2 0

输出样例1:

在这里给出相应的输出。例如:

Wrong Format

输入样例2:

在这里给出一组输入。例如:

4 2 1 3 0

3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 3.5

输出样例2:

在这里给出相应的输出。例如:

The original list:

Trapezoid:1.14 Rectangle:3.22 Circle:98.52 Triangle:4.02

The sorted list:

Circle:98.52 Triangle:4.02 Rectangle:3.22 Trapezoid:1.14

Sum of area:106.91

输入样例3:

在这里给出一组输入。例如:

4 2 1 3 0

3.2 2.5 0.4 2.3 1.4 5.6 2.3 4.2 8.4

输出样例3:

在这里给出相应的输出。例如:

Wrong Format

题目分析:对圆,矩形,三角形,梯形四个类,分别定义各自的属性,在主方法中进行输入,运算,并且进行输出。

 

主要代码:

import java.math.BigDecimal;

import java.util.*;

public class Main {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        int  i = 0,j,temp2;

        double temp1,sum=0;

        int[] a = new int[1000];

        a[i] = input.nextInt();

        while (a[i] != 0) {

            i++;

            a[i] = input.nextInt();

        }

        double[] b = new double[i];

        for (i = 0; a[i] != 0; i++) {

            if (a[i] < 1 || a[i] > 4) {

                System.out.println("Wrong Format");

                System.exit(0);

            }

        }

        i=0;

        while (a[i] != 0) {

            switch (a[i]) {

                case 1:

                    Circle circle = new Circle();

                    circle.radius = input.nextDouble();

                    if(circle.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    sum+=circle.showArea();

                    BigDecimal z = new BigDecimal(circle.showArea());

                    b[i] = z.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

                case 2:

                    Rectangle rectangle = new Rectangle();

                    rectangle.width = input.nextDouble();

                    rectangle.length = input.nextDouble();

                    if(rectangle.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    sum+=rectangle.showArea();

                    BigDecimal zz = new BigDecimal(rectangle.showArea());

                    b[i] = zz.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

                case 3:

                    Triangle triangle = new Triangle();

                    triangle.side1=input.nextDouble();

                    triangle.side2=input.nextDouble();

                    triangle.side3=input.nextDouble();

                    if(triangle.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    sum+=triangle.showArea();

                    BigDecimal zzz = new BigDecimal(triangle.showArea());

                    b[i] = zzz.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

                case 4:

                    Trapezoid trapezoid=new Trapezoid();

                    trapezoid.s=input.nextDouble();

                    trapezoid.x=input.nextDouble();

                    trapezoid.h=input.nextDouble();

                    if(trapezoid.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    sum+=trapezoid.showArea();

                    BigDecimal zzzz = new BigDecimal(trapezoid.showArea());

                    b[i] = zzzz.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

            }

            i++;

        }

        i=0;

        System.out.println("The original list:");

        java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");

        while (a[i] != 0){

            if(a[i]==1)

                System.out.print("Circle:"+df.format(b[i])+" ");

            if(a[i]==2)

                System.out.print("Rectangle:"+df.format(b[i])+" ");

            if(a[i]==3)

                System.out.print("Triangle:"+df.format(b[i])+" ");

            if(a[i]==4)

                System.out.print("Trapezoid:"+df.format(b[i])+" ");

            i++;

        }

        for(i=0;a[i]!=0;i++){

            for(j=0;a[j]!=0;j++){

                if(b[j]<b[i]){

                    temp1=b[j];

                    b[j]=b[i];

                    b[i]=temp1;

                    temp2=a[j];

                    a[j]=a[i];

                    a[i]=temp2;

                }

            }

        }

        System.out.println("\nThe sorted list:");

        i=0;

        while (a[i] != 0){

            if(a[i]==1)

                System.out.print("Circle:"+df.format(b[i])+" ");

            if(a[i]==2)

                System.out.print("Rectangle:"+df.format(b[i])+" ");

            if(a[i]==3)

                System.out.print("Triangle:"+df.format(b[i])+" ");

            if(a[i]==4)

                System.out.print("Trapezoid:"+df.format(b[i])+" ");

            i++;

        }

        System.out.println("\n"+String.format("Sum of area:"+"%.2f", sum));

    }

 

    static class Circle {

        double radius;

        boolean validate() {

            if(radius<=0)

                return false;

            return true;

        }

        public double showArea(){

            return Math.PI * radius * radius;

        }

    }

    static class Rectangle {

        double length;

        double width;

        boolean validate(){

            if(width<=0||length<=0)

                return false;

            return true;

        }

        public double showArea() {

            return length * width;

        }

    }

 

    static class Triangle {

        double side1;

        double side2;

        double side3;

        boolean validate(){

            if(side1<=0||side2<=0||side3<=0)

                return false;

            if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1)

                return false;

            return true;

        }

        public double showArea() {

            return Math.sqrt((side1 + side2 + side3) * (-side1 + side2 + side3) * (side1 - side2 + side3) * (side1 + side2 - side3)) / 4;

        }

    }

 

    static class Trapezoid {

        double s;

        double x;

        double h;

        boolean validate(){

            if(s<=0||x<=0||h<=0)

                return false;

            return true;

        }

        public double showArea() {

            return (s+x)*h/2;

        }

    }

}

 

2. .题目集七(7-2 图形卡片分组游戏)

题目分析:本题在第一题上做了些许改进,首先对输出有了区别,其次多了一项对相同类型图形的输出以及将其排序输出,对代码有较多的增加,用数组进行面积的储存,并将其进行排序输出。

 

主要代码:

(1).对类的构造:

static class Circle {

        double radius;

        boolean validate() {

            if(radius<=0)

                return false;

            return true;

        }

        public double showArea(){

            return Math.PI * radius * radius;

        }

    }

    static class Rectangle {

        double length;

        double width;

        boolean validate(){

            if(width<=0||length<=0)

                return false;

            return true;

        }

        public double showArea() {

            return length * width;

        }

    }

 

    static class Triangle {

        double side1;

        double side2;

        double side3;

        boolean validate(){

            if(side1<=0||side2<=0||side3<=0)

                return false;

            if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1)

                return false;

            return true;

        }

        public double showArea() {

            return Math.sqrt((side1 + side2 + side3) * (-side1 + side2 + side3) * (side1 - side2 + side3) * (side1 + side2 - side3)) / 4;

        }

    }

 

    static class Trapezoid {

        double s;

        double x;

        double h;

        boolean validate(){

            if(s<=0||x<=0||h<=0)

                return false;

            return true;

        }

        public double showArea() {

            return (s+x)*h/2;

        }

}

 

(2).对数据的输入以及储存

if(a[0]==0){

            System.out.println("Wrong Format");

            System.exit(0);

        }

        while (a[i] != 0) {

            i++;

            a[i] = input.nextInt();

        }

(3).进行输出

while (a[i] != 0) {

            switch (a[i]) {

                case 1:

                    Circle circle = new Circle();

                    circle.radius = input.nextDouble();

                    if(circle.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    BigDecimal z = new BigDecimal(circle.showArea());

                    b[i] = z.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

                case 2:

                    Rectangle rectangle = new Rectangle();

                    rectangle.width = input.nextDouble();

                    rectangle.length = input.nextDouble();

                    if(rectangle.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    BigDecimal zz = new BigDecimal(rectangle.showArea());

                    b[i] = zz.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

                case 3:

                    Triangle triangle = new Triangle();

                    triangle.side1=input.nextDouble();

                    triangle.side2=input.nextDouble();

                    triangle.side3=input.nextDouble();

                    if(triangle.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    BigDecimal zzz = new BigDecimal(triangle.showArea());

                    b[i] = zzz.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

                case 4:

                    Trapezoid trapezoid=new Trapezoid();

                    trapezoid.s=input.nextDouble();

                    trapezoid.x=input.nextDouble();

                    trapezoid.h=input.nextDouble();

                    if(trapezoid.validate()==false){

                        System.out.println("Wrong Format");

                        System.exit(0);

                    }

                    BigDecimal zzzz = new BigDecimal(trapezoid.showArea());

                    b[i] = zzzz.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

                    break;

            }

            i++;

        }

        System.out.println("The original list:");

        java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");

        System.out.print("[");

        i=0;

        while (a[i] != 0){

            if(a[i]==1)

                System.out.print("Circle:"+df.format(b[i])+" ");

            if(a[i]==2)

                System.out.print("Rectangle:"+df.format(b[i])+" ");

            if(a[i]==3)

                System.out.print("Triangle:"+df.format(b[i])+" ");

            if(a[i]==4)

                System.out.print("Trapezoid:"+df.format(b[i])+" ");

            i++;

        }

        System.out.print("]\n");

        System.out.println("The Separated List:");

        System.out.print("[");

        for(i=0;a[i]!=0;i++){

            if(a[i]==1){

                sum[0]+=b[i];

                c[j]=b[i];

                j++;

                System.out.print("Circle:"+df.format(b[i])+" ");

            }

        }

        c[j]=0;

        j=0;

        System.out.print("]");

        System.out.print("[");

        for(i=0;a[i]!=0;i++){

            if(a[i]==2){

                sum[1]+=b[i];

                d[j]=b[i];

                j++;

                System.out.print("Rectangle:"+df.format(b[i])+" ");

            }

        }

        d[j]=0;

        j=0;

        System.out.print("]");

        System.out.print("[");

        for(i=0;a[i]!=0;i++){

            if(a[i]==3){

                sum[2]+=b[i];

                e[j]=b[i];

                j++;

                System.out.print("Triangle:"+df.format(b[i])+" ");

            }

        }

        e[j]=0;

        j=0;

        System.out.print("]");

        System.out.print("[");

        for(i=0;a[i]!=0;i++){

            if(a[i]==4){

                sum[3]+=b[i];

                f[j]=b[i];

                j++;

                System.out.print("Trapezoid:"+df.format(b[i])+" ");

            }

        }

        f[j]=0;

        j=0;

        System.out.print("]\n");

        System.out.println("The Separated sorted List:");

        for(i=0;c[i]!=0;i++){

            for(j=0;c[j]!=0;j++){

                if(c[j]<c[i]){

                    temp1=c[j];

                    c[j]=c[i];

                    c[i]=temp1;

                }

 

            }

        }

        for(i=0;d[i]!=0;i++){

            for(j=0;d[j]!=0;j++){

                if(d[j]<d[i]){

                    temp1=d[j];

                    d[j]=d[i];

                    d[i]=temp1;

                }

            }

        }

        for(i=0;e[i]!=0;i++){

            for(j=0;e[j]!=0;j++){

                if(e[j]<e[i]){

                    temp1=e[j];

                    e[j]=e[i];

                    e[i]=temp1;

                }

            }

        }

        for(i=0;f[i]!=0;i++){

            for(j=0;f[j]!=0;j++){

                if(f[j]<f[i]){

                    temp1=f[j];

                    f[j]=f[i];

                    f[i]=temp1;

                }

            }

        }

        System.out.print("[");

        for(i=0;c[i]!=0;i++){

           System.out.print("Circle:"+df.format(c[i])+" ");

        }

        System.out.print("]");

 

        System.out.print("[");

        for(i=0;d[i]!=0;i++){

            System.out.print("Rectangle:"+df.format(d[i])+" ");

        }

        System.out.print("]");

 

        System.out.print("[");

        for(i=0;e[i]!=0;i++){

            System.out.print("Triangle:"+df.format(e[i])+" ");

        }

        System.out.print("]");

 

        System.out.print("[");

        for(i=0;f[i]!=0;i++){

            System.out.print("Trapezoid:"+df.format(f[i])+" ");

        }

        System.out.print("]\n");

        for(i=0;i<4;i++){

            for(j=0;j<4;j++){

                if(sum[j]<sum[i]){

                    temp1=sum[j];

                    sum[j]=sum[i];

                    sum[i]=temp1;

                }

            }

        }

        System.out.println("The max area:"+df.format(sum[0]));

    }

 

 

3.题目集八(7-1 ATM机类结构设计(一))与题目集九(7-1 ATM机类结构设计(二))

题目要求:编写一个银行 ATM 机的模拟程序,能够完成用户的存款、取款以及查询余额功能。

 

输入格式:

每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:

  • 存款、取款功能输入数据格式: 卡号 密码 ATM机编号 金额(由一个或多个空格分隔), 其中,当金额大于0时,代表取款,否则代表存款。
  • 查询余额功能输入数据格式: 卡号

 

输出格式:

①输入错误处理

  • 如果输入卡号不存在,则输出Sorry,this card does not exist.。
  • 如果输入ATM机编号不存在,则输出Sorry,the ATM's id is wrong.。
  • 如果输入银行卡密码错误,则输出Sorry,your password is wrong.。
  • 如果输入取款金额大于账户余额,则输出Sorry,your account balance is insufficient.。
  • 如果检测为跨行存取款,则输出Sorry,cross-bank withdrawal is not supported.。

②取款业务输出

输出共两行,格式分别为:

[用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

③存款业务输出

输出共两行,格式分别为:

[用户姓名]在[银行名称]的[ATM编号]上存款¥[金额]

当前余额为¥[金额]

其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。

④查询余额业务输出

¥[金额]

金额保留两位小数。

 

题目分析:本题构造了卡类(卡号,密码,银行类型),用户类User,ATM机类(ID,银行),数据类ValidateData,ATM getATMbyATMID,UnionPay,GetBalance。这些类互相联系,将输入输出紧密联系,ATM机类又含有银行类的对象

 

题目代码:

(1).类的构造代码:

class Bank {

    private String bankNO;

    private String bankName;

    private double rate;

    private ArrayList<Account> accountList = new ArrayList<Account>();

    private static ArrayList<ATM> ATMList = new ArrayList<ATM>();

 

    public Bank() {

        super();

        // TODO Auto-generated constructor stub

    }

 

    public Bank(String bankNO, String bankName,double rate ) {

        super();

        this.bankNO = bankNO;

        this.bankName = bankName;

        this.rate = rate;

    }

 

    public String getBankNO() {

        return bankNO;

    }

 

    public void setBankNO(String bankNO) {

        this.bankNO = bankNO;

    }

 

    public String getBankName() {

        return bankName;

    }

 

    public void setBankName(String bankName) {

        this.bankName = bankName;

    }

 

    public double getRate() {

        return rate;

    }

 

    public void setRate(double rate) {

        this.rate = rate;

    }

 

    public void addAccount(Account account) {

        this.accountList.add(account);

    }

 

 

    public void removeAccount(Account account) {

        this.accountList.remove(account);

    }

 

    public void addATM(ATM aTM) {

        this.ATMList.add(aTM);

    }

 

    public void removeATM(ATM aTM) {

        this.ATMList.remove(aTM);

    }

 

    public ArrayList<Account> getAccountList() {

        return accountList;

    }

 

    public void setAccountList(ArrayList<Account> accountList) {

        this.accountList = accountList;

    }

 

    public ArrayList<ATM> getATMList() {

        return ATMList;

    }

 

    public void setATMList(ArrayList<ATM> aTMList) {

        ATMList = aTMList;

    }

    public static Bank getBankbyatm(String ATMID) {

        Iterator<ATM> atmItr = Bank.ATMList.iterator();

        ATM atm = null;

 

        while(atmItr.hasNext()) {

            atm = atmItr.next();

            if(atm.getATMID().equals(ATMID)) {

                return atm.getBank();

            }

        }

 

        return null;

    }

 

 

}

 

class User {

    private String ID;

    private String name;

    private String Phone;

    ArrayList<Account> list = new ArrayList<Account>();

 

    public User(String iD, String name, String phone) {

        super();

        ID = iD;

        this.name = name;

        Phone = phone;

    }

 

    public String getID() {

        return ID;

    }

 

    public void setID(String iD) {

        ID = iD;

    }

 

    public String getPhone() {

        return Phone;

    }

 

    public void setPhone(String phone) {

        Phone = phone;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public void addAccount(Account account) {

        this.list.add(account);

    }

 

    public void removeAccount(Account account) {

        this.list.remove(account);

    }

}

 

class Account {

    private String accountNO;

    private double balance = 0;

    private User user = null;

    private Bank bank = null;

    private UnionPay unionPay = null;

    private String type;

    private static ArrayList<Card> list = new ArrayList<Card>();

   

    public Account(String accountNO, double balance, User user, Bank bank,String type) {

        super();

        this.accountNO = accountNO;

        this.balance = balance;

        this.user = user;

        this.bank = bank;

        this.type = type;

 

    }

 

    public void addCard(Card card) {

        list.add(card);

    }

 

    public String getType() {

        return type;

    }

 

    public void removeCard(Card card) {

        list.remove(card);

    }

 

    public double getBalance() {

        return balance;

    }

 

    public void setBalance(double balance) {

        this.balance = balance;

    }

 

    public String getAccountNO() {

        return accountNO;

    }

 

    public void setAccountNO(String accountNO) {

        this.accountNO = accountNO;

    }

 

    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> getList() {

        return list;

    }

 

    public void setList(ArrayList<Card> list) {

        Account.list = list;

    }

 

    public static Account getAmountbyCardNO(String cardNO) {

        Iterator<Card> cardItr = Account.list.iterator();

        Card card = null;

 

        while(cardItr.hasNext()) {

            card = cardItr.next();

            if(card.getCardNO().equals(cardNO)) {

                return card.getAccount();

            }

        }

 

        return null;

    }

}

 

class Card {

    private String cardNO;

    private String cardPassword;

    private Account account = null;

    private String type;

 

    public Card(String cardNO, String cardPassword, Account account,String type) {

        super();

        this.cardNO = cardNO;

        this.cardPassword = cardPassword;

        this.account = account;

        this.type = type;

    }

 

    public String getCardNO() {

        return cardNO;

    }

 

    public void setCardNO(String cardNO) {

        this.cardNO = cardNO;

    }

 

    public String getCardPassword() {

        return cardPassword;

    }

 

    public Account getAccount() {

        return account;

    }

 

    public void setAccount(Account account) {

        this.account = account;

    }

 

    public void setCardPassword(String cardPassword) {

        this.cardPassword = cardPassword;

    }

 

    public boolean checkCard() {

        Pattern p = Pattern.compile("\\d{16}+");

        Matcher m = p.matcher(this.cardNO);

        return m.matches();

    }

 

    public boolean checkPassword(String password) {

        return this.cardPassword.equals(password);

    }

}

 

class ATM {

    private String ATMID;

    private Bank bank = null;

   

    public ATM(String aTMID, Bank bank) {

        super();

        ATMID = aTMID;

        this.bank = bank;

    }

 

    public String getATMID() {

        return ATMID;

    }

 

    public void setATMID(String aTMID) {

        ATMID = aTMID;

    }

 

    public Bank getBank() {

        return bank;

    }

 

    public void setBank(Bank bank) {

        this.bank = bank;

    }

}

 

class Withdraw {

    private UnionPay unionPay;

 

    private String cardNO;

    private String cardPassword;

    private String ATMID;

    private double amount;

    private double bankCredit=0.00;

    private double Credit=0.00;

 

    public Withdraw(UnionPay unionPay, String cardNO, String cardPassword, String aTMID, double amount) {

        this.unionPay = unionPay;

        this.cardNO = cardNO;

        this.cardPassword = cardPassword;

        ATMID = aTMID;

        this.amount = amount;

    }

 

    public Withdraw(String cardNO, String cardPassword, String aTMID, double amount) {

        this.cardNO = cardNO;

        this.cardPassword = cardPassword;

        ATMID = aTMID;

        this.amount = amount;

    }

 

 

    public void withdraw() {

        Card card = ValidateData.getCardbyCardNO(unionPay, cardNO);

        if(card == null) {

            System.out.println("Sorry,this card does not exist.");

            System.exit(0);

        }

       

        ATM aTM = ValidateData.getATMbyATMID(unionPay, ATMID);

        if(aTM == null) {

            System.out.println("Sorry,the ATM's id is wrong.");

            System.exit(0);

        }

 

        Account account = Account.getAmountbyCardNO(cardNO);

        Bank bank = Bank.getBankbyatm(ATMID);

        double balance = account.getBalance();

 

        /**

         * 校验卡密码是否正确

         */

        if(!card.getCardPassword().equals(cardPassword)) {

            System.out.println("Sorry,your password is wrong.");

            System.exit(0);

        }

 

        /**

         * 校验是否为跨行取款计算跨行费

         */

        if (account.getBank().getBankNO() != aTM.getBank().getBankNO()) {

            bankCredit = aTM.getBank().getRate()*amount;

        }

 

        if(account.getType().equals("贷记账户")) {

            if(balance>0&&balance<amount) {

                Credit = (amount-balance)*unionPay.getServiceCharge();

                account.setBalance(balance - amount - bankCredit-Credit);//取款更新余额操作

            }

            else

            if(balance<=0) {

                Credit = amount*unionPay.getServiceCharge();

                account.setBalance(balance - amount - bankCredit-Credit);//取款更新余额操作

            }

            else {

                account.setBalance(balance - amount - bankCredit);

            }

 

        }

        if(account.getType().equals("借记账户")){

            account.setBalance(balance - amount - bankCredit);//取款更新余额操作

        }

 

 

 

        /**

         * 校验取款金额是否大于余额

         */

        if ((account.getType().equals("借记账户")&&(balance - amount - bankCredit)<0)||

                (account.getType().equals("贷记账户")&&

                        (balance - amount - bankCredit-Credit)<(-unionPay.getMaxCredit()))) {

            System.out.println("Sorry,your account balance is insufficient.");

            System.exit(0);

        }

 

 

        if(amount >= 0) {

            showResult(account,bank,1);

        }else {

            showResult(account,bank,0);

        }

 

    }

 

    public void showResult(Account account,Bank bank,int flag) {

        String type = "";

        String type1 = "";

        if(flag == 1) {

            type = "业务:取款 ";

            type1 = "取款";

        }

        String userName = account.getUser().getName();

        String bankName = bank.getBankName();

        System.out.println(type + userName + "在" +

                bankName + "的" + ATMID + "号ATM机上" + type1 + String.format("¥%.2f", amount));

        System.out.println("当前余额为" + String.format("¥%.2f", account.getBalance()));

    }

}

 

class ValidateData {

    public static Card getCardbyCardNO(UnionPay unionPay,String cardNO) {

        Card card = null;

        Iterator<Bank> bankItr = unionPay.getBankList().iterator();

 

        while(bankItr.hasNext()) {

            ArrayList<Account> accountList = bankItr.next().getAccountList();

            Iterator<Account> accountItr = accountList.iterator();

            while(accountItr.hasNext()) {

                ArrayList<Card> cardList = accountItr.next().getList();

                Iterator<Card> cardItr = cardList.iterator();

                while(cardItr.hasNext()) {

                    card = cardItr.next();

                    if(card.getCardNO().equals(cardNO)) {

                        return card;

                    }

                }

            }

        }

        return null;

    }

 

    public static ATM getATMbyATMID(UnionPay unionPay,String ATMID) {

        Iterator<Bank> bankItr = unionPay.getBankList().iterator();

        Bank bank = null;

        ATM aTM = null;

 

        while(bankItr.hasNext()) {

            bank = bankItr.next();

            Iterator<ATM> aTMItr = bank.getATMList().iterator();

 

            while(aTMItr.hasNext()) {

                aTM = aTMItr.next();

                if(aTM.getATMID().equals(ATMID)) {

                    return aTM;

                }

            }

        }

        return null;

    }

}

 

class UnionPay {

    private ArrayList<Bank> bankList = new ArrayList<Bank>();

    private double ServiceCharge = 0.05;

    private double MaxCredit = 50000.00;

    public UnionPay() {

        super();

        // TODO Auto-generated constructor stub

    }

 

    public UnionPay(ArrayList<Bank> bankList) {

        super();

        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);

    }

 

    public void removeBank(Bank bank) {

        this.bankList.remove(bank);

    }

 

    public double getServiceCharge() {

        return ServiceCharge;

    }

 

    public void setServiceCharge(double serviceCharge) {

        ServiceCharge = serviceCharge;

    }

 

    public double getMaxCredit() {

        return MaxCredit;

    }

 

    public void setMaxCredit(double maxCredit) {

        MaxCredit = maxCredit;

    }

}

 

class GetBalance {

    private UnionPay unionPay;

   

    public GetBalance(UnionPay unionPay) {

        super();

        this.unionPay = unionPay;

    }

public double getBalance(String cardNO) {

        return ValidateData.getCardbyCardNO(unionPay, cardNO).getAccount().getBalance();

 

设计思路:首先对题目有一个大致的了解,联系生活中银行的工作情况,银行有银行卡。银行又有客户,客户又有姓名,性别的属性,银行又有银行卡,银行卡有银行卡好和密码,还有余额,余额又有利率,通过这些实际关系来构造类,并进行操作。

 

踩坑心得:

题目集七时对保留两位小数有问题,无法做到四舍五入,导致输出格式一直错误,最后使用了BigDecimal的方法,将小数保留到后两位。第二题不知道如何将其分类排序再输出,最后想到用数组储存数据将其输出,一开始要进行输入,将每个图形的数量计算出来,再将其进行输入输出,没有用数列方便。

题目集八和题目集九对类的设计不到位,导致对题目的分析很难进行,以及数据如何处理都无法做到很全面,经过对现实生活中的分析,设计出合适的类,将题目很快就能分析出来,要对类的构造进行思考。

 

改进建议:对数据处理还不够细节,对输入输出还是不够明确,输出格式把握的很不到位,需要多进行分析。

 

总结:这次作业让我对类的构造有了更深的感触,类的构造在程序的编写中十分重要,只有构造出正确类的关系,才能让程序编造的更简单且效率更高,以后对于类的构造要多进行思考。

 

posted @ 2021-06-19 23:13  ttjjyy  阅读(67)  评论(0编辑  收藏  举报