java如何实现atm机,java实现atm机
本文实例为大家分享了爪哇实现银行异步传输模式系统的具体代码,供大家参考,具体内容如下
实现步骤:
定义账户类,用于后期创建账户对象封装用户的账户信息。
账户类中的信息至少需要包含(卡号、姓名、密码、余额、取现额度)
需要准备一个数组列表的集合,用于存储系统用户的账户对象。
定义一个系统启动类异步传输模式系统需要展示欢迎页包含注射毒品个功能:开户功能、登录账户。
账户类 Account
封装测试;/*账户类*/public class Account { private String cardId;//卡号私有字符串用户名;//客户名字私有字符串密码;//密码私人双钱;//余额私人双倍报价;//当次限额公众账号(){ }公众账号(字符串cardId,字符串用户名,字符串密码,双引号钱){ this。cardId=cardIdthis .用户名=用户名;this.password=密码;这个。报价钱=报价钱;}公共字符串get cardId(){ return cardId;} public void setCardId(String cardId){ this。cardId=cardId} public double getMoney(){ return money;} public void set money(双钱){ this。钱=钱;} public double getquote money(){ return quote money;} public void setquote money(双引号money){ this。报价钱=报价钱;}公共字符串get password(){返回密码;} public void set password(字符串密码){ this。密码=密码;}公共字符串get userName(){ return userName;} public void set userName(字符串用户名){ this。用户名=用户名;}}
AtmSystem 类
包测试;导入Java。util。ArrayList导入Java。util。随机;导入Java。util。扫描仪;公共类at m system { public static void main(String[]args){//用数组储存账户对象ArrayListAccount accounts=new ArrayList();//首页:登录开户showMain(账户);} public static void show main(ArrayListAccount accounts){ system。出去。println(==============欢迎进入首页界面===============);扫描仪sc=新扫描仪(系统。在);while (true){ System.out.println(请输入您想要进行的操作:);System.out.println(1 .登录);System.out.println(2 .开户);System.out.println(您可以输入命令了:);int命令=sc。nextint();开关(命令){ case 1: //登录
login(accounts,sc); break; case 2: //开户 register(accounts,sc); break; default: System.out.println("您的输入有误!"); } } }// 键盘录入姓名、密码、确认密码(需保证两次密码一致)//// 生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一)//// 创建Account账户类对象用于封装账户信息(姓名、密码、卡号)//// 把Account账户类对象存入到集合accounts中去。 public static void register(ArrayList<Account> accounts,Scanner sc){ System.out.println("===============用户开户================"); System.out.println("请输入开户名称:"); String name = sc.next(); String password = ""; while (true){ System.out.println("请输入开户密码:"); password = sc.next(); System.out.println("请再次确认密码:"); String okPassword = sc.next(); //判断两次输入密码 if (okPassword.equals(password)){ break; }else{ System.out.println("两次密码必须一致"); } } System.out.println("请输入当次限额:"); double quotaMoney = sc.nextDouble(); String cardId = createCard(accounts); //封装账户 Account account = new Account(cardId,name,password,quotaMoney); accounts.add(account); System.out.println("恭喜您,开户成功!你的卡号是:"+account.getCardId()+"请您妥善保管!"); } public static String createCard(ArrayList<Account> accounts){ while (true){ //生成8位随机号码,且不重复 String cardId = ""; Random r = new Random(); for (int i=0;i<8;i++){ cardId += r.nextInt(10); } Account acc = getAccountByCardId(cardId, accounts); if (acc == null){ return cardId; } } } public static Account getAccountByCardId(String cardId,ArrayList<Account> accounts){ for (int i=0;i< accounts.size();i++){ Account acc = accounts.get(i); if (acc.getCardId().equals(cardId)){ return acc; } } return null; } //登录// 让用户键盘录入卡号,根据卡号查询账户对象。//// 如果没有找到了账户对象,说明卡号不存在,提示继续输入卡号。//// 如果找到了账户对象,说明卡号存在,继续输入密码。//// 如果密码不正确,提示继续输入密码//// 如果密码正确,提示登陆成功!! public static void login(ArrayList<Account> accounts,Scanner sc){ //判断系统中是否存在账户 if (accounts.size()==0){ System.out.println("当前系统查无此账户,请注册!"); return; } while (true){ System.out.println("请输入登录账号:"); String cardId = sc.next(); Account acc = getAccountByCardId(cardId,accounts); if (acc!=null){ while (true){ //输入密码 System.out.println("请输入密码:"); String password = sc.next(); if (acc.getPassword().equals(password)){ System.out.println("恭喜您," + acc.getUserName() + "先生/女士成功登录!" + "您的账户:" + acc.getCardId()); //展示操作页面 showUserCommand(sc,acc,accounts); return; }else{ System.out.println("Sorry,该账户不存在!"); } } } } } private static void showUserCommand(Scanner sc, Account acc , ArrayList<Account> accounts) { while (true) { 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: // 查询账户 showAccount(acc); break; case 2: // 存款 depositMoney(acc, sc); break; case 3: // 取款 drawMoney(acc,sc); break; case 4: // 转账 transferMoney(accounts, acc , sc); break; case 5: // 修改密码 updatePassWord(acc,sc); return; // 结束当前操作的方法 case 6: // 退出 System.out.println("欢迎下次光临!!"); return; // 结束当前操作的方法! case 7: // 注销账户 // 从当前集合中抹掉当前账户对象即可 accounts.remove(acc); System.out.println("销户成功了!!"); return;// 结束当前操作的方法! default: System.out.println("您的命令输入有误~~~"); } } } private static void showAccount(Account acc) { System.out.println("==================当前账户详情==================="); System.out.println("卡号:" + acc.getCardId()); System.out.println("姓名:" + acc.getUserName()); System.out.println("余额:" + acc.getMoney()); System.out.println("当次限额:" + acc.getQuoteMoney()); }// 存款就是拿到当前账户对象。//// 然后让用户输入存款的金额。//// 调用账户对象的setMoney方法将账户余额修改成存钱后的余额。//// 存钱后需要查询一下账户信息,确认是否存钱成功了! private static void depositMoney(Account acc, Scanner sc) { System.out.println("==================存钱操作==================="); System.out.println("请您输入存款的金额:"); double money = sc.nextDouble(); // 直接把金额修改到账户对象的money属性中去 acc.setMoney(acc.getMoney() + money); System.out.println("存款完成!!"); showAccount(acc); }// 取款需要先判断账户是否有钱。//// 有钱则拿到自己账户对象。//// 然后让用户输入取款金额//// 判断取款金额是否超过了当次限额,以及余额是否足够//// 满足要求则调用账户对象的setMoney方法完成金额的修改。 private static void drawMoney(Account acc, Scanner sc) { System.out.println("==================取款操作==================="); // 1、判断它的账户是否足够100元 if(acc.getMoney() >= 100){ while (true) { System.out.println("请您输入取款的金额:"); double money = sc.nextDouble(); // 2、判断这个金额有没有超过当次限额 if(money > acc.getQuoteMoney()){ System.out.println("您当次取款金额超过每次限额,不要取那么多,每次最多可以取:" + acc.getQuoteMoney()); }else { // 3、判断当前余额是否足够你取钱 if(acc.getMoney() >= money){ // 够钱,可以取钱了 acc.setMoney(acc.getMoney() - money); System.out.println("恭喜您,取钱" + money + "成功了!当前账户还剩余:" + acc.getMoney()); return;// 取钱后干掉取钱方法 }else { System.out.println("余额不足啊!"); } } } }else { System.out.println("您自己的金额没有超过100元,就别取了~~~"); } }// 转账功能需要判断系统中是否有2个账户对象及以上。//// 同时还要判断自己账户是否有钱。//// 接下来需要输入对方卡号,判断对方账户是否存在。//// 对方账户存在还需要认证对方户主的姓氏。//// 满足要求则可以把自己账户对象的金额修改到对方账户对象中去。 private static void transferMoney(ArrayList<Account> accounts, Account acc, Scanner sc) { // 1、判断系统中是否有2个账户及以上 if(accounts.size() < 2){ System.out.println("对不起,系统中无其他账户,您不可以转账!"); return; } // 2、判断自己的账户对象中是否有钱 if(acc.getMoney() == 0){ System.out.println("对不起,您自己都没钱,就别转了~~"); return; } // 3、开始转账逻辑 while (true) { System.out.println("请您输入对方账户的卡号:"); String cardId = sc.next(); Account account = getAccountByCardId(cardId , accounts); // 判断这个账户对象是否存在,存在说明对方卡号输入正确 if(account != null){ // 判断这个账户对象是否是当前登录的账户自己 if(account.getCardId().equals(acc.getCardId())){ // 正在给自己转账 System.out.println("您不可以为自己转账!"); }else { // 确认对方的姓氏 String name = "*" + account.getUserName().substring(1); System.out.print("请您确认【" + name + "】的姓氏:"); String preName = sc.next(); // 王 if(account.getUserName().startsWith(preName)){ // 真正开始转账了 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("恭喜您,转账成功了,已经为" + account.getUserName() +"转账多少:" + money); showAccount(acc); return; } }else { System.out.println("对不起,您认证的信息有误~~~"); } } }else { System.out.println("对不起,您输入的转账卡号有问题!"); } } } private static void updatePassWord(Account acc, Scanner sc) { System.out.println("===========修改密码======================="); while (true) { System.out.println("请您输入正确的密码:"); String okPassWord = sc.next(); // 判断密码是否正确 if(acc.getPassword().equals(okPassWord)){ while (true) { // 可以输入新密码 System.out.println("请您输入新的密码:"); String newPassWord = sc.next(); System.out.println("请您输入确认密码:"); String okNewPassWord = sc.next(); if(newPassWord.equals(okNewPassWord)) { // 修改账户对象的密码为新密码 acc.setPassword(newPassWord); return; // 直接结束掉!! }else { System.out.println("您两次输入的密码不一致~~"); } } }else { System.out.println("当前输入的密码不正确~~~"); } } }}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。