这篇文章主要介绍了python编写一个简单的学生成绩管理程序,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
本文介绍了一个简单的学生信息管理系统,包括管理员登录、重置学生密码、添加、删除和修改学生信息、查询学生信息以及对学生成绩进行排序等功能。该系统使用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 # 结束函数
执行效果
管理员菜单
# 管理员菜单