对JAVA(PTA-7~9)的简单总结

前言:

 

这次的这几个pta的作业量都比较少,但是题目难度比以前高一点,我觉得按照所给的那个指导书上的内容是比较容易的,他已经给出了设计的思路以及类图

我只需要在他所给的基础上按照代码实现就行了,大部分的难点就在于你的写法以及输入以及输出的细节。

 

PTA-7(7-1)

7-1 图形卡片排序游戏

 

这是指导书所给的设计类图

 

 

按照类图的设计

关于MAIN去使用DEALCARDLIST指导书是这样写的

 

我只要在卡片列表没有读完的情况下就一直去输入我需要的卡片类型以及创建一个卡片数组去存放以及输出和计算我们的卡片

然后是实验就完成了

关于一些细节

比如,

 

我们只要根据输入在数组表里边的数,然后创建相应的卡片,添加在我们新创建的卡片数组表里边,然后分别将卡片的属性之类的相应放入就行。

这样一张卡片就放好了,同理就可以放置后续的卡片了,最后就是输出的问题,

关于输出

 

 

 这是输出的固定的格式,只要卡片数组里边还有卡片我就一直输出一直打印,随后完成题目。

 

采坑心得

 

这道题目比较坑的地方就是没有卡片的情况,

这是正确的情况,

 

我做题的时候以为是没有卡片的时候就不会换行,所以测试点总是过不去,然后就是折磨了好久,

 

改进建议,希望不要约束那个主函数,我觉得自由发挥比较好。

 

PTA-7(7-2)

7-2图形卡片分组游戏

 

这道题的没有给出类图,但是也就是在7-1的基础上多了个不同类型的卡片分组,

也就是圆形,梯形各位自己的一个组

类图和7-1的类图差不多也就是多了几个输出格式

在这个题目里边,在7-1的基础上,在单独创建的每个卡片的时候我就要额外的创建一个单独的卡片类型数组来存放相同的卡片类型

 

然后再根据卡片数组的值,创建卡片的时候将卡片单独添加进去

比如case1 :

 

 

让他添加到圆形的数组里边去,其他类型的卡片也应如此的方法,放入到相应的数组里边去。

输出的话

 

这个就是输出的大体框架,show(),就是输出那个”【“ 和“】”

 

 

 按照如此的格式就完成了对这道题目的设计,输入,处理,输出的几项功能

 

踩坑心得

 

这道题我和上一道一样我自以为留了个心眼,结果有个测试点又过不去,一看原来发现是不用输出信息,只要输出WRONG FORMAT

就可以了

只是在7-1的基础上多了几个单独的图形数组,然后其他的和7-1一样

 

 

 

 

 

 

改进建议

没啥好说的和7-1一样。

 

 

PTA8

7-3 ATM机类结构设计(一)

 

 

 

 

 

 这此的作业我是这样想的

一个卡号就有一个账户,然后一个账户一定有一个用户,一个用户就一定有银行和它对应。我就是按照这个思路去写的

先是建立一个卡号数组去存放所有的卡

 

 

 然后初始化载入卡的信息

当一个账号有有多个卡号的时候那就将前一个的卡号赋值给后一个,两个卡号同时指向一个账户。

 

 

随后就是建立一个ATM的数组,去存放不同银行的ATM 

 

这样就初始化好了,然后就按照格式输入输出就行了

 

 

踩坑心得

 

这此的坑就是可以当用户输入的时候有空格的时候可以去掉空格

我是这样写的

将用户输入放在一个数组表里边,然后就去

 

先去掉多余的空格,然后将他们用一个空格分开。这样每个数据就分开饿了

随后就是简简单单的输入和输出。

 

改进建议:

 

我觉得这这道题的解法很多,我选择了一个比较笨的方法,当用手动初始化的话,我就无法处理一个用户账户下多个卡号的情况,

如果改成手动我觉得会麻烦,难度也会变高。

 

 

PTA9

7-1 ATM机类结构设计(二)

 

 

 我先给出类图

 

这个题目就是在7-1的基础上把一些职责分给了ATM机器,

修改了一些逻辑,比如账户的钱是所有卡号共同拥有的,然后就是取钱的规则和不同类型的卡号

初始化的修改

 

只是增加了一个卡的类型,其他都没有改变

ATM机器没有改变,只是增加了不同银行对应的不同手续费。

然后就是关于一些判断

 

 

 

这是关于ATM机的判断,用了正则表达式,还挺快

//本行取钱
if(cards[k].getAccount().getUser().getBank().getBankName()==atms[x].getBankName()){
if(cards[k].getAccount().getBalance()-withdraw<0){//透支
if(cards[k].getAccount().getBalance()>0){// 余额大于0的情况取钱
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw+(cards[k].getAccount().getBalance()-withdraw)*atms[x].overdraftRate);
}else{
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw-withdraw*atms[x].overdraftRate);
}
}else {
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw);
}

}


