宠物店系统
最编程
2024-05-23 11:27:56
...
要求:
实现一个宠物商店,在宠物商店中可以有多种宠物(由商店决定宠物的数量,提示:构造方法 传入数量),试着表示出这种关系,并要求可以根据宠物的关键字查找相应的宠物信息。所需 要的宠物信息自行设计。(猫,狗,老鼠)
实现功能:
添加宠物,删除宠物 ,查找宠物信息,修改宠物信息 ;
角色名 | 类或者抽象类 | 成员信息 |
---|---|---|
宠物商店 | 类 | 成员变量:宠物数组,宠物数量<br />成员方法:添加宠物,删除宠物,<br />查找宠物信息,修改宠物信息成员 |
宠物 | 抽象类 | 成员变量:名称、颜色、年龄<br />成员方法:吃、睡; |
猫 | 类 | 继承宠物类 |
狗 | 类 | 继承宠物类 |
老鼠 | 类 | 继承宠物类 |
基本代码实现:
商店类
package Temp.src.PetShop;
import java.util.Scanner;
public class PetShop {
public Pet[] petList;
public int petNum;
public PetShop(int petNum) {
this.petNum = petNum;
petList = new Pet[petNum];
}
public void showAll() {
System.out.println("当前宠物店还有:");
for (Pet p : petList) {
if (p != null) {
p.show();
}
}
}
public boolean petAdd(Pet pet) {
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == null) {
petList[i] = pet;
return true;
}
}
System.err.println("宠物店已满员...");
}
System.err.println("请输入正确的宠物...");
return false;
}
public boolean petDel(Pet pet) { //
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == pet) {
petList[i] = null;
return true;
}
}
}
System.err.println("删除宠物失败...");
return false;
}
public Pet petFind(Pet pet) {
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == pet) {
return petList[i];
}
}
}
System.err.println("找不到该宠物...");
return null;
}
public Pet petFind(String str) { // 关键字查找
Scanner scan = new Scanner(System.in);
if (str != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == null) {
break;
}
if (petList[i].name.equals(str)) { // 名字
System.out.print("找到了宠物:");
petList[i].show();
System.out.print("你要的是这只宠物吗?(Y/y)");
String temp = scan.next();
if (temp.equals("Y") || temp.equals("y")) {
scan.close();
return petList[i];
}
}
if (petList[i].color.equals(str)) { // 颜色
System.out.print("找到了宠物:");
petList[i].show();
System.out.println("你要的是这只宠物吗?(Y/y)");
String temp = scan.next();
if (temp.equals("Y") || temp.equals("y")) {
scan.close();
return petList[i];
}
}
}
System.err.println("找不到该宠物...");
}
scan.close();
return null;
}
public void petChanged(String str, Pet pet) {
Pet p = petFind(str);
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == p) {
petList[i] = pet;
System.err.println("修改成功...");
}
}
}
System.err.println("修改宠物失败...");
}
}
宠物类(抽象)
package Temp.src.PetShop;
public abstract class Pet {
public String name;
public String color;
public int age;
public Pet(String name, String color, int age) {
this.name = name;
this.color = color;
this.age = age;
}
public abstract void eat();
public abstract void sleep();
@Override
public String toString() {
return "Pet [age=" + age + ", color=" + color + ", name=" + name + "]";
}
public void show() {
if (this != null) {
System.out.println("名字:" + name + " 颜色:" + color + " 年龄:" + age);
}
}
}
三个子类(猫、狗、老鼠)
package Temp.src.PetShop;
public class Cat extends Pet {
public Cat(String name, String color, int age) {
super(name, color, age);
}
@Override
public void eat() {
System.out.println("猫" + name + "吃鱼...");
}
@Override
public void sleep() {
System.out.println("猫" + name + "睡觉...");
}
}
package Temp.src.PetShop;
public class Dog extends Pet {
public Dog(String name, String color, int age) {
super(name, color, age);
}
@Override
public void eat() {
System.out.println("狗" + name + "吃肉...");
}
@Override
public void sleep() {
System.out.println("狗" + name + "睡觉...");
}
}
package Temp.src.PetShop;
public class Rat extends Pet {
public Rat(String name, String color, int age) {
super(name, color, age);
}
@Override
public void eat() {
System.out.println("老鼠" + name + "吃奶酪...");
}
@Override
public void sleep() {
System.out.println("老鼠" + name + "睡觉...");
}
}
测试类
package Temp.src.PetShop;
public class Demo {
public static void main(String[] args) {
PetShop ps = new PetShop(20);
ps.petAdd(new Cat("胖橘", "橙", 4));
ps.petAdd(new Dog("柯基", "橙", 5));
ps.petAdd(new Rat("风车车", "橙", 2));
//ps.petFind("橙");
//ps.petDel(ps.petFind("柯基"));
//ps.petChanged("风车车", new Cat("假老练", "蓝", 6));
/**
* !无法同时使用含有petFind相关的方法,但单独使用这些方法都没有问题
* !如果使用Scanner从终端输入确认要寻找的目标,将存在该问题
* !理由是Scanner类中的迭代器(iterator)的next()方法不应该在一个循环中多次使用
* !暂无合理解决办法,除非不在终端输入确认目标
*/
ps.showAll();
}
}
存在的Bug:
package Temp.src.PetShop;
import java.util.Scanner;
public class PetShop {
public Pet[] petList;
public int petNum;
public PetShop(int petNum) {
this.petNum = petNum;
petList = new Pet[petNum];
}
public void showAll() {
System.out.println("当前宠物店还有:");
for (Pet p : petList) {
if (p != null) {
p.show();
}
}
}
public boolean petAdd(Pet pet) {
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == null) {
petList[i] = pet;
return true;
}
}
System.err.println("宠物店已满员...");
}
System.err.println("请输入正确的宠物...");
return false;
}
public boolean petDel(Pet pet) { //
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == pet) {
petList[i] = null;
return true;
}
}
}
System.err.println("删除宠物失败...");
return false;
}
public Pet petFind(Pet pet) {
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == pet) {
return petList[i];
}
}
}
System.err.println("找不到该宠物...");
return null;
}
public Pet petFind(String str) { // 关键字查找
Scanner scan = new Scanner(System.in);
if (str != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == null) {
break;
}
if (petList[i].name.equals(str)) { // 名字
System.out.print("找到了宠物:");
petList[i].show();
System.out.print("你要的是这只宠物吗?(Y/y)");
String temp = scan.next();
if (temp.equals("Y") || temp.equals("y")) {
scan.close();
return petList[i];
}
}
if (petList[i].color.equals(str)) { // 颜色
System.out.print("找到了宠物:");
petList[i].show();
System.out.println("你要的是这只宠物吗?(Y/y)");
String temp = scan.next();
if (temp.equals("Y") || temp.equals("y")) {
scan.close();
return petList[i];
}
}
}
System.err.println("找不到该宠物...");
}
scan.close();
return null;
}
public void petChanged(String str, Pet pet) {
Pet p = petFind(str);
if (pet != null) {
for (int i = 0; i < petNum; i++) {
if (petList[i] == p) {
petList[i] = pet;
System.err.println("修改成功...");
}
}
}
System.err.println("修改宠物失败...");
}
}
package Temp.src.PetShop;
public abstract class Pet {
public String name;
public String color;
public int age;
public Pet(String name, String color, int age) {
this.name = name;
this.color = color;
this.age = age;
}
public abstract void eat();
public abstract void sleep();
@Override
public String toString() {
return "Pet [age=" + age + ", color=" + color + ", name=" + name + "]";
}
public void show() {
if (this != null) {
System.out.println("名字:" + name + " 颜色:" + color + " 年龄:" + age);
}
}
}
package Temp.src.PetShop;
public class Cat extends Pet {
public Cat(String name, String color, int age) {
super(name, color, age);
}
@Override
public void eat() {
System.out.println("猫" + name + "吃鱼...");
}
@Override
public void sleep() {
System.out.println("猫" + name + "睡觉...");
}
}
package Temp.src.PetShop;
public class Dog extends Pet {
public Dog(String name, String color, int age) {
super(name, color, age);
}
@Override
public void eat() {
System.out.println("狗" + name + "吃肉...");
}
@Override
public void sleep() {
System.out.println("狗" + name + "睡觉...");
}
}
package Temp.src.PetShop;
public class Rat extends Pet {
public Rat(String name, String color, int age) {
super(name, color, age);
}
@Override
public void eat() {
System.out.println("老鼠" + name + "吃奶酪...");
}
@Override
public void sleep() {
System.out.println("老鼠" + name + "睡觉...");
}
}
package Temp.src.PetShop;
public class Demo {
public static void main(String[] args) {
PetShop ps = new PetShop(20);
ps.petAdd(new Cat("胖橘", "橙", 4));
ps.petAdd(new Dog("柯基", "橙", 5));
ps.petAdd(new Rat("风车车", "橙", 2));
//ps.petFind("橙");
//ps.petDel(ps.petFind("柯基"));
//ps.petChanged("风车车", new Cat("假老练", "蓝", 6));
/**
* !无法同时使用含有petFind相关的方法,但单独使用这些方法都没有问题
* !如果使用Scanner从终端输入确认要寻找的目标,将存在该问题
* !理由是Scanner类中的迭代器(iterator)的next()方法不应该在一个循环中多次使用
* !暂无合理解决办法,除非不在终端输入确认目标
*/
ps.showAll();
}
}
存在的Bug:
在测试中,petFind方法、petDel方法、petChanged方法无法实现同时使用,原因是抛出了NoSuchElementException异常,参考****的相关问题,得出的解释是Scanner方法中迭代器(iterator)的next()方法在同一个循环中多次使用了,由于需要确认删除的目标,目前暂无合理解决办法。
NoSuchElementException异常的处理_何日可揽雀捉鳖的博客-****博客_nosuchelementexception
java为何抛出NoSuchElementException异常?_迁就100-****博客_nosuchelementexception
推荐阅读
-
小米 13T Pro 系统典藏版:性能与拍照的极致融合,值得你升级的系统 ROM
-
ubuntu22.04 无法访问系统设置
-
计算机毕业设计 基于深度学习的短视频内容理解与推荐系统的设计与实现 Python+Django+Vue 前后端分离,附源代码 讲座 文档
-
系统架构师 - 论文题目(2022 年下半年)
-
更新 - Python 操作系统
-
基于 STM32 微控制器的温室物理无公害生长系统-1 物理农业的兴起
-
如何使用 ssm 实现个人日常事务管理系统 + vue
-
系统架构师 ③:数据块系统
-
yolov8/9/11 模型在中医舌象分类中的应用 [代码 + 数据集 + python 环境 + GUI 系统]。
-
SSM 超市库存管理系统源代码