day09
day09
利用所学基本知识实现一个简易ATM银行系统
Account类
package day09;
//定义一个账户类Account,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度)
public class Account {
private String cardId;//卡号
private String userName;//用户名
private char sex;//性别
private String password;//密码
private double balance;//余额
private double limit;//限额
public Account() {
}
public Account(String cardId, String userName, char sex, String password, double balance, double limit) {
this.cardId = cardId;
this.userName = userName;
this.sex = sex;
this.password = password;
this.balance = balance;
this.limit = limit;
}
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
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 getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
public String toString(){
return "用户名:"+userName+",卡号:"+cardId;
}
}
ATM类
package day09;
//定义一个账户类Account,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度)
//定义一个ATM类,用来代表ATM系统,负责提供所有的业务需求,比如:展示ATM的系统欢迎页、开通帐户、转账……
//定义一个测试类Test,负责对我们开发的ATM系统进行测试。
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* 此类专门用来实现功能
*/
public class ATM {
private static final int CARD_ID_LENGTH = 8;
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
Account m_account;
/**
* 开始界面
*/
public void start(){
accounts.add(new Account("123456","李倍杰",'男',"123456",1000,20000.0));
accounts.add(new Account("666666","夏开宏",'男',"123456",1000,20000.0));
System.out.println(accounts);
while (true){
System.out.println("==欢迎进入ATM系统==");
System.out.println("1.用户登录");
System.out.println("2.用户开户");
System.out.println("请选择:");
int command = sc.nextInt();
switch (command){
case 1:
System.out.println("进入登录界面");
login();
break;
case 2:
System.out.println("进入开户界面");
creatAccount();
break;
default:
System.out.println("错误指令");
break;
}
}
}
/**
* 实现开户功能
*/
public void creatAccount(){
Random random = new Random();
Account account = new Account();
//设置账户名称
System.out.println("请输入您的账户名称:");
String name = sc.next();
account.setUserName(name);
while (true){
System.out.println("请输入性别");
char sex = sc.next().charAt(0);
if (sex == '男' ||sex == '女' ) {account.setSex(sex);
break;}
else System.out.println("输入错误,请重新输入");
}
//设置账户密码
while (true){
System.out.println("请输入密码");
String pwd1 = sc.next();
System.out.println("请再次输入密码");
String pwd2 = sc.next();
if (pwd1.equals(pwd2)){ account.setPassword(pwd1);break;}
else System.out.println("你输入的2次密码不一致,请您确认");
}
//设置限额
System.out.println("请输入限额");
double limit = sc.nextDouble();
account.setLimit(limit);
//生成卡号
//todo
account.setCardId(creatCardId());
//把账号对象存入集合
accounts.add(account);
System.out.println("恭喜您开户成功!");
System.out.println(accounts);
System.out.println("按任意键+Enter退出...");
String s = sc.next();
}
/**
* 返回一个包含8位数字的字符串
* @return
*/
public String creatId(){
Random random = new Random();
String Id = "";
for (int i = 0;i<CARD_ID_LENGTH;i++){
Id += random.nextInt(10);
}
return Id;
}
/**
* 创建一个CardId
* @return CardId
*/
public String creatCardId(){
String cardId = creatId();
for (Account account : accounts) {
while (account.getCardId().equals(cardId)) {
cardId = creatId();
}
}
return cardId;
}
/**
* 实现用户的登录功能
*/
public void login(){
System.out.println("==系统登录==");
if (accounts.size()==0){
System.out.println("当前系统数据库无任何账户,请先创建账户再登录");
return;
}else {
label:while (true){
System.out.println("请输入登录卡号:");
String userInput = sc.next();
for (Account account : accounts) {
if (userInput.equals(account.getCardId())) {
System.out.println("请输入密码:");
String password = sc.next();
if (password.equals(account.getPassword())) {
System.out.println("登陆成功!");
m_account = account;
showUserCommand();
break label;
} else {
System.out.println("密码错误,请重新输入");
break;
}
}
}
System.out.println("卡号不存在,请重新输入");
}
}
}
/**
* 展示登录后的操作界面
*/
public void showUserCommand(){
while (true){
System.out.println("恭喜" + m_account.getUserName() + "成功登录ATM系统,您的卡号为:" + m_account.getCardId());
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:
System.out.println("查询账户");
showLoginAccount();
break;
case 2:
System.out.println("存款");
depositMoney();
break;
case 3:
System.out.println("取款");
drawMoney();
break;
case 4:
System.out.println("转账");
transferMoney();
break;
case 5:
System.out.println("5、密码修改");
updatePassWord();
break;
case 6:
System.out.println("已退出");
return;
case 7:
System.out.println("7、注销账户");
if (deleteAccount()){
return;
}
break;
default:
System.out.println("指令错误");
}
}
}
/**
* 查询账户
*/
private void showLoginAccount(){
System.out.println("==当前您的账户信息如下:==");
System.out.println("卡号:" + m_account.getCardId());
System.out.println("户主:" + m_account.getUserName());
System.out.println("性别:" + m_account.getSex());
System.out.println("余额:" + m_account.getBalance());
System.out.println("每次取现额度:" + m_account.getLimit());
exitTip();
}
/**
* 存钱
*/
private void depositMoney(){
System.out.println("==存款操作==");
System.out.println("请输入存款金额");
double money = sc.nextDouble();
if (money >=0){
m_account.setBalance(m_account.getBalance()+money);
System.out.println("存款成功,当前余额为"+m_account.getBalance());
}else System.out.println("您的输入错误!");
exitTip();
}
/**
* 取钱
*/
private void drawMoney(){
if (m_account.getBalance()<100) {
System.out.println("您的余额不足,你的账户余额是"+m_account.getBalance()+"元");
} else{
System.out.println("请输入取款金额:");
double draw = sc.nextDouble();
if (draw> m_account.getLimit()){
System.out.println("每次只能取"+m_account.getLimit()+"限额的钱");
}else {
m_account.setBalance(m_account.getBalance()-draw);
System.out.println("取款成功,当前余额为"+m_account.getBalance());
}
}
exitTip();
}
/**
* 转账
*/
private void transferMoney(){
System.out.println("==用户转账==");
if (accounts.size()<2){
System.out.println("当前系统中只有你一个账户,无法为其他账户转账~~");
exitTip();
return;
}
if (m_account.getBalance() == 0){
System.out.println("您自己都没钱,就别转了~~");
exitTip();
return;
}
System.out.println("输入对方卡号:");
String objectId = sc.next();
if (m_account.getCardId().equals(objectId)){
System.out.println("不能给自己转账");
exitTip();
return;
}
for (int i = 0;i < accounts.size();i++){
if (accounts.get(i).getCardId().equals(objectId)){
Account objectAccount = accounts.get(i);
System.out.println("*"+objectAccount.getUserName().substring(1));
System.out.println("请输入对方姓氏:");
char firstName = sc.next().charAt(0);
if (objectAccount.getUserName().charAt(0) != firstName ){
System.out.println("对不起,您输入的姓氏有问题,转账失败!");
exitTip();
return;
}else {
System.out.println("请输入转账金额:");
double transfer = sc.nextDouble();
if (transfer> m_account.getBalance()){
System.out.println("对不起,余额不足,转账失败!");
exitTip();
return;
}else {
m_account.setBalance(m_account.getBalance()-transfer);
objectAccount.setBalance(objectAccount.getBalance()+transfer);
System.out.println("您转账成功了~~~");
exitTip();
return;
}
}
}
}
System.out.println("您输入的卡号不正确!");
exitTip();
}
/**
* 提示按任意键+Enter退出...
*/
private void exitTip(){
System.out.println("按任意键+Enter退出...");
String s = sc.next();
}
/**
* 修改密码
*/
private void updatePassWord(){
System.out.println("==账户密码修改操作==");
System.out.println("请您输入当前账户的密码:");
String oldPassWord = sc.next();
if (m_account.getPassword().equals(oldPassWord)){
System.out.println("请输入新密码:");
String newPassword = sc.next();
System.out.println("请再次输入新密码:");
if (newPassword.equals(sc.next())){
m_account.setPassword(newPassword);
System.out.println("恭喜您,您的密码修改成功~~~,下次登录请输入新密码");
}else System.out.println("您输入的2次密码不一致~~,修改密码失败");
}else {
System.out.println("您当前输入的密码不正确~~,修改密码失败");
}
}
private boolean deleteAccount(){
System.out.println("==进行销户操作==");
System.out.println("请问您确认销户吗?y/n");
String command = sc.next();
if (command.equals("y")){
if (m_account.getBalance()!=0){
System.out.println("对不起,您的账户中存钱金额,不允许销户");
return false;
}else {
accounts.remove(m_account);
return true;
}
}else if (command.equals("n")){
return false;
}else
System.out.println("您输入的指令有误,销户失败");
return false;
}
}
Test类
package day09;
public class Test {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}
本文来自博客园,作者:萌新小夏,转载请注明原文链接:https://www.cnblogs.com/xkh-blogs/p/17231088.html
浙公网安备 33010602011771号