题目集7~9blog
一. 前言
首先,总结一下这三次题目集的我的个人感受及做题情况。从题量上看,三次题目集的题量都只有1到2题;从题目质量和难度上看,题目质量个人感觉是整体质量不错,尤其是有些测试点的位置比较巧妙,难度相对看不是很难,只要设计的巧妙就可以避免很多不必要的繁琐;从知识点看,这三次题目集,第一次题目集主要考察的是继承和多态的使用,以及Arraylist类的灵活应用,第二次题目集和第三次题目集都是编写一个银行ATM机的模拟程序,我个人感觉更多的考验自己设计程序结构的能力以及多态继承方面的灵活应用。
二. 设计与分析
-
题目集7(7-1)、(7-2)俩道题目的递进式设计分析总结
这俩个题目内容比较相似,7-1是图形卡片排序,7-2是图形卡片分组排序:
7-1:

7-2:

7-1源码:
import java.util.Scanner; import java.util.Arrays; import java.util.ArrayList; import java.util.TreeSet; //Chulishuju类 class Chulishuju{ ArrayList<Card> cardList=new ArrayList<>();//存边长 public Chulishuju(ArrayList<Integer> c){ for (Integer a:c){ if (a==0){ break; } else { switch (a) { case 1 :{ Card a1 = new Card(new Circle(Main.x.nextDouble())); cardList.add(a1); a1.getShape().setName("Circle"); } case 2 : { Card b1 = new Card(new Rectangle(Main.x.nextDouble(), Main.x.nextDouble())); cardList.add(b1); b1.getShape().setName("Rectangle"); } case 3 : { Card c1 = new Card(new Triangle(Main.x.nextDouble(), Main.x.nextDouble(), Main.x.nextDouble())); cardList.add(c1); c1.getShape().setName("Triangle"); } case 4 : { Card d1 = new Card(new Trapezoid(Main.x.nextDouble(), Main.x.nextDouble(), Main.x.nextDouble())); cardList.add(d1); d1.getShape().setName("Trapezoid"); } } } } } public boolean pdsfhf(){//判断数据是否合法 boolean kp=true; for (Card a:cardList){ if (!a.getShape().pdsfhf()){ kp=false; break; } } return kp; } public void cardSort(){//排序 TreeSet<Card> kp = new TreeSet<>(cardList); for (Card a : kp) { System.out.print(a.getShape()); } } public double getZmj(){//计算总面积 double zmj=0; for (Card a : cardList) { zmj=zmj+a.getShape().Mj(); } return zmj; } public void show(){//输出 System.out.println("The original list:"); for (Card a : cardList) { System.out.print(a.getShape()); } System.out.println("\nThe sorted list:"); cardSort(); System.out.printf("\nSum of area:%.2f\n",getZmj()); } } //Card类 class Card implements Comparable<Card>{ private Shape shape; //创建无参构造方法 public Card(){ } //创建带参构造方法 public Card(Shape shape) { this.shape = shape; } //getter public Shape getShape() { return shape; } //setter public void setShape(Shape shape){ this.shape=shape; } public int compareTo(Card card) { return -(int)(shape.Mj()-card.getShape().Mj()); } } //Shape类 abstract class Shape { private String name; //创建无参构造方法 public Shape() { } //创建带参构造方法 public Shape(String name) { this.name = name; } //getter public String getName() { return name; } //setter public void setName(String name) { this.name = name; } //面积 public abstract double Mj(); //判断数据是否合法 public abstract boolean pdsfhf(); public String toString() { return getName()+":"+String.format("%.2f ",Mj()); } } //Circle类 class Circle extends Shape{ private double r; //创建无参构造方法 public Circle(){ } //创建带参构造方法 public Circle(double r){ this.r=r; } //getter public double getR(){ return r; } //setter public void setR(double r){ this.r = r; } //判断数据是否合法 public boolean pdsfhf() { return r>0; } //计算圆面积 public double Mj(){ return Math.PI*r*r; } } //Rectangle类 class Rectangle extends Shape{ private double a,b; //创建无参构造方法 public Rectangle(){ } //创建带参构造方法 public Rectangle(double a, double b){ this.a=a; this.b=b; } //getter public double A(){ return a; } public double B(){ return b; } //setter public void setA(double a){ this.a=a; } public void setB(double b){ this.b=b; } //判断数据是否合法 public boolean pdsfhf() { return a>0&&b>0; } //计算矩形面积 public double Mj(){ return a*b; } } //Triangle类 class Triangle extends Shape{ private double a; private double b; private double c; //创建无参构造方法 public Triangle() { } //创建带参构造方法 public Triangle(double a, double b, double c){ this.a = a; this.b = b; this.c = c; } //getter public double A(){ return a; } public double B(){ return b; } public double C(){ return c; } //setter public void setA(double a){ this.a=a; } public void setB(double b){ this.b=b; } public void setC(double c){ this.c=c; } //判断数据是否合法 public boolean pdsfhf(){ Double[] bc=new Double[3]; bc[0]=a;bc[1]=b;bc[2]=c; boolean z=true; Arrays.sort(bc); if(!(a>0&&b>0&&c>0)){ z=false; } else{ if(a+b<c){ z=false; } } return z; } //计算三角形面积 public double Mj(){ double s1,s2; s1=a/2+b/2+c/2; s2=Math.sqrt(s1*(s1-a)*(s1-b)*(s1-c)); return s2; } } //Trapezoid类 class Trapezoid extends Shape{ private double c,b,h; //创建无参构造方法 public Trapezoid() { } //创建带参构造方法 public Trapezoid(double c, double b, double h) { this.c = c; this.b = b; this.h = h; } //getter public double C(){ return c; } public double B(){ return b; } public double H(){ return h; } //setter public void setC(double a){ this.c=c; } public void setB(double b){ this.b=b; } public void setH(double c){ this.h=h; } //判断数据是否合法 public boolean pdsfhf() { return b>0&&c>0&&h>0; } //计算梯形面积 public double Mj() { return c*h/2+b*h/2; } } //主类 public class Main{ public static Scanner x = new Scanner(System.in);//在Main类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接使用Main.input.next...即可(避免采坑) public static void main(String[] args){ ArrayList<Integer> xzlist = new ArrayList<>(); int xz; xz=x.nextInt(); while (xz!=0){//循环输入第一行数据 if(xz>4||xz<0){//如果输入的数据不合法 System.out.println("Wrong Format"); System.exit(0); } xzlist.add(xz); xz=x.nextInt(); } //检查数据是否合法 Chulishuju chulishuju=new Chulishuju(xzlist); int m=10; for(int i=0;i<=m;i++){ m++; } if(!chulishuju.pdsfhf()){ System.out.println("Wrong Format"); System.exit(0); } int coust=1; chulishuju.show(); x.close(); } }
7-1跟7-2设计思路相近,总体来看7-2是7-1的升级版本,很多在7-1设计时没有考虑的因素都需要在7-2上使用。
但在实操过程当中遇到了问题,测试点以及相应操作无法完成,导致后面7-2无法完成。
ATM仿真题目的设计思路分析总结

