第三次博客作业

一、前言

题目量少,但是每道题需要思考的地方很多,一次作业都要做几个小时吧,对于我这种基础不好的都是像挤牙膏一样一点一点写出来的,按照测试点一个一个写,因为不太确定自己写的能不能运行,所以想着一点一点补上去,这样就会导致整体的结构很乱,可能加需求的时候就有点难。写作业9的时候代码长度超了,然后还要删点代码啧啧。还得提升下自己的水平,做到得心应手才行。

二、设计与分析

题目集7的7-1

 

import java.util.ArrayList;
import java.util.Arrays;
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 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
{
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()
{
boolean validate;
validate=(radius>0);
return validate;
}
}
class Rectangle extends Shape
{
private double width;
private double 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()
{
boolean validate;
validate=(width>0&&length>0);
return validate;
}
}
class Triangle extends Shape
{
private double side1;
private double side2;
private double side3;
public Triangle()
{

}
public Triangle(double side1,double side2,double side3)
{
this.side1=side1;
this.side2=side2;
this.side3=side3;
}
public double getArea()
{
return 0.25*Math.sqrt((side1+side2+side3)*(side1+side2-side3)*(side1+side3-side2)*(side2+side3-side1));
}
public boolean validate()
{
boolean validate;
double []a=new double[3];
a[0]=side1;
a[1]=side2;
a[2]=side3;
Arrays.sort(a);
validate=(side1>0&&side2>0&&side3>0&&(side1+side2>side3));
return validate;
}
}
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()
{
boolean validate;
validate=(topSide>0&&bottomSide>0&&height>0);
return validate;
}
}
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)
{
if(shape.getArea()>card.getShape().getArea()) {
return -1;
}
else if(shape.getArea()<card.getShape().getArea()){
return 1;
}
return 0;
}
}
class DealCardList
{
ArrayList<Card> list = new ArrayList<>();
public DealCardList()
{

}
public DealCardList(ArrayList<Integer>cardlist)
{
for (Integer a : cardlist)
{
switch (a)
{
case 1:
Card card1=new Card(new Circle(Main.input.nextDouble()));
card1.getShape().setShapeName("Circle");
list.add(card1);
break;
case 2:
Card card2=new Card(new Rectangle(Main.input.nextDouble(),Main.input.nextDouble()));
card2.getShape().setShapeName("Rectangle");
list.add(card2);
break;
case 3:
Card card3=new Card(new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));
card3.getShape().setShapeName("Triangle");
list.add(card3);
break;
case 4:
Card card4=new Card(new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));
card4.getShape().setShapeName("Trapezoid");
list.add(card4);
break;
}
}
}
public boolean validate()
{
boolean validate = true;
for (Card card : list) {
if (!card.getShape().validate()){
validate=false;
break;
}
}
return validate;
}
public void cardSort()
{
TreeSet<Card> cards = new TreeSet<>(list);
for (Card card : cards) {
System.out.print(card.getShape());
}
}
public double getAllArea()
{
double sum=0;
for(Card card:list)
{
sum=sum+card.getShape().getArea();
}
return sum;
}
public void showResult()
{
System.out.println("The original list:");
for(Card card:list)
{
System.out.print(card.getShape());
}
System.out.println();
System.out.println("The sorted list:");
cardSort();
System.out.println();
System.out.printf(String.format("Sum of area:%.2f",getAllArea()));
}
}

 

大体思路

1、这道题用了继承与多态,根据类图Shape为父类,四个图形类为子类,体现了继承。

2、四个图形类都重写了getArea方法和validate方法,体现了多态。

3、Card类中有个compareTo方法用来给图形面积排序,因为题目要求降序排列,所以要重写compareTo方法,如果指定的数与参数相等返回0。如果指定的数大于参数返回 -1。如果指定的数小于参数返回 1。

4、DealCardList类用来处理输入的图片有哪些,将他们存进数组中,用来求总面积和排序的时候用,然后还能显示输出。

容易出错的地方