这是关于在本行取钱的问题计算

然后就是跨行取钱

{      //跨行取钱
if(cards[k].getAccount().getBalance()-withdraw<0){//透支
if(cards[k].getAccount().getBalance()>0){// 余额大于0的情况取钱
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw+(cards[k].getAccount().getBalance()-withdraw)*atms[x].overdraftRate-withdraw*atms[x].getServiceCharge());
}else{
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw-withdraw*atms[x].overdraftRate-withdraw*atms[x].getServiceCharge());
}
}
else{
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw-withdraw*atms[x].getServiceCharge());
}
}

 

 

 这个就比7-1的难度要高一点

随后就是输出的问题,按照7-1的格式就可以完美输出

踩坑心得:

这个题目的坑就是没有给你计算公式,让我细细算了一下才知道规则、

跨行取钱时

当余额大于0的情况取钱

本金-取钱金额+(本金-取钱金额*透支手续费)-取钱金额*手续费

当余额小于0的情况取钱

本金-取钱金额-取钱金额*(手续费+透支手续费)

 

本行取钱

当余额大于0的情况取钱

本金-取钱金额+(本金-取钱金额*透支手续费)

当余额小于0的情况取钱

本金-取钱金额-取钱金额*透支手续费

这样就可以计算出余额了。

改进建议

和7-1一样的建议

 

附录

代码

PTA-7(7-1)

7-1 图形卡片排序游戏

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
//在Main类中定义一个静态Scanner对象,这样在其它类中如果想要使用该对象进行输入,则直接
//使用Main.input.next…即可(避免采坑)
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();
}
}
interface Comparable<C> {

}
class DealCardList{
ArrayList<Card> cardList = new ArrayList<Card>();
Scanner in=new Scanner(System.in);
DealCardList(){}
DealCardList(ArrayList<Integer>list) {
for (Integer cho : list) {
if (cho == 0) {
break;
}else{
switch (cho){
case 1:
double r=X1.input.nextDouble();
Circle circle=new Circle(r);
Card card1=new Card(circle);
card1.getShape().setShapeName("Circle");
cardList.add(card1);
break;
case 2:
double w=X1.input.nextDouble();
double l=X1.input.nextDouble();
Rectangle rec=new Rectangle(w,l);
Card card2=new Card(rec);
card2.getShape().setShapeName("Rectangle");
cardList.add(card2);
break;
case 3:
double s1=X1.input.nextDouble();
double s2=X1.input.nextDouble();
double s3=X1.input.nextDouble();
Triangle tri=new Triangle(s1,s2,s3);
Card card3=new Card(tri);
card3.getShape().setShapeName("Triangle");
cardList.add(card3);
break;
case 4:
double t=X1.input.nextDouble();
double b=X1.input.nextDouble();
double h=X1.input.nextDouble();
Trapezoid tra=new Trapezoid(t,b,h);
Card card4=new Card(tra);
card4.getShape().setShapeName("Trapezoid");
cardList.add(card4);
break;
default:
break;
}
}
}
}
boolean validate(){
int i;
boolean flg=true;
for(i=0;i<cardList.size();i++){
if(!cardList.get(i).getShape().validate()){
flg=false;
break;
}else{
flg=true;
}
}
return flg;
}
void cardSort(){
for(int k=0;k<cardList.size();k++) {
for(int i=k+1;i<cardList.size();i++)
{
if(cardList.get(k).getShape().getArea()<cardList.get(i).getShape().getArea()) {
Collections.swap(cardList, k, i);
}
}
}
}
double getAllArea(){
double area=0;
int i;
for(i=0;i<cardList.size();i++){
area+=cardList.get(i).getShape().getArea();
}
return area;
}
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();
for (Card card : cardList) {
System.out.print(card.getShape());
}
System.out.println();
System.out.printf("Sum of area:%.2f",getAllArea());
}
}
class Card implements Comparable<Card>{
Shape shape;
Card(){
}
Card(Shape shape){
this.shape=shape;
}
Shape getShape(){
return this.shape;
}
void setShape(Shape shape){
this.shape=shape;
}
int compareTo(Card card){
return -(int)(shape.getArea()-card.getShape().getArea());
}
}
class Shape{
String shapeName;
Shape(){

}
Shape(String shapeName){
this.shapeName=shapeName;
}
public void setShapeName(String shapeName) {
this.shapeName = shapeName;
}
public String getShapeName() {
return shapeName;
}
double getArea(){
return 1;
}
boolean validate(){
return true;
}
@Override
public String toString(){
return getShapeName()+":"+String.format("%.2f ",getArea());
}
}
class Rectangle extends Shape{
double width;
double length;
Rectangle(){

}
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;
}
@Override
double getArea(){
return this.length*this.width;
}
@Override
boolean validate(){
if(this.width<0||this.length<0){
return false;
}else{
return true;
}
}
}
class Triangle extends Shape{
double side1;
double side2;
double side3;
Triangle(){}
Triangle(double side1,double side2,double side3){
this.side1=side1;
this.side2=side2;
this.side3=side3;
}
@Override
double getArea(){
double area = 0;
double s = (this.side1 + this.side2 + this.side3) / 2.0;
area = Math.sqrt(s * (s - this.side1) * (s - this.side2) * (s - this.side3));
return area;
}
@Override
boolean validate() {
if (this.side1 + this.side2 > this.side3 && this.side1 + this.side3 > this.side2 && this.side2 + this.side3 > this.side1) {
return true;
} else {
return false;
}
}
}
class Circle extends Shape{
double radius = 0;

double getRadius() {
return this.radius;
}

void setRadius(double radius) {
this.radius = radius;
}

Circle(double radius) {
this.radius = radius;
}

Circle() {

}
@Override
double getArea() {
double area = 0;
area = Math.PI * this.radius * this.radius;

return area;
}
@Override
boolean validate() {
if (this.radius > 0) {
return true;
} else {
return false;
}
}

}
class Trapezoid extends Shape{
double topSide;
double bottomSide;
double height;
Trapezoid(){
}
Trapezoid(double topSide,double bottomSide,double height){
this.topSide=topSide;
this.bottomSide=bottomSide;
this.height=height;
}
@Override
double getArea(){
return (this.topSide+this.bottomSide)*this.height/2.0;
}

@Override
boolean validate(){
if(this.topSide<0||this.bottomSide<0||this.height<0){
return false;
}else{
return true;
}
}
}

