編寫一個寵物商店程序,要求如下:
- 假設你擁有一家寵物商店,該店能夠寄養一批寵物(用數組存儲,用常量設置數組最大值,如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("歡迎下次光臨!");
}
}