1、判断图形输入的数据是否非法的时候要想一想三角形任意两边之和要大于第三边,而不是三边都大于0。

2、输出的时候用到了增强for循环,这是一个新的知识,我是看了网上的资料学会的。

3、排序要重写compareTo方法。

4、输出的数值要保留两位小数。

题目集7的7-2

 

import java.util.ArrayList;
import java.util.Arrays;
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 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
{
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()
{
boolean validate;
validate=(radius>0);
return validate;
}
}
class Rectangle extends Shape
{
private double width;
private double 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()
{
boolean validate;
validate=(width>0&&length>0);
return validate;
}
}
class Triangle extends Shape
{
private double side1;
private double side2;
private double side3;
public Triangle()
{

}
public Triangle(double side1,double side2,double side3)
{
this.side1=side1;
this.side2=side2;
this.side3=side3;
}
public double getArea()
{
return 0.25*Math.sqrt((side1+side2+side3)*(side1+side2-side3)*(side1+side3-side2)*(side2+side3-side1));
}
public boolean validate()
{
boolean validate;
double []a=new double[3];
a[0]=side1;
a[1]=side2;
a[2]=side3;
Arrays.sort(a);
validate=(side1>0&&side2>0&&side3>0&&(side1+side2>side3));
return validate;
}
}
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()
{
boolean validate;
validate=(topSide>0&&bottomSide>0&&height>0);
return validate;
}
}
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)
{
if(shape.getArea()>card.getShape().getArea()) {
return -1;
}
else if(shape.getArea()<card.getShape().getArea()){
return 1;
}
return 0;
}
}
class DealCardList
{
ArrayList<Card> list = new ArrayList<>();
double []amount = new double [4];
public DealCardList()
{

}
public DealCardList(ArrayList<Integer>cardlist)
{
for (Integer a : cardlist)
{
switch (a)
{
case 1:
Card card1=new Card(new Circle(Main.input.nextDouble()));
card1.getShape().setShapeName("Circle");
list.add(card1);
break;
case 2:
Card card2=new Card(new Rectangle(Main.input.nextDouble(),Main.input.nextDouble()));
card2.getShape().setShapeName("Rectangle");
list.add(card2);
break;
case 3:
Card card3=new Card(new Triangle(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));
card3.getShape().setShapeName("Triangle");
list.add(card3);
break;
case 4:
Card card4=new Card(new Trapezoid(Main.input.nextDouble(),Main.input.nextDouble(),Main.input.nextDouble()));
card4.getShape().setShapeName("Trapezoid");
list.add(card4);
break;
}
}
}
public boolean validate()
{
boolean validate = true;
for (Card card : list) {
if (!card.getShape().validate()){
validate=false;
break;
}
}
return validate;
}
public void circle()
{
amount[0]=0;
System.out.print("[");
for(Card card : list) {
if(card.getShape().getShapeName().equals("Circle"))
{
System.out.print(card.getShape());
amount[0]=amount[0]+card.getShape().getArea();
}
}
System.out.print("]");
}
public void rectangle()
{
amount[1]=0;
System.out.print("[");
for(Card card : list)
{
if(card.getShape().getShapeName().equals("Rectangle"))
{
System.out.print(card.getShape());
amount[1]=amount[1]+card.getShape().getArea();
}
}
System.out.print("]");
}
public void triangle()
{
amount[2]=0;
System.out.print("[");
for(Card card : list)
{
if(card.getShape().getShapeName().equals("Triangle"))
{
System.out.print(card.getShape());
amount[2]=amount[2]+card.getShape().getArea();
}
}
System.out.print("]");
}
public void trapezoid()
{
amount[3]=0;
System.out.print("[");
for(Card card : list)
{
if(card.getShape().getShapeName().equals("Trapezoid"))
{
System.out.print(card.getShape());
amount[3]=amount[3]+card.getShape().getArea();
}
}
System.out.print("]");
}
public void circlesort()
{
TreeSet<Card> cards = new TreeSet<>(list);
System.out.print("[");
for(Card card : cards) {
if(card.getShape().getShapeName().equals("Circle"))
{
System.out.print(card.getShape());
}
}
System.out.print("]");
}
public void rectanglesort()
{
TreeSet<Card> cards = new TreeSet<>(list);
System.out.print("[");
for(Card card : cards)
{
if(card.getShape().getShapeName().equals("Rectangle"))
{
System.out.print(card.getShape());
}
}
System.out.print("]");
}
public void trianglesort()
{
TreeSet<Card> cards = new TreeSet<>(list);
System.out.print("[");
for(Card card : cards)
{
if(card.getShape().getShapeName().equals("Triangle"))
{
System.out.print(card.getShape());
}
}
System.out.print("]");
}
public void trapezoidsort()
{
TreeSet<Card> cards = new TreeSet<>(list);
System.out.print("[");
for(Card card : cards)
{
if(card.getShape().getShapeName().equals("Trapezoid"))
{
System.out.print(card.getShape());
}
}
System.out.print("]");
}
public double getMax()
{
double max=0;
for(int i=0;i<4;i++)
{
if(max<amount[i])
{
max=amount[i];
}
}
return max;
}
public void showResult()
{
System.out.println("The original list:");
System.out.print("[");
for(Card card:list)
{
System.out.print(card.getShape());
}
System.out.println("]");
System.out.println("The Separated List:");
circle();
rectangle();
triangle();
trapezoid();
System.out.println();
System.out.println("The Separated sorted List:");
circlesort();
rectanglesort();
trianglesort();
trapezoidsort();
System.out.println();
System.out.printf(String.format("The max area:%.2f",getMax()));
}
}

 

