2010-12-26 48 views
6

Tôi đang tạo một chương trình cây gia đình bằng Java hoặc ít nhất là cố gắng. Tôi đã phát triển một số lớp học:Logic cho chương trình cây gia đình

  • Person - getter và setter cho tên giới vv tuổi
  • FamilyMember - mở rộng thu khí Person và setters để thiết lập các bậc cha mẹ và trẻ em
  • gia đình - trong đó bao gồm nhiều các thành viên gia đình và các phương pháp để thêm xóa thành viên
  • FamilyTree là lớp chính để thiết lập mối quan hệ.

Tôi có hai vấn đề chính:

1) Tôi cần phải thiết lập các mối quan hệ giữa con người. Hiện tại tôi đang làm:

FamilyMember A, FamilyMember B 
B.setMother(A); 
A.setChild(B); 

Ví dụ ở trên là để thiết lập mối quan hệ con mẹ.

Điều này có vẻ rất khó khăn. Nó nhận được rất dài quanh co để thực hiện tất cả các mối quan hệ. Bất kỳ ý tưởng nào về cách triển khai nhiều mối quan hệ theo cách ít thủ tục hơn?

2) Tôi phải có thể hiển thị cây gia đình. Tôi có thể làm cái này như thế nào? Có bất kỳ lớp học tùy chỉnh nào để giúp cuộc sống dễ dàng hơn không?

Cảm ơn thời gian của bạn ...

+0

Bạn muốn hiển thị nó như thế nào? – Roman

Trả lời

4

Đối với để vẽ cấu trúc, rất khó để tránh va chạm (đường chéo) nếu bạn có hơn 2 thế hệ được hiển thị. Vì vậy, nếu ứng dụng của bạn cho phép bạn giữ cho nó xuống đến hai, đó là tuyệt vời. Tôi đã viết một số chương trình mà sử dụng loại một đại diện, hoặc theo chiều dọc:

alt text

hoặc theo chiều ngang:

alt text

Nếu bạn cần biết thêm các thế hệ hiển thị cùng một lúc, bạn sẽ cần phải đến với các đại diện khác, và họ có thể bắt đầu để có được khá thưa thớt chỉ để bạn có thể hiển thị tất cả mọi người trong cùng một thế hệ cùng cấp.

Đối với cách thể hiện mối quan hệ như cấu trúc dữ liệu - tốt, nó lộn xộn. Điều đơn giản nhất, sạch nhất là bất kỳ hai cá nhân nào tương ứng là mẹ và cha của cùng một cá nhân đều "kết hôn". Nhưng làm thế nào để bạn muốn đại diện cho nhiều đối tác, bước trẻ em và tương tự? Thật khó để trả lời mà không biết nhiều hơn về những gì chương trình của bạn phải làm. Có thể tập dữ liệu của bạn không có các biến chứng này. Nếu có, tuy nhiên, tốt hơn là suy nghĩ thông qua các trường hợp khó khăn đầu tiên - các đại diện đơn giản không cho vay mình để mở rộng dễ dàng để trang trải các trường hợp khó khăn.

Vẽ (bằng tay) một vài trong số các trường hợp khó nhất mà bạn dự đoán; sẽ đề xuất loại dữ liệu nào bạn cần để ghi lại và cách sắp xếp dữ liệu đó. Các lựa chọn bạn thực hiện khi bạn vẽ (ai đến trước, những ký hiệu và văn bản nào để sử dụng ở mỗi nút, v.v.) sẽ thông báo cho các quyết định về cấu trúc dữ liệu của bạn.

Đặt cả mẹ B và con của A có vẻ thừa - và dự phòng dẫn đến lỗi - hãy chọn một lỗi. Cái nào? Vâng, có nhiều thông tin hơn khi bạn đặt mẹ của B (giới tính của A) và chúng tôi biết bất kỳ cá nhân nào sẽ cần chính xác hai cha mẹ, so với số trẻ em nhiều hơn hoặc nhiều hơn. Vì vậy, tôi sẽ có xu hướng đi với chỉ thiết lập mẹ của B; bạn luôn có thể tìm ra con của bất kỳ cá nhân nào bằng cách lặp qua tất cả để chọn ra tập hợp có cha mẹ bằng với cá nhân được đề cập. Và thực sự lưu trữ mẹ & Mối quan hệ của cha (so với các mối quan hệ đơn giản của cha mẹ) có thể làm giảm sự trùng lặp (giả sử bạn đang lưu trữ giới tính với các cá nhân).

0

một cái gì đó như dưới đây lớp (đây là mã giả không phải là một Java Class thực)

class Node 
{ 

    public Node Parent { get;set;} 

    public List<Node> Childs {get;set;} 

} 

sử dụng

 Node ultimateGrandParent = new Node(); 
    ultimateGrandParent.Parent = null; 
    ultimateGrandParent.Childs = new List<Node>(); 
+0

Tôi muốn trao đổi nó trong một cấu trúc cây. Vấn đề chính của tôi là thiết lập các mối quan hệ. Tôi có một lớp thành viên trong gia đình cho phép một người có cha và nhiều đứa trẻ khác nhau. Im không chắc chắn làm thế nào để thực hiện cuộc hôn nhân và cũng làm thế nào để thực hiện thiết lập mối quan hệ cho nhiều trẻ em với cùng cha mẹ ... Cảm ơn bạn đã phản ứng nhanh như vậy !! – dr85

0

Bất kỳ ý tưởng nào về cách triển khai nhiều mối quan hệ theo cách thủ tục ít hơn ?

Có, bạn có thể tự đại diện cho các mối quan hệ dưới dạng đối tượng. Bất kỳ hai người có thể có không hoặc nhiều mối quan hệ.

Năm trước, tôi đã làm việc trên một hệ thống hồ sơ cảnh sát đã thực hiện điều này thường hơn cho các hiệp hội giữa hai người trong chỉ mục tên chủ của nó.

Các mối quan hệ có thể được hướng dẫn. Mẹ --- là mẹ của -> Con.

Mối quan hệ có thể phân cấp. Một người mẹ là cha mẹ.

2) Tôi có thể hiển thị cây gia đình . Tôi có thể làm cái này như thế nào? Có phải có bất kỳ lớp học tùy chỉnh nào ở đó để giúp cuộc sống dễ dàng hơn không?

Có, có mã hiện có hỗ trợ hiển thị biểu đồ. Cá nhân tôi đã có trải nghiệm tốt khi làm việc với prefuse visualization toolkit.

Bạn có thể tìm thấy số lần xem trước được ưu tiên treeview; hãy thử nhấp vào các nút trong this example. (Tuy nhiên, nếu bạn đang sử dụng phần mềm của mình cho các gia đình không phải là của riêng bạn, thì cây có thể không đủ.)

Các vấn đề liên quan