java 课程设计——银行管理系统

news2025/1/24 5:27:03

银行管理系统(java)

环境
idea2020
jdk1.8

能实现的功能:
1.注册账户
2.登录
3.查询账户信息
4.存款
5.取款
6.向另一个账户转账
7.修改账户密码
8.注销账户

项目结构

项目结构

项目演示

1.主页面:

在这里插入图片描述
2.注册账号:
(1)输入用户名,密码,确认密码,取现额度。
(2)当两次密码输入不一致,系统提示重新输入,直到两次输入一致才能完成账户注册。
(3)卡号由系统随机生成一串8位数字,生成的卡号不会不重复。
(4)完成账户注册后,切换到主菜单,接下来进行登录操作。
在这里插入图片描述
3.登录界面
(1)当系统中没有账户时,不能登录(为了测试方便,首先写好了一个账户在代码中,可以删除或者注销账户后测试):
在这里插入图片描述
(2)注册账户后登录:登录时验证卡号,密码,任何输入错误都会提示重新输入,直到输入正确后才能登录进操作菜单。
没有任何错误的登录:
在这里插入图片描述
有错误的登录:
在这里插入图片描述
4.操作主菜单有7个功能
(1)查询:显示登录账号的卡号,用户名,余额,取现额度。
在这里插入图片描述
(2)存款:输入存款金额,并且将存款后的账户信息重新输出出来。
在这里插入图片描述

(3)取款:输入取款金额,判断是否超过单次限额?判断是否超过余额?并且给出相应的提示信息,直到能取出钱,取出钱后给出取款后账户信息。
在这里插入图片描述

(4)向另一个账户转账:前提是必须已经有了有两个账户
没有两个账户
在这里插入图片描述
有两个账户:依次验证对方卡号是否正确?验证对方姓/姓名?转账金额是否小于余额?
都验证成功后才完成转账操作,最后提示当前账户余额。
在这里插入图片描述

(5)修改账户密码:验证原始密码,成功后输入两次新密码必须相同,验证成功后设置新密码,设置完成后自动退出账户,回到主菜单,需要重新登录才能继续操作。
在这里插入图片描述

(6)退出:退出账号,回到主菜单界面。
在这里插入图片描述

(7)注销账户:将当前账户(对象)从对象集合中删除。
销户不成功的情况:没有输入y,账户还有余额
在这里插入图片描述
销户成功:账户余额为0,确认销户后,再一次登录卡号已经不存在。
在这里插入图片描述

全部代码:

1.定义账户类Account:用于存储账户的基本信息

public class Account {
    /**
     * 成员变量
     */
    private String CardId;//卡号
    private String  UserName;//用户名
    private String  Password;//登录密码
    private double money;//余额
    private double quotaMoney;//取钱额度

    public Account() {
    }

    public Account(String cardId, String userName, String password, double quotaMoney) {
        CardId = cardId;
        UserName = userName;
        Password = password;
        this.quotaMoney = quotaMoney;
    }

    public Account(String cardId, String userName, String password, double money, double quotaMoney) {
        CardId = cardId;
        UserName = userName;
        Password = password;
        this.money = money;
        this.quotaMoney = quotaMoney;
    }

    public String getCardId() {
        return CardId;
    }

    public void setCardId(String cardId) {
        CardId = cardId;
    }

    public String getUserName() {
        return UserName;
    }

    public void setUserName(String userName) {
        UserName = userName;
    }

    public String getPassword() {
        return Password;
    }

