文章目录
- 前言
- 一、怎么去完成这样的一个系统?
- 二、ATM系统源代码
- 1.用户类
- 2.主程序
- 总结
前言
这次的ATM系统主要是对前面的知识的一次综合,主要运用到了类和对象的使用,方法的编写和调用,程序流程控制和编写代码的逻辑思维的锻炼。虽然内容并不难,但是一定是一步一步慢慢的敲出来的,明白其中的逻辑和为什么要去这么写,等完完全全做完之后,在编程思维方面还是会有很大的进步。
一、怎么去完成这样的一个系统?
(1)确定这个系统需要哪些基础功能;
(2)这些功能可以用函数去怎样实现,心中有个大概的想法;
(3)怎样将交互做到最好,这就需要考虑到菜单如何去布置;
(4)前面的这些可以在纸上画出个大概模板,然后逐步进行完善;
(5)一定不能拿到任务就开始上手编写,这样会没有一点逻辑,并且到后面就不知道自己在干什么了。
二、ATM系统源代码
1.用户类
将用户的信息全部封装起来之后再调用getter/setter方法去操作其中的属性。
代码如下:
public class User { private String name; private String IdCard;//卡号 private String Password;//密码 private double money;//余额 private double MostMoney;//当次取现额度 public String getIdCard() { return IdCard; } public void setIdCard(String idCard) { IdCard = idCard; } public String getPassword() { return Password; } public void setPassword(String password) { Password = password; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public double getMostMoney() { return MostMoney; } public void setMostMoney(double mostMoney) { MostMoney = mostMoney; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.主程序
其中主要的还是对类和对象的使用和掌握ArrayList容器,再就是每个功能就可细分为一个函数,这样主函数里面的代码就不会显得很乱,整体看上来也就很有清晰,也可以随时进行一些细节方面的修改。
代码如下 :
package day09; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; //return:直接结束了当前的方法 //break :结束的是循环或者switch public class ATMSystem { //主菜单 private static void showMenu( ArrayList<User> arrayList,Scanner in) { System.out.println("========欢迎来到小唐ATM系统========"); while (true){ System.out.println("1.登录账户(登录前请先开户)"); System.out.println("2.注册账户"); System.out.println("请输入想要进行的操作:"); int choice = in.nextInt(); switch (choice){ case 1: //登录账户 Login(arrayList,in); break; case 2: //注册用户 register(arrayList,in); break; default: System.out.println("操作有误,请重新选取!"); break; } } } //判断登录是否成功 public static void Login(ArrayList<User> arrayList,Scanner in){ while (true){ System.out.println("请输入银行卡卡号:"); String inputIdCard= in.next(); User user = getUserByIdcard(inputIdCard,arrayList); if(user!=null){ //说明该账户存在 System.out.println("请您输入银行卡密码:"); String inputPassword = in.next(); if(inputPassword.equals(user.getPassword())){ //判段密码的正确性 LoginMenu(user,in,arrayList); return; }else System.out.println("密码输入错误"); }else System.out.println("卡号输入错误"); } } //登录后的菜单 public static void LoginMenu( User user,Scanner in,ArrayList<User> arrayList){ System.out.println("======登录成功,可选择以下的操作======"); while (true){ 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 choice = in.nextInt(); switch (choice){ case 1: //查询账户余额 inquireMoney(user); break; case 2: //存款 MakeMoney(user,in); break; case 3: //取款 TakeMoney(user,in); break; case 4: //转帐 ChageMoneyTo(arrayList,user,in); break; case 5: //修改密码 ChangePassword(user,in); return; //结束当前方法;break结束的是switch case 6: //注销账户 RemoveUser(arrayList,user); return; case 7 : //退出系统 System.out.println("欢迎下次光临~~~"); return; } } } //注销用户 private static void RemoveUser(ArrayList<User> arrayList, User user) { if(user.getMoney()==0.0){ arrayList.remove(user); System.out.println("注销成功"); }else System.out.println("您的卡里还有余额" +user.getMoney() +"元,请先取回"); return; } //转账 private static void ChageMoneyTo(ArrayList<User> arrayList,User user, Scanner in) { if(arrayList.size()<2){ System.out.println("目前只有您一个账户,无法进行转账服务~~~"); showMenu(arrayList,in); }else while (true){ System.out.println("请输入对方的卡号:"); String inputIdCard = in.next(); //根据卡号得到用户2的信息 User user1 = getUserByIdcard(inputIdCard,arrayList); if(user1!=null){ String name = "*" + user1.getName().substring(1); System.out.println("请输入对方的姓氏:"+name); String FirstName = in.next(); if(user1.getName().startsWith(FirstName)){ System.out.println("输入正确,输入您想要转账的数目:"); double TakeMoney = in.nextDouble(); if(TakeMoney<user.getMoney()){ user.setMoney(user.getMoney()-TakeMoney); user1.setMoney(user1.getMoney()+TakeMoney); System.out.println("转账成功!"); System.out.println(user.getName()+"用户,您卡上的余额还有:" +user.getMoney()); }else System.out.println("卡上余额不足,无法进行转账操作~~~"); break; }else System.out.println("输入错误,请重新确认"); } } } //修改密码 private static void ChangePassword(User user, Scanner in) { while (true){ System.out.println("输入原来的密码:"); String BeforePassword = in.next(); if(BeforePassword.equals(user.getPassword())){ System.out.println("输入修改之后的密码:"); String AfterPassword = in.next(); user.setPassword(AfterPassword); System.out.println("修改完成!请重新登录~~~"); return;//结束当前方法 ,break结束的是while循环 }else System.out.println("密码输入有误,请重新输入!"); } } //取款 private static void TakeMoney(User user, Scanner in) { while (true){ System.out.println("输入您想要取款的金额:"); double takemoney = in.nextDouble(); if(takemoney<user.getMoney()&&takemoney<user.getMostMoney()){ System.out.println("取款成功!"); user.setMoney(user.getMoney()-takemoney); System.out.println("您的余额还剩:" +user.getMoney()); user.setMostMoney(user.getMostMoney()-takemoney); System.out.println("您的取款限度还有 " +user.getMostMoney()); break; }else if (takemoney > user.getMostMoney()) { System.out.println("超出取款额度,需要提前预约~~"); } else if (takemoney > user.getMoney()) { System.out.println("没有存这么多,努力赚钱吧!"); } } } //存款 private static void MakeMoney(User user,Scanner in) { System.out.println("请输入您想要存入多少钱:"); Double money = in.nextDouble(); user.setMoney(user.getMoney()+money); System.out.println("存款成功!"); System.out.println("您的账户余额为" +user.getMoney()); } //查询账户余额 private static void inquireMoney(User user) { System.out.println("户主:" +user.getName()); System.out.println("您的卡号为:" + user.getIdCard()); System.out.println("您的账户余额为:" +user.getMoney()); System.out.println("您的取现额度为:" +user.getMostMoney()); } //注册账户 public static void register(ArrayList<User> arrayList,Scanner in) { String name, IdCard; String Password, AgainPassword; double MostMoney; User user = new User(); System.out.println("请输入账户名称"); name = in.next(); user.setName(name); while (true){ System.out.println("请输入用户密码"); Password = in.next(); System.out.println("请确认密码:"); AgainPassword = in.next(); if (AgainPassword.equals( Password)) { user.setPassword(Password); break; } else System.out.println("两次密码不一致,请重新输入密码~~~"); } System.out.println("确认当前账户取现额度:"); MostMoney = in.nextDouble(); user.setMostMoney(MostMoney); //设置随机生成的卡号 IdCard = createIdCard(arrayList); user.setIdCard(IdCard); System.out.println("您的卡号为:" + IdCard); arrayList.add(user); } //生成卡号 public static String createIdCard(ArrayList<User> arrayList) { while (true){ Random random = new Random(); String idcard = ""; for (int i = 0; i < 8; i++) { idcard += random.nextInt(10); } //判断卡号是否重复 if (getUserByIdcard(idcard, arrayList) == null) { return idcard; } } } //根据卡号查找用户 public static User getUserByIdcard(String idcard,ArrayList<User> arrayList){ for (int i = 0; i < arrayList.size(); i++) { User u = arrayList.get(i); if(u.getIdCard().equals(idcard)){ return u; } } return null; } public static void main(String[] args) { Scanner in = new Scanner(System.in); ArrayList<User> arrayList = new ArrayList<>(); showMenu(arrayList,in);//菜单 } }
总结
代码总体来说并不难,也没有什么之后说要用到的一些框架技术什么的,但是对于锻炼编程思维来说真的挺有意义的,从一开始的敲二三十行代码都费劲到现在两三百行也不那么吃力,中间也是一直慢慢的持续性学习,在基础方面也是慢慢的巩固了起来,对与类和对象的使用也是越来越熟练了,也学会了如何让程序看起来逻辑清晰等等一些进步,虽然难度不大,但收获十分可观,希望能一直保持平常的心,让学习成为一个平常事。