Skip to content

uio8k/ATM-Simulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ATM-Simulator

计算机网络课程作业 — 基于 Java Socket 的 ATM 模拟系统

📋 项目简介

本项目实现了一个基于 C/S 架构 的 ATM(自动取款机)模拟系统,采用 Java Socket 进行网络通信。服务端支持多客户端并发访问,提供用户认证、余额查询、取款等核心银行业务功能。系统同时提供了命令行客户端图形界面客户端两种交互方式。

🏗️ 系统架构

┌──────────────┐        TCP Socket        ┌──────────────┐
│  ATMClient   │◄─────────────────────────►│              │
│  (命令行)     │    文本协议通信            │  ATMServer   │
└──────────────┘                           │              │
                                           │  多线程处理   │
┌──────────────┐                           │              │
│   ATMGUI     │◄─────────────────────────►│  数据持久化   │
│  (图形界面)   │    文本协议通信            │              │
└──────────────┘                           └──────┬───────┘
                                                  │
                                    ┌─────────────┴─────────────┐
                                    │  users.txt   balances.txt │
                                    │  (用户口令)    (账户余额)    │
                                    └───────────────────────────┘

📁 项目结构

├── src/
│   ├── ATMServer.java    # 服务端:多线程处理客户端请求
│   ├── ATMClient.java    # 命令行客户端
│   ├── ATMGUI.java       # 图形界面客户端(Swing)
│   └── Main.java         # 测试文件
├── users.txt             # 用户数据(卡号 + 口令)
├── balances.txt          # 余额数据(卡号 + 余额)
├── atm-server.log        # 服务端运行日志(自动生成)
├── atm-client.log        # 客户端运行日志(自动生成)
└── README.md

🔌 通信协议

系统使用自定义的文本协议进行通信:

客户端发送 服务端响应 说明
HELO <卡号> 500 AUTH REQUIRED! / 401 ERROR! 卡号认证
PASS <口令> 525 OK! / 401 ERROR! 口令验证
BALA AMNT:<金额> 查询余额
WDRA <金额> 525 OK! / 401 ERROR! 取款操作
QUIT BYE 断开连接

认证最多重试 3 次,每次重试前会询问用户是否继续。

🚀 使用方法

1. 编译项目

javac -d bin src/*.java

2. 启动服务端

# 使用默认端口 2525
java -cp bin ATMServer

# 指定端口
java -cp bin ATMServer 8888

3. 启动客户端

命令行客户端:

# 连接本地服务器(默认 127.0.0.1:2525)
java -cp bin ATMClient

# 指定服务器地址和端口
java -cp bin ATMClient 192.168.1.100 8888

图形界面客户端:

# 连接本地服务器(默认 127.0.0.1:2525)
java -cp bin ATMGUI

# 指定服务器地址和端口
java -cp bin ATMGUI 192.168.1.100 8888

👤 测试账号

卡号 口令 初始余额
100001 1234 ¥5,000.00
100002 1111 ¥1,000.50
100003 0721 ¥6,000.00

✨ 功能特性

服务端

  • ✅ 多线程并发处理,支持同时连接多个客户端
  • ✅ 用户数据从文件加载(users.txt / balances.txt
  • ✅ 取款后自动更新余额文件
  • ✅ 完整的操作日志记录(atm-server.log
  • ✅ 支持自定义监听端口(默认 2525)

客户端

  • ✅ 卡号 + 口令双重认证,最多 3 次重试
  • ✅ 余额查询、取款操作
  • ✅ 支持自定义服务器地址和端口
  • ✅ 命令行客户端:轻量简洁,适合远程操作
  • ✅ 图形界面客户端:Swing GUI,操作直观友好

图形界面亮点

  • 🎨 现代化 UI 设计,三面板 CardLayout 切换
  • 🔗 连接面板:可配置目标服务器 IP 和端口
  • 🔐 登录面板:卡号/口令输入,支持回车快捷操作
  • 💰 主面板:余额显示 + 取款操作,实时状态反馈

🛠️ 技术要点

  • 网络编程java.net.Socket / ServerSocket TCP 通信
  • 并发处理ExecutorService 线程池 + ConcurrentHashMap
  • 数据持久化:文件 I/O 读写用户数据和余额
  • GUI 编程:Java Swing(CardLayoutGridBagLayout
  • 日志系统:带时间戳的日志输出(控制台 + 文件双写)

📝 运行环境

  • JDK:8 及以上版本
  • 操作系统:Windows / Linux / macOS

计算机学院 · 计算机网络课程作业

About

计网作业2

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages