基于python制作简易版学生信息管理系统

一、前言

本篇博客对于文件操作、字典、列表、匿名函数以及sort()等内置函数进行了系统的整理操作,以设计一个学生信息管理系统的形式展示,具体概念方法等会在代码后进行分析讲述,请读者仔细分析每一处解析,对于基础巩固将会有很大的帮助,其中还有每一块代码的设计思路图,逻辑分析会有一定的提升。

二、需求分析

本程序需要用到os模板首先导入,并命名要存储信息的文件

import os
File_Object_Name = 'Student_Inforation.txt'

三、主函数

def Main():
    while True:
        Menu()
        _Select = int(input('Please select operation:'))
        if _Select in [0, 1, 2, 3, 4, 5, 6, 7]:
            if _Select == 0:
                _Answer = input('Do you want to log out?(Y/N)')
                if _Answer == 'Y' or _Answer == 'y':
                    print('Thank for you use!!!')
                    break
                    pass
                else:
                    continue
                    pass
                pass
            elif _Select == 1:
                Insert_Infor()
                pass
            elif _Select == 2:
                Search_Infor()
                pass
            elif _Select == 3:
                Delete_Infor()
                pass
            elif _Select == 4:
                Change_Infor()
                pass
            elif _Select == 5:
                Sort()
                pass
            elif _Select == 6:
                Count_Total_Num()
                pass
            elif _Select == 7:
                Show_Infor()
                pass
            pass
        else:
            print('Error Input!!!')
            pass

四、功能菜单

def Menu():
    print('=========Student Information Management System=========')
    print('---------------------Function menu---------------------')
    print('             1、Input Student Information')
    print('             2、Search Student Information')
    print('             3、Delete Student Information')
    print('             4、Change Student Information')
    print('             5、Sort According to Score')
    print('             6、Count Total Student Number')
    print('             7、Show All Student Information')
    print('             0、Log Out')
    print('-------------------------------------------------------')
    pass

五、录入信息

def Insert_Infor():
    Student_Infor_List = []  # 创建一个学生信息空列表,后面会用到
    while True:
        Stu_Id = input('Please input the id(such as 1001,1002):')
        if not Stu_Id:  # 空的字符串转为bool类型为False,非空为True,此处若是输入为空会直接跳出循环。(空列表、字典、元组等都满足)
            break
            pass
        Stu_Name = input('Please input the name:')
        if not Stu_Name:
            break
            pass
        try:
            English_Score = int(input('Please input the English score:'))
            Python_Score = int(input('Please input the Python score:'))
            Java_Score = int(input('Please input the Java score:'))
            pass
        except:
            print('Error Input(not int),please input again')
            continue
            pass
        # 将每个学生的信息放入一个字典当中
        Student_Infor_Dict = {'Id': Stu_Id, 'Name': Stu_Name, 'English': English_Score, 'Python': Python_Score, 'Java': Java_Score}
        # 将一个字典作为一个元素放入学生信息列表
        Student_Infor_List.append(Student_Infor_Dict)  # 使用 append() 方法来添加列表项
        _Answer = input('Whether to input more?(Y/N)')
        if _Answer == 'Y' or _Answer == 'y':
            continue
            pass
        else:
            break
            pass
        pass
    # 将学生信息列表中的字典元素保存到文件之中,调用Keep_Infor()函数
    Keep_Infor(Student_Infor_List)
    print('Input Finished')
    pass

六、保存信息

def Keep_Infor(List):
    File_Object = open(File_Object_Name, mode='a', encoding='utf-8')
    # 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    for item in List:
        File_Object.write(str(item)+'\n')
        pass
    # 将传入的列表中的字典元素强制转换成字符串类型并拼接上换行符写入文件
    File_Object.close()

七、查找信息

