基于python的简易学生信息管理系统

最近刚学习完小甲鱼python零基础视频中类与对象部分,心血来潮,从早上构思到晚上写出来,做了一个简易的学生信息管理系统。

本程序主要运用了类与对象,以及方法定义的知识,写的比较普通,望能够对初学者有一定的帮助。

但由于没有深入剖析代码,只是为了完成一个结果,可能代码有些许繁琐,望大家在阅读的时候给予指正,同时提出一些修改建议。

 

该学生信息管理系统主要包括:录入学生信息,查找学生信息,删除学生信息,修改学生信息,排序学生信息,统计学生人数,显示学生信息以及退出信息管理系统八个部分。

其中,各部分的功能如下:

  • 录入学生信息:通过输入学生姓名,性别,年龄录入学生信息,另外学生还包括学号,年级班级的信息。学号的自动生成模拟学校分配学号,即按入学年份(由系统时间年份决定)以及次序生成,如:202103即2021年入学的第三个学生的学号。年级信息同样由系统时间年份确定年级(2021级即2021年入学的年级),而班级信息则随机分配,班级有1-3班,用调用random中的方法进行随机分配。同时存储学生信息。
  • 查找学生信息:分为按姓名查找和按学号查找。
  • 删除学生信息:输入姓名即删除该学生信息。
  • 修改学生信息:将学生的所有信息进行依此选择修改(姓名,性别,年龄,姓名,性别,年龄)。
  • 排序学生信息:按年级排序(实在不想录入各科成绩了,太多太烦了,理解一下 :<)。
  • 统计学生人数:返回学生人数
  • 显示学生信息:打印所有学生信息
  • 退出信息管理系统:退出程序(程序最后必须要执行)

 

以下就是代码部分了.......

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 需要的模块()
import time as t    #获取系统时间使用
import random as r  #随机获取班级使用
import sys          #退出程序时使用
import os           #判断文件是否存在时使用
import pickle as p  #保存获取文件使用
  • 界面设计部分,其实就是按规则打印的print()语句
#界面设计

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

  • main()主函数
def main():
    Interface()     #显示界面
    choose = input("请选择服务:")
    while choose:
        if choose == '1':
            input_info()
            choose = input("请选择服务:")
        elif choose == '2':
            find_info()
            choose = input("请选择服务:")
        elif choose == '3':
            del_info()
            choose = input("请选择服务:")
        elif choose == '4':
            mod_info()
            choose = input("请选择服务:")
        elif choose == '5':
            sort_info()
            choose = input("请选择服务:")
        elif choose == '6':
            sum_info()
            choose = input("请选择服务:")
        elif choose == '7':
            show_info()
            choose = input("请选择服务:")
        elif choose == '0':
            print("成功退出...")
            sys.exit(0)
        else:
            choose = input("请选择服务:")

main()
  • 文件获取,学生信息初始化部分
#列表打包所有学生个人信息

if os.path.exists('学生信息库.pkl'): #判断文件是否存在
    with open('学生信息库.pkl', 'rb') as stu_file:
        stu_list = p.load(stu_file) #存在则获取其中的内容并赋值给stu_list
else:
    stu_list = [] #不存在则赋值stu_list为空列表
  • 学生类(我看很多例子都不用类,但是我只是为了复习巩固类与对象的知识,学着做了一下)
#学生类
class Student():
    
    def __init__(self, name, age, sex):
        self.stuInfo = dict()       #初始化一个字典存储学生信息
        self.name = str(name)       #姓名
        self.age = str(age) + "岁"  #年龄
        self.sex = str(sex)         #性别
        self.stu_num = self.getStuNum()             #学号
        self.grade = (str(t.localtime()[0]) + "级") #年级
        self.cls = (str(r.randint(1, 3)) + "班")    #班级
        self.stuInfo = dict(name = self.name, age = self.age, \
                         sex = self.sex, stu_num = self.stu_num, \
                         stu_cls = (self.grade + self.cls)) #学生信息放入字典
        global stu_list                 #指明全局变量
        stu_list.append(self.stuInfo)   #放入stu_list列表中
        with open('学生信息库.pkl', 'wb') as stu_file:
            p.dump(stu_list, stu_file)  #存储学生信息
        print("%s同学信息录入成功!!" % self.name) #打印结果

    #获取学号的方法
    def getStuNum(self):
        global stu_list
        num = len(stu_list) #获取已有人数
        num += 1            #已有人数加1获取序号
        return (str(t.localtime()[0]) + str(num).zfill(2)) #返回学号

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下是各个方法的实现代码内容:

  1. input_info()方法
    def input_info():
        name = input("请输入姓名:")
        age = input("请输入年龄:")
        sex = input("请输入性别:")
        clsname = name
        clsname = Student(name, age, sex) #按输入内容实例化一个对象

     

  2. find_info()方法
    def find_info():
        way = input("请选择查找方式(姓名,学号):")
        find = False #指示是否找到学生
        global stu_list
        if way == "姓名":
            Name = input("请输入学生姓名:")
            for info in stu_list: #info则依此为各学生的信息对应的字典
                if info['name'] == Name:
                    for inf in info.values(): #inf则依此为学生的各信息
                        print(inf, end = ' ')
                    find = True #指示找到学生信息
                    break
            if not find:
                print("不存在该学生的信息!!") #如果未找到则提示
            find = False
            print("\n")
        elif way == "学号":
            Stu_num = input("请输入学生学号:")
            for info in stu_list:
                if info['stu_num'] == Stu_num:
                    for inf in info.values():
                        print(inf, end = ' ')
                    find = True
                    break
            if not find:
                print("不存在该学生的信息!!")
            find = False
            print("\n")
        else:
            way = input("请选择查找方式(姓名,学号):")

     

  3. del_info()方法
    def del_info():
        Name = input("请输入欲删除学生姓名:")
        done = False #指示是否完成操作
        global stu_list
        for index in range(len(stu_list)):  #按索引查找
                if stu_list[index]['name'] == Name:
                    del stu_list[index]     #利用列表的del方法删除列表元素
                    with open('学生信息库.pkl', 'wb') as stu_file:
                        p.dump(stu_list, stu_file) #刷新存储内容
                    done = True                    #指示操作成功
                    break
        if not done:
            print("不存在该学生信息!!")            #如果不能操作则提示

     

  4. mod_info()方法
    def mod_info():
        Name = input("请输入欲修改学生姓名:")
        done = False
        global stu_list
        for index in range(len(stu_list)):
                if stu_list[index]['name'] == Name:
                    stu_list[index]['name'] = input("请输入修改后的姓名:")
                    stu_list[index]['age'] = (input("请输入修改后的年龄:") + "岁") 
                    stu_list[index]['sex'] = input("请输入修改后的性别:")
                    stu_list[index]['stu_cls'] = input("请输入修改后的年级班级:")
                    stu_list[index]['stu_num'] = input("请输入修改后的学号:")
                    done = True
                    break
        if not done:
            print("不存在该学生信息!!")

     

  5. sort_info()方法
    def sort_info():
        #按班级排序
        global stu_list
        stu_list.sort(key = lambda x : x["stu_cls"]) #利用列表的sort()方法,用lambda表达式选择按班级升序排序
        print("排序完毕!!")

     

  6. sum_info()方法
    def sum_info():
        global stu_list
        num = len(stu_list) #学生数量即列表元素个数
        print("总共有" + str(num) + "个学生!")

     

  7. show_info()方法
    def show_info():
        print("-------------------学生信息------------------")
        print("    姓名    年龄    性别    学号    年级班级\n")
        global stu_list
        for info in stu_list:
            for key in info.keys():
                print(" " * 4 + str(info[key]), end = '') #按一定的格式打印学生信息
            print("\n") 

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

