使用Python熟练掌握面向对象——学生成绩管理系统、图书馆管理系统、电子商务网站模拟、猜数字游戏!

一、学生信息统筹板块

  1. 学生信息录入

    :能够详细记录学生的各类基础资料,像是姓名、专属学号以及性别等关键信息,以此保证学生个人信息的全面性,为后续与之紧密关联的成绩管理工作筑牢根基。

  2. 成绩数据录入

    :依据不同学科分类,精确无误地将学生的考试成绩录入系统,为后续多维度的成绩统计与深度分析提供精准的数据源头。

二、成绩查询服务板块

  1. 个体成绩精准查询

    :依托学生独一无二的标识,典型如学号,能够迅速且精准地从海量数据中定位并调取该学生所涉及的全部科目的成绩详细情况,使得教师、家长以及学生本人都能够便捷、直观地了解其学习动态。

  2. 科目班级均分洞察

    :针对班级整体在某一特定科目的成绩表现展开统计运算,精准得出平均分数据,为教师及时、精准地把握教学实际成效提供有力依据,进而助力其灵活调整后续教学策略。

三、数据持久保障板块

借助将数据存储至 CSV 文件这一方式,达成数据的长效、稳定存储。即便遭遇系统意外关闭而后重启的情况,宝贵的数据依然安然无恙,随时可供后续查阅、回溯,以便进行深度的历史数据分析。

四、系统突出特性板块

  1. 面向对象架构搭建

    :把学生实体抽象为独立的对象个体,赋予其专属的属性,涵盖个人信息以及成绩数据;而管理系统则作为另一个统筹协调的关键对象,负责有条不紊地调度各项操作流程,二者经过精心封装,极大地降低了模块间的耦合程度,全方位提升了代码的可维护性与拓展性。

  2. 严谨异常处理机制

    :在至关重要的数据录入流程节点,会对输入的数据格式及其合理性展开严格校验。举例来讲,录入的成绩必须严格落于合理的分数取值区间,学号也需遵循既定的规则范式,通过层层把关,坚决将错误数据拒之门外,切实保障系统内部数据的高质量与高可信度。

  3. 便捷命令行交互界面

    :以简洁明了、易于理解的命令行交互模式,循序渐进地引导用户顺利完成各项系统操作。无论是具备丰富经验的专业教师,还是初次涉足该领域的管理员,都能够毫无阻碍地上手操作,高效执行各类所需功能。

尽管文中并未对其余几个类似系统逐一展开详述,然而一旦熟练掌握了本学生成绩管理系统的设计要诀,举一反三并非难事,后续理解并构建其他功能各有千秋的应用系统自然水到渠成。

点公众号回复“1”领取python全套教程!

首先创建主要的类和文件结构:


class Student:
   def __init__(self, student_id, name):
       self.student_id = student_id
       self.name = name
       self.scores = {}  # 科目: 分数

   def add_score(self, subject, score):
       self.scores[subject] = score

   def get_average(self):
       if not self.scores:
           return 0
       return sum(self.scores.values()) / len(self.scores)

import csv
import os

class StudentManager:
    def __init__(self):
        self.students = {}  # student_id: Student对象
        self.file_path = "ts.csv"
       self.load_data()

   def add_student(self, student):
       self.students[student.student_id] = student

   def get_student(self, student_id):
       return self.students.get(student_id)

   def add_score(self, student_id, subject, score):
       if student_id in self.students:
           self.students[student_id].add_score(subject, score)

   def get_class_average(self, subject):
       scores = [s.scores.get(subject, 0) for s in self.students.values() 
                if subject in s.scores]
       if not scores:
           return 0
       return sum(scores) / len(scores)

   def save_to_csv(self):
       with open(self.file_path, 'w', newline='', encoding='utf-8') as f:
           writer = csv.writer(f)
           writer.writerow(['学号', '姓名', '科目', '分数'])
           for student in self.students.values():
               for subject, score in student.scores.items():
                   writer.writerow([student.student_id, student.name, 
                                  subject, score])

   def load_data(self):
       if not os.path.exists(self.file_path):
           return

       with open(self.file_path, 'r', encoding='utf-8') as f:
           reader = csv.reader(f)
           next(reader)  # 跳过表头
           for row in reader:
               student_id, name, subject, score = row
               if student_id not in self.students:
                   self.students[student_id] = Student(student_id, name)
               self.students[student_id].add_score(subject, float(score))

