部分源代码:
# -*- coding: utf-8 -*-
#author :32301227, time:2024年1月1日11:12:06 version:1.0.0
import pandas as pd
def deleteID(userID):
#删除账户
print("--------------------------")
for i in df.index :
if df.at[i,"id"] == userID :
if df.at[i,"wallet"] != 0 :
print("余额尚不为 0 ,请先取款, 删除账户失败")
print("--------------------------")
return
else :
df.drop(index = i, inplace=True)
print("您的账户",userID,"已删除")
print("--------------------------")
return
def changeID(userID):
#修改账户ID
print("--------------------------")
newID = str(input("请输入新的账号: "))
if newID in df['id'].values:
print("该账号已存在,请输入一个新的账号")
return
for i in df.index :
if df.at[i,"id"] == userID:
df.loc[i,"id"] = newID
print("修改账号成功")
print("--------------------------")
break
return
def changePassword(userID):
#修改密码
print("--------------------------")
if userID not in df['id'].values:
print("该账号不存在")
return
newPassword = str(input("请输入新的密码: "))
checkPassword = str(input("请再次输入密码: "))
if newPassword == checkPassword :
for i in df.index :
if df.at[i,"id"] == userID:
df.loc[i,"password"] = newPassword
print("修改密码成功")
print("--------------------------")
return
else :
print("两次密码不一致,修改密码失败")
print("--------------------------")
return
def checkBalance(userID):
#实现余额查询功能
print("--------------------------")
for i in df.index :
if str(df.at[i,"id"]) == userID :
print("您的余额是 : " , df.at[i,"wallet"] , " 元")
print("--------------------------")
break
return
def withDraw(userID):
#取款
print("--------------------------")
userInput = int(input("请输入取款金额: "))
for i in df.index :
if df.at[i,"id"] == userID:
if float(df.at[i,"wallet"]) < float(userInput):
print("余额不足,取款失败")
print("--------------------------")
return
df.at[i,"wallet"] -= userInput # Subtract the withdrawal amount from the current balance
print("取款成功,您的余额是 : ", df.at[i,"wallet"], " 元")
print("--------------------------")
return
def deposite(userID):
#存款
print("--------------------------")
userInput = int(input("请存入: "))
for i in df.index :
if df.at[i,"id"] == userID:
df.at[i,"wallet"] += userInput # Add the deposit amount to the current balance
print("您已成功存入" , userInput , " 元 , 当前账户余额" , df.at[i,"wallet"] ," 元" )
print("--------------------------")
return
print("账号不存在,存款失败")
print("--------------------------")
return
def cardin():
#登录,账号密码校验
#成功则为账号,失败则为"0"
print("--------------------------")
userID = str(input("请输入你的学号: "))
if userID not in df['id'].values:
print("错误的账号或密码")
print("--------------------------")
return "0"
userPassword = str(input("请输入你的密码: "))
for i in df.index:
if str(df.at[i,"id"]) == str(userID) and userPassword == df.at[i,"password"]:
print("成功登录")
print("--------------------------")
return userID
print("错误的账号或密码")
print("--------------------------")
return "0"
def newUser():
#新建校园网账号
print("--------------------------")
newID = str(input("请输入你的学号: "))
if newID in df['id'].values:
print("该学号已存在,请输入一个新的学号")
return
newPassword = str(input("请设置一个密码: "))
checkPassword = str(input("请再次输入密码: "))
if newPassword == checkPassword:
df.loc[df.shape[0]] = [newID, newPassword, 0] # Add a new row to the DataFrame
print("新账号创建成功")
print("--------------------------")
return
else:
print("两次密码不一致,新账号创建失败")
print("--------------------------")
return
def checkAdmin():
#验证管理员账户
print("--------------------------")
adminPassword = "123456"
userInput = str(input("请输入管理员密码: "))
if userInput == adminPassword :
return True
print("管理员密码错误")
print("--------------------------")
return False
df = pd.read_excel("users.xlsx") #读取excel
flag = True
while(flag == True):
try :
while(True):
print("--------------------------")
print("[1] 新建账户")
print("[2] 登录账户")
print("[7] 关机(仅管理员)")
print("--------------------------")
userInput = input("请输入操作对应的数字: ")
if userInput == "1":
newUser()
elif userInput == "2":
userID = cardin() # Call the cardin function to log the user in and get the userID
if userID != "0": # If the login was successful, call the maintain function with the userID
maintain(userID)
elif userInput == "7":
res = checkAdmin()
if res == True :
break
else :
continue
elif userInput == "114514":
genshi()
else:
print("错误的输入,请重试")
print("--------------------------")
continue
#end
df.to_excel("users.xlsx", sheet_name='Sheet1', index=False) #保存到excel
print("--------------------------")
print("关机,程序结束")
flag = False
except :
print("--------------------------")
print("sorry i know there are some bugs , so try again pls");
"""
功能对照
1 新建账户
2 登录账户
3 查询余额
4 取款
5 存款
6 退卡
7 关机(管理员)
8 修改密码
9 修改学号
0 删除账户
114514 管理员模式
"""
(1)主要函数
校园卡账户管理系统,包括创建、管理和删除用户账户,以及管理员功能。系统通过控制台接口与用户交互,操作包括账户登录、余额查询、取款、存款、账户信息修改等。
主要功能 | ||||
账户管理: | 创建新用户账户。 | 登录、修改和删除现有账户。 | 查询账户余额。 | 存款和取款操作。 |
管理员功能: | 管理员登录。 | 访问高级管理功能,如查看所有账户信息。 | ||
数据存储: | 用户数据存储在本地的 "users.xlsx" Excel文件中。 | 包括用户ID、密码和账户余额等信息。 |
主要函数 | ||
deleteID(userID) | 删除指定ID的用户账户。 | 需检查账户余额是否为零。 |
changeID(userID) | 修改指定ID的用户账号。 | 要求用户输入新账号。 |
changePassword(userID) | 修改指定ID的用户密码。 | 要求用户输入并确认新密码。 |
checkBalance(userID) | 查询指定ID的账户余额。 | |
withDraw(userID) | 用户指定账户取款。 | 要求用户输入取款金额。 |
deposite(userID) | 用户指定账户存款。 | 要求用户输入存款金额。 |
cardin() | 账号登录功能。 | 用户输入账号和密码进行登录。 |
newUser() | 创建新的校园卡账号。 | 用户输入账号和密码。 |
maintain(userID = "0") | 管理已有校园卡账号。 | 提供查询余额、取款、存款、修改密码、修改账号和删除账户等选项。 |
checkAdmin() | 验证管理员账户。 | |
genshi() | 管理员模式,提供高级功能。 |
数据存储
所有用户数据存储在本地的 "users.xlsx" Excel文件中。
下面详细介绍各个函数
函数 | 目的 | 参数 | 功能 | 依赖/返回 |
deleteID(userID) | 删除由 userID 标识的用户账户。 | userID - 要删除的用户账户的唯一标识符。 | 该函数遍历名为 df的DataFrame,该DataFrame假设包含用户账户详情。它检查记录的 id 字段是否与提供的 userID 匹配。如果找到匹配项:该函数检查用户的 wallet 字段。如果钱包余额不为零,它会打印一条消息,指出在余额清零前无法删除账户。 如果钱包余额为零,则从DataFrame中删除该账户,并打印确认消息。 | pandas:脚本使用 pandas 库进行DataFrame操作。 |
changeID(userID) | 修改特定用户账户的ID。 | userID - 需要修改ID的用户账户的唯一标识符。 | 函数允许用户输入一个新的账号ID,并将其更新到DataFrame df 中。成功更新后,信息会被保存到一个名为 "users.xlsx" 的Excel文件中,并打印成功消息。 | 无。该函数执行操作并向控制台打印消息。 |
changePassword(userID) | 允许用户为特定账户更改密码。 | userID - 需要更改密码的用户账户的唯一标识符。 | 用户首先输入新密码,然后再次输入以确认。如果两次输入的密码匹配,该函数将新密码更新到DataFrame df 中,并保存到 "users.xlsx" 文件。如果密码不匹配,打印错误消息。 | 无。该函数执行操作并向控制台打印消息。 |
checkBalance(userID) | 查询指定用户账户的余额。 | userID - 需要查询余额的用户账户的唯一标识符。 | 函数在DataFrame df 中查找与 userID 匹配的记录,并打印关联账户的余额。 | 无。该函数执行操作并向控制台打印消息。 |
withDraw(userID) | 允许用户从指定账户中取款。 | userID - 需要进行取款操作的用户账户的唯一标识符。 | 用户输入取款金额。函数检查账户余额是否充足。如果充足,从账户中扣除相应金额,并更新DataFrame df 及 "users.xlsx" 文件。如果余额不足,打印错误消息并拒绝取款。 | 无。该函数执行操作并向控制台打印消息。 |
deposite(userID) | 允许用户向指定账户存款。 | userID - 需要进行存款操作的用户账户的唯一标识符 | 用户输入存款金额。函数将金额添加到账户余额中,并更新DataFrame df 及 "users.xlsx" 文件。 | 无。该函数执行操作并向控制台打印消息。 |
cardin() | 登录功能,进行账号密码校验。 | 无。 | 用户输入学号进行登录。如果学号存在且密码正确,则返回学号,否则打印错误消息并返回"0"。 | 成功则返回账号ID,失败则返回"0"。 |
newUser() | 创建新的校园卡账号。 | 无。 | 用户输入学号和密码(两次输入以确认)。如果密码匹配,则在DataFrame df 中添加新记录,并保存到 "users.xlsx" 文件。 | 账号创建成功返回True,否则返回False。 |
maintain(userID = "0") | 对已有校园卡账号进行管理,包括查询余额、取款、存款、修改密码、修改账号和删除账户等操作。 | userID - 默认为"0",表示未登录状态。 | 如果用户未登录,则先调用 cardin() 函数登录。登录后,用户可选择进行的操作。根据用户输入执行相应的函数。 | 无。该函数执行操作并向控制台打印消息。 |
checkAdmin() | 验证管理员账户。 | 无。 | 用户输入管理员密码。如果匹配,则返回True,否则打印错误消息并返回False。 | 密码正确返回True,否则返回False。 |
genshi() | 管理员模式,提供创建账户、登录任意账户、显示所有账号和密码、退出管理员模式等功能。 | 无。 | 首先调用 checkAdmin() 函数进行管理员验证。验证通过后,用户可选择执行的操作。 | 无。该函数执行操作并向控制台打印消息。 |
主循环:
主循环提供新建账户、登录账户、管理员功能入口等选项。用户通过输入对应的数字选择操作。管理员功能需要特殊的输入("114514")来访问。
(2)主要方法
在主程序部分,首先读取已存在的用户数据(存储在"users.xlsx"文件中),然后通过循环让用户选择要执行的操作。用户可以选择新建账户、登录账户、关机等操作。如果用户选择进入管理员模式,将调用genshi()函数显示管理员菜单,并根据用户的输入执行相应的操作。最后,将更新后的用户数据保存到"users.xlsx"文件中,并打印关机提示信息。
二 依赖和前提条件:
excel(“users.xlsx”,sheet_name=’Sheet1’,index=False)
pandas
python
三 注意事项和限制:
数据存储:这段代码使用Excel文件来存储用户账户信息,包括学号、密码和余额。在使用此代码之前,请确保已经创建了一个名为"users.xlsx"的Excel文件,并且该文件中包含以下列名:id、password、wallet。
输入验证:在实际应用中,为了提高安全性和用户体验,建议对用户输入进行验证。例如,检查输入的学号是否已存在,密码是否符合要求等。
错误处理:在实际应用中,应该添加适当的错误处理机制,以便在出现异常情况时能够给出友好的错误提示。例如,当用户输入的学号不存在或密码错误时,应该给出相应的提示信息。
权限控制:在实际应用中,应该根据用户的角色(如管理员、普通用户等)来限制其操作权限。例如,只有管理员才能执行删除账户的操作。
安全性:在实际应用中,应该采取一些安全措施来保护用户的账户信息,例如加密存储密码、限制登录尝试次数等。
界面友好性:虽然这段代码主要是通过命令行界面与用户交互,但可以考虑将其封装成一个图形界面程序,以提高用户体验。
四 测试和使用指南:
使用手册:
1 注册新账户:
根据提示,输入“1“弹出注册界面。再输入学号,接着设定密码,再确认密码。完成账户注册。
2 登录账号:
根据提示,输入“2“进入登录界面。根据提示输入学号和密码,完成登录。
3 查询余额:
在登录状态下,输入“3“查询余额。
4 取款:
在登录状态下,输入“4“进入取款界面。输入取款数,完成取款。(模拟)
5 存款:
在登录状态下,输入“5“接入存款界面。输入存款数,完成存款。(模拟)
6 退卡(登出):
在登录状态下,输入“6“退卡。
7 修改密码
在登录状态下,输入“8“进入修改密码界面。输入两遍新密码,完成修改密码。(注:不是找回密码)
8 修改学号
在登录状态下,输入“9“进入修改学号界面。输入新账号,完成修改账号。
9 删除账户:
在登录状态下,输入“0“完成删除账户。(账户余额为零方可完成)
10 管理员模式;
在未登录状态下,输入“114514“进入管理员模式:
在管理员模式中输入“1“可新建账户
“2“可登录任意账户(只需输入账户)
“3“可显示所有账号密码
“4“可推出管理员模式
11 关机(管理员操作)
输入“7“,进入管理员身份验证,输入管理员密码,完成关机。