题目集8 ATM仿真题目源码
import java.util.Scanner; import java.util.ArrayList; //Bank类 class Bank { String bankname; ArrayList<String> ATMList; //创建带参构造方法 public Bank(String bankname,ArrayList<String> ATMList) { this.bankname=bankname; this.ATMList=ATMList; } } class BankImpl extends Bank { public BankImpl(String bankname, ArrayList<String> ATMList) { super(bankname, ATMList); } } //Account类 class Account { private final String name; private final String password; private double balance; ArrayList<Bank> banklist; Bank bank; private final ArrayList<String> cardList; //创建带参构造方法 public Account(String name, String password, double balance, ArrayList<Bank> banklist, Bank bank, ArrayList<String> cardList){ this.name=name; this.password=password; this.balance=balance; this.bank=bank; this.banklist=banklist; this.cardList=cardList; } //getter public String getName() { return name; } public String getPassword() { return password; } public double getBalance() { return balance; } public ArrayList<String> getCardList() { return cardList; } public void setBalance(double balance) { this.balance = balance; } } class AccountImpl extends Account { public AccountImpl(String name, String password, double balance, ArrayList<Bank> banklist, Bank bank, ArrayList<String> cardList) { super(name, password, balance, banklist, bank, cardList); } } //存取款的检查类 class Check { ArrayList<Account> accountList; String card; String password; String number; double money; public Check(ArrayList<Account> accountList,String card,String password,String number,double money){ this.accountList=accountList; this.card=card; this.password=password; this.number=number; this.money=money; } class CheckImpl extends Check { public CheckImpl(ArrayList<Account> accountList, String card, String password, String number, double money) { super(accountList, card, password, number, money); } } public boolean check(){ int flag=0; int i,j; int k=0; //检查账号是否正确 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if (card.equals(accountList.get(i).getCardList().get(j))){ flag=1; k=i; break; } } if(flag==1){ break; } } //检查密码是否正确 if(flag==1){ if(password.equals(accountList.get(k).getPassword())){ flag=2; } else{ System.out.println("Sorry,your password is wrong.");//银行卡密码错误 return false; } } else{ System.out.println("Sorry,this card does not exist.");//卡号不存在 return false; } //检查ATM机编号是否正确 i=0; while (i<accountList.get(k).banklist.size()) { for(j=0;j<accountList.get(k).banklist.get(i).ATMList.size();j++){ if(number.equals(accountList.get(k).banklist.get(i).ATMList.get(j))){ flag=3; break; } } i++; } //检查金额是否正确 switch (flag) { case 3: if (money <= accountList.get(k).getBalance()) { flag = 4; } else { System.out.println("Sorry,your account balance is insufficient.");//取款金额大于账户余额 return false; } break; default: System.out.println("Sorry,the ATM's id is wrong.");//ATM机编号不存在 return false; } //检查是否跨行 switch (flag) { case 4: for (i = 0; i < accountList.get(k).bank.ATMList.size(); i++) { if (number.equals(accountList.get(k).bank.ATMList.get(i))) { flag = 5; break; } } break; } if(flag!=5){ System.out.println("Sorry,cross-bank withdrawal is not supported.");//跨行存取款 return false; } else return true; } } //余额查询的检查类 class Check1 { ArrayList<Account> accountList; String card; public Check1(ArrayList<Account> accountList, String card){ this.accountList = accountList; this.card = card; } public boolean check(){ int i,j; int flag=0; //卡号校验 i=0; while (i<accountList.size()) { for(j=0;j<accountList.get(i).getCardList().size();j++){ if (card.equals(accountList.get(i).getCardList().get(j))){ flag=1; break; } } if(flag==1){ break; } i++; } if(flag==1) return true; else{ System.out.println("Sorry,this card does not exist.");//卡号不存在 return false; } } } class Check1Impl extends Check1 { public Check1Impl(ArrayList<Account> accountList, String card) { super(accountList, card); } } //存取款类 class Access{ ArrayList<Account> accountList; String card; String password; String number; double money; public Access(ArrayList<Account> accountList,String card,String password,String number,double money){ this.password=password; this.number=number; this.card=card; this.accountList=accountList; this.money=money; } public void access(){ int i,j; int t=0; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ t=i; break; } } } accountList.get(t).setBalance(accountList.get(t).getBalance()-money); } } class AccessImpl extends Access { public AccessImpl(ArrayList<Account> accountList, String card, String password, String number, double money) { super(accountList, card, password, number, money); } } //存取款的展示类 class Show{ ArrayList<Account> accountList; String card; String password; String number; double money; public Show(ArrayList<Account> accountList,String card,String password,String number,double money){ this.password=password; this.number=number; this.card=card; this.accountList=accountList; this.money=money; } public void show(){ int i,j; int t=0; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ t=i; break; } } } if(money>=0){//取款 System.out.printf(accountList.get(t).getName()+"在"+accountList.get(t).bank.bankname+"的"+number+"号ATM机上取款¥%.2f\n",money); } else{ money=-money; System.out.printf(accountList.get(t).getName()+"在"+accountList.get(t).bank.bankname+"的"+number+"号ATM机上存款¥%.2f\n",money); } System.out.printf("当前余额为¥%.2f\n",accountList.get(t).getBalance()); } } class ShowImpl extends Show { public ShowImpl(ArrayList<Account> accountList, String card, String password, String number, double money) { super(accountList, card, password, number, money); } } class ShowImplImpl extends ShowImpl { public ShowImplImpl(ArrayList<Account> accountList, String card, String password, String number, double money) { super(accountList, card, password, number, money); } } class Account1{ private int id; private double balance; private double annualInterestRate; private java.util.Date dateCreated; Account1() { dateCreated = new java.util.Date(); } Account1(int id, double balance) { this.id = id; this.balance = balance; dateCreated = new java.util.Date(); } public int getId() { return id; } public double getBalance() { return balance; } public double getAnnualInterestRate() { return annualInterestRate; } public java.util.Date getDateCreated() { return dateCreated; } public void setId(int id) { this.id = id; } public void setBalance(double balance) { this.balance = balance; } public void setAnnualInterestRate(double annualInterestRate) { this.annualInterestRate = annualInterestRate; } public double getMonthlyInterestRate() { return annualInterestRate / 12; } public void withDraw(double x) { balance = balance - x; } public void deposit(double y) { balance = balance + y; } } //余额查询的展示类 class Show1{ ArrayList<Account> accountList; String card; public Show1(ArrayList<Account> accountList,String card){ this.accountList=accountList; this.card=card; } public void show1(){ int i,j; int t=0; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ t=i; break; } } } System.out.printf("¥%.2f\n",accountList.get(t).getBalance()); } } //主类 public class Main { public static void main(String[] args) { //ATM机编号数组 ArrayList<String> ATMList1 = new ArrayList<>(); ATMList1.add("01"); ATMList1.add("02"); ATMList1.add("03"); ATMList1.add("04"); Bank jsyh = new Bank("中国建设银行", ATMList1); ArrayList<String> ATMList2 = new ArrayList<>(); ATMList2.add("05"); ATMList2.add("06"); Bank gsyh = new Bank("中国工商银行", ATMList2); //银行数组 ArrayList<Bank> bankList = new ArrayList<>(); bankList.add(jsyh); bankList.add(gsyh); //用户数组 ArrayList<String> cardList1 = new ArrayList<>(); cardList1.add("6217000010041315709"); cardList1.add("6217000010041315715"); Account account1 = new Account("杨过", "88888888", 10000.00, bankList, jsyh,cardList1); ArrayList<String> cardList2 = new ArrayList<>(); cardList2.add("6217000010041315718"); Account account2 = new Account("杨过", "88888888", 10000.00, bankList,jsyh,cardList2); ArrayList<String> cardList3 = new ArrayList<>(); cardList3.add("6217000010051320007"); Account account3 = new Account("郭靖", "88888888", 10000.00, bankList,jsyh,cardList3); ArrayList<String> cardList4 = new ArrayList<>(); cardList4.add("6222081502001312389"); Account account4 = new Account("张无忌", "88888888", 10000.00, bankList,gsyh,cardList4); ArrayList<String> cardList5 = new ArrayList<>(); cardList5.add("6222081502001312390"); Account account5 = new Account("张无忌", "88888888", 10000.00, bankList,gsyh,cardList5); ArrayList<String> cardList6 = new ArrayList<>(); cardList6.add("6222081502001312399"); cardList6.add("6222081502001312400"); Account account6 = new Account("张无忌", "88888888", 10000.00, bankList,gsyh,cardList6); ArrayList<String> cardList7 = new ArrayList<>(); cardList7.add("6222081502051320785"); Account account7 = new Account("韦小宝", "88888888", 10000.00, bankList,gsyh,cardList7); ArrayList<String> cardList8 = new ArrayList<>(); cardList8.add("6222081502051320786"); Account account8 = new Account("韦小宝", "88888888", 10000.00, bankList,gsyh,cardList8); //用户总数组 ArrayList<Account> accountList = new ArrayList<>(); accountList.add(account1); accountList.add(account2); accountList.add(account3); accountList.add(account4); accountList.add(account5); accountList.add(account6); accountList.add(account7); accountList.add(account8); Scanner x=new Scanner(System.in); String kp; Check check; Check1 check1; kp=x.nextLine(); while(!kp.equals("#")){ String[] shuju=kp.split("\\s+");//输入的每行数据用空格隔开,存为数组 if(shuju.length!=1){ check = new Check(accountList,shuju[0],shuju[1],shuju[2],Double.parseDouble(shuju[3])); if (check.check()){ Access access = new Access(accountList,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); access.access(); Show show = new Show(accountList,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); show.show(); } } else { check1=new Check1(accountList,shuju[0]); if(check1.check()){ Show1 show1= new Show1(accountList,shuju[0]); show1.show1(); } } kp=x.nextLine(); } } }
题目集9 ATM仿真题目源码
package 作业; import java.util.Scanner; import java.util.ArrayList; //Bank类 class Bank { String bankname; ArrayList<String> ATMList; //创建带参构造方法 public Bank(String bankname,ArrayList<String> ATMList) { this.bankname=bankname; this.ATMList=ATMList; } } class BankImpl extends Bank { public BankImpl(String bankname, ArrayList<String> ATMList) { super(bankname, ATMList); } } //Account类 class Account { private String name; private String password; private double balance; ArrayList<Bank> banklist; Bank bank; private ArrayList<String> cardList; private ArrayList<String> ATMList; private ArrayList<String> BanknameList; //创建带参构造方法 public Account(String name, String account, String password, double balance, ArrayList<Bank> banklist, Bank bank, ArrayList<String> cardList, ArrayList<String> ATMList, ArrayList<String> BanknameList){ this.name=name; this.password=password; this.balance=balance; this.bank=bank; this.banklist=banklist; this.cardList=cardList; this.ATMList=ATMList; this.BanknameList=BanknameList; } public String getName() { return name; } public String getPassword() { return password; } public double getBalance() { return balance; } public ArrayList<String> getCardList() { return cardList; } public ArrayList<String> getATMList() { return ATMList; } public ArrayList<String> getBanknameList() { return BanknameList; } public void setPassword(String password) { this.password = password; } public void setBalance(double balance) { this.balance = balance; } public void setCardList(ArrayList<String> cardList) { this.cardList = cardList; } public void setATMList(ArrayList<String> ATMList) { this.ATMList = ATMList; } public void setBanknameList(ArrayList<String> BanknameList) { this.BanknameList = BanknameList; } } //存取款的检查类 class Check { ArrayList<Account> accountList; String card; String password; String number; double money; public Check(ArrayList<Account> accountList,String card,String password,String number,double money){ this.accountList=accountList; this.card=card; this.password=password; this.number=number; this.money=money; } public boolean check(){ int flag=0; int i,j,k=0; //检查账号是否正确 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if (card.equals(accountList.get(i).getCardList().get(j))){ flag=1; k=i; break; } } if(flag==1){ break; } } //检查密码是否正确 if(flag==1){ if(password.equals(accountList.get(k).getPassword())){ flag=2; } else{ System.out.println("Sorry,your password is wrong.");//银行卡密码错误 return false; } } else{ System.out.println("Sorry,this card does not exist.");//卡号不存在 return false; } //检查ATM机编号是否正确 if(flag==2){ for(i=0;i<accountList.get(k).banklist.size();i++){ for(j=0;j<accountList.get(k).banklist.get(i).ATMList.size();j++){ if(number.equals(accountList.get(k).banklist.get(i).ATMList.get(j))){ flag=3; break; } } } } if(flag==3){ return true; } else{ System.out.println("Sorry,the ATM's id is wrong.");//ATM机编号不存在 return false; } } } //余额查询的检查类 class Check1 { ArrayList<Account> accountList; String card; public Check1(ArrayList<Account> accountList, String card){ this.accountList = accountList; this.card = card; } public boolean check(){ int i,j; int flag=0; //卡号校验 i=0; while (i<accountList.size()) { for(j=0;j<accountList.get(i).getCardList().size();j++){ if (card.equals(accountList.get(i).getCardList().get(j))){ flag=1; break; } } if(flag==1){ break; } i++; } if(flag==1) return true; else{ System.out.println("Sorry,this card does not exist.");//卡号不存在 return false; } } } class Check1Impl extends Check1 { public Check1Impl(ArrayList<Account> accountList, String card) { super(accountList, card); } } class Check2{ ArrayList<Account> accountList; String card; String password; String number; double money; public Check2(ArrayList<Account> accountList, String card, String password, String number, double money){ this.accountList=accountList; this.card=card; this.password=password; this.number=number; this.money=money; } public boolean check(){ int i,j,k=0; int flag=0; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if (card.equals(accountList.get(i).getCardList().get(j))){ k=i; break; } } } //检查是否跨行 for(i=0;i<accountList.get(k).bank.ATMList.size();i++){ if(number.equals(accountList.get(k).bank.ATMList.get(i))){ flag=1; break; } } //未跨行 //跨行 return flag != 1; } } //账号种类检查类 class Check3{ ArrayList<Account> accountList; ArrayList<Account> accountList1; String card; String password; String number; double money; public Check3(ArrayList<Account> accountList, ArrayList<Account> accountList1, String card, String password, String number, double money){ this.accountList=accountList; this.accountList1=accountList1; this.card=card; this.password=password; this.number=number; this.money=money; } public boolean check(){ int i,j; int flag=0; //卡号校验 for(i=0;i<accountList1.size();i++){ for(j=0;j<accountList1.get(i).getCardList().size();j++){ if (card.equals(accountList1.get(i).getCardList().get(j))){ flag=1; break; } } } return flag == 1; } } //金额检查类 class Check4{ ArrayList<Account> accountList; String card; String password; String number; double money; public Check4(ArrayList<Account> accountList, String card, String password, String number, double money){ this.accountList=accountList; this.card=card; this.password=password; this.number=number; this.money=money; } public boolean check() { int i, j, k = 0; int flag = 0; //卡号校验 for (i = 0; i < accountList.size(); i++) { for (j = 0; j < accountList.get(i).getCardList().size(); j++) { if (card.equals(accountList.get(i).getCardList().get(j))) { k = i; break; } } } //检查是否跨行 if(money<=accountList.get(k).getBalance()){ return true; } else { System.out.println("Sorry,your account balance is insufficient.");//取款金额大于账户余额 return false; } } } //借记账号未跨行存取款类 class Access{ ArrayList<Account> accountList; String card; String password; String number; double money; public Access(ArrayList<Account> accountList,String card,String password,String number,double money){ this.password=password; this.number=number; this.card=card; this.accountList=accountList; this.money=money; } public void access(){ int i,j; int t=0; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ t=i; break; } } } accountList.get(t).setBalance(accountList.get(t).getBalance()-money); } } class AccessImpl extends Access { public AccessImpl(ArrayList<Account> accountList, String card, String password, String number, double money) { super(accountList, card, password, number, money); } } //借记账号跨行存取款类 class Access1{ ArrayList<Account> accountList; String card; String password; String number; double money; public Access1(ArrayList<Account> accountList, String card, String password, String number, double money){ this.password=password; this.number=number; this.card=card; this.accountList=accountList; this.money=money; } public void access(){ int i,j,k=0; double q=0; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ k=i; break; } } } //跨行取款手续费 for(i=0;i<accountList.get(k).getATMList().size();i++){ if(number.equals(accountList.get(k).getATMList().get(0))||number.equals(accountList.get(k).getATMList().get(1))||number.equals(accountList.get(k).getATMList().get(2))||number.equals(accountList.get(k).getATMList().get(3))){ q=money*0.02; break; } else if (number.equals(accountList.get(k).getATMList().get(4))||number.equals(accountList.get(k).getATMList().get(5))){ q=money*0.03; break; } else if(number.equals(accountList.get(k).getATMList().get(6))||number.equals(accountList.get(k).getATMList().get(7))||number.equals(accountList.get(k).getATMList().get(8))||number.equals(accountList.get(k).getATMList().get(9))||number.equals(accountList.get(k).getATMList().get(10))){ q=money*0.04; break; } } accountList.get(k).setBalance(accountList.get(k).getBalance()-money-q); } } //贷记账号未跨行存取款类 class Access2{ ArrayList<Account> accountList; String card; String password; String number; double money; public Access2(ArrayList<Account> accountList, String card, String password, String number, double money){ this.password=password; this.number=number; this.card=card; this.accountList=accountList; this.money=money; } public void access(){ int i,j,k=0; double l; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ k=i; //System.out.println(accountList.get(k)); break; } } } //System.out.println("wkh"); if(accountList.get(k).getBalance()>money&&accountList.get(k).getBalance()>0){ accountList.get(k).setBalance(accountList.get(k).getBalance()-money); } else if(accountList.get(k).getBalance()<money&&accountList.get(k).getBalance()>0){ l=(money-accountList.get(k).getBalance())*0.05; accountList.get(k).setBalance(accountList.get(k).getBalance()-money-l); } else if(accountList.get(k).getBalance()<money&&accountList.get(k).getBalance()<=0){ l=money*0.05; accountList.get(k).setBalance(accountList.get(k).getBalance()-money-l); } } } //贷记账号跨行存取款类 class Access3 { ArrayList<Account> accountList; String card; String password; String number; double money; public Access3(ArrayList<Account> accountList, String card, String password, String number, double money) { this.password = password; this.number = number; this.card = card; this.accountList = accountList; this.money = money; } public void access() { int i, j, k = 0; double l,q=0; //卡号校验 for (i = 0; i < accountList.size(); i++) { for (j = 0; j < accountList.get(i).getCardList().size(); j++) { if (card.equals(accountList.get(i).getCardList().get(j))) { k = i; //System.out.println(accountList.get(k)); break; } } } //跨行取款手续费 for (i = 0; i < accountList.get(k).getATMList().size(); i++) { if (number.equals(accountList.get(k).getATMList().get(0)) || number.equals(accountList.get(k).getATMList().get(1)) || number.equals(accountList.get(k).getATMList().get(2)) || number.equals(accountList.get(k).getATMList().get(3))) { q = money * 0.02; break; } else if (number.equals(accountList.get(k).getATMList().get(4)) || number.equals(accountList.get(k).getATMList().get(5))) { q = money * 0.03; break; } else if (number.equals(accountList.get(k).getATMList().get(6)) || number.equals(accountList.get(k).getATMList().get(7)) || number.equals(accountList.get(k).getATMList().get(8)) || number.equals(accountList.get(k).getATMList().get(9)) || number.equals(accountList.get(k).getATMList().get(10))) { q = money * 0.04; break; } } //System.out.println("kh"); if (accountList.get(k).getBalance() >=money&&accountList.get(k).getBalance()>0) { accountList.get(k).setBalance(accountList.get(k).getBalance() - money - q); } else if(accountList.get(k).getBalance() <money&&accountList.get(k).getBalance()>0){ l = (money - accountList.get(k).getBalance()) * 0.05; accountList.get(k).setBalance(accountList.get(k).getBalance() - money - l - q); } else if(accountList.get(k).getBalance() <money&&accountList.get(k).getBalance()<=0){ l=money*0.05; accountList.get(k).setBalance(accountList.get(k).getBalance() - money - l - q); } } } //借机账号存取款的展示类 class Show{ ArrayList<Account> accountList; ArrayList<Account> accountList1; String card; String password; String number; double money; public Show(ArrayList<Account> accountList, ArrayList<Account> accountList1,String card, String password, String number, double money){ this.password=password; this.number=number; this.card=card; this.accountList=accountList; this.accountList1=accountList1; this.money=money; } public void show(){ int i,j; int t=0; String bankname=""; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ t=i; break; } } } //银行名称确认 for(i=0;i<accountList.get(t).getATMList().size();i++){ if(number.equals(accountList.get(t).getATMList().get(0))||number.equals(accountList.get(t).getATMList().get(1))||number.equals(accountList.get(t).getATMList().get(2))||number.equals(accountList.get(t).getATMList().get(3))){ bankname=accountList.get(t).getBanknameList().get(0); break; } else if (number.equals(accountList.get(t).getATMList().get(4))||number.equals(accountList.get(t).getATMList().get(5))){ bankname=accountList.get(t).getBanknameList().get(1); break; } else if(number.equals(accountList.get(t).getATMList().get(6))||number.equals(accountList.get(t).getATMList().get(7))||number.equals(accountList.get(t).getATMList().get(8))||number.equals(accountList.get(t).getATMList().get(9))||number.equals(accountList.get(t).getATMList().get(10))){ bankname=accountList.get(t).getBanknameList().get(2); break; } } if(money>=0){//取款 if(accountList.get(t).getBalance()>=0){ System.out.printf("业务:取款 "+accountList.get(t).getName()+"在"+bankname+"的"+number+"号ATM机上取款¥%.2f\n",money); System.out.printf("当前余额为¥%.2f\n",accountList.get(t).getBalance()); } else { System.out.println("Sorry,your account balance is insufficient.");//输入取款金额大于账户余额 } } else{//存款 money=-money; System.out.printf("业务:存款 "+accountList.get(t).getName()+"在"+accountList.get(t).bank.bankname+"的"+number+"号ATM机上存款¥%.2f\n",money); System.out.printf("当前余额为¥%.2f\n",accountList.get(t).getBalance()); } } } class Account1{ private int id; private double balance; private double annualInterestRate; private java.util.Date dateCreated; Account1() { dateCreated = new java.util.Date(); } Account1(int id, double balance) { this.id = id; this.balance = balance; dateCreated = new java.util.Date(); } public int getId() { return id; } public double getBalance() { return balance; } public double getAnnualInterestRate() { return annualInterestRate; } public java.util.Date getDateCreated() { return dateCreated; } public void setId(int id) { this.id = id; } public void setBalance(double balance) { this.balance = balance; } public void setAnnualInterestRate(double annualInterestRate) { this.annualInterestRate = annualInterestRate; } public double getMonthlyInterestRate() { return annualInterestRate / 12; } public void withDraw(double x) { balance = balance - x; } public void deposit(double y) { balance = balance + y; } } //余额查询的展示类 class Show1{ ArrayList<Account> accountList; String card; public Show1(ArrayList<Account> accountList, String card){ this.accountList=accountList; this.card=card; } public void show1(){ int i,j; int t=0; //卡号校验 for(i=0;i<accountList.size();i++){ for(j=0;j<accountList.get(i).getCardList().size();j++){ if(card.equals(accountList.get(i).getCardList().get(j))){ t=i; break; } } } System.out.printf("业务:查询余额 ¥%.2f\n",accountList.get(t).getBalance()); } } //贷记账号存取款的展示类 class Show2{ ArrayList<Account> accountList; ArrayList<Account> accountList1; String card; String password; String number; double money; public Show2(ArrayList<Account> accountList, ArrayList<Account> accountList1, String card, String password, String number, double money){ this.accountList=accountList; this.accountList1=accountList1; this.card=card; this.password=password; this.number=number; this.money=money; } public void show() { int i, j, k = 0; String bankname = ""; //卡号校验 for (i = 0; i < accountList.size(); i++) { for (j = 0; j < accountList.get(i).getCardList().size(); j++) { if (card.equals(accountList.get(i).getCardList().get(j))) { k = i; break; } } } //银行名称确认 for (i = 0; i < accountList.get(k).getATMList().size(); i++) { if (number.equals(accountList.get(k).getATMList().get(0)) || number.equals(accountList.get(k).getATMList().get(1)) || number.equals(accountList.get(k).getATMList().get(2)) || number.equals(accountList.get(k).getATMList().get(3))) { bankname = accountList.get(k).getBanknameList().get(0); break; } else if (number.equals(accountList.get(k).getATMList().get(4)) || number.equals(accountList.get(k).getATMList().get(5))) { bankname = accountList.get(k).getBanknameList().get(1); break; } else if (number.equals(accountList.get(k).getATMList().get(6)) || number.equals(accountList.get(k).getATMList().get(7)) || number.equals(accountList.get(k).getATMList().get(8)) || number.equals(accountList.get(k).getATMList().get(9)) || number.equals(accountList.get(k).getATMList().get(10))) { bankname = accountList.get(k).getBanknameList().get(2); break; } } if(money>0){//取款 if(accountList.get(k).getBalance()>=(-50000)){ System.out.printf("业务:取款 "+accountList.get(k).getName()+"在"+bankname+"的"+number+"号ATM机上取款¥%.2f\n",money); System.out.printf("当前余额为¥%.2f\n",accountList.get(k).getBalance()); } else { System.out.println("Sorry,your account balance is insufficient.");//透支金额超过规定最大透支金额 } } else{//存款 money=-money; System.out.printf("业务:存款 "+accountList.get(k).getName()+"在"+accountList.get(k).bank.bankname+"的"+number+"号ATM机上存款¥%.2f\n",money); System.out.printf("当前余额为¥%.2f\n",accountList.get(k).getBalance()); } } } //主类 public class Main { public static void main(String[] args) { //ATM机编号数组 ArrayList<String> ATMList1 = new ArrayList<>(); ATMList1.add("01"); ATMList1.add("02"); ATMList1.add("03"); ATMList1.add("04"); Bank jsyh = new Bank("中国建设银行", ATMList1); ArrayList<String> ATMList2 = new ArrayList<>(); ATMList2.add("05"); ATMList2.add("06"); Bank gsyh = new Bank("中国工商银行", ATMList2); ArrayList<String> ATMList3 = new ArrayList<>(); ATMList3.add("07"); ATMList3.add("08"); ATMList3.add("09"); ATMList3.add("10"); ATMList3.add("11"); Bank nyyh = new Bank("中国农业银行", ATMList3); ArrayList<String> ATMList = new ArrayList<>(); ATMList.add("01"); ATMList.add("02"); ATMList.add("03"); ATMList.add("04"); ATMList.add("05"); ATMList.add("06"); ATMList.add("07"); ATMList.add("08"); ATMList.add("09"); ATMList.add("10"); ATMList.add("11"); //银行数组 ArrayList<Bank> bankList = new ArrayList<>(); bankList.add(jsyh); bankList.add(gsyh); bankList.add(nyyh); ArrayList<String> banknameList = new ArrayList<>(); banknameList.add("中国建设银行"); banknameList.add("中国工商银行"); banknameList.add("中国农业银行"); //用户数组 ArrayList<String> cardList1 = new ArrayList<>(); cardList1.add("6217000010041315709"); cardList1.add("6217000010041315715"); Account account1 = new Account("杨过", "3217000010041315709", "88888888", 10000.00, bankList, jsyh,cardList1,ATMList,banknameList); ArrayList<String> cardList2 = new ArrayList<>(); cardList2.add("6217000010041315718"); Account account2 = new Account("杨过", "3217000010041315715", "88888888", 10000.00, bankList,jsyh,cardList2,ATMList,banknameList); ArrayList<String> cardList3 = new ArrayList<>(); cardList3.add("6217000010051320007"); Account account3 = new Account("郭靖", "3217000010051320007", "88888888", 10000.00, bankList,jsyh,cardList3,ATMList,banknameList); ArrayList<String> cardList4 = new ArrayList<>(); cardList4.add("6222081502001312389"); Account account4 = new Account("张无忌", "3222081502001312389", "88888888", 10000.00, bankList,gsyh,cardList4,ATMList,banknameList); ArrayList<String> cardList5 = new ArrayList<>(); cardList5.add("6222081502001312390"); Account account5 = new Account("张无忌", "3222081502001312390", "88888888", 10000.00, bankList,gsyh,cardList5,ATMList,banknameList); ArrayList<String> cardList6 = new ArrayList<>(); cardList6.add("6222081502001312399"); cardList6.add("6222081502001312400"); Account account6 = new Account("张无忌", "3222081502001312399", "88888888", 10000.00, bankList,gsyh,cardList6,ATMList,banknameList); ArrayList<String> cardList7 = new ArrayList<>(); cardList7.add("6222081502051320785"); Account account7 = new Account("韦小宝", "3222081502051320785", "88888888", 10000.00, bankList,gsyh,cardList7,ATMList,banknameList); ArrayList<String> cardList8 = new ArrayList<>(); cardList8.add("6222081502051320786"); Account account8 = new Account("韦小宝", "3222081502051320786", "88888888", 10000.00, bankList,gsyh,cardList8,ATMList,banknameList); ArrayList<String> cardList9 = new ArrayList<>(); cardList9.add("6640000010045442002"); cardList9.add("6640000010045442003"); Account account9 = new Account("张三丰", "3640000010045442002", "88888888", 10000.00, bankList,jsyh,cardList9,ATMList,banknameList); ArrayList<String> cardList10 = new ArrayList<>(); cardList10.add("6640000010045441009"); Account account10 = new Account("令狐冲", "3640000010045441009", "88888888", 10000.00, bankList,gsyh,cardList10,ATMList,banknameList); ArrayList<String> cardList11 = new ArrayList<>(); cardList11.add("6630000010033431001"); Account account11 = new Account("乔峰", "3630000010033431001", "88888888", 10000.00, bankList,nyyh,cardList11,ATMList,banknameList); ArrayList<String> cardList12 = new ArrayList<>(); cardList12.add("6630000010033431008"); Account account12 = new Account("洪七公", "3630000010033431008", "88888888", 10000.00, bankList,nyyh,cardList12,ATMList,banknameList); //借记账号用户总数组 ArrayList<Account> accountList = new ArrayList<>(); accountList.add(account1); accountList.add(account2); accountList.add(account3); accountList.add(account4); accountList.add(account5); accountList.add(account6); accountList.add(account7); accountList.add(account8); accountList.add(account9); accountList.add(account10); accountList.add(account11); accountList.add(account12); //贷记账号用户总数组 ArrayList<Account> accountList1=new ArrayList<>(); accountList1.add(account9); accountList1.add(account10); accountList1.add(account11); accountList1.add(account12); Scanner x=new Scanner(System.in); String kp; Check check; Check1 check1; Check2 check2; Check3 check3; Check4 check4; kp=x.nextLine(); while(!kp.equals("#")){ String[] shuju=kp.split("\\s+");//输入的每行数据用空格隔开,存为数组 if(shuju.length!=1){//存取款 check = new Check(accountList,shuju[0],shuju[1],shuju[2],Double.parseDouble(shuju[3])); check2 = new Check2(accountList,shuju[0],shuju[1],shuju[2],Double.parseDouble(shuju[3])); check3 = new Check3(accountList,accountList1,shuju[0],shuju[1],shuju[2],Double.parseDouble(shuju[3])); check4 = new Check4(accountList,shuju[0],shuju[1],shuju[2],Double.parseDouble(shuju[3])); if (check.check()){ if(check3.check()){//贷记账号 //System.out.println("贷记账号"); if(check2.check()){//跨行 Access3 access3 = new Access3(accountList,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); access3.access(); //System.out.println("跨行"); Show2 show2 = new Show2(accountList,accountList1,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); show2.show(); } else {//未跨行 Access2 access2 = new Access2(accountList,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); access2.access(); //System.out.println("未跨行"); Show2 show2 = new Show2(accountList,accountList1,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); show2.show(); } } else {//借记账号 if(check4.check()){//金额检查 if(check2.check()){//跨行 Access1 access1 = new Access1(accountList,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); access1.access(); Show show = new Show(accountList,accountList1,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); show.show(); } else {//未跨行 Access access = new Access(accountList,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); access.access(); Show show = new Show(accountList,accountList1,shuju[0], shuju[1],shuju[2],Double.parseDouble(shuju[3])); show.show(); } } } } } else { check1=new Check1(accountList,shuju[0]); if(check1.check()){ Show1 show1= new Show1(accountList,shuju[0]); show1.show1(); } } kp=x.nextLine(); } } }
设计思路分析总结:
这俩个题目都是设计ATM仿真系统,题目集9相较于题目集8不仅可以取钱还可以存钱,而题目集9相较于题目8支持跨行取钱并且贷款:
存储类这俩题使用的都是ArrayList类,便于随时扩充代码内容,提高代码的简洁性,提高代码的复用性;
俩题的MAIN类功能差不多,都是要对数据进行处理和检验正确性,处理数据用到了正则表达式去判断ATM机号是否正确,判断卡号是否存在使用到findid()方法去找卡号,密码检验则是简单的字符串判断是否相等,然后是根据输入的数据,先逐行截取(split),再根据空格截取每一行每一段字,对其进行判断操作,并输出相应的内容,出现不合法问题停止当前程序输出Wrong Format。
三. 改进建议
针对继承与多态这方面的使用,我觉得自己还需要多去看一些相关书籍,让自己更好的去使用,提高代码的复用性,在设计类方面,感觉自己需要提高一下自己的逻辑思维能力,思考需要缜密一点,不要停留在表面,多考虑吧指责单一原则,开闭原则。在日后的日常解决题目需求的地方,我觉得可以多去使用接口,提高代码的简洁度,利用好JAVA语言的特性,而不是一成不变按照以前的编程思想去复杂地完成自己想要的效果。
四. 总结
我需要学习的点还有很多,首先就是需要提高一下自己的代码结构设计能力,不要自己给自己埋坑,然后就是需要多去了解一下JAVA的接口,哪些接口可以让我们在日常使用中更为方便简便。我觉得这三次题目集重在指导意义,通过前一次和后一次的对比,可以让自己很清晰的知道自己的不足,也让自己对犯错的印象更为深刻,对于继承、多态、抽象类、接口以及代码结构设计,自己都还需要进一步去了解他们更深的概念,从根本上去掌握他们。总之,继续努力,加油!

浙公网安备 33010602011771号