1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ Án Nghiên cứu cấu trúc dữ liệu bài toán cây gia phả

27 4K 12

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 688 KB

Nội dung

Sau khi học môn “Cấu trúc dữ liệu ” và tiếp đến là môn “Phân tích và thiết kế giải thuật”, chúng em được giao thực hiện đồ án môn học “Cấu trúc dữ liệu và thuật toán ”để giải quyết một

Trang 1

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN



BÁO CÁO ĐỒ ÁN: CẤU TRÚC DỮ LIỆU & THUẬT TOÁN

GVHD : PHAN THANH TAO NHÓM : 12 LỚP : 07T2

SVTH : Trần Thanh Liêm Nguyễn Hữu Nhân Lê Phương Tiến

Đà Nẵng, tháng 12 năm 2009

Trang 2

Mục lục

Mục lục 2

Lời nói đầu 3

I Giới thiệu đề tài và đề tài 4

Giới thiệu đề tài : 4

Đề tài 4

II Nghiên cứu lý thuyết 5

III Các giải pháp có thể và cấu trúc đề xuất 6

IV Mô tả thuật toán 8

V Lập trình 11

1.Chương trình 11

2.Kết quả 20

VI Kết luận 26

Trang 3

Lời nói đầu

Cấu trúc dữ liệu là một môn học quan trọng trong lĩnh vực CNTT Nó là cơ

sở vững chắc để ta giải quyết các bài toán trong quá trình học tập cũng như trong cuộc sống Một điều quan trọng nữa là nó cung cấp cho chúng ta những hiểu biết về các giải thuật tác động lên dữ liệu cũng như cách tổ chức dữ liệu

để giải quyết các bài toán sao cho dễ nhất, tối ưu nhất.

Sau khi học môn “Cấu trúc dữ liệu ” và tiếp đến là môn “Phân tích và thiết

kế giải thuật”, chúng em được giao thực hiện đồ án môn học “Cấu trúc dữ liệu

và thuật toán ”để giải quyết một số bài toán liên quan đến môn học và đề tài chúng em được nghiên cứu ở đây là bài toán cây gia phả.

Đây là đồ án đầu tiên của chúng em nên không thể tránh khỏi sai sót, rất mong sự giúp đỡ tận tình của các thầy cô trong khoa Em cũng xin cảm ơn

thầy Phan Thanh Tao đã hướng dẫn và giúp chúng em hoàn thành đồ án

này

Nhóm sinh viên thực hiện

Trần Thanh Liêm

Nguyễn Hữu Nhân

Lê Phương Tiến

Nhóm 12 Lớp 07T2

Khoa Công Nghệ Thông Tin

Trang 4

I Giới thiệu đề tài và đề tài

Giới thiệu đề tài :

Đối với mỗi dòng họ đều có một tài liệu ghi chép lại tất cả những người có liên quan với nhau trong dòng họ, tài liệu đó chính là gia phả Hay gia phả là bản ghi chép tên họ, tuổi tác, vai trò và công đức của cha mẹ, ông bà, tiên tổ trong thời đại mà họ đã sinh ra và lớn lên của một gia đình hay một dòng họ

Gia phả đã xuất hiện từ thời xa xưa ở phương Tây cũng như ở phương Đông Tại các nước Đông Á, v iệc xây dựng và lưu truyền gia phả được xem là một cách ghi nhớ công ơn tổ tiên, gây dựng lòng tự hào trong dòng tộc.

Ở Tây phương, người ta có tập tục làm cây phả hệ, tương tự như Tông đồ của người Hoa hay người Việt

Một Tông đồ, một Gia phả, một Phả ký, một Phổ truyền dù đơn sơ hay súc tích cũng đều trở nên những tài liệu quý báu cho nhà xã hội học , nhà sử học về sau

Nó còn có thể hữu dụng cho những nghiên cứu về tâm lý, về di truyền học , huyết học , y học nữa.

Để thấy rõ một cách tổng quát các chi lớn, nhỏ, xa, gần của một họ, người ta còn lập ra các phả đồ, với những hình vẽ đơn giản kèm theo tên tuổi ghi vắn tắt ở bên dưới.

