Attendance Management Code: python hand of basic training

Disclaimer: This article is a blogger original article, follow the CC 4.0 BY-SA copyright agreement, reproduced, please attach the original source link and this statement.
This link: https://blog.csdn.net/pingsha_luoyan/article/details/98622432

demand;

How many users punch in Table 1. A total of attendance statistics

2. How many times per user punch

3. Each user should punch how many times

4. Each user how many times the normal punch

The main program, the entire four requirements

 

#encoding:utf-8
import pandas as pd
import config
def need_01():
    csv_info= pd.read_csv(config.url,usecols=[1])
    csv_list=csv_info["姓名"]
    csv_list=list(csv_list)
    csv_set=set(csv_list)
    return len(csv_set)


#encoding:utf-8
import csv
import config
def need_02():
    with open(config.url, 'r', encoding="utf-8") as mycsvfile:
        data = list(csv.reader(mycsvfile))
        data.pop(0)
    dic = {}
    for i in range(len(data)):
        if data[i][10] != "未打卡":
            if data[i][1] not in dic:
                dic[data[i][1]] = 1
            else:
                dic[data[i][1]] += 1
    for a, b in dic.items():
        print (a, "打卡", b, "次")
# encoding:utf-8
import csv
import config
import pandas
from datetime import datetime
# 将用户名去重,得到所有的用户列表
def get_username():
    csv_info= pandas.read_csv(config.url,usecols=[1])
    csv_list=csv_info["姓名"]
    csv_list=list(csv_list)
    csv_set=set(csv_list)
    user_list=list(csv_set)
    user_new_list=[]
    first_time=0
    last_time=0
    days=0
    week=1
    for user in user_list:
        user_new_list.append([user,first_time,last_time,0,days,week])
    # print(user_new_list)
    return user_new_list
# 获得所有的用户名和用户时间
def get_userNameAndTime():
    reader = list(csv.reader(open(config.url, encoding='utf-8')))
    list_nameAndTime=[]
    i = 0
    for re in reader:
        if i==0:
            i=1
            continue
        list_nameAndTime.append([re[0],re[1]])
    return list_nameAndTime
def need_03(user_list,list_time):
    for i in range(len(list_time)):
        for j in range(len(user_list)):
            if list_time[i][1]==user_list[j][0] and user_list[j][3]==0:
                user_list[j][1]=list_time[i][0]
                user_list[j][3]=1
            if list_time[i][1]==user_list[j][0]:
                user_list[j][2] = list_time[i][0]
    return user_list
def get_need_03(list_time_new):
    for i in range(len(list_time_new)):
        date_first=datetime.strptime(list_time_new[i][1],"%Y/%m/%d")
        date_last=datetime.strptime(list_time_new[i][2],"%Y/%m/%d")
        days=date_last-date_first
        day=days.days
        list_time_new[i][3]+=day
        week = datetime.strptime(list_time_new[i][1], "%Y/%m/%d").weekday()
        # print(type(week))
        list_time_new[i][5]+=week
        # print(len(list_time_new))
        # print(type(list_time_new[i][4]))
    return list_time_new
def by_days_week_get_count(list):
    for i in range(len(list)):
        days=list[i][3]
        x=days//7
        list[i][4]=x*6
        y=days%7
        if y!=0:
            temp=y+list[i][5]
            if temp>=7:
                list[i][4]=list[i][4]+y-1
            else:
                list[i][4]=list[i][4]+y
    return list
# encoding:utf-8
import config
import csv
import pandas

# 将用户名去重,得到所有的用户列表
def get_username():
    csv_info= pandas.read_csv(config.url,usecols=[1])
    csv_list=csv_info["姓名"]
    csv_list=list(csv_list)
    csv_set=set(csv_list)
    user_list=list(csv_set)
    user_new_list=[]
    count=0
    for user in user_list:
        user_new_list.append([user,count])
    # print(user_new_list)
    return user_new_list
# 将用户名存储到字典中,方便统计正常打卡次数
# def get_dict(user_list):
#     user_dict={}
#     count=0
#     for user in user_list:
#         user_new=user
#         user_dict[user_new]=count
#     return user_dict
def need_way_04(user_list):
    reader = list(csv.reader(open(config.url, encoding="utf-8")))
    list_user = get_username()
    for i in range(len(reader)):
        for j in range(len(list_user)):
            if reader[i][1] == list_user[j][0] and reader[i][10] == "正常":
                list_user[j][1] += 1
    for us in list_user:
        print("%s 正常打卡的次数是:%s" % (us[0], us[1]))
# encoding:utf-8
import wyf_quchong
import block_04_yanzhenxing
import liu_count
import major_03_yangjun
import config

if __name__ == '__main__':
    print("需求代号")
    print("1:统计考勤表中一共有多少个打卡用户")
    print("2:每个用户打卡多少次")
    print("3:每个用户应该打卡多少次")
    print("4:每个用户正常打卡多少次")
    print("Q:退出程序")
    while 1:
        try:
            print("请输入需求代号")
            need = input("请输入需求代号:例如:1--->")
            if need == "Q":
                break
            if need == str(1):
                print("需求1查询结果:%s" % wyf_quchong.need_01())
                continue
            if need == str(2):
                print("需求2查询结果:")
                liu_count.need_02()
                continue
            if need == str(3):
                print("需求3查询结果: ")
                user = major_03_yangjun.get_username()
                userAndDate = major_03_yangjun.get_userNameAndTime()
                time1 = major_03_yangjun.need_03(user, userAndDate)
                print(time1)
                time2 = major_03_yangjun.get_need_03(time1)
                print(time2)
                count = major_03_yangjun.by_days_week_get_count(time2)
                for i in range(len(time2)):
                    print("%s 应该打卡 %s 次" % (count[i][0], count[i][4] * 2))
                continue
            if need == str(4):
                print("需求4查询结果: ")
                list = block_04_yanzhenxing.get_username()
                block_04_yanzhenxing.need_way_04(list)
                continue
            if need != str(1) and need != str(2):
                if need != str(3) and need != str(4):
                    if need != "Q":
                        print("请输入正确的需求代号:正确的需求代号为:1,2,3,4")
                        continue
        except:
            print('csv文件格式或地址不正确')
            continue

 

Guess you like

Origin blog.csdn.net/pingsha_luoyan/article/details/98622432