第三次实验总结

                   目录

 

一.前言

二.设计与分析

三.踩坑心得

四.改进建议

五.总结

---------------------------------------------------------------------------------

1.前言

题目集七题量适中,难度也适中,两题难度循序渐进,呈递增趋势;

题目集八题量少,但难度有些大,要求较多,具有一定的挑战性;

题目集九题量也是比较少,有了题目集八的铺垫后更加得心应手了,是个不错的好题目;

----------------------------------------------------------------------------------------------------------------------

2.设计与分析

题目集七:

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

package test2;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;


class Card{
     Shape shape;
    
    Card(Shape shape){
        this.shape=shape;
    }
    public Shape getS() {
        return shape;
    }
    public void setS(Shape Shape) {
        this.shape=shape;
    }
    
}
class DealCardList{
    ArrayList<Card> ca=new ArrayList<Card>();
    
    DealCardList(ArrayList<Integer> list){
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i)==1)
            {
                double r=Sort.input.nextDouble();
                Circle circle=new Circle(r);
                Card card=new Card(circle);
                card.getS().setShapeName("Circle");
                ca.add(card);    
            }
            if(list.get(i)==2) {
                double a=Sort.input.nextDouble();
                double b=Sort.input.nextDouble();
                Rectangle rectangle=new Rectangle(a,b);
                Card card=new Card(rectangle);
                card.getS().setShapeName("Rectangle");
                ca.add(card);
            }
            if(list.get(i)==3) {
                double a=Sort.input.nextDouble();
                double b=Sort.input.nextDouble();
                double c=Sort.input.nextDouble();
                Triangle triangle=new Triangle(a,b,c);
                Card card=new Card(triangle);
                card.getS().setShapeName("Triangle");
                ca.add(card);
            }
            if(list.get(i)==4) {
                double a=Sort.input.nextDouble();
                double b=Sort.input.nextDouble();
                double c=Sort.input.nextDouble();
                Traperoid traperoid=new Traperoid(a,b,c);
                Card card=new Card(traperoid);
                card.getS().setShapeName("Trapezoid");
                ca.add(card);
            }
            }
    }
    public boolean validate() {
        for(int i=0;i<ca.size();i++)
            {if(!ca.get(i).getS().vaildate())
                        {return false;}}
        return true;
    }
    public void cardSort() {
        for(int j=0;j<ca.size();j++)
            for(int i=j+1;i<ca.size();i++)
            {
                if(ca.get(j).getS().getA()<ca.get(i).getS().getA())
                    Collections.swap(ca, j, i);
            }
        
        
    }
    public double getAllArea() {
        double s=0;
        for(int i=0;i<ca.size();i++)
        s=s+ca.get(i).getS().getA();
        return s;
    }
    public void show() {
        System.out.println("The original list:");
        for(int i=0;i<ca.size();i++)
            System.out.print(ca.get(i).getS().getname()+":"+String.format("%.2f",ca.get(i).getS().getA())+" ");
        System.out.println();
        System.out.println("The sorted list:");
        cardSort();
        for(int i=0;i<ca.size();i++)
        System.out.print(ca.get(i).getS().getname()+":"+String.format("%.2f",ca.get(i).getS().getA())+" ");
        System.out.println();
        System.out.println("Sum of area:"+String.format("%.2f",getAllArea()));
    }
}
 class Shape {
     String name;
    Shape(){
        
    }
    Shape(String name){
        this.name=name;
    }
    public String getname() {
        return name;
    }
    public void setShapeName(String name) {
        this.name=name;
    }
    public double getA() {
        return 0.0;
    }
    public boolean vaildate() {
        return true;
    }
    
}
class Circle extends Shape{
    private double r;
    
    Circle(double r){
        this.r=r;
    }
    public double getA() {
        return Math.PI*r*r;
    }
    public boolean vaildate() {
        if(r>0)
        return true;
        else return false;
    }
}
class Rectangle extends Shape{
    private double w,l;
    Rectangle (double width,double length){
        this.w=width;
        this.l=length;
    }
        public boolean vaildate() {
        if(w>0&&l>0)
        return true;
        else return false;
    }
    public double getA() {
        return w*l;
    }
    
    
}
class Triangle extends Shape{
     double a,b,c;
     Triangle(double a,double b,double c){
         this.a=a;
         this.b=b;
         this.c=c;
     }
          public boolean vaildate() {
            if(a+b>c&&a+c>b&&c+b>a)
            return true;
                        else return false;
                
        }
     public double getA() {
         double n=(a+b+c)/2;
         double s=Math.sqrt(n*(n-a)*(n-b)*(n-c));
            return s;
        }
    

    
}
class Traperoid extends Shape{
     double a,b,h;
    
