大佬教程收集整理的这篇文章主要介绍了Python课设:作业统计管理系统,源码+实验报告+论文需要自取,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
1、问题 根据需求c;该系统所应包含的信息有以下一些: 学生提交作业情况sLSX: 学号c;姓名c;第一次作业c;第二次作业c;第三次作业 共有3次作业。 根据需求c;该系统所应实现的功能有以下一些:
1)找到作业所在位置c;遍历三次作业 2)根据学号或者姓名得出作业提交情况 3)将三次未交作业学生的学号分别输出c;并将每个学生作业的完成与否输出 4)将作业完成情况导入Excel表格中 2、系统 采用Pycharm实现c;开发环境为python3.6c;可以运行在操作系统windows98及以上皆可。 3、运行要求 1.能准确导出学生作业的提交与否 2.能准确将作业提交情况导入Excel表格中
1、系统流程设计 根据系统要求c;设计如下的系统流程: `
2、系统模块设计 根据系统的功能设计如下模块:
1.整理学生名单和作业 (1)统计学生名单c;如下图:
(2)将三次作业分别存放在不同的文件夹中:
2.运行显示和导入Excel并导出饼图直观表示作业提交情况 根据作业统计的需要c;需要导出每次作业的提交情况c;并统计所有同学三次作业的完成与否。 每次作业运行显示如图所示c;并统计其提交率:
总计三次作业的总和:
选择是否导出Excel:
导出Excel:
生成三次作业提交情况的饼图c;直观表示结果:
3.模块实现 (1)获取指定文件夹下的文件名 首先导入os模块 Python获取指定文件夹下的文件名可以采用os.walk()和os.listdir()两种方法。 os.walk(): 模块os中的walk()函数可以遍历文件夹下所有的文件。该函数可以得到一个三元tupple(dirpath, dirnames, filenames)。其中参数含义: dirpath:Stringc;代表文件夹所在路径; dirnames:listc;包含了当前dirpath路径下所有的子文件夹名(不包含路径) filenames:listc;包含了当前dirpath路径下所有的包括子文件下的文件名(不包含路径)。 os.listdir(): os.listdir()函数得到的是仅当前路径下的文件名c;不包括子文件夹中的文件c;所有需要使用递归的方法得到全部文件名。 代码如下:
def listdir(path, list1):
# 获取指定文件夹下的文件名c;并将文件名储存在list1中c;形成一个列表
for file in os.listdir(path):
# 判断文件名是否为doc或者docx
if os.path.splitext(file)[1] == '.doc' or os.path.splitext(file)[1] == '.docx':
# 特定类型的文件需要用os.path.splitext()函数将路径拆分c;拆分为文件名和拓展名c;[0]表示文件名c;[1]表示拓展名
list1.append(file) # 如果是两者中的一种c;则将其加在列表中
(2)Python操作Excel文档 其次导入xlrd和xlwt两个模块 使用Xlrd模块读取Excel: data = xlrd.open_workbook(‘test.xLSX’) # 打开当前目录下名为test的文档c;即学生信息 xlwt模块将信息写入Excel : workbook = xlwt.Workbook(encoding=‘utf-8’) 创建一个workbook 设置编码。Workbook()是构造函数c;返回一个工作薄的对象。 sheet_test = workbook.add_sheet(‘sheet_test’, cell_overwrite_ok=TruE) 用cell_overwrite_ok=True实现对单元格的重复写 sheet_test.write(0, 0, ‘学号’) # 将学号写入Excel中 sheet_test.write(0, 1, ‘姓名’) # 将姓名写入Excel中 输出学生作业统计的饼图: 然后导入pyecharts模块:
#将三次作业提交情况做成饼图:
examples = ['已提交', '未提交']
all_homework[i], num = single(list1)
引用single函数c;将三次作业完成情况导出来
pie = Pie()
pie.add("", [list(z) for z in zip(examples, num)])
pie.set_colors(["#38E737","#FF3366"])
pie.set_global_opts(title_opts=opts.titleOpts(title="Pie-设置颜色"))
pie.render("{}_pie.html".format(i))
(3)将所有模块合并起来 定义两个函数: def single(list1):作为一次作业的函数
def single(list1):
data = xlrd.open_workbook('test.xLSX') # 打开当前目录下名为test的文档c;即学生信息
# 获得工作表
table = data.sheeT_By_name('Sheet1') # 通过名称获取c;即读取sheet1表单c;
# 也可以table = data.sheeT_By_index(0)通过索引获取c;例如打开第一个sheet表格
# 还可以table = data.sheets()[0]#通过索引顺序获取
nrows = table.nrows # 获取该sheet1表格中的有效行数
student = {} # 将student{}作为一个字典存取数据
for i1 in range(1, nrows): # 从第二行开始有所需要的数据
xuehao = table.cell_value(i1, 0) # 获取单元格中的学号
name = table.cell(i1, 1).value # 获取单元格中的姓名
# 获取单元格内容的三种方式:
# table.cell(i,j).value
# table.cell_value(i,j)
# table.row(i)[j].value
xuehao = int(xuehao)
# 将浮点数转化为整数
student[xuehao] = 0 # 默认字典中学号对应0c;即未交作业
for zuoye in list1: # 遍历每一份作业
if str(xuehao) in zuoye or name in zuoye:
# 如果出现学号或者姓名c;则认为交了作业
student[xuehao] = 1 # 记为1c;认为交了作业
print("未交学生的学号:")
list2 = [] # 新建列表计算未交作业个数
for key, values in student.items(): # 用items() 函数遍历(键, 值) 元组数组c;key表示学号c;value表示是否交作业
if values == 0:
list2.append(key)
print(key, end="n") # 输出未交学生的学号
a = len(list2)
b = (30 - a) / 30 * 100
print('提交人数:', 30 - a)
print('未提交人数:', a)
print('提交率为:', b, '%') # 计算提交率
print('*' * 40)
list_all = [len(list1), len(list2)]
return student, list_all
def multiple(all_homework):作为多次作业的函数
def @H_448_117@multiple(all_homework):
date = xlrd.open_workbook('test.xLSX') # 打开当前学生名单
table = date.sheeT_By_name('Sheet1') # 通过名称获取c;即读取sheet1表单s
# 也可以table = data.sheeT_By_index(0)通过索引获取c;例如打开第一个sheet表格
# 还可以table = data.sheets()[0]#通过索引顺序获取
nrows = table.nrows # # 获取该sheet1表格中的有效行数
workbook = xlwt.Workbook(encoding='utf-8') # 创建一个workbook 设置编码。Workbook()是构造函数c;返回一个工作薄的对象。
sheet_test = workbook.add_sheet('sheet_test', cell_overwrite_ok=True) # 用cell_overwrite_ok=True实现对单元格的重复写
sheet_test.write(0, 0, '学号') # 将学号写入Excel中
sheet_test.write(0, 1, '姓名') # 将姓名写入Excel中
n = 2 # 从第三列开始储存每次作业的情况
for i in homework: # 遍历每次作业
sheet_test.write(0, n, i)
student = all_homework[i]
for i1 in range(1, nrows):
xuehao = table.cell(i1, 0).value # 获取学号单元格的值
stuname = table.cell(i1, 1).value # 获取姓名单元格的值
sheet_test.write(i1, 0, xuehao)
sheet_test.write(i1, 1, stuname)
sheet_test.write(i1, n, student[xuehao]) # 将完成与否填入表格中
n = n + 1
workbook.save('C://Users/xuyip/Desktop/作业统计.xLSX')
将sheet保存到test2.xLSX文件中 通过如下代码实现从一次作业推广到多次作业: all_homework[i], num = single(list1)
引用single函数c;将三次作业完成情况导出来 (4)输出结果并导出Excel 通过简单的输入输出c;实现是否导出Excel
print(all_homework) # 打印出最后的作业结果
a = int(input('是否生成excel文件?1是2否'))
if a == 1:
multiple(all_homework) # 将统计的多次作业c;储存在test.xls文件
print('文件已生成到桌面c;谢谢使用!')
else:
print('谢谢使用!')
print('饼图已经在原文件中生成c;请注意查收')
本学期实训课与Python语言课相结合c;以上机实验操作为主c;加深了我对Python语言的理解和运用能力c;帮助我解决了许多Python语言学习时遇到的问题。通过在学习时遇到的问题查找资料使我接触和了解了更多课本以外的知识。特别是最后的大实训c;让我对所学的知识进行了实战应用c;加深了对知识的理解c;让我认识到实践的重要性c;同时还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了c;但真正到用的时候才发现是两回事c;所以我认为只有到真正会用的时候才是真的学会了。 在完成本次课设后c;我会更加热爱Python语言的学习c;广泛的把其应用到个个学习的地方c;我会继续努力的!
该程序的亮点是运用两个函数遍历了多次作业c;并结合Excel将作业提交情况导入其中。 优点: 1.创新性的将饼图导入其中c;使得到的数据更加的直观亮眼c;思路清新
1.代码条理性强c;每条代码注释详细c;来源有根有据 2.将输出率进行了输出c;使得到的结果更简单易懂c;更具比较性
3.用户自主选择是否导出Excelc;减少不必要的麻烦c;使程序更加人性化
4.巧妙地解决了xlrd模块中默认输出浮点数的问题c;使输出数据更既美观 xuehao = int(xuehao):将浮点数转化为整数**
不足之处: 没有更加具体的研究学生所交作业中word的完整性和是否存在抄袭行为c;还需继续研究和创新!
以上是大佬教程为你收集整理的Python课设:作业统计管理系统,源码+实验报告+论文需要自取全部内容,希望文章能够帮你解决Python课设:作业统计管理系统,源码+实验报告+论文需要自取所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。