python编写一个简单的课时记录系统

news2024/9/29 13:16:32

👽发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。

使用Python创建一个简单的课时记录系统

在学习过程中,跟踪课时的进度是非常重要的。为了方便记录和管理课时信息,我们可以使用Python编写一个简单的课时记录系统。这个系统将允许用户添加新的课程、记录已完成的课时,以及查看已完成课时的统计信息。

功能概述

  1. 添加新的课程
  2. 记录已完成的课时
  3. 查看已完成课时的统计信息

实现步骤

步骤一:创建课程类

首先,我们需要创建一个课程类来表示课程对象。每个课程将包含名称和总课时数。

class Course:
    def __init__(self, name, total_hours):
        self.name = name
        self.total_hours = total_hours
步骤二:创建课时记录系统类

然后,我们创建一个课时记录系统类,该类将管理课程列表和已完成的课时记录。

class CourseTracker:
    def __init__(self):
        self.courses = []

    def add_course(self, course):
        self.courses.append(course)

    def record_hours(self, course_name, hours_completed):
        for course in self.courses:
            if course.name == course_name:
                course.total_hours -= hours_completed
                break

    def get_course_status(self, course_name):
        for course in self.courses:
            if course.name == course_name:
                return course.total_hours
步骤三:使用课时记录系统

现在,我们可以使用我们创建的课时记录系统来添加课程、记录已完成的课时和查看课程状态。

# 创建课时记录系统对象
tracker = CourseTracker()

# 添加课程
tracker.add_course(Course("Python Programming", 20))
tracker.add_course(Course("Data Science", 30))

# 记录已完成的课时
tracker.record_hours("Python Programming", 5)
tracker.record_hours("Data Science", 10)

# 查看课程状态
print("Python Programming Course Hours Left:", tracker.get_course_status("Python Programming"))
print("Data Science Course Hours Left:", tracker.get_course_status("Data Science"))

实现进阶功能

1. 保存和加载课程数据

我们可以将课程数据保存到文件中,以便下次程序运行时加载已保存的课程信息。

import pickle

class CourseTracker:
    def __init__(self):
        self.courses = []

    def add_course(self, course):
        self.courses.append(course)

    def record_hours(self, course_name, hours_completed):
        for course in self.courses:
            if course.name == course_name:
                course.total_hours -= hours_completed
                break

    def get_course_status(self, course_name):
        for course in self.courses:
            if course.name == course_name:
                return course.total_hours

    def save_data(self, filename):
        with open(filename, 'wb') as f:
            pickle.dump(self.courses, f)

    def load_data(self, filename):
        with open(filename, 'rb') as f:
            self.courses = pickle.load(f)
2. 用户界面改进

添加一个简单的用户界面,使用户可以更直观地与系统交互。

def main():
    tracker = CourseTracker()
    tracker.load_data("courses_data.pkl")  # 加载已保存的课程数据

    while True:
        print("\nWelcome to Course Tracker System")
        print("1. Add Course")
        print("2. Record Hours")
        print("3. View Course Status")
        print("4. Save and Exit")

        choice = input("Enter your choice: ")

        if choice == "1":
            name = input("Enter course name: ")
            hours = int(input("Enter total hours: "))
            tracker.add_course(Course(name, hours))
            print("Course added successfully!")

        elif choice == "2":
            name = input("Enter course name: ")
            hours_completed = int(input("Enter hours completed: "))
            tracker.record_hours(name, hours_completed)
            print("Hours recorded successfully!")

        elif choice == "3":
            name = input("Enter course name: ")
            hours_left = tracker.get_course_status(name)
            print(f"Hours left for {name}: {hours_left}")

        elif choice == "4":
            tracker.save_data("courses_data.pkl")  # 保存课程数据
            print("Data saved. Exiting...")
            break

        else:
            print("Invalid choice. Please try again.")

if __name__ == "__main__":
    main()
3. 统计课程完成情况

添加一个功能,统计所有课程的完成情况,显示已完成的课时数和剩余课时数。