    Traperoid(double a,double b,double h){
        this.a=a;
        this.b=b;
        this.h=h;
    }
    public double getA() {
        return (a+b)*h/2.0;
    }
    public boolean validate() {
        if(a>0&&h>0&&b>0)
            return true;
        else return false;
    }
}
public class Sort {
        
        public static Scanner input = new Scanner(System.in);
        public static void main(String[] args){
        ArrayList<Integer> list = new ArrayList<Integer>();
        int n = input.nextInt();
        while(n != 0){
        if(n < 0 || n > 4){
        System.out.println("Wrong Format");
        System.exit(0);
        }
         list.add(n);
         n = input.nextInt();
        }
        DealCardList dealCardList = new DealCardList(list);
        if(!dealCardList.validate()){
        System.out.println("Wrong Format");
        System.exit(0);
        }
        dealCardList.show();
        input.close();
        }
    }

本题首先要根据给出的1,2,3,4来判断是三角形,圆形,梯形还是矩形。然后再判断第二行给出的数据个数是否有误。圆形需要一个半径,矩形需要长和宽,三角形需要三条边的长度,梯形需要长,宽和高。还有一个细节是要判断三角形的三条边要满足任意两边之和要大于第三边。然后求三角形的面积时要用到海伦公式。排序的话用sort函数。

题目集七----二

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

package test2;


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

public class Group {
        
        public static Scanner input = new Scanner(System.in);
        public static void main(String[] args){
        ArrayList<Integer> list = new ArrayList<Integer>();
        int n = input.nextInt();
            if(n==0){System.out.println("Wrong Format");
        System.exit(0);}
        while(n != 0){
        if(n < 0 || n > 4){
        System.out.println("Wrong Format");
        System.exit(0);
        }
         list.add(n);
         n = input.nextInt();
        }
        DealCardList dealCardList = new DealCardList(list);
        if(!dealCardList.validate()){
        System.out.println("Wrong Format");
        System.exit(0);
        }
        dealCardList.show(list);
        input.close();
        }
    }
class Card implements Comparable<Card>{
     Shape shape;
    
    Card(Shape shape){
        this.shape=shape;
    }
        
    public Shape getS() {
        return shape;
    }
    public void setS(Shape Shape) {
        this.shape=shape;
    }
    public int compareTo(Card o) {
        if(this.shape.getA() < o.shape.getA())
            return 1;
        else if(this.shape.getA() > o.shape.getA())
            return -1;
        else
            return 0;
    }
}
 
class DealCardList{
    ArrayList<Card> ca=new ArrayList<Card>();
    
