Account
package com.item.huang;
public class Account {
private String idCard;
private String userName;
private char sex;
private String passWord;
private double money;
private double limit;//限额
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getUserName() {
return userName + (sex == '男' ? "先生" : "女士");
}
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 getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
}
ATM
package com.item.huang;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> accounts = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
private Account logicAccount = new Account();
//启动ATM系统,展示欢迎界面
public void start(){
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:
//用户登录
logic();
break;
case 2:
//用户开户
createAccount();
break;
case 3:
//显示所有用户账户信息
showAllAccount();
break;
default:
System.out.println("没有该操作!!!");
}
}
}
//完成用户开户操作
private void createAccount(){
System.out.println("===欢迎进行用户开户===");
//1.创建一个账户对象
Account account = new Account();
//2.添加用户信息
System.out.println("请输入用户姓名:");
String userName = sc.next();
account.setUserName(userName);
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 passWord = sc.next();
System.out.println("请输入确认密码:");
String okPassWord = sc.next();
if(okPassWord.equals(passWord)){
account.setPassWord(okPassWord);
break;
}else{
System.out.println("两次输入的密码不相同!!!");
}
}
System.out.println("请输入每次取现额度:");
double limit = sc.nextDouble();
account.setLimit(limit);
//3.系统生成随机8位卡号并且不重复
account.setIdCard(createIdCard());
System.out.println("尊敬的"+account.getUserName()+"您的卡号是:"+account.getIdCard());
//4.将账户添加到ATM机中
accounts.add(account);
}
//生成随机8位卡号
private String createIdCard(){
while (true) {
String idCard = "";
Random random = new Random();
for (int i = 0; i < 8; i++) {
idCard += random.nextInt(10);
}
Account account = getAccountByIdCard(idCard);
//账户不存在,返回卡号
if (account == null) {
return idCard;
} else {
System.out.println("该卡号已存在!!!");
}
}
}
//返回一个账户对象(卡号不重复)
private Account getAccountByIdCard(String idCard){
//1.遍历账户集合,返回对应卡号的账户
Account account = new Account();
for (int i = 0; i < accounts.size(); i++) {
account = accounts.get(i);
if(account.getIdCard().equals(idCard)) {
return accounts.get(i);
}
}
//2.反之,返回空账户
return null;
}
//用户登录
private void logic(){
while (true) {
System.out.println("=====登录系统=====");
if (accounts.size()==0){
System.out.println("当前系统没有账户!!!");
return;
}else{
while (true) {
System.out.println("请输入卡号:");
String idCard = sc.next();
Account account = getAccountByIdCard(idCard);
while (true) {
if (account==null){
System.out.println("卡号不正确!!!");
break;
}else{
while (true) {
System.out.println("请输入账户密码:");
String passWord = sc.next();
if (account.getPassWord().equals(passWord)){
System.out.println("恭喜你"+account.getUserName()+"登陆成功!!!"+"你的卡号是:"+account.getIdCard());
logicAccount = account;
showUserCommand();
return;
}
else{
System.out.println("密码不正确!!!");
break;
}
}
}
}
}
}
}
}
//用户操作页
private void showUserCommand(){
while (true) {
System.out.println("=====用户功能菜单=====");
System.out.println(logicAccount.getUserName()+"您可以选择如下功能!!!");
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、注销当前账户");
int command = sc.nextInt();
switch (command){
case 1 :
//查询账户
showLogicAccount();
break;
case 2 :
//存款
depositMoney();
break;
case 3 :
//取款
drawMoney();
break;
case 4 :
//转账
transferMoney();
break;
case 5 :
//密码修改
upDataPassword();
return;
case 6 :
//退出
System.out.println(logicAccount.getUserName()+"您已退出系统!!!");
return;
case 7 :
//注销当前账户
if (deleteAccount()){
return;
}else {
break;
}
default:
System.out.println("输入的命令错误!!!");
}
}
}
//修改密码
private void upDataPassword() {
while (true) {
System.out.println("=====修改密码=====");
System.out.println("请输入密码:");
String passWord = sc.next();
if (passWord.equals(logicAccount.getPassWord())){
while (true) {
//认证成功
System.out.println("请输入新密码:");
String newPassWord = sc.next();
System.out.println("请再次输入新密码:");
String okPassWord = sc.next();
if (newPassWord.equals(okPassWord)){
//两次密码相同
logicAccount.setPassWord(okPassWord);
System.out.println("恭喜成功修改密码!!!");
return;
}else {
System.out.println("两次输入的密码不相同!!!");
}
}
}else {
System.out.println("输入的密码不正确!!!");
return;
}
}
}
//销户
private boolean deleteAccount() {
while (true) {
System.out.println("=====销户操作=====");
System.out.println("是否要注销账户Y/N");
String command = sc.next();
switch (command){
case "Y":
//确定销户
if (logicAccount.getMoney()==0){
//允许销户
accounts.remove(logicAccount);
System.out.println("销户成功!!!");
return true;
}else {
System.out.println("账户内有现金"+logicAccount.getMoney()+"元不允许销户!!!");
return false;
}
case "N":
//不销户
return false;
}
}
}
//转账(转钱给自己本质上钱不会发生变化)
private void transferMoney() {
System.out.println("=====转账操作=====");
if (logicAccount.getMoney()<0.01){
System.out.println("抱歉您的余额不足!!!");
return;
}
if (accounts.size()<2){
System.out.println("抱歉您目前是ATM系统唯一的账户,无法为其他账户转账!!!");
return;
}
//余额足够且ATM系统账户数足够,可以进行转账操作
while (true) {
System.out.println("请输入对方的卡号:");
String idCard = sc.next();
Account account = getAccountByIdCard(idCard);
if(account == null){
System.out.println("该账户不存在!!!");
break;
}else {
//账号存在
System.out.println("请输入该账户户主 "+"*"+account.getUserName().substring(1)+"的姓氏:");
String preName = sc.next();
if (account.getUserName().startsWith(preName)){
//可以转账
while (true) {
System.out.println("请输入转账金额:");
double money = sc.nextDouble();
if (logicAccount.getMoney()>=money){
//金额足够
//转账人的账户金额变化
logicAccount.setMoney(logicAccount.getMoney()-money);
System.out.println("您转账"+money+"元,账户余额为"+logicAccount.getMoney()+"元");
//被转账人的账户金额变化
account.setMoney(account.getMoney()+money);
return;
}else {
System.out.println("您的余额不足为"+logicAccount.getMoney());
}
}
}else {
System.out.println("您输入的姓氏错误!!!");
break;
}
}
}
}
//取钱
private void drawMoney() {
System.out.println("=====欢迎取钱=====");
if (logicAccount.getMoney() < 100){
System.out.println("您的余额不足!!!");
return;
}else{
//余额足够
while (true) {
System.out.println("请输入你的取款金额:");
double money = sc.nextDouble();
if (money > logicAccount.getLimit()){
System.out.println("取款金额大于取款限额!!!");
}else{
logicAccount.setMoney(logicAccount.getMoney()-money);
System.out.println("恭喜您取钱成功,账户余额为"+logicAccount.getMoney());
return;
}
}
}
}
//存钱
private void depositMoney() {
System.out.println("=====欢迎存钱=====");
System.out.println("请输入存款金额:");
double money = sc.nextDouble();
logicAccount.setMoney(logicAccount.getMoney()+money);
System.out.println("恭喜您存钱成功,账户余额为"+logicAccount.getMoney());
}
//查询账户-登录用户
private void showLogicAccount(){
System.out.println("=====当前你的账户信息如下=====");
System.out.println("卡号:"+logicAccount.getIdCard());
System.out.println("户主:"+logicAccount.getUserName());
System.out.println("性别:"+logicAccount.getSex());
System.out.println("余额:"+logicAccount.getMoney());
System.out.println("每次取现额度:"+logicAccount.getLimit());
}
//显示当前所有账户信息
private void showAllAccount(){
if (accounts.size()==0){
System.out.println("目前没有账户!!!");
return;
}
System.out.println("=====显示所有用户信息=====");
for (int i = 0; i < accounts.size(); i++) {
System.out.println("户主:"+accounts.get(i).getUserName());
System.out.println("性别:"+accounts.get(i).getSex());
System.out.println("卡号:"+accounts.get(i).getIdCard());
System.out.println("密码:"+accounts.get(i).getPassWord());
System.out.println("余额: "+accounts.get(i).getMoney());
System.out.println("每次取现限额:"+accounts.get(i).getLimit());
System.out.println("=================================");
}
}
}
Test
package com.item.huang;
/*系统架构搭建:
* 1.定义一个账户类Account类,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度)
* 2.定义一个ATM类,用来代表ATM系统,负责提供所有的业务需求,比如:展示ATM的系统欢迎页、开通账户、转账...)
* 3.定义一个测试类,负责对我们开发的ATM系统进行测试。
*
* 1.系统欢迎页设计:在ATM类中设计一个方法start(),方法里负责展示欢迎界面。
* 2.用户开户功能:新增一个账户,也就是往系统的账户集合中添加一个账户对象
* 账户的要求:用户信息包含:姓名、性别、密码、每次取现额度、卡号(由系统生成,要求是8位的数字组成且卡号不能重复)
* 3.用户登录功能:
* 如果系统没有任何账户对象,则不允许登录。
* 让用户输入登录的卡号,先判断卡号是否则正确,如果不正确要给出提示。
* 如果卡号正确,在让用户输入账户密码,如果密码不正确要给出提示,如果密码也正确,则给出登录成功的提示。
* 需要设计一个返回一个账户对象(卡号不重复)功能和生成随机8位卡号功能
* 4.用户操作页设计、查询账户、退出账户功能(在ATM类增加一个登录成功账户)
* 用户登录成功后,需要进入用户操作页
* 查询就是直接展示当前登陆成功的用户的账户信息
* 退出账户就是回到欢迎页面
* 5.用户存钱功能:用户为自己的账户存钱,存钱后更新账户的余额
* 6.用户取钱功能:
* 需要先判断账户的余额是否>=100,如果够,让用户输入取款金额
* 需要判断取款金额是否超过了当次限额,以及余额是否足够
* 7.用户转账功能:
* 把钱转给别人,转账前需要判断:
* 自己账户是否有钱,系统中是否有其他账户
* 接下来让用户输入对方卡号,判断对方账户是否存在,账户如果存在,还需要认证对方账户的户主姓氏
* 8.注销操作功能:
* 首先询问用户是否要注销账户,如果不确定,则回到操作界面
* 如果确定,要判断用户的账户中是否有钱,有则不允许销户,并回到操作界面
* 如果没钱,则完成销户,并回到欢迎页
* 9.密码修改功能:
* 认证用户当前密码
* 认证通过后,需要让用户输入2次新密码
* 两次密码一样,则更新账户密码,并回到欢迎页面
*/
public class Test {
public static void main(String[] args) {
//1.创建一个ATM对象,代表ATM系统
ATM atm = new ATM();
//2.调用ATM对象的start方法,启动系统
atm.start();
}
}
标签:return,账户,ATM,系统,System,println,设计,logicAccount,out
From: https://www.cnblogs.com/qingandji/p/18100575