使用Python实现学生信息管理系统
本文介绍了一个简单的学生信息管理系统,包括管理员登录、重置学生密码、添加、删除和修改学生信息、查询学生信息以及对学生成绩进行排序等功能。该系统使用Python编写,基于控制台交互
实现思路
该系统分为两个部分,管理员登录和学生信息管理。在管理员登录时,程序会要求用户输入用户名和密码进行身份验证;验证通过后,进入到学生信息管理界面。学生信息管理界面提供了多种操作方式,包括重置学生密码、添加、删除和修改学生信息、查询学生信息以及对学生成绩进行排序等功能。
在实现过程中,我们使用了文件存储学生信息,其中每一行代表一个学生的信息,各字段之间以逗号分隔。在对学生成绩进行排序时,我们计算每个学生的平均分,并将其作为排序依据。
代码实现
登录界面
# 登录界面
def login():
print("欢迎使用学生信息管理系统") # 打印欢迎信息
while True: # 一直循环直到输入正确的角色类型
role = input("请输入登录角色(1-学生,2-管理员):") # 输入角色类型
if role == '1': # 如果输入是学生
student_login() # 转到学生登录函数
break # 结束循环
elif role == '2': # 如果输入是管理员
admin_login() # 转到管理员登录函数
break # 结束循环
else:
print("输入有误,请重新输入") # 提示输入错误,重新输入
执行效果

学生登录
# 学生登录
def student_login():
while True: # 一直循环直到输入正确的账号和密码
account = input("请输入账号:") # 输入账号
password = input("请输入密码:") # 输入密码
with open('xs.txt', 'r', encoding='utf-8') as f: # 打开存放学生信息的文件
for line in f: # 遍历所有行
data = line.strip().split() # 分隔每行数据
姓名 = data[0].split(':')[1].strip() # 获取姓名
学号 = data[1].split(':')[1].strip() # 获取学号
账号 = data[2].split(':')[1].strip() # 获取账号
密码 = data[3].split(':')[1].strip() # 获取密码
if 账号 == account and 密码 == password: # 如果账号和密码匹配
print(f"欢迎登陆,{姓名}同学!") # 打印欢迎信息
student_menu(account) # 转到学生菜单函数
return # 结束函数
print("账号或密码错误,请重新输入") # 提示输入错误,重新输入
执行效果

学生菜单
# 学生菜单
def student_menu(account):
while True: # 一直循环直到选择退出系统或者退回登录界面
print("""
================
1. 查看所有学生信息
2. 查询个人信息
3. 退回登录界面
0. 退出系统
================
""") # 打印菜单
choice = input("请输入您的选择:") # 输入选项
if choice == "1": # 如果输入为 1
show_all_students() # 转到显示所有学生信息函数
elif choice == "2": # 如果输入为 2
show_student_info() # 转到显示个人信息函数
elif choice == "3": # 如果输入为 3
login() # 返回登陆
elif choice == "0": # 如果输入为 0
print("感谢使用本系统,再见!") # 打印欢送信息
exit() # 退出程序
else:
print("输入有误,请重新输入!") # 提示输入错误,重新输入
执行效果

展示所有学生信息
# 展示所有学生信息
def show_all_students():
with open('xinxi.txt', 'r',encoding='utf-8') as f: # 打开存放学生信息的文件
lines = f.readlines() # 读取所有行
if len(lines) == 0: # 如果文件为空
print("暂无学生信息") # 打印提示信息
return # 结束函数
header = "{:<6}{:<10}{:<12}{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}".format("姓 名", "班 级", "学 号", "Linux", "Python", "C语言", "C++语言", "Java语言", "平均分") # 定义表头格式
print(header) # 打印表头
for line in lines: # 遍历每一行数据
info = line.strip().split(',') # 分隔每行数据
student_info = "{:<6}{:<10}{:<12}{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}".format(info[0], info[1], info[2], info[3], info[4], info[5], info[6], info[7], info[8]) # 格式化学生信息
print(student_info) # 打印学生信息
执行效果