    DealCardList(ArrayList<Integer> list){
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i)==1)
            {
                double r=Group.input.nextDouble();
                //Shape circle=);
                Card card=new Card(new Circle(r));
                card.getS().setShapeName("Circle");
                ca.add(card);    
            }
            if(list.get(i)==2) {
                double a=Group.input.nextDouble();
                double b=Group.input.nextDouble();
                Rectangle rectangle=new Rectangle(a,b);
                Card card=new Card(rectangle);
                card.getS().setShapeName("Rectangle");
                ca.add(card);
            }
            if(list.get(i)==3) {
                double a=Group.input.nextDouble();
                double b=Group.input.nextDouble();
                double c=Group.input.nextDouble();
                Triangle triangle=new Triangle(a,b,c);
                Card card=new Card(triangle);
                card.getS().setShapeName("Triangle");
                ca.add(card);
            }
            if(list.get(i)==4) {
                double a=Group.input.nextDouble();
                double b=Group.input.nextDouble();
                double c=Group.input.nextDouble();
                Traperoid traperoid=new Traperoid(a,b,c);
                Card card=new Card(traperoid);
                card.getS().setShapeName("Trapezoid");
                ca.add(card);
            }
            }
    }
    public boolean validate() {
        for(int i=0;i<ca.size();i++)
            {if(!ca.get(i).getS().vaildate())
                        {System.out.println(i+"错误");return false;}}
        return true;
    }
    public void cardSort() {
        for(int j=0;j<ca.size();j++)
            for(int i=j+1;i<ca.size();i++)
            {
                if(ca.get(j).getS().getA()<ca.get(i).getS().getA())
                    Collections.swap(ca, j, i);
            }                         
    }         
    public double getAllArea() {
        double s=0;
        for(int i=0;i<ca.size();i++)
        s=s+ca.get(i).getS().getA();
        return s;
    }
    public void show(ArrayList<Integer> list) {
        System.out.println("The original list:");System.out.print("[");
        for(int i=0;i<ca.size();i++)
            System.out.print(ca.get(i).getS().getname()+":"+String.format("%.2f",ca.get(i).getS().getA())+" ");
        System.out.println("]");
                System.out.println("The Separated List:");
                for(int i=1;i<=4;i++){
                     System.out.print("[");
                    for(int j=0;j<list.size();j++){
                       
                        if(list.get(j)==i)
                      
                        System.out.print(ca.get(j).getS().getname()+":"+String.format("%.2f",ca.get(j).getS().getA())+" ");                
                    }
                 System.out.print("]");
                }
                System.out.println();
        System.out.println("The Separated sorted List:");
               ArrayList<Card> circleCardList = new ArrayList<>();
        ArrayList<Card> rectangleCardList = new ArrayList<>();
        ArrayList<Card> trapezoidCardList = new ArrayList<>();
        ArrayList<Card> triangleCardList = new ArrayList<>();
                int i=0,j=0;
                
               
                
                     //System.out.print("[");
                    for( j=0;j<list.size();j++){
                        if(list.get(j)==1)circleCardList.add(ca.get(j));
                        if(list.get(j)==2)rectangleCardList.add(ca.get(j));
                    if(list.get(j)==4)trapezoidCardList.add(ca.get(j));
                    if(list.get(j)==3)triangleCardList.add(ca.get(j));
                    
                }
                    Collections.sort(circleCardList);
        
        Collections.sort(rectangleCardList);
       
        Collections.sort(triangleCardList);
        
        Collections.sort(trapezoidCardList);
    double[]a=new double[4];
        System.out.print("[");
for( i=0;i<circleCardList.size();i++)
{System.out.print(circleCardList.get(i).getS().getname()+":"+String.format("%.2f",circleCardList.get(i).getS().getA())+" ");
a[0]+=circleCardList.get(i).getS().getA();
}System.out.print("]");
System.out.print("[");
 for( i=0;i<rectangleCardList.size();i++)
 {System.out.print(rectangleCardList.get(i).getS().getname()+":"+String.format("%.2f",rectangleCardList.get(i).getS().getA())+" ");
 a[1]+=rectangleCardList.get(i).getS().getA();}System.out.print("]");System.out.print("[");
 for( i=0;i<triangleCardList.size();i++){
System.out.print(triangleCardList.get(i).getS().getname()+":"+String.format("%.2f",triangleCardList.get(i).getS().getA())+" ");
 a[2]+=triangleCardList.get(i).getS().getA();
 }System.out.print("]");System.out.print("[");
 for( i=0;i<trapezoidCardList.size();i++){
System.out.print(trapezoidCardList.get(i).getS().getname()+":"+String.format("%.2f",trapezoidCardList.get(i).getS().getA())+" ");
 a[3]+=trapezoidCardList.get(i).getS().getA();}System.out.print("]");
        System.out.println();
                 double max=0;
                for( i=0;i<4;i++)
                    if(a[i]>max)max=a[i];
        System.out.println("The max area:"+String.format("%.2f",max));
    
}
}
  class Shape {
     String name;
    Shape(){
        
    }
    Shape(String name){
        this.name=name;
    }
    public String getname() {
        return name;
    }
    public void setShapeName(String name) {
        this.name=name;
    }
    public double getA() {
        return 0.0;
    }
    public boolean vaildate() {
        return true;
    }
    
}
class Circle extends Shape{
    private double r;
    
