工商银行模拟器,java教学演示版分享~~~

简介: 前言:为什么要写这个模拟器?“老师上课讲的银行系统太抽象了!” “面试被问到银行系统设计直接懵了” 你是不是也有这样的烦恼?

文件下载地址:https://pan38.com/xiazai/index.php?id=24 提取码:d2be

前言:为什么要写这个模拟器?
“老师上课讲的银行系统太抽象了!” “面试被问到银行系统设计直接懵了” 你是不是也有这样的烦恼?

image.png

今天我们就用Java手搓一个工商银行模拟器教学演示版,涵盖存款、取款、转账、开户等核心功能!全程代码可运行,注释详细到哭!

🎯 项目结构预览
text
工商银行模拟器/
├── src/
│ ├── BankSystem.java # 主系统入口
│ ├── BankAccount.java # 账户类
│ ├── BankOperation.java # 银行操作接口
│ └── BankUtils.java # 工具类
├── README.md
└── 数据库模拟文件.txt
💻 核心代码实现(教学注释版)

  1. 账户实体类设计
    java
    /**

    • 银行账户实体类 - 教学演示版
    • 注意:真实银行系统要复杂得多,这里做了教学简化
      */
      public class BankAccount {
      // 账户基本信息
      private String accountNumber; // 账号
      private String accountName; // 户名
      private String idCard; // 身份证号
      private String phone; // 手机号
      private double balance; // 余额
      private String password; // 密码(演示用,真实系统要加密!)
      private Date createDate; // 开户日期
      private boolean isActive; // 账户状态

      // 构造方法 - 开户时使用
      public BankAccount(String accountName, String idCard,

                   String phone, double initialDeposit, String password) {
      

      // 生成账号:ICBC + 时间戳 + 随机数(模拟真实生成规则)
      this.accountNumber = "ICBC" + System.currentTimeMillis() % 1000000;
      this.accountName = accountName;
      this.idCard = idCard;
      this.phone = phone;
      this.balance = initialDeposit;
      this.password = password; // 注意:实际项目要使用加密存储!
      this.createDate = new Date();
      this.isActive = true;

      System.out.println("✅ 开户成功!账号:" + this.accountNumber);
      System.out.println("温馨提示:初始存款" + initialDeposit + "元已到账");
      }

      // Getter和Setter方法
      public String getAccountNumber() { return accountNumber; }
      public double getBalance() { return balance; }

      // 存款方法
      public boolean deposit(double amount) {
      if (amount <= 0) {

         System.out.println("❌ 存款金额必须大于0");
         return false;
      

      }
      this.balance += amount;
      System.out.println("✅ 存款成功!存入:" + amount + "元,余额:" + this.balance + "元");
      return true;
      }

      // 取款方法(带密码验证)
      public boolean withdraw(double amount, String inputPassword) {
      if (!this.password.equals(inputPassword)) {

         System.out.println("❌ 密码错误!");
         return false;
      

      }

      if (amount <= 0) {

         System.out.println("❌ 取款金额必须大于0");
         return false;
      

      }

      if (amount > this.balance) {

         System.out.println("❌ 余额不足!当前余额:" + this.balance + "元");
         return false;
      

      }

      this.balance -= amount;
      System.out.println("✅ 取款成功!取出:" + amount + "元,余额:" + this.balance + "元");
      return true;
      }

      // 显示账户信息(隐藏部分敏感信息)
      public void displayInfo() {
      System.out.println("\n======= 账户信息 =======");
      System.out.println("账号:" + this.accountNumber);
      System.out.println("户名:" + this.accountName);
      System.out.println("余额:" + this.balance + "元");
      System.out.println("状态:" + (isActive ? "正常" : "冻结"));
      System.out.println("开户日期:" + this.createDate);
      System.out.println("=======================\n");
      }
      }

  2. 银行操作接口设计
    java
    /**

    • 银行操作接口 - 定义银行的核心业务
    • 教学重点:接口的作用和设计模式
      */
      public interface BankOperation {

      // 开户
      BankAccount openAccount(String name, String idCard,

                        String phone, double deposit, String password);
      

      // 存款
      boolean deposit(String accountNumber, double amount);

      // 取款
      boolean withdraw(String accountNumber, double amount, String password);

      // 转账(重点功能!)
      boolean transfer(String fromAccount, String toAccount,

                 double amount, String password);
      

      // 查询余额
      double queryBalance(String accountNumber, String password);

      // 修改密码
      boolean changePassword(String accountNumber, String oldPwd, String newPwd);
      }

  3. 工商银行系统实现类
    java
    import java.util.*;

