PTA Assignment: Library Management System
在本次练习中,您将使用面向对象编程(OOP)原则在Java中创建一个图书馆管理系统。该系统将模拟图书馆内的交互,包括管理图书馆物品、图书管理员和图书馆会员。此作业的重点是帮助您理解访问修饰符(public、protected、private)以及OOP中的各种关系类型,包括关联、泛化和依赖。
要求
设计并实现以下Java类:
1. LibraryItem(超类) - 15分
这是一个抽象类,表示图书馆中的任何物品,例如书籍或杂志。
属性:
title(protected): 图书馆物品的标题。id(private): 物品的唯一标识符。isAvailable(protected): 指示物品是否可借的标志。
方法:
构造函数:用于初始化
title、id,并将isAvailable设置为true。isAvailable()(public): 返回物品是否可借。displayInfo()(public,abstract): 抽象方法,由子类实现以显示物品信息。
2. Book(LibraryItem的子类) - 10分
代表图书馆中的一本书,继承自LibraryItem。
属性:
author(private): 书的作者。
方法:
构造函数:用于初始化
title、id和author。displayInfo(): 重写LibraryItem的抽象方法以显示书籍详情。
3. Magazine(LibraryItem的子类) - 10分
代表图书馆中的一本杂志,继承自LibraryItem。
属性:
issueNumber(private): 杂志的期号。
方法:
构造函数:用于初始化
title、id和issueNumber。displayInfo(): 重写LibraryItem的抽象方法以显示杂志详情。
4. Library - 15分
Library类包含一组图书馆物品,并提供管理它们的方法。
属性:
items(private):LibraryItem对象的列表。
方法:
构造函数:用于初始化列表。
addItem()(public): 添加一个新物品到图书馆的物品列表中。listItems()(public): 列出图书馆中的所有物品,显示其详情。checkOutItem()(public): 接受一个LibraryItem作为参数,如果可借,将其标记为已借出(将isAvailable设置为false)。
5. Librarian - 10分
代表负责管理图书馆物品的图书馆工作人员。此类展示了与Library类的依赖关系。
属性:
name(private): 图书管理员的姓名。
方法:
构造函数:用于初始化图书管理员的姓名。
addItemToLibrary()(public): 接受一个Library和一个LibraryItem作为参数,并将物品添加到图书馆中。
6. Member - 10分
代表可以借用物品的图书馆会员。此类也展示了与Library类的依赖关系。
属性:
memberId(private): 会员的唯一标识符。
方法:
构造函数:用于初始化
memberId。borrowItem()(public): 接受一个Library和一个LibraryItem。使用图书馆的checkOutItem()方法借出物品,并显示借出是否成功。
附加任务:类图 - 20分
使用draw.io或其他图表工具设计一个类图来说明您的图书馆管理系统结构。图中应显示:
所有类及其属性和方法。
每个属性和方法的访问修饰符。
类之间的关系:
关联:
Library和LibraryItem之间的关联。泛化:
LibraryItem及其子类之间的泛化。依赖:
Librarian/Member与Library之间的依赖关系。
将您的类图保存为.png或.jpg图像,并随您的提交一起提交。
说明
设计类:考虑每个类的目的以及如何设置访问修饰符。使用private封装数据,使用protected允许子类访问,使用public提供对需要从类外部访问的方法的受控访问。
实现关系:
关联:实现
Library和LibraryItem之间的关联,因为图书馆维护一个物品列表。泛化:通过让
Book和Magazine继承自LibraryItem实现泛化。依赖:实现
Librarian和Member对Library的依赖关系,以执行操作。
编写主类:创建一个LibraryManagementSystem类以测试您的实现。在此类中,您应:
创建
Library、Book、Magazine、Librarian和Member的实例。将书籍和杂志添加到图书馆。
让图书管理员将物品添加到图书馆。
让会员借用物品并列出图书馆中的物品。
设计类图:在类图中创建类结构和关系的可视化表示。
评分
本次练习将根据以下内容评分:
提交
提交以下文件:
每个类的Java文件,包括主类
LibraryManagementSystem。您的类图作为
.png或.jpg图像。
提示
在
LibraryItem中对子类需要访问的属性使用protected。每个子类中的
displayInfo()应包括每种物品类型的具体细节(例如,书籍的作者,杂志的期号)。确保主类(
LibraryManagementSystem)具有清晰的步骤,以展示类之间的交互并测试其关系。
UML类图