Do đó,bài toán cây gia phả rất thông dụng trong cuộc sống hiện nay.Và với sự phát triển của Công Nghệ Thông Tin thì sẽ giúp cho việc tạo lập và quản lý cây gia phả sẽ tốt hơn.

Đề tài : Quản lý thông tin gia phả của một dòng họ Thông tin về một con người trong gia phả gồm : họ tên, ngày sinh, tình trạng gia đình, cha,mẹ,…

a Hãy định nghĩa cấu trúc dữ liệu thích hợp để quản lý gia phả,sau đó cài đặt cấu trúc

dữ liệu này.

b Giả sử không có hai người trùng tên,hãy viết chương trình con nhập vào họ tên của một người,sau đó cho biết người đó có trong gia phả không?Nếu có thì in ra tất cả các thế hệ con,cháu … của người này và in ra những người cùng thế hệ với người này.

Trang 5

II Nghiên cứu lý thuyết

Gia phả đã xuất hiện từ thời xa xưa ở phương Tây cũng như ở phương Đông

Tại Việt Nam, gia phả sơ giản ghi chép tên cúng cơm, ngày giỗ và địa điểm an táng của ông cha Theo các nhà sử học phỏng đoán thì gia phả đã xuất hiện từ thời Sĩ Nhiếp làm Thái thú ở Giao Chỉ, hoặc gần hơn tức là từ thời Lý Nam Đế (khoảng nǎm 476-545) Nhưng phải đến thời nhà Lý, nhà Trần mới xuất hiện những cuốn tộc phả, thế phả (ghi cả thế thứ, tông tích toàn họ), phả ký (ghi lại hành trạng, sự nghiệp của tổ tiên).

Mới đầu gia phả xuất hiện chỉ trong Hoàng tộc cùng giới quan lại, nhà Lý có Hoàng Triều

Ngọc Điệp - năm 1026; nhà Trần có Hoàng Tông Ngọc Điệp, nhà Lê có Hoàng Lê Ngọc Phả Cùng với sự xuất hiện các gia phả của Hoàng tộc là gia phả của các danh gia,

quan lại và cứ thế lan rộng, phổ biến ghi chép gia phả trong nhân dân.

Trước đây, gia phả chủ yếu được ghi chép bằng chữ Hán-Nôm, nhưng số người giỏi không nhiều, qua nhiều năm chiến tranh, nhiều bộ, cuốn gia phả của nhiều dòng họ cũng mất dần

Tục làm gia phả phát triển mạnh ở hai miền Bắc và Trung, miền Nam rất ít gia đình làm gia phả ở đấy còn được gọi là "gia phổ" và biến thái thành "tông chi" tức tờ "tông chi tông đồ".

Trong gia phả, người đứng đầu ngành trưởng (trưởng họ, trưởng tộc) có bổn phận ghi hết những chi tiết về thân thích và dòng dõi; những người con khác sao lại bản gia phả chính đó Các gia đình giữ gìn kỹ lưỡng và truyền từ đời cha tới đời con "Họ" theo nghĩa gốc có liên hệ với nhà và dưới chế độ phong kiến, nối kết con người với đất ruộng: một mái nhà, một gia đình, một họ Họ và tên của một người định vị trí của cá nhân người đó trong xã hội, xác định cá thể trong một toàn thể.

Và trong một cây gia phả thì chỉ chú ý đến con trai,còn con gái thì chỉ lưu thông tin, không

mở rộng trong gia phả.

Trang 6

III Các giải pháp có thể và cấu trúc đề xuất

Các giải pháp :

Cấu trúc thông tin dưới dạng bảng.

o Ưu điểm : - Dễ quản lý

- Nó thể hiện được mối quan hệ giữa các thành viên trong dòng họ.

o Nhược điểm : Tốn dung lượng bộ nhớ.

Ví dụ : Để thể hiện mối quan hệ giữa 4 người A,B,C,D Ta cần bảng 4x4.

Nếu số người là n là cần bảng là nxn.

Minh hoạ :

Cấu trúc theo kiểu danh sách đa liên kết

Danh sách đa liên kết là danh sách có nhiều mối liên kết

