包含注册用户,登录用户,查看用户信息、存款、取款、给其他用户转账、修改密码、退出登录、注销当前用户,的功能(自己弄得比较墨迹,但是各个功能还是可以出来的)
package com.itheima;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
首页:包含登录和注册2个功能
每个用户的账户信息都是一个对象,需要提供账户类。
需要准备一个容器,用于存储系统全部账户对象信息
*/
public class Test {
public static void main(String[] args) {
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
OUT:
while (true) {
System.out.print("========欢迎您进入银行ATM系统========\n"
+"1. 登录账户\n"+"2. 注册账户\n"
+"3. 退出系统\n"
+"请输入命令1、2、3选择对应的操作:");
int operate = sc.nextInt();
switch (operate){
case 1:
// 登录
Login(accounts);
break;
case 2:
// 注册
Enroll(accounts);
break;
case 3:
//退出系统
break OUT;
default:
System.out.println("您输入的命令不存在");
}
}
}
/** ATM系统,用户注册模块
* 创建一个Account账户类的对象用于封装账户信息(姓名、密码、卡号)
* 键盘录入姓名、密码、确认密码(需保障两次密码一致)
* 生成账户卡号,卡号必须由系统自动生成8位数字(必须保证卡号的唯一)
* 把Account账户对象存入到集合accounts中去。
* @param accounts 接收的账户集合
* @return
*/
public static void Enroll(ArrayList<Account> accounts){
System.out.println("--------------系统开户功能-----------------");
Scanner sc = new Scanner(System.in);
// 1.创建一个账户对象,用于后期封装账户信息。
Account account = new Account();
// 2.录入当前这个账户的信息,注入到账户对象中去。
System.out.println("请您输入您的姓名:");
String name = sc.next();
account.setName(name);
while (true) {
System.out.println("请您输入您的密码:");
String password = sc.next();
System.out.println("请您再次输入密码:");
String password1 = sc.next();
if (password.equals(password1)){
account.setPassword(password);
break;
}else{
System.out.println("您输入的两次密码不一致,请重新输入");
}
}
System.out.println("请您输入当次取现额度:");
double maxmoney = sc.nextDouble();
account.setMaxmoney(maxmoney);
Random r = new Random();
// 为账户随机一个8位且与其他账户不重复的卡号。(独立功能,独立成方法)。
String cardId = getRandomCardId(accounts);
account.setCodenumber(cardId);
System.out.println(account.getName()
+ "您的账户已经开卡成功,您的卡号是:"
+ account.getCodenumber());
// 3.把账户对象添加到账户集合中去。
accounts.add(account);
}
/**
* 随机生成8位数卡号
* @param accounts
* @return
*/
private static String getRandomCardId(ArrayList<Account> accounts) {
// 1.随机生成八位数字组成卡号
String codeId = "";
Random r = new Random();
while (true) {
for (int i = 0; i < 8; i++) {
codeId += r.nextInt(10);
}
// 2.判断这个8位的卡号是否与其他的卡号重复了。(独立成一个方法)
if (getAccountByCardId(codeId,accounts) == null){
//不重复
return codeId;
}
}
}
/**
* 根据卡号查询出一个账户对象出来
* @param cardId 卡号
* @param accounts 全部账户的集合
* @return 账户对象 | null
*/
public static Account getAccountByCardId(String cardId,ArrayList<Account> accounts){
for (int i = 0; i < accounts.size(); i++) {
if (accounts.get(i).getCodenumber().equals(cardId)){
return accounts.get(i);
}
}
return null;
}
/**
* 登录界面
* @param accounts
*/
public static void Login(ArrayList<Account> accounts){
Scanner sc = new Scanner(System.in);
System.out.println("========银行ATM系统登录界面========");
// 判断是否存在账户
if (accounts.size() != 0) {
while (true) {
System.out.print("请输入您的卡号:");
String cardId = sc.next();
if(getAccountByCardId(cardId,accounts) == null){
System.out.println("您输入的卡号不存在,请重新输入~~");
}else{
while (true) {
System.out.println("请输入您的密码");
String password = sc.next();
if(getAccountByCardId(cardId,accounts).getPassword().equals(password)){
System.out.println("欢迎卡号为"
+ getAccountByCardId(cardId, accounts).getCodenumber()
+ getAccountByCardId(cardId, accounts).getName()
+ "进入ATM系统");
homePage(getAccountByCardId(cardId,accounts),accounts);
break;
}else{
System.out.println("您输入的密码错误,请重新输入~~");
}
}
}
break;
}
}else{
System.out.println("系统中没有已经开户的用户信息,请先注册账户");
}
}
/**
* 业务操作界面
* @param account
* @param accounts
*/
public static void homePage(Account account,ArrayList<Account> accounts){
Scanner sc = new Scanner(System.in);
OUT:
while (true) {
System.out.println("========欢迎您进入ATM系统业务操作界面========");
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.print("您可以继续选择功能进行操作了:");
int choose = sc.nextInt();
switch (choose){
case 1:
// 查询
inquireUser(account);
break;
case 2:
// 存款
depositMoney(account);
break;
case 3:
// 取款
takeMoney(account);
break;
case 4:
// 转账
giveMoney(account,accounts);
break;
case 5:
// 修改密码
changePassword(account);
break;
case 6:
// 退出登录
break OUT;
case 7:
// 注销当前账户
logout(account,accounts);
break OUT;
default:
System.out.println("您输入的命令不存在~~");
}
}
}
/**
* 查询账户信息
* @param account
*/
public static void inquireUser(Account account){
System.out.println("========欢迎您进入银行用户详情界面========");
System.out.println("您的账户信息如下:");
System.out.println("卡号:" + account.getCodenumber());
System.out.println("姓名:" + account.getName());
System.out.println("余额:" + account.getMoney());
System.out.println("当次取现额度:" + account.getMaxmoney());
}
/**
* 存款界面
* @param account
*/
public static void depositMoney(Account account){
Scanner sc = new Scanner(System.in);
System.out.println("-----------银行存款界面------------");
System.out.println("请输入您想要存款的金额");
double depMoney = sc.nextDouble();
Double money = account.getMoney();
double sumMoney = money + depMoney;
account.setMoney(sumMoney);
System.out.println("存款成功~~,您的账户现有余额:" + account.getMoney());
}
/**
* 取款界面
* @param account
*/
public static void takeMoney(Account account){
Scanner sc = new Scanner(System.in);
System.out.println("------------银行取款界面------------");
while (true) {
System.out.println("请输入您要取款的金额");
double takemoney = sc.nextDouble();
if (takemoney <= account.getMaxmoney()){
if (takemoney <= account.getMoney()) {
double money = account.getMoney() - takemoney;
account.setMoney(money);
System.out.println("取款成功~~,您的账户还剩金额:" + account.getMoney());
break;
} else {
System.out.println("您输入的金额大于您账户现有金额:" + account.getMoney() + ",请重新输入需要提现的金额");
}
}else{
System.out.println("您输入的金额大于当次提现额度");
}
}
}
/**
* 转账界面
* @param account
* @param accounts
*/
public static void giveMoney(Account account,ArrayList<Account> accounts){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("-------------银行转账界面-------------");
System.out.println("请您输入您要转账的卡号:");
String cardId = sc.next();
if (getAccountByCardId(cardId,accounts) == null){
System.out.println("很遗憾~~您输入的卡号不存在,请重新输入!");
}else{
System.out.println("请输入您要转账的金额:");
double givemoney = sc.nextDouble();
if (givemoney <= account.getMoney()){
double sunmoney = getAccountByCardId(cardId,accounts).getMoney() + givemoney;
getAccountByCardId(cardId,accounts).setMoney(sunmoney);
double money = account.getMoney() - givemoney;
account.setMoney(money);
System.out.println("转账成功!!您的账户现在余额为:" + account.getMoney());
break;
}else{
System.out.println("您输入的金额已经超出您的余额,请重新输入转账金额");
}
}
}
}
/**
* 修改密码界面
* @param account
*/
public static void changePassword(Account account){
// 旧的密码
String oldpassword = account.getPassword();
Scanner sc = new Scanner(System.in);
// 新的密码
while (true) {
System.out.println("-------------修改密码界面-------------");
System.out.println("请您输入新的密码:");
String newpassword = sc.next();
if (newpassword.equals(oldpassword)){
System.out.println("您输入的新密码与旧密码一致,请重新输入新的密码:");
}else{
System.out.println("请您再次输入新的密码进行确认:");
String pw = sc.next();
if (pw.equals(newpassword)){
account.setPassword(newpassword);
System.out.println("密码更改成功");
break;
}else{
System.out.println("您输入的两次密码不一致,请重新输入密码");
}
}
}
}
/**
* 注销用户
* @param account
*/
public static void logout(Account account,ArrayList<Account> accounts){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("-------------注销当前账户界面-------------");
System.out.println("是否确定注销当前账户(输入:是|否)");
String xuanze = sc.next();
if (xuanze.equals("是")){
if (account.getMoney() == 0.0) {
accounts.remove(account);
System.out.println("当前账户已成功删除");
break;
}else{
System.out.println("您当前账户仍有余额,将余额全部取出后再进行销户");
takeMoney(account);
}
}else{
System.out.println("您做出注册行为,虽已经取消注销行为,但仍需重新登录~~");
break;
}
}
}
}