class CourseTracker:
    def __init__(self):
        self.courses = []

    def add_course(self, course):
        self.courses.append(course)

    def record_hours(self, course_name, hours_completed):
        for course in self.courses:
            if course.name == course_name:
                course.total_hours -= hours_completed
                break

    def get_course_status(self, course_name):
        for course in self.courses:
            if course.name == course_name:
                return course.total_hours

    def save_data(self, filename):
        with open(filename, 'wb') as f:
            pickle.dump(self.courses, f)

    def load_data(self, filename):
        with open(filename, 'rb') as f:
            self.courses = pickle.load(f)

    def get_overall_status(self):
        print("Overall Course Status:")
        for course in self.courses:
            print(f"{course.name}: Completed {course.total_hours} hours, Remaining {course.total_hours} hours")
4. 添加异常处理

为了提高系统的健壮性,我们可以添加一些异常处理机制,处理用户可能输入的错误信息。

def main():
    tracker = CourseTracker()
    try:
        tracker.load_data("courses_data.pkl")  # 加载已保存的课程数据
    except FileNotFoundError:
        print("No existing data found. Starting with an empty course list.")

    while True:
        print("\nWelcome to Course Tracker System")
        print("1. Add Course")
        print("2. Record Hours")
        print("3. View Course Status")
        print("4. View Overall Status")
        print("5. Save and Exit")

        choice = input("Enter your choice: ")

        if choice == "1":
            try:
                name = input("Enter course name: ")
                hours = int(input("Enter total hours: "))
                tracker.add_course(Course(name, hours))
                print("Course added successfully!")
            except ValueError:
                print("Invalid input! Please enter a valid number for total hours.")

        elif choice == "2":
            name = input("Enter course name: ")
            try:
                hours_completed = int(input("Enter hours completed: "))
                tracker.record_hours(name, hours_completed)
                print("Hours recorded successfully!")
            except ValueError:
                print("Invalid input! Please enter a valid number for hours completed.")

        elif choice == "3":
            name = input("Enter course name: ")
            hours_left = tracker.get_course_status(name)
            if hours_left is not None:
                print(f"Hours left for {name}: {hours_left}")
            else:
                print("Course not found!")

        elif choice == "4":
            tracker.get_overall_status()

        elif choice == "5":
            tracker.save_data("courses_data.pkl")  # 保存课程数据
            print("Data saved. Exiting...")
            break

        else:
            print("Invalid choice. Please try again.")

if __name__ == "__main__":
    main()
5. 用户友好的界面优化

改进用户界面,使其更加友好和直观。

def display_menu():
    print("\nWelcome to Course Tracker System")
    print("1. Add Course")
    print("2. Record Hours")
    print("3. View Course Status")
    print("4. View Overall Status")
    print("5. Save and Exit")

def main():
    tracker = CourseTracker()
    try:
        tracker.load_data("courses_data.pkl")  # 加载已保存的课程数据
    except FileNotFoundError:
        print("No existing data found. Starting with an empty course list.")

    while True:
        display_menu()
        choice = input("Enter your choice: ")

        if choice == "1":
            add_course_menu(tracker)
        elif choice == "2":
            record_hours_menu(tracker)
        elif choice == "3":
            view_course_status_menu(tracker)
        elif choice == "4":
            tracker.get_overall_status()
        elif choice == "5":
            tracker.save_data("courses_data.pkl")  # 保存课程数据
            print("Data saved. Exiting...")
            break
        else:
            print("Invalid choice. Please try again.")

def add_course_menu(tracker):
    print("\nAdd Course")
    name = input("Enter course name: ")
    while True:
        try:
            hours = int(input("Enter total hours: "))
            break
        except ValueError:
            print("Invalid input! Please enter a valid number for total hours.")
    tracker.add_course(Course(name, hours))
    print("Course added successfully!")

def record_hours_menu(tracker):
    print("\nRecord Hours")
    name = input("Enter course name: ")
    while True:
        try:
            hours_completed = int(input("Enter hours completed: "))
            break
        except ValueError:
            print("Invalid input! Please enter a valid number for hours completed.")
    tracker.record_hours(name, hours_completed)
    print("Hours recorded successfully!")

def view_course_status_menu(tracker):
    print("\nView Course Status")
    name = input("Enter course name: ")
    hours_left = tracker.get_course_status(name)
    if hours_left is not None:
        print(f"Hours left for {name}: {hours_left}")
    else:
        print("Course not found!")