def Search_Infor():
    Student_Query = [] # 空列表,之后用于存放查找到的学生信息
    while True:
        Student_Id = ''
        Student_Name = ''
        if os.path.exists(File_Object_Name):
        # os.path模块主要用于文件的属性获取,os.path.exists()就是判断括号里的文件是否存在,括号内的可以是文件路径/名。
            Search_Mode = int(input('search by id(1) or by name(2):'))
            if Search_Mode == 1:
                Student_Id = input('Please input id:')
                pass
            elif Search_Mode == 2:
                Student_Name = input('Please input name:')
                pass
            else:
                print('Error Input,try again!')
                Search_Infor()
                pass
            with open(File_Object_Name, 'r', encoding='utf-8')as File_Object:  # 只读模式打开文件并将类对象赋给File_Object
                Student_List = File_Object.readlines()  # readlines()按行读取,一次性读取所有内容,返回一个列表,每一行内容作为一个元素
                for item in Student_List:  # 遍历列表中元素
                    _Dict = eval(item)
                    # 由于是以字符串类型保存到文件中,此时item相当于'dict'形式,要将其用eval()函数转换为字典,即脱掉''。
                    if Student_Id:  # 如果选的是按照姓名查找,则此空字符串已经不再为空,bool类型为True
                        if Student_Id == _Dict['Id']:
                            Student_Query.append(_Dict)
                            pass
                        pass
                    elif Student_Name:
                        if Student_Name == _Dict['Name']:
                            Student_Query.append(_Dict)
                            pass
                        pass
                    pass
                if Student_Query == []:  # 仍为空说明未找到。
                    print('no such student,try again')
                    Search_Infor()  # 再次调用函数
                    pass
                pass
            pass
        else:
            print('Still no such file to keep student information!')
            pass
        print(Student_Query[0])  # 此时该列表中只有一个字典元素,直接打印输出
        Student_Query.clear()  # 调用内置函数清空列表,方便下次使用
        _Answer = input('Whether to search others?(Y/N)')
        if _Answer == 'Y' or _Answer == 'y':
            continue
            pass
        else:
            return
        pass
    pass

八、删除信息

def Delete_Infor():
    while True:
        Student_Id = input('Please input the student‘s id that you want to delete:')
        if Student_Id:
            if os.path.exists(File_Object_Name):
                with open(File_Object_Name, 'r', encoding='utf-8')as File1:
                    Old_Student_Infor = File1.readlines()  # 读取每行作为元素放入Old_Student_Infor列表
                    pass
                pass
            else:
                Old_Student_Infor = []
                pass
            Flag = False  # 是否删除成功的标志
            if Old_Student_Infor:
                with open(File_Object_Name, 'w', encoding='utf-8')as File2:
                    _Dict = {}
                    for item in Old_Student_Infor:
                        _Dict = eval(item)  # 将删除信息之前的列表元素转化为字典形式赋给_Dict
                        if _Dict['Id'] != Student_Id:
                            File2.write(str(_Dict)+'\n')
                            # 如果与要删除的信息的Id不同,覆盖写入原文件
                            pass
                        else:
                            Flag = True  # 如果相同的话,则不写入文件中,相当于删除成功
                            pass
                        pass
                    if Flag:
                        print('Student information of {} has been delete'.format(Student_Id))
                        pass
                    else:
                        print('Can not find student of id:{}'.format(Student_Id))
                        pass
                    pass
                pass
            else:
                print('file have no student information')
                break
                pass
            Show_Infor()
            _Answer = input('Whether to delete more?(Y/N)')
            pass
        if _Answer == 'Y' or _Answer == 'y':
            continue
            pass
        else:
            break
            pass
        pass
    pass

九、修改信息

def Change_Infor():
    Show_Infor()
    if os.path.exists(File_Object_Name):
        with open(File_Object_Name, 'r', encoding='utf-8')as old_file:
            Old_Student_Infor = old_file.readlines()
            pass
        pass
    else:
        return
    Student_Id = input('Please input the id you wanna change:')
    if Student_Id:
        with open(File_Object_Name, 'w', encoding='utf-8')as new_file:
            for item in Old_Student_Infor:
                _dict = dict(eval(item))
                if _dict['Id'] == Student_Id:
                    print('Find it,can change it!')
                    while True:
                        try:
                            _dict['Name'] = input('Please input new name:')
                            _dict['English'] = input('Please input new English score:')
                            _dict['Python'] = input('Please input new Python score:')
                            _dict['Java'] = input('Please input new Java score:')
                            pass
                        except:
                            print('Error Input!!!Try again')
                            pass
                        new_file.write(str(_dict)+'\n')
                        print('Successfully change!')
                        break
                        pass
                    pass
                else:
                    print('Can‘t find it')
                    new_file.write(str(_dict)+'\n')
                    pass
                pass
            pass
        pass
    _Answer = input('Whether to change more?(Y/N)')
    if _Answer == 'y' or _Answer == 'Y':
        Change_Infor()
        pass
    else:
        return
    pass

