- ATM柜员机的主要功能如下:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统等登录ATM柜员机系统,用户可以按照一下规则进行。
- 查询余额:初始余额为10000元
- ATM取款:每次取款金额为100的倍数,总金额不超过5000元,支取金额不允许透支。
- ATM存款:不能出现负存款。
- 修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
准备工作
- 开发工具:IntelliJ IDEA 2021.2.1
- 运行环境:Windows 10
- 环境配置:JDK1.8.0_152
- 项目介绍:项目名为Bank_ATM,src文件夹中存在model、myControl、ui三个包名。model包中包含Account账户实体类、IAccount账户操作的接口类以及AccountImpl账户操作的接口实现类。myControl包中包含了MyFrame、MyPanel、MyButton、MyLabel、MyTextFile和MyPwdFiled六个封装起来的自定义控件模块。ui包中包含了Copyright_UI版权页、Login_UI登录界面、Menu_UI菜单界面、SelectMoney_UI余额查询界面、TakeMoney_UI取款界面、SaveMoney_UI存款界面、UpdatePwd_UI更改密码界面以及Test测试类。
Account 账户实体类
package model;
/**
* 账户实体类
*/
public class Account {
private String user_Id;
private String user_Pwd;
private int money;
public Account(){
user_Id="123456";
user_Pwd="123456";
money=10000;
}
public String getUser_Id() {
return user_Id;
}
public void setUser_Id(String user_Id) {
this.user_Id = user_Id;
}
public String getUser_Pwd() {
return user_Pwd;
}
public void setUser_Pwd(String user_Pwd) {
this.user_Pwd = user_Pwd;
}
public int getMoney() {
return money;
}
public int setMoney(int money) {
this.money = money;
return money;
}
}
IAccount 账户接口
package model;
/**
* 账户操作的接口类
*/
public interface IAccount {
/**
* 判断用户登录
* @param id
* @param pwd
*/
public boolean login(String id, String pwd);
/**
* 查询卡号
* @return
*/
public String selectId();
/**
* 查询密码
* @return
*/
public String selectPwd();
/**
* 查询余额
* @return
*/
public int selectMoney();
/**
* 取款
* @param m
* @return
*/
public int takeMoney(int m);
/**
* 存款
* @param m
* @return
*/
public int saveMoney(int m);
/**
* 验证存款的金额
* @return
*/
public boolean checkAddMoney(int m);
/**
* 验证取款的金额
* @return
*/
public boolean checkSubMoney(int m);
/**
* 更改密码
* @param oldPwd
* @param newPwd
* @param rePwd
* @return
*/
public boolean checkPwd(String oldPwd, String newPwd, String rePwd);
}
AccountImpl 账户接口实现类
package model;
/**
* 账户接口实现类
*/
public class AccountImpl implements IAccount {
public static Account account = new Account();
/**
* 判断用户登录
* @param id
* @param pwd
*/
@Override
public boolean login(String id, String pwd){
if(account.getUser_Id().equals(id)&&account.getUser_Pwd().equals(pwd)){
System.out.println("登录成功!");
return true;
}else{
System.out.println("用户名或密码有误!");
return false;
}
}
/**
* 查询卡号
* @return
*/
@Override
public String selectId() {
return account.getUser_Id();
}
/**
* 查询密码
* @return
*/
@Override
public String selectPwd(){
return account.getUser_Pwd();
}
/**
* 查询余额
* @return
*/
@Override
public int selectMoney() {
return account.getMoney();
}
/**
* 取款
* @param m
* @return
*/
@Override
public int takeMoney(int m){
int a = account.setMoney(account.getMoney() - m);
System.out.println("取款成功!-" + m + "\t\t余额:" + account.getMoney());
return a;
}
/**
* 存款
* @param m
* @return
*/
@Override
public int saveMoney(int m){
int a = account.setMoney(account.getMoney() + m);
System.out.println("存款成功!+" + m + "\t\t余额:" + account.getMoney());
return a;
}
/**
* 验证存款取款金额
* @return
*/
@Override
public boolean checkAddMoney(int m){
if (m < 0) {
System.out.println("存入金额不能为负数!");
return false;
} else{
return true;
}
}
/**
* 验证存款取款金额
* @return
*/
@Override
public boolean checkSubMoney(int m){
if (m < 0) {
System.out.println("取出金额不能为负数!");
return false;
}else {
if (m > account.getMoney()) {
System.out.println("余额不足,请重试!");
return false;
}else{
if (m > 5000){
System.out.println("取款金额必须小于等于5000!");
return false;
}
else{
if (m % 100 != 0){
System.out.println("取款金额必须为100的倍数!");
return false;
}else{
System.out.println("取款金额验证成功!");
return true;
}
}
}
}
}
/**
* 更改密码
* @param oldPwd
* @param newPwd
* @param rePwd
* @return
*/
@Override
public boolean checkPwd(String oldPwd, String newPwd, String rePwd){
if(account.getUser_Pwd().equals(oldPwd)){
if(newPwd.equals("")||newPwd.equals(oldPwd)) {
System.out.println("新密码不能和原密码相同或新密码不能为空!");
return false;
} else {
if (newPwd.length() != 6) {
System.out.println("新密码长度必须为6位!");
return false;
} else {
String[] pwdArray = newPwd.split("");
int count = 0;
for (int i = 0; i < pwdArray.length; i++) {
if (pwdArray[0].equals(pwdArray[i])) {
count++;
}
}
if (count == 6) {
System.out.println("新密码6位数必须不一样!");
return false;
} else {
if(newPwd.equals(rePwd)){
account.setUser_Pwd(newPwd);
System.out.println("成功更改密码! \t新密码为:" + account.getUser_Pwd());
return true;
}else {
System.out.println("密码与第一次输入不相同,请重新输入!");
return false;
}
}
}
}
} else{
System.out.println("原密码错误!");
return false;
}
}
}
以下几个类是方便创建GUI组件,自定义的几个自定义控件类(MyFrame、MyPanel、MyButton、MyLabel、MyTextFile和MyPwdFiled)
package myControl;
import javax.swing.