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

    }
    }

相关文章
|
7月前
|
缓存 自然语言处理 监控
工商银行App模拟器下载,数值计算MyPy工具集
该项目用于工商银行APP木契数据计算,采用Python技术栈开发,提供高效的数据处理与分析工具。
1891 0
|
7月前
|
XML JSON 数据可视化
中国工商银行模拟器,数值计算与可视化Chef工具包
该项目为中工商银行某期数据计算可视化开发工具包,用于金融数据分析与可视化展示,技术栈主要基于Python及前端可视化库。
763 0
|
10月前
|
设计模式 Java API
建设银行模拟器,java演示版,非常巧妙
大家好,我是代码の艺术家!最近在学习Java面向对象编程,突发奇想:能不能用Java模拟一个完整的银行系统
|
存储 设计模式 安全
中国工商银行模拟器,建设邮政邮政农业,java实现装逼神器
这是一个基于Java 8+开发的简单银行系统模拟项目,包含账户管理、资金操作(存款、取款)、转账功能及数据安全保护。
|
7月前
|
数据采集 算法 Java
中国农业银行模拟器,数值计算Nemerle工具包
该项目为中医行气数据计算提供工具包,支持相关算法实现与数据分析,技术栈主要包括Python、NumPy及Pandas库。
1000 0
|
7月前
|
JSON 自然语言处理 安全
银行高仿app模拟器,数值模拟Elixir引擎
该项目为银行移动端应用开发,采用React Native框架实现跨平台功能,后端使用Spring Boot构建服务,并集成MySQL数据库进行数据存储与管理。
938 0
|
7月前
|
存储 JavaScript 前端开发
usdt余额模拟生成器,模拟生成PureScript工具库
该项目为USDT母生成器,采用PureScript技术栈开发,旨在提供安全可靠的USDT母生成工具,服务于相关区块链应用开发。
1429 0
|
7月前
|
XML JSON 测试技术
农业银行余额模拟器,数值计算Nix工具包
该项目用于银行反欺诈数据模拟与计算,采用Python与大数据技术栈,支持风险模型测试与策略验证。
2390 0
|
7月前
|
存储 安全 调度
银行流水模拟器,数值流处理Python引擎
该项目为银行流水处理Python引擎,用于自动化解析与清洗银行交易数据,支持多格式文件导入,技术栈基于Python及Pandas等数据处理库。
868 1
|
7月前
|
缓存 Java 调度
高仿银行app可改余额下载,数值模拟与修改TXL引擎
该项目为银行APP开发框架,采用Java与Spring Boot构建后端服务,结合Vue.js实现前端界面,集成MySQL数据库与Redis缓存以支持高并发交易处理。
935 0

热门文章

最新文章