PTA-7(7-2)

7-2图形卡片分组游戏

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

/**
* @author 86173
*/
public class Main {
public static Scanner input = new Scanner(System.in);
public static void main(String[] args){
ArrayList<Integer> list = new ArrayList<>();
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();
}
}
class DealCardList{
ArrayList<Card> cardList = new ArrayList<>();
ArrayList<Card> circleList = new ArrayList<>();
ArrayList<Card> rectangleList = new ArrayList<>();
ArrayList<Card> triangleList = new ArrayList<>();
ArrayList<Card> trapezoidList = new ArrayList<>();
DealCardList(ArrayList<Integer>list) {
for (Integer cho : list) {
if (cho == 0) {
break;
}else{
switch (cho){
case 1:
double r=Main.input.nextDouble();
Circle circle=new Circle(r);
Card card1=new Card(circle);
card1.getShape().setShapeName("Circle");
cardList.add(card1);
circleList.add(card1);
break;
case 2:
double w=Main.input.nextDouble();
double l=Main.input.nextDouble();
Rectangle rec=new Rectangle(w,l);
Card card2=new Card(rec);
card2.getShape().setShapeName("Rectangle");
cardList.add(card2);
rectangleList.add(card2);
break;
case 3:
double s1=Main.input.nextDouble();
double s2=Main.input.nextDouble();
double s3=Main.input.nextDouble();
Triangle tri=new Triangle(s1,s2,s3);
Card card3=new Card(tri);
card3.getShape().setShapeName("Triangle");
cardList.add(card3);
triangleList.add(card3);
break;
case 4:
double t=Main.input.nextDouble();
double b=Main.input.nextDouble();
double h=Main.input.nextDouble();
Trapezoid tra=new Trapezoid(t,b,h);
Card card4=new Card(tra);
card4.getShape().setShapeName("Trapezoid");
cardList.add(card4);
trapezoidList.add(card4);
break;
default:
break;
}
}
}
}
boolean validate(){
int i;
boolean flg=true;
for(i=0;i<cardList.size();i++){
if(!cardList.get(i).getShape().validate()){
flg=false;
break;
}else{
flg=true;
}
}
if(!cardList.isEmpty()&&flg){
return true;
}else{
return false;
}
}
double getAllArea(ArrayList<Card> cardList){
double area=0;
int i;
for(i=0;i<cardList.size();i++){
area+=cardList.get(i).getShape().getArea();
}
return area;
}
void showResult(){
double m1,m2,m = 0;
System.out.println("The original list:");
System.out.print("[");
for (Card card : cardList) {
System.out.print(card.getShape());
}
System.out.print("]");
System.out.println();
System.out.println("The Separated List:");
show();
System.out.println("The Separated sorted List:");
Collections.sort(circleList);
Collections.sort(rectangleList);
Collections.sort(triangleList);
Collections.sort(trapezoidList);
show();
m1 = Math.max(getAllArea(circleList), getAllArea(rectangleList));
m2 = Math.max(getAllArea(triangleList), getAllArea(trapezoidList));
m = Math.max(m1, m2);
System.out.printf("The max area:%.2f",m);
}
void show(){
System.out.print("[");
for (Card card : circleList) {
System.out.print(card.getShape());
}
System.out.print("][");
for (Card card : rectangleList) {
System.out.print(card.getShape());
}
System.out.print("][");
for (Card card : triangleList) {
System.out.print(card.getShape());
}
System.out.print("][");
for (Card card : trapezoidList) {
System.out.print(card.getShape());
}
System.out.print("]");
System.out.println();
}

}
class Card implements Comparable<Card>{
Shape shape;
Card(Shape shape){
this.shape=shape;
}
Shape getShape(){
return this.shape;
}
@Override
public int compareTo(Card card){
return -(int)(shape.getArea()-card.getShape().getArea());
}
}
class Shape{
String shapeName;
Shape(){

}
public void setShapeName(String shapeName) {
this.shapeName = shapeName;
}
public String getShapeName() {
return shapeName;
}
double getArea(){
return 1;
}
boolean validate(){
return true;
}
@Override
public String toString(){
return getShapeName()+":"+String.format("%.2f ",getArea());
}
}
class Rectangle extends Shape{
double width;
double length;
Rectangle(double width,double length){
this.width=width;
this.length=length;
}
@Override
double getArea(){
return this.length*this.width;
}
@Override
boolean validate(){
if(this.width<0||this.length<0){
return false;
}else{
return true;
}
}
}
class Triangle extends Shape{
double side1;
double side2;
double side3;
Triangle(double side1,double side2,double side3){
this.side1=side1;
this.side2=side2;
this.side3=side3;
}
@Override
double getArea(){
double area ;
double s = (this.side1 + this.side2 + this.side3) / 2.0;
area = Math.sqrt(s * (s - this.side1) * (s - this.side2) * (s - this.side3));
return area;
}
@Override
boolean validate() {
if (this.side1 + this.side2 > this.side3 && this.side1 + this.side3 > this.side2 && this.side2 + this.side3 > this.side1) {
return true;
} else {
return false;
}
}
}
class Circle extends Shape{
double radius = 0;

Circle(double radius) {
this.radius = radius;
}

@Override
double getArea() {
double area = 0;
area = Math.PI * this.radius * this.radius;
return area;
}
@Override
boolean validate() {
return this.radius >= 0;
}
}
class Trapezoid extends Shape{
double topSide;
double bottomSide;
double height;

Trapezoid(double topSide,double bottomSide,double height){
this.topSide=topSide;
this.bottomSide=bottomSide;
this.height=height;
}
@Override
double getArea(){
return (this.topSide+this.bottomSide)*this.height/2.0;
}

@Override
boolean validate(){
return !(this.topSide < 0) && !(this.bottomSide < 0) && !(this.height < 0);
}
}

