模拟ATM系统 —— 用户存款、取款、转账、修改密码和销户功能
接着上一篇:
5.用户存款功能
分析:
*存款就是拿到当前账户对象
*然后让用户输入存款的金额
*调用账户对象的setMoney方法将账户余额修改成存钱后的余额
*存款后需要查询当前账户信息,确认是否存钱成功
把实现存款功能定义成一个独立的方法:depositMoney(acc,sc);
/**
* 存款
* @param acc 当前账户对象
* @param sc 扫描器
*/
private static void depositMoney(Account acc, Scanner sc) {
System.out.println("================用户存款操作=======================");
System.out.println("请您输入存款金额:");
double money = sc.nextDouble();
//更新账户余额:原来 + 存款
acc.setMoney(acc.getMoney() + money);
System.out.println("存款成功!当前账户信息如下:");
showAccount(acc);
}
6.用户取款功能
分析:
*取款需要先判断账户是否有余额
*有余额则拿到自己账户对象
*然后让用户输入取款金额
*判断取款金额是否超过了每次限额,已经余额是否足够
*满足要求则调用账户对象的setMoney方法完成金额的修改
/**
* 取款
* @param acc 当前账户对象
* @param sc 扫描器
*/
private static void drawMoney(Account acc, Scanner sc) {
System.out.println("================用户取款操作=======================");
//1、判断是否足够100元
if (acc.getMoney() < 100){
System.out.println("对不起,您当前账户的余额不足100元,不能取款!");
return; //跳出取款方法
}
//2、提示用户输入取款金额
System.out.println("请您输入取款金额:");
double money = sc.nextDouble();
//3、判断这个金额是否满足要求
if (money > acc.getQuotaMoney()){
System.out.println("对不起,您当前取款金额超过了每次限额,每次最多可取:"+acc.getQuotaMoney());
}else {
//没有超过限额
//4、判断是否超过当前账户的余额
if (money > acc.getMoney()){
System.out.println("对不起,您当前取款金额超过了总余额,您的总余额是:"+acc.getMoney());
}else {
//可以取款
System.out.println("恭喜您,取款"+money+"元,成功!");
//更新余额
acc.setMoney(acc.getMoney() - money);
//取款结束
showAccount(acc);
return; //跳出取款方法
}
}
}
7.用户转账功能
分析:
*转账功能需要判断系统中是否有2个账户对象及以上
*同时还要判断自己当前账户是否有余额
*接下来输入对方卡号,判断对方卡号是否存在
*对方账户还需要认证对方户主的姓氏
*满足要求则可以把自己账户对象的金额修改到对方账户对象中去
把实现转账功能定义成一个独立的方法:transferMoney(sc,acc,accounts);
/**
* 转账功能
* @param sc 扫描器
* @param acc 自己的账户对象
* @param accounts 全部账户集合
*/
private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("================用户转账操作=======================");
//1、是否有2个账户
if (accounts.size() < 2){
System.out.println("当前系统中,不足2个账户,请先去开户!");
return; // 退出转账方法
}
//2、判断自己当前账户是否有余额
if (acc.getMoney() == 0){
System.out.println("对不起,您没有余额,不能转账!!");
return; // 退出转账方法
}
while (true) {
//3、真正开始转账
System.out.println("请您输入对方账户的卡号:");
String cardId = sc.next();
//卡号不能是自己的卡号
if (cardId.equals(acc.getCarId())){
System.out.println("对不起,您不能给自己账户进行转账!!");
continue; //结束当次执行
}
//判断卡号是否存在,根据卡号去查询对方账户对象
Account account = getAccountByCardId(cardId, accounts);
if (account == null){
System.out.println("对不起,您输入的对方账户不存在!");
}else {
//这个账户对象存在,继续认证姓氏
String userName = account.getUserName(); //阳阳 从第二位开始截取,不能用替换
String tip = "*" + userName.substring(1);
System.out.println("请您输入【"+tip+"】的姓氏");
String preName = sc.next();
//认证姓氏是否输入正确
if (userName.startsWith(preName)){ //姓氏是否以preName开头
//认证通过,正式开始转账
while (true) {
System.out.println("请输入转账金额:");
double money = sc.nextDouble();
//判断余额舒服足够
if (money > acc.getMoney()){
System.out.println("对不起,您的余额不足,最多可以转账:"+acc.getMoney());
}else {
//余额足够,可以转账
acc.setMoney(acc.getMoney() - money);
account.setMoney(account.getMoney() + money);
System.out.println("转账成功!您的余额为:"+acc.getMoney());
return; //跳出转账方法
}
}
}else {
System.out.println("对不起,您输入的姓氏有误!");
}
}
}
}
8.用户修改密码、注销账号功能
分析:
*修改密码就是当前对象的密码属性使用set方法进行更新
*销户就是从集合对象中删除当前对象,并且回到首页
把修改密码功能定义成一个独立的方法:updatePassWord(sc,acc);
在销户过程中,为了更严谨要询问用户是否确定销户,所以把销户功能也定义成一个方法:deleteAccount(acc,sc,accounts);
/**
* 注销账户功能
* @param acc 当前账户对象
* @param sc 扫描器
* @param accounts 全部账户集合
*/
private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> accounts) {
System.out.println("================用户销户操作=======================");
System.out.println("您真的要销户吗? y/n");
String re = sc.next();
switch (re){
case "y":
//真正销户
//从当前账户集合中,删除当前账户对象,注销就完成了
if (acc.getMoney() > 0){
System.out.println("您的账户还有余额,不允许销户!!");
}else {
accounts.remove(acc);
System.out.println("您的账户销户成功!");
return true; //销户成功
}
break;
default:
System.out.println("好的,您的账户继续保留!");
}
return false; //继续保留
}
/**
* 修改密码
* @param sc 扫描器
* @param acc 当前登录成功的账户对象
*/
private static void updatePassWord(Scanner sc, Account acc) {
System.out.println("================用户修改密码操作=======================");
while (true) {
System.out.println("请输入当前账户的密码:");
String passWord = sc.next();
//1、判断密码是否正确
if (acc.getPassWord().equals(passWord)){
while (true) {
//密码正确
//2、输入新密码
System.out.println("请您输入新密码:");
String newPassword = sc.next();
System.out.println("请您输入确认密码:");
String okPassword = sc.next();
if (newPassword.equals(okPassword)) {
//两次密码输入正确
acc.setPassWord(newPassword);
System.out.println("恭喜您,您的密码修改成功!");
return; // 跳出该方法
}else {
System.out.println("对不起,您输入的2次密码不一致!");
}
}
}else {
System.out.println("您输入的密码不正确!");
}
}
}

浙公网安备 33010602011771号