    Circle(double r){
        this.r=r;
    }
    public double getA() {
        return Math.PI*r*r;
    }
    public boolean vaildate() {
        if(r>0)
        return true;
        else return false;
    }
}
class Rectangle extends Shape{
    private double w,l;
    Rectangle (double width,double length){
        this.w=width;
        this.l=length;
    }
        public boolean vaildate() {
        if(w>0&&l>0)
        return true;
        else return false;
    }
    public double getA() {
        return w*l;
    }
    
    
}
class Triangle extends Shape{
     double a,b,c;
     Triangle(double a,double b,double c){
         this.a=a;
         this.b=b;
         this.c=c;
     }
          public boolean vaildate() {
            if(a+b>c&&a+c>b&&c+b>a)
            return true;
                        else return false;
                
        }
     public double getA() {
         double n=(a+b+c)/2;
         double s=Math.sqrt(n*(n-a)*(n-b)*(n-c));
            return s;
        }
    

    
}
class Traperoid extends Shape{
    private double a,b,h;
    Traperoid(){
        
    }
    Traperoid(double a,double b,double h){
        this.a=a;
        this.b=b;
        this.h=h;
    }
    public double getA() {
        return (a+b)*h/2;
    }
    public boolean validate() {
        if(a>0&&h>0&&b>0)
            return true;
        else return false;
    }
}

这道题难度不小,除了7-1中要注意的之外还要使用Comparable、Comparator 接口,和进行分类。

题目集8

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

package atm;
import java.util.*;
class Unionpay{
    ArrayList<Bank>bank;
    Unionpay(){
        ArrayList<Bank>bank=new ArrayList<>();
        this.bank=bank;
    }
    void add(Bank b) {
        bank.add(b);
    }
}
class Bank{
    Unionpay unionpay;
    ArrayList<User>user;
    ArrayList<String>number;
    String id;
    
    Bank(String id){
        this.id=id;
        ArrayList<User>user=new ArrayList<>();
        this.user=user;
        ArrayList<String>number=new ArrayList<>();
        this.number=number;
    }
    void add(User b) {
        user.add(b);
    }
    void addatm(String s) {
        number.add(s);
    }
    void set(Unionpay unionpay) {
        this.unionpay=unionpay;
    }
    Unionpay get() {
        return unionpay;
    }
}
class User{
    Bank bank;
    ArrayList<Account>account;
    String id;
    
    User(String id){
        this.id=id;
        ArrayList<Account>account=new ArrayList<>();
        this.account=account;
    }
    void add(Account b) {
        account.add(b);
    }
    void set(Bank bank) {
        this.bank=bank;
    }
    Bank get() {
        return bank;
    }
}
class Account {
    User user;
    ArrayList<Card>card;
    String id;
    
    double balance;
    
    Account(String id){
        this.id=id;
        balance=10000.00;
        ArrayList<Card>card=new ArrayList<>();
        this.card=card;
    }
    void add(Card b) {
        card.add(b);
    }
    void set(User user) {
        this.user=user;
    }
    User get() {
        return user;
    }
}
class Card {
    Account account;
    String password;
    String id;
    Card(String id){
        this.id=id;
        password="88888888";        
    }
    void set(Account account) {
        this.account=account;
    }
    Account get() {
        return account;
    }
    
}
public class Main {

