面向对象程序设计(Python实现)

一、主要目的

1.理解类与对象的概念,掌握类的定义和使用方法。

2.熟悉类的成员和方法的类型,掌握其定义和使用方法。

3.掌握类的属性及其使用方法。

4.掌握派生类的创建和使用方法。

5.理解类的多态含义,掌握类的多态实现方法。

6.掌握抽象类和抽象方法的使用方法。

二、主要内容和结果展示:

1.编程实现如下功能:
(1)定义一个抽象类 Shape,在抽象类 Shape 中定义求面积 getArea()和周长 getPerimeter()的抽象方法。
(2)分别定义继承抽象类 Shape的3个子类即 Triangle、Rectangle 和 Circle, 在这3个子类中重写 Shape 中的方法 getArea()和 getPerimeter ()。
(3)创建类 Triangle、Rectangle、Circle的对象,对3个类中的方法进行调用测试。
import abc

import math

class Shape(metaclass=abc.ABCMeta ):

    @abc.abstractmethod

    def getArea(self):

        pass

    def getPerimeter(self):

        pass



class Triangle(Shape):

    def __init__(self, a, b, c):

        self.a = a

        self.b = b

        self.c = c

    def getArea(self):

        self.p = (self.a + self.b + self.c)/2

        print("三角形面积为",math.sqrt(self.p * (self.p - self.a) * (self.p - self.b) * (self.p - self.c)) )

    def getPerimeter(self):

        print("三角形周长为",self.a + self.b + self.c)



class Rectangle(Shape):

    def __init__(self, a, b):

        self.a = a

        self.b = b

    def getArea(self):

        print("长方形面积为",self.a * self.b )

    def getPerimeter(self):

        print("长方形周长为",2 * (self.a + self.b))



class Circle(Shape):

    def __init__(self, a):

        self.a = a

    def getArea(self):

        print("圆形面积为",3.14 * self.a**2 )

    def getPerimeter(self):

        print("圆形周长为",2 * 3.14 *self.a)



if __name__ == '__main__':

    c1 = Triangle(3, 4, 5)

    c2 = Rectangle(1, 2)

    c3 = Circle(1)

    c1.getArea()

    c1.getPerimeter()

    c2.getArea()

    c2.getPerimeter()

    c3.getArea()

    c3.getPerimeter()

2.设计一个“超市进销存管理系统”,要求如下:
(1)系统包括 7种操作,分别是:1.查询所有商品;2.添加商品;3.修改商品;4。删除商品;5。卖出端口;6.汇总;-1。退出系统。
(2)选择操作序号 “1”,显示所有商品。
(3)选择操作序号 “2”,添加新的商品(包括商品名称、数量和进货价格)。
(4)选择操作序号 “3”,修改商品。
(5)选择操作序号 “4”,删除商品。
(6)选择操作序号 “5”,卖出商品(包括商品名称、数量和售出价格)。
(7)选择操作序号 “6”,汇总当天卖出商品,包括每种销售商品名称、数量、进货总价、销售总价等。
(8)选择操作序号 “-1”,退出系统。
class Thing:

    def __init__(self, name, number, price):

        self.name = name

        self.number = number

        self.price = price

        self.sellnum = 0

        self.price2 = 0

    def __str__(self):

        return '名称:%s'%self.name

    def Print(self):

        print('名称:%s, 卖出数量:%d,进货总价:%d,售出总价:%d。'%(self.name,self.sellnum, self.price * self.sellnum, self.sellnum * self.price2  ))