o Ưu : - Ít tốn bộ nhớ

- Thể hiện được đầy đủ các mối quan hệ.

o Nhược : - Quá nhiều đường thể hiện quan hệ

- Khó quản lý

Trang 7

Ví dụ mô tả :

Cấu trúc theo kiểu đơn liên kết

Danh sách đơn liên kết là danh sách mà các phần tử được kết nối với nhau nhờ

vùng(trường) liên kết Ví dụ như trong struct human có human *next.

o Ưu điểm : Dễ cài đặt, dễ lập trình, dễ quản lý

o Nhược điểm : Không thấy rõ được cái mối quan hệ Các mối quan hệ chỉ được thể hiện qua các biến.

Sơ đồ minh hoạ

Qua các cấu trúc được mô tả thì nhóm chúng em chọn cấu trúc đơn liên kết.Vì với cấu trúc này sẽ dễ dàng cho việc quản lý,thêm,sửa,xoá,update,tìm kiếm trong gia phả,vì mỗi gia phả sẽ luôn được thay đổi theo năm tháng.Khắc phục nhược điểm : là không chỉ rõ mối quan hệ nhưng các mối quan hệ thể hiện qua các biến nên người đọc hoặc người sử dụng chương trình vẫn có thể hiểu được.

Trang 8

IV Mô tả thuật toán

Gia phả giả định :

Với cấu trúc chọn là Danh Sách đơn liên kết thì mô hình đề xuất như sau:

+ ) Trường liên kết để nối giữa 2 phần tử

hunman *next;

+ ) Trường thông tin liên quan đến một phần tử

Cấu trúc đc khái báo như sau :

Trang 9

Trong đó infor thongtin là :

Quản lý dữ liệu bằng con trỏ kiểu Family;

typedef hunman *Family;

Các hàm điều khiển chương trình:

+ ) được phân 2 loại :

- Quản lý chung cho cả chương trình ( begin()… )

- Quản lý việc thực hiện các hàm con trong thân chương trình ( list(),chon()

…) + ) các hàm đều được sử dụng nhiều lần để thực hiện các yêu cầu từ bài toán

Thuật toán riêng chư từng hàm được sử dụng

1) Dữ liệu: được bắt buộc nhập khi thực hiện cách lệnh theo yêu cầu của bài toán ,chủ yếu lấy dự liệu từ file “gia_pha.bin” vì để tiện cho việc thao tác

Thuật toán : dung con trỏ FILE để lấy dữ liệu trong file “gia_pha.bin” theo

kiểu dữ liệu human

t=(*t).next;

(*t).next=p;

} else f=p;

Trang 10

3) Xuất dữ liệu:

- File ( cũng dung con trõ FILE để thao tác trên 2 loại file là txt và bin )

- Màng hình ( xuất từng phần tữ trong danh sách ra màng hình,sử dụng vòng lặp để thực hiện việc xuất dữ liệu)

4) Các hàm có chức năng tìm kiếm:

- Gồm: tìm một người trong gia phả ( tim(F) ), tìm người cùng thế hệ (

ng_cung_thehe(F) ),tìm con cháu của một người ( timconchau(F))

- Sử dụng thuật toán chung là tìm kiếm 1 phần tử trong danh sách và trả về kiểu con trỏ Family

- Code như sau:

Family search(Family &f,char ten[50]) { Family p;

5 ) Hàm reset với mục đính đưa danh sách về lại trạng thái ban đầu (là NULL )

Khi sự quản lý không đủ khả năng ( do các hàm và các biến gọi lẫn nhau nên dễ xảy ra tình trạng chồng chất dự liệu).Có thể khắc phục bằng các ghi dự liệu ra mà đưa chứ về lại trại trái ban đầu

Hàm này dùng để xóa hết các phần tử trong Danh sách ,khôi phục và giải phóng các vùng nhớ đã sử dụng

Trang 11

typedef hunman *Family;

// -bien toan cuc -//

int ch,ch2;

Family F;

// -Ten Ham con -//

void Infor(Family &p);

void them(Family &f);

void nhap(Family &f);

void xuat(Family f);

