在JAVA入门学习后进行的项目练习——模拟ATM系统。
目录
1.设计内容和要求
2.代码实现
(1)ATM账号类的定义
(2)ATM类中的操作
(3)操作说明
3.总结
1.设计内容和要求
01 系统架构搭建,欢迎页设计 |
02 开户功能实现 |
03 登录功能实现 |
04 操作页展示,查询账户,退出账户 |
05 存款,取款功能实现 |
06 转账功能实现 |
07 销户功能实现 |
08 用户密码修改 |
2.代码实现
(1)ATM账号类的定义
package ATM;
public class Account {
private String id;
private String name;
private char sex;
private String password;
private double money;
private double limit; //限额
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name + (sex == '男'? "先生":"女士");
}
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;
}
public Account() {
}
}
(2)ATM类中的操作
package ATM;
import javax.accessibility.AccessibleContext;
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;
private void creatAccount(){
System.out.println("==系统开户操作==");
Account account = new Account();
System.out.println("请您输入您的账户名称");
String name = sc.next();
account.setName(name);
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 password1 = sc.next();
if(password.equals(password1)){
account.setPassword(password);
break;
}
else{
System.out.println("您输入的两次密码不相同,请重新输入");
}
}
System.out.println("请您输入每次取款限额");
double limit = sc.nextDouble();
account.setLimit(limit);
//生成一个卡号 8位数字(卡号且不能重复)
String id = createCardid();
account.setId(id);
//
list.add(account);
System.out.println("恭喜您"+account.getName()+ "开户成功");
System.out.println("您的卡号为" + account.getId());
return;
}
private String createCardid(){
while(true){
String id ="";
Random r = new Random();
for (int i = 0; i < 8; i++) {
int data = r.nextInt(10);
id += data;
}
Account acc = getAccountbyId(id);
if(acc == null){ return id;}
}
}
private Account getAccountbyId(String id){
for (int i = 0; i < list.size(); i++) {
Account acc = list.get(i);
if(acc.getId().equals(id)){return acc;}
}
return null;
}
private void login(){
System.out.println("==系统登录操作==");
if(list.size() == 0){
System.out.println("系统内无用户 请开户");return;
}
while(true) {
System.out.println("请您输入您的登录卡号");
String id = sc.next();
Account acc = getAccountbyId(id);
if (acc == null) {
System.out.println("该卡号不存在");
}
while(true) {
System.out.println("请你输入您的密码");
String password = sc.next();
if (acc.getPassword().equals(password)) {
loginacc = acc;
System.out.println("恭喜您," + acc.getName());
System.out.println("成功登录系统,您的卡号是"+acc.getId());
showUserCommand();return;
}
else {
System.out.println("密码不正确 请确认");
}
}
}
}
private void showUserCommand(){
while(true) {
System.out.println(loginacc.getName());
System.out.println("==您可以选择如下功能进行账号处理==");
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.注销当前账户 ==");
System.out.println("=============================");
int command = sc.nextInt();
switch (command) {
case 1:
showLoginacc();
break;
case 2:
depositMoney();
break;
case 3:
drawMoney();
break;
case 4:
transferMoney();
break;
case 5:
updatePassword();return;
case 6:
System.out.println(loginacc.getName()+"您已经成功退出系统");
return;
case 7:
if(deleteAccount()){return;}
break;
default:
System.out.println("操作不存在");
}
}
}
private void showLoginacc(){
System.out.println("==当前您的账户信息==");
System.out.println("卡号:" + loginacc.getId());
System.out.println("姓名:" + loginacc.getName());
System.out.println("性别:" + loginacc.getSex());
System.out.println("余额:" + loginacc.getMoney());
System.out.println("取现额度:3"+ loginacc.getLimit());
}
private void depositMoney(){
System.out.println("==存款操作==");
System.out.println("请您输入存款金额");
double money = sc.nextDouble();
loginacc.setMoney(loginacc.getMoney()+money);
System.out.println("==存款成功==");
}
private void transferMoney(){
System.out.println("用户转账");
if(list.size() < 2){
System.out.println("系统中只有一个用户,无法转账");
return;
}
if(loginacc.getMoney() == 0){
System.out.println("您账户内余额为0");
return;
}
while(true) {
System.out.println("请您输入对方的卡号");
String id = sc.next();
Account acc = getAccountbyId(id);
if (acc == null) {
System.out.println("您输入的对方卡号不存在");
}
else {
String name ="*"+acc.getName().substring(1);
System.out.println( "请您输入【"+name+"】的姓氏");
String prename = sc.next();
if(acc.getName().startsWith(prename)){
System.out.println("清输入转账金额");
double money = sc.nextDouble();
if(loginacc.getMoney() >= money){
loginacc.setMoney(loginacc.getMoney() - money);
acc.setMoney(acc.getMoney() + money);
return;
}
else{
System.out.println("余额不足,您的余额为"+loginacc.getMoney());
}
}
else{
System.out.println("您认证的姓氏有问题");
}
}
}
}
private void drawMoney(){
System.out.println("==取款操作==");
if(loginacc.getMoney() < 100){
System.out.println("您的余额不足100 无法取款");return;
}
while(true) {
System.out.println("请您输入取款金额");
double money = sc.nextDouble();
if (loginacc.getMoney() < money) {
System.out.println("余额不足 您账户中的余额为:" + loginacc.getMoney());break;
}
else {
if (money > loginacc.getLimit()) {
System.out.println("您当前取款金额超过限额,您每次最多取款" + loginacc.getLimit());break;
} else {
loginacc.setMoney(loginacc.getMoney() - money);
System.out.println("==取款成功==");
System.out.println("取款后剩余" + loginacc.getMoney());
return;
}
}
}
}
private boolean deleteAccount(){
System.out.println("==销户操作==");
System.out.println("请问您确认销户嘛");
String command = sc.next();
switch (command){
case "y":
if(loginacc.getMoney() == 0){
list.remove(loginacc);
System.out.println("您好 您的账户已经成功销户");
return true;
}
else {
System.out.println("对不起 您的账户中存在金额 不允许销毁");
return false;
}
default:
System.out.println("好的,您的账户保留!!");
return false;
}
}
private void updatePassword(){
System.out.println("==账号密码修改==");
System.out.println("请您输入当前账户密码");
String pass = sc.next();
if(loginacc.getPassword().equals(pass)){
while(true) {
System.out.println("请您输入新密码");
String newpass = sc.next();
System.out.println("请您确认新密码");
String newpass1 = sc.next();
if (newpass.equals(newpass1)) {
loginacc.setPassword(newpass);
System.out.println("您的密码修改成功");
return;
}
else {
System.out.println("您输入的两次密码不一致");
}
}
}
else{
System.out.println("密码错误");
}
}
public void start(){
while(true){
System.out.println("==欢迎您进入到ATM系统==");
System.out.println("== 1.用户登录 ==");
System.out.println("== 2.用户开户 ==");
System.out.println("请选择");
int n = sc.nextInt();
switch(n){
case 1:login();break;
case 2:creatAccount(); break;
case 0: return;
default:
System.out.println("输出有误 重新输入");
}
}
}
}
package ATM;
public class Text {
public static void main(String[] args) {
ATM a = new ATM();
a.start();
}
}
(3)操作说明
3.总结
关于这个案例实际并不复杂,功能的实现和代码思路和C语言学习时是一致的,只是JAVA提供了API,更快捷的实现了一些原本要自己手写的功能。主要还是对于面向对象编程,把功能交给对象自己去完成,以及集合这种存储数据的容器的学习和理解,目前这个案例算是对前面入门的知识一个小的复习。后续就可以进行比较系统深入的学习了。