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项目。希望对新学者有所帮助。

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

(0)

相关推荐

  • java实现ATM取款项目

    项目要求: 1.用户需要从控制台输入账号密码,账号或者密码不正确报异常 2.每日取款的金额有限制(100,30000),否则报异常 3.每次取款都要有记录,并在下一次取款时显示出来 思路: 1.先在"银行类"里生成一些用户(跳过了注册环节) 2.可使用List集合存储取款日志 3.可使用Map集合将"用户名"和对应的用户信息建立"键值关系" 4.使用while循环控制流程 项目实现代码: 管理类(含main方法): import java.uti

  • java模拟ATM功能(控制台连接Mysql数据库)

    本文实例为大家分享了java模拟ATM功能的具体代码,供大家参考,具体内容如下 有三个类:Test.java.Customer.java.CustomerDAO.java.ATMSystem.java ATMSystem.java实现模拟ATM的功能 Customer.java创建一个用户对象 CustomerDAO.java实现连接数据库 Test为主程序 ATMSystem.java: package ATM; import java.util.Scanner; public class A

  • java编写简单的ATM存取系统

    新手练手必备~ 密码账户为: 先创建账户类: 复制代码 代码如下: package cn.Atm; /** * @author 偶my耶 */ import java.io.*; import com.project.project; public class Account {   private String number=null;   private String name=null;   private String password=null;   private double mo

  • Java实现ATM取款机程序

    本文实例为大家分享了Java实现ATM取款机程序的具体代码,供大家参考,具体内容如下 对象说明: 功能:该程序的功能为实现模拟银行ATM自动取款机取款,存款,查询余额,转账等功能,只是完成了基本的功能. 思路:第一.登录判断,密码限制三次,使用for循环.第二.成功登录,选择相应的功能,使用switch语句.第四.实现功能的反复循环操作,因为次数不确定,使用while结构.第五.对每个功能模块进行填充完善. 代码展示: import java.util.Scanner; public class

  • Java实现银行ATM系统

    用Java模拟一个银行ATM系统,供大家参考,具体内容如下 系统功能介绍: 使用面向对象的编程思想,尽可能模拟真实世界中的银行ATM业务流程. main方法里通过调用一行代码,完成整个业务流程的顺序调用. 加入了身份证号,手机号等元素,虽然他们不涉及银行卡的业务处理,但它们是真实世界中办理银行卡的必需条件,这些在代码中也有所体现. 为了尽可能使得随机生成的身份证号码和手机号码和银行卡号切合实际,还手动设计了一个工具类,用来生成随机的号码. 其中涉及到的知识,包括但不限于static修饰符的使用,

  • Java项目实现模拟ATM机

    本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { //模拟多功能ATM机 public static void main(String[] args) { ATM atm = new ATM(); atm.opearte(); } } 主类:实现主方法 public class ATM { private Bank bank; public ATM()

  • java实现简单的ATM项目

    本文实例为大家分享了java实现简单的ATM项目的具体代码,供大家参考,具体内容如下 首先要了解的是,这个ATM项目本身是一个轻量级的项目,只为了完成一些ATM具备的一些方法,并非是真正完成一个ATM的全部功能和需求 那么在这个轻量级的ATM项目中,我将完成添加储蓄账号,添加信用账户,提款,取款等基本功能. 适合新手查看,需要掌握java的继承,多态,封装等基本技术能力 那么,首先创建如下的对象类:Account(账户类),Bank(银行类),CreditAccount(信用账户),Saving

  • Java实现简单银行ATM功能

    本文实例为大家分享了Java实现简单银行ATM功能的具体代码,供大家参考,具体内容如下 实现功能 1.用户需要通过输入银行卡号和密码才能进入ATM系统 2.用户可以在ATM中实现取款.存款.转账.余额查询.退出系统等功能 简单分析 1.创建User类(cardNo,identity,phone,username,password,balance(余额)) 2.创建Bank类,主要实现初始化用户.用户登录.显示菜单.取款.存款.转账.余额查询.退出系统等功能. 代码实现 User.java pub

  • java实现简单银行ATM系统

    本文实例为大家分享了java实现简单银行ATM系统的具体代码,供大家参考,具体内容如下 #ATM系统 ##功能 模拟银行ATM机系统,具有注册.登录功能用户登录后可实现以下功能:1)存款 2)取款 3)转账 4)查询 5)退出 ##设计思路 首先,要进行ATM机操作应该具有银行卡和ATM,所以我们要设计一个ATM类和Bankcard类,ATM具有存取款等操作,Bankcard用来记录用户存取款等操作后的越,其次因为ATM同时为多个用户服务,所以我们应该识别每张卡,这里增加一个Bank类来记录银行

  • java实现简单学生管理系统项目

    本文实例为大家分享了java实现简单学生管理系统的具体代码,供大家参考,具体内容如下 功能: 1.增加学生 2.查看学生 3.根据学号修改学生信息 4.根据学号查看某一个学生信息 5.根据性别查看同性别的所有学生 6.根据学号删除某一个学生 7.按照学号升序排序(默认) 8.按照年龄降序排序 Student 类- - -学生的javabean类 package com.studentByArray.www; public class Student { //定义一个Student类{学号.姓名.

  • 用Java实现简单ATM机功能

    本文实例为大家分享了Java实现简单ATM机功能的具体代码,供大家参考,具体内容如下 项目介绍 基于大家使用银行卡在ATM机取款操作,进行相对应ATM机操作流程的实现. 项目功能 1.注册功能: 根据用户输入的账号密码申请一张银行卡,存储在银行卡类型的数组中(一张银行卡对应一个有效用户). 2.登录功能: 登陆失败:重新登陆 或 注册登陆成功:对登陆的这张银行卡可以进行一下操作:存款.取款.查余额.转账.退卡功能. 项目知识点 3.java基本语法的使用4.一维数组5.函数调用,封装6.Java

  • Java实现简单控制台版ATM系统

    本文实例为大家分享了Java实现简单控制台版ATM系统的具体代码,供大家参考,具体内容如下 ATM系统项目 ATM系统要实现的功能 1.查询:账号必须存在,密码(三次机会,不对就锁卡) 2.取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款 3.存款:账号必须存在,存款金额不能低于0 4.转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额 5.锁卡:账号必须存在,使用密码冻结 6.解卡:账号必须存在,只能使用身份证号进行解锁 7.补卡:使用

  • JAVAWEB实现简单的商城项目(一)实例代码解析

     一.项目功能结构 1.功能 2.实体 3.对应sql语句 CREATE DATABASE shop; use shop; create table user( id int(11) primary key auto_increment, username varchar(100), password varchar(100), nickname varchar(100), type int(5) ); INSERT INTO user VALUES (null,'admin','7946521

  • Java Servlet简单实例分享(文件上传下载demo)

    项目结构 src com servletdemo DownloadServlet.java ShowServlet.java UploadServlet.java WebContent jsp servlet download.html fileupload.jsp input.jsp WEB-INF lib commons-fileupload-1.3.1.jar commons-io-2.4.jar 1.简单实例 ShowServlet.java package com.servletdem

  • JAVA实现简单抢红包算法(模拟真实抢红包)

    闲来无事,最近项目需求要写出用户登录首页来发现金红包,没有限额.我就自己稍微计算了一下如果有限额该怎么写.觉得这样与微信红包差不多.等项目需求完成以后.正好来博客贴一下我自己写的拆红包算法.个人觉得这个算法比较模拟现实抢红包规则.废话少说.先贴代码; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.ut

随机推荐