Family search(Family &f,char ten[50]);

void tim(Family &f);

void in_thongtin(Family &p);

void ng_cung_thehe(Family &f);

void conchau(char s[50],Family f);

void timconchau(Family f);

void doc(Family &f,char *s);

void them2(Family &f,Family p);

void xuat2(Family &f);

Trang 12

void Infor(Family &p)

printf("|| Vo hay chong:%s",(*p).thongtin.vc);

else printf("|| Vo hay chong: << ko >>");

Trang 13

printf("\n Cha: %s",(*p).thongtin.pa);

else printf("\n << Nguoi ban tim KO CO trong GIA PHA >>");

getch();

Trang 14

void conchau(char s[50],Family f)

// - DOC DU LIEU tu FILE BIN -//

void doc(Family &f,char *s)

{ Family p;

FILE *tep;

tep=fopen(s,"r+b");

Trang 15

printf("\n <<< GHI FILE >>> ");

if(tep==NULL) printf("\n KO MO DC FILE ");

else {

while(p!=NULL) { if(p==NULL) break;

printf("\n <<< GHI FILE >>> ");

if(tep==NULL) printf("\n KO MO DC FILE ");

else {

fprintf(tep,"<<<<< DANH SACH GIA PHA >>>>> ");

while(p!=NULL) { if(p==NULL) break;

Trang 16

fprintf(tep,"\n Ten Vo hoac Chong : %s",(*p).thongtin.vc);

fprintf(tep,"\n The he : %d",(*p).thehe);fprintf(tep,"\n ===========");

i++;

p=(*p).next;

}} fclose(tep);

{ t=p;

p=(*p).next;

} (*t).next=NULL;

delete p;

} i ;

Trang 17

printf("\n\n\n =====> Chon:");

scanf("%d",&i);

} while(i<1 || i>2);

switch(i)

{ case 1: doc(F,s); break;

case 2: nhap(F); break;

printf(" 1) Tim nguoi trong gia pha\n");

printf(" 2) Tim nguoi cung the he\n");

printf(" 3) Tim con chau cua mot nguoi\n");

printf(" 4) Them 1 nguoi vao gia pha\n");

printf(" 5) Reset Danh sach\n");

printf(" 6) Ghi lai Danh Sach Gia pha\n");

printf("\n <<< Tim kiem nguoi cung the he >>>\n");

printf("\n <<< Tim con chau cua 1 nguoi >>>\n");

printf("\n <<< Them mot nguoi vao Danh Sach >>>\n");

them(F);

list();

Trang 18

} case 5 : {

printf("\n <<< Reset danh sach gia pha >>>\n");

printf("\n <<< Xuat du lieu ra FILE TXT >>>\n");

printf("\n <<< Xuat Danh sach GIA PHA >>>\n");

Trang 20

2 Kết quả chạy chương trình

(Kết quả cho gia phả ở trên)

Giao diện chính của chương trình

Trang 22

Trường hợp chọn 1 : Tìm thử xem người đó có trong gia phả hay không?

Trang 23

Trường hợp chọn 2 : Tìm kiếm những người cùng thế hệ với người có tên nhập từ bàn phím

Trang 24

Trường hợp chọn 3 : Tìm tất cả con cháu của người có tên nhập từ bàn phím

Trang 25

Trở lại menu chính

Nếu chọn 2 thì sẽ in ra thông tin sinh viên và giảng viên hướng dẫn

Nếu chọn 3 thì sẽ thoát.

Trang 26

VI Kết luận

 Chương trình bài toán cây gia phả ở trên đã thực hiện đúng theo yêu cầu của đề bài.Hi vọng rằng chương trình này sẽ được ứng dụng nhiều trong cuộc sống.

 Trong quá trình chạy thì không phát sinh lỗi.

 Cho ra kết quả nhanh chóng với độ chính xác cao đúng với thuật toán.

 Có sử dụng đồ hoạ trực quan.

Trang 27

Xin chân thành cám ơn sự theo dõi của thầy và những người xem!!! Rất mong được sự đóng góp ý kiến của tất cả mọi người!!

Ngày đăng: 10/04/2015, 16:31

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w