    public static void main(String[] args) {        
        Unionpay unionpay=new Unionpay();
        Bank bank1=new Bank("中国建设银行");
        Bank bank2=new Bank("中国工商银行");
        unionpay.add(bank1);bank1.set(unionpay);
        unionpay.add(bank2);bank2.set(unionpay);
        bank1.addatm("01");
        bank1.addatm("02");
        bank1.addatm("03");
        bank1.addatm("04");
        bank2.addatm("05");
        bank2.addatm("06");
        ArrayList<String>atm=new ArrayList<>();
        atm.add("01");
        atm.add("02");
        atm.add("03");
        atm.add("04");
        atm.add("05");
        atm.add("06");
        User u1=new User("杨过");
        User u2=new User("郭靖");
        User u3=new User("张无忌");
        User u4=new User("韦小宝");
        bank1.user.add(u1);u1.set(bank1);
        bank1.user.add(u2);u2.set(bank1);
        bank2.user.add(u3);u3.set(bank2);
        bank2.user.add(u4);u4.set(bank2);
        Account a1=new Account("3217000010041315709");        
        Account a2=new Account("3217000010041315715");
        Account a3=new Account("3217000010051320007");
        Account a4=new Account("3222081502001312389");
        Account a5=new Account("3222081502001312390");
        Account a6=new Account("3222081502001312399");
        Account a7=new Account("3222081502051320785");
        Account a8=new Account("3222081502051320786");
        u1.account.add(a1);a1.set(u1);
        u1.account.add(a2);a2.set(u1);
        u2.account.add(a3);a3.set(u2);
        u3.account.add(a4);a4.set(u3);
        u3.account.add(a5);a5.set(u3);
        u3.account.add(a6);a6.set(u3);    
        u4.account.add(a7);a7.set(u4);
        u4.account.add(a8);a8.set(u4);
        
        Card c1=new Card("6217000010041315709");
        Card c2=new Card("6217000010041315715");
        Card c3=new Card("6217000010041315718");
        Card c4=new Card("6217000010051320007");
        Card c5=new Card("6222081502001312389");
        Card c6=new Card("6222081502001312390");
        Card c7=new Card("6222081502001312399");
        Card c8=new Card("6222081502001312400");
        Card c9=new Card("6222081502051320785");
        Card c10=new Card("6222081502051320786");
        ArrayList<Card>card=new ArrayList<>();
        card.add(c1);
        card.add(c2);
        card.add(c3);
        card.add(c4);
        card.add(c5);
        card.add(c6);
        card.add(c7);
        card.add(c8);
        card.add(c9);
        card.add(c10);
        a1.card.add(c1);c1.set(a1);
        a1.card.add(c2);c2.set(a1);
        a2.card.add(c3);c3.set(a2);
        a3.card.add(c4);c4.set(a3);
        a4.card.add(c5);c5.set(a4);
        a5.card.add(c6);c6.set(a5);
        a6.card.add(c7);c7.set(a6);
        a6.card.add(c8);c8.set(a6);
        a7.card.add(c9);c9.set(a7);
        a8.card.add(c10);c10.set(a8);
        
        Scanner input=new Scanner(System.in);
        int i=0,j=0;
        String str=new String();
        String tmp;
        StringBuilder sb = new StringBuilder();
        while (true) {
            
            tmp = input.nextLine();//从键盘接收一行输入
            if(tmp.equals("#"))
                break;
            sb.append(tmp + "\n");//增加换行符(行与行之间分隔符号)
        } 
        str=sb.toString();
        
        String str1[]=str.split("\\n");
        
        boolean b=false;
        
        for(i=0;i<str1.length;i++)
        
        {b=false;
            String str2[]=str1[i].split("\\s+");                       
                if(str2.length==1) {                   
                    for(Card c:card)
                    if(str2[0].equals(c.id))
                        System.out.println("¥"+String.format("%.2f",c.get().balance));
                }
                else {
                    double money=Double.parseDouble(str2[3]);                                     
                    for(Card c:card)
                        if(str2[0].equals(c.id)){
                                            b=true;
                                            if(str2[1].equals(c.password)==false) {
                                                System.out.println("Sorry,your password is wrong.");System.exit(0);
                                            }
                                            if(money>c.get().balance) {
                                                System.out.println("Sorry,your account balance is insufficient.");System.exit(0);
                                            }boolean a=false;
                                            for(String s:atm) {
                                                if(s.equals(str2[2]))a=true;
                                            }if(a==false) {
                                                System.out.println("Sorry,the ATM's id is wrong.");System.exit(0);
                                            }a=false;
                                            for (String s : c.get().get().get().number) {
                                                if(s.equals(str2[2]))
                                                    a=true;
                                                }if(a==false) {
                                                    System.out.println("Sorry,cross-bank withdrawal is not supported.");System.exit(0);
                                                }
                                            System.out.print(c.get().get().id+"在");
                                            System.out.print(c.get().get().get().id+"的");
                                            if(money>0)System.out.println(str2[2]+"号ATM机上取款¥"+String.format("%.2f",money));                                           
                                            else System.out.println(str2[2]+"号ATM机上存款¥"+String.format("%.2f",-money));
                                            c.get().balance-=money;
                System.out.println("当前余额为¥"+String.format("%.2f",c.get().balance));break;
                                        }
                    if(b==false) {System.out.println("Sorry,this card does not exist.");System.exit(0);}
                }
                
        }    
        
        
    }

}

