python+银行管理系统
,本文利Python写了一个管理系统完整版如下
- 开户功能:用户在ATM机上根据提示“请输入姓名:”、“请输入身份证号:”、“请输入手机号:”依次输入姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
- 查询功能:根据用户输入的卡号、密码查询卡中余额,如果连续3次输入错误密码,该卡号会被锁定。
- 取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定;然后接收用户输入的取款金额,如果取款金额大于卡中余额或取款金额小于0,系统进行提示并返回功能页面。
- 存款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定,然后接收用户输入的取款金额,如果存款金额小于0,系统进行提示并返回功能页面。
- 转账功能:用户需要分别输入转出卡号与转入卡号,如果连续3次输入错误密码,卡号会被锁定。当输入转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能,转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
- 锁定功能:根据输入的卡号密码执行锁定功能,锁定之后该卡不能执行查询、取款、存款、转账等操作。
- 解锁功能:根据输入的卡号密码执行解锁功能,解锁后能对该卡执行查询、取款、存款、转账等操作。
- 存盘功能:执行存盘功能后,程序执行的数据会写入本地文件中。
- 退出功能:执行退出功能时,需要输入管理员的账户密码,如果输入的账号密码错误,则返回功能页面,如果输入的账号密码正确,则执行存盘并退出系统。
- 菜单功能
- 本人纯手写,学生作品,水平有限,已经过多轮测试,如果出现问题请自行百度
#注意此代码必须在python3.3版本以上运行
bank_data = {}
def generate_card_number():
#无限循环,它会持续运行,直到找到一个不重复的卡号。
while True:
#使用 random.choices 函数从字符串 '0123456789' 中随机选择6个字符(即0-9之间的数字)。
# k=6 指定了要选择的字符数量。random.choices 会返回一个列表,
# 但由于我们只需要一个字符串,所以使用 join 方法将列表中的字符连接成一个字符串。
card_number = ''.join(random.choices('0123456789', k=6))
if card_number not in bank_data:
return card_number
# 开户功能
def open_account():
name = input("请输入姓名: ")
id_card = input("请输入身份证号: ")
phone = input("请输入手机号: ")
balance = float(input("请输入预存金额: "))
password = input("请输入密码: ")
#生成随机卡号
card_number = generate_card_number()
bank_data = {
'card_number':card_number,
'name': name,
'id_card': id_card,
'phone': phone,
'balance': balance,
'password': password,
'locked': False
}
print(f"开户成功,您的卡号是: {card_number}")
# 更改当前工作目录
os.chdir('E:\\')
# 打开文件进行写入:
with open('E:\\chapter06\\D.txt', 'a+', encoding='utf-8') as f:
json.dump()
# 函数将bank_data(一个Python对象,如字典或列表)序列化为JSON格式,并将结果写入之前打开的文件f中
json.dump(bank_data, f)
# 这行代码在文件末尾添加一个换行符
f.write('\n')
print(f"开户成功")
查询功能:根据用户输入的卡号、密码查询卡中余额,如果连续3次输入错误密码,该卡号会被锁定。
def verify_password():
os.chdir('E:\\') # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
card_found = False # 初始化卡号是否找到的标志
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
card_number = input('请输入账号:') # 获取用户输入的卡号
password = input('请输入密码:') # 获取用户输入的密码
for line in f:
data = json.loads(line) # 解析每行的JSON对象
if data['card_number'] == card_number: # 如果找到输入的卡号
card_found = True # 将卡号找到的标志设为True
if data['password'] == password: # 如果密码匹配
print(f'密码正确,余额为{data["balance"]}')
# 这里可以添加逻辑来锁定或解锁卡片,但不应在验证密码后立即锁定
return
if data['password'] != password: # 如果密码不匹配
print(f"卡号{card_number}输入错误1次")
for i in range(2): # 最多允许再次输入密码2次
repassword = input("请再次输入密码:")
if data['password'] != repassword: # 如果再次输入的密码不正确
print(f"你已经输入错误{i+2}次")
continue
elif data['password'] == repassword: # 如果再次输入的密码正确
print(f'密码正确,余额为{data["balance"]}')
return
if i == 1: # 如果连续输入密码错误达到3次
print(f"{card_number}输入密码错误3次,已经锁定")
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line)
if data['card_number'] == card_number:
# 复制数据并添加锁定标志
locked_data = data.copy()
locked_data['locked'] = True
json.dump(locked_data, f_write)
f_write.write('\
')
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
break
elif data['card_number'] != card_number:
continue
if not card_found:
print('卡号不存在')
os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt') # 替换原始数据文件为更新后的临时文件
取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定;然后接收用户输入的取款金额,如果取款金额大于卡中余额或取款金额小于0,系统进行提示并返回功能页面。
def withdraw_money():
os.chdir('E:\\') # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
card_found = False # 初始化卡号是否找到的标志
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
card_number = input('请输入账号:') # 获取用户输入的卡号
password = input('请输入密码:') # 获取用户输入的密码
Withdrawal_amount = float(input('请输入取款金额:')) # 获取用户输入的取款金额
for line in f:
data = json.loads(line) # 解析每行的JSON对象
if data['card_number'] == card_number: # 如果找到输入的卡号
card_found = True # 将卡号找到的标志设为True
if data['password'] == password: # 如果密码匹配
print(f'密码正确,余额为{data["balance"]}')
if data['locked'] == False: # 如果卡片未锁定
print('可以取款')
print('请根据显示的余额按需取款')
if Withdrawal_amount > data['balance']: # 如果取款金额大于余额
print('取款金额大于存款,请重新输入')
return
else:
print('开始取款')
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line)
if data['card_number'] == card_number:
# 复制数据并更新余额
locked_data = data.copy()
locked_data['balance'] -= Withdrawal_amount
json.dump(locked_data, f_write)
f_write.write('\
')
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
break
elif data['locked'] != False: # 如果卡片被锁定
print('被锁定,不可以取款')
return
if data['password'] != password: # 如果密码不匹配
print(f"卡号{card_number}输入错误1次")
for i in range(2): # 最多允许再次输入密码2次
repassword = input("请再次输入密码:")
if data['password'] != repassword: # 如果再次输入的密码不正确
print(f"你已经输入错误{i+2}次")
continue
elif data['password'] == repassword: # 如果再次输入的密码正确
print(f'密码正确,余额为{data["balance"]}')
return
if i == 1: # 如果连续输入密码错误达到3次
print(f"{card_number}输入密码错误3次,已经锁定")
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line)
if data['card_number'] == card_number:
# 复制数据并添加锁定标志
locked_data = data.copy()
locked_data['locked'] = True
json.dump(locked_data, f_write)
f_write.write('\
')
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
break
elif data['card_number'] != card_number:
continue
if not card_found:
print('卡号不存在')
os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt') # 替换原始数据文件为更新后的临时文件
存款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定,然后接收用户输入的取款金额,如果存款金额小于0,系统进行提示并返回功能页面。
def count_money():
os.chdir('E:\\') # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
card_found = False # 初始化卡号是否找到的标志
# 打开存储卡片信息的文件,读取卡片数据
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
card_number = input('请输入账号:') # 获取用户输入的卡号
password = input('请输入密码:') # 获取用户输入的密码
Withdrawal_amount = float(input('请输入存款金额:')) # 获取用户输入的存款金额并转换为浮点数
for line in f:
data = json.loads(line) # 解析每行的JSON对象
# 检查输入的卡号是否与当前行的卡号匹配
if data['card_number'] == card_number:
card_found = True # 将卡号找到的标志设为True
# 检查输入的密码是否正确
if data['password'] == password:
print(f'密码正确,余额为{data["balance"]}') # 显示正确的密码和当前余额
# 检查卡片是否未被锁定
if data['locked'] == False:
print('可以存款') # 提示用户可以进行存款操作
print('请根据显示的余额按需存款')
# 打开文件进行读写操作,将数据更新到临时文件中
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line) # 解析每行的JSON对象
# 检查是否是当前卡号的数据
if data['card_number'] == card_number:
# 复制数据并更新余额
updated_data = data.copy() # 复制当前数据
updated_data['balance'] += Withdrawal_amount # 增加存款金额
json.dump(updated_data, f_write) # 将更新后的数据写入临时文件
f_write.write('\
') # 写入换行符
else:
# 如果不是当前卡号的数据,直接写入临时文件
f_write.write(line)
elif data['locked'] != False: # 如果卡片被锁定
print('被锁定,不可以存款') # 提示用户卡片被锁定
return # 结束函数执行
if data['password'] != password: # 如果密码不匹配
print(f"卡号{card_number}输入错误1次") # 提示用户密码错误
for i in range(2): # 最多允许再次输入密码2次
repassword = input("请再次输入密码") # 获取用户再次输入的密码
if data['password'] != repassword: # 如果再次输入的密码不正确
print(f"你已经输入错误{i + 2}次") # 提示用户错误次数
continue # 继续循环请求密码
elif data['password'] == repassword: # 如果再次输入的密码正确
print(f'密码正确,余额为{data["balance"]}') # 显示正确的密码和当前余额
return # 结束函数执行
if i == 1: # 如果连续输入密码错误达到3次
print(f"{card_number}输入密码错误3次,已经锁定") # 提示用户卡片已锁定
# 打开文件进行读写操作,将数据更新到临时文件中
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line)
# 检查是否是当前卡号的数据
if data['card_number'] == card_number:
# 复制数据并添加锁定标志
locked_data = data.copy() # 复制当前数据
locked_data['locked'] = True # 设置锁定标志
json.dump(locked_data, f_write) # 将更新后的数据写入临时文件
f_write.write('\
') # 写入换行符
else:
# 如果不是当前卡号的数据,直接写入临时文件
f_write.write(line)
break # 结束循环,完成锁定操作
elif data['card_number'] != card_number:
continue # 如果卡号不匹配,继续处理下一行数据
if card_found == False: # 如果没有找到卡号
print('卡号不存在') # 提示用户卡号不存在
# 替换原始数据文件为更新后的临时文件
os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')
转账功能:用户需要分别输入转出卡号与转入卡号,如果连续3次输入错误密码,卡号会被锁定。 当输入转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能,转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
def transfer_accounts():
in_card = input('请输入转入卡号:') # 获取用户输入的转入卡号
on_card = input('请输入转出卡号:') # 获取用户输入的转出卡号
on_password = input('请输入转出卡号的密码:') # 获取用户输入的转出卡号密码
card_found = False # 初始化转入卡号是否找到的标志
card_found1 = False # 初始化转出卡号是否找到的标志
os.chdir('E:\\') # 切换到指定路径,通常建议使用完整路径而非改变当前工作目录
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
for line in f:
data = json.loads(line) # 解析每行的JSON对象
if data['card_number'] == in_card: # 如果找到转入卡号
card_found = True # 将转入卡号找到的标志设为True
print('找到转入卡号')
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f:
for line in f:
data = json.loads(line) # 解析每行的JSON对象
if data['card_number'] == on_card: # 如果找到转出卡号
card_found1 = True # 将转出卡号找到的标志设为True
print('找到转出卡号')
# 检查转出卡号的密码是否正确
if data['password'] == on_password:
# 检查转出卡号是否被冻结
if data['locked'] == True:
print('此卡已被冻结,无法操作')
elif data['locked'] != True:
print('状态正常,即将进入转账页面')
on_balance = float(input('请输入转出金额:')) # 获取用户输入的转出金额并转换为浮点数
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
print('开始转出')
for line in f_read:
data = json.loads(line)
if data['card_number'] == on_card:
# 复制数据并更新余额
locked_data = data.copy()
locked_data['balance'] = locked_data['balance'] - on_balance
json.dump(locked_data, f_write)
f_write.write('\n')
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
with open('E:\\chapter06\\D_temp.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D.txt', 'w', encoding='utf-8') as f_write:
print("开始转入")
for line in f_read:
data = json.loads(line)
if data['card_number'] == in_card:
# 复制数据并更新余额
locked_data = data.copy()
locked_data['balance'] = locked_data['balance'] + on_balance
json.dump(locked_data, f_write)
f_write.write('\n')
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
print('转账成功')
break
elif data['password'] != on_password: # 如果转出卡号的密码不正确
print(f"卡号{on_card}输入错误1次")
for i in range(2): # 最多允许再次输入密码2次
repassword = input("请再次输入密码") # 获取用户再次输入的密码
if data['password'] != repassword: # 如果再次输入的密码不正确
print(f"你已经输入错误{i + 2}次") # 提示用户错误次数
continue # 继续循环请求密码
elif data['password'] == repassword: # 如果再次输入的密码正确
print(f'密码正确,请记住你的密码,即将回到初始页面')
transfer_accounts() # 重新调用函数进入初始页面
if i == 1: # 如果连续输入密码错误达到3次
print(f"{on_card}输入密码错误3次,已经锁定")
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line)
if data['card_number'] == on_card:
# 复制数据并添加锁定标志
locked_data = data.copy()
locked_data['locked'] = True
json.dump(locked_data, f_write)
f_write.write('\n')
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
break
elif data['card_number'] != on_card:
continue
if card_found1 == False: # 如果没有找到转出卡号
print('转出卡号不存在')
elif data['card_number'] != in_card:
continue
if card_found == False: # 如果没有找到转入卡号
print('转入卡号不存在')
os.remove('E:\\chapter06\\D_temp.txt') # 删除临时文件
锁定功能:根据输入的卡号密码执行锁定功能,锁定之后该卡不能执行查询、取款、存款、转账等操作。
def lock_account(card_number, password):
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line)
if data['card_number'] == card_number and data['password'] == password:
# 复制数据并添加锁定标志
locked_data = data.copy()
locked_data['locked'] = True
json.dump(locked_data, f_write)
f_write.write('\n')
elif data['card_number'] == card_number and data['password'] != password:
print('密码错误')
return
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
# 替换原始文件
os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')
解锁功能:根据输入的卡号密码执行解锁功能,解锁后能对该卡执行查询、取款、存款、转账等操作
def unlock_account(card_number, password):
with open('E:\\chapter06\\D.txt', 'r', encoding='utf-8') as f_read, \
open('E:\\chapter06\\D_temp.txt', 'w', encoding='utf-8') as f_write:
for line in f_read:
data = json.loads(line)
if data['card_number'] == card_number and data['password'] == password:
# 复制数据并添加锁定标志
locked_data = data.copy()
locked_data['locked'] = False
json.dump(locked_data, f_write)
f_write.write('\n')
elif data['card_number'] == card_number and data['password'] != password:
print('密码错误')
return
else:
# 如果不是目标卡片,则直接写入临时文件
f_write.write(line)
# 替换原始文件
os.replace('E:\\chapter06\\D_temp.txt', 'E:\\chapter06\\D.txt')
菜单
def new_menu():
print('************************************')
print('*** ***')
print('*** ***')
print('*** 欢迎登录银行管理系统 ***')
print('*** ***')
print('*** ***')
print('*** ***')
print('************************************')
input_card=input('请输入管理员账号:')
if input_card=='lzl':
print('账号正确,进入菜单')
menu()
else:
print('账号错误')
return
#10、菜单
def menu():
while True:
print('请确保python版本高于python3.3')
print("""
1. 开户
2. 查询余额
3. 取款
4. 存款
5. 转账
6. 锁定账户
7. 解锁账户
8. 退出系统
""")
choice = input("请选择功能编号:")
# 1.开户
if choice == '1':
print('存储路径E:\\chapter06\\D.txt')
open_account()
#2. 查询余额
elif choice == '2':
verify_password()
# 3. 取款
elif choice == '3':
withdraw_money()
# 4. 存款
elif choice == '4':
count_money()
# 5. 转账
elif choice == '5':
transfer_accounts()
# 6. 锁定账户
elif choice == '6':
card_number = input('请输入账号:')
password = input('请输入密码:')
lock_account(card_number,password)
# 7. 解锁账户
elif choice == '7':
card_number = input('请输入账号:')
password = input('请输入密码:')
unlock_account(card_number,password)
#8.退出系统
# 8.退出系统
elif choice == '8':
n = str(input('请输管理员账号:'))
p = int(input('请输入管理员密码:'))
if n == 'lzl' and p == 2022131206:
print('账号密码正确')
print('所有数据已经保存完毕,即将退出系统')
return
else:
print('账号密码错误')
menu()
else:
print("无效的编号,请重新输入!")
menu()
new_menu()
———————————————————————————————————————————第二个版本
# 全局变量
card_info = {} # 存储卡号及相关信息的字典
locked_cards = {} # 存储被锁定的卡号
# 生成随机不重复的 6 位数字卡号
def generate_card_number():
while True:
card_number = random.randint(100000, 999999)
if card_number not in card_info:
return card_number
# 从文件中读取卡号信息
def read_card_info_from_file():
try:
with open('bank_data.json', 'r') as f:
data = json.load(f)
global card_info
card_info = data
except FileNotFoundError:
# 如果文件不存在,不做任何处理
pass
# 开户功能
def open_account():
name = input("请输入姓名:")
id_card = input("请输入身份证号:")
phone_number = input("请输入手机号:")
deposit_amount = float(input("请输入预存金额:"))
password = input("请输入密码:")
card_number = generate_card_number()
card_info[card_number] = {
"name": name,
"id_card": id_card,
"phone_number": phone_number,
"balance": deposit_amount,
"password": password,
"locked": False # 初始未锁定
}
print(f"开户成功!您的卡号为{card_number}")
# 查询功能
def query():
card_number = int(input("请输入卡号:"))
if card_number not in card_info:
print("卡号不存在,请重新输入!")
return
password = input("请输入密码:")
incorrect_count = 0
while card_info[card_number]["password"]!= password:
incorrect_count += 1
if incorrect_count == 3:
print("密码连续输入错误 3 次,卡号已被锁定!")
locked_cards[card_number] = True
card_info[card_number]["locked"] = True
return
password = input("密码错误,请重新输入:")
print(f"卡中余额为: {card_info[card_number]['balance']} 元")
# 取款功能
def withdraw():
card_number = int(input("请输入卡号:"))
if card_number not in card_info or card_info[card_number]["locked"]:
print("卡号不存在或已被锁定,请重新输入!")
return
password = input("请输入密码:")
incorrect_count = 0
while card_info[card_number]["password"]!= password:
incorrect_count += 1
if incorrect_count == 3:
print("密码连续输入错误 3 次,卡号已被锁定!")
locked_cards[card_number] = True
card_info[card_number]["locked"] = True
return
password = input("密码错误,请重新输入:")
balance = card_info[card_number]["balance"]
withdraw_amount = float(input("请输入取款金额:"))
if withdraw_amount > balance or withdraw_amount < 0:
print("取款金额错误,请重新输入!")
return
card_info[card_number]["balance"] -= withdraw_amount
print(f"取款成功,卡中余额为: {card_info[card_number]['balance']} 元")
# 存款功能
def deposit():
card_number = int(input("请输入卡号:"))
if card_number not in card_info or card_info[card_number]["locked"]:
print("卡号不存在或已被锁定,请重新输入!")
return
password = input("请输入密码:")
incorrect_count = 0
while card_info[card_number]["password"]!= password:
incorrect_count += 1
if incorrect_count == 3:
print("密码连续输入错误 3 次,卡号已被锁定!")
locked_cards[card_number] = True
card_info[card_number]["locked"] = True
return
password = input("密码错误,请重新输入:")
deposit_amount = float(input("请输入存款金额:"))
if deposit_amount < 0:
print("存款金额错误,请重新输入!")
return
card_info[card_number]["balance"] += deposit_amount
print(f"存款成功,卡中余额为: {card_info[card_number]['balance']} 元")
# 转账功能
def transfer():
transfer_card_number = int(input("请输入转出卡号:"))
if transfer_card_number not in card_info or card_info[transfer_card_number]["locked"]:
print("转出卡号不存在或已被锁定,请重新输入!")
return
password = input("请输入转出卡密码:")
incorrect_count = 0
while card_info[transfer_card_number]["password"]!= password:
incorrect_count += 1
if incorrect_count == 3:
print("密码连续输入错误 3 次,卡号已被锁定!")
locked_cards[transfer_card_number] = True
card_info[transfer_card_number]["locked"] = True
return
password = input("密码错误,请重新输入:")
receive_card_number = int(input("请输入转入卡号:"))
if receive_card_number not in card_info:
print("转入卡号不存在,请重新输入!")
return
transfer_amount = float(input("请输入转账金额:"))
confirm = input("是否确认转账(y/n)")
if confirm.lower() == 'y':
card_info[transfer_card_number]["balance"] -= transfer_amount
card_info[receive_card_number]["balance"] += transfer_amount
print("转账成功!")
else:
print("取消转账操作。")
# 锁定功能
def lock_card():
card_number = int(input("请输入卡号:"))
password = input("请输入密码:")
if card_info[card_number]["password"] == password:
locked_cards[card_number] = True
card_info[card_number]["locked"] = True
print("卡号锁定成功!")
else:
print("密码错误,锁定失败!")
# 解锁功能
def unlock_card():
card_number = int(input("请输入卡号:"))
password = input("请输入密码:")
if card_info[card_number]["password"] == password:
if card_number in locked_cards:
del locked_cards[card_number]
card_info[card_number]["locked"] = False
print("卡号解锁成功!")
else:
print("该卡未被锁定,无需解锁!")
else:
print("密码错误,解锁失败!")
# 存盘功能
def save_to_file():
with open('bank_data.json', 'w') as f:
json.dump(card_info, f)
print("数据已成功保存到本地文件!")
# 退出功能
def exit_system(name, student_id):
name = ''
student_id = ''
error_count = 0 # 新增:记录错误次数
while True:
admin_name = input("请输入管理员账户(您的姓名):")
admin_password = input("请输入密码(您的学号):")
if admin_name == name and admin_password == student_id:
save_to_file()
print("存盘并退出成功!")
break # 输入正确,退出循环
else:
error_count += 1 # 错误次数加 1
if error_count >= 3: # 达到最大错误次数
print("输入错误次数过多,退出程序。")
exit() # 直接退出程序
print("账号或密码错误,请重新输入!")
# 主界面
def main_menu():
print("*" * 40)
print("*" * 40)
print(
"*** 1.开户 2.查询 ***\n*** *** \n*** 3.取款 4.存款 ***")
print(
"*** ***\n*** 5.转账 6.锁定 ***\n*** *** \n*** 7.解锁 存盘(C) ***")
print(
"*** ***\n*** 退出(Q) ***\n*** *** ")
print("*" * 40)
print("*" * 40)
choice = input("请输入您的操作: ") # 改为接收字符串输入
if choice == '1':
open_account()
elif choice == '2':
query()
elif choice == '3':
withdraw()
elif choice == '4':
deposit()
elif choice == '5':
transfer()
elif choice == '6':
lock_card()
elif choice == '7':
unlock_card()
elif choice.upper() == 'C': # 处理大写的 'C'
save_to_file()
elif choice.upper() == 'Q': # 处理大写的 'Q'
print("*" * 40)
print("*" * 40)
print("*** ***")
print("*** ***")
print("*** 欢迎登录银行系统 ***")
print("*** ***")
print("*** ***")
print("*" * 40)
print("*" * 40)
exit_system("您的姓名", "您的学号")
else:
print("无效的选择,请重新输入!")
# 主程序
if __name__ == "__main__":
read_card_info_from_file() # 在程序开始时读取卡号信息
while True:
main_menu()
作者:qingzhou112