15分钟学 Python 第27天 : 网络编程基础-简易银行系统
Day 27: 网络编程基础-简易银行系统
课程目标
在本课程中,我们将学习如何利用Python进行网络编程,通过构建一个简易的银行系统来实践网络应用开发。我们将涵盖以下内容:
- 网络编程基础
- TCP/IP协议概述
- 客户端-服务器模型
- 简易银行系统的设计
- 代码实现
- 运行流程图
- 练习题与总结
1. 网络编程基础
网络编程是指通过计算机网络进行应用程序开发的过程。在Python中,网络编程主要通过 socket
模块来实现。
1.1 Socket概述
Socket是网络通讯的一种基础形式,它提供了一个在网络中进行数据发送和接收的双向通道。常见的Socket类型有:
- 流式Socket(TCP):面向连接的,可靠的数据传输。
- 数据报Socket(UDP):无连接,不保证数据传输的可靠性。
2. TCP/IP协议概述
TCP/IP协议簇是互联网的基础,主要包括以下协议:
- TCP(传输控制协议): 确保数据的准确和完整传输。
- IP(互联网协议): 负责在网络中传输数据包,并找到目标位置。
2.1 TCP/IP工作原理
TCP/IP协议确保了数据包的顺序和完整性,工作流程如下:
- 连接建立:客户端向服务器发起连接请求。
- 数据传输:双方根据需要进行数据的发送和接收。
- 连接关闭:数据传输完成后,断开连接。
3. 客户端-服务器模型
在网络编程中,通常采用客户端-服务器模型。其基本职责是:
- 服务器: 监听客户端请求,处理并返回结果。
- 客户端: 发起请求并接收服务的结果。
3.1 简易银行系统架构
我们将设计一个简易银行系统,包含以下功能:
- 用户注册
- 查询余额
- 存款
- 取款
3.2 数据存储
我们将使用字典来模拟用户账户数据,其结构如下:
用户名 | 密码 | 余额 |
---|---|---|
user1 | pwd1 | 1000.0 |
user2 | pwd2 | 500.0 |
4. 简易银行系统的设计
4.1 系统功能模块
- 用户注册模块
- 账户管理模块
- 交易处理模块
4.2 交互流程
系统与用户的交互流程如下:
- 用户连接到服务器。
- 选择操作:注册、查询余额、存款、取款。
- 输入必要的参数。
- 服务器处理请求,返回结果。
5. 代码实现
接下来我们将实现简易银行系统的客户端和服务器端代码。
5.1 服务器端代码
import socket
import threading
# 用户账户信息(模拟数据库)
users = {
'user1': {'password': 'pwd1', 'balance': 1000.0},
'user2': {'password': 'pwd2', 'balance': 500.0},
}
def handle_client(client_socket):
while True:
request = client_socket.recv(1024).decode()
if not request:
break
print(f"Received: {request}")
command, *args = request.split()
if command == 'REGISTER':
username, password = args
if username in users:
response = 'Username already exists.'
else:
users[username] = {'password': password, 'balance': 0.0}
response = 'User registered successfully.'
elif command == 'BALANCE':
username, password = args
if username in users and users[username]['password'] == password:
balance = users[username]['balance']
response = f'Your balance is: {balance}'
else:
response = 'Invalid username or password.'
elif command == 'DEPOSIT':
username, password, amount = args
amount = float(amount)
if username in users and users[username]['password'] == password:
users[username]['balance'] += amount
response = 'Deposit successful.'
else:
response = 'Invalid username or password.'
elif command == 'WITHDRAW':
username, password, amount = args
amount = float(amount)
if username in users and users[username]['password'] == password:
if users[username]['balance'] >= amount:
users[username]['balance'] -= amount
response = 'Withdrawal successful.'
else:
response = 'Insufficient funds.'
else:
response = 'Invalid username or password.'
else:
response = 'Invalid command.'
client_socket.send(response.encode())
client_socket.close()
def start_server():
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("0.0.0.0", 9999))
server.listen(5)
print("Server listening on port 9999...")
while True:
client_socket, addr = server.accept()
print(f"Accepted connection from {addr}")
client_handler = threading.Thread(target=handle_client, args=(client_socket,))
client_handler.start()
if __name__ == "__main__":
start_server()
5.2 客户端代码
import socket
def send_request(request):
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("127.0.0.1", 9999))
client.send(request.encode())
response = client.recv(4096).decode()
client.close()
return response
def main():
while True:
print("Welcome to the Simple Bank System")
print("1. Register")
print("2. Check Balance")
print("3. Deposit")
print("4. Withdraw")
print("5. Exit")
choice = input("Select an operation: ")
if choice == '1':
username = input("Enter username: ")
password = input("Enter password: ")
request = f"REGISTER {username} {password}"
elif choice == '2':
username = input("Enter username: ")
password = input("Enter password: ")
request = f"BALANCE {username} {password}"
elif choice == '3':
username = input("Enter username: ")
password = input("Enter password: ")
amount = input("Enter deposit amount: ")
request = f"DEPOSIT {username} {password} {amount}"
elif choice == '4':
username = input("Enter username: ")
password = input("Enter password: ")
amount = input("Enter withdrawal amount: ")
request = f"WITHDRAW {username} {password} {amount}"
elif choice == '5':
break
else:
print("Invalid choice. Try again.")
continue
response = send_request(request)
print(response)
if __name__ == "__main__":
main()
6. 运行流程图
flowchart TD
A[用户启动客户端] --> B{选择操作}
B -->|注册| C[输入用户名和密码] --> D[发送注册请求]
B -->|查询余额| E[输入用户名和密码] --> F[发送查询请求]
B -->|存款| G[输入用户名、密码、存款金额] --> H[发送存款请求]
B -->|取款| I[输入用户名、密码、取款金额] --> J[发送取款请求]
B -->|退出| K[关闭客户端]
D --> L[服务器处理请求] --> M[返回结果给客户端]
F --> L
H --> L
J --> L
7. 练习题
- 修改代码,允许用户进行多次存款和取款操作,而不需要重新输入用户名和密码。
- 添加功能:查看历史交易记录(需要模拟)。
- 增加用户账户删除功能。
总结
本课程通过构建一个简易银行系统,实践了Python网络编程的基本概念,包括Socket的使用、客户端-服务器模型及数据处理。在实现过程中,我们模拟了账户管理和基本交易功能,为学习者提供了一个可以扩展和深入的项目基础。
怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!
原文地址:https://blog.csdn.net/weixin_40780178/article/details/142610433
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!