第三次Blog作业
一、前言
此次题目集7,8,9的题量比前面几次题目集的量少了一些,但是难度等等也上升了一个层次。当然所要包含的知识点也有很多,例如Arraylist数组的使用,迭代器的使用,以及排序方法的使用与不同等等,最重要的是,涉及到面向对象的基础三大特性封装,继承,多态的重要理解与使用。由此,可看出java学习还需要很大的努力,java中蕴含的知识点也有很多,还需要继续学习。
二、设计与分析
题目集7-1
掌握类的继承、多态性使用方法以及接口的应用。详见作业指导书 2020-OO第07次作业-1指导书V1.0.pdf
输入格式:
- 首先,在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:
1 3 4 2 1 3 4 2 1 3 0 - 然后根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。
输出格式:
- 如果图形数量非法(小于0)或图形属性值非法(数值小于0以及三角形三边不能组成三角形),则输出
Wrong Format。 - 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
- 排序前的各图形类型及面积,格式为
图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格; - 排序后的各图形类型及面积,格式同排序前的输出;
- 所有图形的面积总和,格式为
Sum of area:总面积值。
此题给出了编写的类图,具体的设计我们可以根据类图来进行编写。运用好接口的继承,最重要的还是对ArrayList数组中遍历数据的运用,运用这个就方便的进行循环的使用。再就是compareable接口
中compareto()方法的运用。都需要查阅相关资料来进行编写,至于其他部分不是很难。
参考代码如下:
import java.util.Arrays; import java.util.ArrayList; import java.util.*; public class Main { public static Scanner input = new Scanner(System.in); public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); int num = input.nextInt(); while(num != 0){ if(num < 0 || num > 4){ System.out.println("Wrong Format"); System.exit(0); } list.add(num); num = input.nextInt(); } DealCardList dealCardList = new DealCardList(list); if(!dealCardList.validate()){ System.out.println("Wrong Format"); System.exit(0); } dealCardList.showResult(); input.close(); } } abstract class Shape{ private String shapeName; public Shape() { } public Shape(String shapeName) { this.shapeName=shapeName; } public String getShapeName() { return shapeName; } public void setShapeName(String shapeName) { this.shapeName=shapeName; } public abstract double getArea(); public abstract boolean validate(); public String toString() { return getShapeName()+":"+String.format("%.2f ",getArea()); } } class Circle extends Shape{ private double radius; public Circle() { } public Circle(double radius) { this.radius=radius; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius=radius; } public double getArea() { return Math.PI*radius*radius; } public boolean validate() { if(radius<0) { return false; } else { return true; } } } class Rectangle extends Shape{ private double width,length; public Rectangle() { } public Rectangle(double width,double length) { this.width=width; this.length=length; } public double getWidth() { return width; } public void setWidth(double width) { this.width=width; } public double getLength() { return length; } public void setLength(double length) { this.length=length; } public double getArea() { return width*length; } public boolean validate() { if(width<0||length<0) { return false; } else { return true; } } } class Triangle extends Shape{ private double side1,side2,side3; public Triangle() { } public Triangle(double side1,double side2,double side3) { this.side1=side1; this.side2=side2; this.side3=side3; } public double getArea() { double p=(side1+side2+side3)/2; return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3)); } public boolean validate() { if(side1<0||side2<0||side3<0) { return false; } else if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1) { return false; } else if(side1-side2>=side3||side1-side3>=side2||side2-side3>=side1) { return false; } else { return true; } } } class Trapezoid extends Shape { private double topSide,bottomSide,height; public Trapezoid() { } public Trapezoid(double topSide,double bottomSide,double height) { this.topSide=topSide; this.bottomSide=bottomSide; this.height=height; } public double getArea() { return (topSide+bottomSide)*height/2; } public boolean validate() { if(topSide<0||bottomSide<0||height<0) { return false; } else { return true; } } } class Card implements Comparable<Card>{ Shape shape; public Card() { } public Card(Shape shape) { this.shape=shape; } public Shape getShape() { return shape; } public void setShape(Shape shape) { this.shape=shape; } public int compareTo(Card card) { return (int) (card.getShape().getArea()-this.shape.getArea()); } } class DealCardList{ ArrayList<Card> cardList=new ArrayList<Card>(); public DealCardList() { } public DealCardList(ArrayList<Integer> list) { for(Integer integer:list) { switch(integer) { case 1: double radius=Main.input.nextDouble(); Circle circle=new Circle(radius); Card card1=new Card(circle); card1.getShape().setShapeName("Circle"); cardList.add(card1); break; case 2: double width=Main.input.nextDouble(); double length=Main.input.nextDouble(); Rectangle rectangle=new Rectangle(width,length); Card card2=new Card(rectangle); card2.getShape().setShapeName("Rectangle"); cardList.add(card2); break; case 3: double side1=Main.input.nextDouble(); double side2=Main.input.nextDouble(); double side3=Main.input.nextDouble(); Triangle triangle=new Triangle(side1,side2,side3); Card card3=new Card(triangle); card3.getShape().setShapeName("Triangle"); cardList.add(card3); break; case 4: double topSide = Main.input.nextDouble(); double bottomSide = Main.input.nextDouble(); double height = Main.input.nextDouble(); Trapezoid trapezoid=new Trapezoid(topSide,bottomSide,height); Card card4=new Card(trapezoid); card4.getShape().setShapeName("Trapezoid"); cardList.add(card4); break; } if(integer==0) { break; } } } public boolean validate() { boolean m=true; for(Card card:cardList) { if(!card.getShape().validate()) { m=false; } } return m; } public void cardSort() { Collections.sort(cardList); for(Card card:cardList) { System.out.print(card.getShape()); } } public double getAllArea() { double sum=0; for(Card card:cardList) { sum=sum+card.getShape().getArea(); } return sum; } public void showResult() { System.out.println("The original list:"); for(Card card:cardList){ System.out.print(card.getShape()); } System.out.println("\nThe sorted list:"); cardSort(); System.out.print("\nSum of area:"+String.format("%.2f",getAllArea())); } }


