面向对象程序设计(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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!