JAVA基础的ATM机存款项目
定义一些ATM机中会运用到的基本元素
package NEW;
public class Account {
private String userName;//用户名
private String passWord;//账户密码
private String ueserId;//卡号
private char sex;//用户性别
private double limit;//限额
private double money;//余额
public double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
public char getSex() {
return this.sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getUserName() {
return userName+(sex == '男' ? "先生" : "女士");
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getUeserId() {
return ueserId;
}
public void setUeserId(String ueserId) {
this.ueserId = ueserId;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
支撑ATM机实现各种功能的方法
package NEW;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
private Account loginac;//记录登录后的用户账户
public void start() {
while (true) {
System.out.println("==========欢迎进入ATM系统==========");
System.out.println("1.用户登录");
System.out.println("2.用户开户");
System.out.println("请选择");
int command = sc.nextInt();//单值,考虑运用switch循环
switch (command) {
case 1:
//用户登录
login();
break;
case 2:
//用户开户
createAccount();
break;
default:
System.out.println("无该操作");//用while循环去重置该界面
break;
}
}
}
/*账户登录操作*/
private void login(){
System.out.println("====系统登录====");
//判断系统之中是否有对象
if(accounts.size()==0){
System.out.println("当前系统中无任何账户,请先注册");
return;
}
//存在对象,开始登录进程
while(true){
System.out.println("请输入您的登录卡号");
String cardId = sc.next();
Account acc = getAccountByCardId(cardId);
if(acc==null){
//该卡号不存在
System.out.println("您的卡号输入错误,请确认");
}else{
while (true) {
//卡号存在,让用户输入密码
System.out.println("请输入您的账号密码");
String password = sc.next();
//判断密码是否正确
if(acc.getPassWord().equals(password)){
loginac = acc;
//密码正确,登录成功
System.out.println("恭喜您"+acc.getUserName()+"登录成功"+"您的卡号是"+acc.getUeserId());
//展示登录后的操作界面
showUserCommand();
return;
}else{
System.out.println("您的密码输入错误,请确认");
}
}
}
}
}
/**展示登录后的操作界面*/
private void showUserCommand(){
while (true) {
System.out.println(loginac.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:
//查账户
showLoginAccount();
break;
case 2:
//取款
drawMoney();
break;
case 3:
//转账
tranforMoney();
break;
case 4:
//存款
depositMoney();
break;
case 5:
// 密码修改
updatePassWord();
break;
case 6:
//退出
System.out.println(loginac.getUserName()+"您退出系统成功!");
return;
case 7:
//注销账户
if(delectAccount()){
//销户成功,返回欢迎界面
return;
}
break;
default:
System.out.println("您的输入错误,请确认");
}
}
}
/**更改账户密码*/
private void updatePassWord() {
System.out.println("=====密码修改操作=====");
while (true) {
//让用户认证当前密码
System.out.println("请输入当前账号密码");
String passWord = sc.next();
if(passWord.equals(loginac.getPassWord())){
System.out.println("认证通过");
System.out.println("请您输入新密码");
String newPassWord = sc.next();
System.out.println("请您在一次确认您的新密码");
String confirmPassWord = sc.next();
if(newPassWord.equals(confirmPassWord)){
loginac.setPassWord(newPassWord);
System.out.println("密码修改成功");
break;
}else{
System.out.println("您的新密码两次输入不一致,修改失败,请确认");
}
}else{
System.out.println("您的密码错误,请确认");
}
//询问用户是否继续修改密码
System.out.println("您是否继续修改密码:Y/N");
String c = sc.next();
if(!"Y".equalsIgnoreCase(c)){
break;
}
}
}
/**销户*/
//销户这个操作执行到最后实际上是返回一个销户成功或失败的结果,所以这个方法的返回值应设置为boolean
private boolean delectAccount() {
System.out.println("=====销户操作=====");
System.out.println("请您确定要进行对这个账户的销户:Y/N");
String command = sc.next();
switch (command) {
case "Y":
//确认要销户
//进一步确认该账户中是否有钱,有钱则无法销户
if(loginac.getMoney()==0){
//符合销户标准,进行销户
accounts.remove(loginac);
System.out.println("您已成功销户");
return true;
}else{
System.out.println("您的账户中存在余额,无法销户");
return false;
}
default:
System.out.println("您的账户保留");
return false;
}
}
/**转账*/
private void tranforMoney() {
System.out.println("=====转账操作=====");
//首先要判断转账的两个前提
//1.系统里是否有两及个以上的账户,起码有两个才能相互转账
//2.转账出去的那个账户是否有余额
if(accounts.size()<2){
System.out.println("当前系统中只有您一个账户,无法转账,请确认");
return;
}
if(loginac.getMoney()==0){
System.out.println("您的账户中没有余额,请确认");
return;
}
while (true) {
//正式开始转账
System.out.println("请您输入对方的卡号:");
String cardId = sc.next();
//判断这个卡号是否正确
Account acc = getAccountByCardId(cardId);
if(acc==null){
System.out.println("对方的卡号不存在");
}else{
//对方的账户存在,进行姓氏认证
String name ="*"+acc.getUserName().substring(1);
//substring是用来将*与用户名的第一个字发生替换的
System.out.println("请您输入【"+name+"】:");
String personName = sc.next();
//判断该姓氏是否正确
if(acc.getUserName().startsWith(personName)){
while (true) {
//认证通过,开始转账
System.out.println("请输入您的转账金额:");
double money = sc.nextDouble();
//判断该金额是否超过了自己的余额,即是否转的起
if(loginac.getMoney()>=money){
//够的话就开始更新双方的账号余额信息了
//自己的
loginac.setMoney(acc.getMoney()-money);
//对方的
acc.setMoney(acc.getMoney()+money);
System.out.println("您的余额为:"+acc.getMoney());
return;//跳出转账方法
}else{
System.out.println("您的余额不足,请确认,您最多能转:"+loginac.getMoney());
}
}
}else{
System.out.println("您的认证错误,请确认");
}
}
}
}
private void drawMoney() {
System.out.println("=====取钱操作=====");
//判断当前余额是否大于100,小于100则无法取出
if(loginac.getMoney()<100){
System.out.println("您的存款金额不足100元,无法取出");
return;
}
//大于100可以取钱,让用户输入取款金额
while (true) {
System.out.println("请输入您的取款金额:");
double money = sc.nextDouble();
//判断余额是否充足
if(money<loginac.getMoney()){
//当前余额充足
//还要判断是否超过了单次的取款限额,即再嵌套一个if循环
if(money>loginac.getLimit()){
System.out.println("您此次的取款超过了单次的限额,您的限额为:"+loginac.getLimit());
}else{
//若都满足要求,则正式开始取钱,即更新账户内的余额
loginac.setMoney(loginac.getMoney()-money);
System.out.println("您取款:"+money+"\n"+"取款之后您的余额为"+loginac.getMoney());
break;
}
}else{
//余额不足
System.out.println("您的余额不足,您的余额为:"+loginac.getMoney());
}
}
}
/**存钱*/
private void depositMoney() {
System.out.println("======存钱操作======");
System.out.println("请输入您的存款金额:");
double money = sc.nextDouble();
//之后更新账户的余额
loginac.setMoney(money+loginac.getMoney());
System.out.println("恭喜您,您此次存钱:"+money+"您存钱之后的总额为"+loginac.getMoney());
}
/**展现账户登录信息*/
private void showLoginAccount(){
System.out.println("您的账号信息如下");
System.out.println("姓名"+loginac.getUserName());
System.out.println("存款"+loginac.getMoney());
System.out.println("卡号"+loginac.getUeserId());
System.out.println("性别"+loginac.getSex());
System.out.println("单次限额"+loginac.getLimit());
}
/**账户开户操作 */
public void createAccount() {
System.out.println("=====开户操作=====");
Account acc = new Account();
System.out.println("请输入您的姓名");
String name = sc.next();
acc.setUserName(name);
while (true) {
System.out.println("请输入你的性别");
char sex = sc.next().charAt(0);//charAT的作用是获取输入的字符串的第一位因为没有提供nextchar方法
if (sex == '男' || sex == '女') {
acc.setSex(sex);
break;
} else {
System.out.println("您的操作错误,请重新输入");
}
}
while (true) {
System.out.println("请输入您的账户密码:");
String password = sc.next();
System.out.println("请再次输入密码确认");
String okpassword = sc.next();
if (password.equals(okpassword)) {
acc.setPassWord(okpassword);
break;
} else {
System.out.println("您的两次密码输入不一致,请确认");
}
}
System.out.println("请输入您的限额:");
double limit = sc.nextDouble();
acc.setLimit(limit);
//重难点:为这个账户生成一个卡号,且不能与其他以存在的账户卡号重复
String newCard = creatCardId();
acc.setUeserId(newCard);
accounts.add(acc);
System.out.println("恭喜您" + acc.getUserName() + "开户成功"+"您的卡号是"+acc.getUeserId());
}
/*返回一个8位数的卡号,并且不能与其他账户的卡号重复*/
//1.首先定义一个String类型的变量去记住8个数字作为一个卡号
private String creatCardId() {
while (true) {
String cardId = "";
//2.使用循环随机生成8个数字作为新生成的卡号
Random r = new Random();
for (int i = 0; i < 8; i++) {
int date = r.nextInt(10);//0~9
cardId += date;
}
//3.对上一步中产生的卡号进行判断,是否与其他账户重复了
Account acc = getAccountByCardId(cardId);
if(acc == null){
return cardId;
}
}
}
//根据卡号查询账户对象返回
private Account getAccountByCardId(String cardId) {
//遍历全部账户对象的卡号
for (int i = 0; i <accounts.size(); i++) {
Account acc = accounts.get(i);//逐个取出accounts集合里的账户集合,方便后续对比卡号
//判断这个账户对象acc中的卡号是否符合不重复的要求
if(acc.getUeserId().equals(cardId)){
return acc;
}
}
return null;//查无此号,即这个卡号再已有的账户卡号之中并不重复
}
}
测试能否正常执行
package NEW;
public class Test {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}

浙公网安备 33010602011771号