,本文利Python写了一个管理系统完整版如下
- 开户功能:用户在ATM机上根据提示“请输入姓名:”、“请输入身份证号:”、“请输入手机号:”依次输入姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
- 查询功能:根据用户输入的卡号、密码查询卡中余额,如果连续3次输入错误密码,该卡号会被锁定。
- 取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定;然后接收用户输入的取款金额,如果取款金额大于卡中余额或取款金额小于0,系统进行提示并返回功能页面。
- 存款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定,然后接收用户输入的取款金额,如果存款金额小于0,系统进行提示并返回功能页面。
- 转账功能:用户需要分别输入转出卡号与转入卡号,如果连续3次输入错误密码,卡号会被锁定。当输入转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能,转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
- 锁定功能:根据输入的卡号密码执行锁定功能,锁定之后该卡不能执行查询、取款、存款、转账等操作。
- 解锁功能:根据输入的卡号密码执行解锁功能,解锁后能对该卡执行查询、取款、存款、转账等操作。
- 存盘功能:执行存盘功能后,程序执行的数据会写入本地文件中。
- 退出功能:执行退出功能时,需要输入管理员的账户密码,如果输入的账号密码错误,则返回功能页面,如果输入的账号密码正确,则执行存盘并退出系统。
- 菜单功能
- 本人纯手写,学生作品,水平有限,已经过多轮测试,如果出现问题请自行百度
- -----------------------------------------------------------------------------------------------------------
- 开户功能:用户在ATM机上根据提示“请输入姓名:”、“请输入身份证号:”、“请输入手机号:”依次输入姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
-
#注意此代码必须在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()