Esempio n. 1
0
    def insert_leave_record(key):  # 向历史记录添加请假 学生请假休息包括 学号 提交类型 请假证明 提交时间

        seq_info = DataManage(DataManage.target_info, args=('../InData/seq.csv',)).run()

        count = 0
        for seq in seq_info:
            if seq['TeacherID'] == key['TeacherID']:
                if seq['ClassID'] == seq['ClassID']:
                    count = seq['SeqID']

        if not count:
            print '满足您输入信息的考勤细节表不存在!'
            return False

        filename = '../InData/'+key['TeacherID']+'_'+key['ClassID']+'_'+count+'_Detail.csv'

        if DataManage(DataManage.target_info, args=(filename, {'StuID': key['StuID'], 'checkinType': 'leave'})).run():
            print '您在该次考勤中已经申请过请假无法再次申请!'
            return False

        data = dict()
        data['StuID'] = key['StuID']
        data['checkTime'] = str(datetime.datetime.now())[:-7]
        data['ProofPath'] = key['ProofPath']
        data['checkinType'] = 'leave'
        data['IsSucc'] = 'False'
        data['checkinResult'] = 'Submitted'
        print '提交假条成功!'
        return DataManage(DataManage.update, args=(filename, 'a', [data])).run()
Esempio n. 2
0
    def man_check_in(self):  # 手动考勤

        course_info = DataManage(DataManage.target_info,
                                 args=('../InData/courseInfo.csv', {
                                     'CourseID': self.key['CourseID'],
                                     'TeacherID': self.key['TeacherID']
                                 })).run()

        if not course_info:
            print '当前没有与您相关的课程!'
            return False

        class_list = []

        for course in course_info:
            if course['ClassName'] not in class_list:
                class_list.append(course['ClassName'])

        stu_list = []
        for _class in class_list:
            student = DataManage(DataManage.target_info,
                                 args=('../InData/studentInfo.csv', {
                                     'ClassID': _class
                                 })).run()
            for stu in student:
                stu_list.append(stu)

        self.write_seq()
        print '请按照以下选项输入状态 非法输入默认为缺勤!'
        print ' 1 正常 2 迟到 3 早退 4 缺勤 5 请假已批准'
        stu_list = self.init_data(stu_list, 'man')
        print '学生考勤状态手动设置完成!'
        return DataManage(DataManage.update,
                          args=(self.filename, 'w', stu_list)).run()
Esempio n. 3
0
    def get_count_rate(self, key, num):  # 给定教师ID和课程返回平均出勤率 若给定num显示哪一次的

        try:
            num = int(num)
        except TypeError and ValueError:
            print '数据无效,请您输入正整数!'
            return False

        filename = '../InData/' + key['TeacherID'] + '_' + key[
            'CourseID'] + '_Sum.csv'

        class_info = DataManage(DataManage.target_info,
                                args=(filename, )).run()

        if not class_info:
            print '课程考勤信息不存在请检查您的输入!'
            return False

        seq_info = DataManage(DataManage.target_info,
                              args=('../InData/seq.csv', )).run()

        count = 0
        for seq in seq_info:
            if seq['TeacherID'] == key["TeacherID"]:
                count = count + 1
                if count == num:
                    key['seqnum'] = seq['SeqID']
                    grade = self.get_att_rate(key)
                    if grade == -1.0:
                        return False
                    print '%-10s课第%2d次考勤的出勤率为%-3.2f %%' \
                          % (key['teacher_info'], count, grade)
                    return grade
        print '该次课程不存在第%d次考勤,请检查您的输入!' % (num, )
        return False
Esempio n. 4
0
 def write_seq(self):
     if not DataManage(DataManage.target_key,
                       args=('../InData/seq.csv', )).run():
         print 'The system creates the seq.csv file automatically!'
     return DataManage(DataManage.update,
                       args=('../InData/seq.csv', 'a',
                             [self.get_seq_info()])).run()
