面向对象程序设计(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()

面向对象程序设计(Python实现)_第1张图片

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()

面向对象程序设计(Python实现)_第2张图片

面向对象程序设计(Python实现)_第3张图片

三、心得体会

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

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

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

你可能感兴趣的:(python,开发语言,前端)