寫一個多級菜單

public class Menu implements Comparable<Menu>{
	private int mid;
	private String name;
	private TreeSet<Menu> childMenu;
	private Menu parent;
	public Menu(int mid, String name) {
		super();
		this.mid = mid;
		this.name = name;
		//假設每個人都有子菜單,防止出現錯誤
		childMenu=new TreeSet<Menu>();
	}
	public int getMid() {
		return mid;
	}
	public void setMid(int mid) {
		this.mid = mid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public TreeSet<Menu> getChildMenu() {
		return childMenu;
	}
	public void setChildMenu(TreeSet<Menu> childMenu) {
		this.childMenu = childMenu;
	}
	public Menu getParent() {
		return parent;
	}
	public void setParent(Menu parent) {
		this.parent = parent;
	}
	@Override
	public String toString() {
		return "mid=" + mid + ", name=" + name + ", childMenuNum=" + childMenu.size() + ", parent=" + parent.getName();
	}
	@Override
	public int hashCode() {
		return Objects.hash(mid,name);
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		Menu other = (Menu) obj;
		if(this.getMid()==other.getMid()&&this.getName().equals(other.getName()))
			return true;
		return false;
	}
	@Override
	public int compareTo(Menu o) {
		// TODO Auto-generated method stub
		return this.mid-o.mid;
	}
	
	
	
	
}

public class MenuUtil {
	public static void show(Menu menu)
	{
		show(menu,0);
	}
	// 顯示本級及下級所有菜單信息
	public static void show(Menu menu,int n) {
		if(menu==null)
				throw new RuntimeException("空指針異常");
		for(int i=0;i<n;i++)
			System.out.print("\t");
		// 顯示本級信息
		System.out.println(menu.toString());
		// 得到下級信息
		TreeSet<Menu> set1 = (TreeSet<Menu>) menu.getChildMenu();
		for (Menu s : set1) {
			show(s,n+1);
		}
	}

	// 給指定菜單添加直接子菜單
	public static void add(Menu menu, Menu child) {
		// 得到子菜單
		TreeSet<Menu> set1 = (TreeSet<Menu>) menu.getChildMenu();
		// 添加子菜單
		if (menu.getMid() < child.getMid())
			throw new RuntimeErrorException(null, "mid比父類的mid大");
		if (set1.add(child) == false) {
			throw new RuntimeErrorException(null, "menu重複");
		}

		// 設置子菜單的父類
		child.setParent(menu);
	}

	// 刪除子菜單
	public static Menu delete(Menu menu, int mid) {
		// 得到子菜單
		TreeSet<Menu> set1 = (TreeSet<Menu>) menu.getChildMenu();
		for (Menu s : set1) {
			if (s.getMid() == mid) {
				set1.remove(s);
				return s;
			}
		}
		return null;
	}
}

public class MenuTest {
	public static void main(String[] args) {
		//定級菜單
		Menu m=new Menu(10,null);
		//一級菜單
		Menu m1=new Menu(9,"child1");
		Menu m4=new Menu(8,"child4");
		Menu m5=new Menu(7,"child5");
		//二級菜單
		Menu m2=new Menu(5,"child2");
		//三級菜單
		Menu m3=new Menu(3,"child3");
		//設置m2,m4爲m1的子節點
		TreeSet<Menu> set1=new TreeSet<>();
		set1.add(m2);
		set1.add(m4);
		m1.setParent(m);
		m4.setParent(m1);
		m1.setChildMenu(set1);
		
		//設置m3爲m2的子節點
		TreeSet<Menu> set2=new TreeSet<>();
		set2.add(m3);
		m2.setParent(m1);
		m2.setChildMenu(set2);
		m3.setParent(m2);
		
		
		//顯示第一級菜單
		System.out.println("查詢:");
		MenuUtil.show(m1);
		System.out.println("添加:");
		//添加子菜單
		MenuUtil.add(m1, m5);
		MenuUtil.show(m1);
		//刪除子菜單
		if(MenuUtil.delete(m1, 7)!=null){
			System.out.println("刪除成功!");
		}else{
			System.out.println("刪除失敗!");
		}
		System.out.println("刪除:");
		MenuUtil.show(m1);
	}
}

**查詢:
mid=9, name=child1, childMenuNum=2, parent=null
	mid=5, name=child2, childMenuNum=1, parent=child1
		mid=3, name=child3, childMenuNum=0, parent=child2
	mid=8, name=child4, childMenuNum=0, parent=child1
添加:
mid=9, name=child1, childMenuNum=3, parent=null
	mid=5, name=child2, childMenuNum=1, parent=child1
		mid=3, name=child3, childMenuNum=0, parent=child2
	mid=7, name=child5, childMenuNum=0, parent=child1
	mid=8, name=child4, childMenuNum=0, parent=child1
刪除成功!
刪除:
mid=9, name=child1, childMenuNum=2, parent=null
	mid=5, name=child2, childMenuNum=1, parent=child1
		mid=3, name=child3, childMenuNum=0, parent=child2
	mid=8, name=child4, childMenuNum=0, parent=child1**
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章