Esempio n. 5
0
    def view_time(self, key):  # 输入教师教工号和班级号的字典 查看最近历史的一次考勤

        seq_info = DataManage(DataManage.target_info,
                              args=('../InData/seq.csv', )).run()

        line = {}
        for seq in seq_info:
            if seq['TeacherID'] == key['teacher_info']['TeacherID']:
                line = seq

        if not line:
            print '您还没有完整的进行过一次考勤!'
            return False

        filename = '../InData/' + line['TeacherID'] + '_' + line[
            'CourseID'] + '_Sum.csv'
        keys = DataManage(DataManage.target_key, args=(filename, )).run()
        if keys and 'checkin' + line['SeqID'] in keys:
            key = 'checkin' + line['SeqID']
        else:
            filename = '../InData/' + line['TeacherID'] + '_' + line[
                'CourseID'] + '_' + line['SeqID'] + '_Detail.csv'
            key = 'checkinResult'
        stu_info = DataManage(DataManage.target_info, args=(filename, )).run()
        return self.dis_play(stu_info, key)
Esempio n. 6
0
    def create_sum(self, key, info=''):

        filename = '../InData/' + key['TeacherID'] + '_' + key[
            'ClassID'] + '_' + key['SeqNum'] + '_Detail.csv'

        if not DataManage(DataManage.target_key, args=(filename, )).run():
            print '该次考勤不存在无法计算考勤的结果'
            return False

        if not self.init(key):
            print '初始化考勤汇总表失败请检查您的键值是否正确!'
            return False

        self.detail_filename = filename
        self.historical_statistics()
        stu_list = DataManage(DataManage.target_info,
                              args=(self.detail_filename, )).run()
        stu_list = self.statistics_calculation(stu_list)
        old_data = DataManage(DataManage.target_info,
                              args=(self.sum_filename, )).run()
        DataManage(DataManage.update,
                   args=(self.sum_filename, 'dl', old_data)).run()

        for line in old_data:
            line['checkin' + key['SeqNum']] = 'normal'
            for (k, item) in stu_list['checkin'].items():
                if line['StuID'] == k:
                    line['checkin' + key['SeqNum']] = item['Type']
        if not info:
            print '您为班级%s创建第%s次考勤汇总表成功!' % (key['ClassID'], key['SeqNum'])
        return DataManage(DataManage.update,
                          args=(self.sum_filename, 'w', old_data)).run()
Esempio n. 7
0
    def view(filename, stu_id, teacher_id, num, counter=None):

        stu_info = DataManage(DataManage.target_info, args=(filename,)).run()
        if not stu_info:
            print '该教师尚未统计此次的考勤汇总信息,所以无法查看结果'
            return False

        if num == 1:
            stu_info = AuxiliaryFunction().statistics_calculation(stu_info)

        name = DataManage(DataManage.target_info, args=('../InData/teacherInfo.csv',
                                                        {'TeacherID': teacher_id})).run()[0]['TeacherName']

        class_name = DataManage(DataManage.target_info, args=('../InData/courseInfo.csv',
                                                              {'TeacherID': teacher_id})).run()[0]['CourseName']

        if num == 1:
            for (k, item) in stu_info['checkin'].items():
                if k == stu_id:
                    print '%s老师在%s课上发起考勤,您在此次考勤状态为: %s' % (name, class_name, item['Type'])
                    return True
            print '%s老师在%s课上发起考勤,您在此次考勤状态为: normal' % (name, class_name)

        else:
            length = len(stu_info[0].keys())
            for info in stu_info:
                if info['StuID'] == stu_id:
                    for index in range(1, length):
                        print '%s老师在%s课上发起第%d次考勤,您在此次考勤状态为: %s' % (name, class_name, index,
                                                                   info['checkin'+str(index)])
                        counter[info['checkin'+str(index)]] = counter[info['checkin'+str(index)]]+1