PTA8

7-3 ATM机类结构设计(一)

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

/**
* @author 86173
*/
public class Main {
public static void main(String[] args){


DelaDate dateDeal=new DelaDate();

}
static class Account{
String accountNumber;
User user=new User();
double balance;
public String getAccountNumber() {
return accountNumber;
}

public void setBalance(double balance) {
this.balance = balance;
}

public double getBalance() {
return balance;
}

public User getUser() {
return user;
}

public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}

public void setUser(User user) {
this.user = user;
}
}
static class Card{
String cardNumber;

Account account=new Account();

public void setAccount(Account account) {
this.account = account;
}



public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}

public Account getAccount() {
return account;
}



public String getCardNumber() {
return cardNumber;
}
}
static class User{
String uerName;
Bank bank=new Bank();

public void setUerName(String uerName) {
this.uerName = uerName;
}

public String getUerName() {
return uerName;
}

public void setBank(Bank bank) {
this.bank = bank;
}

public Bank getBank() {
return bank;
}
}
static class Bank{
String bankName;

public String getBankName() {
return bankName;
}

public void setBankName(String bankName) {
this.bankName = bankName;
}
}
static class Atm {
String bankName;
String atmNumber;

public String getAtmNumber() {
return atmNumber;
}

public void setAtmNumber(String atmNumber) {
this.atmNumber = atmNumber;
}

public String getBankName() {
return bankName;
}

public void setBankName(String bankName) {
this.bankName = bankName;
}

public void depot(){

}
}