# -*- coding: utf-8 -*-
rom student import Student
rom student_manager import StudentManager
def main():
   manager = StudentManager()

   while True:
       print("\n=== 学生成绩管理系统 ===")
       print("1. 添加学生")
       print("2. 录入成绩")
       print("3. 查询学生成绩")
       print("4. 查看班级平均分")
       print("5. 保存并退出")

       choice = input("请选择操作 (1-5): ").strip()

       if choice == '1':
           student_id = input("请输入学号: ").strip()
           name = input("请输入姓名: ").strip()
           student = Student(student_id, name)
           manager.add_student(student)
           print("学生添加成功!")

       elif choice == '2':
           student_id = input("请输入学号: ").strip()
           subject = input("请输入科目: ").strip()
           try:
               score = float(input("请输入分数: ").strip())
               manager.add_score(student_id, subject, score)
               print("成绩录入成功!")
           except ValueError:
               print("分数输入错误!请输入有效的数字。")

       elif choice == '3':
           student_id = input("请输入要查询的学号: ").strip()
           student = manager.get_student(student_id)
           if student:
               print(f"\n学号:{student.student_id}")
               print(f"姓名:{student.name}")
               print("成绩:")
               for subject, score in student.scores.items():
                   print(f"{subject}: {score}")
               print(f"平均分:{student.get_average():.2f}")
           else:
               print("未找到该学生!")

       elif choice == '4':
           subject = input("请输入要查询的科目: ").strip()
           avg = manager.get_class_average(subject)
           print(f"{subject}的班级平均分是:{avg:.2f}")

       elif choice == '5':
           manager.save_to_csv()
           print("数据已保存,程序退出!")
           break

       else:
           print("无效的选择,请重试!")
if __name__ == "__main__":
   main()

界面如下

图书馆管理系统


class Book:
    def __init__(self, book_id, title,author):
       self.book_id = book_id
       self.title = title
       self.author = author
       self.is_borrowed = False
       self.borrow_history = []  # 借阅历史记录

   def borrow(self, user_id, borrow_date):
       if not self.is_borrowed:
           self.is_borrowed = True
           self.borrow_history.append({
               'user_id': user_id,
               'borrow_date': borrow_date,
               'return_date': None
           })
           return True
       return False

   def return_book(self, return_date):
       if self.is_borrowed:
           self.is_borrowed = False
           self.borrow_history[-1]['return_date'] = return_date
           return True
       return False
class User:
    def __init__(self, user_id, name):
        self.user_id = user_id
        self.name = name
        self.borrowed_books = []  # 当前借阅的图书ID列表     
   def borrow_book(self, book_id):
       self.borrowed_books.append(book_id)

   def return_book(self, book_id):
       if book_id in self.borrowed_books:
           self.borrowed_books.remove(book_id)
           return True
       return False

import json
import datetime
from book import Book
from user import User

class Library:
    def __init__(self):
        self.books = {}  # book_id: Book对象
        self.users = {}  # user_id: User对象
        self.load_data()

    def add_book(self, book):
        self.books[book.book_id] =  
   def add_user(self, user):
       self.users[user.user_id] = user

   def borrow_book(self, user_id, book_id):
       if user_id not in self.users or book_id not in self.books:
           return False

       book = self.books[book_id]
       user = self.users[user_id]

       if book.borrow(user_id, datetime.datetime.now()):
           user.borrow_book(book_id)
           return True
       return False

   def return_book(self, user_id, book_id):
       if user_id not in self.users or book_id not in self.books:
           return False

       book = self.books[book_id]
       user = self.users[user_id]

       if book.return_book(datetime.datetime.now()):
           user.return_book(book_id)
           return True
       return False

   def save_data(self):
       data = {
           'books': {
               bid: {
                   'title': book.title,
                   'author': book.author,
                   'is_borrowed': book.is_borrowed,
                   'borrow_history': book.borrow_history
               } for bid, book in self.books.items()
           },
           'users': {
               uid: {
                   'name': user.name,
                   'borrowed_books': user.borrowed_books
               } for uid, user in self.users.items()
           }
       }

       with open('library_data.json', 'w', encoding='utf-8') as f:
           json.dump(data, f, ensure_ascii=False, default=str)

   def load_data(self):
       try:
           with open('library_data.json', 'r', encoding='utf-8') as f:
               data = json.load(f)

           for book_id, book_data in data['books'].items():
               book = Book(book_id, book_data['title'], book_data['author'])
               book.is_borrowed = book_data['is_borrowed']
               book.borrow_history = book_data['borrow_history']
               self.books[book_id] = book

           for user_id, user_data in data['users'].items():
               user = User(user_id, user_data['name'])
               user.borrowed_books = user_data['borrowed_books']
               self.users[user_id] = user

       except FileNotFoundError:
           pass

电子商务网站模拟


class Product:
    def __init__(self, product_id, name, price, stock):
        self.product_id = product_id
        self.name = name
        self.price = price
        self.stock = stock

    def decrease_stock(self, quantity):
        if self.stock >= quantity:
            self.stock -= quantity
            return True
        return False