Esempio n. 8
0
    def real_view(self, key):

        seq_info = DataManage(DataManage.target_info, args=('../InData/seq.csv',)).run()
        class_info = DataManage(DataManage.target_info, args=('../InData/courseInfo.csv',
                                                              {'ClassName': key['ClassID']})).run()

        if not class_info:
            print '当前没有与您相关的课程!'
            return False

        data = {}
        for _class in class_info:
            if not data. has_key(_class['CourseID']):
                data[_class['CourseID']] = _class['TeacherID']

        keys = data.keys()
        line = dict()
        for seq in seq_info:
            if seq['CourseID'] in keys:
                if seq['TeacherID'] == data[seq['CourseID']]:
                   line = seq

        if not line:
            print '您最近还没有进行过一次完整的考勤!'
            return False

        filename = '../InData/' + line['TeacherID'] + '_' + line['CourseID'] + '_Sum.csv'
        keys = DataManage(DataManage.target_key, args=(filename,)).run()
        if keys and 'checkin'+line['SeqID'] in keys:
            pass
        else:
            filename = '../InData/'+line['TeacherID']+'_'+line['CourseID']+'_'+line['SeqID']+'_Detail.csv'

        self.view(filename, key['StuID'], line['TeacherID'] , line['SeqID'], None)
        return True
Esempio n. 9
0
    def maintain_info(key):  # 手动维护考勤信息
        seq_num = raw_input('请输入您需要修改哪一次的记录!')
        filename = '../InData/' + key['TeacherID'] + '_' + key[
            'CourseID'] + '_Sum.csv'
        stu_info_list = DataManage(DataManage.target_info,
                                   args=(filename, )).run()

        if not stu_info_list or 'checkin' + seq_num not in stu_info_list[
                0].keys():
            print '该次考勤汇总表不存在请检查您的输入!'
            return False

        print '该次考勤所有学生的考勤状态如下:'
        for stu in stu_info_list:
            print stu['StuID'] + ' : ' + stu['checkin' + seq_num]

        stu_id = raw_input("请输入你要修改学生的学号!")
        count = 0
        stu_info = {}
        for stu in stu_info_list:
            if stu['StuID'] == stu_id:
                stu_info = stu
                count = 1
                break

        if not count:
            print '该学生不存在请检查您的输入!'
            return False

        print '该学生的该次的考勤状态 : %s' % (stu_info['checkin' + seq_num])
        print '请按照以下选项输入状态 非法输入默认为缺勤!'
        print ' 1 正常 2 迟到 3 早退 4 缺勤 5 请假已批准'
        _type = raw_input('请输入你希望修改的值!')
        if _type not in ['1', '2', '3', '4', '5']:
            print '您输入了非法选项默认结果为缺勤!'
            stu_info['checkin' + seq_num] = 'Absence'
        else:
            stu_info['checkin' + seq_num] = {
                '1': 'normal',
                '2': 'Late',
                '3': 'leaveEarlier',
                '4': 'Absence',
                '5': 'approve'
            }[_type]
            print '修改成功!'

        return DataManage(DataManage.update,
                          args=(filename, 'w', [stu_info], ['StuID'])).run()
Esempio n. 10
0
    def history(self, key):
        seq_info = DataManage(DataManage.target_info, args=('../InData/seq.csv',)).run()
        data = []
        for seq in seq_info:
            if seq['ClassID'] == key['ClassID']:
                if seq['TeacherID'] not in data:
                    data.append(seq['TeacherID'])

        if not data:
            print '您最近还没有进行过一次完整的考勤!'
            return False

        file_list = list()
        for line in data:
            filename = '../InData/' + line + '_' + key['ClassID'] + '_Sum.csv'
            file_list.append(filename)

        if not file_list:
            print '您的任何一位教师都尚未统计考勤汇总信息,所以无法查看结果'
            return False

        for index in range(len(data)):
            num = dict()
            num['normal'] = 0
            num['Absence'] = 0
            num['approve'] = 0
            num['leaveEarlier'] = 0
            print '第%d门课考勤信息如下:' % (index + 1)
            if self.view(file_list[index], key['StuID'], data[index], 0, num):
                print '您正常考勤%d次,缺勤%d次,请假%d次,早退%d次! 出勤率%.2f %%' %(num['normal'], num['Absence'],
                            num['approve'], num['leaveEarlier'],
                            1.0 * num['normal'] / (num['normal'] + num['Absence'] + num['approve']+num['leaveEarlier']))

        return True
