在校园生活中,卫生、早起、运动、就餐等日常打卡是提升自律性的重要方式。今天我将带大家用 Python 从零开发一个集打卡记录、数据持久化、AI 智能助手于一体的校园多功能打卡系统,零基础也能轻松学会,文末附完整源码可直接运行!

一、项目功能预览

我们要实现的系统包含 6 大核心功能:

  1. 四大场景打卡(卫生 / 早起 / 运动 / 就餐)
  2. 查看所有打卡历史记录
  3. 数据本地持久化存储(重启不丢失)
  4. 集成 AI 智能生活助手
  5. 交互式命令行菜单
  6. 自动初始化数据文件

二、核心知识点梳理

本项目涵盖 Python基础语法、文件操作、数据处理、第三方库、面向对象、时间模块6 大核心知识点,是新手练手的绝佳实战项目:

1. Python 基础语法

  • 变量、数据类型(字符串、列表、字典)
  • 条件判断(if-elif-else)
  • 循环语句(while 无限循环)
  • 输入输出(input /print)
  • 函数定义与调用(def 关键字)

2. 面向对象编程(OOP)

  • 类与对象(class 定义类,创建实例对象)
  • 构造方法(__init__:初始化自动执行)
  • 实例方法与属性(封装所有功能到School类中)
  • 封装思想(将数据和操作绑定,代码更整洁)

3. 时间处理模块(datetime)

  • 获取当前系统时间
  • 时间格式化(strftime 转换成年-月-日 时:分:秒格式)
  • 时间字符串存储与展示

