编写一个宠物商店程序,要求如下:
- 假设你拥有一家宠物商店,该店能够寄养一批宠物(用数组存储,用常量设置数组最大值,如10),通过程序实现该宠物商店的宠物管理。
- 程序实现具体宠物寄养功能(寄养功能可理解为宠物对象创建,如:用户输入1,表示寄养一只狗;输入2,表示寄养一只猫;输入3,表示寄养一只鸟),并在寄养时对该宠物信息登记并命名,最后在内存中保存这些创建的宠物。
- 程序提供针对名称的检索功能,即,根据用户提供的名称在寄养的宠物中查找宠物并输出该宠物的类型及创建序号。
- 程序提供对宠物的信息输出功能(信息输出,如:寄养序号为1,名称为大黄的宠物狗,可以输出“1 狗 大黄”),可根据类型输出所有类型相同的宠物;并可根据寄样序号,输出该序号之前所有当前在店中寄样的宠物。
- 构建所有宠物的父类:Pet,该类中定义宠物的基本属性及方法。
- 构建基本宠物类:狗(Dog)、猫(Cat)、鸟(Bird)等。
- 可通过多态实现对任意宠物的寄养。
- 定义静态方法,该方法可以对传入的对象实例进行判断,并输出该对象实例的类型。
- 创建“领走宠物”类,即寄养时间到达后,用户可以领走自己所寄养的宠物。
- 构建测试类,该类实现与用户的交互,向用户提示操作信息,并接收用户的操作请求。
程序应具有良好的类层次结构,良好的人机交互性能,即:程序应向用户提示功能说明,并可根据用户的功能选择,执行对应的功能,并给出带详细描述信息的最终执行结果。
其实这个作业并不难,但却能把第四章所学的综合起来,算一个好题了。写的不久,但因为希望程序能像一个真实的小产品一样具有较好的层次和交互能力,改了蛮久的。代码如下:
package 宠物管理;
import java.util.*;
abstract class Pet {
public static int id = 1;
private String name;
public Pet(String name) {
this.name = name;
}
public String GetName() {
return this.name;
}
public static String judgetype(Pet pet) {
if(pet instanceof Dog)
return "狗";
else if(pet instanceof Cat)
return "猫";
else
return "鸟";
}
public abstract int getid();
}
class Dog extends Pet {
int num=id++;
public Dog(String name) {
super(name);
}
public int getid() {
return num;
}
}
class Cat extends Pet {
int num=id++;
public Cat(String name) {
super(name);
}
public int getid() {
return num;
}
}
class Bird extends Pet {
int num=id++;
public Bird(String name) {
super(name);
}
public int getid() {
return num;
}
}
public class PETS {
public static void main(String[] args) {
List<Pet> pets = new ArrayList<Pet>();
while(true) {
System.out.println("您好,请输入数字以进行相应的操作:\n1.寄养宠物\n2.查询宠物信息\n3.领走宠物\n4.退出");
Scanner sc = new Scanner(System.in);
int choice = sc.nextInt();
if(choice == 1) { //寄养宠物
System.out.println("1.寄养一只狗\n2.寄养一只猫\n3.寄养一只鸟\n4.返回上一步");
int choice2 = sc.nextInt();
if(choice2 == 1) {
System.out.println("请输入狗的名字:");
Pet dog = new Dog(sc.next());
pets.add(dog);
System.out.println("寄养成功!");
}
else if(choice2 == 2) {
System.out.println("请输入猫的名字:");
Pet cat = new Cat(sc.next());
pets.add(cat);
System.out.println("寄养成功!");
}
else if(choice2 == 3){
System.out.println("请输入鸟的名字:");
Pet bird = new Bird(sc.next());
pets.add(bird);
System.out.println("寄养成功!");
}
else
continue;
}
else if(choice == 2) { //查询宠物信息
System.out.println("1.名称\n2.类型\n3.序号(从1开始计数)\n4.输出当前所在的所有宠物信息\n5.返回上一步");
int choice2 = sc.nextInt();
if(choice2 == 1) {
System.out.println("请输入宠物名字:");
String name = sc.next();
for(int i=0;i!=pets.size();++i) {
if(pets.get(i).GetName().equals(name))
System.out.println("类型:"+Pet.judgetype(pets.get(i))+" 序号:"+pets.get(i).getid());
}
}
else if(choice2 == 2) {
System.out.println("请输入宠物类型:");
String type = sc.next();
for(int i=0;i!=pets.size();++i) {
if(Pet.judgetype(pets.get(i)).equals(type))
System.out.println("序号:"+pets.get(i).getid()+" 名字:"+pets.get(i).GetName());
}
}
else if(choice2 == 3){
System.out.println("请输入宠物序号:");
int ID= sc.nextInt();
for(int i=1;i!=ID;++i) { //输出该序号前所有宠物
for(int j=0;j!=pets.size();++j) {
if(pets.get(j).getid()==i)
System.out.println("序号:"+pets.get(j).getid()+" 名字:"+pets.get(j).GetName());
}
}
}
else if(choice2 == 4){
for(int i=0;i!=pets.size();++i) {
System.out.println("序号:"+pets.get(i).getid()+" 类型:"+Pet.judgetype(pets.get(i))+" 名字:"+pets.get(i).GetName());
}
}
else
continue;
}
else if(choice == 3) { //领走宠物
System.out.println("1.输入宠物序号:\n2.返回上一步");
int choice2 = sc.nextInt();
if(choice2 == 1) {
System.out.println("宠物序号为:");
int ID = sc.nextInt();
for(int i=0;i!=pets.size();++i) {
if(pets.get(i).getid()==ID) {
System.out.println("序号:"+pets.get(i).getid()+" 该宠物成功领走");
pets.remove(i); break;
}
}
}
else
continue;
}
else
break;
}
System.out.println("欢迎下次光临!");
}
}