程序执行效果(程序最后一定按0退出程序,否则会一直循环执行):

--------------------------功能菜单----------------------------


                       1. 录入学生信息                         
                       2. 查找学生信息                         
                       3. 删除学生信息                         
                       4. 修改学生信息                         
                       5. 排序学生信息                         
                       6. 统计学生人数                         
                       7. 显示学生信息                         
                       0. 退出信息管理系统                      


--------------------------------------------------------------
请选择服务:1
请输入姓名:张三
请输入年龄:20
请输入性别:男
张三同学信息录入成功!!
请选择服务:1
请输入姓名:李四
请输入年龄:19
请输入性别:女
李四同学信息录入成功!!
请选择服务:1
请输入姓名:王五
请输入年龄:21
请输入性别:男
王五同学信息录入成功!!
请选择服务:赵六
请选择服务:1
请输入姓名:赵六
请输入年龄:20
请输入性别:女
赵六同学信息录入成功!!
请选择服务:2
请选择查找方式(姓名,学号):姓名
请输入学生姓名:李四
李四 19岁 女 202102 2021级2班 

请选择服务:2
请选择查找方式(姓名,学号):学号
请输入学生学号:202104
赵六 20岁 女 202104 2021级1班 

请选择服务:2
请选择查找方式(姓名,学号):姓名
请输入学生姓名:刘小
不存在该学生的信息!!


请选择服务:6
总共有4个学生!
请选择服务:7
-------------------学生信息------------------
    姓名    年龄    性别    学号    年级班级

    张三    20岁    男    202101    2021级3班

    李四    19岁    女    202102    2021级2班

    王五    21岁    男    202103    2021级1班

    赵六    20岁    女    202104    2021级1班

请选择服务:5
排序完毕!!
请选择服务:7
-------------------学生信息------------------
    姓名    年龄    性别    学号    年级班级

    王五    21岁    男    202103    2021级1班

    赵六    20岁    女    202104    2021级1班

    李四    19岁    女    202102    2021级2班

    张三    20岁    男    202101    2021级3班

请选择服务:3
请输入欲删除学生姓名:赵六
请选择服务:7
-------------------学生信息------------------
    姓名    年龄    性别    学号    年级班级

    王五    21岁    男    202103    2021级1班

    李四    19岁    女    202102    2021级2班

    张三    20岁    男    202101    2021级3班

请选择服务:6
总共有3个学生!
请选择服务:4
请输入欲修改学生姓名:张三
请输入修改后的姓名:张三
请输入修改后的年龄:21
请输入修改后的性别:男
请输入修改后的年级班级:2021级1班
请输入修改后的学号:202101
请选择服务:7
-------------------学生信息------------------
    姓名    年龄    性别    学号    年级班级

    王五    21岁    男    202103    2021级1班

    李四    19岁    女    202102    2021级2班

    张三    21岁    男    202101    2021级1班

请选择服务:5
排序完毕!!
请选择服务:7
-------------------学生信息------------------
    姓名    年龄    性别    学号    年级班级

    王五    21岁    男    202103    2021级1班

    张三    21岁    男    202101    2021级1班

    李四    19岁    女    202102    2021级2班

请选择服务:0
成功退出...
>>> 

 

上述为程序所有代码,若需要文件,则可点击如下链接:

基于python的简易学生信息管理系统

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值