/**

  • 工商银行模拟系统 - 主类
  • 教学演示:使用Map模拟数据库,实际项目用MySQL/Oracle
    */
    public class ICBCBankSystem implements BankOperation {

    // 使用HashMap模拟数据库存储账户信息
    // key: 账号, value: 账户对象
    private Map accountDatabase;
    private Scanner scanner;

    // 交易记录(简化版)
    private List transactionRecords;

    public ICBCBankSystem() {

     this.accountDatabase = new HashMap<>();
     this.scanner = new Scanner(System.in);
     this.transactionRecords = new ArrayList<>();
     System.out.println("🚀 工商银行模拟系统启动成功!");
     System.out.println("版本:教学演示版 v1.0");
    

    }

    @Override
    public BankAccount openAccount(String name, String idCard,

                               String phone, double deposit, String password) {
    
     // 输入验证(教学重点:防御性编程)
     if (deposit < 10.0) {
         System.out.println("❌ 最低存款金额为10元");
         return null;
     }
    
     if (password.length() < 6) {
         System.out.println("❌ 密码长度不能少于6位");
         return null;
     }
    
     // 创建新账户
     BankAccount newAccount = new BankAccount(name, idCard, phone, deposit, password);
    
     // 存入"数据库"
     accountDatabase.put(newAccount.getAccountNumber(), newAccount);
    
     // 记录交易
     String record = String.format("[开户] 账号:%s 姓名:%s 存入:%.2f", 
         newAccount.getAccountNumber(), name, deposit);
     transactionRecords.add(record);
    
     return newAccount;
    

    }

    @Override
    public boolean deposit(String accountNumber, double amount) {

     BankAccount account = accountDatabase.get(accountNumber);
     if (account == null) {
         System.out.println("❌ 账户不存在!");
         return false;
     }
    
     boolean success = account.deposit(amount);
     if (success) {
         String record = String.format("[存款] 账号:%s 存入:%.2f", accountNumber, amount);
         transactionRecords.add(record);
     }
     return success;
    

    }

    /**

    • 转账功能 - 银行核心业务逻辑
    • 教学重点:事务处理思想(这里做了简化)
      */
      @Override
      public boolean transfer(String fromAccountNum, String toAccountNum,

                      double amount, String password) {
      

      System.out.println("\n🔄 正在处理转账请求...");

      // 1. 验证转出账户
      BankAccount fromAccount = accountDatabase.get(fromAccountNum);
      if (fromAccount == null) {

       System.out.println("❌ 转出账户不存在!");
       return false;
      

      }

      // 2. 验证密码
      if (!fromAccount.withdraw(amount, password)) {

       System.out.println("❌ 转账失败:密码错误或余额不足");
       return false;
      

      }

      // 3. 验证转入账户
      BankAccount toAccount = accountDatabase.get(toAccountNum);
      if (toAccount == null) {

       System.out.println("❌ 转入账户不存在!");
       // 注意:实际银行系统这里需要回滚!教学演示简化处理
       fromAccount.deposit(amount); // 把钱加回去
       return false;
      

      }

      // 4. 执行转账
      toAccount.deposit(amount);

      // 5. 记录交易
      String record = String.format("[转账] 从%s向%s转账%.2f元",

       fromAccountNum, toAccountNum, amount);
      

      transactionRecords.add(record);

      System.out.println("✅ 转账成功!");
      System.out.println("从账户:" + fromAccountNum);
      System.out.println("向账户:" + toAccountNum);
      System.out.println("转账金额:" + amount + "元");

      return true;
      }

      /**

    • 查询余额功能
    • 教学注意:真实系统要考虑安全性和权限控制
      */
      @Override
      public double queryBalance(String accountNumber, String password) {
      BankAccount account = accountDatabase.get(accountNumber);
      if (account == null) {

       System.out.println("❌ 账户不存在!");
       return -1;
      

      }

      // 密码验证(简化版)
      // 真实系统:密码加密验证、错误次数限制等
      System.out.print("请输入密码查询余额:");
      String inputPwd = scanner.nextLine();

      if (!inputPwd.equals(password)) {

       System.out.println("❌ 密码错误!");
       return -1;
      

      }

      double balance = account.getBalance();
      System.out.println("💰 账户余额:" + balance + "元");
      return balance;
      }

      // 其他方法实现...

      /**

    • 显示系统菜单 - 控制台交互
      */
      public void showMenu() {
      while (true) {

       System.out.println("\n======== 工商银行模拟系统 ========");
       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("0. 退出系统");
       System.out.println("=================================");
       System.out.print("请选择操作:");
      
       String choice = scanner.nextLine();
      
       switch (choice) {
           case "1":
               handleOpenAccount();
               break;
           case "4":
               handleTransfer();
               break;
           case "6":
               displayAllAccounts(); // 教学功能:查看所有账户
               break;
           case "0":
               System.out.println("感谢使用工商银行模拟系统!");
               return;
           default:
               System.out.println("请输入有效选项!");
       }
      

      }
      }

      /**

    • 处理开户流程
      */
      private void handleOpenAccount() {
      System.out.println("\n🏦 欢迎来到工商银行开户系统");

      System.out.print("请输入姓名:");
      String name = scanner.nextLine();

      System.out.print("请输入身份证号:");
      String idCard = scanner.nextLine();

      System.out.print("请输入手机号:");
      String phone = scanner.nextLine();

      System.out.print("请输入初始存款金额:");
      double deposit = scanner.nextDouble();
      scanner.nextLine(); // 清除缓冲区

      System.out.print("请设置6位密码:");
      String password = scanner.nextLine();

      openAccount(name, idCard, phone, deposit, password);
      }

      /**

    • 处理转账流程
      */
      private void handleTransfer() {
      System.out.print("请输入转出账号:");
      String fromAccount = scanner.nextLine();

      System.out.print("请输入转入账号:");
      String toAccount = scanner.nextLine();

      System.out.print("请输入转账金额:");
      double amount = scanner.nextDouble();
      scanner.nextLine(); // 清除缓冲区

      System.out.print("请输入转出账户密码:");
      String password = scanner.nextLine();

      transfer(fromAccount, toAccount, amount, password);
      }

      /**

    • 教学演示:显示所有账户(实际系统不可能有这功能!)
      */
      private void displayAllAccounts() {
      System.out.println("\n⚠️ 教学演示功能:所有账户信息(真实系统绝无此功能!)");
      System.out.println("当前系统共有 " + accountDatabase.size() + " 个账户");

      for (BankAccount account : accountDatabase.values()) {

       account.displayInfo();
      

      }
      }
      }

      1. 系统主入口
        java
        /**
  • 工商银行模拟器 - 启动类
  • 教学目的:程序入口和简单测试
    */
    public class BankSystemDemo {
    public static void main(String[] args) {

     System.out.println("🎬 开始运行工商银行模拟器教学演示...");
     System.out.println("======================================");
    
     // 创建银行系统实例
     ICBCBankSystem icbc = new ICBCBankSystem();
    
     // 教学演示:预创建几个测试账户
     System.out.println("\n📝 创建演示账户...");
     icbc.openAccount("张三", "110101199001011234", "13800138000", 1000.0, "123456");
     icbc.openAccount("李四", "110101199002022345", "13900139000", 500.0, "654321");
    
     // 显示操作菜单
     icbc.showMenu();
    

    }
    }