这道题算是个小系统了,一个ATM存取款系统,功能包含了存款,取款和查询。根据输入的信息要判断以下几个错误是否存在:卡号是否存在,密码是否正确,ATM机编号是否正确,是否为跨行取款和取款金额是否大于账户余额,这些都要考虑。其中最关键的问题就是怎么样根据一张卡号就能获取账户,用户和银行的信息,这里就要用到java程序的聚合关系了,一层层关系关联起来,就像继承那样,形成一条线,知道了线上的其中任何一个,就能找出线上的其他任何一个。

题目集九

编写一个银行 ATM 机的模拟程序,能够完成用户的取款以及查询余额功能。银行账户分为借记账户和贷记账户两种,其中,借记账户不能够透支 取款,而贷记账户可以透支取款(可能需要支付手续费)。根据账户 的不同,银行卡一般分为借记卡(针对借记账户)和信用卡(针对贷记账户) 两类。本次作业中银行卡包含借记卡和信用卡两类,且允许跨行办理相关业 务

package test2;


import java.util.*;
class Unionpay{
    ArrayList<Bank>bank;
    Unionpay(){
        ArrayList<Bank>bank=new ArrayList<>();
        this.bank=bank;
    }
    void add(Bank b) {
        bank.add(b);
    }
}
class Bank{
    Unionpay unionpay;
    ArrayList<User>user;
    ArrayList<Atm>number;
    double a;
    String id;
    
    Bank(String id,double a){
        this.id=id;
        this.a=a;
        ArrayList<User>user=new ArrayList<>();
        this.user=user;
        ArrayList<Atm>number=new ArrayList<>();
        this.number=number;
        
        
    }
    void add(User b) {
        user.add(b);
    }
    void addatm(Atm atm) {
        number.add(atm);
    }
    void set(Unionpay unionpay) {
        this.unionpay=unionpay;
    }
    Unionpay get() {
        return unionpay;
    }
}
class Atm{
    String id;
    Bank bank;
    Atm(String id,Bank bank){
        this.id=id;
        this.bank=bank;
    }
    Bank get() {
        return bank;
    }
}
class User{
    Bank bank;
    ArrayList<Account>account;
    String id;
    
    User(String id){
        this.id=id;
        ArrayList<Account>account=new ArrayList<>();
        this.account=account;
    }
    void add(Account b) {
        account.add(b);
    }
    void set(Bank bank) {
        this.bank=bank;
    }
    Bank get() {
        return bank;
    }
}
class Account {
    User user;
    ArrayList<Card>card;
    String id;
    boolean d;
    double balance;
    
    Account(String id,boolean d){
        this.id=id;
        balance=10000.00;
        ArrayList<Card>card=new ArrayList<>();
        this.card=card;
        this.d=d;
    }
    void add(Card b) {
        card.add(b);
    }
    void set(User user) {
        this.user=user;
    }
    User get() {
        return user;
    }
}
class Card {
    Account account;
    String password;
    String id;
    Card(String id){
        this.id=id;
        password="88888888";        
    }
    void set(Account account) {
        this.account=account;
    }
    Account get() {
        return account;
    }
    
}
public class Main {

