Java ATM系统
LIiuxb 人气:0一.业务分析
通过使用Java面向对象的基础知识,开发一个ATM系统,实现存款,取款,转账,修改密码,注销账户等功能。
二.开发准备
首先,创建一个用户类,为建立用户对象做准备,用户类主要包括用户卡号(系统随机生成),用户名,账户密码,余额,取现额度。并搭建构造器,以及get,set。
public class user { private String cardId ; //卡号 private String username; //用户名 private String password; //密码 private double money; //余额 private double qumoney; //取现额度 public user(String cardId, String username, String password, double qumoney) { this.cardId = cardId; this.username = username; this.password = password; this.qumoney = qumoney; } public user() { } public String getCardId() { return cardId; } public void setCardId(String cardId) { this.cardId = cardId; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } 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 getQumoney() { return qumoney; } public void setQumoney(double qumoney) { this.qumoney = qumoney; } }
三.创建测试类,写入main方法
public class ATMSystem { public static void main(String[] args) { ArrayList<user> users = new ArrayList<>(); Main(users); }
四.将主界面设置成Main方法,设计主界面,包括登录账户,注册账户,并且设置登录方法,注册方法,再调用。
public static void Main(ArrayList<user> users) { System.out.println("==========欢迎进入xx银行ATM系统=========="); while (true) { System.out.println("请选择操作:"); System.out.println("1.登录账户"); System.out.println("2.注册账户"); Scanner sc = new Scanner(System.in); int command = sc.nextInt(); switch (command) { case 1: //登录 denglu(users, sc); break; case 2: //注册 zhuce(users, sc); break; default: System.out.println("功能不存在!"); } } }
运行结果:
五.将注册账户写成方法
public static void zhuce(ArrayList<user> users, Scanner sc) { System.out.println("==========注册账户=========="); String password = ""; String password2 = ""; System.out.println("请输入您的账号名称:"); sc = new Scanner(System.in); String name = sc.next(); while (true) { System.out.println("请输入您的账号密码:"); password = sc.next(); System.out.println("请您再次输入密码:"); password2 = sc.next(); if (password2.equals(password)) { break; } else { System.out.println("两次密码输入不一致!,请重新输入"); } } //生成卡号 System.out.println("请输入账号当次限额"); double qumoney = sc.nextDouble(); String cardId = kahao(users); user u1 = new user(cardId, name, password, qumoney); users.add(u1); System.out.println("恭喜开户成功!,您的卡号是" + u1.getCardId() + ",请您保管"); }
其中,涉及到生成卡号,以及查询系统生成的卡号是否相同,需要再写两个方法:
//生成卡号 public static String kahao(ArrayList<user> users) { while (true) { Random rs = new Random(); String cardId = ""; for (int i = 0; i < 8; i++) { cardId += rs.nextInt(10); } user a = getcardId(cardId, users); if (a == null) { //无重复 return cardId; } } }
//查询卡号 public static user getcardId(String kahao, ArrayList<user> users) { for (int i = 0; i < users.size(); i++) { user a = users.get(i); if (a.getCardId().equals(kahao)) { return a; } } return null; }
六.将登录账户写成方法,并设计主界面
public static void denglu(ArrayList<user> users, Scanner sc) { System.out.println("==========登录账户=========="); if (users.size() == 0) { System.out.println("系统中无账户!请先注册"); return; } while (true) { System.out.println("请输入您的卡号:"); String cardId = sc.next(); String password = ""; user acc = getcardId(cardId, users); if (acc != null) { while (true) { System.out.println("请输入您的密码:"); password = sc.next(); //判断密码是否正确 if (acc.getPassword().equals(password)) { System.out.println("登录成功!,欢迎卡号" + acc.getCardId() + "的贵宾" + acc.getUsername() + "进入系统"); //展示系统登录后的操作界面 jiemian(sc, acc, users); return; } else { System.out.println("密码错误!请重新输入"); } } } else { System.out.println("不存在该卡号!"); } } }
六.1编写 展示主界面方法
public static void jiemian(Scanner sc, user acc, ArrayList<user> users) { while (true) { System.out.println("==========欢迎进入xx银行用户操作界面==========="); 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.注销当前账户"); sc = new Scanner(System.in); int commend = sc.nextInt(); switch (commend) { case 1: atm1(acc); break; case 2: atm2(acc, sc); break; case 3: atm3(acc, sc); break; case 4: atm4(users, acc, sc); break; case 5: atm5(acc, sc); return; case 6: System.out.println("欢迎下次来到ATM系统"); return; case 7: System.out.println("是否确认注销账户?按1确认,按2取消注销"); int tf = sc.nextInt(); if (tf == 1) { users.remove(acc); System.out.println("注销成功!"); return; } else { System.out.println("取消注销"); break; } default: System.out.println("不存在该功能!"); } } }
七.接下来,依次编写各个功能的方法
//查询功能 private static void atm1(user acc) { System.out.println("========当前账户详情========="); System.out.println("卡号:" + acc.getCardId()); System.out.println("姓名:" + acc.getUsername()); System.out.println("余额:" + acc.getMoney()); System.out.println("当次取款限额:" + acc.getQumoney()); } //存款功能 private static void atm2(user acc, Scanner sc) { System.out.println("=========存款操作========="); System.out.println("请您输入存款金额:"); double money = sc.nextDouble(); acc.setMoney(acc.getMoney() + money); System.out.println("存款成功!"); atm1(acc); } //取款 private static void atm3(user acc, Scanner sc) { System.out.println("=========取款操作========="); if (acc.getMoney() < 100) { System.out.println("您的账户余额不足100元!无法取款"); return; } else { while (true) { System.out.println("请您输入取款金额:"); double money = sc.nextDouble(); if (money > acc.getMoney()) { System.out.println("账户余额不足!"); System.out.println("继续取款按1,退出取款按2"); int commend = sc.nextInt(); switch (commend) { case 1: break; case 2: return; } } else if (money > acc.getQumoney()) { System.out.println("超过了当次取款限额!,每次最多可以取" + acc.getQumoney() + "元"); } else { System.out.println("取款成功!"); acc.setMoney(acc.getMoney() - money); atm1(acc); return; } } } } //转账 private static void atm4(ArrayList<user> users, user acc, Scanner sc) { System.out.println("=========转账操作========="); //判断系统中是否有两个以上账户 if (users.size() < 2) { System.out.println("系统中无其他账户,不可以转账!"); return; } else { if (acc.getMoney() == 0) { System.out.println("您的账户余额为0,无法转账"); return; } else { while (true) { System.out.println("请输入对方的卡号:"); String dui = sc.next(); user c = getcardId(dui, users); if (c != null) { //判断账户对象是否为自己 if (c.getCardId().equals(acc.getCardId())) { System.out.println("不能给自己转账!"); } else { //确认对方姓氏 String name = "*" + c.getUsername().substring(1); System.out.println("请您确认[" + name + "]的姓氏"); String xingshi = sc.next(); if (c.getUsername().startsWith(xingshi)) { System.out.println("输入正确!"); while (true) { System.out.println("请您输入转账金额:"); double money = sc.nextDouble(); if (money > acc.getMoney()) { System.out.println("余额不足!"); System.out.println("继续转账按1,退出转账按2"); int commend = sc.nextInt(); switch (commend) { case 1: break; case 2: return; } } else { acc.setMoney(acc.getMoney() - money); c.setMoney(c.getMoney() + money); System.out.println("为" + c.getUsername() + "用户" + "转账成功"); atm1(acc); return; } } } else { System.out.println("对不起,您输入的信息有误!"); } } } else { System.out.println("对不起,您输入卡号有误!"); } } } } } //修改密码操作 private static void atm5(user acc, Scanner sc) { System.out.println("=========修改密码操作========="); while (true) { System.out.println("请输入您的旧密码:"); String oldpassword = sc.next(); String newpassword = ""; if (oldpassword.equals(acc.getPassword())) { while (true) { System.out.println("请输入新密码:"); newpassword = sc.next(); if (newpassword.equals(oldpassword)) { System.out.println("新密码不能与旧密码重复!"); } else { System.out.println("请再次输入密码:"); String okpassword = sc.next(); if (newpassword.equals(okpassword)) { System.out.println("修改密码成功!"); acc.setPassword(newpassword); return; } else { System.out.println("两次密码输入不一致!"); } } } } else{ System.out.println("旧密码输入错误!"); } } }
至此,所有功能完成。
加载全部内容