if __name__ == "__main__":
    main()
6. 添加删除课程功能

允许用户删除已添加的课程。

class CourseTracker:
    # ... existing code ...

    def delete_course(self, course_name):
        for course in self.courses:
            if course.name == course_name:
                self.courses.remove(course)
                print(f"Course '{course_name}' deleted successfully!")
                break
        else:
            print("Course not found!")

def delete_course_menu(tracker):
    print("\nDelete Course")
    name = input("Enter course name to delete: ")
    tracker.delete_course(name)
7. 添加提醒功能

为了帮助用户更好地管理学习进度,我们可以添加一个提醒功能,当课程的剩余课时少于设定阈值时,系统会提醒用户。

class CourseTracker:
    # ... existing code ...

    def set_reminder_threshold(self, course_name, threshold):
        for course in self.courses:
            if course.name == course_name:
                course.reminder_threshold = threshold
                print(f"Reminder threshold set for '{course_name}'")
                break
        else:
            print("Course not found!")

    def check_reminder(self):
        for course in self.courses:
            if course.total_hours <= course.reminder_threshold:
                print(f"Reminder: '{course.name}' has {course.total_hours} hours remaining!")

def set_reminder_threshold_menu(tracker):
    print("\nSet Reminder Threshold")
    name = input("Enter course name: ")
    while True:
        try:
            threshold = int(input("Enter reminder threshold: "))
            break
        except ValueError:
            print("Invalid input! Please enter a valid number for the threshold.")
    tracker.set_reminder_threshold(name, threshold)

def main():
    tracker = CourseTracker()
    try:
        tracker.load_data("courses_data.pkl")  # 加载已保存的课程数据
    except FileNotFoundError:
        print("No existing data found. Starting with an empty course list.")

    while True:
        display_menu()
        choice = input("Enter your choice: ")

        if choice == "1":
            add_course_menu(tracker)
        elif choice == "2":
            record_hours_menu(tracker)
        elif choice == "3":
            view_course_status_menu(tracker)
        elif choice == "4":
            set_reminder_threshold_menu(tracker)
        elif choice == "5":
            tracker.get_overall_status()
        elif choice == "6":
            tracker.check_reminder()
        elif choice == "7":
            tracker.save_data("courses_data.pkl")  # 保存课程数据
            print("Data saved. Exiting...")
            break
        else:
            print("Invalid choice. Please try again.")
8. 多用户支持

允许多个用户使用系统,每个用户有独立的课程记录。

class CourseTracker:
    def __init__(self):
        self.users = {}

    def add_user(self, username):
        if username not in self.users:
            self.users[username] = []

    def add_course(self, username, course):
        self.users[username].append(course)

    # ... other methods ...

def add_user_menu(tracker):
    print("\nAdd User")
    username = input("Enter username: ")
    tracker.add_user(username)
    print(f"User '{username}' added successfully!")

def add_course_menu(tracker):
    print("\nAdd Course")
    username = input("Enter username: ")
    if username not in tracker.users:
        print("User not found!")
        return
    name = input("Enter course name: ")
    while True:
        try:
            hours = int(input("Enter total hours: "))
            break
        except ValueError:
            print("Invalid input! Please enter a valid number for total hours.")
    tracker.add_course(username, Course(name, hours))
    print("Course added successfully!")

总结

在本文中,我们使用Python创建了一个简单而实用的课时记录系统。通过这个系统,用户可以轻松地管理课程进度,记录已完成的课时,并且可以方便地查看课程状态和统计信息。我们从基本功能开始,逐步添加了一些进阶功能,如保存和加载课程数据、统计课程完成情况、友好的用户界面优化以及提醒功能和多用户支持等。这些功能的添加使得系统更加智能、灵活和实用,满足了不同用户的需求。

通过学习本文,读者不仅可以掌握Python编程语言的基本语法和面向对象编程的基本概念,还可以了解如何设计和构建一个简单但功能强大的应用程序。此外,读者还可以从中学习到如何通过不断改进和拓展来完善一个项目,以及如何处理用户可能遇到的各种情况和错误。

