Day09_ATM系统
技术选型分析
- 面向对象编程
- 使用集合容器
- 程序流程控制
1、系统准备
- 每个用户的账户信息都是一个对象,需要提供账户类
- 需要准备一个容器,用于存储系统全部账户
- 首页只需要包含登录和注册两个功能
容器对象
package com.it.ATMOs;
public class Account {
private String card; //ID号
private String name;//用户名
private double balance; //余额
private double money; //限额
private String password;//密码
public Account() {
}
public Account(String card,String name, String password,double money,double balance) {
this.card = card;
this.password = password;
this.money = money;
this.name = name;
this.balance = balance;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
首页设计
public static void main(String[] args) {
//系统准备与首页设计
ArrayList<Account> accounts = new ArrayList<>();
//设置一个初始账号
accounts.add(new Account("12345678", "admin", "1234", 4000, 0));
accounts.add(new Account("12345679", "admin", "1234", 4000, 0));
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("======欢迎您进入it银行系统======" +
"\n1.登录用户" + "\n2.注册开户" + "\n请输入命令1、2选择对应的操作");
String select = scanner.next();
switch (select) {
case "1":
login(accounts);
break;
case "2":
register(accounts);
for (Account account : accounts) {
System.out.println("卡号为:" + account.getCard() + " 用户名为:" + account.getName() + " 密码为" + account.getPassword() + " ");
}
break;
}
}
2、开户功能实现
- 开户功能就是往系统的集合容器中存入一个新的账户对象
register方法
//注册方法
private static void register(ArrayList<Account> accounts) {
boolean flag = true;
Scanner scanner = new Scanner(System.in);
String name = "", password = "", temp_pw, card = "";
double money = 0;
while (flag) {
System.out.println("======欢迎您进入黑马银行用户办卡界面======");
System.out.println("请输入您的用户名");
name = scanner.next();
System.out.println("请输入您的密码");
password = scanner.next();
System.out.println("请确认您的密码");
temp_pw = scanner.next();
if (!temp_pw.equals(password)) { //判断前后密码是否相同
System.out.println("前后密码不一致");
continue;
}
System.out.println("请设置取现额度:");
money = Double.parseDouble(scanner.next());
System.out.println("账号注册成功!!!");
flag = false;
}
card = getCard(accounts);
accounts.add(new Account(card, name, password, money, 0));
}
判断卡号是否已存在的代码
//判断已注册账号中是否存在该卡号,返回布尔值
private static int judgeIn(ArrayList<Account> accounts, String card) {
for (int i = 0; i < accounts.size(); i++) {
if (card.equals(accounts.get(i).getCard())) {
return i;
}
}
return -1;
}
随机生成卡号的代码
//通过随机生成的数字产生卡号,并且判断该卡号是否已存在
private static String getCard(ArrayList<Account> accounts) {
Random random = new Random();
String Numbers = "1234567890";
String card;
while (true) {
card = "";
for (int i = 0; i < 8; i++) {
card += Numbers.charAt(random.nextInt(10));
}
if (!(judgeIn(accounts, card)>=0)) {
return card;
}
}
}
3、登录系统功能实现
// 登录方法
private static void login(ArrayList<Account> accounts) {
Scanner scanner = new Scanner(System.in);
String card="",password="";
boolean flag = true;
while(flag){
System.out.println("======it银行登录页面======");
System.out.println("请输入您的卡号");
card = scanner.next();
if (judgeIn(accounts,card)>=0){ //判断卡号是否存在
System.out.println("请输入您的密码:");
password = scanner.next();
for (int i = 0; i < accounts.size(); i++) { //通过循环判断卡号和密码是否相等
if (accounts.get(i).getCard().equals(card)&&accounts.get(i).getPassword().equals(password)){
flag = false;
System.out.println("登录成功!!!");
System.out.println(accounts.get(i).getName() + ",欢迎你登录ItATM系统,您的卡号是:" + accounts.get(i).getCard());
//进入登录操作页面
userPage(accounts.get(i), accounts);
}
}
if (flag){
System.out.println("密码错误");
continue; //如果密码错误就进入下一个循环
}
}else{
System.out.println("卡号并不存在!!");
}
}
}
4、用户操作页面设计
用户操作页面
//用户操作页面
private static void userPage(Account account, ArrayList<Account> accounts) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("======欢迎您进入IT银行用户操作界面======");
System.out.println("1、查询;\n2、存款\n3、取款;\n4、转账;\n5、修改密码;\n6、退出;\n7、注销账号;\n请从中选择你所要进行的业务");
String select = scanner.next();
switch (select) {
case "1":
find(account);
break;
case "2":
addMoney(account);
break;
case "3":
withDraw(account);
break;
case "4":
transaction(account,accounts);
break;
case "5":
alterPassword(account);
break;
case "6": //退出功能的实现
System.out.println("退出成功!!!");
return ;
case "7": //注销功能的实现
accounts.remove(account);
System.out.println("注销成功!!!");
return;
}
}
}
查询账户
//查询个人用户
private static void find(Account account) {
System.out.println("用户名:" + account.getName() +
"\n卡号" + account.getCard() +
"\n密码:" + account.getPassword() +
"\n额度:" + account.getMoney() +
"\n余额:" + account.getBalance());
}
查询账户
//查询个人用户
private static void find(Account account) {
System.out.println("用户名:" + account.getName() +
"\n卡号" + account.getCard() +
"\n密码:" + account.getPassword() +
"\n额度:" + account.getMoney() +
"\n余额:" + account.getBalance());
}
5、存款功能的实现
//存款
private static void addMoney(Account account) {
Scanner scanner = new Scanner(System.in);
System.out.println("请将存款的金额放入:");
double money = scanner.nextDouble();
account.setBalance(money);
}
6、取款功能的实现
//取款
private static void withDraw(Account account) {
Scanner scanner = new Scanner(System.in);
System.out.println("请设置取出的金额:");
double money = scanner.nextDouble();
if (money <= account.getMoney() && money <= account.getBalance()) {
account.setBalance(account.getBalance() - money);
account.setMoney(account.getMoney()-money);
System.out.println("取款" + money + "成功");
}else if(money >= account.getBalance()){
System.out.println("取款失败,金额不足!!!");
System.out.println("余额只剩"+account.getBalance());
}else {
System.out.println("超过额度");
System.out.println("额度只剩" + account.getMoney());
}
}
7、转账功能的实现
//转账
private static void transaction(Account account, ArrayList<Account> accounts) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入转账的用户:");
String userCard = scanner.next();
int index = judgeIn(accounts,userCard);
if(index >=0){
System.out.println("请设置转账的的金额:");
double money = scanner.nextDouble();
if (money <= account.getMoney() && money <= account.getBalance()) {
account.setBalance(account.getBalance() - money);
account.setMoney(account.getMoney()-money);
accounts.get(index).setBalance(accounts.get(index).getBalance()+money);
System.out.println("转账" + money + "成功");
}else if(money >= account.getBalance()){
System.out.println("转账失败,金额不足!!!");
System.out.println("余额只剩"+account.getBalance());
}else {
System.out.println("超过额度");
System.out.println("额度只剩" + account.getMoney());
}
}else{
System.out.println("用户不存在");
}
}
代码汇总
Os类
package com.it.ATMOs;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Os {
public static void main(String[] args) {
//系统准备与首页设计
ArrayList<Account> accounts = new ArrayList<>();
//设置一个初始账号
accounts.add(new Account("12345678", "admin", "1234", 4000, 0));
accounts.add(new Account("12345679", "admin", "1234", 4000, 0));
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("======欢迎您进入it银行系统======" +
"\n1.登录用户" + "\n2.注册开户" + "\n请输入命令1、2选择对应的操作");
String select = scanner.next();
switch (select) {
case "1":
login(accounts);
break;
case "2":
register(accounts);
for (Account account : accounts) {
System.out.println("卡号为:" + account.getCard() + " 用户名为:" + account.getName() + " 密码为" + account.getPassword() + " ");
}
break;
}
}
}
// 登录方法
private static void login(ArrayList<Account> accounts) {
Scanner scanner = new Scanner(System.in);
String card="",password="";
boolean flag = true;
while(flag){
System.out.println("======it银行登录页面======");
System.out.println("请输入您的卡号");
card = scanner.next();
if (judgeIn(accounts,card)>=0){ //判断卡号是否存在
System.out.println("请输入您的密码:");
password = scanner.next();
for (int i = 0; i < accounts.size(); i++) { //通过循环判断卡号和密码是否相等
if (accounts.get(i).getCard().equals(card)&&accounts.get(i).getPassword().equals(password)){
flag = false;
System.out.println("登录成功!!!");
System.out.println(accounts.get(i).getName() + ",欢迎你登录ItATM系统,您的卡号是:" + accounts.get(i).getCard());
//进入登录操作页面
userPage(accounts.get(i), accounts);
}
}
if (flag){
System.out.println("密码错误");
continue; //如果密码错误就进入下一个循环
}
}else{
System.out.println("卡号并不存在!!");
}
}
}
//用户操作页面
private static void userPage(Account account, ArrayList<Account> accounts) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("======欢迎您进入IT银行用户操作界面======");
System.out.println("1、查询;\n2、存款\n3、取款;\n4、转账;\n5、修改密码;\n6、退出;\n7、注销账号;\n请从中选择你所要进行的业务");
String select = scanner.next();
switch (select) {
case "1":
find(account);
break;
case "2":
addMoney(account);
break;
case "3":
withDraw(account);
break;
case "4":
transaction(account,accounts);
break;
case "5":
alterPassword(account);
break;
case "6":
System.out.println("退出成功!!!");
return ;
case "7":
accounts.remove(account);
System.out.println("注销成功!!!");
return;
}
}
}
//修改密码
private static void alterPassword(Account account) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入旧密码:");
String oldPassword = scanner.next();
if (oldPassword.equals(account.getPassword())){
System.out.println("请设置新密码:");
String newPassword = scanner.next();
account.setPassword(newPassword);
}else{
System.out.println("密码错误!!!");
}
}
//转账
private static void transaction(Account account, ArrayList<Account> accounts) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入转账的用户:");
String userCard = scanner.next();
int index = judgeIn(accounts,userCard);
if(index >=0){
System.out.println("请设置转账的的金额:");
double money = scanner.nextDouble();
if (money <= account.getMoney() && money <= account.getBalance()) {
account.setBalance(account.getBalance() - money);
account.setMoney(account.getMoney()-money);
accounts.get(index).setBalance(accounts.get(index).getBalance()+money);
System.out.println("转账" + money + "成功");
}else if(money >= account.getBalance()){
System.out.println("转账失败,金额不足!!!");
System.out.println("余额只剩"+account.getBalance());
}else {
System.out.println("超过额度");
System.out.println("额度只剩" + account.getMoney());
}
}else{
System.out.println("用户不存在");
}
}
//取款
private static void withDraw(Account account) {
Scanner scanner = new Scanner(System.in);
System.out.println("请设置取出的金额:");
double money = scanner.nextDouble();
if (money <= account.getMoney() && money <= account.getBalance()) {
account.setBalance(account.getBalance() - money);
account.setMoney(account.getMoney()-money);
System.out.println("取款" + money + "成功");
}else if(money >= account.getBalance()){
System.out.println("取款失败,金额不足!!!");
System.out.println("余额只剩"+account.getBalance());
}else {
System.out.println("超过额度");
System.out.println("额度只剩" + account.getMoney());
}
}
//存款
private static void addMoney(Account account) {
Scanner scanner = new Scanner(System.in);
System.out.println("请将存款的金额放入:");
double money = scanner.nextDouble();
account.setBalance(money);
}
//查询个人用户
private static void find(Account account) {
System.out.println("用户名:" + account.getName() +
"\n卡号" + account.getCard() +
"\n密码:" + account.getPassword() +
"\n额度:" + account.getMoney() +
"\n余额:" + account.getBalance());
}
//注册方法
private static void register(ArrayList<Account> accounts) {
boolean flag = true;
Scanner scanner = new Scanner(System.in);
String name = "", password = "", temp_pw, card = "";
double money = 0;
while (flag) {
System.out.println("======欢迎您进入黑马银行用户办卡界面======");
System.out.println("请输入您的用户名");
name = scanner.next();
System.out.println("请输入您的密码");
password = scanner.next();
System.out.println("请确认您的密码");
temp_pw = scanner.next();
if (!temp_pw.equals(password)) { //判断前后密码是否相同
System.out.println("前后密码不一致");
continue;
}
System.out.println("请设置取现额度:");
money = Double.parseDouble(scanner.next());
System.out.println("账号注册成功!!!");
flag = false;
}
card = getCard(accounts);
accounts.add(new Account(card, name, password, money, 0));
}
//通过随机生成的数字产生卡号,并且判断该卡号是否已存在
private static String getCard(ArrayList<Account> accounts) {
Random random = new Random();
String Numbers = "1234567890";
String card;
while (true) {
card = "";
for (int i = 0; i < 8; i++) {
card += Numbers.charAt(random.nextInt(10));
}
if (!(judgeIn(accounts, card)>=0)) {
return card;
}
}
}
//判断已注册账号中是否存在该卡号,返回布尔值
private static int judgeIn(ArrayList<Account> accounts, String card) {
for (int i = 0; i < accounts.size(); i++) {
if (card.equals(accounts.get(i).getCard())) {
return i;
}
}
return -1;
}
}
Account类
public Account() {
}
public Account(String card,String name, String password,double money,double balance) {
this.card = card;
this.password = password;
this.money = money;
this.name = name;
this.balance = balance;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}