Python学生信息管理系统案例——代码

判断磁盘我们需要导入os这样的模块

import os
filename = “student.txt”
def main():
# True保证开始就能显示主菜单
while True:
menm()
choice = int(input(“请选择”))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0:
answer = input(“您确定要退出系统嘛?y/n”)
if answer “y” or answer == “Y”:
print(“谢谢您的使用”)
break # 退出系统
else:
continue
elif choice == 1:
insert() #录入学生信息
elif choice == 2:
search() #查找学生信息
elif choice == 3:
delete() # 删除学生信息
elif choice == 4:
modify() # 修改学生信息
elif choice == 5:
sort() # 对学生成绩排序
elif choice == 6:
total() # 统计学生总人数
elif choice == 7:
show() # 显示所有学生信息
def menm():
print("=学生信息管理系统
==")
print("----------------------------功能菜单------------------------")
print("\t\t\t\t\t1.录入学生信息")
print("\t\t\t\t\t2.查找学生信息")
print("\t\t\t\t\t3.删除学生信息")
print("\t\t\t\t\t4.修改学生信息")
print("\t\t\t\t\t5.排序")
print("\t\t\t\t\t6.统计学生总人数")
print("\t\t\t\t\t7.显示所有学生信息")
print("\t\t\t\t\t0.退出系统")
print("---------------------------------------------------------")

def insert():
student_list = []
while True:
id = input(“请输入ID(如1001):”)
# 空字符串的布尔值为False,判断是否为空字符串
if not id:
break
name = input(“请输入姓名:”)
# 判断是否为空字符串
if not name:
break
# 对输入的成绩进行判断,需要异常处理机制
try:
english = int(input(“请输入英语成绩:”))
python = int(input(“请输入python成绩:”))
java = int((input(“请输入Java成绩:”)))
except:
print(“输入无效,不是整数类型,请重新输入”)
# 使用continue返回到while True
continue
# 将录入的学生信息保存到字典中
student = {“id”: id, “name”: name, “english”: english, “python”: python, “java”: java}
# 将学生信息添加到列表中
student_list.append(student)
answer = input(“是否继续添加?y/n \n”)
if answer == “y”:
continue
else:
break

# 调用save()函数
save(student_list)
print("学生信息录入完毕!!!")

def save(list):
# 首先是需要打开文件有两种方式,1、追加 2、写入
# 当文件中没有数据,则以写入的方式打开文件
# for循环中就是对打开文件写入的操作
try:
# 以追加的形式打开文件filename,如果没有的话程序就可能出错,则需要处理except
stu_txt = open(filename, “a”, encoding=“utf-8”)
except:
# 如果没有的话,就以写入的方式打开文件
stu_txt = open(filename, “w”, encoding=“utf-8”)
# 遍历传入的list列表
for item in list:
# 将遍历得到的数据写入到文件中并换行
stu_txt.write(str(item)+"\n")
# 对文件进行资源关闭的操作
stu_txt.close()

def search():
# 声明一个列表
student_query = []
while True:
id = “”
name = “”
if os.path.exists(filename):
# 是按ID查找还是按姓名查找
mode = input(“按ID查找请输入1,按姓名查找请输入2:”)
# 对输入的进行判断
if mode == “1”:
id = input(“请输入学生ID:”)
elif mode == “2”:
name = input(“请输入学生姓名:”)
else:
print(“您的输入有误,请从新输入”)
search()
# 以只读的方式打开文件
with open(filename, “r”, encoding=“utf-8”) as rfile:
# 将读取的内容以列表的形式存放在student中
student = rfile.readlines()
# 遍历student列表,并将其类型转换存放到一个字典中
for item in student:
d = dict(eval(item))
# 下面是对id和那么进行判断
# 如果id不等于空,并让其和字典中的id进行对比,相等则存放到student_query列表中
if id != “”:
if d[“id”] == id:
student_query.append(d)
elif name != “”:
if d[“name”] == name:
student_query.append(d)
# 显示查询结果
show_student(student_query)
#清空列表,是为了防止第二次查找列表当中有数据
student_query.clear()
# 是否要继续查询
answer = input(“是否要继续查询?y/n\n”)
if answer == “y”:
continue
else:
break
else:
print(“暂未保存学生信息”)
# 跳出循环
return
def show_student(list):
# 对传进来的列表进行判断
if len(list) == 0:
print(“没有查询到学生信息,无数据显示!!!”)
return
# 查到之后就要定义标题的显示格式
format_title = “{:6}\t{:12}\t{:8}\t{:10}\t{:10}\t{:8}”
print(format_title.format(“ID”, “姓名”, “英语成绩”, “Python成绩”, “Java成绩”, “总成绩”))
# 查到之后定义内容的显示格式
format_data = “{:6}\t{:12}\t{:8}\t{:8}\t{:8}\t{:8}”
for item in list:
print(format_data.format(
item.get(“id”),
item.get(“name”),
item.get(“english”),
item.get(“python”),
item.get(“java”),
item.get(“english”)+item.get(“python”)+item.get(“java”)
))
def delete():

"""删除的整个逻辑如下:
1、首先输入要删除学生的id
2、判断学生是否在,如果存在则进行文件系统是否存在
3、如果存在就以只读的方式打开文件,并将从文件系统读取的内容保存到一个列表当中
4、如果系统文件不存在就先定义一个列表,并定义一个标记为False,默认是没有删除
5、以上是对文件系统的操作,下面就是对列表的判断----------------
6、如果列表存在,以只写的方式打开文件,因为要将删除的内容覆盖掉原有的内容
7、如果不存在,则打印无学生信息
8、最后对删除操作是否进行继续的操作
"""
while True:
    student_id = input("请输入想要删除的学生的ID:")
    # 不等于空意思就是该学生是存在的
    if student_id != "":
        # 判断文件系统中是否存在
        if os.path.exists(filename):
            # 存在,以只读的方式打开文件,并设置字符编码
            with open(filename, 'r', encoding='utf-8') as file:
                # 读取文件内容并存放在列表中
                student_old = file.readlines()
        # 不存在,定义一个列表
        else:
            student_old = []
        flag = False   # 标记是否删除,默认是没有删除的
        # 对列表进行判断,如果为True,以只写的方式打开文件,因为要将删除的内容把原有的内容覆盖
        if student_old:
            with open(filename, "w", encoding="utf-8")as wfile:
                d = {}
                for item in student_old:
                    d = dict(eval(item)) # 将字符串转换为字典
                    # 对输入的id与字典中的id进行比较,如果不存在则写入
                    if d["id"] != student_id:
                        wfile.write(str(d)+"\n")
                    else:
                        # 表示已删除了
                        flag = True
                if flag:
                    print(f"id为{student_id}的学生信息已被删除")
                else:
                    print(f"没有找到ID为{student_id}的学生信息")
        # 如果没有从磁盘上读取到学生信息
        else:
            print("无学生信息")
            break
        show()      # 删除后要重新显示所有学生信息
        # 对删除操作是否继续判断
        answer = input("是否继续删除?y/n\n")
        if answer == "y":
            continue
        else:
            break

def modify():
# 显示所有学生信息
show()
# 判断磁盘文件是否存在,如果存在以只读的方式打开文件
if os.path.exists(filename):
with open(filename, “r”, encoding=“utf-8”) as rfile:
# 把读取到的内容放到列表当中
student_old = rfile.readlines()
else:
# 不存在就结束函数
return
student_id = input(“请输入要修改的学员的ID:”)
with open(filename, “w”, encoding=“utf-8”)as wfile:
# 以只写的方式打开文件
for item in student_old:
# 对读取的字符串用eval进行转换,并将其存放到一个字典中
d = dict(eval(item))
# 根据键来获取值
if d[“id”] == student_id:
print(“找到学生信息,可以修改他的相关信息了!”)
# 进入循环通过相应键来修改对应的值
while True:
try:
d[“name”] = input(“请输入姓名:”)
d[“english”] = input(“请输入英语成绩”)
d[“python”] = input(“请输入python成绩”)
d[“java”] = input(“请输入Java成绩”)
except:
print(“您输入的有误,请重新输入!!!”)
# 在输入正确无误的情况下则退出循环
else:
break
# 如果输入的没有错,就将修改的字典写入到文件系统中
wfile.write(str(d)+"\n")
print(“修改成功!!!”)
# 其他没有修改的内容,将还会继续写入到文件系统中
else:
wfile.write(str(d)+"\n")
answer = input(“是否继续修改其他学生信息?y/n\n”)
if answer == “y”:
modify()
else:
return

def sort():
# 先显示所有学生信息
show()
# 判断数据在磁盘上是否存在
if os.path.exists(filename):
with open(filename, “r”, encoding=“utf-8”) as rfile:
student_list = rfile.readlines()
student_new = []
for item in student_list:
# 用eval将字符串转换为字典
d = dict(eval(item))
# 把字典添加到学生列表当中
student_new.append(d)
else:
return
asc_or_desc = input(“请选择(0.升序 1.降序)”)
if asc_or_desc == “0”:
asc_or_desc = False
elif asc_or_desc == “1”:
asc_or_desc = True
else:
print(“您的输入有误请从新输入”)
sort()
mode = input(“请选择排序方式(1.按英语成绩排序 2.按Python成绩排序 3.按Java成绩排序 0.按总成绩排序:)”)
if mode == “1”:
student_new.sort(key=lambda x: int(x[“english”]), reverse=asc_or_desc)
elif mode == “2”:
student_new.sort(key=lambda x: int(x[“python”]), reverse=asc_or_desc)
elif mode == “3”:
student_new.sort(key=lambda x: int(x[“java”]), reverse=asc_or_desc)
elif mode == “0”:
student_new.sort(key=lambda x: int(x[“english”])+int(x[“python”])+int(x[“java”]), reverse=asc_or_desc)
else:
print(“您的输入有误请重新输入!!!”)
sort()
# 都执行后,将学生信息展示一下
show_student(student_new)

def total():
if os.path.exists(filename):
with open(filename, “r”, encoding=“utf-8”) as rfile:
students = rfile.readlines()
if students:
print(f"一共有{len(students)}名学生")
else:
print(“还没有录入学生信息”)
else:
print(“暂未保存数据信息。。。。。。”)
def show():
# 用于存储学员的信息
student_list = []
if os.path.exists(filename):
# 如果文件存在,则以只读的方式打开文件
with open(filename, “r”, encoding=“utf-8”)as rfile:
students = rfile.readlines()
# 遍历存储在students列表中的数据
for item in students:
# 将获取的列表数据转换成字符存放到student_list中
student_list.append(eval(item))
# 如果学生列表不为空,则显示
if student_list:
show_student(student_list)
else:
print(“暂未保存过数据!!!”)
if name == ‘main’:
main()

猜你喜欢

转载自blog.csdn.net/qq_48424500/article/details/115429095