用python写学生管理系统文件版_python 学生管理系统(文件版)

这是一个使用Python编写的文件版学生信息管理系统,包括录入、查找、删除、修改、排序、统计和显示学生信息等功能。系统使用正则表达式处理输入,通过文件存储学生数据,并提供了友好的交互菜单。
摘要由CSDN通过智能技术生成

import re # 导入正则表达式模块

import os # 导入操作系统模块

filename = "students.txt" # 定义保存学生信息的文件名

def menu():

# 输出菜单

print('''

学生信息管理系统

=============== 功能菜单 ===============

│ 1 录入学生信息 │

│ 2 查找学生信息 │

│ 3 删除学生信息 │

│ 4 修改学生信息 │

│ 5 排序 │

│ 6 统计学生总人数 │

│ 7 显示所有学生信息 │

│ 0 退出系统

''')

def main():

ctrl = True # 标记是否退出系统

while (ctrl):

menu() # 显示菜单

option = input("请选择:") # 选择菜单项

option_str = re.sub("\D", "", option) # 提取数字

if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:

option_int = int(option_str)

if option_int == 0: # 退出系统

print('您已退出学生成绩管理系统!')

ctrl = False

elif option_int == 1: # 录入学生成绩信息

insert()

elif option_int == 2: # 查找学生成绩信息

search()

elif option_int == 3: # 删除学生成绩信息

delete()

elif option_int == 4: # 修改学生成绩信息

modify()

elif option_int == 5: # 排序

sort()

elif option_int == 6: # 统计学生总数

total()

elif option_int == 7: # 显示所有学生信息

show()

'''1 录入学生信息'''

def insert():

stdentList = [] # 保存学生信息的列表

mark = True # 是否继续添加

while mark:

id = input("请输入ID(如 1001):")

if not id: # ID为空,跳出循环

break

name = input("请输入名字:")

if not name: # 名字为空,跳出循环

break

try:

english = int(input("请输入英语成绩:"))

python = int(input("请输入Python成绩:"))

c = int(input("请输入C语言成绩:"))

except:

print("输入无效,不是整型数值....重新录入信息")

continue

stdent = {"id": id, "name": name, "english": english, "python": python, "c": c} # 将输入的学生信息保存到字典

stdentList.append(stdent) # 将学生字典添加到列表中

inputMark = input("是否继续添加?(y/n):")

if inputMark == "y": # 继续添加

mark = True

else: # 不继续添加

mark = False

save(stdentList) # 将学生信息保存到文件

print("学生信息录入完毕!!!")

# 将学生信息保存到文件

def save(student):

try:

students_txt = open(filename, "a") # 以追加模式打开

except Exception as e:

students_txt = open(filename, "w") # 文件不存在,创建文件并打开

for info in student:

students_txt.write(str(info) + "\n") # 按行存储,添加换行符

students_txt.close() # 关闭文件

'''2 查找学生成绩信息'''

def search():

mark = True

student_query = [] # 保存查询结果的学生列表

while mark:

id = ""

name = ""

if os.path.exists(filename): # 判断文件是否存在

mode = input("按ID查输入1;按姓名查输入2:")

if mode == "1":

id = input("请输入学生ID:")

elif mode == "2":

name = input("请输入学生姓名:")

else:

print("您的输入有误,请重新输入!")

search() # 重新查询

with open(filename, 'r') as file: # 打开文件

student = file.readlines() # 读取全部内容

for list in student:

d = dict(eval(list)) # 字符串转字典

if id is not "": # 判断是否按ID查

if d['id'] == id:

student_query.append(d) # 将找到的学生信息保存到列表中

elif name is not "": # 判断是否按姓名查

if d['name'] == name:

student_query.append(d) # 将找到的学生信息保存到列表中

show_student(student_query) # 显示查询结果

student_query.clear() # 清空列表

inputMark = input("是否继续查询?(y/n):")

if inputMark == "y":

mark = True

else:

mark = False

else:

print("暂未保存数据信息...")

return

'''3 删除学生成绩信息'''

def delete():

mark = True # 标记是否循环

while mark:

studentId = input("请输入要删除的学生ID:")

if studentId is not "": # 判断要删除的学生是否存在

if os.path.exists(filename): # 判断文件是否存在

with open(filename, 'r') as rfile: # 打开文件

student_old = rfile.readlines() # 读取全部内容

else:

student_old = []

ifdel = False # 标记是否删除

if student_old: # 如果存在学生信息

