随着手机使用的普及,大多数人出门购物都不再带现金,而是使用微信或之支付宝支付,在微信支付,我们都知道我们的钱存储在微信的零钱中,我们可以打开微信零钱,就能对零钱进行充值和提现的操作,于是乎我想,我可不可以用Java制作这样一个类似的系统,有了这个初步想法,我便开始实现:
我先在某网站上大致画了一个操作流程图:
当中有充值,提现,退出系统三个操作,每次进行充值和提现的操作时需要输入支付密码,当提现金额不足时则会显示提现失败。当支付密码输入错误三次后,重新程序将会休眠五分钟然后自动结束程序(假设用户没有对结束程序的权限),再次运行程序执行操作。
有了思路和流程,让我们开始构建框架,可以大致分为操作类,密码类,自定义异常类和测试类,并在操作类定义余额这一属性和创建充值和提现的方法,大致框架如图所示:
流程和框架图都清晰了,接下来开始在Java中写代码开始制作这样一个系统。
以下是测试类的源码:
import java.util.Scanner;
public class Demo {
public static void main(String[] args) throws InterruptedException {
Password p = new Password();
boolean OperateFlag = true;
Account a = new Account();
a.balance = 10000;
while (OperateFlag){
System.out.println("当前账户余额为:"+a.getBalance());
System.out.println("请输入操作编号");
System.out.println("1.充值");
System.out.println("2.提现");
System.out.println("3.退出系统");
Scanner sc = new Scanner(System.in);
int number;
number = sc.nextInt();
switch (number) {
case 1 -> {
System.out.println("请输入你要充值金额");
Scanner sc1 = new Scanner(System.in);
double add = sc1.nextDouble();
boolean flag = p.PayPassword();
if (flag) {
a.deposit(add);
System.out.println("充值成功!");
System.out.println("您当前账户的余额为: " + a.getBalance());
}else {
OperateFlag = false;
}
}
case 2 -> {
System.out.println("请输入你要提现的金额");
Scanner sc2 = new Scanner(System.in);
double delete = sc2.nextDouble();
boolean flag = p.PayPassword();
if (flag) {
try {
a.withdraw(delete);
System.out.println("您当前账户的余额为: " + a.getBalance());
} catch (OverdraftException e) {
e.printStackTrace();
}
}else {
OperateFlag = false;
}
}
case 3 -> OperateFlag = false;
}
if (OperateFlag) {
System.out.println("是否继续执行操作?按1继续,其他任意键退出");
String id = sc.next();
if (!id.equals("1")) {
OperateFlag = false;
}else OperateFlag = true;
}
}
}
}
操作类:
public class Account {
double balance ;
public double getBalance() {//获取账户余额
return balance;
}
public void deposit(double add){//充值
balance+=add;
}
public void withdraw(double delete)throws OverdraftException {//提现,并当余额不足时抛出余额透支异常。
if (balance - delete < 0) {
throw new OverdraftException("余额不足");
}else {
balance-=delete;
System.out.println("提现成功");
}
}
}
自定义异常类:
public class OverdraftException extends Exception{
public OverdraftException(String message){
super(message);
}
}
密码类:
import java.util.Scanner;
public class Password extends Thread {
Thread thread = new Thread();
public boolean PayPassword() throws InterruptedException {
String password = "123456";
for (int i = 1; i < 4; i++) {
System.out.println("请输入支付密码");
Scanner scanner = new Scanner(System.in);
String pwd = scanner.nextLine();
if (pwd.equals(password)) {
return true;
}else if(3-i>0){
System.out.println("支付密码错误,请重试,你还有"+(3-i)+"次机会");
}else {
System.out.println("机会次数已用完,请五分钟后再尝试");
thread.sleep(3000);
return false;
}
}
return false;
}
}
代码可能写的不够华丽精简,当然这是制作微信零钱充值和提现系统的第一个版本,后续还会继续创作,比如在输入支付密码错误的时候,应该还需要提供用户选择忘记密码这一操作,通过身份验证修改支付密码。