class ThingManager:

    things= []

    def init(self):

        self.things.append(Thing('矿泉水', 100, 1.5))

        self.things.append(Thing('小熊饼干', 20, 10))

        self.things.append(Thing('薯片', 50, 14))

        self.things.append(Thing('餐巾纸', 100, 1))

    def Menu(self):

        self.init()

        print("\"超市进销存管理系统\"")

        print("1.查询所有商品;")

        print("2.添加商品;")

        print("3.修改商品;")

        print("4.删除商品;")

        print("5.卖出商品;")

        print("6.汇总;")

        print("-1.退出系统。")

        while(True):

             option = int(input("请选择操作序号:"))

             if option == 1:

                 self.Print()

             if option == 2:

                 self.Add()

             if option == 3:

                 self.Change()

             if option == 4:

                 self.Del()

             if option == 5:

                 self.Sell()

             if option == 6:

                 self.Conclusion()

             if option == -1:

                 print("谢谢使用!")

                 break

    def Print(self):

        for i in self.things:

            print(i)

    def Add(self):

        name = input("请输入添加的商品的名称:")

        number, price = map(int, input("添加商品的数量和进货价格:").split())

        self.things.append(Thing(name, number, price))

    def Change(self):

        flag = 0

        name = input("请输入要修改的商品的名称:")

        nam = input("请输入修改后的商品的名称:")

        number, price = map(int, input("修改后商品的数量和进货价格:").split())

        for i in self.things:

            if i.name == name:

                flag = 1

                i.name = nam

                i.number = number

                i.price  = price

        if flag == 0:

            print("没有此商品!")

    def Del(self):

        flag = 0

        name = input("请输入要删除的商品的名称:")

        for i in self.things:

            if i.name == name:

                flag = 1

                self.things.remove(i)

        if flag == 0:

            print("没有此商品!")

    def Sell(self):

        flag = 0

        name = input("请输入要卖出商品的名称:")

        number, price = map(int, input("卖出商品的数量和售出价格:").split())

        for i in self.things:

            if i.name == name:

                flag = 1

                i.price2 = price

                i.sellnum += number

                if i.number - i.sellnum < 0:

                    print("库存不够!")

        if flag == 0:

            print("没有此商品!")

    def Conclusion(self):

        for i in self.things:

            i.Print()



if __name__ == "__main__":

    thing = ThingManager()

    thing.Menu()

三、心得体会

  通过这次实验,我对面向对象编程的核心概念有了更深入的理解。在编写抽象类Shape和它的具体实现类Triangle、Rectangle和Circle的过程中,我认识到了抽象类的重要性,它为不同的具体形状提供了一个统一的接口。我实现的每个形状类都遵循了相同的模式,这强调了面向对象设计中接口一致性的重要性。定义和实现getArea()和getPerimeter()方法时,我体会到了多态的实用性。每个子类都有自己的实现方式,但是外部调用时并不需要关心具体的实现细节,这就是多态的魅力所在。

  通过超市进销存管理系统的设计与实现,我进一步锻炼了我的编程能力和系统设计能力。我学习到了如何维护一个商品列表,并实现了添加、修改、删除和卖出商品等功能。实验过程中,我也意识到了异常处理的重要性,比如在商品卖出时,如果库存不足,程序需要给出合适的提示。此外,我也认识到了代码的可维护性和可扩展性。

  总体来说,这次实验不仅仅提高了我的编程技能,也加深了我对面向对象编程概念的理解,特别是抽象类、派生类、多态等概念。我意识到了继续学习和实践这些概念的必要性,以便能够在未来的软件开发工作中更加高效和自信。

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、 一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要支持运算符+、-),实现该类对象与标量的乘、除运算(要支持运算符*、/),以及向量长度的计算(要使用属性实现)。 2、 编程实现如下功能: (1)定义一个抽象类Shape,在抽象类 Shape定义面积 getArea()和周长 getPerimeter()的抽象方法。 (2)分别定义继承抽象类Shape的3个子类即Triangle、Rectangle、和Circle,在这3个子类重写 Shape的方法getArea()和 getPerimeter( )。 (3)创建类Triangle、 Rectangle、 Circle的对象,对3个类的方法进行调用测试。 3、使用第六章(王雷春版)介绍的知识设计一个“书籍出租管理系统”,该系统包括以下功能。 (1) 菜单项“1”:显示书籍(包括书籍名称、价格和借出状态)。 (2) 菜单项“2”:增加书籍(包括书籍名称和价格)。 (3) 菜单项“3”:借出书籍(包括借出书籍名称和借出天数)。 (4) 菜单项“4”:归还书籍(包括归还书籍名称和应付的租书费)。 (5) 菜单项“5”:统计书籍(包括借出书籍册数、未借出书籍册数和总册数)。 (6) 菜单项“-1”:退出系统。 体会利用面向对象编程的思想。 4、设计一个“超市进销存管理系统”,要如下: (1)系统包括7种操作,分别是:1查询所有商品;2添加商品;3修改商品;4.删除商品;5卖出端口;6.汇总;-1.退出系统。 (2)选择操作序号“1”,显示所有商品 (3)选择操作序号“2”,添加新的商品(包括商品名称、数量和进货价格)。 (4)选择操作序号“3”,修改商品 (5)选择操作序号“4”,删除商品 (6)选择操作序号“5”,卖出商品(包括商品名称、数量和售出价格)。 (7)选择操作序号“6”,汇总当天卖出商品,包括每种销售商品名称、数量、进货总价、销售总价等。 (8)选择操作序号“-1”,退出系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xixixi77777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值