package com.ctgu.ATMModele;
public class Account {//实体类。
private String cardID;//用户卡号。
private String userName;//用户名。
private char gender;//性别。
private String password;//密码。
private double balance;//余额。
private double limit;//限额。
public Account() {
}
public Account(String cardID, String userName, char gender, String password, double balance, double limit) {
this.cardID = cardID;
this.userName = userName;
this.gender = gender;
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+(gender == '男' ? "先生" : "女士");
}
public void setUserName(String userName) {
this.userName = userName;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
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;
}
}
package com.ctgu.ATMModele;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {//操作类operator
private ArrayList<Account> accounts = new ArrayList<Account>();
private Scanner scanner = new Scanner(System.in);
private Random random = new Random();
private Account loginAcc;//记住登录后的用户对象。
public void start(){//启动ATM系统,展示欢迎界面。
while (true) {
System.out.println("======欢迎进入ATM系统======");
System.out.println("1、用户登录。");
System.out.println("2、用户开户。");
System.out.println("======请选择您的业务======");
int command = scanner.nextInt();
switch (command){
case 1 :
login();
break;
case 2 :
createAccount();
break;
default :
System.out.println("======请重新输入您的业务======");
break;
}
}
}
private void login(){//用户登录功能。
System.out.println("======用户登录操作======");
if(accounts.size() == 0){
System.out.println("======系统中无账户存在======");
return;
}
while (true) {
System.out.println("======请输入卡号======");
String inputCardID = scanner.next();
Account acc = getAccountByID(inputCardID);
if(acc == null){
System.out.println("======您输入的卡号不存在,请重新输入======");
continue;
}
else{
while (true) {
System.out.println("======请输入密码======");
String password = scanner.next();
if(acc.getPassword().equals(password)){
//密码正确,可以进行登录。
loginAcc = acc;
System.out.println("======欢迎您,"+loginAcc.getUserName()+"卡号:"+loginAcc.getCardID());
showLoginUserCommand();
return;
}
else{
//密码错误。
System.out.println("======密码错误======");
continue;
}
}
}
}
}
private void showLoginUserCommand(){//展示登录后的用户操作界面。
System.out.println("======"+loginAcc.getUserName()+"您可以选择以下功能进行账户处理======");
while (true) {
System.out.println("1、查询账户。2、存款。3、取款。4、转账。5、修改密码。6、注销账户。7、退出。");
int userCommand = scanner.nextInt();
switch (userCommand){
case 1 :
showLoginAccount();
break;
case 2 :
deposit();
break;
case 3 :
withdrawMoney();
break;
case 4 :
transferAccounts();
break;
case 5 :
changePassword();
return;
case 6 :
if (accountCancellation()){
return;
}
break;
case 7 :
System.out.println("======用户"+loginAcc.getUserName()+"退出成功======");
return;
default :
System.out.println("======指令输入有误,请重新输入======");
break;
}
}
}
private void showLoginAccount(){//展示当前登录用户的账户信息。
System.out.println("======您的当前账户信息如下======");
System.out.println("卡主:"+loginAcc.getUserName());
System.out.println("卡号:"+loginAcc.getCardID());
System.out.println("性别:"+loginAcc.getGender());
System.out.println("余额:"+loginAcc.getBalance());
System.out.println("限额:"+loginAcc.getLimit());
}
private void deposit(){//用户存款操作。
System.out.println("======存款操作======");
while (true) {
System.out.println("======请输入您的存款金额======");
double money = scanner.nextDouble();
if(money < 0 || money%100 != 0){
System.out.println("======存款金额输入错误======");
continue;
}
else{
loginAcc.setBalance(loginAcc.getBalance() + money);
System.out.println("======用户"+loginAcc.getUserName()+"存入"+money+"元,账户余额为"+loginAcc.getBalance());
System.out.println("======是否继续存款======");
System.out.println("======1、继续。2、返回上一步操作。");
int command = scanner.nextInt();
switch (command){
case 1 : break;
case 2 : return;
}
}
}
}
private void withdrawMoney(){//用户取款操作。
System.out.println("======用户取款操作======");
while (true) {
if(loginAcc.getBalance() < 100){
System.out.println("======您的账户余额不足100元======");
return;//余额不足直接跳出方法。
}
System.out.println("======请输入您的取款金额======");
double money = scanner.nextDouble();
if (money > loginAcc.getBalance()) {
System.out.println("======您的账户余额不足,请重新输入======");
continue;
}
if(money <= 0 || money % 100 != 0){
System.out.println("======您输入的金额有误,请重新输入======");
continue;
}
if (money > loginAcc.getLimit()) {
System.out.println("======您的限额为"+loginAcc.getLimit()+",请重新输入======");
continue;
} else {
loginAcc.setBalance(loginAcc.getBalance()-money);
System.out.println("======用户"+loginAcc.getUserName()+",本次交易额为"+money+",账户余额为"+loginAcc.getBalance()+"======");
System.out.println("======是否继续取款======");
System.out.println("======1、继续。2、返回上一步操作。");
int command = scanner.nextInt();
switch (command){
case 1 : break;
case 2 : return;
}
}
}
}
private void transferAccounts(){//转账功能。
System.out.println("======用户转账======");
if(accounts.size() < 2){
System.out.println("======当前系统用户个数不足,无法转账======");
return;
}
if(loginAcc.getBalance() == 0){
System.out.println("======您的账户余额不足,无法转账======");
return;
}
while (true) {
System.out.println("======请输入对方卡号======");
String cardID = scanner.next();
Account acc = getAccountByID(cardID);
if(acc == null){
System.out.println("======您输入的账户用户不存在,请重新输入======");
continue;
}
else {
String name = "*" + acc.getUserName().substring(1);
System.out.println("======请输入"+name+"的姓氏======");
String inputName = scanner.next();
String resultName = inputName + acc.getUserName().substring(1);
if(resultName.equals(acc.getUserName())){
while (true) {
System.out.println("======请输入您的转账金额======");
double money = scanner.nextDouble();
if(loginAcc.getBalance() >= money){
loginAcc.setBalance(loginAcc.getBalance() - money);//更新转账方的余额。
acc.setBalance(acc.getBalance() + money);//更新接收方的余额。
System.out.println("======用户"+loginAcc.getUserName()+"转账成功"+money+"元,接受方为"+acc.getUserName());
return;//直接退出方法。
}
else {
System.out.println("======余额不足======");
continue;
}
}
}
else {
System.out.println("======您输入的姓氏不正确======");
}
}
}
}
private boolean accountCancellation(){//销户功能,如果销户成功则跳转到欢迎界面,销户失败则跳转到用户菜单。
System.out.println("======用户销户功能======");
System.out.println("======你确定是否销户y/n======");
char command = scanner.next().charAt(0);
switch (command){
case 'y' :
if(loginAcc.getBalance() != 0){
System.out.println("======账户中存在金额,销户失败======");
return false;
}
else {
accounts.remove(loginAcc);
System.out.println("======销户成功======");
return true;
}
default :
System.out.println("======账户保留======");
return false;
}
}
private void changePassword(){//修改密码功能。
System.out.println("======修改密码======");
while (true) {
System.out.println("======请输入您的新密码======");
String newPassword1 = scanner.next();
System.out.println("======请再次输入您的新密码======");
String newPassword2 = scanner.next();
if (newPassword1.equals(loginAcc.getPassword()) || newPassword2.equals(loginAcc.getPassword())){
System.out.println("======新密码不得与旧密码相同,请重新输入======");
continue;
}
if (!newPassword1.equals(newPassword2)){
System.out.println("======两次输入的密码不同,请重新设置======");
continue;
}
else {
System.out.println("======设置密码成功======");
System.out.println("======请重新登录======");
break;
}
}
}
private void createAccount(){//用户开户功能。
//1、创建对象用于接受用户所填入的用户信息。
System.out.println("======用户开户操作======");
Account acc = new Account();
//2、用户输入个人信息。
System.out.println("======请输入您的姓名======");
String userName = scanner.next();
acc.setUserName(userName);
while (true) {
System.out.println("======请输入您的性别======");
char gender = scanner.next().charAt(0);
if(gender == '男'||gender == '女'){
acc.setGender(gender);
break;
}
else {
System.out.println("======性别输入有误,请重新输入======");
}
}
System.out.println("======您的银行卡号为======");
acc.setCardID(generateCardID());
System.out.println(acc.getCardID());
while (true) {
System.out.println("======请输入您的6位数字密码======");
String password1 = scanner.next();
System.out.println("======请再次输入您的确认密码======");
String password2 = scanner.next();
if(password1.equals(password2)){
System.out.println("======密码设置成功======");
acc.setPassword(password1);
break;
}
else{
System.out.println("======两次输入的密码不相同,请重新输入======");
}
}
System.out.println("======请输入您的取现额度======");
double limit = scanner.nextDouble();
acc.setLimit(limit);
accounts.add(acc);//用户信息录入完成,讲用户对象放到ArrayList集合当中。
System.out.println("======用户"+acc.getUserName()+"开户成功======");
}
private String generateCardID(){//生成八位且唯一的银行卡号。
while (true) {
String cardID = "";//保存最终结果。
Random random = new Random();
for (int i = 0; i < 8; i++) {
int data = random.nextInt(10);
cardID = cardID + data;
}
Account acc = getAccountByID(cardID);
if(acc == null){
return cardID;
}
}
}
private Account getAccountByID(String cardID){//判断是否有相同的cardID.
for (int i = 0; i < accounts.size(); i++) {
Account acc = accounts.get(i);
if(acc.getCardID().equals(cardID)){
return acc;
}
}
return null;
}
}
package com.ctgu.ATMModele;
public class Test {//测试类。
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}