static class DelaDate {

DelaDate(){
Card[] cards=new Card[10];
for(int i=0;i<10;i++){
Card card=new Card();
cards[i]=card;
cards[i].getAccount().setBalance(10000);

}
cards[0].setCardNumber("6217000010041315709");
cards[0].getAccount().setAccountNumber("3217000010041315709");
cards[0].getAccount().getUser().setUerName("杨过");
cards[0].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[1].setCardNumber("6217000010041315715");
cards[1].setAccount(cards[0].getAccount());
cards[1].getAccount().getUser().setUerName("杨过");
cards[1].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[2].setCardNumber("6217000010041315718");
cards[2].getAccount().setAccountNumber("3217000010041315715");
cards[2].getAccount().getUser().setUerName("杨过");
cards[2].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[3].setCardNumber("6217000010041320007");
cards[3].getAccount().setAccountNumber("3217000010041320007");
cards[3].getAccount().getUser().setUerName("郭靖");
cards[3].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[4].setCardNumber("6222081502001312389");
cards[4].getAccount().setAccountNumber("3222081502001312389");
cards[4].getAccount().getUser().setUerName("张无忌");
cards[4].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[5].setCardNumber("6222081502001312390");
cards[5].getAccount().setAccountNumber("3222081502001312390");
cards[5].getAccount().getUser().setUerName("张无忌");
cards[5].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[6].setCardNumber("6222081502001312399");
cards[6].getAccount().setAccountNumber("3222081502001312399");
cards[6].getAccount().getUser().setUerName("张无忌");
cards[6].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[7].setCardNumber("6222081502001312400");
cards[7].setAccount(cards[6].getAccount());
cards[7].getAccount().getUser().setUerName("张无忌");
cards[7].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[8].setCardNumber("6222081502051320785");
cards[8].getAccount().setAccountNumber("3222081502051320785");
cards[8].getAccount().getUser().setUerName("韦小宝");
cards[8].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[9].setCardNumber("6222081502051320786");
cards[9].getAccount().setAccountNumber("3222081502051320786");
cards[9].getAccount().getUser().setUerName("韦小宝");
cards[9].getAccount().getUser().getBank().setBankName("中国工商银行");

Atm[] atms=new Atm[6];
for(int i=0;i<atms.length;i++){
Atm atm=new Atm();
atms[i]=atm;
}
atms[0].atmNumber="01";
atms[1].atmNumber="02";
atms[2].atmNumber="03";
atms[3].atmNumber="04";
atms[4].atmNumber="05";
atms[5].atmNumber="06";

atms[0].bankName="中国建设银行";
atms[1].bankName="中国建设银行";
atms[2].bankName="中国建设银行";
atms[3].bankName="中国建设银行";
atms[4].bankName="中国工商银行";
atms[5].bankName="中国工商银行";

boolean flg=true;;
ArrayList<String>list =new ArrayList<>();
Scanner inpute=new Scanner(System.in);
String data=inpute.nextLine();
if(data==null){
System.out.println("Wrong Format");
return;
}
while(!data.equals("#")) {
list.add(data);
data=inpute.nextLine();
}
for(int i=0;i<list.size();i++) {
String arry=list.get(i).replaceAll(" +"," ");
String[] str=arry.split(" ");

if(str.length==1){
int k=findCard(list,i,cards);
if(i==list.size()-1) {
System.out.printf("¥%.2f", cards[k].getAccount().getBalance());

}else{
System.out.printf("¥%.2f\n", cards[k].getAccount().getBalance());
}
}else{
flg=CheckData(list,i,cards,atms);
if(flg){
int k=findCard(list,i,cards);

double withdraw=Double.parseDouble(str[3]);
if(withdraw>0){
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw);
System.out.printf(cards[k].getAccount().getUser().getUerName()+"在"+cards[k].getAccount().getUser().getBank().getBankName()+"的"+str[2]+"号ATM机上取款¥%.2f\n",withdraw);
if(i==list.size()-1){
System.out.printf("当前余额为¥%.2f",cards[k].getAccount().getBalance());
}else{
System.out.printf("当前余额为¥%.2f\n",cards[k].getAccount().getBalance());
}
}
if(withdraw<0) {
withdraw = -withdraw;
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance() + withdraw);
System.out.printf(cards[k].getAccount().getUser().getUerName() + "在" + cards[k].getAccount().getUser().getBank().getBankName() + "的" + str[2] + "号ATM机上存款¥%.2f\n", withdraw);
if(i==list.size()-1){
System.out.printf("当前余额为¥%.2f",cards[k].getAccount().getBalance());
}else{
System.out.printf("当前余额为¥%.2f\n",cards[k].getAccount().getBalance());
}
}
}
}
}



}
int findCard(ArrayList<String> list,int i,Card[] cards){
int k=0,x=0;
int j;
String arry=list.get(i).replaceAll(" +"," ");
String[] str=arry.split(" ");
for(j=0;j<cards.length;j++){
if(str[0].equals(cards[j].cardNumber)){
k=j;
break;
}
}if(k==0){

}
return k;
}
public boolean CheckData(ArrayList<String> list,int i,Card[] cards,Atm[] atms){
int j=0;
int k=0;
int x=0;
double withdraw;
boolean flg=false;
String arry=list.get(i).replaceAll(" +"," ");
String[] str=arry.split(" ");
for(j=0;j<cards.length;j++){
if(str[0].equals(cards[j].cardNumber)){
k=j;
flg=true;
}
}if(!flg&&!str[0].equals(cards[0].cardNumber)){
System.out.print("Sorry,this card does not exist.");
return flg;
}

String s1="88888888";
if(str[1].equals(s1)) {
flg = true;
}else{
flg=false;
System.out.print("Sorry,your password is wrong.");
return flg;
}
if(!str[2].matches("[0][1-6]")){
System.out.print("Sorry,the ATM's id is wrong.");
flg=false;
return flg;
}
for(j=0;j<atms.length;j++){
if(str[2].equals(atms[j].getAtmNumber())){
x=j;
}
}

withdraw=Double.parseDouble(str[3]);
if(withdraw<0){
withdraw=-withdraw;
}
if(cards[k].getAccount().balance<withdraw){
System.out.print("Sorry,your account balance is insufficient.");
flg=false;
return flg;
}
if(!cards[k].account.user.bank.bankName.equals(atms[x].bankName)){
System.out.print("Sorry,cross-bank withdrawal is not supported.");
flg=false;
return flg;
}
return flg;
}
}
}

 

 