    public void setPassword(String password) {
        Password = password;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public double getQuotaMoney() {
        return quotaMoney;
    }

    public void setQuotaMoney(double quotaMoney) {
        this.quotaMoney = quotaMoney;
    }
}

2.定义自助银行类ATMSystem类:用于完成银行的各种功能

import javafx.scene.transform.Scale;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATMSystem {
    public static void main(String[] args) {
        //创建一个集合对象,存储账户信息
        ArrayList<Account> accounts =new ArrayList<>();

        //为了测试方便,写好的一个账户信息(以下三行可以删除)
        Scanner sc=new Scanner(System.in);
        Account account=new Account("12345678","123","123",0,100);
        accounts.add(account);

        //主菜单
        while(true){
            System.out.println("-----------欢迎来到ATM系统----------------");
            System.out.println("1.登录账号");
            System.out.println("2.注册账号");
            System.out.print("请选择你的操作:");
            int command=sc.nextInt();
            switch(command){
                case 1:
                    login(accounts,sc);
                    break;
                case 2:
                    register(accounts,sc);
                    break;
                default:
                    System.out.println("输入命令不存在");
            }
        }

    }
    /**
     * 注册
     * @param accounts
     * @param sc
     */
    private static void register(ArrayList<Account> accounts, Scanner sc) {
        System.out.println("===============欢迎进入开户界面=====================");
        System.out.print("请输入用户名:");
        String userName = sc.next();
        String password = null;
        String password1 = null;
        while (true) {
            System.out.print("请输入密码:");
            password = sc.next();
            System.out.print("请确认密码:");
            password1 = sc.next();
            if(password.equals(password1)){
                break;
            }else{
                System.out.println("两次密码不一致,请重新输入");
            }
        }
        System.out.print("请设置当日取现额度:");
        Double quotaMoney = sc.nextDouble();
        //随机8位不重复账号(独立方法)
        String cardId=getRandomId(accounts);

        Account account=new Account(cardId,userName,password,quotaMoney);
        accounts.add(account);
        System.out.println("恭喜你"+userName+"先生/女士,开户成功,您的卡号为:"+cardId);
    }
    /**
     * 生成随机8位不重复账号
     * @param accounts
     * @return
     */
    private static String getRandomId(ArrayList <Account> accounts) {
        Random r=new Random();
        while (true) {
            String cardId="";
            for (int i = 0; i <8 ; i++) {
                cardId+=r.nextInt(10);//0-9
                }
            Account acc = getAccountByCardId(accounts, cardId);
            if(acc==null){//卡号没有重复
                return cardId;
            }else{
                return null;
            }
        }
    }
    /**
     * 根据卡号判断是否存在账户
     * @param accounts
     * @param cardId
     * @return
     */
    private static Account getAccountByCardId(ArrayList <Account> accounts,String cardId){
        for (int i = 0; i < accounts.size(); i++) {
            Account a=accounts.get(i);
            if(a.getCardId().equals(cardId)){
                return a;
            }
        }
        return null;//查无此账号!

    }
    /**
     * 用户登录
     * @param accounts
     * @param sc
     */
    private static void login(ArrayList <Account> accounts,Scanner sc) {//登录
        System.out.println("===============欢迎进入登录界面=====================");
        if(accounts.size()==0){
            System.out.println("该系统中无任何账户,请先开户");
            return;//结束这个方法
        }
        while (true) {
            System.out.print("请输入卡号:");
            String cardId= sc.next();
            //根据卡号找账户对象存在?
            Account acc=getAccountByCardId(accounts,cardId);
            if(acc!=null){//卡号存在
                while (true) {
                    System.out.print("请输入密码:");
                    String password= sc.next();
                    if (acc.getPassword().equals(password)) {
                        System.out.println("恭喜你!"+acc.getUserName()+"登录成功!"+"卡号:"+acc.getCardId());
                        //查询,转账,取款功能
                        showCommand(accounts,acc,sc);
                        return;//干掉登录方法
                        //break;
                    } else {
                        System.out.println("密码错误!请重新输入");
                    }
                }
               // break;
            }else{
                System.out.println("该账户卡号不存在!");
            }
        }
    }
    /**
     * 登陆后的操作界面
     * @param accounts
     * @param acc
     * @param sc
     */
    private static void showCommand(ArrayList accounts,Account acc,Scanner sc) {//操作界面
        while (true) {
            System.out.println("===============登陆成功欢迎进入用户操作界面=====================");
            System.out.print("1.查询");
            System.out.print("2.存款");
            System.out.print("3.取款");
            System.out.print("4.转账");
            System.out.print("5.修改密码");
            System.out.print("6.退出");
            System.out.print("7.注销当前账户");
            System.out.print("请选择你的操作:");
            int command1=sc.nextInt();
            switch(command1){
                case 1:
                    query(acc);//展示
                    break;
                case 2:
                    depositMoney(acc,sc);//存钱
                    break;
                case 3:
                    drawMoney(acc,sc);//取钱
                    break;
                case 4:
                    zhuanzhang(accounts,acc,sc);//转账
                    break;
                case 5:
                    updatePassword(acc,sc);//修改密码
                    return;//重新登录
                case 6:
                    System.out.println("退出成功,欢迎下次光临");
                    return;//干掉当前show方法
                case 7:
                    if(deleteAccount(accounts,acc,sc)){;//销户
                        return;
                    }else{
                        break;
                    }

                default:
                    System.out.println("输入命令不存在");

            }
        }

    }
    /**
     * 展示账户信息
     * @param acc
     */
    private static void query(Account acc) {
        System.out.println("===============您的账户信息如下===============");
        System.out.println("卡号:"+acc.getCardId());
        System.out.println("姓名:"+acc.getUserName());
        System.out.println("余额:"+acc.getMoney());
        System.out.println("当日取现额度"+acc.getQuotaMoney());
    }
    /**
     * 存款
     * @param acc
     */
    private static void depositMoney(Account acc,Scanner sc) {
        System.out.println("======================存钱=========================");
        System.out.print("请输入存款金额:");
        acc.setMoney(sc.nextDouble()+acc.getMoney());
        System.out.println("存款成功!");
        query(acc);
    }
    /**
     * 取钱
     * @param acc
     * @param sc
     */
    private static void drawMoney(Account acc, Scanner sc) {
        System.out.println("======================取钱=========================");
        if (acc.getMoney() < 100) {
            System.out.println("账户余额小于100元,不能取出");
            return;
        } else {
            while (true) {
                System.out.print("请输入要取款的金额:");
                double money = sc.nextDouble();
                if (money > acc.getQuotaMoney()) {//超过单次超过限额
                    System.out.println("超过单次限额,每次最多取款 " + acc.getQuotaMoney() + "元");
                } else {
                    if (money > acc.getMoney()) {//超过余额
                        System.out.println("账户余额不足,账户余额为"+acc.getMoney()+"元");
                    } else {
                        System.out.println("取款"+money+"成功");
                        acc.setMoney(acc.getMoney() - money);
                        query(acc);
                        return;//干掉这个方法
                    }
                }
            }
        }
    }
    /**
     * 转账:必须有>=两个账户
     * @param
     * @param acc
     * @param sc
     */
    private static void zhuanzhang(ArrayList accounts, Account acc, Scanner sc) {
        System.out.println("======================转账=========================");
        //1.自己有钱?
        if(accounts.size()<2){
            System.out.println("当前系统账户不足2个,无法转账");
            return;
        }
        //有两个账户?
        if(acc.getMoney()==0){
            System.out.println("自己都没钱,就别转了");
            return;
        }
        while (true) {
            System.out.print("请输入对方卡号:");
            String cardId = sc.next();
            if(acc.getCardId().equals(cardId)){
                System.out.print("无法向自己账户转钱!");
                continue;//结束当前执行,死循环进入下一次
            }
            Account a=getAccountByCardId(accounts,cardId);//这个卡号存在?
            if(a==null){
                System.out.print("不存在该账户,请重新输入:");
            }else{//存在
                String userName = a.getUserName();
                String after = userName.substring(1);
                while(true){
                    System.out.print("您当前将为*"+after+"转账!请输入姓氏确认:");
                    String before=sc.next();
                    if(userName.startsWith(before)){
                    //if(userName.substring(0,1).equals(before)){
                        System.out.println("账户验证成功");
                        while(true){
                            System.out.print("请输入转账金额:");
                            Double money=sc.nextDouble();
                            if(money>acc.getMoney()){
                                System.out.print("余额不足,您当前余额为"+acc.getMoney()+"。  ");
                            }else {
                                acc.setMoney(acc.getMoney() - money);
                                a.setMoney(a.getMoney() + money);
                                System.out.println("转账成功!您的账户余额为"+acc.getMoney());
                                return;
                            }
                        }
                    }else{
                        System.out.println("验证失败!请重新输入");
                    }
                }
            }

        }
    }
    /**
     * 改密码
     * @param acc
     * @param sc
     */
    private static void updatePassword(Account acc, Scanner sc) {
        System.out.println("====================修改密码=========================");
        while (true) {
            System.out.print("请输入原始密码:");
            String oldPassword = sc.next();
            if(acc.getPassword().equals(oldPassword)) {
                while (true) {
                    System.out.print("请输入新密码");
                    String newPassword = sc.next();
                    System.out.print("请确认新密码");
                    String newPassword1 = sc.next();

                    if (newPassword.equals(newPassword1)) {
                        acc.setPassword(newPassword);
                        System.out.println("密码修改成功!请重新登录");
                        return;
                    } else {
                        System.out.println("两次输入不一致!");
                    }
                }
            }else{
                System.out.print("输入的原密码输入错误,");
            }
        }
    }
    /**
     * 注销(删除)账户
     * @param accounts
     * @param acc
     * @param sc
     */
    private static boolean deleteAccount(ArrayList accounts, Account acc, Scanner sc) {
        System.out.println("====================注销账户=========================");
        System.out.print("您真的要销户吗?y/n");
        String next = sc.next();
        switch(next){
            case "y":
                if(acc.getMoney()>0){
                    System.out.println("您的账户还有"+acc.getMoney()+"元,不予许销户");
                }else{
                    System.out.println("账户销户完成!");
                    accounts.remove(acc);
                    return true;
                }
                break;
            default:
                System.out.println("账户继续保留!");
        }
        return false;
    }
}

还有可以改进的地方比如:转账限额没判断,都是一样的。
看不懂可以联系qq:2559347978交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/407988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多行文本溢出显示省略号

文本溢出显示省略号分两种情况&#xff0c;单行文本溢出显示省略号&#xff08;参考上篇文章https://blog.csdn.net/qq_43687594/article/details/123511873&#xff09;&#xff0c;另外一种就是多行文本溢出显示省略号。 多行文本显示省略号有两种办法 第一种&#xff1a; …

解决Vue刷新后页面数据丢失的问题(sessionStorage和localStorage的用法)

一、为什么刷新后数据会丢失 vuex存储的数据只是在页面中&#xff0c;相当于全局变量&#xff0c;页面刷新的时候vuex里的数据会重新初始化&#xff0c;导致数据丢失。因为vuex里的数据是保存在运行内存中的&#xff0c;当页面刷新时&#xff0c;页面会重新加载vue实例&#xf…

初识React及React开发依赖介绍

文章目录初识ReactReact介绍React特点React的依赖介绍React的开发依赖Babel和React的关系React的依赖引入初识React React介绍 React是什么呢? 相信每个做开发的人对它都或多或少有一些印象; 这里我们来看一下官方对它的解释:用于构建用户界面的 JavaScript 库; 目前对于前端…

H5页面实现微信授权登录

项目需求描述&#xff1a; 用户通过扫码海报携带活动二维码跳转到h5页面&#xff0c;并且完成微信授权&#xff0c;完成授权的用户进入小程序后不再进行授权操作。这里边涉及到了两个大问题&#xff0c;一是怎样在一个域名下部署两个项目&#xff0c;二是用户点击授权之后跳转…

vue.js not detected问题解决

最近在看vue的时候&#xff0c;发现之前装过的vuedevtools提示vue.js is not detected。重装了一次后&#xff0c;发现对于没有应用vue框架的页面&#xff0c;的确是检测不到vue.js&#xff0c;所以报这个很正常&#xff1b;切换到有vue.js资源的页面&#xff0c;调试界面就会自…

史上最详细vue的入门基础

一&#xff1a;Vue Vue&#xff1a;一种用于构建用户界面的渐进式javascript框架 Vue可以自底向上逐层的应用简单应用:只需一个轻量小巧的核心库复杂应用:可以引入各式各样的Vue插件 特定&#xff1a; 1、采用组件化模式&#xff0c;提高代码复用率&#xff0c;且让代码更好…

安装与配置webpack-dev-serve

作用 相当于在本地开启了一个服务&#xff0c;我们可以通过http网络请求访问提高了IO性能&#xff0c;因为webpack-dev-server将我们的文件编译后放到内存里面&#xff0c;以空间换时间无需我们每次都需要手动编译我们的文件&#xff0c;我们每次保存文件&#xff0c;就会自动…

【web前端面试宝典】经典10问(上篇)

&#x1f41a;作者简介&#xff1a;苏凉&#xff08;专注于网络爬虫&#xff0c;数据分析&#xff0c;正在学习前端的路上&#xff09; &#x1f433;博客主页&#xff1a;苏凉.py的博客 &#x1f310;系列专栏&#xff1a;前端面试 &#x1f451;名言警句&#xff1a;海阔凭鱼…

Vue:实现TodoList案例(尚硅谷)

Vue核心&#xff1a;Vue核心&#xff1a;组件化编程&#xff08;脚手架&#xff09; 一、静态页面 app.vue 注&#xff1a; MyItem.vue不直接在app.vue中引入&#xff0c;而在MyList.vue中引入 <template><div id"root"><div class"todo-cont…

【微信小程序】一文读懂,数据请求

&#x1f352;观众老爷们好呀&#xff0c;这里是前端小刘不怕牛牛频道&#xff0c;小程序系列又更新新文章啦&#xff0c;上文我们讲解了微信小程序的全局配置和局部配置&#xff0c;那么今天就让我们来学习微信小程序的数据请求&#xff0c;这可是做小程序交互效果和绑定数据动…

react生命周期详细介绍

目录 挂载&#xff1a;在组件实例被创建并插入到dom中时&#xff0c;生命周期调用顺序如下 constructor componentWillMount getDerivedStateFromProps render componentDidMount 更新&#xff1a;当组件的 props 或 state 发生变化时会触发更新。 componentWillReceive…

教你如何手写一个Promise

想要源码的可以看这里&#xff0c;里面也有一些其他的知识 想要手写一个promise&#xff0c;首先就要了解promise&#xff0c;想必大家都被过一些promise的面试题&#xff0c;知道一些promise的用法&#xff0c;主要考的就是一种异步编程的思想。 了解promise 我们先来看看直…

Node.js——http模块和导出共享

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿 offer&#xff08;秋招&#xff09; &#x1f947;推荐学习&…

uni-app 自定义下拉框

如图&#xff1a; html&#xff1a; <view class"row-item"> <view class"lable-tit">性别&#xff1a;</view> <view class"selected-all"> <view class"drop-down-box" click"btnShowHideClick…

JavaScript DOM基础

文章目录前言一、DOM 简介1.1 什么是 DOM1.2 DOM 树二、获取元素2.1 如何获取页面元素2.2 根据 ID 获取2.3 根据标签名获取2.4 通过 HTML5 新增的方法获取2.5 获取特殊元素&#xff08;body&#xff0c;html&#xff09;三、事件基础3.1 事件概述3.2 事件三要素3.3 执行事件的步…

Ant Design Pro(5)-7.高级表格ProTable

Ant Design Pro 高级表格ProTable的使用 文章目录Ant Design Pro 高级表格ProTable的使用一. 简介1. 什么是ProTable&#xff1f;2. 何时使用ProTable&#xff1f;二. 使用1. ProTable属性及使用2. ActionRef 手动触发3. Columns 列定义4. 批量操作5. 搜索表单一. 简介 1. 什么…

【Vue】父子组件通信

[Vue]父子组件通信前言父组件向子组件传值法一: props法二: $parent子组件向父组件传值$emit$emit .sync$refsv-model前言 &#x1f6a9;&#x1f6a9;&#x1f6a9; &#x1f48e;个人主页: 阿选不出来 &#x1f4a8;&#x1f4a8;&#x1f4a8; &#x1f48e;个人简介: 一名…

【Javaweb】会话跟踪技术CookieSession

学习目录前言一.会话引入二.Cookie1.Cookie的理解2.Cookie生命周期3.Cookie有效路径4.Cookie使用细节三.Session1.Session基本原理2.Session的理解3.Session基本使用4.Session底层5.Session生命周期前言 纸上得来终觉浅&#xff0c;绝知此事要躬行 一.会话引入 什么是会话&a…

“Property or method “***“ is not defined on the instance but referenced during render.”报错的原因及解决方案

报错问题&#xff1a; 在使用vue-cli运行项目的过程中&#xff0c;在VScode中不报错&#xff0c;但在浏览器调试工具中发出 [Vue warn]: Property or method "******" is not defined on the instance but referenced during render. Make sure that this propert…

vue-day01 使用cdn引入使用

vue-day01vue?vue简明例子模板语法1. 使用{{}} Mustache语法将数据绑定到对应的实例2.使用 v-once指令3.v-html指令4.v-bind指令和v-on指令5.动态参数&#xff0c;修饰符&#xff0c;指令缩写动态参数修饰符指令缩写vue? Vue 是一套用于构建用户界面的渐进式框架。与其它大型…