JAVA-案列练习-ATM项目
在JAVA入门学习后进行的项目练习——模拟ATM系统。
目录
1.设计内容和要求
2.代码实现
(1)ATM账号类的定义
(2)ATM类中的操作
(3)操作说明
3.总结
1.设计内容和要求
01 系统架构搭建,欢迎页设计 |
02 开户功能实现 |
03 登录功能实现 |
04 操作页展示,查询账户,退出账户 |
05 存款,取款功能实现 |
06 转账功能实现 |
07 销户功能实现 |
08 用户密码修改 |
2.代码实现
(1)ATM账号类的定义
package ATM;public class Account {private String id;private String name;private char sex;private String password;private double money;private double limit; //限额public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name + (sex == '男'? "先生":"女士");}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public double getLimit() {return limit;}public void setLimit(double limit) {this.limit = limit;}public Account() {}
}
(2)ATM类中的操作
package ATM;import javax.accessibility.AccessibleContext;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class ATM {private ArrayList<Account> list = new ArrayList<>();private Scanner sc= new Scanner(System.in);Account loginacc;private void creatAccount(){System.out.println("==系统开户操作==");Account account = new Account();System.out.println("请您输入您的账户名称");String name = sc.next();account.setName(name);while(true) {System.out.println("请您输入您的性别");char sex = sc.next().charAt(0);if(sex == '男' || sex == '女'){account.setSex(sex);break;}else{System.out.println("输入错误,只能是男或者女");}}while(true) {System.out.println("请您输入您的密码");String password = sc.next();System.out.println("请您确认您的密码");String password1 = sc.next();if(password.equals(password1)){account.setPassword(password);break;}else{System.out.println("您输入的两次密码不相同,请重新输入");}}System.out.println("请您输入每次取款限额");double limit = sc.nextDouble();account.setLimit(limit);//生成一个卡号 8位数字(卡号且不能重复)String id = createCardid();account.setId(id);//list.add(account);System.out.println("恭喜您"+account.getName()+ "开户成功");System.out.println("您的卡号为" + account.getId());return;}private String createCardid(){while(true){String id ="";Random r = new Random();for (int i = 0; i < 8; i++) {int data = r.nextInt(10);id += data;}Account acc = getAccountbyId(id);if(acc == null){ return id;}}}private Account getAccountbyId(String id){for (int i = 0; i < list.size(); i++) {Account acc = list.get(i);if(acc.getId().equals(id)){return acc;}}return null;}private void login(){System.out.println("==系统登录操作==");if(list.size() == 0){System.out.println("系统内无用户 请开户");return;}while(true) {System.out.println("请您输入您的登录卡号");String id = sc.next();Account acc = getAccountbyId(id);if (acc == null) {System.out.println("该卡号不存在");}while(true) {System.out.println("请你输入您的密码");String password = sc.next();if (acc.getPassword().equals(password)) {loginacc = acc;System.out.println("恭喜您," + acc.getName());System.out.println("成功登录系统,您的卡号是"+acc.getId());showUserCommand();return;}else {System.out.println("密码不正确 请确认");}}}}private void showUserCommand(){while(true) {System.out.println(loginacc.getName());System.out.println("==您可以选择如下功能进行账号处理==");System.out.println("== 1.查询账户 ==");System.out.println("== 2.存款 ==");System.out.println("== 3.取款 ==");System.out.println("== 4.转账 ==");System.out.println("== 5.密码修改 ==");System.out.println("== 6.退出 ==");System.out.println("== 7.注销当前账户 ==");System.out.println("=============================");int command = sc.nextInt();switch (command) {case 1:showLoginacc();break;case 2:depositMoney();break;case 3:drawMoney();break;case 4:transferMoney();break;case 5:updatePassword();return;case 6:System.out.println(loginacc.getName()+"您已经成功退出系统");return;case 7:if(deleteAccount()){return;}break;default:System.out.println("操作不存在");}}}private void showLoginacc(){System.out.println("==当前您的账户信息==");System.out.println("卡号:" + loginacc.getId());System.out.println("姓名:" + loginacc.getName());System.out.println("性别:" + loginacc.getSex());System.out.println("余额:" + loginacc.getMoney());System.out.println("取现额度:3"+ loginacc.getLimit());}private void depositMoney(){System.out.println("==存款操作==");System.out.println("请您输入存款金额");double money = sc.nextDouble();loginacc.setMoney(loginacc.getMoney()+money);System.out.println("==存款成功==");}private void transferMoney(){System.out.println("用户转账");if(list.size() < 2){System.out.println("系统中只有一个用户,无法转账");return;}if(loginacc.getMoney() == 0){System.out.println("您账户内余额为0");return;}while(true) {System.out.println("请您输入对方的卡号");String id = sc.next();Account acc = getAccountbyId(id);if (acc == null) {System.out.println("您输入的对方卡号不存在");}else {String name ="*"+acc.getName().substring(1);System.out.println( "请您输入【"+name+"】的姓氏");String prename = sc.next();if(acc.getName().startsWith(prename)){System.out.println("清输入转账金额");double money = sc.nextDouble();if(loginacc.getMoney() >= money){loginacc.setMoney(loginacc.getMoney() - money);acc.setMoney(acc.getMoney() + money);return;}else{System.out.println("余额不足,您的余额为"+loginacc.getMoney());}}else{System.out.println("您认证的姓氏有问题");}}}}private void drawMoney(){System.out.println("==取款操作==");if(loginacc.getMoney() < 100){System.out.println("您的余额不足100 无法取款");return;}while(true) {System.out.println("请您输入取款金额");double money = sc.nextDouble();if (loginacc.getMoney() < money) {System.out.println("余额不足 您账户中的余额为:" + loginacc.getMoney());break;}else {if (money > loginacc.getLimit()) {System.out.println("您当前取款金额超过限额,您每次最多取款" + loginacc.getLimit());break;} else {loginacc.setMoney(loginacc.getMoney() - money);System.out.println("==取款成功==");System.out.println("取款后剩余" + loginacc.getMoney());return;}}}}private boolean deleteAccount(){System.out.println("==销户操作==");System.out.println("请问您确认销户嘛");String command = sc.next();switch (command){case "y":if(loginacc.getMoney() == 0){list.remove(loginacc);System.out.println("您好 您的账户已经成功销户");return true;}else {System.out.println("对不起 您的账户中存在金额 不允许销毁");return false;}default:System.out.println("好的,您的账户保留!!");return false;}}private void updatePassword(){System.out.println("==账号密码修改==");System.out.println("请您输入当前账户密码");String pass = sc.next();if(loginacc.getPassword().equals(pass)){while(true) {System.out.println("请您输入新密码");String newpass = sc.next();System.out.println("请您确认新密码");String newpass1 = sc.next();if (newpass.equals(newpass1)) {loginacc.setPassword(newpass);System.out.println("您的密码修改成功");return;}else {System.out.println("您输入的两次密码不一致");}}}else{System.out.println("密码错误");}}public void start(){while(true){System.out.println("==欢迎您进入到ATM系统==");System.out.println("== 1.用户登录 ==");System.out.println("== 2.用户开户 ==");System.out.println("请选择");int n = sc.nextInt();switch(n){case 1:login();break;case 2:creatAccount(); break;case 0: return;default:System.out.println("输出有误 重新输入");}}}
}
package ATM;public class Text {public static void main(String[] args) {ATM a = new ATM();a.start();}
}
(3)操作说明
3.总结
关于这个案例实际并不复杂,功能的实现和代码思路和C语言学习时是一致的,只是JAVA提供了API,更快捷的实现了一些原本要自己手写的功能。主要还是对于面向对象编程,把功能交给对象自己去完成,以及集合这种存储数据的容器的学习和理解,目前这个案例算是对前面入门的知识一个小的复习。后续就可以进行比较系统深入的学习了。