java实现简单的ATM项目

 更新时间:2020年10月27日 17:10:12   作者:wymolin  
这篇文章主要为大家详细介绍了java实现简单的ATM项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现简单的ATM项目的具体代码,供大家参考,具体内容如下

首先要了解的是,这个ATM项目本身是一个轻量级的项目,只为了完成一些ATM具备的一些方法,并非是真正完成一个ATM的全部功能和需求

那么在这个轻量级的ATM项目中,我将完成添加储蓄账号,添加信用账户,提款,取款等基本功能。

适合新手查看,需要掌握java的继承,多态,封装等基本技术能力

那么,首先创建如下的对象类:Account(账户类),Bank(银行类),CreditAccount(信用账户),SavingAccount(储蓄账户类);

大家首先应该搞清楚,这些类文件中之间的关系,每个类之间需要用到什么样的方法;

那么我们先填写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;
 /**
 * 账户联系电话
 */
 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 形式参数
 if (money > 0)
 this.accountBalance += money;
 return this.accountBalance;
 }
 
 /**
 * 取款
 * 
 * @param money
 *  取款金额
 * @return 返回账户余额
 */
 public abstract double withdraw(double money);
 
 /**
 * 转账
 * 
 * @param anotherAccount
 *  转账的对方账户
 * @param money
 *  转账金额
 * @return 返回当前账户的余额
 */
 public double tranferAccount(Account anotherAccount, double money) {// 形参
 anotherAccount.accountBalance += money;
 this.accountBalance -= money;
 
 return this.accountBalance;
 }
 
}

之后填写信用账户类CreditAccount;我们应该明白,他是继承Account类的,但是,他又需要拥有自身独立的属性,我们可以添加一个最高透支额度的属性
这样来实现代码

/**
 * 信用账户
 * 
 *
 */
public class CreditAccount extends Account {
 //成员变量
 private double maxOverdraw;//最高透支额度
 
 //构造函数
 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();
 
 }
 
 
}

最重要的是填写Bank类的内容,在这个类中,我们要完成注册,产生银行账户,统计所有信用账户的最高透支额度的总和,统计所有账户的总余额, 查询出所有信用账户中透支额度最高的账户, 查询出所有储蓄账户中余额最高的账户等功能

我们这样填写

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;// 表示银行账户的个数
 
 /**
 * 银行账户开户
 * 
 * @param accName
 *  用户名称
 * @param accPwd
 *  用户密码
 * @param accPersonId
 *  用户身份证
 * @param accTelno
 *  用户手机号码
 * @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;
 }
 /**
 * 产生银行账户帐号
 * 
 * @return 返回下一个账户的帐号 1,2,3,,4
 */
 public String generateNextAccountId() {
 
 return "62223421" + new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
 
 }
 
 // 统计所有信用账户的最高透支额度的总和 (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;
 }
 
 // 统计所有账户的总余额
 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个银行账户开户,500是信用账户,最高透支额度随机数赋值,再测试
 // double sum = bank.统计所有信用账户的最高透支额度的总和 ();
 double sum = bank.statisticsCreditAccountMaxoverdrawSum();
 System.out.println("所有信用账户的最高透支额度的总和 :" + sum);
 double sum1 = bank.aggregateAamount();
 System.out.println("总余额为" + sum1);
 }
 
}

测试类的内容不多写,大家有兴趣可以自行测试。这样,我们就完成了一个比较简单的ATM项目。希望对新学者有所帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 5亿整数大文件怎么排序

    Java 5亿整数大文件怎么排序

    这篇文章主要介绍了Java 5亿整数大文件怎么排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 详解Java中CAS机制的原理与优缺点

    详解Java中CAS机制的原理与优缺点

    CAS 英文就是 compare and swap ,也就是比较并交换,这篇文章主要来和大家介绍一下Java中CAS机制的原理与优缺点,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Java使用Redis实现秒杀功能

    Java使用Redis实现秒杀功能

    这篇文章主要为大家详细介绍了Java使用Redis实现秒杀功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • JPA @Basic单表查询如何实现大字段懒加载

    JPA @Basic单表查询如何实现大字段懒加载

    这篇文章主要介绍了JPA @Basic单表查询如何实现大字段懒加载的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java基础之集合Set详解

    Java基础之集合Set详解

    这篇文章主要介绍了Java基础之集合Set详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Java Online Exam在线考试系统的实现

    Java Online Exam在线考试系统的实现

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java+springboot+vue+jsp+mysql+maven实现Online Exam在线考试系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • javaweb设计中filter粗粒度权限控制代码示例

    javaweb设计中filter粗粒度权限控制代码示例

    这篇文章主要介绍了javaweb设计中filter粗粒度权限控制代码示例,小编觉得还是挺不错的,需要的朋友可以参考。
    2017-10-10
  • 微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计功能

    微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计功能

    这篇文章主要介绍了微服务 Spring Boot 整合 Redis BitMap 实现 签到与统计功能,文章简单介绍了Redis BitMap 基本用法结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Java序列化机制详解

    Java序列化机制详解

    Java 序列化机制是一种将对象转换为字节流的过程,以便在网络上传输或保存到文件中,并能在需要时将字节流还原为对象,这一机制通过实现 java.io.Serializable 接口来实现,同时涉及到一些关键概念和注意事项,需要的朋友可以参考下
    2023-12-12
  • 关于Java中@SuppressWarnings的正确使用方法

    关于Java中@SuppressWarnings的正确使用方法

    这篇文章主要介绍了关于Java中@SuppressWarnings的正确使用方法,@SuppressWarnings注解主要用在取消一些编译器产生的警告对代码左侧行列的遮挡,有时候这会挡住我们断点调试时打的断点,需要的朋友可以参考下
    2023-05-05

最新评论