Tải bản đầy đủ (.doc) (27 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (364.62 KB, 27 trang )

Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
ĐẠ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
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 1
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 2
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 3
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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 Á, việ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.
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 4
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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ả.
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 5

Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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ý
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 6
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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.
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 7
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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 :
struct hunman
{
int thehe;
infor thongtin;
hunman *next;//để chỉ đến phần tử tiếp theo trong gia phả.
};
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 8
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
Trong đó
infor thongtin
là :
struct infor
{ char name[50];
char pa[50];
char ma[50];
char vc[50];//vợ hay chồng
int ns[3];// Gồm có ngày tháng và năm sinh
};
Quản lý dữ liệu bằng con trỏ kiểu Family;

typedef hunman *Family;
Input:
+ ) từ file (đã có sẳn danh sách và được lưu dưới dạng file *.bin)
+ ) nhập trực tiếp từ bàn phím
Output:
+ ) màn hình
+ ) file *.txt,*.bin
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
2) Nhập dữ liệu trực tiếp từ bàn phím:
- Gọi hàm them vào cuối danh sách n lần ( tùy theo yêu cầu người nhập)
t=f;
(*p).next=NULL;
if(t!=NULL)
{ while((*t).next!=NULL)
t=(*t).next;
(*t).next=p;
}
else f=p;
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 9
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao

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;
p=f;
while(p!=NULL &&
strcmp((*p).thongtin.name,ten) )
p=(*p).next;
return 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
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 10
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
V. Lập trình
1.Chương trình
#include<conio.h>
#include<stdio.h>

#include<string.h>
#include<graphics.h>
// Dinh nghia CAU TRUC //
struct infor
{ char name[50];
char pa[50];
char ma[50];
char vc[50];
int ns[3];
};
struct hunman
{
int thehe;
infor thongtin;
hunman *next;
};
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);
void ghiBIN(Family f);
void ghiTXT(Family f);
void menu();
void infor();
void resetF(Family &f);
void nhapF();
void list();
void tieptuc();
void chon();
void begin();
void tieptuc2();
void chon2();
// MAIN //
int main()
{ textbackground(1);
textcolor(7);
clrscr();
begin();
return 1;
}
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 11
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
// Dinh nghia HAM //
void Infor(Family &p)
{
fflush(stdin);

printf("\n Nhap ten:");
gets((*p).thongtin.name);
printf("\n Nhap ten cha:");
gets((*p).thongtin.pa);
printf("\n Nhap ten me:");
gets((*p).thongtin.ma);
printf("\n Nhap ten vo hoac chong(ko nhan ENTER):");
gets((*p).thongtin.vc);
printf(" ngay sinh:");
scanf("%d",&(*p).thongtin.ns[0]);
printf(" thang sinh:");
scanf("%d",&(*p).thongtin.ns[1]);
printf(" nam sinh:");
scanf("%d",&(*p).thongtin.ns[2]);
printf(" the he cua ng nay la:");
scanf("%d",&(*p).thehe);
}
//
void xuat(Family f)
{ Family p;
int i=1;
p=f;
while(p!=NULL)
{ printf("\n %3d========================",i);
printf("\n Ten:%s",(*p).thongtin.name);
printf(" ( %d %d %d )",(*p).thongtin.ns[0],(*p).thongtin.ns[1],
(*p).thongtin.ns[2]);
// printf(" || Me:%s",(*p).thongtin.ma);
if((*p).thongtin.pa[0] !=NULL)
printf("|| Cha:%s",(*p).thongtin.pa);

else printf("|| Cha: << ko >>");
if((*p).thongtin.ma[0] !=NULL)
printf("|| Me:%s",(*p).thongtin.ma);
else printf("|| Me: << ko >>");
if((*p).thongtin.vc[0] !=NULL)
printf("|| Vo hay chong:%s",(*p).thongtin.vc);
else printf("|| Vo hay chong: << ko >>");
p=(*p).next;
i++;
}
getch();
}
//
void them(Family &f)
{ Family p,t;
p=new hunman;
Infor(p);
t=f;
(*p).next=NULL;
if(t!=NULL)
{ while((*t).next!=NULL)
t=(*t).next;
(*t).next=p;
}
else f=p;
}
//
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 12
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
void nhap(Family &f)

{
char ok='y',*s;
while(ok=='Y' || ok=='y')
{ them(f);
printf("\n << Ban muon tiep tuc ko ?(Y/N) >> ");
gets(s);
scanf("%c",&ok);
}
}
//
Family search(Family &f,char ten[50])
{ Family p;
p=f;
while(p!=NULL && strcmp((*p).thongtin.name,ten) )
p=(*p).next;
return p;
}
//
void tim(Family &f)
{ Family p;
char ten[50];
printf("\n\n Nhap ten: ");
fflush(stdin);
gets(ten);
p=search(f,ten);
if(p) in_thongtin(p);
else
printf("\nNguoi ban nhap ko co trong Gia Pha");
getch();
}

