工商银行模拟器,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();
    

    }
    }

相关文章
|
10天前
|
数据采集 人工智能 安全
|
5天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
316 164
|
4天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
322 155
|
5天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
368 4
|
13天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
906 7

热门文章

最新文章