为宝贝大孙子写的成长日志记录小程序

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 为宝贝大孙子写的成长日志记录小程序

为宝贝大孙子写的成长日志记录小程序
2024年7月3日早晨06时06分,在这个温馨而充满喜悦的时刻,我们迎来了家族中最璀璨的星辰——我的宝贝孙子,一个带着无限希望与梦想降临人间的小天使。他的到来,如同春日里最温暖的阳光,瞬间融化了我们所有人的心房,让家中每一个角落都洋溢着幸福与欢笑。此刻我依然还沉寂在那幸福的一刻。于是我有了一个美好的想法,我要用自己的专长为我孙子编个记录他今后成长的日志的小程序。记录从他出生到他以后的成长岁月的点点滴滴。

设计思路及功能简介
以超文本html的格式显示输出,内容包括标题、日历插件、宝贝的一些个人信息、出生时长的实时更新时间、珍贵的拍摄照片。

日志文本是json文件格式,用单独开发的小程序进行日志记录保存、和照片上传。同样是根据日历插件进行选择并输入日志记录。

下面分享一下我的“孙子成长记录日志小程序”。

html文本的源程序如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态背景颜色变换与日历日志</title>
    <style>
    body {
   
            color: white;
            transition: background-color 2s ease-in-out;
        }

        h1 {
   
            font-weight: bold;
            font-family: '宋体', sans-serif;
        }
     #imageCarousel {
   
            width: 700px;
            height: 800px;
            position: absolute;
            top: 0px;
            right: 0px;
            overflow: hidden;
        }

        .carouselImage {
   
            width: 100%;
            height: 100%;
            position: absolute;
            opacity: 0;
            transition: opacity 1s;
        }
        </style>
    <style>
        body {
   
            color: white;
            transition: background-color 2s ease-in-out;
        }

        h1 {
   
            font-weight: bold;
            font-family: '宋体', sans-serif;
        }
    </style>
</head>
<body>
    宝贝大孙子的成长记录日志
    <h3 id="h0">选择日期并查看当天的日志</h3>
    <input type="date" id="selectedDate">
    <button onclick="showLog()">显示日志</button>
    <p>出生日期: 20240703<br>阴    历:二零二四年五月二十八 甲辰年 (龙年)<br>属    相:<br>年    龄: 1毛岁<br>
    <p id="timeDifference"></p>
    <div id="logContent"></div>
    <script>
        // 固定时间:2024-07-03 06:06:00
        const fixedTime = new Date('2024-07-03T06:06:00').getTime();

        function updateTimeDifference() {
   
            const currentTime = new Date().getTime();
            const timeDiff = currentTime - fixedTime;

            const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
            const hoursDiff = Math.floor((timeDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            const minutesDiff = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60));
            const secondsDiff = Math.floor((timeDiff % (1000 * 60)) / 1000);

            document.getElementById("timeDifference").innerHTML = `今天是出生的 第${
     daysDiff}${
     hoursDiff}小时 ${
     minutesDiff}分钟 ${
     secondsDiff}秒`;
        }

        // 每秒更新一次时间差
        setInterval(updateTimeDifference, 1000);
    </script>

    <script>
        function showLog() {
   
            const selectedDate = document.getElementById('selectedDate').value;
            const logContent = document.getElementById('logContent');

            fetch('logData.json')
                .then(response => response.json())
                .then(data => {
   
                    if (data[selectedDate]) {
   
                        logContent.innerHTML = `<h2 id="h1">${
     selectedDate} 的日志:</h2><p>${
     data[selectedDate]}</p>`;
                    } else {
   
                        logContent.innerHTML = `<p>未找到 ${
     selectedDate} 的日志。</p>`;
                    }
                })
                .catch(error => console.error('错误:', error));
        }
        function changeBackgroundColor() {
   
            const randomColor = Math.floor(Math.random()*16777215).toString(16); // 生成随机颜色值
            document.body.style.backgroundColor = "#" + randomColor; // 设置背景颜色
        }
        setInterval(changeBackgroundColor, 2000); // 每2秒改变一次背景颜色
        imageInput.addEventListener('change', function() {
   
            const file = imageInput.files[0];
            const reader = new FileReader();

            reader.onload = function(e) {
   
                imageDisplay.innerHTML = `<img src="${
     e.target.result}" alt="Selected Image" style="max-width: 300px; max-height: 300px;">`;
            }

            reader.readAsDataURL(file);
        })
    </script>

     <script>

        const images = ["../images/2.jpg", "../images/1.png", "../images/3.jpg", "../images/7.png","../images/4.jpg","../images/1.png", "../images/10.jpg","../images/7-6-2.jpg","../images/9.jpg"]; // Add the paths of your images here
        let currentImageIndex = 0;

        // Function to display images in a carousel
        function displayImages() {
   
            const imageCarousel = document.getElementById("imageCarousel");
            imageCarousel.innerHTML = "";
            for (let i = 0; i < images.length; i++) {
   
                const image = document.createElement("img");
                image.src = images[i];
                image.classList.add("carouselImage");
                image.style.zIndex = i === currentImageIndex ? 1 : 0;
                imageCarousel.appendChild(image);
            }
            startCarousel();
        }

        function startCarousel() {
   
            const images = document.querySelectorAll(".carouselImage");
            let currentIndex = 0;
            const totalImages = images.length;

            setInterval(() => {
   
                images[currentIndex].style.opacity = 0;
                currentIndex = (currentIndex + 1) % totalImages;
                images[currentIndex].style.opacity = 1;
            }, 3000); // Change image every 3 seconds
        }

        window.onload = displayImages;
    </script>
    <div id="imageCarousel"></div>