//
void in_thongtin(Family &p)
{
printf(" ====================================");
printf("\n Ten:"); puts((*p).thongtin.name);
printf("\n Cha: %s",(*p).thongtin.pa);
printf("\n Me:%s",(*p).thongtin.ma);
if((*p).thongtin.vc!=NULL)
printf("\n Vo:%s",(*p).thongtin.vc);
else printf("\n <<< Ko co vo hoac chong >>");
printf("\n %d %d %d",(*p).thongtin.ns[0],(*p).thongtin.ns[1],
(*p).thongtin.ns[2]);
printf("\n the he:%d\n",(*p).thehe);
}
//
void ng_cung_thehe(Family &f)
{ Family p,t;
char ten[50];
printf("\n\n Nhap ten: ");
fflush(stdin);
gets(ten);
p=search(f,ten);
if(p)
{ t=f;
while(t!=NULL)
{ if( (*t).thehe==(*p).thehe )
in_thongtin(t);
t=(*t).next;
}
}

else printf("\n << Nguoi ban tim KO CO trong GIA PHA >>");
getch();
}
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 13
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
//
void conchau(char s[50],Family f)
{
char temp[50];
Family p;
p=f;
strcpy(temp,s);
while(p!=NULL)
{
if((strcmp((*p).thongtin.pa,temp)==0)||(strcmp((*p).thongtin.ma,temp)==0))
{ printf("\n%s",(*p).thongtin.name);
conchau((*p).thongtin.name,f);
}
p=(*p).next;
}
}
//
void timconchau(Family f)
{
char s[50];
Family p;
printf("\nNhap ten: ");
fflush(stdin);
gets(s);
p=search(f,s);

if(p) conchau(s,f);
else printf("\n << Nguoi ban tim KO CO trong GIA PHA >>");
getch();
}
// //
// FILE //
// //
void xuat2(Family &f)
{ Family p;
int i=1;
p=f;
while(p!=NULL)
{
printf("%d",i);
in_thongtin(p);
p=(*p).next;
i++;
getch();
}
}
//
void them2(Family &f,Family p)
{ Family t;
t=f;
(*p).next=NULL;
if(t!=NULL)
{ while((*t).next!=NULL)
t=(*t).next;
(*t).next=p;
}

else f=p;
}
// DOC DU LIEU tu FILE BIN //
void doc(Family &f,char *s)
{ Family p;
FILE *tep;
tep=fopen(s,"r+b");
if(tep==NULL) printf("\n KO MO DC FILE");
else { while(!feof(tep))
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 14
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
{
p=new hunman;
fread(p,sizeof(hunman),1,tep);
if(feof(tep)) break;
them2(f,p);
}
}
fclose(tep);
}
// GHI FILE BIN //
void ghiBIN(Family f)
{ Family p;
hunman h;
char *s;
FILE *tep;
p=f;
printf("\n Nhap ten file BIN:");
fflush(stdin);
gets(s);

if(s[0]!=NULL)
{
tep=fopen(s,"w+b");
printf("\n <<< GHI FILE >>> ");
if(tep==NULL) printf("\n KO MO DC FILE ");
else {
while(p!=NULL)
{ if(p==NULL) break;
strcpy(h.thongtin.name,(*p).thongtin.name);
strcpy(h.thongtin.pa,(*p).thongtin.pa);
strcpy(h.thongtin.ma,(*p).thongtin.ma);
strcpy(h.thongtin.vc,(*p).thongtin.vc);
h.thehe=(*p).thehe;
h.thongtin.ns[0]=(*p).thongtin.ns[0];
h.thongtin.ns[1]=(*p).thongtin.ns[1];
h.thongtin.ns[2]=(*p).thongtin.ns[2];
fwrite(&h,sizeof(hunman),1,tep);
p=(*p).next;
}
}
fclose(tep);
}
else printf("\n NHAP SAI ");
}
//
void ghiTXT(Family f)
{ Family p;
char *s,i=1;
FILE *tep;
p=f;

fflush(stdin);
printf("\n\n Nhap ten file TXT de in gia pha :");
gets(s);
if(s[0]!=NULL)
{
tep=fopen(s,"w+");
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;
fprintf(tep,"\nSTT: %d",i);
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 15
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
fprintf(tep,"\n Ten : %s",
(*p).thongtin.name);
fprintf(tep,"\n Ngay sinh : %d",
(*p).thongtin.ns[0]);
fprintf(tep," /%d",(*p).thongtin.ns[1]);
fprintf(tep," /%d",(*p).thongtin.ns[2]);
fprintf(tep,"\n Ten Cha : %s",
(*p).thongtin.pa);
fprintf(tep,"\n Ten Me : %s",
(*p).thongtin.pa);
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);
}
else printf("\n NHAP SAI ");
}
//
void resetF(Family &f)
{
Family p,t;
char i=0;
p=f;
while(p!=NULL)
{
p=(*p).next;
i++;
}
while(i)
{ p=f;
if(p!=NULL)
{ while((*p).next!=NULL)
{ t=p;
p=(*p).next;
}
(*t).next=NULL;
delete p;
}
i ;
}

f=NULL;
}
//
void nhapF()
{
int i;
char *s="gia_pha.bin";
clrscr();
textcolor(7);
resetF(F);
menu();
textcolor(4);
printf("\n");
cprintf(" NHAP DU LIEU CHO GIA PHA ");
printf("\n");
textcolor(7);
printf("\n");
printf(" 1.Nhap tu FILE");
printf("\n\n 2.Nhap bang tay");
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 16
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
do{
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("\n\n DANH SACH HIEN TAI ");

getch();
xuat(F);
}
// //
// CAC HAM DIEU KHIEN CHUONG TRINH //
// //
// Dieu khien thuc hien CT //
void list()
{ // getch();
clrscr();
menu();
textcolor(6);
printf("\n");
cprintf(" =============Menu===========\n");
printf("\n");
textcolor(7);
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(" 7) Xuat\n");
printf(" 8) Thoat\n");
printf("\n ============================\n");
}
//
void chon()
{ do{ list();
switch (ch)

{ case 1 : {
printf("\n <<< Tim kiem nguoi trong Gia Pha >>>\n");
tim(F);
list();
tieptuc();
break;
}
case 2 : {
printf("\n <<< Tim kiem nguoi cung the he >>>\n");
ng_cung_thehe(F);
list();
tieptuc();
break;
}
case 3 : {
printf("\n <<< Tim con chau cua 1 nguoi >>>\n");
timconchau(F);
list();
tieptuc();
break;
}
case 4 : {
printf("\n <<< Them mot nguoi vao Danh Sach >>>\n");
them(F);
list();
tieptuc();
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 17
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
break;
}

case 5 : {
printf("\n <<< Reset danh sach gia pha >>>\n");
resetF(F);
list();
tieptuc();
break;
}
case 6 : {
printf("\n <<< Xuat du lieu ra FILE TXT >>>\n");
ghiTXT(F);
list();
tieptuc();
break;
}
case 7 : {
printf("\n <<< Xuat Danh sach GIA PHA >>>\n");
xuat(F);
list();
tieptuc();
break;
}
default : printf("\n\n <<An ENTER de tiep tuc>> ");
}
}while(ch!=8);
}
//
void tieptuc()
{ do{
fflush(stdin);
printf("\n =====> Ban chon :");

scanf("%d",&ch);
}while(ch<1 || ch>8);
}
// Dieu Khien luc bat dau ///
void begin()
{
clrscr();
menu();
tieptuc2();
chon2();
}
//
void menu()
{ clrscr();
textcolor(6);
cprintf("\n\n DO AN CAU TRUC DU LIEU VA THUAT
TOAN\n");
textcolor(4);
printf("\n");
cprintf(" CHUONG TRINH BAI TOAN CAY GIA PHA\n");
printf("\n");
cprintf(" ******* \n");
textcolor(6);
printf("\n");
cprintf(" =============MENU==============");
textcolor(2);
printf("\n");
cprintf("\n 1.Thuc hien chuong trinh\n");
printf("\n");
cprintf(" 2.Thong tin sinh vien\n");

printf("\n");
cprintf(" 3.Thoat");
printf("\n");
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 18
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
textcolor(7);
printf("\n");
}
//
void infor()
{
clrscr();
menu();
printf("\n\n Giang Vien huong dan : PHAN THANH TAO\n");
printf("\n\n Nhom : 12");
printf("\n\n Sinh Vien thuc hien :\n");
printf("\n");
printf("\n *) Tran Thanh Liem 07T2");
printf("\n");
printf("\n *) Nguyen Huu Nhan 07T2");
printf("\n");
printf("\n *) Le Phuong Tien 07T2");
printf("\n");
printf("\n\n Cam on ban da xem chuong trinh!");
getch();
}
//
void chon2()
{
do{

menu();
switch(ch2)
{ case 1: {
nhapF();
list();
tieptuc();
chon();
getch();
menu();
tieptuc2();
break;
}
case 2: {
infor();
menu();
tieptuc2();
break;
}
}
}while(ch2!=3);
}
//
void tieptuc2()
{
do{ printf("\n ======>Ban Chon:");
scanf("%d",&ch2);
}while(ch2<1 || ch2>3);
}
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 19
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao

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
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 20
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
 Thực hiện chương trình
Sau khi chọn vào thực hiện chương trình thì có 2 cách nhập : từ file hay nhập từ bàn
phím
Sau đó sẽ xuất hiện menu con để chọn các thao tác khác nhau
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 21
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
Trường hợp chọn 1 : Tìm thử xem người đó có trong gia phả hay không?
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 22
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 23
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
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
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 24
Đồ án : Cấu Trúc Dữ Liệu&Thuật Toán GVHD:Phan Thanh Tao
 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.
Nhóm sinh viên thực hiện Lớp: 07T2 Trang: 25

×