with open(filename, 'w') as wfile: # 以写方式打开文件

d = {} # 定义空字典

for list in student_old:

d = dict(eval(list)) # 字符串转字典

if d['id'] != studentId:

wfile.write(str(d) + "\n") # 将一条学生信息写入文件

else:

ifdel = True # 标记已经删除

if ifdel:

print("ID为 %s 的学生信息已经被删除..." % studentId)

else:

print("没有找到ID为 %s 的学生信息..." % studentId)

else: # 不存在学生信息

print("无学生信息...")

break # 退出循环

show() # 显示全部学生信息

inputMark = input("是否继续删除?(y/n):")

if inputMark == "y":

mark = True # 继续删除

else:

mark = False # 退出删除学生信息功能

'''4 修改学生成绩信息'''

def modify():

show() # 显示全部学生信息

if os.path.exists(filename): # 判断文件是否存在

with open(filename, 'r') as rfile: # 打开文件

student_old = rfile.readlines() # 读取全部内容

else:

return

studentid = input("请输入要修改的学生ID:")

with open(filename, "w") as wfile: # 以写模式打开文件

for student in student_old:

d = dict(eval(student)) # 字符串转字典

if d["id"] == studentid: # 是否为要修改的学生

print("找到了这名学生,可以修改他的信息!")

while True: # 输入要修改的信息

try:

d["name"] = input("请输入姓名:")

d["english"] = int(input("请输入英语成绩:"))

d["python"] = int(input("请输入Python成绩:"))

d["c"] = int(input("请输入C语言成绩:"))

except:

print("您的输入有误,请重新输入。")

else:

break # 跳出循环

student = str(d) # 将字典转换为字符串

wfile.write(student + "\n") # 将修改的信息写入到文件

print("修改成功!")

else:

wfile.write(student) # 将未修改的信息写入到文件

mark = input("是否继续修改其他学生信息?(y/n):")

if mark == "y":

modify() # 重新执行修改操作

'''5 排序'''

def sort():

show() # 显示全部学生信息

if os.path.exists(filename): # 判断文件是否存在

with open(filename, 'r') as file: # 打开文件

student_old = file.readlines() # 读取全部内容

student_new = []

for list in student_old:

d = dict(eval(list)) # 字符串转字典

student_new.append(d) # 将转换后的字典添加到列表中

else:

return

ascORdesc = input("请选择(0升序;1降序):")

if ascORdesc == "0": # 按升序排序

ascORdescBool = False # 标记变量,为False表示升序排序

elif ascORdesc == "1": # 按降序排序

ascORdescBool = True # 标记变量,为True表示降序排序

else:

print("您的输入有误,请重新输入!")

sort()

mode = input("请选择排序方式(1按英语成绩排序;2按Python成绩排序;3按C语言成绩排序;0按总成绩排序):")

if mode == "1": # 按英语成绩排序

student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)

elif mode == "2": # 按Python成绩排序

student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)

elif mode == "3": # 按C语言成绩排序

student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)

elif mode == "0": # 按总成绩排序

student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)

else:

print("您的输入有误,请重新输入!")

sort()

show_student(student_new) # 显示排序结果

''' 6 统计学生总数'''

def total():

if os.path.exists(filename): # 判断文件是否存在

with open(filename, 'r') as rfile: # 打开文件

student_old = rfile.readlines() # 读取全部内容

if student_old:

print("一共有 %d 名学生!" % len(student_old))

else:

print("还没有录入学生信息!")

else:

print("暂未保存数据信息...")

''' 7 显示所有学生信息 '''

def show():

student_new = []

if os.path.exists(filename): # 判断文件是否存在

with open(filename, 'r') as rfile: # 打开文件

student_old = rfile.readlines() # 读取全部内容

for list in student_old:

student_new.append(eval(list)) # 将找到的学生信息保存到列表中

if student_new:

show_student(student_new)

else:

print("暂未保存数据信息...")

# 将保存在列表中的学生信息显示出来

def show_student(studentList):

from prettytable import PrettyTable

if not studentList:

print("(o@.@o) 无数据信息 (o@.@o) \n")

return

field_names = ("ID", "名字", "英语成绩", "Python成绩", "C语言成绩", "总成绩")

table = PrettyTable(field_names=field_names)

for info in studentList:

sum_score = info.get('english', 0) + info.get('python', 0) + info.get('c', 0)

row = list(info.values())

row.append(sum_score)

table.add_row(row)

print(table)

if __name__ == "__main__":

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值