class ShoppingCart:
    def __init__(self):
        self.items = {}  # product_id: quantity

    def add_item(self, product_id, quantity):
        if product_id in self.items:
            self.items[product_id] += quantity
        else:
            self.items[product_id] = quantity

    def remove_item(self, product_id):
        if product_id in self.items:
            del self.items[product_id]

    def update_quantity(self, product_id, quantity):
        if quantity <= 0:
            self.remove_item(product_id)
        else:
            self.items[product_id] = quantity

    def get_total(self, products):
        total = 0
        for product_id, quantity in self.items.items():
            if product_id in products:
                total += products[product_id].price * quantity
        return total
import datetime

class Order:
    def __init__(self, order_id, user_id, items, total_amount):
        self.order_id = order_id
        self.user_id = user_id
        self.items = items  # {product_id: quantity}
        self.total_amount = total_amount
        self.order_date = datetime.datetime.now()
        self.status = "pending"  # pending, paid, delivered

   def pay(self):
       self.status = "paid"

   def ship(self):
       self.status = "shipped"

   def deliver(self):
       self.status = "delivered"

import json
from product import Product
from cart import ShoppingCart
from order import Order

class Store:
    def __init__(self):
        self.products = {}  # product_id: Product对象
        self.orders = {}    # order_id: Order对象
        self.load_data()

    def add_product(self, product):
        self.products[product.product_id] = product

    def create_order(self, user_id, cart):
        order_id = str(len(self.orders) + 1)
        total = cart.get_total(self.products)

        # 检查库存
        for product_id, quantity in cart.items.items():
            if not self.products[product_id].decrease_stock(quantity):
                return None

        order = Order(order_id, user_id, cart.items.copy(), total)
        self.orders[order_id] = order
        return order

    def save_data(self):
        data = {
            'products': {
                pid: {
                    'name': p.name,
                    'price': p.price,
                    'stock': p.stock
                } for pid, p in self.products.items()
            },
            'orders': {
                oid: {
                    'user_id': o.o.items,
                   'total_amount': o.total_amount,
                   'order_date': str(o.order_date),
                   'status': o.status
               } for oid, o in self.orders.items()
           }
       }

       with open('store_data.json', 'w', encoding='utf-8') as f:
           json.dump(data, f, ensure_ascii=False)

   def load_data(self):
       try:
           with open('store_data.json', 'r', encoding='utf-8') as f:
               data = json.load(f)

           for pid, p_data in data['products'].items():
               self.products[pid] = Product(
                   pid, p_data['name'], p_data['price'], p_data['stock']
               )

           for oid, o_data in data['orders'].items():
               self.orders[oid] = Order(
                   oid, o_data['user_id'], o_data['items'],
                   o_data['total_amount']
               )
               self.orders[oid].status = o_data['status']

       except FileNotFoundError:
           pass

from store import Store
from product import Product
from cart import ShoppingCart

def main():
    store = Store()
    cart = ShoppingCart()    while True:
       print("\n电子商务系统")
       print("1. 添加商品")
       print("2. 查看商品列表")
       print("3. 添加到购物车")
       print("4. 查看购物车")
       print("5. 修改购物车")
       print("6. 创建订单")
       print("7. 查看订单")
       print("8. 保存并退出")

       choice = input("请选择操作 (1-8): ")

       if choice == '1':
           product_id = input("请输入商品ID: ")
           name = input("请输入商品名称: ")
           try:
               price = float(input("请输入价格: "))
               stock = int(input("请输入库存数量: "))
               product = Product(product_id, name, price, stock)
               store.add_product(product)
               print("商品添加成功!")
           except ValueError:
               print("输入错误!")

       elif choice == '2':
           print("\n商品列表:")
           for pid, product in store.products.items():
               print(f"ID: {pid}")
               print(f"名称: {product.name}")
               print(f"价格: ¥{product.price:.2f}")
               print(f"库存: {product.stock}")
               print()

       elif choice == '3':
           product_id = input("请输入商品ID: ")
           if product_id in store.products:
               try:
                   quantity = int(input("请输入数量: "))
                   if quantity > 0:
                       cart.add_item(product_id, quantity)
                       print("添加成功!")
                   else:
                       print("数量必须大于0!")
               except ValueError:
                   print("输入错误!")
           else:
               print("商品不存在!")

       elif choice == '4':
           print("\n购物车:")
           total = 0
           for pid, quantity in cart.items.items():
               if pid in store.products:
                   product = store.products[pid]
                   subtotal = product.price * quantity
                   total += subtotal
                   print(f"商品: {product.name}")
                   print(f"数量: {quantity}")
                   print(f"小计: ¥{subtotal:.2f}")
                   print()
           print(f"总计: ¥{total:.2f}")

       elif choice == '5':
           product_id = input("请输入要修改的商品ID: ")
           if product_id in cart.items:
               try:
                   quantity = int(input("请输入新的数量(0表示删除): "))
                   cart.update_quantity(product_id, quantity)
                   print("修改成功!")
               except ValueError:
                   print("输入错误!")
           else:
               print("购物车中没有该商品!")

       elif choice == '6':
           if not cart.items:
               print("购物车为空!")
               continue

           user_id = input("请输入用户ID: ")
           order = store.create_order(user_id, cart)
           if order:
               print(f"订单创建成功!订单号:{order.order_id}")
               cart = ShoppingCart()  # 清空购物车
           else:
               print("订单创建失败!库存不足")

       elif choice == '7':
           print("\n订单列表:")
           for oid, order in store.orders.items():
               print(f"订单号: {oid}")
               print(f"用户ID: {order.user_id}")
               print(f"总金额: ¥{order.total_amount:.2f}")
               print(f"状态: {order.status}")
               print("商品:")
               for pid, quantity in order.items.items():
                   if pid in store.products:
                       print(f"- {store.products[pid].name} x {quantity}")
               print()

       elif choice == '8':
           store.save_data()
           print("数据已保存,程序退出!")
           break

       else:
           print("无效的选择,请重试!")
