Python入门 学生信息管理系统

# coding:utf-8
# author:ChenBaijing
# date:2022/4/6 11:08
'''
学生信息管理系统模块:
    学生信息维护:
        录入学生信息
        删除学生信息
        修改学生信息
    查询统计:
        按学生姓名查找
        按学生ID查找
        查询并显示所有学生信息
        统计学生总人数
    升序、降序排序:
        按英语成绩排序
        按Python成绩排序
        按Java成绩排序
        按总成绩排序

学生信息管理系统功能:
    0:退出系统
    1:录入学生信息    stu_insert()
    2:查找学生信息    stu_search()
    3:删除学生信息    stu_delete()
    4:修改学生信息    stu_modify()
    5:对学生成绩排序    stu_sort()
    6:统计学生总人数    stu_total()
    7:显示全部学生信息    stu_show()
    8:将录入的学生信息保存至文件    stu_save(student_list)
    9:将查找的学生信息按格式显示    stu_show_search(search_stu)
'''

import time
import os
import re

file_name='student.txt'
stu_id_file='stu_id.txt'
format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'

def menu():
    print('=============================学生信息管理系统=============================')
    print('1.录入学生信息')
    print('2.查找学生信息')
    print('3.删除学生信息')
    print('4.修改学生信息')
    print('5.对学生成绩排序')
    print('6.统计学生总人数')
    print('7.显示所有学生信息')
    print('0.推出系统')
    print('=======================================================================')

def stu_save(student_list):
    try:
        stu_txt=open(file_name,'a',encoding='utf-8')
        for item in student_list:
            stu_txt.write(str(item)+'\n')

    except BaseException as err:
        print('写入学生信息文件异常:',err)
    else:
        print('学生信息记录成功')
    stu_txt.close()


def stu_insert():
    student_list=[]
    while True:
        try:
            with open(stu_id_file,'r',encoding='utf-8') as rfile:
                student_id=int(rfile.read())
            id=student_id
            name=input('请输入录入学生姓名:')
            if not name:
                print('无效输入:姓名')
                break
            eng_score=int(input('请输入学生英语成绩:'))
            py_score=int(input('请输入学生python成绩:'))
            java_score=int(input('请输入学生java成绩:'))

            student_info={'id':id,'name':name,'eng_score':eng_score,'py_score':py_score,'java_score':java_score,'tot_score':eng_score+py_score+java_score}
            student_list.append(student_info)
            student_id+=1
            with open(stu_id_file,'w',encoding='utf-8') as wfile:
                wfile.write(str(student_id))
        except BaseException as err:
            print('录入学生异常异常操作:',err)
        else:
            answer=input('录入学生信息成功,是否继续录入 Y/N: ').upper()
            if not answer=='Y':
                break
    stu_save(student_list)

def stu_show_search(search_stu):
    if len(search_stu)<=0:
        print('没有数据传送')
        return
    print('-------------------------------')
    print(format_title.format('ID','姓名','英语成绩','Python成绩','Java成绩','总成绩'))
    for item in search_stu:
        print(format_title.format(item.get('id'),item.get('name'),item.get('eng_score'),item.get('py_score'),item.get('java_score'),item.get('tot_score')))
    print('-------------------------------')

def stu_search():
    try:
        mode=int(input('按照学生id查询请按0 按照学生姓名查询请按1 :'))
        if mode in range(2):
            if mode:
                search_key=input('请输入要查询学生的姓名: ')
            else:
                search_key=int(input('请输入要查询学生的id: '))
            search_stu=[]
            if os.path.exists(file_name):
                with open(file_name,'r',encoding='utf-8') as rfile:
                    student_saves=rfile.readlines()
                    for item in student_saves:
                        stu_info_dic=dict(eval(item))
                        if not mode and int(stu_info_dic['id']) == search_key:
                            search_stu.append(stu_info_dic)
                        elif mode and stu_info_dic['name'] == search_key:
                            search_stu.append(stu_info_dic)
            if not search_stu:
                print('未找到符合身份的学生')
            else:
                print('找到了符合身份的学生')
                stu_show_search(search_stu)
        else:
            print('无效输入:查询模式')
    except BaseException as err:
        print('查询学生信息功能异常: ',err)
    search_stu.clear()
    answer=input('是否继续搜索学生? Y/N: ').upper()
    if answer == 'Y':
        stu_search()

def stu_delete():
    while True:
        student_id=input('请输入要删除的学生ID: ')
        if student_id:
            if os.path.exists(file_name):
                with open(file_name,'r',encoding='utf-8') as file:
                    student_saves=file.readlines()
            else:
                student_saves=[]
            flag=False
            if student_saves:
                with open(file_name,'w',encoding='utf-8') as wfile:
                    for item in student_saves:
                        stu_info_dic=dict(eval(item))
                        if stu_info_dic['id'] != int(student_id):
                            wfile.write(str(stu_info_dic)+'\n')
                        else:
                            flag=True
                    if flag:
                        print(f'id为{student_id}的学生信息已被删除')
                    else:
                        print(f'没有找到id为{student_id}的学生信息')
            else:
                print('没有创建该文件 学生数据为空')
                break
            print('删除后的学生信息为:')
            stu_show()
        else:
            print('无效输入删除学生id')
        answer = input('是否继续删除学生信息? Y/N: ').upper()
        if answer != 'Y':
            break

