个人名片:
🐅作者简介:一名大二在校生,热爱生活,爱好敲码!
💅个人主页🥇:holy-wangle
➡系列内容:🖼️tkinter前端窗口界面创建与优化
✨个性签名:🍭不积跬步,无以至千里;不积小流,无以成江海
案例文章
0. 完整代码存放位置
案例展示:
尝试登录账户,但是没有账户,所以无法登录,要注册账户!
进行注册呗!
注册完成之后,进行登录!
查询小好的账户信息如下呢!!!!
存多少钱?10000吧,哈哈哈!
取点钱买烧鸭吃咯!!!!!
转账给女朋友,还没有她的账号,再注册一个!
再进行转账!
修改密码试试,毕竟密码太简单了!
展示一波返回!
展示一些刚刚转账成功没,到账1000元了!!!!
注册用户也ok!!!!
注册用户也ok!!!!
大致系统就是这样了,看过不如自己尝试一下,复制去run一下吧!!!
完整系统代码:
main.java:
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* ATM系统的入口类
*/
public interface ATMSystem {
public static void main(String[] args) {
// 1.定义账户类
// 2.定义一个集合容器,负责以后存储全部的账户对象,进行相关的业务操作
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
// 3.登录界面设计
OUT:
while (true) {
System.out.println("===============欢迎您来到ATM系统===============");
System.out.println("1.登录账户");
System.out.println("2.注册账户");
System.out.println("3.退出程序");
System.out.println("请您输入你想进行的操作:");
int command = sc.nextInt();
switch (command)
{
//登录
case 1:
login(accounts,sc);
break;
//开户(定义方法的快速方法,alt + enter ,前提是先写好方法名和对应的参数)
case 2:
register(accounts,sc);
break;
case 3:
System.out.println("退出系统成功!");
break OUT;
default:
System.out.println("抱歉!您输入有误,请重新输入!");
}
}
}
/**
* 用户登录
* @param accounts 存储用户集合对象
* @param sc 扫描器
*/
private static void login(ArrayList<Account> accounts, Scanner sc) {
System.out.println("===============登录操作===============");
//1.判断账号集合中是否存在账号,如果不存在就不能进行
if (accounts.size() == 0)
{
System.out.println("您当前尚未注册任何账号,请先注册!");
return;
}
// 2.正式进入登录操作
System.out.println("请您输入登录卡号:");
String cardId = sc.next();
// 3.判断卡号是否存在
Account acc = getSureCardId(cardId,accounts);
while (true) {
if (acc != null)
{
while (true) {
//卡号存在
System.out.println("请输入您的密码:");
String passWord = sc.next();
if (passWord.equals(acc.getPassWord()))
{
System.out.println("恭喜!登录成功!欢迎" + acc.getUserNames() + "先生/女生!");
//进入 其他功能!
// 展示操作页面
showUserCommand(sc,acc,accounts);
return;
}
else
{
System.out.println("输入密码有误,请重新输入!");
}
}
}
else
{
System.out.println("抱歉,您输入的卡号不正确,请重新输入!");
return;
}
}
}
/**
* 展示操作页面
* @param accounts 当前用户信息对象
* @param sc 扫描器
*/
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:
takeMoney(acc,sc);
break;
case 4:
transferMoney(acc,sc,accounts);
break;
case 5:
changePassword(acc,sc);
break;
case 6:
System.out.println("返回成功!");
return;
case 7:
deleteAccount(accounts,sc,acc);
// 退出菜单界面
return;
default:
System.out.println("您输入的命令不正确!请重新输入!");
}
}
}
/**
* 注销账户
* @param accounts 存储用户信息集合
* @param sc 扫描器
* @param acc 当前用户对象
*/
private static void deleteAccount(ArrayList<Account> accounts, Scanner sc, Account acc) {
System.out.println("===============注销账户操作===============");
System.out.println("请您是否确认注销当前账户:");
System.out.println("请输入:" + "\n" + "是/否");
String sure = sc.next();
if (sure.equals("是"))
{
while (true) {
System.out.println("请输入您的卡号:");
String cardId = sc.next();
if (cardId.equals(acc.getCardId()))
{
for (int i = 0; i < accounts.size(); i++) {
Account account1 = accounts.get(i);
if (account1 == acc)
{
accounts.remove(i);
System.out.println("注销成功!");
return;
}
}
}
else {
System.out.println("卡号输入错误!");
return;
}
}
}
else
{
System.out.println("注销取消!");
//再次调用菜单方法
showUserCommand(sc,acc,accounts);
}
}
/**
* 修改用户密码
* @param acc 当前用户对象
* @param sc 扫描器
*/
private static void changePassword(Account acc, Scanner sc) {
while (true) {
System.out.println("===============修改密码操作===============");
System.out.println("请您输入您当前的姓氏:");
String name = sc.next();
if (acc.getUserNames().startsWith(name))
{
System.out.println("验证成功!");
while (true) {
System.out.println("请输入您当前的密码:");
String passWord = sc.next();
if (passWord.equals(acc.getPassWord()))
{
System.out.println("请输入修改的密码:");
String changPassword = sc.next();
acc.setPassWord(changPassword);
System.out.println("修改成功!");
return;
}
else
{
System.out.println("输入密码有误,请重新输入!");
}
}
}
else
{
System.out.println("验证失败!");
}
}
}
/**
* 转账
* @param acc 当前用户信息
* @param sc 扫描器
* @param accounts 存储用户信息集合
*/
private static void transferMoney(Account acc, Scanner sc, ArrayList<Account> accounts) {
System.out.println("===============转账操作===============");
// 1.判断用户是否大于2
if (accounts.size() < 2 )
{
System.out.println("抱歉,用户账户数量不足二,无法进行转账操作!请前往注册!");
return;
}
// 2.判断当前用户账户是否有钱
if (acc.getAccountMoney() == 0 || acc.getAccountMoney() < 0)
{
System.out.println("抱歉您的账户余额为0元,无法进行转账操作!");
return;
}
// 3.真正转账开始
while (true) {
System.out.println("请输入您转账的卡号:");
String cardId = sc.next();
// 判断卡号是否存在
Account account = getSureCardId(cardId,accounts);
if (account == null)
{
System.out.println("抱歉,您输入的对方卡号不正确!");
}
else
{
if (account.getCardId().equals(acc.getCardId()))
{
System.out.println("抱歉,您不能向您自己的账户转账!");
continue;
}
else
{
//账户存在,验证姓氏
String tip = "*" + account.getUserNames().substring(1);
System.out.println("请输入[" + tip + "]的姓氏");
String name = sc.next();
// 验证是否输入成功
if (account.getUserNames().startsWith(name))
{
System.out.println("验证成功!");
System.out.println("请输入您要转账的金额:");
double transferMoney = sc.nextDouble();
if (transferMoney > acc.getAccountMoney())
{
System.out.println("抱歉您的余额不足!您当前余额为:" + acc.getAccountMoney());
return;
}
acc.setAccountMoney(acc.getAccountMoney() - transferMoney);
account.setAccountMoney(account.getAccountMoney() + transferMoney);
System.out.println("转账成功!您当前余额为:" + acc.getAccountMoney());
return;
}
else
{
System.out.println("对不起,您输入错误!");
}
}
}
}
}
/**
* 取钱操作
* @param acc 当前用户对象
* @param sc 扫描器
*/
private static void takeMoney(Account acc, Scanner sc) {
System.out.println("===============取钱操作===============");
// 1.判断账户余额是否大于100元
if (acc.getAccountMoney() < 100)
{
System.out.println("您当前余额不足100元,无法进行取钱操作!");
return;
}
// 2.提示用户取钱
while (true) {
System.out.println("请输入您取钱的金额:");
double money = sc.nextDouble();
// 3.是否满足取钱要求
if (money < acc.getQuotaMoney())
{
if (acc.getAccountMoney() > money)
{
System.out.println();
acc.setAccountMoney(acc.getAccountMoney() - money);
System.out.println("取"+ money + "元成功!您当前余额为:" + acc.getAccountMoney());
return;
}
else
{
System.out.println("余额不足,您当前余额为:" + acc.getAccountMoney());
}
}
else
{
System.out.println("抱歉,您当前取钱的金额大于限额,无法进行取钱操作!");
}
}
}
/**
* 存钱
* @param acc 当前用户对象
* @param sc 扫描器
*/
private static void depositMoney(Account acc, Scanner sc) {
System.out.println("===============存款操作===============");
System.out.println("请输入您想存入的金额:");
double money = sc.nextDouble();
// 更新原来的余额
acc.setAccountMoney(acc.getAccountMoney() + money);
System.out.println("恭喜您存款成功!当前账户信息:");
showAccount(acc);
}
/**
* 展示查询账户信息
* @param acc 当前用户信息对象
*/
private static void showAccount(Account acc) {
System.out.println("卡号:" + acc.getCardId());
System.out.println("卡名:" + acc.getUserNames());
System.out.println("余额:" + acc.getAccountMoney());
System.out.println("限额:" + acc.getQuotaMoney());
System.out.println("输出完毕!感谢查询!");
}
/**
* 开户功能实现
* @param accounts 存储客户信息的集合
* @param sc 扫描器对象
*/
private static void register(ArrayList<Account> accounts,Scanner sc) {
// 开户功能实现
System.out.println("===============ATM系统开户功能===============");
Account account = new Account();
System.out.println("请您输入账号名:");
String name = sc.next();
account.setUserNames(name);
while (true) {
System.out.println("请您输入密码:");
String passWord = sc.next();
System.out.println("请您再次输入密码:");
String okPassWord = sc.next();
if (passWord.equals(okPassWord))
{
System.out.println("密码确认成功!");
account.setPassWord(okPassWord);
break;
}
else
{
System.out.println("抱歉!两次密码输入不一致,请重新输入!");
}
}
System.out.println("请设置当初提现最大额度:");
double quoteMoney = sc.nextDouble();
account.setQuotaMoney(quoteMoney);
// 为账号随机生成一个8位数的卡号且不重复的号码(独立功能,独立方法)
String cardId = getCardId(accounts);
account.setCardId(cardId);
//3.把账户对象添加到账户集合去
System.out.println("账号添加完成!");
accounts.add(account);
System.out.println("恭喜!" + name + "先生/女士," + "\n" + "您的账户注册成功!"
+ "卡号是:" + cardId);
}
/**
* 随机生成卡号不重复
* @return
*/
private static String getCardId(ArrayList<Account> accounts) {
// 随机生成8个数字
Random r = new Random();
while (true) {
String cardId = "";
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10);
cardId += data;
}
// 这里再定义一个方法去,获得独一无二的卡号
Account acc = getSureCardId(cardId,accounts);
// 如果为空的话,证明没有出现该卡号,就可以使用该卡号
if (acc == null)
{
return cardId;
}
}
}
/**
* 根据卡号查询处一个账户对象
* @param cardId 生成的卡号
* @param accounts 账户集合
* @return 返回一个账户对象地址
*/
private static Account getSureCardId(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;//查无此账号
}
}
Account.java:
/**
* 账户类
*/
public class Account {
/*
成员变量,私有
*/
private String cardId; //卡号
private String userNames; //卡名
private String passWord; //密码
private double accountMoney; // 账户余额
private double quotaMoney; //提取额度
public Account() {
}
public Account(String cardId, String userNames, String passWord, double accountMoney, double quotaMoney) {
this.cardId = cardId;
this.userNames = userNames;
this.passWord = passWord;
this.accountMoney = accountMoney;
this.quotaMoney = quotaMoney;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserNames() {
return userNames;
}
public void setUserNames(String userNames) {
this.userNames = userNames;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public double getAccountMoney() {
return accountMoney;
}
public void setAccountMoney(double accountMoney) {
this.accountMoney = accountMoney;
}
public double getQuotaMoney() {
return quotaMoney;
}
public void setQuotaMoney(double quotaMoney) {
this.quotaMoney = quotaMoney;
}
}
好了,今天的分享就这么多了,有什么不清楚或者我写错的地方,请多多指教!
私信,评论我呗!!!!!!
关注我下一篇不迷路哦!