Esempio n. 11
0
    def random_stu_list(self):

        now = datetime.datetime.now()
        if (now - self.start).seconds < self.time:
            print '当前自动考勤的仍然存在缓冲时间无法开启随机窗口,您可修改缓冲时间改变此设置!'
            return False

        stu_list = []
        student_list = DataManage(DataManage.target_info,
                                  args=('../InData/studentInfo.csv', {
                                      'ClassID': self.key['ClassID']
                                  })).run()
        while True:
            num = raw_input('请输入需要抽点的百分比!')
            try:
                num = float(num)
            except TypeError and ValueError:
                print '您的输入不符合规则,请重新输入!'
                continue

            if num <= 0 or num > 100 or int(
                    len(student_list) * num / 100) == 0:
                print '抽点的数量大于或小于当前学生的数量请重新输入!'
                time.sleep(1)
            else:
                num = int(len(student_list) * num / 100)
                print '抽点完成您此时共抽点了%-3d名学生!' % (num, )
                break

        while len(stu_list) != num:
            index = random.randint(0, len(student_list) - 1)
            if student_list[index] not in stu_list:
                stu_list.append(student_list[index])
        return stu_list
Esempio n. 12
0
    def course_operation(out_file, path=''):
        course_data = DataManage(DataManage.target_info,
                                 args=(out_file, )).run()
        if not course_data:
            return None

        new_data = []
        try:
            for line in course_data:
                major = line['ClassNums']
                info = major.split(',')
                for inf in info:
                    class_info = re.findall(r'\d+', inf)
                    class_interval = len(class_info)
                    if class_interval == 0:
                        continue
                    else:
                        begin = int(class_info[0])
                        end = int(class_info[-1])

                    major_info = re.findall('[^-0-9]+', inf)  # 匹配非数字和 -
                    class_name = major_info[0]

                    for i in range(begin, end + 1):
                        dict_line = dict()
                        dict_line['CourseID'] = line['CourseID']
                        dict_line['CourseName'] = line['CourseName']
                        dict_line['TeacherID'] = line['TeacherID']
                        dict_line['ClassName'] = class_name + str(i)
                        new_data.append(dict_line)
        except KeyError:
            print '存在非法键值无法导入!'
            return False
        return new_data
Esempio n. 13
0
    def get_all_rate(self, key):
        filename = '../InData/' + key['TeacherID'] + '_' + key[
            'CourseID'] + '_Sum.csv'
        class_info = DataManage(DataManage.target_info,
                                args=(filename, )).run()
        if not class_info:
            print '课程考勤统计信息不存在请检查您的输入!'
            return False

        count = len(class_info[0].keys())

        if count < 2:
            print '该课程没有进行过统计无法显示结果'
            return False

        result = 0.0
        for index in range(1, count):
            grade = self.get_count_rate(key, index)
            if grade == -1.0:
                count -= 1
                continue
            if type(grade) == float:
                result = result + grade
            else:
                return False
        print '%-10s课平均考勤出勤率为:%-3.2f %%' % (key['course_info'][
            key['CourseID']]['CourseName'], 1.0 * result / count)
        return True
Esempio n. 14
0
    def start_auto(self):
        if self.status:
            print ' 当前已经存在自动考勤窗口无法再次开启!'
            return False

        if not self.get_time():
            return False

        stu_list = DataManage(DataManage.target_info,
                              args=('../InData/studentInfo.csv', {
                                  'ClassID': self.key['ClassID']
                              })).run()
        self.write_seq()
        stu_list = self.init_data(stu_list, 'auto')
        self.status = True
        return DataManage(DataManage.update,
                          args=(self.filename, 'w', stu_list)).run()
Esempio n. 15
0
 def historical_statistics(self):  # 这里的键值包括TeacherID和老师要统计的班级和次序号
     stu_info = DataManage(DataManage.target_info,
                           args=(self.detail_filename, )).run()
     all_stu_info = self.statistics_calculation(stu_info)
     for (key, item) in all_stu_info['checkin'].items():
         if item['Type'] == 'Submitted':
             self.take_leave_absence({'StuID': key})
     return True
Esempio n. 16
0
    def man_check_in(self):  # 手动考勤

        stu_info = DataManage(DataManage.target_info,
                              args=('../InData/studentInfo.csv', {
                                  'ClassID': self.key['ClassID']
                              })).run()

        if not stu_info:
            print '当前班级不存在请重新输入!'
            return False

        self.write_seq()
        print '请按照以下选项输入状态 非法输入默认为缺勤!'
        print ' 1 正常 2 迟到 3 早退 4 缺勤 5 请假已批准'
        stu_list = self.init_data(stu_info, 'man')
        return DataManage(DataManage.update,
                          args=(self.filename, 'w', stu_list)).run()
