用 Python 记录和分析工时的项目方案

在当今快速发展的工作环境中,工时记录对于员工和管理者都显得尤为重要。通过有效地记录工时,我们可以实现对个人工作效率的监督和对项目进度的追踪。本文将介绍如何利用 Python 语言编写一个简单的工时管理系统,并通过可视化图表展示工时数据。

项目需求

功能需求

  1. 用户可以输入工作项目和工时。
  2. 用户可以查看过去的工时记录。
  3. 提供工时数据的可视化展示。

非功能需求

  1. 代码应易于扩展和维护。
  2. 数据存储应简洁高效。

项目设计

系统架构

  1. 前端界面:使用命令行界面输入和查看工时。
  2. 数据存储:使用 JSON 文件存储工时数据。
  3. 数据分析:利用 Matplotlib 库生成图表。

状态图

我们使用状态图描述系统的状态如何转换,以下是用 Mermaid 语法表示的状态图:

stateDiagram
    [*] --> 输入工时
    输入工时 --> 查看记录
    输入工时 --> 退出系统
    查看记录 --> 输入工时
    查看记录 --> 退出系统

数据结构

我们将使用一个简单的 JSON 数据格式来存储工时记录,每条记录将包括日期、项目和工时。

[
    {
        "date": "2023-10-01",
        "project": "项目A",
        "hours": 5
    },
    {
        "date": "2023-10-02",
        "project": "项目B",
        "hours": 3
    }
]

Python 代码实现

1. 工时输入功能

首先,我们需要实现工时输入功能,用户可以输入工作项目和对应的工时。

import json
from datetime import datetime

def input_hours():
    date = input("请输入日期 (YYYY-MM-DD): ")
    project = input("请输入项目名称: ")
    hours = float(input("请输入工时: "))
    
    record = {
        "date": date,
        "project": project,
        "hours": hours
    }
    
    try:
        with open('work_hours.json', 'r+') as file:
            data = json.load(file)
            data.append(record)
            file.seek(0)
            json.dump(data, file, indent=4)
    except FileNotFoundError:
        with open('work_hours.json', 'w') as file:
            json.dump([record], file, indent=4)
            
    print("工时记录成功!")

2. 查看历史记录

接下来,我们需要实现一个功能,允许用户查看他们的历史工时记录。

def view_hours():
    try:
        with open('work_hours.json', 'r') as file:
            data = json.load(file)
            for record in data:
                print(f"日期: {record['date']}, 项目: {record['project']}, 工时: {record['hours']}")
    except FileNotFoundError:
        print("没有找到工时记录!")

3. 数据可视化

我们还需要使用 Matplotlib 来生成工时的饼状图,以方便用户快速理解时间分配。

import matplotlib.pyplot as plt

def visualize_hours():
    try:
        with open('work_hours.json', 'r') as file:
            data = json.load(file)
            projects = {}
            for record in data:
                if record['project'] in projects:
                    projects[record['project']] += record['hours']
                else:
                    projects[record['project']] = record['hours']

            plt.pie(projects.values(), labels=projects.keys(), autopct='%1.1f%%')
            plt.axis('equal')
            plt.title('工时分配饼状图')
            plt.show()
    except FileNotFoundError:
        print("没有找到工时记录!")

4. 主程序逻辑

最后,我们需要一个主程序逻辑来连接所有功能。

def main():
    while True:
        choice = input("请选择操作:1. 输入工时 2. 查看记录 3. 查看分配图 4. 退出: ")
        if choice == '1':
            input_hours()
        elif choice == '2':
            view_hours()
        elif choice == '3':
            visualize_hours()
        elif choice == '4':
            break
        else:
            print("无效的选择,请重试。")

if __name__ == "__main__":
    main()

结尾

通过上述方案,我们创建了一个简单而高效的工时管理系统。用户能够轻松输入工作日志、查询历史记录,并通过饼状图直观地了解不同项目的工时分配。这种灵活的管理方法不仅提升了员工的时间管理能力,还为团队的项目管理提供了一个有力的支持。未来,我们可以进一步扩展功能,例如在线数据存储、更复杂的统计分析等,以满足更高的业务需求。