从零构建校园多功能打卡系统:Python 实战全攻略
在校园生活中,卫生、早起、运动、就餐等日常打卡是提升自律性的重要方式。今天我将带大家用 Python 从零开发一个集打卡记录、数据持久化、AI 智能助手于一体的校园多功能打卡系统,零基础也能轻松学会,文末附完整源码可直接运行!
一、项目功能预览
我们要实现的系统包含 6 大核心功能:
- 四大场景打卡(卫生 / 早起 / 运动 / 就餐)
- 查看所有打卡历史记录
- 数据本地持久化存储(重启不丢失)
- 集成 AI 智能生活助手
- 交互式命令行菜单
- 自动初始化数据文件
二、核心知识点梳理
本项目涵盖 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()
四、项目运行效果
- 首次运行自动生成
check_in_data.txt数据文件 - 输入 1-4 完成对应打卡,实时显示时间
- 输入 5 查看所有分类打卡次数和历史记录
- 输入 6 可与 AI 助手对话(如:如何养成早起习惯?)
- 输入 0 安全退出,所有数据永久保存
五、项目扩展思路
学完基础版,你还可以进阶优化:
- 添加用户登录功能,支持多人打卡
- 增加打卡统计图表(用 matplotlib 绘制折线图)
- 添加打卡提醒功能(定时任务)
- 支持删除 / 修改打卡记录
- 打包成 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 实战教程,欢迎点赞收藏,下期带来更多实用项目~
博客核心亮点
- 零基础友好:知识点拆解详细,无晦涩术语
- 实战导向:分步教学,代码可直接运行
- 知识全覆盖:罗列所有用到的 Python 知识点
- 扩展性强:提供进阶优化思路,适合学习提升
- 格式规范:符合博客阅读习惯,排版清晰易读
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)