Esempio n. 17
0
 def import_file(source_file,
                 out_file,
                 _format=None,
                 primary_key=None,
                 operation=None,
                 path=''):
     if operation:
         data = operation(out_file, path)
         if not data:
             print '文件不存在或与标准形式不符,请检查您的输入!'
             return False
     else:
         data = DataManage(DataManage.target_info, args=(out_file, )).run()
     error = DataManage(DataManage.format_check, args=(data, _format)).run()
     if DataManage(DataManage.get_result, args=(error, )).run():
         for (key, item) in error.items():
             print key, item
         Log().add(error)
         return False
     for key in primary_key:
         DataManage(DataManage.update,
                    args=(source_file, 'w', data, key)).run()
         data = DataManage(DataManage.target_info,
                           args=(source_file, )).run()
     return True
Esempio n. 18
0
    def init(self, key):
        self.sum_filename = '../InData/' + key['TeacherID'] + '_' + key[
            'ClassID'] + '_' + 'Sum.csv'
        if not DataManage(DataManage.target_key,
                          args=(self.sum_filename, )).run():
            result = []
            stu_list = DataManage(DataManage.target_info,
                                  args=('../InData/studentInfo.csv', {
                                      'ClassID': key['ClassID']
                                  })).run()
            for k in stu_list:
                sum_dict = dict()
                sum_dict['StuID'] = k['StuID']
                result.append(sum_dict)
            return DataManage(DataManage.update,
                              args=(self.sum_filename, 'w', sum)).run()

        return True
Esempio n. 19
0
 def get_seq_num(self):
     seq_info = DataManage(DataManage.target_info,
                           args=('../InData/seq.csv', {
                               'TeacherID': self.key['TeacherID'],
                               'ClassID': self.key['ClassID']
                           })).run()
     if not seq_info:
         return '1'
     return str(int(seq_info[-1]['SeqID']) + 1)
Esempio n. 20
0
 def start_random(self):
     if not self.status:
         print ' 当前没有开启自动考勤无法进行抽点考勤!'
         return False
     self.random_info = self.random_stu_list()
     if not self.random_info:
         return False
     stu_list = self.init_data(self.random_info, 'random')
     return DataManage(DataManage.update,
                       args=(self.filename, 'a', stu_list)).run()
Esempio n. 21
0
    def auto_cal(self, stu_info):
        if DataManage(DataManage.target_info,
                      args=(self.filename, {
                          'StuID': stu_info['StuID'],
                          'checkinType': 'leave'
                      })).run():
            print '您在该次考勤中已经申请过请假无法进行考勤!'
            return False

        if self.counter['auto'][stu_info['StuID']] == 0:
            print '您当前进行自动考勤次数已经用完无法考勤!'
            return False

        self.counter['auto'][stu_info['StuID']] -= 1
        data = DataManage(DataManage.target_info,
                          args=(self.filename, {
                              'checkinType': 'auto',
                              'StuID': stu_info['StuID']
                          })).run()[0]

        if data['IsSucc'] == 'True':
            print '您已经完成自动考勤无法再次考勤!'
            return False

        data['checkTime'] = datetime.datetime.now()
        data['ProofPath'] = stu_info['ProofPath']
        num = random.randint(0, 1)
        if num:
            data['IsSucc'] = 'True'
            seconds = (data['checkTime'] - self.start).seconds
            if seconds <= self.time:
                print '考勤成功!'
                data['checkinResult'] = 'normal'
            else:
                print '考勤有效时间已过您当前为迟到!'
                data['checkinResult'] = 'Late'
        else:
            print '身份验证失败! 您还有 %d 次机会 ' % (
                self.counter['auto'][stu_info['StuID']])
        data['checkTime'] = str(datetime.datetime.now())[:-7]
        return DataManage(DataManage.update,
                          args=(self.filename, 'w', [data],
                                ['StuID', 'checkinType'])).run()