    public static void main(String[] args) {        
        Unionpay unionpay=new Unionpay();
        
        Bank bank1=new Bank("中国建设银行",0.02);
        Bank bank2=new Bank("中国工商银行",0.03);
        Bank bank3=new Bank("中国农业银行",0.04);
        unionpay.add(bank1);bank1.set(unionpay);
        unionpay.add(bank2);bank2.set(unionpay);
        unionpay.add(bank3);bank3.set(unionpay);
        Atm atm1=new Atm("01",bank1);
        Atm atm2=new Atm("02",bank1);
        Atm atm3=new Atm("03",bank1);
        Atm atm4=new Atm("04",bank1);
        Atm atm5=new Atm("05",bank2);
        Atm atm6=new Atm("06",bank2);
        Atm atm7=new Atm("07",bank3);
        Atm atm8=new Atm("08",bank3);
        Atm atm9=new Atm("09",bank3);
        Atm atm10=new Atm("10",bank3);
        Atm atm11=new Atm("11",bank3);
        bank1.addatm(atm1);
        bank1.addatm(atm2);
        bank1.addatm(atm3);
        bank1.addatm(atm4);
        bank2.addatm(atm5);
        bank2.addatm(atm6);
        bank3.addatm(atm7);
        bank3.addatm(atm8);
        bank3.addatm(atm9);
        bank3.addatm(atm10);
        bank3.addatm(atm11);
        ArrayList<Atm>atm=new ArrayList<>();
        atm.add(atm1);
        atm.add(atm2);
        atm.add(atm3);
        atm.add(atm4);
        atm.add(atm5);
        atm.add(atm6);
        atm.add(atm7);
        atm.add(atm8);
        atm.add(atm9);
        atm.add(atm10);
        atm.add(atm11);
        User u1=new User("杨过");
        User u2=new User("郭靖");
        User u3=new User("张无忌");
        User u4=new User("韦小宝");
        User u5=new User("张三丰");
        User u6=new User("令狐冲");
        User u7=new User("乔峰");
        User u8=new User("洪七公");
        bank1.user.add(u1);u1.set(bank1);
        bank1.user.add(u2);u2.set(bank1);
        bank2.user.add(u3);u3.set(bank2);
        bank2.user.add(u4);u4.set(bank2);
        bank1.user.add(u5);u5.set(bank1);
        bank2.user.add(u6);u6.set(bank2);
        bank3.user.add(u7);u7.set(bank3);
        bank3.user.add(u8);u8.set(bank3);
        Account a1=new Account("3217000010041315709",false);        
        Account a2=new Account("3217000010041315715",false);
        Account a3=new Account("3217000010051320007",false);
        Account a4=new Account("3222081502001312389",false);
        Account a5=new Account("3222081502001312390",false);
        Account a6=new Account("3222081502001312399",false);
        Account a7=new Account("3222081502051320785",false);
        Account a8=new Account("3222081502051320786",false);
        Account a9=new Account("3640000010045442002",true);
        Account a10=new Account("3640000010045441009",true);
        Account a11=new Account("3630000010033431001",true);
        Account a12=new Account("3630000010033431008",true);
        u1.account.add(a1);a1.set(u1);
        u1.account.add(a2);a2.set(u1);
        u2.account.add(a3);a3.set(u2);
        u3.account.add(a4);a4.set(u3);
        u3.account.add(a5);a5.set(u3);
        u3.account.add(a6);a6.set(u3);    
        u4.account.add(a7);a7.set(u4);
        u4.account.add(a8);a8.set(u4);
        u5.account.add(a9);a9.set(u5);
        u6.account.add(a10);a10.set(u6);
        u7.account.add(a11);a11.set(u7);
        u8.account.add(a12);a12.set(u8);
        
        Card c1=new Card("6217000010041315709");
        Card c2=new Card("6217000010041315715");
        Card c3=new Card("6217000010041315718");
        Card c4=new Card("6217000010051320007");
        Card c5=new Card("6222081502001312389");
        Card c6=new Card("6222081502001312390");
        Card c7=new Card("6222081502001312399");
        Card c8=new Card("6222081502001312400");
        Card c9=new Card("6222081502051320785");
        Card c10=new Card("6222081502051320786");
        Card c11=new Card("6640000010045442002");
        Card c12=new Card("6640000010045442003");
        Card c13=new Card("6640000010045441009");
        Card c14=new Card("6630000010033431001");
        Card c15=new Card("6630000010033431008");
        ArrayList<Card>card=new ArrayList<>();
        card.add(c1);card.add(c11);
        card.add(c2);card.add(c12);
        card.add(c3);card.add(c13);
        card.add(c4);card.add(c14);
        card.add(c5);card.add(c15);
        card.add(c6);
        card.add(c7);
        card.add(c8);
        card.add(c9);
        card.add(c10);
        
        a1.card.add(c1);c1.set(a1);
        a1.card.add(c2);c2.set(a1);
        a2.card.add(c3);c3.set(a2);
        a3.card.add(c4);c4.set(a3);
        a4.card.add(c5);c5.set(a4);
        a5.card.add(c6);c6.set(a5);
        a6.card.add(c7);c7.set(a6);
        a6.card.add(c8);c8.set(a6);
        a7.card.add(c9);c9.set(a7);
        a8.card.add(c10);c10.set(a8);
        a9.card.add(c11);c11.set(a9);
        a9.card.add(c12);c12.set(a9);
        a10.card.add(c13);c13.set(a10);
        a11.card.add(c14);c14.set(a11);
        a12.card.add(c15);c15.set(a12);
        Scanner input=new Scanner(System.in);
        int i=0,j=0;
        String str=new String();
        String tmp;
        StringBuilder sb = new StringBuilder();
        while (true) {
            
            tmp = input.nextLine();//从键盘接收一行输入
            if(tmp.equals("#"))
                break;
            sb.append(tmp + "\n");//增加换行符(行与行之间分隔符号)
        } 
        str=sb.toString();
        
        String str1[]=str.split("\\n");
        
        boolean b=false;
        Atm tm=null;
        for(i=0;i<str1.length;i++)
        
        {b=false;
            String str2[]=str1[i].split("\\s+");                       
                if(str2.length==1) {                   
                    for(Card c:card)
                    if(str2[0].equals(c.id))
                        System.out.println("业务:查询余额 ¥"+String.format("%.2f",c.get().balance));
                }
                else {
                    double money=Double.parseDouble(str2[3]);                                     
                    for(Card c:card)
                        if(str2[0].equals(c.id)){
                                            b=true;
                                            if(str2[1].equals(c.password)==false) {
                                                System.out.println("Sorry,your password is wrong.");System.exit(0);
                                            }
                                            if(c.get().d==true&&money>c.get().balance) {if(c.get().balance>0)c.get().balance-=(0.05)*(money-c.get().balance);else c.get().balance-=(0.05)*(money);}
                                            boolean a=false;
                                            for(Atm s:atm) {
                                                if(s.id.equals(str2[2])) {a=true;tm=s;}
                                            }if(a==false) {
                                                System.out.println("Sorry,the ATM's id is wrong.");System.exit(0);
                                            }a=false;
                                            for (Atm s : c.get().get().get().number) {
                                                if(s.id.equals(str2[2]))
                                                    {a=true;c.get().balance-=money;}
                                                }if(a==false) {
                                                    c.get().balance-=(1+tm.get().a)*money;
                                                }System.out.println(c.get().balance);
                                                if((c.get().d==false&&c.get().balance<0)||((c.get().balance)<-50000&&c.get().d==true)){
                                                    System.out.println("Sorry,your account balance is insufficient.");System.exit(0);
                                                }
                                            System.out.print("业务:取款 "+c.get().get().id+"在");
                                            System.out.print(tm.get().id+"的");
                                            if(money>0)System.out.println(tm.id+"号ATM机上取款¥"+String.format("%.2f",money));                                           
                                            else System.out.println(tm.id+"号ATM机上存款¥"+String.format("%.2f",-money));
                                            
                System.out.println("当前余额为¥"+String.format("%.2f",c.get().balance));break;
                                        }
                    if(b==false) {System.out.println("Sorry,this card does not exist.");System.exit(0);}
                }
                
        }    
        
        
    }

}

题目集九和题目八类似,是题目集八的升级版。除了那些常规的错误判断,重点是要考虑跨行取款和信用卡透支的利息。

3.踩坑心得

题目集7-1:三角形三条边的判断,看看是否正确;

题目集7-2:对数据的分组和排序;

题目集8:类与类之间的关联关系,尽量不要用多重循环去查找,时间复杂度高;

题目集9:判断该银行卡是否为信用卡,能否透支;

4.改进建议

1.代码可读性还不够高,下括号没有标齐;

2.函数取名和变量取名比较随意一般都是用单个字母表示,没有实际意义;

3.代码中if-else过多,程序可读性不强;

5.总结

1.正则表达式相关知识掌握得更牢固了;

2.sort及相关方法的使用;

3.Comparable、Comparator 接口的应用

4:对类的继承,多态有了更清楚的认识;

5:对抽象类和接口的知识有了大概的了解;

6.类与类之间的聚合,依赖,关联等关系处理得更好了;

7.对于系统类这种代码较长的程序处理得更好了;

8.感谢老师的教学,讲得很细致;

 

posted @ 2021-06-18 17:40  啊哈指针  阅读(115)  评论(0)    收藏  举报