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

2024-01-08 11:05:54

一、主要目的

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()方法时,我体会到了多态的实用性。每个子类都有自己的实现方式,但是外部调用时并不需要关心具体的实现细节,这就是多态的魅力所在。

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

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

文章来源:https://blog.csdn.net/xixixi7777/article/details/135446156
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。