package analog_ATM;
import java.io.IOException;
//import java.sql.*;
import java.util.*;
/**
* 1.账户类,模拟ATM机,即读取了用户的个人信息
* 2.查询余额
* 3.交易记录
* 4.存/取
* 5.其他功能
*/
class InsufficientFundsException extends Exception{//自定义异常类
Account account; //貌似有危险
private double dAmount;
InsufficientFundsException(){} //无参
InsufficientFundsException(Account account, double dAmount){
this.account = account;
this.dAmount = dAmount;
}
public String getMessage(){ //错误信息
String str = "取款失败!账户余额:" + account.getBalance()+ ",取款额:" + dAmount + ",余额不足";
return str;
}
}
class Account{
boolean isUseful = true; //卡是否可用
String cardNumber; //4位数的卡号,由银行按照规定分配
String userName; //用户名
String password; //密码
double balance; //余额
Account(){
this.isUseful = true;
this.balance = 0.0;
}
Account(String cardNumber, String userName, String password){
this.isUseful = true;
this.balance = 0.0;
this.cardNumber = cardNumber;
this.userName = userName;
this.password = password;
}
//
//public void setCardNumber() {
//Random rnd = new Random();
//rnd.setSeed(9999);
//}
//
public void setUserName() throws IOException{//cin exception
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的用户名:");
this.userName = sc.nextLine();
}
//
public void setPassword() throws IOException {//cin exception
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的密码:");
this.password = sc.nextLine();
}
//查余额
public double getBalance(){
return this.balance;
}
//取
public void withdraw(double money) throws InsufficientFundsException{
if (balance < money) {
throw new InsufficientFundsException(this, money);
}
balance = balance - money;
System.out.println("取款成功!账户余额为" + balance);
}
//查记录
public void recordsInfo() {
}
//存
public void saveMoney(double money) {
this.balance += money;
System.out.println("存款成功!新余额为:"+this.balance);
}
}
//银行系统
class Bank{
Account card[];
static int current_account_index = 0;
static int accountNumber = 0; //账户数量
static int illegalCardNumber = 0; //冻结数量
Bank(){
card = new Account[1];
card[0] = new Account("1000", "root", "password");
accountNumber ++;
}
void addAccount() throws IOException, InsufficientFundsException {
Account [] temp = card;
card = new Account[accountNumber + 1];
for(int i = 0; i<accountNumber; i++) {
card[i] = new Account();
card[i] = temp[i];
}
card[accountNumber] = new Account();
card[accountNumber].cardNumber = String.valueOf(accountNumber + 1000);
card[accountNumber].setUserName();
card[accountNumber].setPassword();
System.out.println("注册成功,卡好为:"+card[accountNumber].cardNumber);
accountNumber++;
load();
}
void cutAccount(String cardNumber) {
//系统发现恶意账户,应该立刻冻结它.
//卡丢了,立刻冻结
//根据卡号冻结
for (Account ac: card) {
if(ac.cardNumber.equals(cardNumber)) {
ac.isUseful = false;
illegalCardNumber++;
}
}
}
//
void load() throws IOException, InsufficientFundsException{
System.out.println("*********************欢迎进入xx银行登录界面***********************");
System.out.println("1:登录\t2.注册\t3.退出");
Scanner sc = new Scanner(System.in);
System.out.println("请选择功能:");
int i = sc.nextInt();
if (i==1) {
loadInfo();
}
if (i==2) {
addAccount();
}
if (i==3) {
System.exit(0);
}
}
//
void mainWnd() throws IOException, InsufficientFundsException{
System.out.println("欢迎进入银行系统!");
System.out.println("*****************银行系统************************");
while (true){
System.out.println("1:存钱 \t2.取钱 \t3.查看余额\t4.挂失 \t5.退出 ");
Scanner sc = new Scanner(System.in);
System.out.println("请选择功能:");
int i = sc.nextInt();
if(i==5) {break;}
if(i==1) {
if(card[current_account_index].isUseful == true) {
System.out.println("请输入存款金额:");
double money = sc.nextDouble();
card[current_account_index].saveMoney(money);}
else {System.out.println("账户以被冻结");break;}
}
if(i==2) {
if(card[current_account_index].isUseful == true) {
System.out.println("请输入取款金额:");
double money = sc.nextDouble();
card[current_account_index].withdraw(money);
}
else {System.out.println("账户以被冻结");break;}
}
if(i==3) {
if(card[current_account_index].isUseful == true) {
System.out.println("余额为:"+card[current_account_index].getBalance());}
else {System.out.println("账户以被冻结");break;}
}
if(i==4) {if(card[current_account_index].isUseful == true) {
cutAccount(card[current_account_index].cardNumber);}
else {System.out.println("账户以被冻结");break;}
}
}
System.exit(0);
}
void loadInfo() throws IOException, InsufficientFundsException{
Scanner sc = new Scanner(System.in);
System.out.println("请输入卡号:");
String cardNumber = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
for (Account ac: card) {
if(ac.isUseful == true && ac.cardNumber.equals(cardNumber) && ac.password.equals(password)) {
System.out.println("登录成功!");
mainWnd();
}
current_account_index++;
}
System.out.println("卡号或者密码错误!请重新登录");
loadInfo();
}
}
//test
public class ATM {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
Bank b = new Bank();
//System.out.println(b.card[0].balance);
try {
b.load();
} catch (InsufficientFundsException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}
}