python基础(16):学生信息管理系统——Python编写(附全部代码)_学生管理系统python

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

✅作者简介大家好我是Xlong一枚正在学习COMSOL、Python的工科研究僧
📃个人主页: Xlong的个人博客主页
🔥系列专栏Python学习
💖如果觉得博主的文章还不错的话请👍支持一下博主哦🤞

目录

一、需求分析

二、系统分析

三、系统开发必备

四、主函数设计

五、学生信息维护模块设计

六、查询/统计模块设计

七、排序模块设计

八、项目打包

九、代码


一、需求分析

1.学生管理系统应具备的功能

1添加学生及成绩信息

2将学生信息保存到文件中

3修改和删除学生信息

4查询学生信息

5根据学生成绩进行排序

6统计学生的总分

二、系统分析

1.系统功能结构学生信息管理系统的7大模块

1录入学生信息模块

2查找学生信息模块

3删除学生信息模块

4修改学生信息模块

5学生成绩排名模块

6统计学生总人数模块

7显示全部学生信息模块

2.系统业务流程

三、系统开发必备

1.系统开发环境

1操作系统win10

2Python解释器版本Python3.9.10

3开发工具Pycharm

4Python内置模块os,re

四、主函数设计

 1.实现主函数

五、学生信息维护模块设计

1.实现录入学生信息功能

 2.具体实现

1savestudent函数用于将学生信息保存到文件

2insert函数用于录入学生信息

3.删除学生信息功能业务流程

 4.修改学生信息功能业务流程

 5.查找学生信息功能业务流程

六、查询/统计模块设计

1.统计学生总人数功能业务流程

2.显示所有学生信息功能业务流程

七、排序模块设计

八、项目打包

1.安装第三方模块

1在线安装方式pip install Pylnstaller

2执行打包操作C:\Users\jjlu>pyinstaller -F E:\软件相关\Python\vippython\chap16\stusyste.py

最后打包的exe路径在C:\Users\jjlu\dist

九、代码

import os.path  #导入os.path模块

def menm():    #菜单
    print('==========================学生信息管理系统==========================')
    print('------------------------------功能菜单-----------------------------')
    print('\t\t\t   1.录入学生信息')
    print('\t\t\t   2.查找学生信息')
    print('\t\t\t   3.删除学生信息')
    print('\t\t\t   4.修改学生信息')
    print('\t\t\t   5.排序')
    print('\t\t\t   6.统计学生总人数')
    print('\t\t\t   7.显示所有学生信息')
    print('\t\t\t   0.退出系统')
    print('-------------------------------------------------------------------')

filename = 'student.txt'# 文件名


def main(): #主程序
    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 insert():# 插入信息
    student_list = []
    while True: # 循环输入
        id = input('请输入ID(如1001)')
        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
        #将录入的学生信息保存到字典当中
        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(lst):# 保存
    try:
        stu_txt = open(filename,'a',encoding='utf-8')
    except:
        stu_txt = open(filename,'w',encoding='utf-8')
    for item in lst:
        stu_txt.write(str(item)+'\n')# 将内容写入文件中


def search(): # 搜索
    student_query = []
    while True:
        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',encoding='utf-8')as rfile:
                student = rfile.readlines()
                for item in student:
                    d = dict(eval(item))
                    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(lst):
    if len(lst)==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{:^10}\t{:^10}\t{:^8}'
    for item in lst:
        print(format_data.format(item.get('id'),
                                 item.get('name'),
                                 item.get('english'),
                                 item.get('python'),
                                 item.get('java'),
                                 int(item.get('english'))+int(item.get('python'))+int(item.get('java'))
                                 ))
def delete():
    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 #标记是否删除
            if student_old:
                with open(filename,'w',encoding='utf-8')as wfile:
                    d = {}
                    for item in student_old:
                        d = dict(eval(item)) #将字符串转成字典
                        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:
            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()

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:
            d = dict(eval(item))
            student_new.append(d)
    else:
        return
    asc_or_desc = input('请选择0.升序 1.降序:')
    if asc_or_desc =='0':
        asc_or_desc_bool =False
    elif asc_or_desc =='1':
        asc_or_desc_bool =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_bool)
    elif mode == '2':
        student_new.sort(key=lambda x:int(x['python']),reverse=asc_or_desc_bool)
    elif mode == '3':
        student_new.sort(key=lambda x:int(x['java']),reverse=asc_or_desc_bool)
    elif mode == '0':
        student_new.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool)
    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_lst = []
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as rfile:
            students=rfile.readlines()
            for item in students:
                student_lst.append(eval(item))
            if student_lst:
                show_student(student_lst)
    else:
        print('暂未保存过数据')

if __name__ == '__main__':
    main()

持续更新中......

原创不易各位看官请随手点个赞和关注哦感谢

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python