Esempio n. 22
0
    def maintain_stu(self, key):  # 手动维护学生信息
        class_info = DataManage(DataManage.target_info,
                                args=('../InData/courseInfo.csv', {
                                    'TeacherID': key['TeacherID']
                                })).run()
        class_list = set()
        for line in class_info:
            class_list.add(line['ClassName'])
        class_list = list(class_list)
        stu_info = DataManage(DataManage.target_info,
                              args=('../InData/studentInfo.csv', )).run()

        for stu in stu_info:
            if stu['ClassID'] not in class_list:
                stu_info.remove(stu)

        stu_id = raw_input('请输入学生的学号!')
        info = {}
        for stu in stu_info:
            if stu['StuID'] == stu_id:
                info = stu
                break
        if not info:
            print '该学生不在你的修改范围之内无法修改!'
            return False

        info = self.get_result(class_list, info)

        error = DataManage(DataManage.format_check,
                           args=([info], {
                               "StuID": '^[\d]{12}$',
                               "StuName": '^[\x80-\xff]{6,18}$',
                               "WeChatID": '^[a-zA-Z0-9_]+$',
                               "ClassID": '[\x80-\xff]+\d{4}$'
                           })).run()

        if DataManage(DataManage.get_result, args=(error, )).run():
            print error
            print '您输入的格式错误无法修改学生信息!'
            return False

        DataManage(DataManage.update,
                   args=('../InData/studentInfo.csv', 'dl', [info])).run()
        print '修改学生信息成功!'
        return DataManage(DataManage.update,
                          args=('../InData/studentInfo.csv', 'w', [info
                                                                   ])).run()
Esempio n. 23
0
    def view_time(self, key):  # 输入教师教工号和班级号的字典 查看最近历史的一次考勤

        seq_info = DataManage(DataManage.target_info,
                              args=('../InData/seq.csv', )).run()

        line = {}
        for seq in seq_info:
            if seq['TeacherID'] == key['TeacherID']:
                line['TeacherID'] = seq['TeacherID']
                line['ClassID'] = seq['ClassID']
                line['seqnum'] = seq['SeqID']

        if not line:
            print '您还没有完整的进行过一次考勤!'
            return False

        filename = '../InData/' + line['TeacherID'] + '_' + line[
            'ClassID'] + '_' + line['seqnum'] + '_Detail.csv'
        stu_info = DataManage(DataManage.target_info, args=(filename, )).run()
        return self.dis_play(stu_info)
Esempio n. 24
0
    def read_rule(key):
        rule = DataManage(DataManage.target_info,
                          args=('../InData/set.csv', {
                              'TeacherID': key['TeacherID']
                          })).run()

        if not rule:
            return {'TeacherID': key['TeacherID'], 'bufferTime': '3'}

        else:
            return rule[0]
Esempio n. 25
0
    def teacher_test(key):  # 输入微信号和班级 进行验证
        teacher_info = DataManage(DataManage.target_info,
                                  args=('../InData/teacherInfo.csv', {
                                      'WeChatID': key
                                  })).run()

        if not teacher_info:
            print '教师微信不存在请检查您的输入信息!'
            return False

        return teacher_info[0]
Esempio n. 26
0
    def random_cal(self, stu_info):

        if DataManage(DataManage.target_info,
                      args=(self.filename, {
                          'StuID': stu_info['StuID'],
                          'checkinType': 'leave'
                      })).run():
            print '您在该次考勤中已经申请过请假无法进行考勤!'
            return False

        if self.counter['random'][stu_info['StuID']] == 0:
            print '您当前进行随机考勤次数已经用完无法考勤!'
            return False

        data = DataManage(DataManage.target_info,
                          args=(self.filename, {
                              'checkinType': 'random',
                              'StuID': stu_info['StuID']
                          })).run()

        self.counter['random'][stu_info['StuID']] -= 1

        if data[-1]['IsSucc'] == 'True':
            print '您已经完成随机考勤无法再次考勤'
            return False

        DataManage(DataManage.update,
                   args=(self.filename, 'dl', data, ['StuID',
                                                     'checkinType'])).run()
        data[-1]['ProofPath'] = stu_info['ProofPath']
        num = random.randint(0, 1)
        if num:
            data[-1]['IsSucc'] = 'True'
            print '随机考勤成功!'
            data[-1]['checkinResult'] = 'normal'
        else:
            print '身份验证失败! 您还有 %d 次机会 ' % (
                self.counter['random'][stu_info['StuID']])
        data[-1]['checkTime'] = str(datetime.datetime.now())[:-7]
        return DataManage(DataManage.update,
                          args=(self.filename, 'a', data)).run()