相关文章
|
监控 供应链 数据挖掘
新材料生产工厂MES系统选型指南
如果您的企业也属于新材料生产制造行业,同时也计划通过MES系统来进行整个生产过程的数字化管控。 欢迎搜索万界星空科技线上咨询或者直接拨打网上热线,我们拥有丰富的新材料行业实施经验,可以根据您企业的实际情况提供解决方案!
248 0
新材料生产工厂MES系统选型指南
|
9月前
|
存储 设计模式 安全
中国工商银行模拟器,建设邮政邮政农业,java实现装逼神器
这是一个基于Java 8+开发的简单银行系统模拟项目,包含账户管理、资金操作(存款、取款)、转账功能及数据安全保护。
|
8月前
|
JSON API 数据安全/隐私保护
农业银行模拟器,工商建设邮政中国银行,虚拟余额生成模拟器
这个银行模拟系统包含三个主要模块:核心银行账户逻辑、图形用户界面和REST API接口
|
3月前
|
人工智能 自然语言处理 运维
2025 AI客服选型全景评测:从技术适配到价值赋能
伴随大语言模型与AI Agent技术的深度渗透,2025年智能客服行业完成了从“标准化问答工具”到“全场景智能服务中枢”的关键性跨越。这一转型不仅重构了客户服务的交互模式,更推动客服体系成为企业链接用户、优化运营的核心基础设施,其价值从单纯的成本节约延伸至业务增长赋能。
|
3月前
|
数据库 数据安全/隐私保护 数据库管理
招商银行模拟器,Python代码,教学演示版
哈喽大家好!今天我们来搞点好玩的——用Python模拟一个简化版的招商银行系统!适合刚学Python的小伙伴练手哦!
|
7月前
|
计算机视觉
魔兽世界脚本,原神脚本,冰焰脚本源码分享
魔兽世界模块实现自动打怪、拾取和技能循环 原神模块包含角色连招配置和自动寻宝功能
|
3月前
|
数据可视化 Java 关系型数据库
股票持仓生成器app,交割单也可以,用java代码实现模拟
兄弟们,今天咱们整点硬核的!手搓一个股票持仓生成器,连交割单都能模拟,纯Java实现,金融小白也能秒懂!💪
|
3月前
|
移动开发 前端开发 JavaScript
股票交割单生成器,收益曲线啊持仓图都可生成,用html来模拟器我们看看
哈喽各位小伙伴大家好呀!今天给大家带来一个超实用的前端项目——股票交割单生成器!完全纯前端实现
|
3月前
|
人工智能 数据可视化 Java
股票持仓交割单生成器app,java版代码分享,仅供学习参考
哈喽各位股东们!今天给大家带来一个超级实用的Java小项目——股票持仓生成器App!适合想学Java、想装X、想假装自己是大佬的各位(包括我本人)