if __name__ == "__main__":
   main()

界面如下

猜数字游戏


import random
import json
from datetime import datetime

class NumberGame:
    def __init__(self):
        self.target = 0
        self.max_tries = 10
        self.high_scores = []
        self.load_scores()

    def start_new_game(self):
        self.target = random.randint(1, 100)
        return self.target

    def check_guess(self, guess):
        if guess < self.target:
            return "太低了"
        elif guess > self.target:
            return "太高了"
        else:
            return "猜对了"

    def add_score(self, player_name, tries):
        score = {
            'player': player_name,
            'tries': tries,
            'date': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        }
        self.high_scores.append(score)
        self.high_scores.sort(key=lambda x: x['tries'])
        self.high_scores = self.high_scores[:10]  # 只保留前10名
        self.save_scores()

    def save_scores(self):
        with open('high_scores.json', 'w', encoding='utf-8') as f:
            json.dump(self.high_scores, f, ensure_ascii=False)

    def load_scores(self):
        try:
            with open('high_scores.json', 'r', encoding='utf-8') as f:
                self.high_scores = json.load(f)
        except FileNotFoundError:
            self.high_scores = []

from game import NumberGame

def main():
    game = NumberGame()

    while True:
        print("\n猜数字游戏")
        print("1. 开始新游戏")
        print("2. 查看排行榜")
        print("3. 退出")

        choice = input("请选择操作 (1-3): ")

        if choice == '1':
            game.start_new_game()
            tries = 0
            print(f"\n游戏开始!你有{game.max_tries}次机会猜一个1-100之间的数。")

            while tries < game.max_tries:ry:
                   guess = int(input(f"还剩{game.max_tries - tries}次机会,请猜一个数: "))
                   tries += 1

                   if guess < 1 or guess > 100:
                       print("请猜1-100之间的数!")
                       continue

                   result = game.check_guess(guess)
                   print(result)

                   if result == "猜对了":
                       print(f"恭喜你用了{tries}次猜对了!")
                       name = input("请输入你的名字记录成绩: ")
                       game.add_score(name, tries)
                       break

               except ValueError:
                   print("请输入有效的数字!")

           if tries >= game.max_tries:
               print(f"游戏结束!正确答案是{game.target}")

       elif choice == '2':
           print("\n排行榜:")
           for i, score in enumerate(game.high_scores, 1):
               print(f"{i}. {score['player']}: {score['tries']}次 ({score['date']})")

       elif choice == '3':
           print("谢谢游戏,再见!")
           break

       else:
           print("无效的选择,请重试!")
if __name__ == "__main__":
   main()

界面如下

本文展示的几个项目涵盖了日常生活中常见的管理和游戏系统,旨在帮助读者更好地理解如何运用Python进行面向对象的编程实践。每个项目都涉及到不同的功能模块与实际问题,通过这些示例,你可以学到如何设计易于维护的代码结构,如何处理用户输入、数据存储以及程序的整体逻辑。无论你是初学者还是有一定基础的开发者,这些项目都能为你提供一定的编程经验和思维方式,帮助你在未来的编程道路上更加自信地面对挑战。希望你能从这些项目中获得启发,并将所学应用到更多实际的编程任务中!


全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

三、python入门资料大全

四、python进阶资料大全

五、python爬虫专栏

六、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

七、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

八、python最新面试题

获取资料:保存二维码,微信扫下方官方二维码即可领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值