类图题目中存在
7-2
掌握类的继承、多态性使用方法以及接口的应用。 具体需求参考作业指导书。
输入格式:
- 在一行上输入一串数字(1~4,整数),其中,1代表圆形卡片,2代表矩形卡片,3代表三角形卡片,4代表梯形卡片。各数字之间以一个或多个空格分隔,以“0”结束。例如:
1 3 4 2 1 3 4 2 1 3 0 - 根据第一行数字所代表的卡片图形类型,依次输入各图形的相关参数,例如:圆形卡片需要输入圆的半径,矩形卡片需要输入矩形的宽和长,三角形卡片需要输入三角形的三条边长,梯形需要输入梯形的上底、下底以及高。各数据之间用一个或多个空格分隔。
输出格式:
- 如果图形数量非法(<=0)或图形属性值非法(数值<0以及三角形三边不能组成三角形),则输出
Wrong Format。 - 如果输入合法,则正常输出,所有数值计算后均保留小数点后两位即可。输出内容如下:
- 排序前的各图形类型及面积,格式为
[图形名称1:面积值1图形名称2:面积值2 …图形名称n:面积值n ],注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格,在结束符“]”之前; - 输出分组后的图形类型及面积,格式为
[圆形分组各图形类型及面积][矩形分组各图形类型及面积][三角形分组各图形类型及面积][梯形分组各图形类型及面积],各组内格式为图形名称:面积值。按照“Circle、Rectangle、Triangle、Trapezoid”的顺序依次输出; - 各组内图形排序后的各图形类型及面积,格式同排序前各组图形的输出;
- 各组中面积之和的最大值输出,格式为
The max area:面积值。
本次实验跟上次实验类似,需要更改的无非就是最后输出结果的格式,将其格式改好了,这道题也就能成功解决了。参考代码如下:
import java.util.ArrayList; import java.util.*; public class Main { public static Scanner input = new Scanner(System.in); public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); int num = input.nextInt(); if(num==0) { System.out.println("Wrong Format"); System.exit(0); } while(num != 0){ if(num < 0 || num > 4){ System.out.println("Wrong Format"); System.exit(0); } list.add(num); num = input.nextInt(); } DealCardList dealCardList = new DealCardList(list); if(!dealCardList.validate()){ System.out.println("Wrong Format"); System.exit(0); } dealCardList.showResult(); input.close(); } } abstract class Shape{ private String shapeName; public Shape() { } public Shape(String shapeName) { this.shapeName=shapeName; } public String getShapeName() { return shapeName; } public void setShapeName(String shapeName) { this.shapeName=shapeName; } public abstract double getArea(); public abstract boolean validate(); public String toString() { return getShapeName()+":"+String.format("%.2f ",getArea()); } } class Circle extends Shape{ private double radius; public Circle() { } public Circle(double radius) { this.radius=radius; } public double getRadius() { return radius; } public void setRadius(double radius) { this.radius=radius; } public double getArea() { return Math.PI*radius*radius; } public boolean validate() { if(radius<0) { return false; } else { return true; } } } class Rectangle extends Shape{ private double width,length; public Rectangle() { } public Rectangle(double width,double length) { this.width=width; this.length=length; } public double getWidth() { return width; } public void setWidth(double width) { this.width=width; } public double getLength() { return length; } public void setLength(double length) { this.length=length; } public double getArea() { return width*length; } public boolean validate() { if(width<0||length<0) { return false; } else { return true; } } } class Triangle extends Shape{ private double side1,side2,side3; public Triangle() { } public Triangle(double side1,double side2,double side3) { this.side1=side1; this.side2=side2; this.side3=side3; } public double getArea() { double p=(side1+side2+side3)/2; return Math.sqrt(p*(p-side1)*(p-side2)*(p-side3)); } public boolean validate() { if(side1<0||side2<0||side3<0) { return false; } else if(side1+side2<=side3||side1+side3<=side2||side2+side3<=side1) { return false; } else if(side1-side2>=side3||side1-side3>=side2||side2-side3>=side1) { return false; } else { return true; } } } class Trapezoid extends Shape { private double topSide,bottomSide,height; public Trapezoid() { } public Trapezoid(double topSide,double bottomSide,double height) { this.topSide=topSide; this.bottomSide=bottomSide; this.height=height; } public double getArea() { return (topSide+bottomSide)*height/2; } public boolean validate() { if(topSide<0||bottomSide<0||height<0) { return false; } else { return true; } } } class Card implements Comparable<Card>{ Shape shape; public Card() { } public Card(Shape shape) { this.shape=shape; } public Shape getShape() { return shape; } public void setShape(Shape shape) { this.shape=shape; } public int compareTo(Card card) { return (int) (card.getShape().getArea()-this.shape.getArea()); } } class DealCardList{ ArrayList<Card> cardList=new ArrayList<Card>(); public DealCardList() { } public DealCardList(ArrayList<Integer> list) { for(Integer integer:list) { switch(integer) { case 1: double radius=Main.input.nextDouble(); Circle circle=new Circle(radius); Card card1=new Card(circle); card1.getShape().setShapeName("Circle"); cardList.add(card1); break; case 2: double width=Main.input.nextDouble(); double length=Main.input.nextDouble(); Rectangle rectangle=new Rectangle(width,length); Card card2=new Card(rectangle); card2.getShape().setShapeName("Rectangle"); cardList.add(card2); break; case 3: double side1=Main.input.nextDouble(); double side2=Main.input.nextDouble(); double side3=Main.input.nextDouble(); Triangle triangle=new Triangle(side1,side2,side3); Card card3=new Card(triangle); card3.getShape().setShapeName("Triangle"); cardList.add(card3); break; case 4: double topSide = Main.input.nextDouble(); double bottomSide = Main.input.nextDouble(); double height = Main.input.nextDouble(); Trapezoid trapezoid=new Trapezoid(topSide,bottomSide,height); Card card4=new Card(trapezoid); card4.getShape().setShapeName("Trapezoid"); cardList.add(card4); break; } if(integer==0) { break; } } } public boolean validate() { boolean m=true; for(Card card:cardList) { if(!card.getShape().validate()) { m=false; } } return m; } public void cardSort() { Collections.sort(cardList); } public void show() { System.out.print("["); for(Card card:cardList) { if(card.getShape().getShapeName()=="Circle") { System.out.print(card.getShape()); } if(card.getShape().getShapeName()=="Rectangle") { System.out.print(card.getShape()); } if(card.getShape().getShapeName()=="Triangle") { System.out.print(card.getShape()); } if(card.getShape().getShapeName()=="Trapezoid") { System.out.print(card.getShape()); } } System.out.print("]"); } public void show1() { System.out.print("["); for(Card card:cardList) { if(card.getShape().getShapeName()=="Circle") { System.out.print(card.getShape()); } } System.out.print("]"); System.out.print("["); for(Card card:cardList) { if(card.getShape().getShapeName()=="Rectangle") { System.out.print(card.getShape()); } } System.out.print("]"); System.out.print("["); for(Card card:cardList) { if(card.getShape().getShapeName()=="Triangle") { System.out.print(card.getShape()); } } System.out.print("]"); System.out.print("["); for(Card card:cardList) { if(card.getShape().getShapeName()=="Trapezoid") { System.out.print(card.getShape()); } } System.out.print("]"); } public void showResult() { System.out.println("The original list:"); show(); System.out.println("\nThe Separated List:"); show1(); System.out.println("\nThe Separated sorted List:"); cardSort(); show1(); System.out.print("\nThe max area:"); double[] a=new double[4]; for(Card card:cardList) { if(card.getShape().getShapeName()=="Circle") { a[0]+=card.getShape().getArea(); } if(card.getShape().getShapeName()=="Rectangle") { a[1]+=card.getShape().getArea(); } if(card.getShape().getShapeName()=="Triangle") { a[2]+=card.getShape().getArea(); } if(card.getShape().getShapeName()=="Trapezoid") { a[3]+=card.getShape().getArea(); } } double max=0; for(int i=0;i<4;i++) { if(max<a[i]) { max=a[i]; } } System.out.print(String.format("%.2f",max)); } }
与之相关的报表类图如下:


题目集8和9
设计ATM仿真系统,具体要求参见作业说明。 OO作业8-1题目说明.pdf
此次题目涉及ATM机的设计,需要用全方面的思维去思考,类的设计,以及面向对象过程中多态,继承的运用。将这些思考好了就可以进行一步一步的编写,达到所想要的目的。还要进行数据的录入,以及执行相应的
规则如果不符合规则,则要输出相应的语句。以及该如何遍历这些数据,而达到想要的结果。
题目二多增加了一些类,我们只需要再第一次题目的基础上,设计的银行类中,增加相应的账户等信息,以及修改题目相应的规则与该相应的输出,完成了题目一的设计,题目二的设计也会就显得十分便捷了。
题目一的参考代码如下:
import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.ArrayList; import java.util.Scanner; class Unionpay { private ArrayList<Bank> banklist=new ArrayList<Bank>(); public Unionpay() { } public Unionpay(ArrayList<Bank> banklist) { this.banklist=banklist; } public ArrayList<Bank> getBanklist() { return banklist; } public void setBanklist(ArrayList<Bank> banklist) { this.banklist=banklist; } public void addBank(Bank bank) { this.banklist.add(bank); } } class Bank{//银行类,存在银行名称,账户,atm private String bankname; private ArrayList<ATM> atmlist=new ArrayList<ATM>(); private ArrayList<Account> accountlist=new ArrayList<Account>(); public Bank() { } public Bank(String bankname) { this.bankname=bankname; } public String getBankname() { return bankname; } public void setBankname(String bankname) { this.bankname=bankname; } public void addAccount(Account account) { accountlist.add(account); } public void addAtm(ATM atm) { atmlist.add(atm); } public ArrayList<ATM> getATM() { return atmlist; } public void setATM( ArrayList<ATM> atmlist) { this.atmlist=atmlist; } public ArrayList<Account> getAccount() { return accountlist; } public void setAccount(ArrayList<Account> accountlist) { this.accountlist=accountlist; } } class User//用户类,名字,选择账户 { private String username; private ArrayList<Account> list=new ArrayList<Account>(); public User() { } public User(String username) { this.username=username; } public String getUsername() { return username; } public void setUsername(String username) { this.username=username; } public void addAccount(Account account) { list.add(account); } } class Account//账户号,余额,卡号 { private String accountid; private double balance=10000; private User user=new User(); private Bank bank=new Bank(); private static ArrayList<Card> cardlist=new ArrayList<Card>(); public Account() { } public Account(String accountid,double balance,User user,Bank bank) { this.accountid=accountid; this.balance=balance; this.user=user; this.bank=bank; } public void addCard(Card card) { cardlist.add(card); } public String getAccountid() { return accountid; } public void setAccountid(String accountid) { this.accountid=accountid; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance=balance; } public User getUser() { return user; } public void setUser(User user) { this.user=user; } public Bank getBank() { return bank; } public void setBank(Bank bank) { this.bank=bank; } public ArrayList<Card> getCardlist() { return cardlist; } public void setCardlist(ArrayList<Card> cardlist) { Account.cardlist=cardlist; } public static Account getAmount(String cardid) { Iterator<Card> carditr=Account.cardlist.iterator(); Card card=new Card(); while(carditr.hasNext()) { card=carditr.next(); if(card.getCardid().equals(cardid)) { return card.getAccount(); } } return null; } } class Card//卡号,密码 { private String cardid; private String password; private Account account=new Account(); public Card() { } public Card(String cardid,String password,Account account) { this.cardid=cardid; this.password=password; this.account=account; } public String getCardid() { return cardid; } public void setCardid(String cardid) { this.cardid=cardid; } public String getPassword() { return password; } public void setPassword(String password) { this.password=password; } public Account getAccount() { return account; } public void setAccount(Account account) { this.account=account; } public boolean checkPassword(String password1) { return password.equals(password1); } } class ATM//atm号,属于银行 { private String atmid; private Bank bank=new Bank(); public ATM() { } public ATM(String atmid,Bank bank) { this.atmid=atmid; this.bank=bank; } public String getAtmid() { return atmid; } public void setAtmid(String atmid) { this.atmid=atmid; } public Bank getBank() { return bank; } public void setBank(Bank bank) { this.bank=bank; } } class Check{ private Unionpay unionpay; private String cardid; private String password; private String atmid; private double amount; public Check() { } public Check(Unionpay unionpay,String cardid,String password,String atmid,double amount) { this.unionpay=unionpay; this.cardid=cardid; this.password=password; this.atmid=atmid; this.amount=amount; } public void check() { Card card=Check1.checkCard(unionpay,cardid); if(card==null) { System.out.print("Sorry,this card does not exit."); System.exit(0); } ATM atm=Check1.checkAtm(unionpay, atmid); if(atm==null) { System.out.print("Sorry,the ATM's id is wrong."); System.exit(0); } Account account=Account.getAmount(cardid); //检验取款金额是否大于余额 double balance=account.getBalance(); if(amount>balance) { System.out.print("Sorry,your account balance is insufficient."); System.exit(0); } if(!card.getPassword().equals(password)) { System.out.print("Sorry,your password is wrong."); System.exit(0); } //检验是否跨行取款 if(account.getBank().getBankname()!=atm.getBank().getBankname()) { System.out.print("Sorry,cross-bank withdrawal is not supported."); System.exit(0); } //取款更新 account.setBalance(balance-amount); if(amount>=0) { show(account,1); } else { show(account,0); } } public void show(Account account,int num) { String name=" "; if(num==1) { name="取款"; } else { name="存款"; amount=-1*amount; } String username=account.getUser().getUsername(); String bankname=account.getBank().getBankname(); System.out.println(username+"在"+bankname+"的"+atmid+"号ATM机上"+name+"¥"+String.format("%.2f",amount)); System.out.println("当前余额为"+"¥"+String.format("%.2f",account.getBalance())); } } class Check1 { public static Card checkCard(Unionpay unionpay,String cardid) { //检验卡号是否存在 Card card=new Card(); Iterator<Bank> bankitr=unionpay.getBanklist().iterator(); while(bankitr.hasNext())//遍历银行 { ArrayList<Account> accountlist=bankitr.next().getAccount(); Iterator<Account> accountitr=accountlist.iterator(); while(accountitr.hasNext())//遍历账户 { ArrayList<Card> cardlist=accountitr.next().getCardlist(); Iterator<Card> carditr=cardlist.iterator(); while(carditr.hasNext())//遍历卡号 { card=carditr.next(); if(card.getCardid().equals(cardid)) { return card; } } System.out.println("Sorry,this card does not exist."); System.exit(0); } } return null; } public static ATM checkAtm(Unionpay unionpay,String atmid)//检验ATM号 { Iterator<Bank> bankitr=unionpay.getBanklist().iterator(); Bank bank=new Bank(); ATM atm=new ATM(); while(bankitr.hasNext())//遍历银行 { bank=bankitr.next(); Iterator<ATM> atmitr=bank.getATM().iterator(); while(atmitr.hasNext())//遍历atm号 { atm=atmitr.next(); if(atm.getAtmid().equals(atmid)) { return atm; } } } return null; } } class GetBalance { private Unionpay unionpay=new Unionpay(); public GetBalance() { } public GetBalance( Unionpay unionpay) { this.unionpay=unionpay; } public double getBalance(String cardid) { return Check1.checkCard(unionpay,cardid).getAccount().getBalance(); } } public class Main { public static void main(String[] args) { Scanner x=new Scanner(System.in); Unionpay unionpay=new Unionpay(); Account account=new Account(); Bank zgjs=new Bank("中国建设银行"); Bank zggs=new Bank("中国工商银行"); unionpay.addBank(zgjs); unionpay.addBank(zggs); ATM atm1=new ATM("01",zgjs); ATM atm2=new ATM("02",zgjs); ATM atm3=new ATM("03",zgjs); ATM atm4=new ATM("04",zgjs); ATM atm5=new ATM("05",zggs); ATM atm6=new ATM("06",zggs); zgjs.addAtm(atm1); zgjs.addAtm(atm2); zgjs.addAtm(atm3); zgjs.addAtm(atm4); zggs.addAtm(atm5); zggs.addAtm(atm6); User name1=new User("杨过"); User name2=new User("郭靖"); User name3=new User("张无忌"); User name4=new User("韦小宝"); Account account1=new Account("3217000010041315709",10000.00,name1,zgjs); Account account2=new Account("3217000010041315715",10000.00,name1,zgjs); Account account3=new Account("3217000010051320007",10000.00,name2,zgjs); Account account4=new Account("3222081502001312389",10000.00,name3,zggs); Account account5=new Account("3222081502001312390",10000.00,name3,zggs); Account account6=new Account("3222081502001312399",10000.00,name3,zggs); Account account7=new Account("3222081502051320785",10000.00,name4,zggs); Account account8=new Account("3222081502051320786",10000.00,name4,zggs); zgjs.addAccount(account1); zgjs.addAccount(account2); zgjs.addAccount(account3); zggs.addAccount(account4); zggs.addAccount(account5); zggs.addAccount(account6); zggs.addAccount(account7); zggs.addAccount(account8); name1.addAccount(account1); name1.addAccount(account2); name2.addAccount(account3); name3.addAccount(account4); name3.addAccount(account5); name3.addAccount(account6); name4.addAccount(account7); name4.addAccount(account8); Card card1=new Card("6217000010041315709","88888888",account1); Card card2=new Card("6217000010041315715","88888888",account1); Card card3=new Card("6217000010041315718","88888888",account2); Card card4=new Card("6217000010051320007","88888888",account3); Card card5=new Card("6222081502001312389","88888888",account4); Card card6=new Card("6222081502001312390","88888888",account5); Card card7=new Card("6222081502001312399","88888888",account6); Card card8=new Card("6222081502001312400","88888888",account6); Card card9=new Card("6222081502051320785","88888888",account7); Card card10=new Card("6222081502051320786","88888888",account8); account1.addCard(card1); account1.addCard(card2); account2.addCard(card3); account3.addCard(card4); account4.addCard(card5); account5.addCard(card6); account6.addCard(card7); account6.addCard(card8); account7.addCard(card9); account8.addCard(card10); StringBuilder buildrer=new StringBuilder(); String data; while(!((data=x.nextLine()).equals("#"))) { buildrer.append(data+"\n"); } String[] dt=buildrer.toString().split("\n"); for(int i=0;i<dt.length;i++) { String[] dataline=dt[i].toString().split("\\s+"); if(dataline.length==1) { GetBalance gb=new GetBalance(unionpay); System.out.println("¥"+String.format("%.2f",gb.getBalance(dataline[0]))); } else { Check ch=new Check(unionpay,dataline[0],dataline[1],dataline[2],Double.parseDouble(dataline[3])); ch.check(); } } } }
题目集一的类图,生产报表如下;


题目二的参考代码如下
import java.util.Iterator; import java.util.ArrayList; import java.util.Scanner; class Unionpay { private ArrayList<Bank> banklist=new ArrayList<Bank>(); public Unionpay() { } public Unionpay(ArrayList<Bank> banklist) { this.banklist=banklist; } public ArrayList<Bank> getBanklist() { return banklist; } public void setBanklist(ArrayList<Bank> banklist) { this.banklist=banklist; } public void addBank(Bank bank) { this.banklist.add(bank); } } class Bank{//银行类,存在银行名称,账户,atm private String bankname; private double temp;//手续费 private ArrayList<ATM> atmlist=new ArrayList<ATM>(); private ArrayList<Account> accountlist=new ArrayList<Account>(); public Bank() { } public Bank(String bankname,double temp) { this.bankname=bankname; this.temp=temp; } public double getTemp() { return temp; } public void setTemp(double temp) { this.temp=temp; } public String getBankname() { return bankname; } public void setBankname(String bankname) { this.bankname=bankname; } public void addAccount(Account account) { accountlist.add(account); } public void addAtm(ATM atm) { atmlist.add(atm); } public ArrayList<ATM> getATM() { return atmlist; } public void setATM( ArrayList<ATM> atmlist) { this.atmlist=atmlist; } public ArrayList<Account> getAccount() { return accountlist; } public void setAccount(ArrayList<Account> accountlist) { this.accountlist=accountlist; } } class User//用户类,名字,选择账户 { private String username; private ArrayList<Account> list=new ArrayList<Account>(); public User() { } public User(String username) { this.username=username; } public String getUsername() { return username; } public void setUsername(String username) { this.username=username; } public void addAccount(Account account) { list.add(account); } } class Account//账户号,余额,卡号 { private String accountid; private double balance=10000; private User user=new User(); private Bank bank=new Bank(); private double temp;//透支取款手续费 private double num;//透支取款最大金额 private static ArrayList<Card> cardlist=new ArrayList<Card>(); public Account() { } public Account(String accountid,double balance,User user,Bank bank,double temp,double num) { this.accountid=accountid; this.balance=balance; this.user=user; this.bank=bank; this.temp=temp; this.num=num; } public double getTemp() { return temp; } public void setTemp(double temp) { this.temp=temp; } public double getNum() { return num; } public void setNum(double num) { this.num=num; } public void addCard(Card card) { cardlist.add(card); } public String getAccountid() { return accountid; } public void setAccountid(String accountid) { this.accountid=accountid; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance=balance; } public User getUser() { return user; } public void setUser(User user) { this.user=user; } public Bank getBank() { return bank; } public void setBank(Bank bank) { this.bank=bank; } public ArrayList<Card> getCardlist() { return cardlist; } public void setCardlist(ArrayList<Card> cardlist) { Account.cardlist=cardlist; } public static Account getAmount(String cardid) { Iterator<Card> carditr=Account.cardlist.iterator(); Card card=new Card(); while(carditr.hasNext()) { card=carditr.next(); if(card.getCardid().equals(cardid)) { return card.getAccount(); } } return null; } } class Card//卡号,密码 { private String cardid; private String password; private Account account=new Account(); public Card() { } public Card(String cardid,String password,Account account) { this.cardid=cardid; this.password=password; this.account=account; } public String getCardid() { return cardid; } public void setCardid(String cardid) { this.cardid=cardid; } public String getPassword() { return password; } public void setPassword(String password) { this.password=password; } public Account getAccount() { return account; } public void setAccount(Account account) { this.account=account; } public boolean checkPassword(String password1) { return password.equals(password1); } } class ATM//atm号,属于银行 { private String atmid; private Bank bank=new Bank(); public ATM() { } public ATM(String atmid,Bank bank) { this.atmid=atmid; this.bank=bank; } public String getAtmid() { return atmid; } public void setAtmid(String atmid) { this.atmid=atmid; } public Bank getBank() { return bank; } public void setBank(Bank bank) { this.bank=bank; } } class Check{ private Unionpay unionpay; private String cardid; private String password; private String atmid; private double amount; public Check() { } public Check(Unionpay unionpay,String cardid,String password,String atmid,double amount) { this.unionpay=unionpay; this.cardid=cardid; this.password=password; this.atmid=atmid; this.amount=amount; } public void check() { Card card=Check1.checkCard(unionpay,cardid); if(card==null) { System.out.print("Sorry,this card does not exit."); System.exit(0); } ATM atm=Check1.checkAtm(unionpay, atmid); if(atm==null) { System.out.print("Sorry,the ATM's id is wrong."); System.exit(0); } if(!card.getPassword().equals(password)) { System.out.print("Sorry,your password is wrong."); System.exit(0); } //取款更新 Account account=Account.getAmount(cardid); double balance=account.getBalance(); Bank bank=atm.getBank(); if(account.getTemp()==0.00)//正常卡 { double temp=0;//手续费总额 if(amount+temp>=account.getBalance()) { System.out.print("Sorry,your account balance is insufficient."); System.exit(0); } if(account.getBank().getBankname()!=atm.getBank().getBankname()) { temp+=amount*bank.getTemp(); } account.setBalance(account.getBalance()-amount-temp); } if(account.getTemp()==0.05) { double overmoney=0;//透支金额 double sum=0;//手续费总额 if(balance>0) { overmoney=amount-balance; } else { overmoney=amount; } if(account.getBank().getBankname()!=atm.getBank().getBankname()) { sum+=amount*bank.getTemp(); } if(overmoney>0) { sum+=overmoney*account.getTemp(); } if(amount+sum>account.getBalance()+account.getNum()) { System.out.print("Sorry,your account balance is insufficient."); System.exit(0); } account.setBalance(balance-amount-sum); } show(account,atm); } public void show(Account account,ATM atm) { String name="取款"; String username=account.getUser().getUsername(); String bankname=atm.getBank().getBankname(); System.out.println("业务:取款 "+username+"在"+bankname+"的"+atmid+"号ATM机上"+name+"¥"+String.format("%.2f",amount)); System.out.println("当前余额为"+"¥"+String.format("%.2f",account.getBalance())); } } class Check1 { public static Card checkCard(Unionpay unionpay,String cardid) { //检验卡号是否存在 Card card=new Card(); Iterator<Bank> bankitr=unionpay.getBanklist().iterator(); while(bankitr.hasNext())//遍历银行 { ArrayList<Account> accountlist=bankitr.next().getAccount(); Iterator<Account> accountitr=accountlist.iterator(); while(accountitr.hasNext())//遍历账户 { ArrayList<Card> cardlist=accountitr.next().getCardlist(); Iterator<Card> carditr=cardlist.iterator(); while(carditr.hasNext())//遍历卡号 { card=carditr.next(); if(card.getCardid().equals(cardid)) { return card; } } System.out.println("Sorry,this card does not exist."); System.exit(0); } } return null; } public static ATM checkAtm(Unionpay unionpay,String atmid)//检验ATM号 { Iterator<Bank> bankitr=unionpay.getBanklist().iterator(); Bank bank=new Bank(); ATM atm=new ATM(); while(bankitr.hasNext())//遍历银行 { bank=bankitr.next(); Iterator<ATM> atmitr=bank.getATM().iterator(); while(atmitr.hasNext())//遍历atm号 { atm=atmitr.next(); if(atm.getAtmid().equals(atmid)) { return atm; } } } return null; } } class GetBalance { private Unionpay unionpay=new Unionpay(); public GetBalance() { } public GetBalance( Unionpay unionpay) { this.unionpay=unionpay; } public double getBalance(String cardid) { return Check1.checkCard(unionpay,cardid).getAccount().getBalance(); } } public class Main { public static void main(String[] args) { Scanner x=new Scanner(System.in); Unionpay unionpay=new Unionpay(); Account account=new Account(); Bank zgjs=new Bank("中国建设银行",0.02); Bank zggs=new Bank("中国工商银行",0.03); Bank zgny=new Bank("中国农业银行",0.04); unionpay.addBank(zgjs); unionpay.addBank(zggs); unionpay.addBank(zgny); ATM atm1=new ATM("01",zgjs); ATM atm2=new ATM("02",zgjs); ATM atm3=new ATM("03",zgjs); ATM atm4=new ATM("04",zgjs); ATM atm5=new ATM("05",zggs); ATM atm6=new ATM("06",zggs); ATM atm7=new ATM("07",zgny); ATM atm8=new ATM("08",zgny); ATM atm9=new ATM("09",zgny); ATM atm10=new ATM("10",zgny); ATM atm11=new ATM("11",zgny); zgjs.addAtm(atm1); zgjs.addAtm(atm2); zgjs.addAtm(atm3); zgjs.addAtm(atm4); zggs.addAtm(atm5); zggs.addAtm(atm6); zgny.addAtm(atm7); zgny.addAtm(atm8); zgny.addAtm(atm9); zgny.addAtm(atm10); zgny.addAtm(atm11); User name1=new User("杨过"); User name2=new User("郭靖"); User name3=new User("张无忌"); User name4=new User("韦小宝"); User name5=new User("张三丰"); User name6=new User("令狐冲"); User name7=new User("乔峰"); User name8=new User("洪七公"); Account account1=new Account("3217000010041315709",10000.00,name1,zgjs,0,0); Account account2=new Account("3217000010041315715",10000.00,name1,zgjs,0,0); Account account3=new Account("3217000010051320007 ",10000.00,name2,zgjs,0,0); Account account4=new Account("3222081502001312389",10000.00,name3,zggs,0,0); Account account5=new Account("3222081502001312390",10000.00,name3,zggs,0,0); Account account6=new Account("3222081502001312399",10000.00,name3,zggs,0,0); Account account7=new Account("3222081502051320785",10000.00,name4,zggs,0,0); Account account8=new Account("3222081502051320786",10000.00,name4,zggs,0,0); Account account9=new Account("3640000010045442002",10000.00,name5,zgjs,0.05,50000); Account account10=new Account("3640000010045441009",10000.00,name6,zggs,0.05,50000); Account account11=new Account("3630000010033431001",10000.00,name7,zgny,0.05,50000); Account account12=new Account("3630000010033431008",10000.00,name8,zgny,0.05,50000); zgjs.addAccount(account1); zgjs.addAccount(account2); zgjs.addAccount(account3); zggs.addAccount(account4); zggs.addAccount(account5); zggs.addAccount(account6); zggs.addAccount(account7); zggs.addAccount(account8); zgjs.addAccount(account9); zggs.addAccount(account10); zgny.addAccount(account11); zgny.addAccount(account12); name1.addAccount(account1); name1.addAccount(account2); name2.addAccount(account3); name3.addAccount(account4); name3.addAccount(account5); name3.addAccount(account6); name4.addAccount(account7); name4.addAccount(account8); name5.addAccount(account9); name6.addAccount(account10); name7.addAccount(account11); name8.addAccount(account12); Card card1=new Card("6217000010041315709","88888888",account1); Card card2=new Card("6217000010041315715","88888888",account1); Card card3=new Card("6217000010041315718","88888888",account2); Card card4=new Card("6217000010051320007","88888888",account3); Card card5=new Card("6222081502001312389","88888888",account4); Card card6=new Card("6222081502001312390","88888888",account5); Card card7=new Card("6222081502001312399","88888888",account6); Card card8=new Card("6222081502001312400","88888888",account6); Card card9=new Card("6222081502051320785","88888888",account7); Card card10=new Card("6222081502051320786","88888888",account8); Card card11=new Card("6640000010045442002","88888888",account9); Card card12=new Card("6640000010045442003","88888888",account9); Card card13=new Card("6640000010045441009","88888888",account10); Card card14=new Card("6630000010033431001","88888888",account11); Card card15=new Card("6630000010033431008","88888888",account12); account1.addCard(card1); account1.addCard(card2); account2.addCard(card3); account3.addCard(card4); account4.addCard(card5); account5.addCard(card6); account6.addCard(card7); account6.addCard(card8); account7.addCard(card9); account8.addCard(card10); account9.addCard(card11); account10.addCard(card13); account11.addCard(card14); account9.addCard(card12); account12.addCard(card15); StringBuilder buildrer=new StringBuilder(); String data; while(!((data=x.nextLine()).equals("#"))) { buildrer.append(data+"\n"); } String[] dt=buildrer.toString().split("\n"); for(int i=0;i<dt.length;i++) { String[] dataline=dt[i].toString().split("\\s+"); if(dataline.length==1) { GetBalance gb=new GetBalance(unionpay); System.out.println("业务:查询余额 "+"¥"+String.format("%.2f",gb.getBalance(dataline[0]))); } else { Check ch=new Check(unionpay,dataline[0],dataline[1],dataline[2],Double.parseDouble(dataline[3])); ch.check(); } } } }
相应的报表,类图如下:


踩坑心得:
对于这三次题目集其中有的题目花费我大量的时间去完成,当然做完之后也感觉收获了很多,对java的理解有了更进一步的提升。例如最后一次题目集的设计中,我对借贷账户与信用账户的
划分思索了许久,该通过什么来区分这俩中用户,最后我想到了通过俩种账户的利率不同来进行编写,也就是初始时候给他们俩种账户的人,给予不同的利率以此来划分执行相应的操作。
接着最后就是图片分组的格式问题,每个输出结果所要的输出内容不同,也就是说要对每一个结果进行编写,这里面就需要用到很多重复的内容,导致我编译过程中一直显示代码长度过长无法运行。
最后我就对这些重复内容编写再一个方法内,在进行调用,以此减少冗余,最后成功的编译完成。
改进建议:我对我的代码也没办法做出更好的改进了。
总结:
这三次题目集的难度都大于以前的题目集,通过编写这三次题目集能够让我们对java的水平能够得到进一步的提升,当然所要花费的时间也是很多很多的。对java的三大特性封装,继承,多态。以及接口,Arraylist
数组的使用都有了很大的进步。总而言之,就是感觉到了有很大的收货与提高。老师,作业等等都很好,就是对javafx的设计,代码的编写感觉有点难度,不会进行图形化设计。总之,就是希望自己能够再java路上
越学越好,越来越棒!

浙公网安备 33010602011771号