十、显示信息

def Show_Infor():
    Infor_List = []
    if os.path.exists(File_Object_Name):
        with open(File_Object_Name, 'r', encoding='utf-8')as File_Object:
            Stu_List = File_Object.readlines()
            for item1 in Stu_List:
                Infor_List.append(dict(eval(item1)))
                pass
            if Infor_List:
                for item2 in Infor_List:
                    print(item2)
                    pass
                pass
            else:
                print('no student')
                pass
            pass
        pass
    else:
        print('no such file')
        pass
    pass

十一、按成绩排序

def Sort():
    Show_Infor()
    Infor_List = []
    if os.path.exists(File_Object_Name):
        with open(File_Object_Name, 'r', encoding='utf-8')as File_Object:
            Student_List = File_Object.readlines()
            for item in Student_List:
                _Dict = dict(eval(item))
                Infor_List.append(_Dict)
                pass
            pass
        pass
    else:
        print('no such file')
        return
    Sort_Mode = bool(input('Please input sort mode(0、ascending order|1、descending order)'))
    if not Sort_Mode:  # ascending order
        reverse_mode = True
        pass
    else:  # descending order
        reverse_mode = False
        pass
    Specific_Sort_Mode = int(input('Sort by English(1),by Python(2),by Jave(3),by total(4):'))
    if Specific_Sort_Mode == 1:
        Infor_List.sort(key=lambda x: int(x['English']), reverse=reverse_mode)
        pass
    elif Specific_Sort_Mode == 2:
        Infor_List.sort(key=lambda x: int(x['Python']), reverse=reverse_mode)
        pass
    elif Specific_Sort_Mode == 3:
        Infor_List.sort(key=lambda x: int(x['Java']), reverse=reverse_mode)
        pass
    elif Specific_Sort_Mode == 4:
        Infor_List.sort(key=lambda x: int(x['English']) + int(x['Python']) + int(x['Java']), reverse=reverse_mode)
        pass
    else:
        print('Error Input,try again')
        Sort()
        pass
    for item in Infor_List:
        print(item)
        pass
    pass
  • sort()函数原型: list.sort(key=None, reverse=False)

key参数 :
key接受的是一个只有一个形参的函数,形式如下
def f(a):
return len(a)
key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序
reverse参数 :
reverse接受的是一个bool类型的值 (Ture or False),表示是否颠倒排列顺序,一般默认的是False

十二、统计人数

def Count_Total_Num():
    if os.path.exists(File_Object_Name):
        with open(File_Object_Name, 'r', encoding='utf-8')as File_Object:
            Stu_List = File_Object.readlines()
            _Count = len(Stu_List)
            if _Count >= 2:
                print('A total of {} students')
                pass
            elif _Count ==1:
                print('A single student!')
                pass
            else:
                print('no student!')
                pass
            pass
        pass
    else:
        print('still no such file!')
        pass
    pass

十三、最后记得运行主函数

Main()

十四、将程序打包成可执行exe文件

1.cmd进入command界面

2.输入pip install PyInstaller

3.安装完成后仍在cmd界面输入pyinstaller -F py为扩展名的文件路径\文件名.py

4.操作后将会有一大串代码,倒数第二行会有最终文件的保存地址,打开之后将之前编译程序生成的txt文件移入该文件夹中即可操作

