【源码】学生疫情期间信息管理系统(python实现)

import time

def meun():
    menu_info = '''+----------------------+
| 1)添加学生信息                           |
| 2)显示所有学生的信息                     |
| 3)删除学生信息                           |
| 4)修改学生信息                           |
| 5)按学生外出次数高-低显示学生信息       |
| 6)按学生外出次数低-高显示学生信息       |
| 7)按学生所在地确诊人数高-低显示学生信息 |
| 8)按学生所在地确诊人数低-高显示学生信息 |
| 9)保存学生信息到文件(students.txt)      |
| 10)从文件中读取数据(students.txt)      |
| 退出:其他任意按键<回车>                 |
+----------------------+
'''
    print(menu_info)

def get_outgotimes(*a):
    for i in a:
        return i.get("outgotimes")
def get_people(*a):
    for i in a:
        return i.get("people")
# 1)添加学生信息
def add_student_info():
    L = []
    while True:
        sid = input("请输入学号:")
        if not sid: #学号为空跳出循环
            break
        n = input("请输入姓名:")
        if not n: #名字为空,跳出循环
            break
        try:
            a = int(input("请输入外出次数:"))
            s = int(input("请输入所在地确诊人数:"))
        except:
            print("输入无效,请输入整数....重新录入信息")
            continue
        t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        info = {"id":sid,"name":n,"outgotimes":a,"people":s,"intimes":t}
        L.append(info)
    print("学生信息录入完毕!!!")
    return L

# 2)显示所有学生的信息
def show_student_info(student_info):
    if not student_info:
        print("无数据信息......")
        return
    print("学号".center(12),"姓名".center(8),"外出次数".center(8),"确诊人数".center(8),"录入时间".center(30))
    for info in student_info:
        print(info.get("id").center(12),info.get("name").center(8),str(info.get("outgotimes")).center(8),str(info.get("people")).center(8),info.get("intimes").center(30))

# 3) 删除学生信息
def del_student_info(student_info,del_name = ''):
    if not del_name:
        del_name = input("请输入删除的学生姓名:")
    for info in student_info:
        if del_name == info.get("name"):
            print("学生信息即将被删除或更新")
            return info
    raise IndexError("学生信息不匹配,没有找到%s" %del_name)

# 4) 修改学生信息
def mod_student_info(student_info):
    mod_name = input("请输入修改的学生姓名:")
    for info in student_info:
        if mod_name == info.get("name"):
            m = input("请输入学号:")
            if not m:
                break
            a = int(input("请输入外出次数:"))
            s = int(input("请输入所在地确诊人数:"))
            t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
            info = {"id":m,"name":mod_name,"outgotimes":a,"people":s,"intimes":t}
            return info
    raise IndexError("学生信息不匹配,没有找到%s"%mod_name)

# 5) 按学生外出次数高—低显示学生信息
def outgotimes_reduce(student_info):
    print("按学生外出次数高—低显示:")
    mit = sorted(student_info,key = get_outgotimes,reverse = True)
    show_student_info(mit)

# 6) 按学生外出次数低—高显示学生信息
def outgotimes_rise(student_info):
    print("按学生外出次数低—高显示:")
    mit = sorted(student_info,key = get_outgotimes)
    show_student_info(mit)

# 7) 按照学生所在地确诊人数高—低显示学生信息
def people_reduce(student_info):   
    print("按学生所在地确诊人数高-低显示学生信息:")
    mit = sorted(student_info ,key = get_people,reverse = True)
    show_student_info(mit)

# 8)按学生所在地确诊人数低—高显示学生信息
def people_rise(student_info): 
    print("按学生所在地确诊人数低—高显示学生信息")
    mit = sorted(student_info ,key = get_people)
    show_student_info(mit)

# 9)保存学生信息到文件(students.txt)
def save_info(student_info):
    try:
        students_txt = open("students.txt","w")     # 以写模式打开,并清空文件内容
    except Exception as e:
        students_txt = open("students.txt", "x")    # 文件不存在,创建文件并打开
    for info in student_info:
        students_txt.write(str(info)+"\n")          # 按行存储,添加换行符
    students_txt.close()

# 10)从文件中读取数据(students.txt) 
def read_info():
    old_info = []
    try:
        students_txt = open("students.txt")
    except:
        print("暂未保存数据信息")                       # 打开失败,文件不存在说明没有数据保存
        return
    while True:
        info = students_txt.readline()
        if not info:
            break
        #print(info)
        info = info.rstrip()    # 去掉换行符
        # print(info)
        info = info[1:-1]       # 去掉{}
        # print(info)
        student_dict = {}       # 单个学生字典信息
        for x in info.split(","):   # 以,为间隔拆分
            # print(x)
            key_value = []      # 开辟空间,key_value[0]存key,key_value[0]存value
            for k in x.split(":"):  # 以:为间隔拆分
                k = k.strip()       # 去掉首尾空字符
                # print(k)
                if k[0] == k[-1] and len(k) > 2:        # 判断是字符串还是整数
                    key_value.append(k[1:-1])           # 去掉 首尾的'
                else:
                    key_value.append(str(k))
                # print(key_value)
            student_dict[key_value[0]] = key_value[1]   # 学生信息添加
        # print(student_dict)
        old_info.append(student_dict)   # 所有学生信息汇总
    students_txt.close()  
    return old_info   

    
def main():
    student_info = []
    while True:
        # print(student_info)
        meun()
        number = input("请输入选项:")
        if number == '1':
            student_info = add_student_info()
        elif number == '2':
            show_student_info(student_info)
        elif number == '3':
            try:
                student_info.remove(del_student_info(student_info))
            except Exception as e:
                # 学生学号不匹配
                print(e)            
        elif number == '4':
            try:                
                student = mod_student_info(student_info)
            except Exception as e:
                # 学生学号不匹配
                print(e)
            else:
                # 首先按照根据输入信息的名字,从列表中删除该生信息,然后重新添加该学生最新信息
                student_info.remove(del_student_info(student_info,del_name = student.get("name")))  
                student_info.append(student)
        elif number == '5':
            outgotimes_reduce(student_info)
        elif number == '6':
            outgotimes_rise(student_info)
        elif number == '7':
            people_reduce(student_info)
        elif number == '8':
            people_rise(student_info)
        elif number == '9':
            save_info(student_info)
        elif number == '10':
            student_info = read_info()
        else:
            break
        input("回车显示菜单")

main()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落难Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值