大体思路

1、这道题和上一题的区别是要把相同图形的一起输出,然后降序排列,再找出这四种图形中面积最大的。

2、可以用一个数组去存每个图形的面积,getMax方法用来比较出最大面积的那个。

3、每个图形都有一个降序排列的输出方法。

容易出错的地方

1、输出图形的面积要是最大的那个。

2、相同的图形要放在一个[]里。

题目集8的8-1

 


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

public class Main {
static double a;

static String []ab=new String[10];
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int m=0;
ArrayList<String> ATM1=new ArrayList<>();
ATM1.add("01");
ATM1.add("02");
ATM1.add("03");
ATM1.add("04");
Bank bank1=new Bank("中国建设银行",ATM1);
ArrayList<String> ATM2=new ArrayList<>();
ATM2.add("05");
ATM2.add("06");
Bank bank2=new Bank("中国工商银行",ATM2);

ArrayList<Bank> Bank=new ArrayList<>();
Bank.add(bank1);
Bank.add(bank2);

ArrayList<String> card1=new ArrayList<>();
card1.add("621700001004315709");
card1.add("6217000010041315715");
Account account1=new Account("杨过","中国建设银行","3217000010041315709",10000.00,card1);

ArrayList<String> card2=new ArrayList<>();
card2.add("6217000010041315718");
Account account2 = new Account("杨过","中国建设银行","3217000010041315709", 10000.00,card2);

ArrayList<String> card3=new ArrayList<>();
card3.add("6217000010051320007");
Account account3 = new Account("郭靖","中国建设银行","3217000010051320007", 10000.00,card3);

ArrayList<String> card4=new ArrayList<>();
card4.add("6222081502001312389");
Account account4 = new Account("张无忌","中国工商银行","3222081502001312389", 10000.00,card4);

ArrayList<String> card5=new ArrayList<>();
card5.add("6222081502001312390");
Account account5 = new Account("张无忌","中国工商银行","3222081502001312390", 10000.00,card5);

ArrayList<String> card6=new ArrayList<>();
card6.add("6222081502001312399");
card6.add("6222081502001312400");
Account account6 = new Account("张无忌","中国工商银行","3222081502001312399", 10000.00,card6);

ArrayList<String> card7=new ArrayList<>();
card7.add("6222081502051320785");
Account account7 = new Account("韦小宝","中国工商银行","3222081502051320785", 10000.00,card7);

ArrayList<String> card8=new ArrayList<>();
card8.add("6222081502051320786");
Account account8 = new Account("韦小宝","中国工商银行","3222081502051320786", 10000.00,card8);

ArrayList<Account> account=new ArrayList<>();
account.add(account1);
account.add(account2);
account.add(account3);
account.add(account4);
account.add(account5);
account.add(account6);
account.add(account7);
account.add(account8);
int i=0;
for (i=0;i<ab.length;i++)
{
ab[i]=in.next();

if(ab[i].equals("#"))
{
break;
}
else
{
m++;
}

if(i==3) {
a=Double.parseDouble(ab[3]);
}
}
int flag5=0;
for(int k=0;k<account.size();k++)
for(int n=0;n<account.get(k).card.size();n++) {
if(ab[0].equals(account.get(k).card.get(n)))
{
flag5=1;
break;
}
}
if(flag5==0) {
System.out.print("Sorry,this card does not exist.");
System.exit(0);
}
int flag6=0;
if(ab[2]=="01"||ab[2]=="02"||ab[2]=="03"||ab[2]=="04"||ab[2]=="05")
{
flag6=1;

}
if(flag6==0) {
System.out.print("Sorry,the ATM's id is wrong.");
System.exit(0);
}
if(m==1)
show1(account);
else
{
if(!ab[1].equals("88888888"))
{
System.out.print("Sorry,your password is wrong.");
System.exit(0);

}
show(account,ATM1,ATM2);
}
}
public static void show(ArrayList<Account> account,ArrayList<String> ATM1,ArrayList<String> ATM2)
{
int i,j;
int t1=0;
int t2=0;
int t3=0;
int flag1=0;
int flag2=0;

//卡号校验
for(i=0;i<account.size();i++){
for(j=0;j<account.get(i).card.size();j++){
if(ab[0].equals(account.get(i).card.get(j))){
t1=i;
break;
}
}
}
for(i=0;i<ATM1.size();i++)
{
if(ab[2].equals(ATM1.get(i))){
t2=i;
flag1=1;
break;
}
}
for(i=0;i<ATM2.size();i++)
{
if(ab[2].equals(ATM2.get(i))){
t3=i;
flag2=1;
break;

}
}
if(Double.parseDouble(ab[3])>0){//取款
account.get(t1).money=account.get(t1).money-a;
if(flag1==1)
System.out.printf(account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM1.get(t2)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
if(flag2==1)
System.out.printf(account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM2.get(t3)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
}
else{
a=Double.parseDouble(ab[3]);
a=(-1)*Double.parseDouble(ab[3]);
account.get(t1).money=account.get(t1).money+a;
if(flag1==1)
System.out.printf(account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM1.get(t2)+"号ATM机上存款¥%.2f\n",a);
if(flag2==1)
System.out.printf(account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM2.get(t3)+"号ATM机上存款¥%.2f\n",a);
}
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
public static void show1(ArrayList<Account> account)
{
int i,j;
int t1=0;
//卡号校验
for(i=0;i<account.size();i++){
for(j=0;j<account.get(i).card.size();j++){
if(ab[0].equals(account.get(i).card.get(j))){
t1=i;
break;
}
}
}
System.out.printf("¥%.2f\n",account.get(t1).money);
}
}
class Account{
double code,money;
String user,bank,bankaccount,cardnumber,atm;
ArrayList<String> card;
public Account(String user,String bank,String bankaccount,double money,ArrayList<String> card)
{
this.user=user;
this.bank=bank;
this.bankaccount=bankaccount;
this.money=money;
this.card=card;
}
}
class Bank{
String name;
ArrayList<String> ATM;
public Bank(String name,ArrayList<String> ATM)
{
this.name=name;
this.ATM=ATM;
}
}

大体思路

1、创建一个动态数组,存借记卡的信息,还有一个动态数组存银行和对应的ATM机。

2、一开始输入的东西存进一个数组,判断输入的是查询余额还是存取款,可以看数组的长度。

容易出错的地方

1、要做一个卡号检验,判断输入进来的是哪张卡。

2、判断是取款还是存款

3、判断输入是否合法,要注意顺序,不能弄错。

题目集9的9-1

import java.util.Scanner;
import java.util.ArrayList;
public class Main {
static double a;
static String []ab=new String[100];
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int m=0;
ArrayList<String> ATM1=new ArrayList<>();
ATM1.add("01");
ATM1.add("02");
ATM1.add("03");
ATM1.add("04");
Bank bank1=new Bank("中国建设银行",ATM1);
ArrayList<String> ATM2=new ArrayList<>();
ATM2.add("05");
ATM2.add("06");
Bank bank2=new Bank("中国工商银行",ATM2);
ArrayList<String> ATM3=new ArrayList<>();
ATM3.add("07");
ATM3.add("08");
ATM3.add("09");
ATM3.add("10");
ATM3.add("11");
Bank bank3=new Bank("中国农业银行",ATM3);

ArrayList<Bank> bank=new ArrayList<>();
bank.add(bank1);
bank.add(bank2);
bank.add(bank3);

ArrayList<String> card1=new ArrayList<>();
card1.add("6217000010041315709");
card1.add("6217000010041315715");
Account account1 = new Account("杨过","借记","中国建设银行","3217000010041315709",10000.00,card1);
ArrayList<String> card2=new ArrayList<>();
card2.add("6217000010041315718");
Account account2 = new Account("杨过","借记","中国建设银行","3217000010041315709",10000.00,card2);
ArrayList<String> card3=new ArrayList<>();
card3.add("6217000010051320007");
Account account3 = new Account("郭靖","借记","中国建设银行","3217000010051320007",10000.00,card3);
ArrayList<String> card4=new ArrayList<>();
card4.add("6222081502001312389");
Account account4 = new Account("张无忌","借记","中国工商银行","3222081502001312389",10000.00,card4);
ArrayList<String> card5=new ArrayList<>();
card5.add("6222081502001312390");
Account account5 = new Account("张无忌","借记","中国工商银行","3222081502001312390",10000.00,card5);
ArrayList<String> card6=new ArrayList<>();
card6.add("6222081502001312399");
card6.add("6222081502001312400");
Account account6 = new Account("张无忌","借记","中国工商银行","3222081502001312399",10000.00,card6);
ArrayList<String> card7=new ArrayList<>();
card7.add("6222081502051320785");
Account account7 = new Account("韦小宝","借记","中国工商银行","3222081502051320785",10000.00,card7);
ArrayList<String> card8=new ArrayList<>();
card8.add("6222081502051320786");
Account account8 = new Account("韦小宝","借记","中国工商银行","3222081502051320786",10000.00,card8);
ArrayList<String> card9=new ArrayList<>();
card9.add("6640000010045442002");
card9.add("6640000010045442003");
Account account9 = new Account("张三丰","贷记","中国建设银行","3640000010045442002",10000.00,card9);
ArrayList<String> card10=new ArrayList<>();
card10.add("6640000010045441009");
Account account10 = new Account("令狐冲","贷记","中国工商银行","3640000010045441009",10000.00,card10);
ArrayList<String> card11=new ArrayList<>();
card11.add("6630000010033431001");
Account account11 = new Account("乔峰","贷记","中国农业银行","3630000010033431001",10000.00,card11);
ArrayList<String> card12=new ArrayList<>();
card12.add("6630000010033431008");
Account account12 = new Account("洪七公","贷记","中国农业银行","3630000010033431008",10000.00,card12);
ArrayList<Account> account=new ArrayList<>();
account.add(account1);
account.add(account2);
account.add(account3);
account.add(account4);
account.add(account5);
account.add(account6);
account.add(account7);
account.add(account8);
account.add(account9);
account.add(account10);
account.add(account11);
account.add(account12);
int i=0;
while(true)
{
m=0;
for (i=0;i<4;i++)
{
ab[i]=in.next();
if(ab[i].equals("#"))
{
break;
}
else
m++;
if(i==3) {
a=Double.parseDouble(ab[3]);
}

}
//输入
if(ab[0].equals("#"))
break;

int flag5=0;
for(int k=0;k<account.size();k++) {
for(int n=0;n<account.get(k).card.size();n++) {
if(ab[0].equals(account.get(k).card.get(n)))
{
flag5=1;
break;
}
}
}
if(flag5==0) {
System.out.print("Sorry,this card does not exist.");
System.exit(0);
}
//判断卡号是否存在

if(m==1)
{
show1(account);
System.exit(0);
}
int flag6=0;
if(ab[2].equals("01")||ab[2].equals("02")||ab[2].equals("03")||ab[2].equals("04")||ab[2].equals("05")||ab[2].equals("06")||ab[2].equals("07")||ab[2].equals("08")||ab[2].equals("09")||ab[2].equals("10")||ab[2].equals("11"))
{
flag6=1;
}
if(flag6==0) {
System.out.print("Sorry,the ATM's id is wrong.");
System.exit(0);
}
//判断ATM编号是否存在

int t1=0;
int p=0;
for(p=0;i<account.size();i++){
for(p=0;p<account.get(i).card.size();p++){
if(ab[0].equals(account.get(i).card.get(p))){
t1=i;
break;
}
}
}

if(!ab[1].equals("88888888"))
{
System.out.print("Sorry,your password is wrong.");
System.exit(0);//判断密码是否正确
}
else
{
if(Double.parseDouble(ab[3])>account.get(t1).money&&t1>=0&&t1<=7)
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);//判断取款金额是否大于账户余额
}
else if(Double.parseDouble(ab[3])>account.get(t1).money&&t1>=8&&t1<=11&&account.get(t1).money-Double.parseDouble(ab[3])>=50000)
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
else
{
int flag3=0;
int t3=0;

for(i=0;i<account.size();i++){
for(int j=0;j<account.get(i).card.size();j++){
if(ab[0].equals(account.get(i).card.get(j))){
t3=i;
break;
}
}
} //卡号判断

for(i=0;i<ATM1.size();i++)
{
if(ab[2].equals(ATM1.get(i))){
if(account.get(t3).bank!="中国建设银行")
flag3=1; //跨行
if(account.get(t3).bank=="中国建设银行")
flag3=2; //不跨行
break;
}
}

for(i=0;i<ATM2.size();i++)
{
if(ab[2].equals(ATM2.get(i))){
if(account.get(t3).bank!="中国工商银行")
flag3=1; //跨行
if(account.get(t3).bank=="中国工商银行")
flag3=2; //不跨行
break;
}
}

for(i=0;i<ATM3.size();i++)
{
if(ab[2].equals(ATM3.get(i))){
if(account.get(t3).bank!="中国农业银行")
flag3=1; //跨行
if(account.get(t3).bank=="中国农业银行")
flag3=2; //不跨行
break;
}
}
if(flag3==1)
{
show2(account,ATM1,ATM2,ATM3,bank);//跨行取款
}
else if(flag3==2)
{
show(account,ATM1,ATM2,ATM3);//不跨行存取款
}
}
}
}
}
public static void show2(ArrayList<Account> account,ArrayList<String> ATM1,ArrayList<String> ATM2,ArrayList<String> ATM3,ArrayList<Bank> bank)
{
int i,j;
int t1=0,t2=0,t3=0,t4=0;
int flag1=0,flag2=0,flag3=0;

//卡号校验
for(i=0;i<account.size();i++){
for(j=0;j<account.get(i).card.size();j++){
if(ab[0].equals(account.get(i).card.get(j))){
t1=i;
break;
}
}
}
//ATM机校验
for(i=0;i<ATM1.size();i++)
{
if(ab[2].equals(ATM1.get(i))){
t2=i;
flag1=1;
break;
}
}
for(i=0;i<ATM2.size();i++)
{
if(ab[2].equals(ATM2.get(i))){
t3=i;
flag2=1;
break;
}
}
for(i=0;i<ATM3.size();i++)
{
if(ab[2].equals(ATM3.get(i))){
t4=i;
flag3=1;
break;
}
}
if(flag1==1)
{
if(account.get(t1).type.equals("借记"))
{
account.get(t1).money=account.get(t1).money-a-a*0.02;
if(account.get(t1).money>=0)
{
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(0).name+"的"+ATM1.get(t2)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
else
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
else if(account.get(t1).type.equals("贷记"))
{
if(account.get(t1).money-a<0)
{
if(account.get(t1).money>0)
account.get(t1).money=account.get(t1).money-a-a*0.02-(a-account.get(t1).money)*0.05;
else
account.get(t1).money=account.get(t1).money-a-a*0.02-a*0.05;
if(account.get(t1).money>=-50000)
{System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(0).name+"的"+ATM1.get(t2)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else{System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);}
}
else
{
account.get(t1).money=account.get(t1).money-a-a*0.02;
if(account.get(t1).money>=0)
{
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(0).name+"的"+ATM1.get(t2)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
}
}
}//中国建设银行取款
if(flag2==1)
{
if(account.get(t1).type.equals("借记"))
{
account.get(t1).money=account.get(t1).money-a-a*0.03;
if(account.get(t1).money>=0) {
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(1).name+"的"+ATM2.get(t3)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
else if(account.get(t1).type.equals("贷记"))
{
if(account.get(t1).money-a<0)
{
if(account.get(t1).money>0)
account.get(t1).money=account.get(t1).money-a-a*0.03-(a-account.get(t1).money)*0.05;
else
account.get(t1).money=account.get(t1).money-a-a*0.03-a*0.05;
if(account.get(t1).money>=-50000) {
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(1).name+"的"+ATM2.get(t3)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
else
{
account.get(t1).money=account.get(t1).money-a-a*0.03;
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(1).name+"的"+ATM2.get(t3)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
}
}//中国工商银行取款
if(flag3==1)
{
if(account.get(t1).type.equals("借记"))
{
account.get(t1).money=account.get(t1).money-a-a*0.04;
if(account.get(t1).money>=0)
{
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(2).name+"的"+ATM3.get(t4)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
else
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
else if(account.get(t1).type.equals("贷记"))
{
if(account.get(t1).money-a<0)
{
if(account.get(t1).money>0)
account.get(t1).money=account.get(t1).money-a-a*0.04-(a-account.get(t1).money)*0.05;
else
account.get(t1).money=account.get(t1).money-a-a*0.04-a*0.05;
if(account.get(t1).money>=-50000) {
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(2).name+"的"+ATM3.get(t4)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else {
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
else
{
account.get(t1).money=account.get(t1).money-a-a*0.04;
System.out.printf("业务:取款 "+account.get(t1).user+"在"+bank.get(2).name+"的"+ATM3.get(t4)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
}
}//中国农业银行取款
}
public static void show(ArrayList<Account> account,ArrayList<String> ATM1,ArrayList<String> ATM2,ArrayList<String> ATM3)
{
int i,j;
int t1=0,t2=0,t3=0,t4=0;
int flag1=0,flag2=0,flag3=0;
//卡号校验
for(i=0;i<account.size();i++){
for(j=0;j<account.get(i).card.size();j++){
if(ab[0].equals(account.get(i).card.get(j))){
t1=i;
break;
}
}
}
//ATM机校验
for(i=0;i<ATM1.size();i++)
{
if(ab[2].equals(ATM1.get(i))){
t2=i;
flag1=1;
break;
}
}
for(i=0;i<ATM2.size();i++)
{
if(ab[2].equals(ATM2.get(i))){
t3=i;
flag2=1;
break;

}
}
for(i=0;i<ATM3.size();i++)
{
if(ab[2].equals(ATM3.get(i))){
t4=i;
flag3=1;
break;

}
}
if(flag1==1)//中国建设银行取款
{
if(account.get(t1).money-a<0)
{
if(account.get(t1).money>0)
{
account.get(t1).money=account.get(t1).money-a-(a-account.get(t1).money)*0.05;
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM1.get(t2)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
else
{
account.get(t1).money=account.get(t1).money-a-a*0.05;
if(account.get(t1).money>=-50000) {
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM1.get(t2)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else {
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
}
else
{
account.get(t1).money=account.get(t1).money-a;
if(account.get(t1).money>=0) {
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM1.get(t2)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
}
if(flag2==1)//中国工商银行取款
{
if(account.get(t1).money-a<0)
{
if(account.get(t1).money>0)
{
account.get(t1).money=account.get(t1).money-a-(a-account.get(t1).money)*0.05;
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM2.get(t3)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
else
{
account.get(t1).money=account.get(t1).money-a-a*0.05;
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM2.get(t3)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
}
else
{
account.get(t1).money=account.get(t1).money-a;
if(account.get(t1).money>=0)
{System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM2.get(t3)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
}
if(flag3==1)//中国农业银行取款
{

if(account.get(t1).money-a<0)
{
if(account.get(t1).money>0)
{
account.get(t1).money=account.get(t1).money-a-(a-account.get(t1).money)*0.05;
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM3.get(t4)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
else
{
account.get(t1).money=account.get(t1).money-a-a*0.05;
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM3.get(t4)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);
}
}
else
{
account.get(t1).money=account.get(t1).money-a;
if(account.get(t1).money>=0) {
System.out.printf("业务:取款 "+account.get(t1).user+"在"+account.get(t1).bank+"的"+ATM3.get(t4)+"号ATM机上取款¥%.2f\n",Double.parseDouble(ab[3]));
System.out.printf("当前余额为¥%.2f\n",account.get(t1).money);}
else
{
System.out.print("Sorry,your account balance is insufficient.");
System.exit(0);
}
}
}
}
public static void show1(ArrayList<Account> account)
{
int flag5=0;
for(int k=0;k<account.size();k++) {
for(int n=0;n<account.get(k).card.size();n++) {
if(ab[0].equals(account.get(k).card.get(n)))
{
flag5=1;
break;
}
}
}
if(flag5==0) {
System.out.print("Sorry,this card does not exist.");
System.exit(0);
}
int i,j;
int t1=0;
//卡号校验
for(i=0;i<account.size();i++){
for(j=0;j<account.get(i).card.size();j++){
if(ab[0].equals(account.get(i).card.get(j))){
t1=i;
break;
}
}
}
System.out.printf("业务:查询余额 "+"¥%.2f\n",account.get(t1).money);
}
}
class Account{
double money;
String user,bank,bankaccount,type;
ArrayList<String> card;
public Account(String user,String type,String bank,String bankaccount,double money,ArrayList<String> card)
{
this.user=user;
this.type=type;
this.bank=bank;
this.bankaccount=bankaccount;
this.money=money;
this.card=card;
}
}
class Bank{
String name;
ArrayList<String> ATM;
public Bank(String name,ArrayList<String> ATM)
{
this.name=name;
this.ATM=ATM;
}
public String getname(){
return name;
}
}

大体思路

1、这道题要考虑是否跨行处理,然后判断卡是借记卡还是贷记卡

容易出错的地方

1、跨行的时候要扣手续费,不同银行的手续费不同

2、贷记卡的时候不能超过50000元,透支的那部分要交5%的手续费。 

三、总结

 通过这次作业,学到了很多新知识。像动态数组,很方便对数组进行修改。然后再做这几次作业的时候遇到了挺多问题的,有的是自己解决的,有的是查阅资料。整体难度的话对于我来说还是挺难的,有很多地方都花了很多时间去想。第八次作业的时候因为写的比较晚没写完,到最后还有几个功能没实现。不过也是有很多收获的,对做一个这种类似一个项目的题有了信心,也有做下去的勇气,然后对类的关系和调用都有了新的理解,后面还是要花更多的时间学习Java才行。

posted @ 2021-12-18 20:58  阿卜杜勒阿齐兹  阅读(39)  评论(0)    收藏  举报