要求:
编写一个控制台版本的ATM系统,并使用集合跟面向对象等知识实现如下功能,请保持较好的代码规范跟项目结构
一、实体类AtmSystem
import java.util.Scanner;
public class AtmSystem {
private AccountTool accountTool;
static Scanner sc = new Scanner(System.in);
static String psword="0";
//主菜单
public static void menu(){
System.out.println("****************ATM****************");
System.out.println("** 1.注册 2.登录 **");
System.out.println("***********************************");
System.out.println("**请选择:");
if (sc.nextInt()==1)
login();
else
enter();
}
//注册
private static void login(){
System.out.println("***********************************");
System.out.println("**请输入账户名:");
String name = sc.next();
AccountTool.accountUser(name);
menu();
}
//登录
private static void enter(){
System.out.println("***********************************");
System.out.println("**请输入账户名:");
String name = sc.next();
System.out.println("**请输入账户密码:");
String psw = sc.next();
psword=psw;
if (AccountTool.accountDg(name,psw))
user();
}
//用户操作
private static void user() {
System.out.println("****************ATM****************");
System.out.println("** 1.余额 2.存款 **");
System.out.println("** 3.转账 **");
System.out.println("***********************************");
System.out.println("**返回主界面,请输入#menu#");
System.out.println("**退卡,请输入#exit#");
System.out.println("**请输入选项:");
String choose = sc.next();
if (choose.equals("1")){
balance();
}else if (choose.equals("2")){
deposit();
}else if (choose.equals("3")){
transfer();
}
exitAndMenu(choose);
}
//余额
private static void balance(){
System.out.println("************[ #exit# : 退卡 | #menu# :返回主界面]");
System.out.println("**请输入账户密码:");
String psw = sc.next();
exitAndMenu(psw);
System.out.println(psword);
if (psw.equals(psword)){
System.out.println("**您的余额为:¥"+AccountTool.userMoney(psw,psword));
user();
}else {
System.out.println("**密码不正确!请重新输入:");
psw=sc.next();
exitAndMenu(psw);
}
}
//存款
private static void deposit(){
System.out.println("***********************************");
System.out.println("**请输入您的存款金额:");
double money = sc.nextDouble();
System.out.println("**存款成功!");
AccountTool.saveMoney(psword,money);
user();
}
//转账
private static void transfer(){
System.out.println("************[ #exit# : 退卡 | #menu# :返回主界面]");
System.out.println("**请输入对方账号:");
String name = sc.next();
exitAndMenu(name);
AccountTool.userName(name);
System.out.println("**请输入您的转账金额(¥):");
double money = sc.nextDouble();
System.out.println("************[ #exit# : 退卡 | #menu# :返回主界面]");
AccountTool.transfer(name,money);
user();
}
//返回主菜单和退出
private static void exitAndMenu(String t){
if (t.equals("#menu#")){
menu();
}else if (t.equals("#exit#")){
System.out.println("感谢您的使用,欢迎下次光临!");
return;
}
}
}
二、工具类AccountTool
import javafx.scene.transform.Scale;
import java.util.*;
public class AccountTool {
static TreeMap<String, String> map = new TreeMap<>();//账户名 账户密码
static TreeMap<String, Double> map1 = new TreeMap<>();//密码 余额
static Scanner sc= new Scanner(System.in);
//登录
protected static boolean accountDg(String name,String psw){
if (map.get(name).equals(psw)){
System.out.println("**登录成功!欢迎您!"+name);
return true;
}else {
System.out.println("**账号或者密码不正确!请重试!");
System.out.println("**请输入账户名:");
name=sc.next();
System.out.println("请输入账户密码:");
psw=sc.next();
accountDg(name,psw);
return false;
}
}
//注册
protected static void accountUser(String name){
Set<String> keySet = map.keySet();
for (String k : keySet) {
if (k.equals(name)){
System.out.println("**该账户已存在!");
System.out.println("**请重新输入账户名:");
name = sc.next();
break;
}
}
System.out.println("**请输入密码:");
String psw = sc.next();
map.put(name,psw);
System.out.println("**账号["+name+"]创建成功!请牢记密码!");
money();
}
//转账
protected static void transfer(String name,double money){
System.out.println("**请输入账户密码:");
String psw = sc.next();
Set<String> keySet = map1.keySet();
for (String k : keySet) {
if (k.equals(psw)&&map1.get(k)>=money){
System.out.println("**转账成功!");
}else {
System.out.println("**您的余额不足!余额为:¥"+map1.get(psw));
System.out.println("**请重新输入您的转账余额(¥):");
money=sc.nextDouble();
transfer(name,money);
}
}
}
//判断账户里面有没有钱
protected static void money(){
Collection<String> values = map.values();
Set<String> keySet = map1.keySet();
for (String value : values) {
for (String s : keySet) {
if (value.equals(s)){
return;
}
}
map1.put(value,0.0);
}
}
//判断账号是否存在
protected static void userName(String name){
Set<String> keySet = map.keySet();
for (String k : keySet) {
if (k.equals(name)){
return;
}
}
System.out.println("**该账户不存在!");
System.out.println("**请输入对方账户:");
name=sc.next();
userName(name);
}
//账户余额
protected static double userMoney(String psw,String userPsw){
if (userPsw.equals(psw)){
return map1.get(psw);
}else {
System.out.println("**密码不正确!请重新输入:");
System.out.println("请输入账户密码:");
psw=sc.next();
userMoney(psw,userPsw);
}
return 0;
}
//存款
protected static void saveMoney(String psw,double money){
map1.put(psw,money);
}
}
效果如下:
总结
两个treemap ,第一个treemap形成账号–密码键值对,第二个treemap形成密码–钱数键值对,进行存储和遍历取出数据。