1.理解类与对象的概念,掌握类的定义和使用方法。
2.熟悉类的成员和方法的类型,掌握其定义和使用方法。
3.掌握类的属性及其使用方法。
4.掌握派生类的创建和使用方法。
5.理解类的多态含义,掌握类的多态实现方法。
6.掌握抽象类和抽象方法的使用方法。
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()
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()方法时,我体会到了多态的实用性。每个子类都有自己的实现方式,但是外部调用时并不需要关心具体的实现细节,这就是多态的魅力所在。
通过超市进销存管理系统的设计与实现,我进一步锻炼了我的编程能力和系统设计能力。我学习到了如何维护一个商品列表,并实现了添加、修改、删除和卖出商品等功能。实验过程中,我也意识到了异常处理的重要性,比如在商品卖出时,如果库存不足,程序需要给出合适的提示。此外,我也认识到了代码的可维护性和可扩展性。
总体来说,这次实验不仅仅提高了我的编程技能,也加深了我对面向对象编程概念的理解,特别是抽象类、派生类、多态等概念。我意识到了继续学习和实践这些概念的必要性,以便能够在未来的软件开发工作中更加高效和自信。