</body>
</html>

运行结果如下图:
image.png
image.png
日志记录、图片上传程序源码如下:

import json
import os
import tkinter as tk
from tkinter import scrolledtext, filedialog
from tkcalendar import Calendar
from datetime import datetime
import shutil

# 定义读取日志文件的函数,返回字典格式的数据
def get_log_dict():
    if os.path.exists('./logData_old.json'):
        with open('./logData_old.json', 'r') as f:
            logs_dict = json.load(f)
        return logs_dict
    else:
        return {
   }

# 定义写入日志文件的函数
def write_json(data):
    with open('./logData.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=4)

# 日志保存、图片上传函数
def log_json():
    log_data = get_log_dict()
    new_log = {
   }

    def upload_image():
        file_path = filedialog.askopenfilename()
        dest_path = filedialog.askdirectory()
        shutil.move(file_path, dest_path)
    def save_log():
        log_date = cal.get_date()
        date_obj = datetime.strptime(log_date, "%m/%d/%y")
        formatted_date = date_obj.strftime("%Y-%m-%d")
        log_entry = text.get("1.0", tk.END).strip()
        if log_entry:
            log_entry = log_entry
        new_log[formatted_date] = log_entry
        text.delete("1.0", tk.END)

    def save_and_exit():
        save_log()
        log_data.update(new_log)
        write_json(log_data)
        root.destroy()

    root = tk.Tk()
    root.title("宝贝大孙子日志记录程序")

    cal = Calendar(root, select_mode='day')
    cal.pack(pady=10)

    text = scrolledtext.ScrolledText(root, wrap=tk.WORD, width=40, height=10)
    text.pack(pady=10)

    button_frame = tk.Frame(root)
    button_frame.pack()

    upload_button = tk.Button(button_frame, text="上传图片", command=upload_image)
    upload_button.pack(side=tk.LEFT, padx=10)
    save_exit_button = tk.Button(button_frame, text="保存并退出", command=save_and_exit)
    save_exit_button.pack(side=tk.RIGHT, padx=10)

    root.mainloop()

# 主函数

if __name__ == '__main__':
    log_json()

运行结果如下:
image.png
备注:部分代码由AI完成,感谢这个伟大的AI时代。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
186 0
|
3月前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录是一个重要而复杂的问题。
微信小程序作为业务拓展的新渠道,其全栈开发涉及前端与后端的紧密配合。本文聚焦小程序开发中的异常处理与日志记录,从前端的网络、页面跳转等异常,到后端的数据库、API调用等问题,详述了如何利用try-catch及日志框架进行有效管理。同时强调了集中式日志管理的重要性,并提醒开发者注意安全性、性能及团队协作等方面,以构建稳定可靠的小程序应用。
64 1
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的公司员工工作日志办公系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的公司员工工作日志办公系统附带文章和源代码部署视频讲解等
32 0
|
小程序
小程序接入实时日志
小程序接入实时日志
257 0
|
SQL 小程序 前端开发
一个python小程序找出binlog中的大事务,一个update生成了1.4G的日志和65万条记录
base64-output参数用来控制binlog部分是否显示出来的,指定为decode-rows表示不显示binglog部分
158 0
|
25天前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
166 3
|
1月前
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
43 0
微信小程序更新提醒uniapp
|
3月前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
103 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
3月前
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
96 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
|
3月前
|
存储 小程序 JavaScript
下一篇
无影云桌面