前言
在课堂点名器V2的基础上,我们又有了更高的要求。
需求分析
课堂点名器V3的大致需求如下:
下面就说说自己看到这个大致需求后,脑子里的初步想法。
因为思路很难一下理清,我先阐述自己得出的结论:
我们的目的:输入是学生名单的csv文件,输出的是四大名单并且要保存在四个csv文件中。
判别方法:有两次点名,课前点一次(后面叫第一次点名)和课后点名(第二次点名);四个输出的数据判定如下:
- 迟到判定:第一次点名不在就是迟到
- 请假判定:第一次点名输出已请假
- 早退判定:第一次点名在,但是第二次点名不在
- 旷课判定:第一次和第二次点名都不在
然后,第一次点名得出迟到名单和请假名单,第二次点名得出早退名单,然后旷课名单经过迟到名单和早退名单的交运算得出。
或许有人会说,这个结果和需求有些不同。确实有些不同,但是程序在不考虑换显示界面的话(GUI等界面),无法在调试窗口那里实时显示出四种名单(个人认为),肯定是两次点名结束才显示出来最后的名单,那么,我们只要确保最终的名单是符合需求的就行了,判断过程可以怎么方便怎么来。
下面我就放一些自己思考过程中的想法


当然,上面这三张已经是自己第二次思考过程了。下面再给些自己第一次思考的过程(你们可能看不懂)
(下面这张是我一开始打算用tkinter来写GUI的点名器所想的东西)

虽然都是很累赘的东西,但毕竟是自己所想,也给出来看看,自己第一次自己独立搞一个大程序,想法方面还是很稚嫩,万一有个大佬看我这样,来指导我呢 ~ ~
全部代码(讲解就放注释里面了)
# 点名器V3
import csv
import random
# 规定的一些常量
student_late = [] # 存储迟到名单
students_late = [] # 迟到录入名单 这种形式[[姓名, 学号], [], [], ....]
# student_absence = [] # 存储旷课名单(不需要,因为absence这个表是通过late和early交运算得到的)
students_absence = [] # 旷课录入名单 这种形式[[姓名, 学号], [], [], ....]
student_sick = [] # 存储请假名单
students_sick = [] # 请假录入名单 这种形式[[姓名, 学号], [], [], ....]
student_early = [] # 存储早退名单
students_early = [] # 早退录入名单 这种形式[[姓名, 学号], [], [], ....]
###
# 功能:读入csv文件学生名单
# 输入:文件名(string)
# 返回值:学生全部信息(dict),学生名单(list)
###
def file_in(file_name):
students_info = {
}
students_name = []
# open()函数读入文件
with open(file_name, newline='') as info:
reader = csv.reader(info)
for row in reader:
students_info[row[0]] = row[1]
students_name.append(row[0])
return students_info, students_name
###
# 功能:产生随机学生名单
# 输入:学生名单(list)
# 返回值:打乱的学生名单(list)
###
def new_list(students_name):
student_upset_name = random.sample(students_name, len(students_name))
return student_upset_name
###
# 功能:完成点名器的初始化,整合了new_list()和file_in()两个函数
# 输入:学生名单(list)
# 返回值:学生信息(dict)和打乱的学生名单(list)
###
def dmq_init(file_name):
student_info = file_in(file_name)[0]
# print(students_wg_dict)
student_upset_name = new_list(file_in(file_name)[1])
# print(students_wg_list)

最低0.47元/天 解锁文章
808

被折叠的 条评论
为什么被折叠?



