Blog作业03
目录
前言
设计与分析
踩坑心得
改进建议
总结
前言
这三次作业的题目只有2道题,但是在题量减小的同时,这三次作业集的难度也相应的上去了,题目的质量很好,运用很广泛,也考验了很多的知识点。这三次的作业的知识面比前两次覆盖的更加广泛。
第7次作业集的第一题和第二题都应用了继承,考察了类和构造方法的使用,父类子类的知识。
第8次作业集的1个题目,是对字符串相关知识的考查则可以使用接口,也可以用字符串的知识解决,也复习了基础和类还有构造方法。
第9次作业的题目,是对上次题目集的改编题目比较难,但是后面做起来会简单一点,知识过硬的话也很容易过。
题目集7
题量:2道
难度:较难
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,注意,各图形输出之间用空格分开,且输出最后存在一个用于分隔的空格; - 排序后的各图形类型及面积,格式同排序前的输出;
- 所有图形的面积总和,格式为
Sum of area:总面积值。
7-3:
输入格式:
- 在一行上输入一串数字(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:面积值。
题目集8
题量:1道
难度:较难
7-4:
每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:
- 存款、取款功能输入数据格式:
卡号 密码 ATM机编号 金额(由一个或多个空格分隔), 其中,当金额大于0时,代表取款,否则代表存款。 - 查询余额功能输入数据格式:
卡号
输出格式:
①输入错误处理
- 如果输入卡号不存在,则输出
Sorry,this card does not exist.。 - 如果输入ATM机编号不存在,则输出
Sorry,the ATM's id is wrong.。 - 如果输入银行卡密码错误,则输出
Sorry,your password is wrong.。 - 如果输入取款金额大于账户余额,则输出
Sorry,your account balance is insufficient.。 - 如果检测为跨行存取款,则输出
Sorry,cross-bank withdrawal is not supported.。
②取款业务输出
输出共两行,格式分别为:
[用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]
当前余额为¥[金额]
其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
③存款业务输出
输出共两行,格式分别为:
[用户姓名]在[银行名称]的[ATM编号]上存款¥[金额]
当前余额为¥[金额]
其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
④查询余额业务输出
¥[金额]
金额保留两位小数。
题目集9
题量:1道
难度:较难
7-5:
-
每一行输入一次业务操作,可以输入多行,最终以字符#终止。具体每种业务操作输入格式如下:
- 取款功能输入数据格式:
卡号 密码 ATM机编号 金额(由一个或多个空格分隔) - 查询余额功能输入数据格式:
卡号
输出格式:
①输入错误处理
- 如果输入卡号不存在,则输出
Sorry,this card does not exist.。 - 如果输入ATM机编号不存在,则输出
Sorry,the ATM's id is wrong.。 - 如果输入银行卡密码错误,则输出
Sorry,your password is wrong.。 - 如果输入取款金额大于账户余额,则输出
Sorry,your account balance is insufficient.。
②取款业务输出
输出共两行,格式分别为:
业务:取款 [用户姓名]在[银行名称]的[ATM编号]上取款¥[金额]当前余额为¥[金额]其中,[]说明括起来的部分为输出属性或变量,金额均保留两位小数。
③查询余额业务输出
业务:查询余额 ¥[金额]金额保留两位小数。
- 取款功能输入数据格式:
设计与分析
import java.util.ArrayList; import java.util.Scanner; import java.util.TreeSet; public class Main { public static Scanner input = new Scanner(System.in); public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<Integer>(); int x = input.nextInt(); while(x != 0){ if(x < 0 || x > 4){ System.out.println("Wrong Format"); System.exit(0); } list.add(x); x = input.nextInt(); } DealCardList dealCardList = new DealCardList(list); if(dealCardList.validate()==false){ System.out.println("Wrong Format"); System.exit(0); } dealCardList.showResult(); input.close(); } } class DealCardList{ ArrayList<Card> cardList=new ArrayList<>(); public DealCardList() { } public DealCardList(ArrayList<Integer> card) { for (Integer integer : card) { if (integer==0)break; switch (integer){ case 1: Card card1=new Card(new Circle(Main.input.nextDouble())); card1.getShape().setShapeName("Circle"); cardList.add(card1); break; case 2: Card card2=new Card(new Rectangle(Main.input.nextDouble(),Main.input.nextDouble())); card2.getShape().setShapeName("Rectangle"); cardList.add(card2); break; case 3: Card card3=new Card(new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble())); card3.getShape().setShapeName("Triangle"); cardList.add(card3); break; case 4: Card card4=new Card(new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble())); card4.getShape().setShapeName("Trapezoid"); cardList.add(card4); break; } } } public boolean validate(){ boolean ret=true; for (Card card : cardList) { if (card.getShape().validate()==false){ ret=false; break; } } return ret; } public void cardSort(){ TreeSet<Card> cards = new TreeSet<>(cardList); for (Card card : cards) { System.out.print(card.getShape()); } } public double getAllArea(){ double sum=0; for (Card card : cardList) { 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(); System.out.println("The sorted list:"); cardSort(); System.out.println(); System.out.printf("Sum of area:%.2f\n",getAllArea()); } } class Card implements Comparable<Card>{ private 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)(shape.getArea()-card.getShape().getArea()); } } 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() { return this.radius>0; } } class Trapezoid extends Shape{ private double top; private double bottom; private double height; public Trapezoid() { } public Trapezoid(double top, double bottom, double height) { this.top = top; this.bottom = bottom; this.height = height; } public double getArea() { return (top+bottom)*height/2; } public boolean validate() { return top>0&&height>0&&bottom>0; } }
import java.util.ArrayList; import java.util.Scanner; import java.util.TreeSet; public class Main { public static Scanner input = new Scanner(System.in); public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<Integer>(); int x = input.nextInt(); while(x != 0){ if(x < 0 || x > 4){ System.out.println("Wrong Format"); System.exit(0); } list.add(x); x = input.nextInt(); } DealCardList dealCardList = new DealCardList(list); if(dealCardList.validate()==false){ System.out.println("Wrong Format"); System.exit(0); } dealCardList.showResult(); input.close(); } } class DealCardList{ ArrayList<Card> cardList=new ArrayList<>(); public DealCardList() { } public DealCardList(ArrayList<Integer> card) { for (Integer integer : card) { if (integer==0)break; switch (integer){ case 1: Card card1=new Card(new Circle(Main.input.nextDouble())); card1.getShape().setShapeName("Circle"); cardList.add(card1); break; case 2: Card card2=new Card(new Rectangle(Main.input.nextDouble(),Main.input.nextDouble())); card2.getShape().setShapeName("Rectangle"); cardList.add(card2); break; case 3: Card card3=new Card(new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble())); card3.getShape().setShapeName("Triangle"); cardList.add(card3); break; case 4: Card card4=new Card(new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble())); card4.getShape().setShapeName("Trapezoid"); cardList.add(card4); break; } } } public boolean validate(){ boolean ret=true; for (Card card : cardList) { if (card.getShape().validate()==false){ ret=false; break; } } return ret; } public void cardSort(){ TreeSet<Card> cards = new TreeSet<>(cardList); for (Card card : cards) { System.out.print(card.getShape()); } } public double getAllArea(){ double sum=0; for (Card card : cardList) { 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(); System.out.println("The sorted list:"); cardSort(); System.out.println(); System.out.printf("Sum of area:%.2f\n",getAllArea()); } } class Card implements Comparable<Card>{ private 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)(shape.getArea()-card.getShape().getArea()); } } 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() { return this.radius>0; } } class Trapezoid extends Shape{ private double topSide; private double bottomSide; private double 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() { return topSide>0&&height>0&&bottomSide>0; } }
package sa; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class c { public static void main(String[] args) { List<Atm> atmList1 = new ArrayList<>(); atmList1.add(new Atm("01","中国建设银行")); atmList1.add(new Atm("02","中国建设银行")); atmList1.add(new Atm("03","中国建设银行")); atmList1.add(new Atm("04","中国建设银行")); List<Account> accountList1 = new ArrayList<>(); List<Card> cardList1 = new ArrayList<>(); List<String > subCardNumList1_1 = new ArrayList<>(); List<String > subCardNumList1_2 = new ArrayList<>(); subCardNumList1_1.add("6217000010041315709");subCardNumList1_1.add("6217000010041315715"); subCardNumList1_2.add("6217000010041315718"); cardList1.add(new Card("中国建设银行",1,"3217000010041315709","88888888",10000,subCardNumList1_1)); cardList1.add(new Card("中国建设银行",1,"3217000010041315715 ","88888888",10000,subCardNumList1_2)); Account a1 = new Account("杨过",cardList1); List<Card> cardList2 = new ArrayList<>(); List<String > subCardNumList2_1 = new ArrayList<>(); subCardNumList2_1.add("6217000010051320007"); cardList1.add(new Card("中国建设银行",1,"3217000010051320007", "88888888",10000,subCardNumList2_1)); Account a2 = new Account("郭靖",cardList2); accountList1.add(a1); accountList1.add(a2); Bank bank1 = new ChinaConstructionBank("中国建设银行",1,atmList1,accountList1); List<Atm> atmList2 = new ArrayList<>(); atmList2.add(new Atm("05","中国工商银行")); atmList2.add(new Atm("06","中国工商银行")); List<Account> accountList2 = new ArrayList<>(); List<Card> cardList3 = new ArrayList<>(); List<Card> cardList4 = new ArrayList<>(); List<String > subCardNumList3_1 = new ArrayList<>(); List<String > subCardNumList3_2 = new ArrayList<>(); List<String > subCardNumList3_3 = new ArrayList<>(); List<String > subCardNumList4_1 = new ArrayList<>(); List<String > subCardNumList4_2 = new ArrayList<>(); subCardNumList3_1.add("6222081502001312389"); subCardNumList3_2.add("6222081502001312390"); subCardNumList3_3.add("6222081502001312399"); subCardNumList3_3.add("6222081502001312400"); cardList3.add(new Card("中国工商银行",2,"3222081502001312389","88888888",10000,subCardNumList3_1)); cardList3.add(new Card("中国工商银行",2,"3222081502001312390","88888888",10000,subCardNumList3_2)); cardList3.add(new Card("中国工商银行",2,"3222081502001312399","88888888",10000,subCardNumList3_3)); subCardNumList4_1.add("6222081502051320785"); subCardNumList4_2.add("6222081502051320786"); cardList4.add(new Card("中国工商银行",2,"3222081502051320785","88888888",10000,subCardNumList4_1)); cardList4.add(new Card("中国工商银行",2,"3222081502051320786","88888888",10000,subCardNumList4_2)); Account a3 = new Account("张无忌",cardList3); Account a4 = new Account("韦小宝",cardList4); accountList2.add(a3); accountList2.add(a4); Bank bank2 = new IcBc("中国工商银行",2,atmList2,accountList2); Card card1 = new Card("6217000010041315709"); Scanner scanner = new Scanner(System.in); List<String> stringsList = new ArrayList<>(); String s = scanner.nextLine(); while(!s.equals("#")){ stringsList.add(s); s = scanner.nextLine(); } Bank bank = null, anotherBank = null; for (String s1 : stringsList) { String[] str = s1.split("\\s+"); if (str[0].substring(0,4).equals("6222")) { bank = bank2; anotherBank = bank1; } else if (str[0].substring(0,4).equals("6217")) { bank = bank1; anotherBank = bank2; } if(str.length == 1){ bank.findMoney(str[0]); } else { Card card = new Card(str[0],str[1]); bank.reviseMoney(anotherBank,card,str[2],Double.parseDouble(str[3])); } } } } class Account{ private String userName; List<Card> cardList; public Account() { } public Account(String userName, List<Card> cardList) { this.userName = userName; this.cardList = cardList; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public List<Card> getCardList() { return cardList; } public void setCardList(List<Card> cardList) { this.cardList = cardList; } } class Atm extends Bank{ public String num; public String belongBankName; public Atm() { } public Atm(String num,String belongBankName) { this.num = num; this.belongBankName = belongBankName; } public String getNum() { return num; } } class Bank { public String bankName; public int bankNum; List<Atm> atmList; private List<Account> accountList; Card findCard; Account findAccount; public Bank() { } public Bank(String bankName, int bankNum, List<Atm> atmList, List<Account> accountList) { this.bankName = bankName; this.bankNum = bankNum; this.atmList = atmList; this.accountList = accountList; } public List<Atm> getAtmList() { return atmList; } public void setAtmList(List<Atm> atmList) { this.atmList = atmList; } public List<Account> getAccountList() { return accountList; } public void setAccountList(List<Account> accountList) { this.accountList = accountList; } public boolean reviseMoney(Bank anotherBank, Card card,String atmNum, double reviseMoney){ if(checkCardIsHave(card) && checkAtmIsHave(atmNum,anotherBank) && checkDrawMoneyIsCorrect(reviseMoney)){ this.findCard.modifyMoney(reviseMoney); if (reviseMoney < 0) { System.out.printf("%s在%s的%s号ATM机上存款¥%.2f\n",this.findAccount.getUserName() ,this.bankName,atmNum,(-reviseMoney)); } else { System.out.printf("%s在%s的%s号ATM机上取款¥%.2f\n",this.findAccount.getUserName() ,this.bankName,atmNum,reviseMoney); } System.out.printf("当前余额为¥%.2f\n",this.findCard.getBalance()); return true; } return false; } public double findMoney(String cardNum){ for(Account a : this.accountList){ for(Card c : a.cardList){ for (String sudNum : c.getSubCardNumList()) { if ( cardNum.equals(sudNum) ) { System.out.printf("¥%.2f\n",c.getBalance()); return c.getBalance(); } } } } return -1; } public boolean checkCardIsHave(Card card){ boolean numError = true; boolean pwdError = true; boolean haveAtm = false; for(Account a : this.accountList){ for(Card c : a.cardList){ for (String sudNum : c.getSubCardNumList()) { if ( card.getBankCardNum().equals(sudNum) ) { numError = false; } if ( card.getCardPassword().equals(c.getCardPassword()) ) { pwdError = false; } } if( !numError && !pwdError ){ this.findCard = c; this.findAccount = a; return true; } } } if (numError) { System.out.println("Sorry,this card does not exist."); } if (pwdError) { System.out.println("Sorry,your password is wrong."); } return false; } public boolean checkAtmIsHave(String atmNum,Bank antherBank){ for (Atm atm : this.atmList){ if ( atmNum.equals(atm.getNum()) ) { return true; } } for (Atm atm : antherBank.atmList) { if ( atmNum.equals(atm.getNum()) ) { System.out.println("Sorry,cross-bank withdrawal is not supported."); return false; } } System.out.println("Sorry,the ATM's id is wrong."); return false; } private boolean checkDrawMoneyIsCorrect(double drawMoney) { boolean success = false; if (this.findCard.getBalance() < drawMoney) { System.out.println("Sorry,your account balance is insufficient."); return false; } if (findCard.subBankNum != this.bankNum) { System.out.println("Sorry,cross-bank withdrawal is not supported."); } else { success = true; } return success; } } class ChinaConstructionBank extends Bank{ public ChinaConstructionBank() { } public ChinaConstructionBank(String bankName, int bankNum, List<Atm> atmList, List<Account> accountList) { super(bankName, bankNum, atmList, accountList); } } class IcBc extends Bank{ public IcBc() { } public IcBc(String bankName, int bankNum, List<Atm> atmList, List<Account> accountList) { super(bankName, bankNum, atmList, accountList); } } class Card extends Bank{ public String subBankName; public int subBankNum; private String bankCardNum; private String cardPassword; private double balance; List<String> subCardNumList; public Card(String subBankName, int subBankNum, String bankCardNum, String cardPassword, double balance, List<String> subCardNumList) { this.subBankName = subBankName; this.subBankNum = subBankNum; this.bankCardNum = bankCardNum; this.cardPassword = cardPassword; this.balance = balance; this.subCardNumList = subCardNumList; } public Card(String bankCardNum) { this.bankCardNum = bankCardNum; this.cardPassword = "88888888"; } public Card(String bankCardNum,String cardPassword) { this.bankCardNum = bankCardNum; this.cardPassword = cardPassword; } public void modifyMoney(double money) { this.balance = this.balance - money; } public String getSubBankName() { return subBankName; } public void setSubBankName(String subBankName) { this.subBankName = subBankName; } public int getSubBankNum() { return subBankNum; } public void setSubBankNum(int subBankNum) { this.subBankNum = subBankNum; } public List<String> getSubCardNumList() { return subCardNumList; } public void setSubCardNumList(List<String> subCardNumList) { this.subCardNumList = subCardNumList; } public String getBankCardNum() { return bankCardNum; } public void setBankCardNum(String bankCardNum) { this.bankCardNum = bankCardNum; } public String getCardPassword() { return cardPassword; } public void setCardPassword(String cardPassword) { this.cardPassword = cardPassword; } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } }
import java.util.ArrayList; import java.util.Scanner; import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); UnionPay unionPay = new UnionPay(); Bank ccb = new Bank("1001","中国建设银行"); Bank icbc = new Bank("1002","中国工商银行"); Bank ook = new Bank("1003","中国农业银行"); unionPay.addBank(ccb); unionPay.addBank(icbc); unionPay.addBank(ook); ATM aTM1 = new ATM("01",ccb); ATM aTM2 = new ATM("02",ccb); ATM aTM3 = new ATM("03",ccb); ATM aTM4 = new ATM("04",ccb); ATM aTM5 = new ATM("05",icbc); ATM aTM6 = new ATM("06",icbc); ATM aTM7 = new ATM("07",ook); ATM aTM8 = new ATM("08",ook); ATM aTM9 = new ATM("09",ook); ATM aTM10 = new ATM("10",ook); ATM aTM11 = new ATM("11",ook); ccb.addATM(aTM1); ccb.addATM(aTM2); ccb.addATM(aTM3); ccb.addATM(aTM4); icbc.addATM(aTM5); icbc.addATM(aTM6); ook.addATM(aTM7); ook.addATM(aTM8); ook.addATM(aTM9); ook.addATM(aTM10); ook.addATM(aTM11); User Yangguo = new User("360101200102122324","杨过","13856223254"); User Guojing = new User("360101200012302552","郭靖","13800021124"); User Zhangwuji = new User("360502199805163221","张无忌","13952110011"); User Weixiaobao = new User("360201200513243326","韦小宝","13025996587"); User Zhangsanfeng = new User("3640000010045442002","张三丰","1300002323002"); User Linghuchong = new User("3640000010045441009","令狐冲","13824456772"); User Qiaofeng = new User("3630000010033431001","乔峰","15924441812"); User Hongqigong = new User("3630000010033431008","洪七公","15924555153"); Account ccbAcc1 = new Account("3217000010041315709",10000.00,Yangguo,ccb); Account ccbAcc2 = new Account("3217000010041315715",10000.00,Yangguo,ccb); Account ccbAcc3 = new Account("3217000010051320007",10000.00,Guojing,ccb); Account icbcAcc1 = new Account("3222081502001312389",10000.00,Zhangwuji,icbc); Account icbcAcc2 = new Account("3222081502001312390",10000.00,Zhangwuji,icbc); Account icbcAcc3 = new Account("3222081502001312399",10000.00,Zhangwuji,icbc); Account icbcAcc4 = new Account("3222081502051320785",10000.00,Weixiaobao,icbc); Account icbcAcc5 = new Account("3222081502051320786",10000.00,Weixiaobao,icbc); Account ookAcc1 = new Account("3640000010045442002",10000.00,Zhangsanfeng,ook); Account ookAcc2 = new Account("3640000010045441009",10000.00,Linghuchong,ook); Account ookAcc3 = new Account("3630000010033431001",10000.00,Qiaofeng,ook); Account ookAcc4 = new Account("3630000010033431008",10000.00,Hongqigong,ook); ccb.addAccount(ccbAcc1); ccb.addAccount(ccbAcc2); ccb.addAccount(ccbAcc3); icbc.addAccount(icbcAcc1); icbc.addAccount(icbcAcc2); icbc.addAccount(icbcAcc3); icbc.addAccount(icbcAcc4); icbc.addAccount(icbcAcc5); ook.addAccount(ookAcc1); ook.addAccount(ookAcc2); ook.addAccount(ookAcc3); ook.addAccount(ookAcc4); Yangguo.addAccount(ccbAcc1); Yangguo.addAccount(ccbAcc2); Guojing.addAccount(ccbAcc3); Zhangwuji.addAccount(icbcAcc1); Zhangwuji.addAccount(icbcAcc2); Zhangwuji.addAccount(icbcAcc3); Weixiaobao.addAccount(icbcAcc4); Weixiaobao.addAccount(icbcAcc5); Zhangsanfeng.addAccount(ookAcc1); Linghuchong.addAccount(ookAcc2); Qiaofeng.addAccount(ookAcc3); Hongqigong.addAccount(ookAcc4); Card ccbCard1 = new Card("6217000010041315709","88888888",ccbAcc1); Card ccbCard2 = new Card("6217000010041315715","88888888",ccbAcc1); Card ccbCard3 = new Card("6217000010041315718","88888888",ccbAcc2); Card ccbCard4 = new Card("6217000010051320007","88888888",ccbAcc3); Card icbcCard5 = new Card("6222081502001312389","88888888",icbcAcc1); Card icbcCard6 = new Card("6222081502001312390","88888888",icbcAcc2); Card icbcCard7 = new Card("6222081502001312399","88888888",icbcAcc3); Card icbcCard8 = new Card("6222081502001312400","88888888",icbcAcc3); Card icbcCard9 = new Card("6222081502051320785","88888888",icbcAcc4); Card icbcCard10 = new Card("6222081502051320786","88888888",icbcAcc5); Card ookCard11 = new Card("6640000010045442002","88888888",ookAcc1); Card ookCard12 = new Card("6640000010045442003","88888888",ookAcc2); Card ookCard13 = new Card("6640000010045441009","88888888",ookAcc3); Card ookCard14 = new Card("6630000010033431001","88888888",ookAcc4); Card ookCard15 = new Card("6630000010033431008","88888888",ookAcc4); ccbAcc1.addCard(ccbCard1); ccbAcc1.addCard(ccbCard2); ccbAcc2.addCard(ccbCard3); ccbAcc3.addCard(ccbCard4); icbcAcc1.addCard(icbcCard5); icbcAcc2.addCard(icbcCard6); icbcAcc3.addCard(icbcCard7); icbcAcc3.addCard(icbcCard8); icbcAcc4.addCard(icbcCard9); icbcAcc5.addCard(icbcCard10); ookAcc1.addCard(ookCard11); ookAcc2.addCard(ookCard12); ookAcc3.addCard(ookCard13); ookAcc4.addCard(ookCard14); ookAcc4.addCard(ookCard15); StringBuilder sb = new StringBuilder(); String data; while(!((data = input.nextLine()).equals("#"))) { sb.append(data + "\n"); } String[] dt = sb.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 { Withdraw wd = new Withdraw(unionPay,dataLine[0],dataLine[1],dataLine[2],Double.parseDouble(dataLine[3])); wd.withdraw(); } } } } class Bank { private String bankNO; private String bankName; private ArrayList<Account> accountList = new ArrayList<Account>(); private ArrayList<ATM> ATMList = new ArrayList<ATM>(); public Bank() { super(); // TODO Auto-generated constructor stub } public Bank(String bankNO, String bankName) { super(); this.bankNO = bankNO; this.bankName = bankName; } public String getBankNO() { return bankNO; } public void setBankNO(String bankNO) { this.bankNO = bankNO; } public String getBankName() { return bankName; } public void setBankName(String bankName) { this.bankName = bankName; } public void addAccount(Account account) { this.accountList.add(account); } public void removeAccount(Account account) { this.accountList.remove(account); } public void addATM(ATM aTM) { this.ATMList.add(aTM); } public void removeATM(ATM aTM) { this.ATMList.remove(aTM); } public ArrayList<Account> getAccountList() { return accountList; } public void setAccountList(ArrayList<Account> accountList) { this.accountList = accountList; } public ArrayList<ATM> getATMList() { return ATMList; } public void setATMList(ArrayList<ATM> aTMList) { ATMList = aTMList; } } class User { private String ID; private String name; private String Phone; ArrayList<Account> list = new ArrayList<Account>(); public User() { super(); // TODO Auto-generated constructor stub } public User(String iD, String name, String phone) { super(); ID = iD; this.name = name; Phone = phone; } public String getID() { return ID; } public void setID(String iD) { ID = iD; } public String getPhone() { return Phone; } public void setPhone(String phone) { Phone = phone; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void addAccount(Account account) { this.list.add(account); } public void removeAccount(Account account) { this.list.remove(account); } } class Account { private String accountNO; private double balance = 0; private User user = null; private Bank bank = null; private static ArrayList<Card> list = new ArrayList<Card>(); public Account() { super(); // TODO Auto-generated constructor stub } public Account(String accountNO, double balance, User user, Bank bank) { super(); this.accountNO = accountNO; this.balance = balance; this.user = user; this.bank = bank; } public void addCard(Card card) { list.add(card); } public void removeCard(Card card) { list.remove(card); } public double getBalance() { return balance; } public void setBalance(double balance) { this.balance = balance; } public String getAccountNO() { return accountNO; } public void setAccountNO(String accountNO) { this.accountNO = accountNO; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Bank getBank() { return bank; } public void setBank(Bank bank) { this.bank = bank; } public ArrayList<Card> getList() { return list; } public void setList(ArrayList<Card> list) { Account.list = list; } public static Account getAmountbyCardNO(String cardNO) { Iterator<Card> cardItr = Account.list.iterator(); Card card = null; while(cardItr.hasNext()) { card = cardItr.next(); if(card.getCardNO().equals(cardNO)) { return card.getAccount(); } } return null; } } class Card { private String cardNO; private String cardPassword; private Account account = null; public Card() { super(); // TODO Auto-generated constructor stub } public Card(String cardNO, String cardPassword, Account account) { super(); this.cardNO = cardNO; this.cardPassword = cardPassword; this.account = account; } public String getCardNO() { return cardNO; } public void setCardNO(String cardNO) { this.cardNO = cardNO; } public String getCardPassword() { return cardPassword; } public Account getAccount() { return account; } public void setAccount(Account account) { this.account = account; } public void setCardPassword(String cardPassword) { this.cardPassword = cardPassword; } public boolean checkCard() { Pattern p = Pattern.compile("\\d{16}+"); Matcher m = p.matcher(this.cardNO); return m.matches(); } public boolean checkPassword(String password) { return this.cardPassword.equals(password); } } class ATM { private String ATMID; private Bank bank = null; public ATM() { super(); // TODO Auto-generated constructor stub } public ATM(String aTMID, Bank bank) { super(); ATMID = aTMID; this.bank = bank; } public String getATMID() { return ATMID; } public void setATMID(String aTMID) { ATMID = aTMID; } public Bank getBank() { return bank; } public void setBank(Bank bank) { this.bank = bank; } } class Withdraw { private UnionPay unionPay; private String cardNO; private String cardPassword; private String ATMID; private double amount; public Withdraw() { super(); // TODO Auto-generated constructor stub } public Withdraw(UnionPay unionPay, String cardNO, String cardPassword, String aTMID, double amount) { super(); this.unionPay = unionPay; this.cardNO = cardNO; this.cardPassword = cardPassword; ATMID = aTMID; this.amount = amount; } public Withdraw(String cardNO, String cardPassword, String aTMID, double amount) { super(); this.cardNO = cardNO; this.cardPassword = cardPassword; ATMID = aTMID; this.amount = amount; } public void withdraw() { /** * 校验该卡是否存在 */ Card card = ValidateData.getCardbyCardNO(unionPay, cardNO); if(card == null) { System.out.println("Sorry,this card does not exist."); System.exit(0); } /** * 校验ATM是否存在 */ ATM aTM = ValidateData.getATMbyATMID(unionPay, ATMID); if(aTM == null) { System.out.println("Sorry,the ATM's id is wrong."); System.exit(0); } Account account = Account.getAmountbyCardNO(cardNO); double balance = account.getBalance(); /** * 校验卡密码是否正确 */ if(!card.getCardPassword().equals(cardPassword)) { System.out.println("Sorry,your password is wrong."); System.exit(0); } /** * 校验取款金额是否大于余额 */ if (amount > balance) { System.out.println("Sorry,your account balance is insufficient."); System.exit(0); } /** * 校验是否为跨行取款 */ if (account.getBank().getBankNO() != aTM.getBank().getBankNO()) { System.out.println("Sorry,cross-bank withdrawal is not supported."); System.exit(0); } account.setBalance(balance - amount);//取款更新余额操作 if(amount >= 0) { showResult(account,1); }else { showResult(account,0); } } public void showResult(Account account,int flag) { String type = ""; if(flag == 1) { type = "取款"; }else { type = "存款"; amount *= -1; } String userName = account.getUser().getName(); String bankName = account.getBank().getBankName(); System.out.println(userName + "在" + bankName + "的" + ATMID + "号ATM机上" + type + String.format("¥%.2f", amount)); System.out.println("当前余额为" + String.format("¥%.2f", account.getBalance())); } } class ValidateData { /** * 校验卡号是否存在 * @param unionPay * @param cardNO * @return */ public static Card getCardbyCardNO(UnionPay unionPay,String cardNO) { Card card = null; Iterator<Bank> bankItr = unionPay.getBankList().iterator(); while(bankItr.hasNext()) { ArrayList<Account> accountList = bankItr.next().getAccountList(); Iterator<Account> accountItr = accountList.iterator(); while(accountItr.hasNext()) { ArrayList<Card> cardList = accountItr.next().getList(); Iterator<Card> cardItr = cardList.iterator(); while(cardItr.hasNext()) { card = cardItr.next(); if(card.getCardNO().equals(cardNO)) { return card; } } } } return null; } /** * 校验ATM ID是否存在 * @param unionPay * @param ATMID * @return */ public static ATM getATMbyATMID(UnionPay unionPay,String ATMID) { Iterator<Bank> bankItr = unionPay.getBankList().iterator(); Bank bank = null; ATM aTM = null; while(bankItr.hasNext()) { bank = bankItr.next(); Iterator<ATM> aTMItr = bank.getATMList().iterator(); while(aTMItr.hasNext()) { aTM = aTMItr.next(); if(aTM.getATMID().equals(ATMID)) { return aTM; } } } return null; } } class UnionPay { private ArrayList<Bank> bankList = new ArrayList<Bank>(); public UnionPay() { super(); // TODO Auto-generated constructor stub } public UnionPay(ArrayList<Bank> bankList) { super(); this.bankList = bankList; } public ArrayList<Bank> getBankList() { return bankList; } public void setBankList(ArrayList<Bank> bankList) { this.bankList = bankList; } public void addBank(Bank bank) { this.bankList.add(bank); } public void removeBank(Bank bank) { this.bankList.remove(bank); } } class GetBalance { private UnionPay unionPay; public GetBalance() { super(); // TODO Auto-generated constructor stub } public GetBalance(UnionPay unionPay) { super(); this.unionPay = unionPay; } public double getBalance(String cardNO) { return ValidateData.getCardbyCardNO(unionPay, cardNO).getAccount().getBalance(); } }


踩坑心得
作业集7
1:最开始没有看准题目,就直接嘎嘎乱写一通,把类图里面的东西全都创建了一遍,最后发现好多东西并没有用到,就全都删了,真的浪费了很多时间。
然后这个悲惨的故事告诉我们,看到题别冲动,要冷静思考后再下手。以免浪费时间,白白耗费自己的精力。
这个是我做的第一个这么难继承的题目,其实上课讲了好多那些函数还有用法,我在上课时就只是听听,并没有把他们记下来,后面只能通过上网自己查资料来写来看,好在最后写对了。
作业集8
1:不得不说这个银行的这个体系真的很难,很考验我们的知识,但是最后输出的顺序不是按照题目要求的那顺序输出的,还有用户和账户,一个人可以有两到三个账户,合起来就很麻烦。
所以这个输出就没有问题。
作业集9
7-5:这个在我感觉应该是最好的一个对类的考查的题目,不仅考查了一点点的继承,还有很多小的知识点,这个题我花的时间不少,最后一想,应该创建一个结构体,这样会更简单
改进建议
pta的作业的每一题希望可以多弄些样例,就是输出的例子,可以让做题者更好的理解题的意思,能更快的,更精准的做题这三次作业的知识跨度比较大,如果能在题目上说明本题所用的知识点会更好
另外可以支持多种方法解决问题,不单单局限于一种方法
我自己的改进方法如下:
对齐下括号.
良好的编码格式和命名。
从语法和算法上精简代码,永远永远不要把同一个变量用于多个不同的目的。
使用自描述的变量名和方法名
方法名应该小写字母开头,其后用字母大写的单词连接(veryLongVariableName)
类名应该都使用首字母大写的单词连接而成常量名应该全部大写,
用下划线连接左大括号应该跟 if 语句在同一行
分清楚类名和构造方法名,不会混
总结
第7单元作业花费时间:花费时间较长
第8单元作业花费时间:花费时间适中
最后9部分作业:花费时间较长。
通过这三次作业,我还是收获了很多知识的。
第7次作业:每个题目的点都不一样,题是类和构造方法和继承。
第8次作业:学会了银行问题的使用方法和基本操作
第9次作业:学习了解了银行问题,和深度的继承知识,对象数组,类的创建和声明。
每次作业花费的时间较长,需要查阅大量的资料才能解决问题,作业的成功率不高,得到的分数不高。解决方法:遇到不懂的知识点上网查阅资料,请教他人,多看书记住一些基本的知识点。
作为Java的思维来说,
当你拿到一个问题时,你分析这个问题不再是第一步先做什么,
第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,
这是第三点。这些都是面向过程思想所不具备的,在解决一些问题的时候,运用面向对象的思想来编写程序解决问题才是最好的解决方式
作业量可以适当增多,多多给我们练习的机会,适当放慢一些课堂进度,给我们足够的时间去看书,去思考,实验课可以改成三周俩节,适当要宽恕留给我们写报告的时间。
对教师的意见:多多培养我们的动手能力,在课堂上,给我们多一些时间去写自己的代码,老师能多现场展示一些功能,我觉得效果比较好。
浙公网安备 33010602011771号