def stu_modify():
    stu_show()
    if os.path.exists(file_name):
        with open(file_name,'r',encoding='utf-8') as rfile:
            student_saves=rfile.readlines()
    else:
        print('没有创建该文件 学生数据为空')
        return
    try:
        student_id=int(input('请输入要修改学生的id: '))
        if student_id:
            search_flag=False
            for item in student_saves:
                stu_info_dic=dict(eval(item))
                if student_id==stu_info_dic['id']:
                    search_flag=True
            if search_flag:
                print(f'找到了id为{student_id}的学生,请输入修改数据:')
                name = input('请输入录入学生姓名:')
                if not name:
                    print('无效输入:姓名')
                else:
                    eng_score = int(input('请输入学生英语成绩:'))
                    py_score = int(input('请输入学生python成绩:'))
                    java_score = int(input('请输入学生java成绩:'))

                    student_info = {'id': student_id, 'name': name, 'eng_score': eng_score, 'py_score': py_score,
                                'java_score': java_score, 'tot_score': eng_score + py_score + java_score}
                    with open(file_name,'w',encoding='utf-8') as wfile:
                        for item in student_saves:
                            stu_info_dic = dict(eval(item))
                            if student_id==stu_info_dic['id']:
                                wfile.write(str(student_info)+'\n')
                            else:
                                wfile.write(str(stu_info_dic)+'\n')
                        print(f'修改id为{student_id}的学生信息成功')
            else:
                print(f'未找到id为{student_id}的学生')
        else:
            print('无效输入删除学生id')
    except BaseException as err:
        print('修改学生异常操作:',err)
    stu_show()
    answer=input('是否继续修改学生信息? Y/N: ').upper()
    if answer=='Y':
        stu_modify()

def stu_sort():
    if os.path.exists(file_name):
        try:
            with open(file_name, 'r', encoding='utf-8') as rfile:
                student_saves = rfile.readlines()
                stu_info_list = []
                for item in student_saves:
                    stu_info_dic = dict(eval(item))
                    stu_info_list.append(stu_info_dic)
                print('0.按照英语成绩排序\n1.按照Python成绩排序\n2.按照Java成绩排序\n3.按照总成绩排序')
                mode_num = int(input('请输入排序模式序号: '))
                mode_list=['eng_score','py_score','java_score','tot_score']
                if mode_num in range(4):
                    mode_code=mode_list[mode_num]
                    asc_or_desc_bool=int(input('您选择升序排序或降序排序? 0/1: '))
                    if asc_or_desc_bool in [0,1]:
#                           lambda匿名函数      lambda 元素数据项: 函数
                        stu_info_list.sort(key=lambda item: int(item[mode_code]),reverse=asc_or_desc_bool)
                        stu_show_search(stu_info_list)
                    else:
                        print('排序选择模式2有误')
                else:
                    print('排序选择模式1有误')
        except BaseException as err:
            print('排序操作异常: ',err)
    else:
        print('没有创建该文件 学生数据为空')

def stu_total():
    if os.path.exists(file_name):
        with open(file_name,'r',encoding='utf-8') as rfile:
            student_saves=rfile.readlines()
            tot_num=len(student_saves)
            print(f'学生总人数为:{tot_num}')
    else:
        print('没有学生记录 学生总人数: 0')

def stu_show():
    if os.path.exists(file_name):
        with open(file_name,'r',encoding='utf-8') as rfile:
            student_saves=rfile.readlines()
            tot_num=len(student_saves)
            print('-------------------------------')
            print(format_title.format('ID', '姓名', '英语成绩', 'Python成绩', 'Java成绩', '总成绩'))
            for item in student_saves:
                stu_info_dic=dict(eval(item))
                print(format_title.format(stu_info_dic.get('id'), stu_info_dic.get('name'), stu_info_dic.get('eng_score'), stu_info_dic.get('py_score'),
                                          stu_info_dic.get('java_score'), stu_info_dic.get('tot_score')))
            print('-------------------------------')
            print(f'学生总人数为:{tot_num}')
    else:
        print('没有学生记录 学生总数为0')
    input('输入任意字符返回继续: ')

def main():
    while True:
        menu()
        try:
            choice=int(input('请选择操作序号:'))
            if choice in range(8):
                if choice == 0:
                    answer=input('您确定要退出系统么? Y/N: ').upper()
                    if answer=='Y':
                        break
                elif choice == 1:
                    stu_insert()        # 录入学生信息
                elif choice == 2:
                    stu_search()        # 查找学生信息
                elif choice == 3:
                    stu_delete()        # 删除学生信息
                elif choice == 4:
                    stu_modify()        # 修改学生信息
                elif choice == 5:
                    stu_sort()          # 对学生进行排序
                elif choice == 6:
                    stu_total()         # 统计学生人数
                elif choice == 7:
                    stu_show()          # 显示所有学生信息
            else:
                print('请输入有效序列!')
        except BaseException as err:
            print('异常操作:',err)
        time.sleep(1)
    print('谢谢您的使用')

if __name__ == '__main__':
    if not os.path.exists(stu_id_file):
        with open(stu_id_file,'w',encoding='utf-8') as wfile:
            wfile.write('1001')
    main()

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值