Python — 学生成绩管理
摘要
本次实验要求使用python语言,读取现有的班级花名册,写入SQlite数据库,逐个显示每一个学生的学号姓名,输入其python、英语等课程的成绩,写入SQLite数据库。全部记录结束后,计算大家的总分、名次,并显示整个花名册。
在实验过程中,我首先分析实验要求,决定使用”将Excel文件导入数据库、录入学生各科成绩信息、计算总成绩、显示输出、导出文件”的基本思路,使用cmd和Notepad++环境进行实验。在”录入信息方式”,”输出显示方式”,”整合代码”,“导出为Excel文件”等方面进行代码优化,最终完成学生成绩管理程序的编写,完成实验要求。
关键字:Python SQLite数据库 文件读写 学生信息管理
一、总体思路
读取现有的班级花名册,写入SQlite数据库,逐个显示每一个学生的学号姓名,输入其python、英语等课程的成绩,写入SQLite数据库。全部记录结束后,计算大家的总分、名次,并显示整个花名册。
图1 流程图
二、设计思路
2.1数据录入部分
首先需要创建一个数据库表格,用于储存学生的数据。之后,读出excel表中的数据,将数据插入到数据库表格中。然后手动或自动录入成绩信息。
2.2数据计算部分
读取数据库中各科成绩的信息,求和得出总成绩,将总成绩记录并更新表格。
2.3输出部分
将数据库表格中的数据,以一定的格式进行输出,并生成excel文件保存。
三、具体实现过程
3.1读取excel数据
要读取excel文件,需要使用openpyxl模块,该模块是一个用于读取/写入Excel 2010 xlsx / xlsm / xltx / xltm文件的Python库。可以使用pip命令安装该模块。
图2 安装openpyxl模块
安装完成后,就可以执行命令,读取excel表格中的数据了。
图3 读取文件数据
在上图中,使用load_workbook()命令,打开了名为”DK172register.xlsx”的工作簿,使用.worksheet[0],选择第一张工作表。使用for语句对工作表内的数据循环输出。于是,程序就会将表格中的每行数据,以元组的形式输出。其中包括学号和姓名信息。
3.2创建数据库表格
可以读取数据之后,我们需要创建一个数据库表格,用于储存读到的文件。
图4 创建表格
上图中,使用sqlite3模块,创建了一个名为”class.db”的数据库对象,之后,在数据库中创建了一个名为”DK172”的表格。该表格包含”StudentID、Name、python_score、English_score、Total”这几个表头,分别用来代表”学号、姓名、python成绩、英语成绩、总成绩”。
3.3插入表格数据
创建表格完成之后,我们就可以将excel中的数据导入到数据库中了。在这里,我也遇到了一些问题。
图5 INSERT报错
在上图中,我使用sqlite3模块创建数据库,使用openpyxl模块读取到了表格中的文件。将学号信息储存在id变量中,将姓名信息储存在name变量中。想通过INSERT语句及那个这两个信息插入到数据库表格中。没想到程序发生了错误。
在百度上查找相关资料,发现是INSERT语句的格式不对,经过修改后,再次执行程序:
图6 插入数据
上面的语句中,我将VALUES中的内容替换为了(%d ‘%s’),并用格式控制字符%将id、name变量中的值传入了VALUES中。程序正常执行,显示了导入数据的情况。为了更加直观的看出数据库中的数据,我使用”DB Brower for SQLite”查看数据库内容。
图7 查看可视化界面
可以看出,数据已经成功地导入了数据库中。
3.4更新成绩数据
在将excel表格中的数据导入到数据库之后,就需要插入成绩数据了。一开始我尝试使用INSERT语句进行数据导入,成绩数据导入成功,但是在DB中查看数据库,发现并不是我们想要的结果。
图8 使用INSERT语句插入成绩数据
图9 程序运行结果
由上图可以看到,刚刚使用INSERT语句插入的随机成绩数据,并不是插入到了我们想要的位置,而是增加了新的数据。所以应该使用其他语句执行该命令。
于是,我尝试使用UPDATE命令,更新原有表格中的数据,从而实现添加数据的效果。