学生信息系统的设计

1.需求分析

使用Python语言,在Python3.9上设计一个简易的学生成绩管理系统。能够实现学生成绩信息的保存和读取(使用数据库对数据进行存取)。实现所有相关姓名、学号、各科成绩的输入、输出、查找、删除、修改等功能,并通过xlrd和xlwt模块读取和写入Excel文件。

2.系统基本简介

在数据结构上,我采用以下数据结构,即:

score1 = { "姓名":"XXX",

         "学号":"XXX",

         "作业" : [X,X, X,X],

         "测验" : [X,X],

         "实验" : [X,X] ,

         "分数" :X

       }

没有增加新的字段比如排名之类的。这样做的主要是考虑到排名、平均成绩等均可以由上述结构中的信息计算出来,而且也可以避免因为一个某个成绩变动,导致一系列的数据需要重新计算。

在存储在结构上,我采用了Python中常用的列表作为此程序的“数据库”,因为列表操作起来还是非常方便的。在列表中的所有数据实体都是按照成绩高低进行排序的。

文件保存和读取时,采取CSV格式的数据文件。文件头遵循:['序号','姓名','学号','分数','排名','作业1','作业2','作业3','作业4', '测验1', '测验2', '实验1', '实验2']这种格式。

运行环境:采用的是Windows 10 x64位操作系统+anaconda(Python3.9)+Spyder,默认情况下即可运行,不需要安装其他库。

3.程序说明

3.0 主界面

整个程序的主界面如下。

3.1添加学生信息

在添加学生信息中,在实现了手动添加信息的基础上,我又增加了从文件中导入信息的功能。不过在添加信息这块,我规定:在添加学生信息时,如果系统中已经存在该学生的学号,则不能重复添加。这两种方式都遵循该原则,以保证学号的唯一性。

在添加学生信息时,为了保证有序性,所以我采取了插入排序的方式进行添加,代码如下:

# 根据优先级[分数、作业平均、测验平均、实验平均]比较s1是否优于s2

def cmp_student(s1, s2):

    if s1["分数"] != s2["分数"]:

        return s1["分数"] > s2["分数"]

    else:

        if np.mean(s1["作业"]) != np.mean(s2["作业"]):

            return np.mean(s1["作业"]) > np.mean(s2["作业"])

        else:

            if np.mean(s1["测验"]) != np.mean(s2["测验"]):

                return np.mean(s1["测验"]) > np.mean(s2["测验"])

            else:

                return np.mean(s1["实验"]) > np.mean(s2["实验"])

 

# 根据分数大小,将学生信息插入到列表中,插入排序

def add_to_list(stu, stu_list):

    if len(stu_list):

        if cmp_student(stu, stu_list[0]): # 比第一名还优秀

            stu_list.insert(0,stu)

        elif not cmp_student(stu, stu_list[-1]): # 比最后一名还差

            stu_list.append(stu)

        else:

            for i in range(len(stu_list)-1):

                if (not cmp_student(stu, stu_list[i])) and (cmp_student(stu, stu_list[i+1])):

                    stu_list.insert(i+1, stu)

                    return

    else:

        stu_list.append(stu)

手动添加时,逐个输入学生的信息,最后按照分数插入到相应的位置,注意的是,需要保证在输入成绩时确保获取的是数字,否则提示错误需要用户重新输入,代码如下:

# 输入一个数字

def input_number(information):

    while True:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值