PTA9

7-1 ATM机类结构设计(二)

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

/**
* @author 86173 CreditAccount DebitAccount
*/
public class Main {
public static void main(String[] args){


DelaDate dateDeal=new DelaDate();

}
static class Account{
String accountNumber;
String accountType;
User user=new User();
double balance;

public void setAccountType(String accountType) {
this.accountType = accountType;
}

public String getAccountType() {
return accountType;
}

public String getAccountNumber() {
return accountNumber;
}

public void setBalance(double balance) {
this.balance = balance;
}

public double getBalance() {
return balance;
}

public User getUser() {
return user;
}

public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}

public void setUser(User user) {
this.user = user;
}
}
static class Card{
String cardNumber;

Account account=new Account();

public void setAccount(Account account) {
this.account = account;
}



public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}

public Account getAccount() {
return account;
}



public String getCardNumber() {
return cardNumber;
}
}
static class User{
String uerName;
Bank bank=new Bank();

public void setUerName(String uerName) {
this.uerName = uerName;
}

public String getUerName() {
return uerName;
}

public void setBank(Bank bank) {
this.bank = bank;
}

public Bank getBank() {
return bank;
}
}
static class Bank{
String bankName;


public String getBankName() {
return bankName;
}

public void setBankName(String bankName) {
this.bankName = bankName;
}
}
static class Atm {
String bankName;
String atmNumber;
double serviceCharge;

double overdraftRate=0.05;

public void setOverdraftRate(double overdraftRate) {
this.overdraftRate = overdraftRate;
}

public double getOverdraftRate() {
return overdraftRate;
}

public void setServiceCharge(double serviceCharge) {
this.serviceCharge = serviceCharge;
}

public double getServiceCharge() {
return serviceCharge;
}

public String getAtmNumber() {
return atmNumber;
}

public void setAtmNumber(String atmNumber) {
this.atmNumber = atmNumber;
}

public String getBankName() {
return bankName;
}

public void setBankName(String bankName) {
this.bankName = bankName;
}

public void depot(){

}
}

