🏡个人主页 :@ 守夜人st
🚀系列专栏:Java
…持续更新中敬请关注…
🙉博主简介:软件工程专业,在校学生,写博客是为了总结回顾一些所学知识点
✈️推荐一款模拟面试,刷题神器,从基础走向大场面试👉 开启你的刷题之路吧
模拟ATM系统
项目说明:模拟ATM系统,系统具有注册、登录、查询、存钱、取钱、转账、修改密码、注销账户等功能。
Account类
package com.shouyeren.oop.atm;
/**
* 账户类
* */
public class Account {
private String id; //账号id
private String userName; //用户名
private String passWord; //密码
private double balance; //余额
public Account() {
}
public Account(String id, String userName, String passWord, double balance, double quota) {
this.id = id;
this.userName = userName;
this.passWord = passWord;
this.balance = balance;
this.quota = quota;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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 double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getQuota() {
return quota;
}
public void setQuota(double quota) {
this.quota = quota;
}
private double quota; //取现额度
}
ATM类
package com.shouyeren.oop.atm;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
//1.创建一个账户类
//2.创建一个集合容器,存储账户对象
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//3.系统首页
while (true) {
System.out.println("==============ATM系统==================");
System.out.println("1、账户登录");
System.out.println("2、账户注册");
System.out.print("请选择:");
int a = sc.nextInt();
switch (a){
case 1:
//1、账户登录
login(accounts,sc);
break;
case 2:
//2、账户注册
register(accounts,sc);
break;
default:
System.out.println("您输入的数据错误!!!");
}
}
}
/**
* 用户开户功能的实现
* @param accounts 接收的账户集合
*/
private static void register(ArrayList<Account> accounts,Scanner sc){
//1.创建一个账户对象,用于封装用户开户信息
Account account = new Account();
//2.录入当前用户输入信息
System.out.println("请输入账户名:");
account.setUserName(sc.next());
while (true) {
System.out.println("请输入账户密码:");
String password = sc.next();
System.out.println("请再次输入账户密码:");
String okPassword = sc.next();
if (password.equals(okPassword)){
account.setPassWord(okPassword);
break;
}else {
System.out.println("两次输入密码不一致!!!");
}
}
//生成一个8位数字的随机id
String id = getRandomId(accounts);
account.setId(id);
//3.把账户对象添加到账户集合中
accounts.add(account);
System.out.println("恭喜您" + account.getUserName() + ",开户成功!!!");
System.out.println("您的卡号:" + account.getId() + " ,请妥善保管。");
}
/**
* 生成一个8位数字组成的字符串
* @return
*/
private static String getRandomId(ArrayList<Account> accounts) {
Random ra = new Random();
while (true) {
String id = "";
for (int i = 0; i < 8; i++) {
id += ra.nextInt(10);
}
Account account = CheckTheWeight(accounts,id);
if (account == null){
return id;
}
}
}
private static void login(ArrayList<Account> accounts,Scanner sc){
System.out.println("==============ATM系统==================");
if (accounts.size() == 0){
System.out.println("对不起,该系统中目前没有任何账户,请先开户~~");
return;
}
String id = null;
while (true) {
System.out.println("请输入您的卡号:");
id = sc.next();
Account account = CheckTheWeight(accounts,id);
if (account != null){
//该卡号存在
while (true) {
System.out.println("请输入您的密码:");
String password = sc.next();
if (account.getPassWord().equals(password)){
System.out.println(account.getUserName() + "登陆成功!!!");
//进入账户
show(sc,account,accounts);
return;
}else {
System.out.println("密码错误!");
}
}
}else {
System.out.println("对不起,该卡号不存在!!!");
}
}
}
/**
* 登录成功展示菜单界面
*/
private static void show(Scanner sc,Account account,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 i = sc.nextInt();
switch (i){
case 1:
// 1.查询
showAcount(account);
break;
case 2:
// 2.存款
deposit(account,sc);
break;
case 3:
// 3.取款
withdraw(account,sc);
break;
case 4:
// 4.转帐
transfer(sc,account,accounts);
break;
case 5:
// 5.修改密码
modifyPassword(account,sc);
return;
case 6:
// 6.退出
System.out.println("退出成功,欢迎下次光临!");
return;
case 7:
// 7.注销账户
if (cancellationAccount(accounts,account,sc)) {
return;
} else {
break;
}
default:
System.out.println("输入错误,请重新选择!");
}
}
}
/**
* 注销账户
* @param accounts 账户容器
* @param account 当前账户
* @param sc 扫描器
*/
private static boolean cancellationAccount(ArrayList<Account> accounts, Account account, Scanner sc) {
System.out.println("您是否确认注销自己的账户(1.确认,2.取消):");
int a = sc.nextInt();
if (a == 2){
return false;
}else {
System.out.println("请输入您的密码:");
String s = sc.next();
if (s.equals(account.getPassWord())){
accounts.remove(account);
System.out.println("注销账户成功!!!");
}
else {
System.out.println("密码输入错误!!!");
return false;
}
}
return true;
}
/**
* 修改密码
* @param account
* @param sc
*/
private static void modifyPassword(Account account, Scanner sc) {
while (true) {
System.out.println("请输入新密码: ");
String a = sc.next();
System.out.println("请再次确认您的密码:");
String b = sc.next();
if (a.equals(b)){
System.out.println("密码修改成功!!!");
account.setPassWord(b);
return ;
}else {
System.out.println("您两次输入的密码不一致,请再次输入。");
}
}
}
/**
* 转账方法
* @param sc
* @param account
* @param accounts
*/
private static void transfer(Scanner sc,Account account,ArrayList<Account> accounts) {
//判断系统中是否有两个及以上账户存在
if (accounts.size() < 2){
System.out.println("当前系统中不足两个账户,不支持转账操作!");
return;
}
//判断账户余额是否支持转账
if (account.getBalance() == 0){
System.out.println("对不起,您的余额不足,不支持转账!");
return;
}
System.out.println("请输入需要转账账户的卡号:");
String toId = sc.next();
//判断用户输入是否是自己的卡号
if (toId.equals(account.getId())){
System.out.println("对不起,您无法给自己转账!!!");
}
//判断该卡号是否存在
Account acc = CheckTheWeight(accounts,toId);
if (acc == null){
System.out.println("您输入的卡号不存在...");
}else {
String userName = acc.getUserName();
String temp = "*" + userName.substring(1);
System.out.println("请您输入[" + temp + "]进行确认");
String s = sc.next();
if (userName.startsWith(s)){
System.out.println("请输入转账金额:");
double money = sc.nextDouble();
if(money > account.getBalance()){
System.out.println("对不起,您的余额不足,您最多转账" + account.getBalance() + "元。");
}else {
account.setBalance(account.getBalance() - money);
acc.setBalance(acc.getBalance() + money);
System.out.println("转账成功!您的余额:" + account.getBalance());
return;
}
}else {
System.out.println("对不起,您输入的信息有误!");
}
}
}
/**
* 取款方法
* @param account 传入的账户对象
* @param sc
*/
private static void withdraw(Account account, Scanner sc) {
System.out.println("请输入存款金额: ");
double money = sc.nextDouble();
if (account.getBalance() - money < 0){
System.out.println("取款失败,余额不足!");
}else {
double balance = account.getBalance() - money;
account.setBalance(balance);
System.out.println("取款" + money + "成功!");
}
showAcount(account);
}
/**
* 存款方法
* @param account
* @param sc
*/
private static void deposit(Account account, Scanner sc) {
System.out.println("请输入存款金额: ");
double money = sc.nextDouble();
if (money < 0){
System.out.println("请输入正确的存款金额...");
}else {
double balance = account.getBalance() + money;
account.setBalance(balance);
System.out.println("存款" + money + "成功!");
}
showAcount(account);
}
private static void showAcount(Account account) {
System.out.println("==============账户信息==================");
System.out.println("卡号:" + account.getId());
System.out.println("账户名:" + account.getUserName());
System.out.println("余额:" + account.getBalance());
}
/**
* 查询卡号是否重复
* @param accounts
* @param id
* @return
*/
private static Account CheckTheWeight(ArrayList<Account> accounts,String id){
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
if (id.equals(account.getId())){
return account;
}
}
return null;
}
}
算法对程序员来说及其重要,语言和开发平台不断变化,但是万变不离其宗的是那些算法和理论,刷算法最最最直白的原因就是找一个好的工作,那刷题一定是必不可少的
现在算法刷题平台还是蛮多的,给大家介绍一个我认为与大厂关联最深的平台——牛客网 跳转链接