Esempio n. 27
0
 def stu_operation(out_file, path):
     data = DataManage(DataManage.target_info, args=(out_file, )).run()
     if not data:
         return None
     try:
         for line in data:
             line['FeaturePath'] = path + '/' + line[
                 'WeChatID'] + '_face.bin(jpg)'
     except KeyError:
         print '存在非法键值无法导入!'
         return False
     return data
Esempio n. 28
0
    def statistics_calculation(self,
                               stu_info_list,
                               _type=''):  # 给定一定数量的学生考勤信息计算该信息内所有学生的考勤结果
        absence = {}
        keys = {
            'null': 0,
            'normal': 1,
            'Late': 2,
            'leaveEarlier': 3,
            'Absence': 4,
            'Submitted': 5,
            'approve': 6
        }

        for stu in stu_info_list:
            info = {}
            if absence.has_key(stu['StuID']):
                continue
            else:
                absence[stu['StuID']] = info
            info['Type'] = 'null'
            info['StuName'] = DataManage(DataManage.target_info,
                                         args=('../InData/studentInfo.csv', {
                                             'StuID': stu['StuID']
                                         })).run()[0]['StuName']
        if not _type:
            _type = 'checkinResult'

        for stu in stu_info_list:
            info = absence[stu['StuID']]
            if keys[info['Type']] < keys[stu[_type]]:
                if info['Type'] == 'null':
                    info['Type'] = stu[_type]
                elif info['Type'] == 'normal' or info['Type'] == 'Late':
                    if stu[_type] == 'Absence':
                        info['Type'] = 'leaveEarlier'
                    else:
                        info['Type'] = stu[_type]
                elif info['Type'] == 'leaveEarlier' or info[
                        'Type'] == 'Absence':
                    if keys[stu[_type]] >= 5:
                        info['Type'] = stu[_type]
                    else:
                        continue
                else:
                    info['Type'] = stu[_type]
            else:
                if info['Type'] == 'Absence':
                    if stu[_type] == 'normal' or stu[_type] == 'Late':
                        info['Type'] = 'Late'
                continue

        return self.__calculation(absence)
Esempio n. 29
0
    def stu_info_test(key):

        stu_info = DataManage(DataManage.target_info,
                              args=('../InData/studentInfo.csv', {
                                  'WeChatID': key
                              })).run()

        if not stu_info:
            print '学生微信不存在请检查您的输入信息!'
            return False

        return stu_info[0]
Esempio n. 30
0
    def get_count_rate(self, key, num):  # 给定教师ID和课程返回平均出勤率 若给定num显示哪一次的

        try:
            num = int(num)
        except TypeError and ValueError:
            print '数据无效,请您输入正整数!'
            return False

        class_info = DataManage(DataManage.target_info,
                                args=('../InData/courseInfo.csv', {
                                    'TeacherID': key['TeacherID'],
                                    'CourseName': key['CourseName']
                                })).run()

        if not class_info:
            print '课程信息不存在请检查您的输入!'
            return False

        class_list = []
        for line in class_info:
            if line['ClassName'] not in class_list:
                class_list.append(line['ClassName'])  # 得到所有的班级名称

        seq_info = DataManage(DataManage.target_info,
                              args=('../InData/seq.csv', )).run()

        count = 0
        for seq in seq_info:
            if seq['TeacherID'] == key["TeacherID"]:
                if seq['ClassID'] in class_list:
                    count = count + 1
                    if count == num:
                        key['ClassID'] = seq['ClassID']
                        key['seqnum'] = seq['SeqID']
                        grade = self.get_att_rate(key)
                        print '%-10s课第%2d次是对班级: %-10s发起,考勤的出勤率为%-3.2f %%' \
                              % (key['CourseName'], count, key['ClassID'], grade)
                        return grade
        print '该次课程不存在第%d次考勤,请检查您的输入!' % (num, )
        return False