static class DelaDate {

DelaDate(){
Card[] cards=new Card[15];
for(int i=0;i<15;i++){
Card card=new Card();
cards[i]=card;
cards[i].getAccount().setBalance(10000);

}
cards[0].setCardNumber("6217000010041315709");
cards[0].getAccount().setAccountNumber("3217000010041315709");
cards[0].getAccount().getUser().setUerName("杨过");
cards[0].getAccount().setAccountType("DebitAccount");
cards[0].getAccount().getUser().getBank().setBankName("中国建设银行");


cards[1].setCardNumber("6217000010041315715");
cards[1].setAccount(cards[0].getAccount());
cards[1].getAccount().setAccountType(cards[0].getAccount().getAccountType());
cards[1].getAccount().getUser().setUerName("杨过");
cards[1].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[2].setCardNumber("6217000010041315718");
cards[2].getAccount().setAccountNumber("3217000010041315715");
cards[2].getAccount().getUser().setUerName("杨过");
cards[2].getAccount().setAccountType("DebitAccount");
cards[2].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[3].setCardNumber("6217000010041320007");
cards[3].getAccount().setAccountNumber("3217000010041320007");
cards[3].getAccount().getUser().setUerName("郭靖");
cards[3].getAccount().setAccountType("DebitAccount");
cards[3].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[4].setCardNumber("6222081502001312389");
cards[4].getAccount().setAccountNumber("3222081502001312389");
cards[4].getAccount().getUser().setUerName("张无忌");
cards[4].getAccount().setAccountType("DebitAccount");
cards[4].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[5].setCardNumber("6222081502001312390");
cards[5].getAccount().setAccountNumber("3222081502001312390");
cards[5].getAccount().getUser().setUerName("张无忌");
cards[5].getAccount().setAccountType("DebitAccount");
cards[5].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[6].setCardNumber("6222081502001312399");
cards[6].getAccount().setAccountNumber("3222081502001312399");
cards[6].getAccount().getUser().setUerName("张无忌");
cards[6].getAccount().setAccountType("DebitAccount");
cards[6].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[7].setCardNumber("6222081502001312400");
cards[7].setAccount(cards[6].getAccount());
cards[7].getAccount().getUser().setUerName("张无忌");
cards[7].getAccount().setAccountType("DebitAccount");
cards[7].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[8].setCardNumber("6222081502051320785");
cards[8].getAccount().setAccountNumber("3222081502051320785");
cards[8].getAccount().getUser().setUerName("韦小宝");
cards[8].getAccount().setAccountType("DebitAccount");
cards[8].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[9].setCardNumber("6222081502051320786");
cards[9].getAccount().setAccountNumber("3222081502051320786");
cards[9].getAccount().getUser().setUerName("韦小宝");
cards[9].getAccount().setAccountType("DebitAccount");
cards[9].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[10].setCardNumber("6640000010045442002");
cards[10].getAccount().setAccountNumber("3640000010045442002");
cards[10].getAccount().getUser().setUerName("张三丰");
cards[10].getAccount().setAccountType("CreditAccount");
cards[10].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[11].setCardNumber("6640000010045442003");
cards[11].setAccount(cards[10].getAccount());
cards[11].getAccount().getUser().setUerName("张三丰");
cards[11].getAccount().setAccountType("CreditAccount");
cards[11].getAccount().getUser().getBank().setBankName("中国建设银行");

cards[12].setCardNumber("6640000010045441009");
cards[12].getAccount().setAccountNumber("3640000010045441009");
cards[12].getAccount().getUser().setUerName("令狐冲");
cards[12].getAccount().setAccountType("CreditAccount");
cards[12].getAccount().getUser().getBank().setBankName("中国工商银行");

cards[13].setCardNumber("6630000010033431001");
cards[13].getAccount().setAccountNumber("3630000010033431001");
cards[13].getAccount().getUser().setUerName("乔峰");
cards[13].getAccount().setAccountType("CreditAccount");
cards[13].getAccount().getUser().getBank().setBankName("中国农业银行");

cards[14].setCardNumber("6630000010033431008");
cards[14].getAccount().setAccountNumber("3630000010033431008");
cards[14].getAccount().getUser().setUerName("洪七公");
cards[14].getAccount().setAccountType("CreditAccount");
cards[14].getAccount().getUser().getBank().setBankName("中国农业银行");




Atm[] atms=new Atm[11];
for(int i=0;i<atms.length;i++){
Atm atm=new Atm();
atms[i]=atm;
}
atms[0].atmNumber="01";
atms[1].atmNumber="02";
atms[2].atmNumber="03";
atms[3].atmNumber="04";
atms[4].atmNumber="05";
atms[5].atmNumber="06";
atms[6].atmNumber="07";
atms[7].atmNumber="08";
atms[8].atmNumber="09";
atms[9].atmNumber="10";
atms[10].atmNumber="11";


atms[0].bankName="中国建设银行";
atms[1].bankName="中国建设银行";
atms[2].bankName="中国建设银行";
atms[3].bankName="中国建设银行";
atms[4].bankName="中国工商银行";
atms[5].bankName="中国工商银行";
atms[6].bankName="中国农业银行";
atms[7].bankName="中国农业银行";
atms[8].bankName="中国农业银行";
atms[9].bankName="中国农业银行";
atms[10].bankName="中国农业银行";

atms[0].setServiceCharge(0.02);
atms[1].setServiceCharge(0.02);
atms[2].setServiceCharge(0.02);
atms[3].setServiceCharge(0.02);

atms[4].setServiceCharge(0.03);
atms[5].setServiceCharge(0.03);

atms[6].setServiceCharge(0.04);
atms[7].setServiceCharge(0.04);
atms[8].setServiceCharge(0.04);
atms[9].setServiceCharge(0.04);
atms[10].setServiceCharge(0.04);




boolean flg=true;;
ArrayList<String>list =new ArrayList<>();
Scanner inpute=new Scanner(System.in);
String data=inpute.nextLine();
if(data==null){
System.out.println("Wrong Format");
return;
}
while(!data.equals("#")) {
list.add(data);
data=inpute.nextLine();
}
for(int i=0;i<list.size();i++) {
String arry=list.get(i).replaceAll(" +"," ");
String[] str=arry.split(" ");

if(str.length==1){
int k=findCard(list,i,cards);
if(i==list.size()-1) {
System.out.printf("业务:查询余额 ¥%.2f", cards[k].getAccount().getBalance());

}else{
System.out.printf("业务:查询余额 ¥%.2f\n", cards[k].getAccount().getBalance());
}
}else{
flg=CheckData(list,i,cards,atms);
if(flg){
int k=findCard(list,i,cards);
int x=findAtm(list,i,atms);
double withdraw=Double.parseDouble(str[3]);
withDraw(cards,k,atms,x,withdraw);
if(withdraw>0){

System.out.printf("业务:取款 "+cards[k].getAccount().getUser().getUerName()+"在"+atms[x].getBankName()+"的"+str[2]+"号ATM机上取款¥%.2f\n",withdraw);
if(i==list.size()-1){
System.out.printf("当前余额为¥%.2f",cards[k].getAccount().getBalance());
}else{
System.out.printf("当前余额为¥%.2f\n",cards[k].getAccount().getBalance());
}
}
if(withdraw<0) {
withdraw = -withdraw;
System.out.printf("业务:存款 "+cards[k].getAccount().getUser().getUerName() + "在" + atms[x].getBankName() + "的" + str[2] + "号ATM机上存款¥%.2f\n", withdraw);
if(i==list.size()-1){
System.out.printf("当前余额为¥%.2f",cards[k].getAccount().getBalance());
}else{
System.out.printf("当前余额为¥%.2f\n",cards[k].getAccount().getBalance());
}
}
}
}
}
}
int findCard(ArrayList<String> list,int i,Card[] cards){
int k=0;
int j;
String arry=list.get(i).replaceAll(" +"," ");
String[] str=arry.split(" ");
for(j=0;j<cards.length;j++){
if(str[0].equals(cards[j].cardNumber)){
k=j;
break;
}
}
return k;
}
int findAtm(ArrayList<String> list,int i,Atm[] atms){
int x=0;
int j;
String arry=list.get(i).replaceAll(" +"," ");
String[] str=arry.split(" ");
for(j=0;j<atms.length;j++){
if(str[2].equals(atms[j].getAtmNumber())){
x=j;
break;
}
}
return x;
}
public boolean CheckData(ArrayList<String> list,int i,Card[] cards,Atm[] atms){
int j=0;
int k=0;
int x=0;

double withdraw;
boolean flg=false;
String arry=list.get(i).replaceAll(" +"," ");
String[] str=arry.split(" ");
for(j=0;j<cards.length;j++){
if(str[0].equals(cards[j].cardNumber)){
k=j;
flg=true;
}
}if(!flg&&!str[0].equals(cards[0].cardNumber)){
System.out.print("Sorry,this card does not exist.");
return flg;
}

String s1="88888888";
if(str[1].equals(s1)) {
flg = true;
}else{
flg=false;
System.out.print("Sorry,your password is wrong.");
return flg;
}
if(!str[2].matches("([0][1-9])|[1][01]")){
System.out.print("Sorry,the ATM's id is wrong.");
flg=false;
return flg;
}
for(j=0;j<atms.length;j++){
if(str[2].equals(atms[j].getAtmNumber())){
x=j;
}
}

withdraw=Double.parseDouble(str[3]);
if(withdraw<0){
withdraw=-withdraw;
}
String cA="CreditAccount";
String dA="DebitAccount";
double rate;
if(cards[k].getAccount().getUser().getBank().getBankName()==atms[x].getBankName()){
rate=0;
}else{
rate=atms[x].getServiceCharge();
}

if(cards[k].getAccount().getAccountType().equals(dA)&&cards[k].getAccount().balance-withdraw-withdraw*rate<0||cards[k].getAccount().getAccountType().equals(cA)&&cards[k].getAccount().getBalance()<0&&cards[k].getAccount().balance-withdraw-withdraw*atms[x].overdraftRate-withdraw*rate<=-50000||cards[k].getAccount().getAccountType().equals(cA)&&cards[k].getAccount().getBalance()>0&&cards[k].getAccount().getBalance()<withdraw&&cards[k].getAccount().getBalance()-withdraw+(cards[k].getAccount().getBalance()-withdraw)*atms[x].overdraftRate-withdraw*rate<-50000){
System.out.print("Sorry,your account balance is insufficient.");
flg=false;
return flg;
}

return flg;
}

void withDraw(Card[] cards,int k,Atm[] atms,int x,double withdraw){
if(withdraw>0){
//本行取钱
if(cards[k].getAccount().getUser().getBank().getBankName()==atms[x].getBankName()){
if(cards[k].getAccount().getBalance()-withdraw<0){//透支
if(cards[k].getAccount().getBalance()>0){// 余额大于0的情况取钱
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw+(cards[k].getAccount().getBalance()-withdraw)*atms[x].overdraftRate);
}else{
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw-withdraw*atms[x].overdraftRate);
}
}else {
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw);
}

}else{ //跨行取钱
if(cards[k].getAccount().getBalance()-withdraw<0){//透支
if(cards[k].getAccount().getBalance()>0){// 余额大于0的情况取钱
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw+(cards[k].getAccount().getBalance()-withdraw)*atms[x].overdraftRate-withdraw*atms[x].getServiceCharge());
}else{
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw-withdraw*atms[x].overdraftRate-withdraw*atms[x].getServiceCharge());
}
}
else{
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()-withdraw-withdraw*atms[x].getServiceCharge());
}
}
}else{//存钱
withdraw=-withdraw;
cards[k].getAccount().setBalance(cards[k].getAccount().getBalance()+withdraw);
}
}
}
}
posted @ 2021-12-18 21:12  正在秃头的阿下  阅读(171)  评论(0)    收藏  举报