在未来,我们可以进一步拓展这个系统,添加更多的功能和特性,如用户认证、数据可视化、提供学习建议等,以使其更加全面和实用。同时,我们也可以将这个系统作为学习和探索Python编程的起点,不断学习和进步。

总而言之,通过本文的学习和实践,读者可以更加熟练地运用Python语言进行项目开发,并且可以在实际应用中体会到编程的乐趣和价值。希望本文能够对读者有所帮助,激发大家对编程和技术的兴趣,不断探索和创新。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1614636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode in Python 69. Sqrt(x) (x的平方根)

求x的平方根&#xff0c;第一想法可能是遍历0&#xff5e;x&#xff0c;求其平方&#xff0c;找到或且但其时间复杂度为O(n)&#xff0c;或是想到遍历0&#xff5e;M即可&#xff0c;其中M x // 2&#xff0c;将时间复杂度降至O()。本文利用二分思想&#xff0c;给出一种时间复…

python--pyQt5 进度条:QProgressBar

https://www.cnblogs.com/itwangqiang/articles/14959401.html https://blog.csdn.net/weixin_43990846/article/details/123880081 进度条用于向用户指示操作的进度&#xff0c;并向他们保证应用程序仍在运行 例 1 import sys from PyQt5.QtWidgets import QApplication, QWi…

(十六)C++自制植物大战僵尸游戏的宏定义讲解

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/uzrnw 宏定义 在游戏代码中为了方便,定义了许多宏定义。使用宏定义简化代码并提高可读性。下面将讲解游戏中用到的宏定义。 代码位置 代码所在位置是Class\Scenes\GameScene文件夹中。具体如下图所示。 Define.h …

尝试给笔记本超频

超频&#xff08;英语&#xff1a;overclocking&#xff09;是把一个电子配件的时脉速度提升至高于厂方所定的速度运作&#xff0c;从而提升性能的方法&#xff0c;但此举有可能导致该配件稳定性以及配件寿命下降。 笔记本配置为&#xff1a; 处理器 AMD Ryzen 7 7730U wit…

学习部分排序,插入排序,冒泡排序以及希尔排序

1.插入排序 <1>.首先我们举个例子 我们要把6进行前面的插入&#xff0c;那我们要进行比较&#xff0c;首先确定一个end的指针&#xff0c;然后他指向的数字就是我们需要比较的&#xff0c;如果end指向的数比我们end1 的大的话&#xff0c;那我们就往前挪一个&#xff0c…

四六级英语听力考试音频无线发射系统在安顺学院的成功应用分析

四六级英语听力考试音频无线发射系统在安顺学院的成功应用分析 由北京海特伟业科技任洪卓发布于2024年4月22日 安顺学院为了提高学生的外语听力水平&#xff0c;并确保英语四六级听力考试的稳定可靠进行&#xff0c;决定对传统的英语听力音频传输系统进行改造&#xff0c;以提供…

【YOLOv9】实战二:手把手教你使用TensorRT实现YOLOv9实时目标检测(含源码)

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『LabVIEW深度学习实战』 &#x1f4d1;上期文章&#xff1a;『【YOLOv9】实战一&#xff1a;在 Windows 上使用LabVIEW OpenVINO工具…

gitlab 16.x - ERR unknown command ‘HELLO‘

现象 gitlab部分操作报错500。通过Rails日志发现以下报错&#xff1a; 报错&#xff1a; RedisClient::CommandError ERR unknown command HELLO {"severity": "ERROR","time": "2024-04-22T02:50:16.906Z","correlation_id&quo…

3667B芯茂微SOP7封装5V1A 5W适配器/充电器芯片

3667B是一款高度集成的隔离型适配器和充电器的自供电PSR控制芯片&#xff0c;外部设计极其简单。LP3667 固定原边峰值电流&#xff0c;通过变压器原副边匝比来设置输出恒流点&#xff1b;通过设定一个FB 电阻来设置输出恒压点。为了实现系统成本的简化&#xff0c;LP3667 内置启…

