今天写个简单的小练习,银行案例,简单实现用户登录、注册、存钱、取钱、转账、查询余额、修改密码、退出登录等功能。
代码:
首先定义用户类
package bankdemo;
import java.math.BigDecimal;
public class User {
private String name;
private String username;
private String password;
private BigDecimal money;
public User() {
}
public User(String name, String username, String password) {
this.name = name;
this.username = username;
this.password = password;
this.money = new BigDecimal("0");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 BigDecimal getMoney() {
return money;
}
public void setMoney(BigDecimal money) {
this.money = money;
}
@Override
public String toString() {
return "User [name=" + name + ", username=" + username + ", password=" + password + ", money=" + money + "]";
}
}
然后定义银行类
package bankdemo;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Scanner;
public class Bank {
private String name;
private static ArrayList<User> users = new ArrayList<User>();
private static int num = 0;
public Bank(String name) {
this.name = name;
}
//登录
public User login() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入账号: ");
String username = scanner.next();
System.out.println("请输入密码: ");
String password = scanner.next();
for (User user : users) {
if(username.equals(user.getUsername()) && password.equals(user.getPassword())) {
return user;
}
}
return null;
}
//注册
public void register() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入名称");
String name = scanner.next();
System.out.println("请输入账号: ");
String username = scanner.next();
System.out.println("请输入密码: ");
String password = scanner.next();
System.out.println("请确认密码: ");
String password0 = scanner.next();
//判断账号是否存在
if(isUserExist(username)) {
System.out.println("账号已经存在, 请重新注册");
return;
}
if(!password.equals(password0)) {
System.out.println("两次密码不一致, 请重新注册");
return;
}
users.add(new User(name, username, password));
System.out.println("注册成功");
}
//判断账号是否存在
public boolean isUserExist(String username) {
for (User user : users) {
if(username.equals(user.getUsername())) {
return true;
}
}
return false;
}
//判断账号是否存在, 存在则返回其对应的用户
public User isUserExist(String username, int tag) {
for (User user : users) {
if(username.equals(user.getUsername())) {
return user;
}
}
return null;
}
//存钱
public void saveMoney(User user) {
System.out.println("请输入存款金额: ");
Scanner scanner = new Scanner(System.in);
double saveMoney = scanner.nextDouble();
BigDecimal saveMoney0 = new BigDecimal(saveMoney + "");
BigDecimal oldMoney = user.getMoney();
BigDecimal newMoney = oldMoney.add(saveMoney0);
user.setMoney(newMoney);
System.out.println("原存款金额为: " + oldMoney + "元, 存入金额为: " + saveMoney + "元, 当前余额为: " + newMoney + "元");
}
//取钱
public void takeMoney(User user) {
System.out.println("请输入取款金额: ");
Scanner scanner = new Scanner(System.in);
double takeMoney = scanner.nextDouble();
BigDecimal oldMoney = user.getMoney();
if(oldMoney.doubleValue() >= takeMoney) {
BigDecimal takeMoney0 = new BigDecimal(takeMoney + "");
BigDecimal newMoney = oldMoney.subtract(takeMoney0);
user.setMoney(newMoney);
System.out.println("原存款金额为: " + oldMoney + "元, 取出金额为: " + takeMoney + "元, 当前余额为: " + newMoney + "元");
}
else {
System.out.println("余额不足, 余额为: " + oldMoney + "元");
}
}
//查询余额
public void queryMoney(User user) {
System.out.println("当前余额为: " + user.getMoney() + "元");
}
//转账
public void moveMoney(User user) {
System.out.println("请输入转出金额: ");
Scanner scanner = new Scanner(System.in);
double moveMoney = scanner.nextDouble();
BigDecimal oldMoney = user.getMoney();
if(oldMoney.doubleValue() >= moveMoney) {
System.out.println("请输入你要转入的账号: ");
String username = scanner.next();
//转入账号不能是自己账号
if(user.getUsername().equals(username)) {
System.out.println("转入账号不能是自己账号");
return;
}
//判断转入账号是否存在
User destUser = isUserExist(username, 0);
if(destUser != null) {
//存在, 可以转账
BigDecimal moveMoney0 = new BigDecimal(moveMoney + "");
BigDecimal newMoney = oldMoney.subtract(moveMoney0);
user.setMoney(newMoney);
System.out.println("原存款金额为: " + oldMoney + "元, 转出金额为: " + moveMoney + "元, 当前余额为: " + newMoney + "元");
//设置转入账号余额
destUser.setMoney(destUser.getMoney().add(moveMoney0));
}
else {
//不存在, 不可以转账
System.out.println("转入账号不存在");
}
}
else {
System.out.println("余额不足, 余额为: " + oldMoney + "元");
}
}
//修改密码
public void changePassword(User user) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入原密码: ");
String oldPassword = scanner.next();
System.out.println("请输入新密码: ");
String newPassword = scanner.next();
System.out.println("请确认新密码: ");
String newPassword0 = scanner.next();
if(oldPassword.equals(user.getPassword())) {
if(newPassword.equals(newPassword0)) {
user.setPassword(newPassword);
System.out.println("修改成功");
}
else {
System.out.println("两次密码不一致");
}
}
else {
System.out.println("原密码错误");
}
}
}
最后定义测试类进行测试
package bankdemo;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Bank bank = new Bank("小白银行");
while(true) {
//一级菜单
oneMenu(bank);
}
}
public static void oneMenu(Bank bank) {
System.out.println("请输入你要进行的操作: \n1.登录\n2.注册");
Scanner scanner = new Scanner(System.in);
int choose = scanner.nextInt();
if(choose == 1) {
User user = bank.login();
if(user != null) {
System.out.println("登陆成功");
//二级菜单
twoMenu(bank, user);
}
else {
System.out.println("登陆失败");
}
}
else if(choose == 2) {
bank.register();
}
else {
System.out.println("输入有误");
}
}
public static void twoMenu(Bank bank, User user) {
while(true) {
System.out.println("请输入你要进行的操作: \n1.存钱\n2.取钱\n3.转账\n4.查询余额\n5.修改密码\n6.退出登录");
Scanner scanner = new Scanner(System.in);
int choose = scanner.nextInt();
switch(choose) {
case 1:
bank.saveMoney(user);//存钱
break;
case 2:
bank.takeMoney(user);//取钱
break;
case 3:
bank.moveMoney(user);//转账
break;
case 4:
bank.queryMoney(user);//查询余额
break;
case 5:
bank.changePassword(user);//修改密码
break;
case 6:
System.out.println("欢迎下次光临");//退出登录
return;
default:
break;
}
}
}
}
效果如下:
以后再慢慢完善更多功能吧~