java實(shí)現(xiàn)簡單的ATM項(xiàng)目
本文實(shí)例為大家分享了java實(shí)現(xiàn)簡單的ATM項(xiàng)目的具體代碼,供大家參考,具體內(nèi)容如下
首先要了解的是,這個(gè)ATM項(xiàng)目本身是一個(gè)輕量級的項(xiàng)目,只為了完成一些ATM具備的一些方法,并非是真正完成一個(gè)ATM的全部功能和需求
那么在這個(gè)輕量級的ATM項(xiàng)目中,我將完成添加儲蓄賬號,添加信用賬戶,提款,取款等基本功能。
適合新手查看,需要掌握java的繼承,多態(tài),封裝等基本技術(shù)能力
那么,首先創(chuàng)建如下的對象類:Account(賬戶類),Bank(銀行類),CreditAccount(信用賬戶),SavingAccount(儲蓄賬戶類);
大家首先應(yīng)該搞清楚,這些類文件中之間的關(guān)系,每個(gè)類之間需要用到什么樣的方法;
那么我們先填寫Account類
package com.atm.entity;
/**
* 銀行賬戶類
*/
public abstract class Account {
/**
* 賬戶帳號
*/
private String accountId;
/**
* 賬戶姓名
*/
private String accountName;
/**
* 賬戶密碼
*/
private String accountPwd;
/**
* 賬戶余額
*/
private double accountBalance;
/**
* 賬戶身份證號
*/
private String accountPersonId;
/**
* 賬戶郵箱
*/
private String accountEmail;
/**
* 賬戶聯(lián)系電話
*/
private long accountTelno;
public Account() {
}
public Account(String accountName, String accountPwd, String accountPersonId, long accountTelno,
String accountEmail) {
this.accountName = accountName;
this.accountPwd = accountPwd;
this.accountPersonId = accountPersonId;
this.accountTelno = accountTelno;
this.accountEmail = accountEmail;
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
public String getAccountPwd() {
return accountPwd;
}
public void setAccountPwd(String accountPwd) {
this.accountPwd = accountPwd;
}
public double getAccountBalance() {
return accountBalance;
}
public void setAccountBalance(double accountBalance) {
this.accountBalance = accountBalance;
}
public String getAccountPersonId() {
return accountPersonId;
}
public void setAccountPersonId(String accountPersonId) {
this.accountPersonId = accountPersonId;
}
public String getAccountEmail() {
return accountEmail;
}
public void setAccountEmail(String accountEmail) {
this.accountEmail = accountEmail;
}
public long getAccountTelno() {
return accountTelno;
}
public void setAccountTelno(long accountTelno) {
this.accountTelno = accountTelno;
}
/**
* 存款
*
* @param money
* 存款金額
* @return 返回賬戶余額
*/
public double depoist(double money) {// money 形式參數(shù)
if (money > 0)
this.accountBalance += money;
return this.accountBalance;
}
/**
* 取款
*
* @param money
* 取款金額
* @return 返回賬戶余額
*/
public abstract double withdraw(double money);
/**
* 轉(zhuǎn)賬
*
* @param anotherAccount
* 轉(zhuǎn)賬的對方賬戶
* @param money
* 轉(zhuǎn)賬金額
* @return 返回當(dāng)前賬戶的余額
*/
public double tranferAccount(Account anotherAccount, double money) {// 形參
anotherAccount.accountBalance += money;
this.accountBalance -= money;
return this.accountBalance;
}
}
之后填寫信用賬戶類CreditAccount;我們應(yīng)該明白,他是繼承Account類的,但是,他又需要擁有自身獨(dú)立的屬性,我們可以添加一個(gè)最高透支額度的屬性
這樣來實(shí)現(xiàn)代碼
/**
* 信用賬戶
*
*
*/
public class CreditAccount extends Account {
//成員變量
private double maxOverdraw;//最高透支額度
//構(gòu)造函數(shù)
public CreditAccount(String accountName,String accountPwd,String accountPersonId,long accountTelno,String accountEmail,double maxOverdraw){
super( accountName, accountPwd, accountPersonId, accountTelno, accountEmail);
this.maxOverdraw = maxOverdraw;
}
//set,get
public void setMaxOverdraw(double maxOverdraw ){
this.maxOverdraw = maxOverdraw;
}
public double getMaxOverdraw(){
return this.maxOverdraw;
}
@Override
public double withdraw(double money) {
// TODO Auto-generated method stub
return 0;
}
}
同理 填寫儲蓄賬戶(SavingAccount)類文件
package com.atm.entity;
/**
* 儲蓄賬戶
*
*
*/
public class SavingAccount extends Account {
public SavingAccount(String accountName,String accountPwd,String accountPersonId,long accountTelno,String accountEmail){
super( accountName, accountPwd, accountPersonId, accountTelno, accountEmail);
}
@Override
public double withdraw(double money) {
// TODO Auto-generated method stub
if(money <= getAccountBalance()){
}
else
System.out.println("賬戶余額不足");
return getAccountBalance();
}
}
最重要的是填寫B(tài)ank類的內(nèi)容,在這個(gè)類中,我們要完成注冊,產(chǎn)生銀行賬戶,統(tǒng)計(jì)所有信用賬戶的最高透支額度的總和,統(tǒng)計(jì)所有賬戶的總余額, 查詢出所有信用賬戶中透支額度最高的賬戶, 查詢出所有儲蓄賬戶中余額最高的賬戶等功能
我們這樣填寫
package com.atm.entity;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 銀行類
*
* @author qianghj
*
* 銀行開戶 ----> 銀行賬戶 Account account = bank.開戶(...)
*
*/
public class Bank {
public Account[] accArray = new Account[2000];
public int count = 0;// 表示銀行賬戶的個(gè)數(shù)
/**
* 銀行賬戶開戶
*
* @param accName
* 用戶名稱
* @param accPwd
* 用戶密碼
* @param accPersonId
* 用戶身份證
* @param accTelno
* 用戶手機(jī)號碼
* @param accEmail
* 用戶郵箱
* @param accountType
* 賬戶類型 0: 儲蓄賬戶 1 : 信用賬戶
* @param maxOverdraw
* 信用賬戶的最高透支額度
* @return 返回有效的銀行賬戶
*/
public Account registAccount(String accName, String accPwd, String accPersonId, long accTelno, String accEmail,
int accountType, double maxOverdraw) {
Account account = null;
if (accountType == 0)
account = new SavingAccount(accName, accPwd, accPersonId, accTelno, accEmail);
else
account = new CreditAccount(accName, accPwd, accPersonId, accTelno, accEmail, maxOverdraw);
account.setAccountId(generateNextAccountId());
accArray[count++] = account;
return account;
}
/**
* 產(chǎn)生銀行賬戶帳號
*
* @return 返回下一個(gè)賬戶的帳號 1,2,3,,4
*/
public String generateNextAccountId() {
return "62223421" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
}
// 統(tǒng)計(jì)所有信用賬戶的最高透支額度的總和 (1050 ) 2000 , 1050
public double statisticsCreditAccountMaxoverdrawSum() {
double sum = 0;
for (int i = 0; i < count; i++) {
// 判斷賬戶 是不是 CreditAccount類型
if (accArray[i] instanceof CreditAccount) {
CreditAccount creditAcc = (CreditAccount) accArray[i];
sum += creditAcc.getMaxOverdraw();
}
}
return sum;
}
// 統(tǒng)計(jì)所有賬戶的總余額
public double aggregateAamount() {
double sum = 0;
for (int i = 0; i < count; i++) {
if (accArray[i] instanceof SavingAccount) {
SavingAccount savingAccount = (SavingAccount) accArray[i];
sum += savingAccount.getAccountBalance();
}
}
return sum;
}
// 查詢出所有信用賬戶中透支額度最高的賬戶
public double maxLimit() {
double tem = 0;
for (int i = 0; i < count; i++) {
if (accArray[i] instanceof CreditAccount) {
CreditAccount creditAccount = (CreditAccount) accArray[i];
if (creditAccount.getMaxOverdraw() > tem) {
tem = creditAccount.getMaxOverdraw();
}
}
}
return tem;
}
// 查詢出所有儲蓄賬戶中余額最高的賬戶
public double maxBalance() {
double tem = 0;
for (int i = 0; i < count; i++) {
if (accArray[i] instanceof SavingAccount) {
SavingAccount savingAccount = (SavingAccount) accArray[i];
if (savingAccount.getAccountBalance() > tem) {
tem = savingAccount.getAccountBalance();
}
}
}
return tem;
}
}
最后測試類
package test;
import org.junit.Test;
import com.atm.entity.Account;
import com.atm.entity.Bank;
import com.atm.entity.CreditAccount;
public class TestAccount {
@Test
public void testRegist() {
Bank bank = new Bank();
for (int i = 0; i < 1000; i++) {
// 0: 儲蓄賬戶 1 : 信用賬戶
Account acc = bank.registAccount("tom" + i, "abc123", "2729382932", 183923302L, "tom" + i + "@163.com",
i % 2, (i % 2 == 0) ? 0 : 3000);
if (i % 2 != 0) {
CreditAccount creditAcc = (CreditAccount) acc;
System.out.println("所有信用賬戶的名字:" + creditAcc.getAccountName() + "和透支額度:" + creditAcc.getMaxOverdraw());
}
}
// 1000個(gè)銀行賬戶開戶,500是信用賬戶,最高透支額度隨機(jī)數(shù)賦值,再測試
// double sum = bank.統(tǒng)計(jì)所有信用賬戶的最高透支額度的總和 ();
double sum = bank.statisticsCreditAccountMaxoverdrawSum();
System.out.println("所有信用賬戶的最高透支額度的總和 :" + sum);
double sum1 = bank.aggregateAamount();
System.out.println("總余額為" + sum1);
}
}
測試類的內(nèi)容不多寫,大家有興趣可以自行測試。這樣,我們就完成了一個(gè)比較簡單的ATM項(xiàng)目。希望對新學(xué)者有所幫助。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Jmeter命令行執(zhí)行腳本如何設(shè)置動(dòng)態(tài)參數(shù)
這篇文章主要介紹了Jmeter命令行執(zhí)行腳本如何設(shè)置動(dòng)態(tài)參數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java簡單使用EasyExcel操作讀寫excel的步驟與要點(diǎn)
相信現(xiàn)在很多搞后端的同學(xué)大部分做的都是后臺管理系統(tǒng),那么管理系統(tǒng)就肯定免不了Excel的導(dǎo)出導(dǎo)入功能,下面這篇文章主要給大家介紹了關(guān)于Java簡單使用EasyExcel操作讀寫excel的步驟與要點(diǎn),需要的朋友可以參考下2022-09-09
在IntelliJ IDEA 搭建springmvc項(xiàng)目配置debug的教程詳解
這篇文章主要介紹了在IntelliJ IDEA 搭建springmvc項(xiàng)目配置debug的教程詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
Nacos客戶端配置中心緩存動(dòng)態(tài)更新實(shí)現(xiàn)源碼
這篇文章主要為大家介紹了Nacos客戶端配置中心緩存動(dòng)態(tài)更新實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-03-03
Mybatis報(bào)錯(cuò)mapkey is required問題及解決
這篇文章主要介紹了Mybatis報(bào)錯(cuò)mapkey is required問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
一文探索Apache HttpClient如何設(shè)定超時(shí)時(shí)間
Apache HttpClient是一個(gè)流行的Java庫,用于發(fā)送HTTP請求,這篇文章主要為大家介紹了Apache HttpClient如何設(shè)定超時(shí)時(shí)間,感興趣的小伙伴可以學(xué)習(xí)一下2023-10-10
SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot中發(fā)送QQ郵件功能的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02