查询单个学生的学生信息
# 查询单个学生的学生信息
def show_student_info():
student_id = input("请输入要查询的学号:") # 输入学号
with open('xinxi.txt', 'r', encoding='utf-8') as f: # 打开存放学生信息的文件
found = False # 判断是否找到该学生信息
for line in f: # 遍历每一行数据
info = line.strip().split(',') # 分隔每行数据
if info[2] == student_id: # 如果该行数据中的学号和输入的学号相同
print(f"姓名:{info[0]}") # 打印姓名
print(f"班级:{info[1]}") # 打印班级
print(f"学号:{info[2]}") # 打印学号
print(f"Linux成绩:{info[3]}") # 打印 Linux 成绩
print(f"Python成绩:{info[4]}") # 打印 Python 成绩
print(f"C语言成绩:{info[5]}") # 打印 C 语言成绩
print(f"C++语言成绩:{info[6]}") # 打印 C++ 语言成绩
print(f"Java语言成绩:{info[7]}") # 打印 Java 语言成绩
print(f"平均分:{info[8]}") # 打印平均分
found = True # 标记为找到
break # 结束循环
if not found: # 如果未找到该学生信息
print("未找到该学号的学生信息") # 提示未找到
执行效果

管理员登录
# 管理员登录
def admin_login():
while True: # 一直循环直到输入正确的账号和密码或手动退出
account = input("请输入账号:") # 输入账号
password = input("请输入密码:") # 输入密码
try:
with open('gly.txt', 'r', encoding='utf-8') as f: # 打开存放管理员信息的文件
for line in f: # 遍历每一行数据
info = line.strip().split(' ') # 分隔每行数据
if len(info) != 4: # 如果分割后的数据不是 4 项(即格式不正确)
continue # 跳过本次循环
# 根据文件内容里的冒号进行处理
name = info[0].split(':')[1] # 获取姓名
num = info[1].split(':')[1] # 获取工号
acc = info[2].split(':')[1] # 获取账号
pwd = info[3].split(':')[1] # 获取密码
if acc == account and pwd == password: # 如果账号和密码匹配
print(f"欢迎登陆,{name}管理员!") # 打印欢迎信息
admin_menu() # 转到管理员菜单函数
return # 结束函数
print("账号或密码错误,请重新输入") # 提示输入错误,重新输入
except IOError: # 捕获文件打开异常
print("无法打开文件,请检查文件路径和权限") # 提示无法打开文件
return # 结束函数
except Exception as e: # 捕获其他异常
print(f"发生错误:{str(e)}") # 打印错误信息
return # 结束函数
执行效果

管理员菜单
# 管理员菜单
def admin_menu():
while True: # 一直循环直到选择退出程序
choice = input(
"请选择操作(1-重置学生账号密码,2-添加学生信息,3-删除学生信息,4-修改学生信息,5-查询学生信息,6-学生成绩排序,0-退出):") # 打印管理员操作菜单,输入选项
if choice == '1': # 如果选择 1
reset_password() # 转到重置学生账号密码函数
elif choice == '2': # 如果选择 2
add_student() # 转到添加学生信息函数
elif choice == '3': # 如果选择 3
delete_student() # 转到删除学生信息函数
elif choice == '4': # 如果选择 4
modify_student() # 转到修改学生信息函数
elif choice == '5': # 如果选择 5
search_student() # 转到查询学生信息函数
elif choice == '6': # 如果选择 6
sort_students() # 转到学生成绩排序函数
elif choice == '0': # 如果选择 0
break # 退出循环
else:
print("输入有误,请重新输入") # 提示输入错误,重新输入
执行效果

