简单面向对象课程落实ATM开发中:
一、实体类Account的建立,存储账户信息
package com.itheima.atm;
//实体类:账户类,存储数据
public class Account {
private String id;//卡号
private String name;//姓名
private char sex;//性别
private String password;//密码
private double money;//余额
private double limit;//取现额度
public Account() {
}
public Account(String id, String name, char sex, String password, double money, double limit) {
this.id = id;
this.name = name;
this.sex = sex;
this.password = password;
this.money = money;
this.limit = limit;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
if (getSex() == '男') {
return (name + "先生");
}else {
return (name + "女士");
}
}
public void setName(String name) {
this.name = name;
}
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.itheima.atm;
//操作类:处理数据,开户、存款、取款、转账。。。。。
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
private ArrayList<Account> list = new ArrayList<>();
private Scanner sc = new Scanner(System.in);
Account loginAcc ;
//定义方法,实现系统欢迎界面
public void startATM(){
while (true){
System.out.println("==欢迎进入ATM系统==");
System.out.println("1,用户登录 2,用户开户");
int num = sc.nextInt();
switch (num){
case 1:
login();
break;
case 2:
createAcc();
break;
default:
System.out.println("输入有误,请重新输入:");
}
}
}
//定义方法,实现开户界面
public void createAcc(){
System.out.println("==欢迎进入开户界面==");
//1.输入合法名字
System.out.println("请输入姓名:");
String name = sc.next();
//2.输入合法性别
char sex;
while (true) {
System.out.println("请输入性别:");
String sexStr = sc.next();
sex = sexStr.charAt(0);
if (sex != '男' && sex != '女'){
System.out.println("输入性别有误,请重新输入!");
}else {
break;
}
}
//3.输入合法密码
String password1;
while (true) {
System.out.println("请输入密码:");
password1 = sc.next();
System.out.println("请输入确认密码:");
String password2 = sc.next();
if (password1.equals(password2)){
break;
}else {
System.out.println("输入密码有误,请重新输入!");
}
}
//4.输入合法取款额度
double limit;
while (true) {
System.out.println("请输入取款额度:");
limit = sc.nextDouble();
if (limit > 0){
break;
}else {
System.out.println("输入取款额度有误,请重新输入!");
}
}
//5.生成卡号,判断卡号不能重复
String id = createId();
//6.将所有对象储存在账户对象中
Account acc = new Account();
acc.setName(name);
acc.setSex(sex);
acc.setPassword(password1);
acc.setLimit(limit);
acc.setId(id);
//7.将账户对象添加到集合容器
list.add(acc);
System.out.println("恭喜您" + acc.getName() + "开户成功,您的卡号是:" + acc.getId());
}
//定义方法,随机生成id
public String createId(){
Random ra = new Random();
String id = "";
while (true) {
for (int i = 0; i < 8; i++) {
int num = ra.nextInt(10);
id += num;
}
Account acc = showXT(id);
if (acc == null){
break;
}
}
return id;
}
//定义方法,判断id是否有重复
public Account showXT(String id){
for (int i = 0; i < list.size(); i++) {
String idd = list.get(i).getId();
if (idd.equals(id)){
return list.get(i);
}
}
//没有重复的返回null
return null;
}
//定义方法。实现登录界面
public void login(){
if (list.size() == 0){//当集合没有数据时
return;
}
Account acc;
while (true) {
System.out.println("请输入卡号");
String id = sc.next();
acc = showXT(id);//引用方法判断所输入的id是否在集合中存在
if (acc == null){
System.out.println("输入的卡号不存在,请重新输入");
}else {
break;
}
}
while (true) {
System.out.println("请输入密码");
String password = sc.next();
if (password.equals(acc.getPassword())){//判断输入密码是否和对象属性中的密码一致
System.out.println("恭喜您" + acc.getName() + ",欢迎进入,您的卡号是:" + acc.getId());
loginAcc = acc;//将得到的acc对象赋值在新定义的loginAcc对象上
loginSuccess();//引用方法进入登录选择界面
break;
}else {
System.out.println("您输入的密码有误请重新输入");
}
}
}
//定义方法,实现登录成功后的界面
public void loginSuccess(){
System.out.println("==欢迎您进入登录成功后的界面==");
System.out.println("1.查询账户 , 2.存款, 3.取款, 4.转账, 5.修改密码, 6.退出, 7.注销账户");
int num = sc.nextInt();
switch (num){
case 1:
shwLoginAcc();//引用shwLoginAcc方法,展示账户信息
break;
case 2:
cunMoney();
break;
case 3:
quMoney();
break;
case 4:
zhuanMoney();
break;
case 5:
gPassWord();
return;
case 6:
System.out.println("欢迎您使用,再见~");
return;
case 7:
delete();
break;
}
}
//定义方法 ,注销账号
private void delete() {
System.out.println("是否要注销账号");
System.out.println("1.是 2.否");
int num = sc.nextInt();
switch (num) {
case 1:
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getId() == loginAcc.getId()) {
list.remove(i);
}
}
System.out.println("注销账号成功");
break;
case 2:
return;
}
}
//定义方法,实现修改密码
private void gPassWord() {
while (true) {
System.out.println("请输入新密码");
String passWord = sc.next();
if (passWord != loginAcc.getPassword()){
loginAcc.setPassword(passWord);
System.out.println("密码更改成功,请重新登录!");
return;
}else {
System.out.println("新密码与原密码一直,请重新更改密码");
}
}
}
//定义方法,实现转账
private void zhuanMoney() {
//1.判断集合中是否超过两个账户
if (list.size() < 2){
System.out.println("系统中账户不足2个,请开户后进行转账");
return;
}
//2,判断余额是否大于零
if (loginAcc.getMoney() == 0){
System.out.println("您的账户没有钱,请存款后进行转账");
return;
}
Account otherAcc;//定义一个变量 来接收另一个对象
while (true) {
System.out.println("请输入转账的卡号");
String otherId = sc.next();
otherAcc = showXT(otherId);
//调用 showXT方法判断需要转账的id是否在集合存在
if (otherAcc == null){
System.out.println("输入的转账卡号不存在,请重新输入!");
}else {
break;
}
}
double zhuanMoney = 0;//定义一个变量存储转账金额
while (true) {
System.out.println("请输入转账金额:");
zhuanMoney = sc.nextDouble();
//盘点转账金额是否小于余额
if (zhuanMoney <= loginAcc.getMoney()){
break;
}else {
System.out.println("输入的转账金额不合法,请重新输入!");
}
}
String name = "*" + otherAcc.getName().substring(1);
while (true) {
System.out.println("请输入转账的账户姓氏【" + name +"】");
String otherName = sc.next();
//判断otherAcc.getName()字符串是否以输入的姓氏开头
if (otherAcc.getName().startsWith(otherName)){
loginAcc.setMoney(loginAcc.getMoney() - zhuanMoney);//loginAcc对象的账户余额
otherAcc.setMoney(otherAcc.getMoney() - zhuanMoney);//otherAcc对象的账户余额
System.out.println("恭喜您,转账成功!您当前的余额是" + loginAcc.getMoney());
break;
}else {
System.out.println("输入的姓氏不合法,请重新输入!");
}
}
}
//定义方法 ,展示账户信息
public void shwLoginAcc() {
System.out.println("账户是:" + loginAcc.getId());
System.out.println("账户是:" + loginAcc.getName());
System.out.println("账户是:" + loginAcc.getSex());
System.out.println("账户是:" + loginAcc.getMoney());
}
//定义方法,实现存款
public void cunMoney(){
double cunMoney = 0;
while (true) {
System.out.println("请输入要存钱的金额");
cunMoney = sc.nextDouble();
//判断存入的钱大于0
if (cunMoney > 0){
break;
}else {
System.out.println("输入的存钱数不合法,请重新输入!");
}
}
//定义一个变量存储存后的余额
double sumMoney = loginAcc.getMoney() + cunMoney;
loginAcc.setMoney(sumMoney);//将数据赋值到当前账户余额中
System.out.println("恭喜您,存款成功!您当前的余额是" + loginAcc.getMoney());
}
//定义方法,取款
public void quMoney(){
if (loginAcc.getMoney() <100){//判断余额是否大于100
System.out.println("你当前的账户余额不足100,请到柜台存款");
return;
}
while (true) {
System.out.println("请输入要取的金额");
double quMoney = sc.nextDouble();
//判断要取的金额是否小于等于限取金额并且小于等于余额并且要大于0
if (quMoney <= loginAcc.getLimit() && quMoney <= loginAcc.getMoney() && quMoney > 0){
double money = loginAcc.getMoney() - quMoney;//定义一个变量存储取后的余额
loginAcc.setMoney(money);//将数据赋值到当前账户余额中
System.out.println("恭喜您,取款成功!您当前的余额是"+ loginAcc.getMoney());
break;
}else {
System.out.println("输入的取钱数不合法,请重新输入!");
}
}
}
}
三、测试类Test的建立,完成系统测试业务
package com.itheima.atm;
//测试类:完成系统业务测试
public class Test {
public static void main(String[] args) {
ATM atm = new ATM();
atm.startATM();
}
}