用java完成一个简单的ATM项目
来源:互联网 发布:爱淘宝买东西如何返利 编辑:程序博客网 时间:2024/05/01 00:01
首先要了解的是,这个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,getpublic void setMaxOverdraw(double maxOverdraw ){this.maxOverdraw = maxOverdraw;}public double getMaxOverdraw(){return this.maxOverdraw;}@Overridepublic double withdraw(double money) {// TODO Auto-generated method stubreturn 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);}@Overridepublic double withdraw(double money) {// TODO Auto-generated method stubif(money <= getAccountBalance()){}elseSystem.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);elseaccount = 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 , 1050public 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 {@Testpublic 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项目。希望对新学者有所帮助
阅读全文
1 0
- 用java完成一个简单的ATM项目
- java简单项目atm机
- 一个用java模拟ATM操作的小程序
- JAVA项目----ATM的实现功能
- java ATM简单编写
- 用Ajax完成一个简单的验证
- 用Scroller完成一个简单的ViewPager
- 使用java完成一个简单的播放器的制作
- 【代码】一个简单的ATM提款机的DOS操作系统
- 简单的ATM系统
- 简单Atm系统JAVA代码
- 0728 Java循环语句练习-简单的ATM取款
- 用Gradle建立一个简单的java项目
- Maven构建一个简单的Java项目
- 一个简单的java web 项目
- 生成一个简单的Java项目
- 一个简单的Java Web项目
- 用spring+springMvc完成的一个简单的登陆实例
- API Demos(5).content.TextUndoActivity
- rabbitmq 简单使用
- [Leetcode从零开刷]476. Number Complement
- 金融安全资讯精选 2017年第十八期:4个月内P2P网贷企业信息安全未合规将被取缔,全球100起重大投融资看未来网络安全发展热点,Gartner2017年安全投入以及人员投入占比相关数据
- Handler消息处理机制
- 用java完成一个简单的ATM项目
- VS编译环境命令窗口中的命令
- 用eclipse写Python,当其交互式程序时交互方法
- HIVE STORED&Row format(四)
- 找工作的辛苦历程-互联网篇
- 使用jquery在页面上加sidebox
- java ++i, i++,--i ,i--区别
- logstic回归损失函数及梯度下降公式推导
- 关于ViewDragHelper动态addview的问题