CSS基础常用属性之字体属性(如果想知道CSS的字体属性知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习CSS的时候&#xff0c;主要学习选择器和常用的属性&#xff0c;而这篇文章讲解的就是最基础的属性之一——文字属性。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 废话不多说&#xff0c;让我们直…

删除二叉树的子树:假设二叉树中的结点均不相等,采用二叉链存储,设计递归算法删除根结点值为x的子树。(C语言)

目录 实验内容&#xff1a; 实验过程&#xff1a; 1.算法设计 2.程序清单 3.复杂度分析 4.运行结果 实验内容&#xff1a; 删除二叉树的子树:假设二叉树中的结点均不相等&#xff0c;采用二叉链存储&#xff0c;设计递归算法删除根结点值为x的子树。 实验过程&#xff1…

web前端(简洁版)

0. 开发环境 && 安装插件 这里我使用的是vscode开发环境 Auto Rename Tag是语法自动补齐view-in-browser是快速在浏览器中打开live server实时网页刷新 1. HTML 文件基本结构 <html><head><title>第一个页面</title></head><body&g…

PCIe系统阻抗控制85还是100的验证

高速先生成员--周伟 还记得上次的文章&#xff0c;PCIe阻抗控制&#xff0c;85ohm和100ohm哪个好&#xff0c;文章里面只讲到目前的主要问题&#xff0c;但没有给出具体怎么解决这个问题&#xff0c;今天我们就通过无源仿真的方式来聊聊上次那个问题的最终解决方案。 目前我们看…

lvgl图形化设计工具GUI Guider结合使用

前言 上篇博客整合了lvgl到项目中&#xff0c;采用的是自己编写源码的方式&#xff0c;实现了个简单的界面。实际过程中一般情况开发界面都借助设计工具&#xff0c;这里使用的是gui guider来进行示例记录 项目结构&#xff08;生成代码路径依然放到项目路径下&#xff09; C…

Hack The Box-Runner

总体思路 子域名扫描->CVE-2023-42793利用->获取敏感信息->user->端口转发->CVE-2024-21626利用->root 信息收集&端口利用 nmap -sSVC 10.10.11.13目标开放22、80、8000端口&#xff0c;这里先将runner.htb加入到hosts文件后&#xff0c;访问之 查看源…

腾讯后端一面:当 TCP 建立连接之后,TCP 和 UDP 的实时性是不是就差不多了?

更多大厂面试内容可见 -> http://11come.cn 腾讯后端一面&#xff1a;当 TCP 建立连接之后&#xff0c;TCP 和 UDP 的实时性是不是就差不多了&#xff1f; 项目相关 面试官可能是 Go 方向的&#xff0c;我面试的是 Java 方向的&#xff0c;所以面试官也没有问我简历上的项…

信号继电器HBDXH-200/1辅助电源110VDC 启动电压110VDC JOSEF约瑟

用途 适用于直流操作的继电保护和自动控制线路中&#xff0c;作为信号指示用&#xff0c;有多组动合保持触点。满足现场指示和遥信要求。 技术参数 启动信号额定值:直流电流型:10mA~4A. 直流电压型:220VDC、110VDC、48VDC、24VDC 辅助电源电压:220VDC、110VDC、220VAC、110…

华为ensp中MSTP多网段传输协议(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月22日15点29分 在华为ENSP中&#xff0c;MSTP&#xff08;多段传输协议&#xff09;是重要的生成树协议&#xff0c;它扩展了STP&#xff08;生成树协议&#xff09…

舒适护眼模式:苹果手机字体大小怎么设置?

在现代社会&#xff0c;人们对于手机的使用已经不再局限于通讯和娱乐&#xff0c;也逐渐成为了我们生活和工作中不可或缺的一部分。然而&#xff0c;长时间使用手机可能会对我们的视力造成一定程度的影响。 为了更好地保护视力健康&#xff0c;苹果手机提供了舒适护眼的模式&a…

vue3项目使用<img :src=““ />动态加载图片

分享一下使用<img :src"" />动态加载图片时遇到的问题以及解决方法。 下面是部分页面代码&#xff0c;这里我使用了<img :src"itemc.headUrl" />来动态加载图片 这时遇到了问题&#xff0c;因为这里的itemc.headUrl是图片的相对路径&#xff…