重置学生账号密码
# 重置学生账号密码
def reset_password():
choice = input("请选择操作(1-修改密码,2-删除账号,3-添加账号):") # 打印选项菜单,输入选择
if choice == '1': # 如果选择 1
student_id = input("请输入要修改密码的学号:") # 输入要修改密码的学号
with open('xs.txt', 'r', encoding='utf-8-sig') as f: # 打开存放学生信息的文件
lines = f.readlines() # 读取所有行数据
for i in range(len(lines)): # 遍历每一行数据
line = lines[i].strip() # 去除首尾空格
info = line.split() # 分隔每行数据
if len(info) != 4: # 如果分割后的数据不是 4 项(即格式不正确)
continue # 跳过本次循环
name = info[0][3:] # 获取姓名
sid = info[1][3:] # 获取学号
account = info[2][3:] # 获取账号
password = info[3][3:] # 获取密码
if sid == student_id: # 如果学号匹配
print(f"姓名:{name},学号:{sid},账号:{account},密码:{password}") # 打印该学生信息
new_password = input("请输入新密码:") # 输入新密码
# 修改密码
lines[i] = f"姓名:{name} 学号:{sid} 账号:{account} 密码:{new_password}\n"
with open('xs.txt', 'w', encoding='utf-8-sig') as f:
f.writelines(lines)
print("密码修改成功") # 提示密码修改成功
break # 结束循环
else: # 如果未找到该学生信息
print("未找到该学号的学生信息") # 提示未找到
elif choice == '2': # 如果选择 2
student_id = input("请输入要删除账号的学号:") # 输入要删除账号的学号
with open('xs.txt', 'r', encoding='utf-8-sig') as f: # 打开存放学生信息的文件
lines = f.readlines() # 读取所有行数据
for i in range(len(lines)): # 遍历每一行数据
line = lines[i].strip() # 去除首尾空格
info = line.split() # 分隔每行数据
if len(info) != 4: # 如果分割后的数据不是 4 项(即格式不正确)
continue # 跳过本次循环
name = info[0][3:] # 获取姓名
sid = info[1][3:] # 获取学号
account = info[2][3:] # 获取账号
password = info[3][3:] # 获取密码
if sid == student_id: # 如果学号匹配
print(f"姓名:{name},学号:{sid},账号:{account},密码:{password}") # 打印该学生信息
# 删除账号
del lines[i] # 删除该行数据
with open('xs.txt', 'w', encoding='utf-8-sig') as f:
f.writelines(lines)
print("账号删除成功") # 提示账号删除成功
break # 结束循环
else: # 如果未找到该学生信息
print("未找到该学号的学生信息") # 提示未找到
elif choice == '3': # 如果选择 3
new_sid = input("请输入新的学号:") # 输入新学号
new_name = input("请输入姓名:") # 输入姓名
new_account = input("请输入账号:") # 输入账号
new_password = input("请输入密码:") # 输入密码
new_line = f"姓名:{new_name} 学号:{new_sid} 账号:{new_account} 密码:{new_password}\\n"
with open('xs.txt', 'a', encoding='utf-8-sig') as f: # 打开存放学生信息的文件
f.write(new_line) # 写入新行数据
print("账号添加成功") # 提示账号添加成功
else:
print("输入有误,请重新选择") # 提示选择错误,重新选择操作
执行效果

添加学生信息
# 添加学生信息
def add_student():
# 要求用户输入学生信息(姓名,班级,学号,Linux成绩,Python成绩,C语言成绩,C++语言成绩,Java语言成绩)
student_info = input("请输入学生信息(姓名,班级,学号,Linux成绩,Python成绩,C语言成绩,C++语言成绩,Java语言成绩):")
info_list = student_info.split(',') # 将输入的信息按逗号分隔开
if len(info_list) < 8: # 如果信息项不足8项(即输入不完整)
print("输入的信息不完整,请重新输入!") # 提示信息不完整
return
name, cls, id, linux, python, c, cpp, java = info_list[:8] # 获取各个信息项
total_score = (int(linux) + int(python) + int(c) + int(cpp) + int(java)) / 5 # 计算平均分
student_info = f"{name},{cls},{id},{linux},{python},{c},{cpp},{java}" # 构造要写入文件的字符串
with open('xinxi.txt', 'a', encoding='utf-8') as f: # 打开存放学生信息的文件(以追加方式)
f.write(f"{student_info},{total_score}\n") # 将学生信息和平均分写入文件
print(f"学生信息添加成功,平均分为{total_score},平均分已自动填充") # 输出添加成功提示信息
执行效果

