ATM项目
架构搭建:1.账户类Account(卡号,姓名,性别,密码,余额,取现额度)
2.ATM类(ATM系统欢迎页,开通账户,转账
3.Test类
Account类
package cn.ptz;
public class Account {
private String cardId;
private String userName;
private char sex;
private String passWord;
private double money;
private double limit; // 提现额度
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName + (sex == '男' ? "先生" : "女士");
}
public void setUserName(String userName) {
this.userName = userName;
}
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;
}
}
ATM类
package cn.ptz;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> accounts = new ArrayList<>();
private Scanner sc = new Scanner(System.in); // 给ATM自己用,所以private
private Account loginAcc; // 登陆后的用户
// 启动ATM 欢迎页
public void start(){
while (true) {
System.out.println("===欢迎进入ATM系统===");
System.out.println("1、用户登录");
System.out.println("2、用户开户");
System.out.println("请选择");
int command = sc.nextInt();
switch (command){
case 1:
// 用户登录
login();
break;
case 2:
// 用户开户
createAccount();
break;
default:
System.out.println("输入错误");
System.out.println("-----------------");
}
}
}
// 用户开户 该方法私有,因为只是ATM类自己用
private void createAccount(){
System.out.println("===系统开户操作===");
// 创建对象
Account acc = new Account();
// 输入信息
System.out.println("请输入账户名称");
String name = sc.next();
acc.setUserName(name);
while (true) {
System.out.println("请输入性别");
char sex = sc.next().charAt(0); // 取字符串的第一个字符
if (sex == '男' || sex == '女'){
acc.setSex(sex);
break;
}else {
System.out.println("输入有误,请输入男或女");
}
}
while (true) {
System.out.println("请输入密码");
String passWord = sc.next();
System.out.println("请再次确认密码");
String okPassWord = sc.next();
if (passWord.equals(okPassWord)){
acc.setPassWord(passWord);
break;
}else{
System.out.println("两次密码不一致");
}
}
System.out.println("请输入提现额度");
double limit = sc.nextDouble();
acc.setLimit(limit);
// 自动生成卡号,且卡号不能重复
String newCardId = createCardId();
acc.setCardId(newCardId);
accounts.add(acc);
System.out.println("恭喜您," + acc.getUserName() + "开户成功,您的卡号是 " + acc.getCardId());
}
// 卡号生成
private String createCardId(){
while (true) {
String cardId = "";
Random r = new Random();
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10); // 0-9
cardId += data;
}
// 判断是否重复
Account acc = getAccountByCardId(cardId);
if(acc == null){
// 该卡号还没有账户对象
return cardId;
}
}
}
// 根据卡号查账户对象
private Account getAccountByCardId(String cardId){
// 遍历所有账户对象
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if (cardId.equals(acc.getCardId())){
return acc;
}
}
return null;
}
private void login(){
System.out.println("===系统登陆===");
if (accounts.size() == 0) {
System.out.println("当前系统无账户");
return;
}
while (true) {
System.out.println("请输入登录卡号");
String cardId = sc.next();
Account acc = getAccountByCardId(cardId);
if (acc == null){
System.out.println("卡号不存在");
System.out.println("---------------");
}else {
while (true) {
// 卡号存在
System.out.println("请输入密码");
String passWord = sc.next();
if (acc.getPassWord().equals(passWord)){
// 密码正确
System.out.println(acc.getUserName() + "登录成功," + "卡号是" + acc.getCardId());
// 登录成功
loginAcc = acc;
showUserCommand();
// 退出
return;
}else{
System.out.println("密码错误");
System.out.println("----------------");
}
}
}
}
}
private void showUserCommand(){
while (true) {
System.out.println(loginAcc.getUserName() + ",您可以选择对帐户进行如下功能处理");
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、注销账号");
int command = sc.nextInt();
switch (command){
case 1:
// 查询账户
showLoginAccount();
break;
case 2:
// 存款
depositMoney();
break;
case 3:
// 取款
drawMoney();
break;
case 4:
// 转账
transferMoney();
break;
case 5:
// 修改密码
updataPassWord();
return; // 密码修改后,需要重新登录
case 6:
// 退出
System.out.println(loginAcc.getUserName() + ",您已成功退出");
return;
case 7:
// 注销账户
if(deleteAccount()) {
return;
}
break;
default:
System.out.println("输入有误");
System.out.println("--------------");
}
}
}
// 修改密码
private void updataPassWord() {
System.out.println("===密码修改系统===");
while (true) {
System.out.println("请输入当前账户密码");
String passWord = sc.next();
if (passWord.equals(loginAcc.getPassWord())){
while (true) {
System.out.println("请输入新密码");
String newPassWord = sc.next();
System.out.println("请再次确认密码");
String okPassWord = sc.next();
if (newPassWord.equals(okPassWord)){
loginAcc.setPassWord(newPassWord);
System.out.println("密码修改成功");
return;
}else {
System.out.println("两次密码不一致");
}
}
}else{
System.out.println("输入密码错误");
}
}
}
// 销户
private boolean deleteAccount() {
System.out.println("===销户系统===");
while (true) {
System.out.println("请问是否确认销户?y/n");
String command= sc.next();
switch (command){
case "y":
if(loginAcc.getMoney() == 0){
accounts.remove(loginAcc);
System.out.println("销户成功");
return true;
}else {
System.out.println("当前账户仍有余额,不允许销户");
return false;
}
case "n":
System.out.println("账户保留");
return false;
default:
System.out.println("输入有误");
}
}
}
// 转账
private void transferMoney() {
System.out.println("===转账系统===");
if (accounts.size() < 2){
System.out.println("当前系统仅有一个账户,无法转账");
return;
}
if (loginAcc.getMoney() == 0){
System.out.println("当前账户余额为0");
return;
}
while (true) {
System.out.println("请输入你要转账的账户卡号");
String cardId = sc.next();
Account acc = getAccountByCardId(cardId);
if (acc == null){
System.out.println("没有当前账户");
}else {
String name = "*" + acc.getUserName().substring(1); // 这里没见过,记一下
System.out.println("请输入【" + name + "】的姓氏");
String preName = sc.next();
if (acc.getUserName().startsWith(preName)){
System.out.println("认证通过");
while (true) {
System.out.println("请输入要转账的金额");
double money = sc.nextDouble();
if (money <= loginAcc.getMoney()){
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("===取钱系统===");
// 少于100元不给取
if (loginAcc.getMoney() < 100){
System.out.println("余额不足100,不能取钱");
return;
}
while (true) {
System.out.println("请输入要取的金额:");
double money = sc.nextDouble();
if (loginAcc.getMoney() >= money){
if (money <= loginAcc.getLimit()){
loginAcc.setMoney(loginAcc.getMoney() - money);
System.out.println("取款" + money + "元成功。当前余额:" + loginAcc.getMoney());
break;
}else {
System.out.println("取款金额超过每次提现金额,提现金额是" + loginAcc.getLimit());
}
}else {
System.out.println("余额不足,余额是" + loginAcc.getMoney());
}
}
}
// 存钱
private void depositMoney() {
System.out.println("===存钱系统===");
System.out.println("请输入存款金额:");
double money = sc.nextDouble();
loginAcc.setMoney(loginAcc.getMoney() + money);
System.out.println("存钱" + money + "元,当前余额" + loginAcc.getMoney());
}
// 查询账户
private void showLoginAccount(){
System.out.println("当前账户信息=======");
System.out.println("卡号:" + loginAcc.getCardId());
System.out.println("户主:" + loginAcc.getUserName());
System.out.println("余额:" + loginAcc.getMoney());
System.out.println("每次提现额度:" + loginAcc.getLimit());
}
}
Test类
package cn.ptz;
public class Test {
public static void main(String[] args) {
// 创建ATM对象
ATM atm = new ATM();
atm.start();
}
}