到此这篇关于基于python制作简易版学生信息管理系统的文章就介绍到这了,更多相关python学生信息管理系统内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 用python制作词云视频详解

    使用到的第三方库 Package Version --------------- --------- baidu-aip 2.2.18.0 jieba 0.42.1 moviepy 1.0.3 numpy 1.20.2 opencv-python 4.5.1.48 Pillow 8.2.0 requests 2.25.1 wordcloud 1.8.1 you-get 0.4.1520 B站弹幕爬取 思路 通过视频BV号请求cid,再使用cid请求弹幕文件,最后使用正则表达式去匹配弹幕文本,将匹

  • 基于python的matplotlib制作双Y轴图

    一.函数介绍 函数:twin()函数 含义:表示共享x轴,共享表示的就是x轴使用同一刻度 二.实际应用 2.1 实验数据展示 数据表的名称:600001SH.xlsx 2.2 代码实现: 文章里使用到了Subplot()函数 # 导入相关数据包 import matplotlib.pyplot as plt import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体 plt.rcParams['axes.unic

  • 制作Python数字华容道的实现(可选择关卡)

    由于比赛需要,我这边制作了一份数字华容道,内含有3,4,5阶的数字华容道,开头在壳窗口内选择,运用了随机数模块(random)和图形化用户界面(tkinter) 下面是程序完整代码 # coding:utf-8 # """ #============================================================ 作者:@Qss 2021年3月20日起草 2021年3月21日完工 2021年3月23日一次优化完成 2021年3月31日完成二次优

  • 用Python制作灯光秀短视频的思路详解

    一.引言 2021年4月8日武汉重启一周年,这是个值得庆祝的日子,作为一个武汉人和一个死宅程序员,老猿也想在这个日子留下点什么.想起武汉长江两岸的灯光秀,顿时有了主意,那就用程序实现一个武汉重启庆祝的灯光秀短视频吧,于是在4月7日晚开始构思和着手开发,4月8日晚终于顺利完成,并且通过使用OpenCV.OpenCV+Moviepy两种方式进行了实现. 本文介绍结合Python+OpenCV+Moviepy实现的思路和过程,Python+OpenCV实现的思路和过程将在另外的博文中单独介绍. 二.实

  • python tkinter制作用户登录界面的简单实现

    本文只是几年前学习的tkinter的时候写的测试程序,十分之简陋,只是学习用,没什么其他用处. 学习一下莫烦Python的tkinter教程,根据教程制作了用户登录注册页.基本功能为检查登录.注册. 运行如下: ​​​​​​ 代码如下: # -*- coding: utf-8 -*- """ Created on Sun Aug 5 10:34:10 2018 @author: Administrator """ import tkinter a

  • 基于python制作简易版学生信息管理系统

    一.前言 本篇博客对于文件操作.字典.列表.匿名函数以及sort()等内置函数进行了系统的整理操作,以设计一个学生信息管理系统的形式展示,具体概念方法等会在代码后进行分析讲述,请读者仔细分析每一处解析,对于基础巩固将会有很大的帮助,其中还有每一块代码的设计思路图,逻辑分析会有一定的提升. 二.需求分析 本程序需要用到os模板首先导入,并命名要存储信息的文件 import os File_Object_Name = 'Student_Inforation.txt' 三.主函数 def Main()

  • 教你用Python实现简易版学生信息管理系统(含源码)

    一.项目分析 1.首先定义一个存放基础学生信息列表 格式:list = [{学号:姓名,年龄:num,成绩:num },{--}] student1 = [\ {1:"jam",'age':17,'socer':99}, {2:'kol','age':18,'socer':89}, {3:'avlir','age':19,'socer':100}] 2.先搭建框架(主函数main()) if __name__ == '__main__': while True: menu() key

  • python实现简易版学生成绩管理系统

    300来行python代码实现简易版学生成绩管理系统,供大家参考,具体内容如下 使用链表来实现 class Node(object): def __init__(self, data, pointer): self.data = data self.next = pointer # 创建单链表 class SingleLinkedList(object): def __init__(self): self.head = Node(None, None) self.point = self.hea

  • python实现简易的学生信息管理系统

    目录 一.系统功能 二.系统开发环境 三.实现代码 四.项目打包并生成.exe可执行文件 本文实例为大家分享了python实现简易学生信息管理系统的具体代码,供大家参考,具体内容如下 一.系统功能 1.录入学生信息 2.查找学生信息 3.修改学生信息 4.删除学生信息 5.成绩排序 6.统计学生总人数 7.显示所有学生信息 0.退出系统 二.系统开发环境 1.操作系统:win7 2.开发工具:PyCharm 3.Python内置模块:os,re 三.实现代码 import os filename

  • 基于Python实现面向对象版学生管理系统

    目录 一.目标 二.系统需求 三.准备程序文件 1. 分析 2. 创建程序文件 四.书写程序 1. student.py 2. 管理系统需求 3. main.py 4. 定义系统功能函数 4.1 添加学生 4.2 删除学生 4.3 修改学生信息 4.5 查询学生信息 4.6 显示所有学生信息 4.7 保存学生信息 4.8 加载学生信息 五.源代码 main.py student.py managerSystem.py 六.总结 一.目标 了解面向对象开发过程中类内部功能的分析方法 了解常用系统功

  • Python制作简易版小工具之计算天数的实现思路

    需求 给定一个日期,格式如 "2020-2-12",计算出这个日期是 2020 年的第几天? 实现思路 使用 tkinter 和 tkinter.ttk 对界面进行布置: 使用 calendar 计算天数: 规范输入日期的格式: 对月份,天数进行逻辑判断: 输入错误抛出异常提示. 代码实现 # -*- coding: utf-8 -*- ''' @File: calc_day_v2.py @Time: 2020/02/12 20:33:22 @Author: 大梦三千秋 @Contac

  • Python实现简单的学生信息管理系统

    本文实例为大家分享了Python实现学生信息管理系统的具体代码,供大家参考,具体内容如下 要求描述: 学生的信息包括:学号,姓名,年龄,性别,出生日期,地址,电话,E-mail等等.试设计一个学生信息管理系统,使之能提供一下基本功能: 系统以菜单方式工作 学生信息录入功能(学生信息用文件保存)--- 输入 学生信息浏览功能 --- 输出 查询.排序功能 --- 算法 1. 按学号查询2. 按姓名查询 学生信息的删除与修改(可选项) 基本思路同之前写的那篇图书借阅系统,在此就不多赘述. 直接上代码

  • 基于Python制作简易的windows修改器

    现在应该大部分人都使用win11系统吧,不用也要强行给你更新到win11,win11其实挺好用哈,只是有一点不好用,就是右键的菜单,今天做个小程序,就是应该修改win11的一个应用程序 先来看一段视频哈! 视频链接 windows11修改器 提取码:v9ms 源代码加编译后的文件 提取码:enr4 该程序的安装包 已被博主做成了安装包 这款软件纯python制作,内容简单 1.可以将win11的右键改为win10经典版,还可以进行恢复 2.可以去掉win11右键的终端(也就是win11的最高管理

  • C语言版学生信息管理系统

    本文实例为大家分享了C语言版学生信息管理系统的具体代码,供大家参考,具体内容如下 一.题目分析 1.功能概述 1)查询学生信息 2)添加学生信息 3)修改学生信息 4)删除学生信息 5)刷新学生信息 6)保存学生信息 7)输出当前学生信息 2.题目要求: 1)使用结构体建立学生信息体制 2)实现七大基本功能 3)采用文件存储学生信息 二.算法构造 1.难点解析----对文件的操作 1.1文件读取 FILE * fp; if ((fp = fopen(filename, "r")) ==

  • 基于VUE实现简单的学生信息管理系统

    一.主要功能 本次任务主要是使用VUE来实现一个简单的学生信息管理系统,主要功能为: 1.显示所有学生的信息(默认为10个) 2. 点击按钮,显示出学号尾号为单数(或双数)的学生信息 3. 增加学生信息 4. 要求使用VUE中 父子组件间通信 二.实现思路 1.数据管理:使用json数组的方式来管理储存数据 2.显示学生信息:因为组件是可复用的 Vue 实例,所以在这里引入子组件(用来显示每个学生的信息),将主页作为父组件.主页(父组件)使用v-for循环显示子组件. 3.按单双号筛选查找学生:

随机推荐