4. 文件与数据持久化

  • os模块:判断文件是否存在(os.path.exists
  • json模块:字典与 JSON 字符串互转
  • 文件读写操作(w写入、r读取,utf-8编码解决中文乱码)
  • 本地存储:打卡记录永久保存,程序重启不丢失

5. 第三方 API 调用(OpenAI 兼容接口)

  • 安装并使用openai
  • 配置大模型接口地址(阿里云通义千问)
  • 构造对话请求(system 角色 + user 消息)
  • 解析 AI 返回结果

6. 代码规范与交互优化

  • 注释编写(代码功能说明)
  • 格式化输出(分隔线、排版优化)
  • 异常容错(输入错误提示)
  • 模块化设计(功能拆分,易维护)

三、分步实现:从 0 到 1 搭建系统

步骤 1:环境准备与依赖安装

首先安装 AI 对话所需的依赖库,打开命令行执行:

pip install openai

步骤 2:导入核心模块

我们需要 4 个内置模块 + 1 个第三方模块:

import json    # 处理JSON数据,实现存储
import os      # 操作文件路径
from datetime import datetime  # 获取打卡时间
from openai import OpenAI  # 调用AI大模型

步骤 3:面向对象设计核心类

我们用School类封装整个系统,构造方法__init__会在创建对象时自动初始化数据文件

class School:
    def __init__(self):
        # 初始化自动准备数据文件
        self.init_data()

步骤 4:数据持久化功能实现

核心是check_in_data.txt文件存储打卡记录,不存在则自动创建默认格式:

# 初始化数据文件
def init_data(self):
    if not os.path.exists("check_in_data.txt"):
        # 默认四大打卡分类
        default_data = {"卫生打卡": [], "早起打卡": [], "运动打卡": [], "就餐打卡": []}
        with open("check_in_data.txt", "w", encoding="utf-8") as f:
            json.dump(default_data, f, ensure_ascii=False, indent=4)

# 加载数据 + 保存数据(读写分离,安全可靠)
def load_data(self):
    with open("check_in_data.txt", "r", encoding="utf-8") as f:
        return json.load(f)

def save_data(self, data):
    with open("check_in_data.txt", "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=4)

步骤 5:打卡功能实现

获取当前时间 → 写入对应分类 → 保存文件,三步完成打卡:

def check_in(self, category):
    data = self.load_data()
    # 格式化当前时间
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    # 追加打卡记录
    data[category].append(now)
    self.save_data(data)
    print(f"\n{category} 打卡成功!时间:{now}")

步骤 6:打卡记录展示

遍历字典数据,统计打卡次数,格式化输出所有记录:

def show_all_records(self):
    data = self.load_data()
    print("\n" + "="*40)
    print("全部打卡记录")
    print("="*40)
    # 遍历每个分类和对应记录
    for category, records in data.items():
        print(f"\n{category} ({len(records)}次):")
        # 枚举输出序号+时间
        for idx, time in enumerate(records, 1):
            print(f"  {idx}. {time}")

步骤 7:AI 智能助手集成

调用阿里云通义千问大模型,实现温柔简洁的智能问答:

def ai_chat(self, user_content):
    # 初始化AI客户端
    client = OpenAI(base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")
    completion = client.chat.completions.create(
        model="qwen-plus",
        messages=[{"role": "system", "content": "你是智能生活助手,温柔简洁,无废话"},
                  {"role": "user", "content": user_content}]
    )
    print("\n智能生活助手:\n" + completion.choices[0].message.content)

步骤 8:主菜单交互

while True实现无限循环菜单,用户输入编号调用对应功能:

def main(self):
    while True:
        # 打印菜单
        print("\n1.卫生打卡 2.早起打卡 3.运动打卡 4.就餐打卡 5.查看记录 6.AI助手 0.退出")
        choice = input("请输入编号:")
        # 条件判断调用功能
        if choice == "1": self.check_in("卫生打卡")
        elif choice == "5": self.show_all_records()
        elif choice == "6": self.ai_chat(input("请输入问题:"))
        elif choice == "0": break

步骤 9:启动系统

最后编写程序入口,创建对象并启动:

if __name__ == "__main__":
    school = School()
    school.main()

四、项目运行效果

  1. 首次运行自动生成check_in_data.txt数据文件
  2. 输入 1-4 完成对应打卡,实时显示时间
  3. 输入 5 查看所有分类打卡次数和历史记录
  4. 输入 6 可与 AI 助手对话(如:如何养成早起习惯?)
  5. 输入 0 安全退出,所有数据永久保存

五、项目扩展思路

学完基础版,你还可以进阶优化:

  1. 添加用户登录功能,支持多人打卡
  2. 增加打卡统计图表(用 matplotlib 绘制折线图)
  3. 添加打卡提醒功能(定时任务)
  4. 支持删除 / 修改打卡记录
  5. 打包成 EXE 可执行文件,双击运行

六、总结

这个校园打卡系统完美融合了 Python基础语法、面向对象、文件操作、第三方 API四大核心技能,代码结构清晰、功能实用,非常适合 Python 新手作为实战项目。

通过这个项目,你能掌握:

  • 如何用面向对象思想封装程序
  • 如何实现数据本地持久化
  • 如何调用 AI 接口实现智能功能
  • 如何编写交互式命令行程序

需要完整源码的同学可以直接复制文章末尾代码,一键运行即可使用!

import json
import os
from datetime import datetime

# 导入大模型依赖
from openai import OpenAI

# 初始化AI客户端
client = OpenAI(
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)


class School:
    def __init__(self):
        # 初始化时自动准备数据文件
        self.init_data()

    # 初始化数据文件
    def init_data(self):
        if not os.path.exists("check_in_data.txt"):
            default_data = {
                "卫生打卡": [],
                "早起打卡": [],
                "运动打卡": [],
                "就餐打卡": []
            }
            with open("check_in_data.txt", "w", encoding="utf-8") as f:
                json.dump(default_data, f, ensure_ascii=False, indent=4)

    # 加载打卡数据
    def load_data(self):
        with open("check_in_data.txt", "r", encoding="utf-8") as f:
            return json.load(f)

    # 保存打卡数据
    def save_data(self, data):
        with open("check_in_data.txt", "w", encoding="utf-8") as f:
            json.dump(data, f, ensure_ascii=False, indent=4)

    # 执行打卡
    def check_in(self, category):
        data = self.load_data()
        now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        data[category].append(now)
        self.save_data(data)
        print(f"\n {category} 打卡成功!时间:{now}")

    # 查看所有打卡记录
    def show_all_records(self):
        data = self.load_data()
        print("\n" + "=" * 40)
        print("全部打卡记录")
        print("=" * 40)

        for category, records in data.items():
            print(f"\n {category} ({len(records)}次):")
            if records:
                for idx, time in enumerate(records, 1):
                    print(f"  {idx}. {time}")
            else:
                print("  暂无打卡记录")

    # 智能生活助手(调用AI大模型)
    def ai_chat(self, user_content):
        completion = client.chat.completions.create(
            model="qwen-plus",
            messages=[
                {"role": "system", "content": "你是智能生活助手,回话温柔但是简洁,无废话、无很多表情符号。"},
                {"role": "user", "content": user_content},
            ],
            max_tokens=150,
            temperature=0.3
        )
        # 打印AI返回结果
        print("\n智能生活助手:")
        print(completion.choices[0].message.content)

    # 主菜单:新增AI功能选项
    def main(self):
        while True:
            print("\n" + "=" * 40)
            print("  多功能打卡系统")
            print("=" * 40)
            print("1. 卫生打卡")
            print("2. 早起打卡")
            print("3. 运动打卡")
            print("4. 就餐打卡")
            print("5. 查看所有打卡记录")
            print("6. 智能生活助手")
            print("0. 退出系统")
            print("=" * 40)

            choice = input("请输入功能编号:")

            if choice == "1":
                self.check_in("卫生打卡")
            elif choice == "2":
                self.check_in("早起打卡")
            elif choice == "3":
                self.check_in("运动打卡")
            elif choice == "4":
                self.check_in("就餐打卡")
            elif choice == "5":
                self.show_all_records()
            elif choice == "6":
                # 调用AI功能
                user_input = input("\n请输入你要询问的内容:")
                self.ai_chat(user_input)
            elif choice == "0":
                print("\n感谢使用,退出成功!")
                break
            else:
                print("\n 输入错误,请重新选择!")


if __name__ == "__main__":
    # 创建学校对象
    school = School()
    # 启动系统
    school.main()

我是 覃芩,持续分享 Python 实战教程,欢迎点赞收藏,下期带来更多实用项目~

博客核心亮点

  1. 零基础友好:知识点拆解详细,无晦涩术语
  2. 实战导向:分步教学,代码可直接运行
  3. 知识全覆盖:罗列所有用到的 Python 知识点
  4. 扩展性强:提供进阶优化思路,适合学习提升
  5. 格式规范:符合博客阅读习惯,排版清晰易读
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