首先进入ATM首页系统,选择开通账户或者用户登录功能
输入名字,姓氏,性别后,输入两次密码验证是否相同,如果密码不相同,则重新输入,如果密码相同,则随机生成一个卡号,并且确定不会重复,即开通成功
用户登录可以分为,查询账户,存款,取款,转账,修改密码,退出,注销账户等功能
? ? ? ? 首先输入卡号,判断系统中是否有此卡号
? ? ? ? 如果没有,则重新输入;如果有,则输入密码,并判断密码是否正确
? ? ? ? 然后返回用户信息
? ? ? ? 输入存款金额,并修改账户金额
? ? ? ? 先判断账户余额是否有100,若没有则无法取款;若有则
? ? ? ? 判断取款金额是否大于余额,若大于,取款失败,重新输入取款金额;若小于则
? ? ? ? 判断取款金额是否大于限额,若大于,取款失败重新输入取款金额,若小于取款成功并更新账户金额
? ? ? ? 输入对方卡号,判断用户是否存在,若不存在,转账失败,重新输入卡号;若存在则
? ? ? ? 判断对方姓氏,若失败,重新输入转账账户;若成功则
? ? ? ? 输入转账金额,判断金额是否大于余额,若大于重新输入转账金额;若小于转账成功,更新
????????账户信息
? ? ? ? 先输入密码判断是否正确,若不正确,重新输入;若正确则
? ? ? ? 输入两次密码,判断是否相等,若不相等,重新输入;若相等则修改成功?
? ? ? ? 显示退出成功,显示ATM首页界面
? ? ? ? 先确定是否注销用户,若确认,则
? ? ? ? 判断余额是否为0;若是,注销成功,返回ATM首页界面;若不是,注销失败,返回操作界面
package Test1;
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);
Random ra = new Random();
//系统欢迎页面
public void start(){
while (true) {
System.out.println("==================");
System.out.println("欢迎进入ATM系统");
System.out.println("请选择业务");
System.out.println("1、用户登录");
System.out.println("2、用户开户");
System.out.println("请输入您要选择的命令");
String i = sc.next();
switch (i){
case "1":
loginAccount();
break;
case "2":
openAccount();
break;
default:
System.out.println("没有此命令,请重新输入");
break;
}
}
}
//系统开户界面
private void openAccount() {
Account ac = new Account();
System.out.println("===系统开户操作===");
System.out.println("请输入账户用户名");
String name = sc.next();
ac.setName(name);
while (true) {
System.out.println("请输入性别");
String sex = sc.next();
if (sex.equals("男")||sex.equals("女")){
ac.setSex(sex);
break;
}else{
System.out.println("您输入的性别有误,请重新输入");
}
}
while (true) {
System.out.println("请输入密码");
String password1 = sc.next();
System.out.println("请再次确认密码");
String password2 = sc.next();
if(password1.equals(password2)){
ac.setPassword(password1);
break;
}else{
System.out.println("您两次输入的密码不一样,请重新输入");
}
}
System.out.println("请输入限额");
double limit = sc.nextDouble();
ac.setLimit(limit);
int idCard = createIdCard();
ac.setIdCard(idCard);
//将用户添加到列表中
accounts.add(ac);
System.out.println(ac.getName()+"您好,您已经开户成功,您的卡号是"+ac.getIdCard());
}
//登录
private void loginAccount() {
System.out.println("===欢迎来到ATM系统");
//1.判断系统中有没有账户
if(accounts.size()==0){
System.out.println("系统中没有账户");
return;
}
//2.系统中存在对象
Account ac = null;
while (true) {
System.out.println("请输入卡号");
int idcard = sc.nextInt();
//判断是否有此卡号
ac = getAccountBuId(idcard);
if(ac==null){
System.out.println("卡号错误,不存在此账号");
}else{
while (true) {
System.out.println("请输入密码");
String password = sc.next();
if (ac.getPassword().equals(password)){
//密码正确,登陆成功
System.out.println("恭喜您"+ac.getName()+",登陆成功");
showUserCommand(ac);
return;
}else{
System.out.println("您输入的密码不正确");
}
}
}
}
}
//登录后的界面
private void showUserCommand(Account account){
while (true) {
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("请选择操作");
String i = sc.next();
switch (i){
case "1"://查询账户
showUserAccount(account);
break;
case "2"://存款
addUserMoney(account);
break;
case "3"://取款
drawUserMoney(account);
break;
case "4"://转账
transMoney(account);
break;
case "5"://修改密码
changePassword(account);
return;
case "6"://退出
System.out.println(account.getName()+",您退出系统成功");
return;
case "7"://注销
boolean flag = logout(account);
if(flag){
//销户成功,返回欢迎界面
return;
}else{
//销户失败,返回操作界面
break;
}
default:
System.out.println("您当前选择的操作不存在");
}
}
}
private boolean changePassword(Account account) {
while (true) {
System.out.println("请输入您的密码");
String password = sc.next();
if(account.getPassword().equals(password)){//输入的密码与原始密码相同
while (true) {
System.out.println("请输入新密码");
String password1 = sc.next();
System.out.println("请再次输入密码");
String password2 = sc.next();
if(password1.equals(password2)){
account.setPassword(password);
System.out.println("修改成功,请重新登录");
return true;
}else{
System.out.println("您两次输入的密码不一样,请重新输入");
}
}
}
}
}
//注销
private boolean logout(Account account) {
System.out.println("请确定是否注销账户:y/n");
String flag = sc.next();
if(flag.equals("y")){//确实要销户
//判断用户的账户是否有钱
if(account.getMoney()==0){//账户没钱
System.out.println("销户成功!");
return true;
}else{//账户有钱
System.out.println("对不起,您的账户中存在金额,销户失败,您的剩余金额是"+account.getMoney());
}
}
return false;
}
//生成一个卡号
private int createIdCard(){
while (true) {
String idCard="";
for(int i=0;i<8;i++){
idCard = idCard+ra.nextInt(10);
}
int id = Integer.parseInt(idCard);
Account ac1 = getAccountBuId(id);
if(ac1==null){
//ID没有找到对象,可以返回作为一个新卡号
return id;
}
}
}
//根据卡号查对象
private Account getAccountBuId(int idCard){
for (int i = 0; i < accounts.size(); i++) {
Account ac = accounts.get(i);
if(ac.getIdCard()==idCard){
return ac;
}
}
return null;//卡号不存在
}
//查询账户
private void showUserAccount(Account account){
System.out.println("当前您的账户信息如下");
System.out.println("卡号:"+account.getIdCard());
System.out.println("名字:"+account.getName());
System.out.println("性别:"+account.getSex());
System.out.println("余额:"+account.getMoney());
System.out.println("限额:"+account.getLimit());
}
//存款
private void addUserMoney(Account account){
System.out.println("请输入要存的钱");
double money = sc.nextDouble();
double newMoney = account.getMoney()+money;
account.setMoney(newMoney);
System.out.println("当前余额为:"+account.getMoney());
}
//取款
private void drawUserMoney(Account account) {
//判断用户余额是否有100
if(account.getMoney()<100){
System.out.println("您的账户余额不足一百,不允许取钱");
return;
}
while (true) {
System.out.println("请输入要取的钱");
double money = sc.nextDouble();
//判断账户余额是否足够
if(account.getMoney()<money){//余额不足
System.out.println("您的账户余额不足,您的账户余额为"+account.getMoney());
}else{//余额足够
if(money>account.getLimit()){//取款金额超过限额
System.out.println("当前取款金额超过限额。您每次最多可取"+account.getLimit());
}else{//可以开始取钱了
account.setMoney(account.getMoney()-money);
System.out.println("取款成功,取款后剩余"+account.getMoney());
break;
}
}
}
}
//转账
private void transMoney(Account account) {
while (true) {
System.out.println("请输入要转账的账户");
int id = sc.nextInt();
//接受转账的账户
Account newac = getAccountBuId(id);
if (newac == null) {//当前账户不存在
System.out.println("当前账户不存在");
} else {//当前账户存在,验证对方姓氏
String name = "*" + newac.getName().substring(1);//截取字符串
System.out.println("请输入[" + name + "]的姓氏");
String prename = sc.next();
if (newac.getName().startsWith(prename)) {//是否以prename开始
//认证通过
while (true) {
System.out.println("请输入转账金额");
double money = sc.nextDouble();
if (account.getMoney() < money) {//余额不足
System.out.println("您的余额不足,您的余额是" + account.getMoney());
} else {//可以转账
account.setMoney(account.getMoney()-money);
newac.setMoney(newac.getMoney()+money);
System.out.println("您的余额是"+account.getMoney());
return;
}
}
} else {
System.out.println("您输入的姓氏不正确");
}
}
}
}
}
package Test1;
public class Account {
private int idCard;
private String name;
private String sex;
private String password;
private double money;
private double limit;
public Account(int idCard, String name, String sex, String password, double money, double limit) {
this.idCard = idCard;
this.name = name;
this.sex = sex;
this.password = password;
this.money = money;
this.limit = limit;
}
public Account() {
}
public int getIdCard() {
return idCard;
}
public void setIdCard(int idCard) {
this.idCard = idCard;
}
public String getName() {
return name.charAt(0) + (sex.equals("男")?"先生":"女士");
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String 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;
}
}
package Test1;
public class Test {
public static void main(String[] args) {
ATM atm = new ATM();
atm.start();
}
}