删除学生信息
# 删除学生信息
def delete_student():
student_id = input("请输入要删除信息的学号:")
with open('xinxi.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for i in range(len(lines)):
info = lines[i].strip().split(",")
if info[2] == student_id:
del lines[i]
with open('xinxi.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)
print("学生信息删除成功")
break
else:
print("未找到该学号的学生信息")
执行效果

修改学生信息
# 修改学生信息
def modify_student():
# 输入要修改信息的学号
student_id = input("请输入要修改信息的学号:")
# 打开文件并读取所有行
with open('xinxi.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 循环遍历每一行
for i in range(len(lines)):
# 分割数据并赋值给变量
data = lines[i].strip().split(',')
学生姓名 = data[0]
班级 = data[1]
学号 = data[2]
Linux成绩 = int(data[3])
Python成绩 = int(data[4])
C语言成绩 = int(data[5])
Cpp语言成绩 = int(data[6])
Java语言成绩 = int(data[7])
平均分 = float(data[8])
# 如果学号匹配成功,则进入修改流程
if 学号 == student_id:
# 输入新的学生信息
new_info_str = input(
"请按照格式输入新的学生信息(姓名,班级,学号,Linux成绩,Python成绩,C语言成绩,C++语言成绩,Java语言成绩):")
# 分割新的学生信息并赋值给变量
new_info = new_info_str.strip().split(',')
new_学生姓名 = new_info[0]
new_班级 = new_info[1]
new_学号 = new_info[2]
new_Linux成绩 = int(new_info[3])
new_Python成绩 = int(new_info[4])
new_C语言成绩 = int(new_info[5])
new_Cpp语言成绩 = int(new_info[6])
new_Java语言成绩 = int(new_info[7])
# 计算新的平均分
new_平均分 = (new_Linux成绩 + new_Python成绩 + new_C语言成绩 + new_Cpp语言成绩 + new_Java语言成绩) / 5
# 生成新的一行数据并替换旧的数据
lines[i] = f"{new_学生姓名},{new_班级},{new_学号},{new_Linux成绩},{new_Python成绩},{new_C语言成绩},{new_Cpp语言成绩},{new_Java语言成绩},{new_平均分}\n"
# 打开文件并写入新的所有行
with open('xinxi.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)
# 输出成功信息并结束函数
print("学生信息修改成功")
break
else:
# 如果未找到该学号的学生信息,则输出失败信息
print("未找到该学号的学生信息")
执行效果

查询学生信息
# 查询学生信息
def search_student():
# 输入要查询信息的学号
student_id = input("请输入要查询信息的学号:")
# 打开文件并逐行读取
with open('xinxi.txt', 'r', encoding='utf-8') as f:
for line in f:
# 分割数据并赋值给变量
data = line.strip().split(',')
学生姓名 = data[0]
班级 = data[1]
学号 = data[2]
Linux成绩 = data[3]
Python成绩 = data[4]
C语言成绩 = data[5]
Cpp语言成绩 = data[6]
Java语言成绩 = data[7]
平均分 = data[8]
# 如果学号匹配成功,则输出学生信息并结束函数
if 学号 == student_id:
print(f"姓名:{学生姓名}")
print(f"班级:{班级}")
print(f"学号:{学号}")
print(f"Linux成绩:{Linux成绩}")
print(f"Python成绩:{Python成绩}")
print(f"C语言成绩:{C语言成绩}")
print(f"C++语言成绩:{Cpp语言成绩}")
print(f"Java语言成绩:{Java语言成绩}")
print(f"平均分:{平均分}")
break
else:
# 如果未找到该学号的学生信息,则输出失败信息
print("未找到该学号的学生信息")
执行效果

学生成绩排序
# 学生成绩排序
def sort_students():
# 循环直到用户输入正确选项为止
while True:
choice = input("请选择排序方式(1-升序,2-降序):")
if choice == '1':
reverse = False
break
elif choice == '2':
reverse = True
break
else:
print("输入有误,请重新选择")
# 打开文件并读取所有行
with open('xinxi.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
students = []
# 循环遍历每一行数据,并将其转化为元组类型加入到 students 列表中
for line in lines:
info = line.strip().split(',')
score_sum = sum(map(float, info[3:]))
students.append((info[0], info[1], info[2], *info[3:], score_sum))
# 对 students 列表进行排序
students.sort(key=lambda x: x[-1], reverse=reverse)
# 输出表格标题
print("排序结果如下:")
print("+" + "-" * 8 + "+" + "-" * 15 + "+" + "-" * 10 + "+" + "-" * 12 +
"+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+")
print("|{:^8}|{:^15}|{:^10}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|".format(
"姓名", "班级", "学号", "Linux", "Python", "C语言", "C++语言", "Java语言", "平均分"))
print("+" + "-" * 8 + "+" + "-" * 15 + "+" + "-" * 10 + "+" + "-" * 12 +
"+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+")
# 循环遍历每一个排序后的学生信息,并输出到控制台上
for student in students:
print("|{:^8}|{:^15}|{:^10}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|".format(
student[0], student[1], student[2], student[3], student[4], student[5], student[6], student[7], student[8]))
print("+" + "-" * 8 + "+" + "-" * 15 + "+" + "-" * 10 + "+" + "-" * 12 +
"+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+")
执行效果

主函数
# 主函数
if __name__ == '__main__':
# 调用登录函数
login()
程序设计分析
功能模块划分
该学生成绩管理系统主要包含以下功能模块:
- 学生信息添加模块;
- 学生信息删除模块;
- 学生信息修改模块;
- 学生信息查询模块;
- 学生成绩排序模块;
- 学生账号管理模块;
- 管理员登录模块;
- 管理员操作权限管理模块;
- 管理员账号管理模块。
因此,我们可以将整个程序分为九个部分,分别实现以上九个功能模块。
数据存储方式
在该项目中,我们采用文本文件的方式存储学生信息、账号信息和管理员信息。具体地,我们将学生信息存储在名为的文件中,每行表示一个学生的信息,包括学生姓名、班级名称、学号以及五门课程的成绩;将账号信息存储在名为的文件中,每行表示一个学生的账号信息,包括学生姓名、学号、账号以及密码;将管理员信息存储在名为的文件中,每行表示一个管理员的账号信息,包括管理员账号和密码。这种方式简单方便,易于实现和维护。xinxi.txt xs.txt gly.txt
程序流程设计
该项目的程序流程如下所示:
- 打印出菜单,让用户选择要执行的操作;
- 如果用户选择管理员登录操作,则执行管理员登录模块,要求用户输入管理员账号和密码并与存储在名为的文件中的信息进行比对;如果比对成功,则可以进行管理员操作权限管理和管理员账号管理;
gly.txt - 根据用户的选择,调用相应的函数实现对应的功能;
- 用户可以反复执行操作,直到选择退出程序为止。
具体的函数实现和结构设计将在下一节中进行介绍。
总结
本项目是一个简单的学生成绩管理系统,通过对该项目的分析和实现,我们可以掌握Python语言基本的文件处理技巧、字符串操作技巧、异常处理技巧等;同时也加深了我们对面向过程编程思想的理解和应用能力。在未来的开发工作中,这些技能和经验都将非常有用。
完整代码
# 登录界面
def login():
print("欢迎使用学生信息管理系统")
while True:
role = input("请输入登录角色(1-学生,2-管理员):")
if role == '1':
student_login()
break
elif role == '2':
admin_login()
break
else:
print("输入有误,请重新输入")
# 学生登录
def student_login():
while True:
account = input("请输入账号:")
password = input("请输入密码:")
with open('xs.txt', 'r', encoding='utf-8') as f:
for line in f:
data = line.strip().split()
姓名 = data[0].split(':')[1].strip()
学号 = data[1].split(':')[1].strip()
账号 = data[2].split(':')[1].strip()
密码 = data[3].split(':')[1].strip()
if 账号 == account and 密码 == password:
print(f"欢迎登陆,{姓名}同学!")
student_menu(account)
return
print("账号或密码错误,请重新输入")
# 学生菜单
def student_menu(account):
while True:
print("""
================
1. 查看所有学生信息
2. 查询个人信息
3. 退回登录界面
0. 退出系统
================
""")
choice = input("请输入您的选择:")
if choice == "1":
show_all_students()
elif choice == "2":
show_student_info()
elif choice == "3":
return
elif choice == "0":
print("感谢使用本系统,再见!")
exit()
else:
print("输入有误,请重新输入!")
# 展示所有学生信息
def show_all_students():
with open('xinxi.txt', 'r',encoding='utf-8') as f:
lines = f.readlines()
if len(lines) == 0:
print("暂无学生信息")
return
header = "{:<6}{:<10}{:<12}{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}".format("姓 名", "班 级", "学 号", "Linux", "Python", "C语言", "C++语言", "Java语言", "平均分")
print(header)
for line in lines:
info = line.strip().split(',')
student_info = "{:<6}{:<10}{:<12}{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}".format(info[0], info[1], info[2], info[3], info[4], info[5], info[6], info[7], info[8])
print(student_info)
# 查询单个学生的学生信息
def show_student_info():
student_id = input("请输入要查询的学号:")
with open('xinxi.txt', 'r', encoding='utf-8') as f:
found = False
for line in f:
info = line.strip().split(',')
if info[2] == student_id:
print(f"姓名:{info[0]}")
print(f"班级:{info[1]}")
print(f"学号:{info[2]}")
print(f"Linux成绩:{info[3]}")
print(f"Python成绩:{info[4]}")
print(f"C语言成绩:{info[5]}")
print(f"C++语言成绩:{info[6]}")
print(f"Java语言成绩:{info[7]}")
print(f"平均分:{info[8]}")
found = True
break
if not found:
print("未找到该学号的学生信息")
# 管理员登录
def admin_login():
while True:
account = input("请输入账号:")
password = input("请输入密码:")
try:
with open('gly.txt', 'r', encoding='utf-8') as f:
for line in f:
info = line.strip().split(' ')
if len(info) != 4:
continue
# 根据文件内容里的冒号进行处理
name = info[0].split(':')[1]
num = info[1].split(':')[1]
acc = info[2].split(':')[1]
pwd = info[3].split(':')[1]
if acc == account and pwd == password:
print(f"欢迎登陆,{name}管理员!")
admin_menu()
return
print("账号或密码错误,请重新输入")
except IOError:
print("无法打开文件,请检查文件路径和权限")
return
except Exception as e:
print(f"发生错误:{str(e)}")
return
# 管理员菜单
def admin_menu():
while True:
choice = input(
"请选择操作(1-重置学生账号密码,2-添加学生信息,3-删除学生信息,4-修改学生信息,5-查询学生信息,6-学生成绩排序,0-退出):")
if choice == '1':
reset_password()
elif choice == '2':
add_student()
elif choice == '3':
delete_student()
elif choice == '4':
modify_student()
elif choice == '5':
search_student()
elif choice == '6':
sort_students()
elif choice == '0':
break
else:
print("输入有误,请重新输入")
# 重置学生账号密码
def reset_password():
choice = input("请选择操作(1-修改密码,2-删除账号,3-添加账号):")
if choice == '1':
student_id = input("请输入要修改密码的学号:")
with open('xs.txt', 'r', encoding='utf-8-sig') as f:
lines = f.readlines()
for i in range(len(lines)):
line = lines[i].strip()
info = line.split()
if len(info) != 4:
continue
name = info[0][3:] # 姓名
sid = info[1][3:] # 学号
account = info[2][3:] # 账号
password = info[3][3:] # 密码
if sid == student_id:
print(f"姓名:{name},学号:{sid},账号:{account},密码:{password}")
new_password = input("请输入新密码:")
# 修改密码
lines[i] = f"姓名:{name} 学号:{sid} 账号:{account} 密码:{new_password}\n"
with open('xs.txt', 'w', encoding='utf-8-sig') as f:
f.writelines(lines)
print("密码修改成功")
break
else:
print("未找到该学号的学生信息")
elif choice == '2':
student_id = input("请输入要删除账号的学号:")
with open('xs.txt', 'r', encoding='utf-8-sig') as f:
lines = f.readlines()
for i in range(len(lines)):
line = lines[i].strip()
info = line.split()
if len(info) != 4:
continue
name = info[0][3:] # 姓名
sid = info[1][3:] # 学号
account = info[2][3:] # 账号
password = info[3][3:] # 密码
if sid == student_id:
print(f"姓名:{name},学号:{sid},账号:{account},密码:{password}")
# 删除账号
del lines[i]
with open('xs.txt', 'w', encoding='utf-8-sig') as f:
f.writelines(lines)
print("账号删除成功")
break
else:
print("未找到该学号的学生信息")
elif choice == '3':
new_sid = input("请输入新的学号:")
new_name = input("请输入姓名:")
new_account = input("请输入账号:")
new_password = input("请输入密码:")
new_line = f"姓名:{new_name} 学号:{new_sid} 账号:{new_account} 密码:{new_password}\n"
with open('xs.txt', 'a', encoding='utf-8-sig') as f:
f.write(new_line)
print("账号添加成功")
else:
print("输入有误,请重新选择")
# 添加学生信息
def add_student():
student_info = input("请输入学生信息(姓名,班级,学号,Linux成绩,Python成绩,C语言成绩,C++语言成绩,Java语言成绩):")
info_list = student_info.split(',')
if len(info_list) < 8:
print("输入的信息不完整,请重新输入!")
return
name, cls, id, linux, python, c, cpp, java = info_list[:8]
total_score = (int(linux) + int(python) + int(c) + int(cpp) + int(java)) / 5
student_info = f"{name},{cls},{id},{linux},{python},{c},{cpp},{java}"
with open('xinxi.txt', 'a', encoding='utf-8') as f:
f.write(f"{student_info},{total_score}\n")
print(f"学生信息添加成功,平均分为{total_score},平均分已自动填充")
# 删除学生信息
def delete_student():
student_id = input("请输入要删除信息的学号:")
with open('xinxi.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for i in range(len(lines)):
info = lines[i].strip().split(",")
if info[2] == student_id:
del lines[i]
with open('xinxi.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)
print("学生信息删除成功")
break
else:
print("未找到该学号的学生信息")
# 修改学生信息
def modify_student():
student_id = input("请输入要修改信息的学号:")
with open('xinxi.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for i in range(len(lines)):
data = lines[i].strip().split(',')
学生姓名 = data[0]
班级 = data[1]
学号 = data[2]
Linux成绩 = int(data[3])
Python成绩 = int(data[4])
C语言成绩 = int(data[5])
Cpp语言成绩 = int(data[6])
Java语言成绩 = int(data[7])
平均分 = float(data[8])
if 学号 == student_id:
new_info_str = input(
"请按照格式输入新的学生信息(姓名,班级,学号,Linux成绩,Python成绩,C语言成绩,C++语言成绩,Java语言成绩):")
new_info = new_info_str.strip().split(',')
new_学生姓名 = new_info[0]
new_班级 = new_info[1]
new_学号 = new_info[2]
new_Linux成绩 = int(new_info[3])
new_Python成绩 = int(new_info[4])
new_C语言成绩 = int(new_info[5])
new_Cpp语言成绩 = int(new_info[6])
new_Java语言成绩 = int(new_info[7])
new_平均分 = (new_Linux成绩 + new_Python成绩 + new_C语言成绩 + new_Cpp语言成绩 + new_Java语言成绩) / 5
lines[i] = f"{new_学生姓名},{new_班级},{new_学号},{new_Linux成绩},{new_Python成绩},{new_C语言成绩},{new_Cpp语言成绩},{new_Java语言成绩},{new_平均分}\n"
with open('xinxi.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)
print("学生信息修改成功")
break
else:
print("未找到该学号的学生信息")
# 查询学生信息
def search_student():
student_id = input("请输入要查询信息的学号:")
with open('xinxi.txt', 'r', encoding='utf-8') as f:
for line in f:
data = line.strip().split(',')
学生姓名 = data[0]
班级 = data[1]
学号 = data[2]
Linux成绩 = data[3]
Python成绩 = data[4]
C语言成绩 = data[5]
Cpp语言成绩 = data[6]
Java语言成绩 = data[7]
平均分 = data[8]
if 学号 == student_id:
print(f"姓名:{学生姓名}")
print(f"班级:{班级}")
print(f"学号:{学号}")
print(f"Linux成绩:{Linux成绩}")
print(f"Python成绩:{Python成绩}")
print(f"C语言成绩:{C语言成绩}")
print(f"C++语言成绩:{Cpp语言成绩}")
print(f"Java语言成绩:{Java语言成绩}")
print(f"平均分:{平均分}")
break
else:
print("未找到该学号的学生信息")
# 学生成绩排序
def sort_students():
while True:
choice = input("请选择排序方式(1-升序,2-降序):")
if choice == '1':
reverse = False
break
elif choice == '2':
reverse = True
break
else:
print("输入有误,请重新选择")
with open('xinxi.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
students = []
for line in lines:
info = line.strip().split(',')
score_sum = sum(map(float, info[3:]))
students.append((info[0], info[1], info[2], *info[3:], score_sum))
students.sort(key=lambda x: x[-1], reverse=reverse)
print("排序结果如下:")
print("+" + "-" * 8 + "+" + "-" * 15 + "+" + "-" * 10 + "+" + "-" * 12 +
"+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+")
print("|{:^8}|{:^15}|{:^10}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|".format(
"姓名", "班级", "学号", "Linux", "Python", "C语言", "C++语言", "Java语言", "平均分"))
print("+" + "-" * 8 + "+" + "-" * 15 + "+" + "-" * 10 + "+" + "-" * 12 +
"+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+")
for student in students:
print("|{:^8}|{:^15}|{:^10}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|{:^12}|".format(
student[0], student[1], student[2], student[3], student[4], student[5], student[6], student[7], student[8]))
print("+" + "-" * 8 + "+" + "-" * 15 + "+" + "-" * 10 + "+" + "-" * 12 +
"+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+" + "-" * 12 + "+")
# 主函数
if __name__ == '__main__':
login()
使用Python实现学生信息管理系统的更多相关文章
- python实现学生信息管理系统——界面版
前言(写于2022年5月17日) 这篇博客是我两年前大二时写的,一直放在草稿箱里,还没写完,现在快毕业了,突然翻出来了.虽然博客没写完,但早就写好了代码,可运行的exe文件以及文档.现在上传到gite ...
- python 04 学生信息管理系统
今天任务不多,做了学生信息管理系统1.0,使用字典存储学生个体信息,列表存储学生字典.注意dict定义要在循环体内,若定义成全局变量或循环体外,则旧数据会被新数据覆盖.dict属于可变类型数据,内容改 ...
- 1、纯python编写学生信息管理系统
1.效果图 2.python code: class studentSys(object): ''' _init_(self) 被称为类的构造函数或初始化方法, self 代表类的实例,self 在定 ...
- python之学生信息管理系统
1 #!usr/bin/python 2 #encoding=utf-8 3 4 #1. 打印学生管理系统界面 5 def printStd(): 6 print ("*"*50) ...
- Python基础案例练习:制作学生信息管理系统
一.前言 学生信息管理系统,相信大家或多或少都有做过 最近看很多学生作业都是制作一个学生信息管理系统 于是,今天带大家做一个简单的学生信息管理系统 二.开发环境: 我用到的开发环境 Python 3. ...
- 【Python毕业设计】基于Python+Flask+MySQL的学生信息管理系统(附完整源码)
1.项目说明基于python+Flask+mysql的学生信息管理系统项目实战 项目需要安装pycharm专业版,mysql数据库以及项目所需的所有模块创建数据库名称db_online_notes,然 ...
- Python学生信息管理系统的开发
# 第一题:设计一个全局变量,来保存很多个学生信息:学生(学号, 姓名,年龄):思考要用怎样的结构来保存:# 第二题:在第一题基础上,完成:让用户输入一个新的学生信息(学号,姓名,年龄):你将其保存在 ...
- 【python免费代码】设计一个简单的学生信息管理系统
文章目录 前言 一.理解 二.部分截图展示 三.代码 四.总结 前言 设计一个简单的学生信息管理系统,实现以下功能(bug) : 录入学生信息,信息以文件方式存储 以学生学号或者学生姓名为条件查询该学 ...
- python3 简陋的学生信息管理系统
# 编写一个“学生信息管理系统”# 输入序号:1. 输入学生信息,学生信息包括:id,name,age,gender(用什么数据类型保存?)# 2. 查询:输入学生姓名和id,显示学生个人信息# 3. ...
- 基于数组或链表的学生信息管理系统(小学期C语言程序实训)
1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...
随机推荐
- Hugging News #0324: 🤖️ 黑客松结果揭晓、一键部署谷歌最新大语言模型、Gradio 新版发布,更新超多!
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- nginx+vite 项目打包及部署到服务器二级路由
项目打包及部署到服务器二级路由 例如:我希望将打包的项目部署到 http://localhost:8088/web/ 上 一. 项目配置及打包 项目部署到服务器二级路由需要配置基础路径base,即需要 ...
- [Linux]常用命令之【hostname】
1: 个人的片面理解: hostname是主机名(的"昵称"),而非域名.一般设置hostname,来标识当前机器的主要用途.以区别与其它机器 2: hostname的严格定义: ...
- Hugging News #0407: Google AI 的 Pix2Struct 来啦、开发者资源页面发布
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- 【Ubuntu】 Perf工具的使用
一.perf工具的安装 sudo apt-get install linux-tools-common sudo apt-get install linux-tools-"$(uname - ...
- The first week match's conclusion
自我声讨(不是 这周比赛有难也有易,但是我都是写得很少,摸鱼实在太严重,当然技术不到位也是一个方面,主要还是自己的问题.不再讨论 这周比赛学到.用到的的语法如下 快读 int read() { int ...
- cocos2d-x场景间参数传递
1>使用全局变量 这个就不详细说明了. 2>切换时传递 2.1>在secondScene.h 中加入成员变量,如 int sceneNum; 并在 ...
- Typora 最新中文版安装破解V1.4.8
Typora中文破解版是一款好用极简免费的跨平台Markdown编辑器,软件使用这款软件能够帮助用户轻松将文本转换到HTML,软件从底层向上设计,软件支持markdown的标准语法,同时这款软件还支持 ...
- 数据分析02-(pandas介绍、jupyter notebook)
数据分析-02 数据分析-02 pandas pandas介绍 pandas核心数据结构 Series DataFrame 核心数据结构操作 复合索引 Jupyter notebook 数据加载 处理 ...
- 记一道国际赛CTF web题
这是一篇关于打d3ctf坐牢,无奈去打国际赛的题解. TAMUCTF [Blackbox] 首先打开页面,然后发现一个登陆框 刚开始最先想到就是弱口令登陆,尝试几个后发现登陆不进去. 之后我就换了一个 ...