1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo bài tập lớn cấu trúc dữ liệu và giải thuật đề tài lecturer management tree

18 4 0

Đ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

Tiêu đề Lecturer Management Tree
Tác giả Nguyễn Thắng Đạt, Nguyễn Thành Hiếu
Người hướng dẫn Trần Thị Thanh Hải
Trường học Trường Đại học Bách khoa Hà Nội
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 18
Dung lượng 80 KB

Nội dung

Báo cáo bài tập lớn cấu trúc dữ liệu và giải thuật đề tài lecturer management tree Báo cáo bài tập lớn cấu trúc dữ liệu và giải thuật đề tài lecturer management tree Báo cáo bài tập lớn cấu trúc dữ liệu và giải thuật đề tài lecturer management tree

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

KHOA ĐIỆN TỬ VIỄN THÔNG

BÁO CÁO BÀI TẬP LỚN

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Đề tài:

Lecturer Management Tree

Giảng viên hướng dẫn : Trần Thị Thanh Hải

Thành viên nhóm : Nguyễn Thắng Đạt 20192748

: Nguyễn Thành Hiếu 20192847

Hà Nội, năm 2022

Trang 2

MỤC LỤC

NỘI DUNG

I Giới thiệu chung

I.1 Chủ đề

I.2 Phân chia nhiệm vụ

II Cơ sở dữ liệu

II.1 Thiết kế cơ bản

II.2 Code

III Kết luận

************************************

Trang 3

CHƯƠNG 1 GIỚI THIỆU CHUNG

1.1 GIỚI THIỆU VỀ CHỦ ĐỀ

Đề tài chúng em chọn là “ Lecturer Management Tree”

Lí do để chúng em chọn đề tài này là vì em thấy đề tài này

được áp dụng rất nhiều trong thực thế, có thể đã được nhiều

trường trong nước và thế giới sử dụng, có tiềm năng nghiên

cứu và phát triển rất lớn ạ!

1.2 PHÂN CHIA NHIỆM VỤ TRONG NHÓM

Nguyễn Thành Hiếu Hầu hết code

Nguyễn Thắng Đạt Khởi tạo cây, khởi tạo class uniTree

(phần đầu), làm báo cáo

Trang 4

CHƯƠNG 2 CƠ SỞ DỮ LIỆU

2.1 THIẾT KẾ CƠ BẢN

Đây là một chương trình quản lý giáo viên đơn giản thể hiện một vài chức năng như:

 Tìm kiếm giáo viên trong trường

 Quan hệ cấp trên – cấp dưới giữa hai giáo viên trong trường

2.2 CODE

#define WINDOWS

#include<iostream>

#include<string.h>

#include<stdlib.h>

#include<string>

using namespace std;

struct node

{

char name[50];

int age,x; // x - do cao cua cay

bool g; // gioi tinh

char position[50];

node* fc; // Pointer cua con dau

node* ns; // Pointer cua anh em ben canh

node();

void getData();

};

Trang 5

{

fc=ns=NULL;

g=0;

strcpy(name,"");

strcpy(position,"");

age=x=0;

}

void node::getData()

{

char ch;

fflush(stdin);

cout<<"\nTen: ";

gets(name);

cout<<"Tuoi cua "<<name<<": ";

cin>>age;

fflush(stdin);

cout<<"\nTen vi tri: ";

gets(position);

cout<<name<<" la (m/f): ";

cin>>ch;

if(ch=='m')

g=1;

}

class uniTree

{

public:

node* start;

uniTree();

node* traverseDown(node*,char[]); // ham t́m kiem node* traverseRight(node*,char[]);

Trang 6

node* search(char[]);

void addSib(node*,node*); // ham them thanh vien moi void addChild(node*,node*);

void addNew();

void find(); // ham tim quan he

void show(node*); // ham hien thong tin nguoi void display(node*); // Ham hien thi cay

void destroy(node*); // Xoa cay

void updateX(node*,int); // Cap nhat

};

uniTree::uniTree()

{

start = NULL;

}

void uniTree::destroy(node* ptr)

{

node* temp = ptr;

if(ptr==NULL)

return;

while(ptr!=NULL)

{

destroy(ptr->fc);

temp = ptr;

ptr = ptr->ns;

delete temp;

}

start = NULL;

}

Trang 7

void uniTree::show(node* ptr)

{

char g[10];

strcpy(g,"Female");

if(ptr->g)

strcpy(g,"Male");

cout<<"\n\nTen: "<< ptr->name <<endl;

cout<<"Tuoi: "<< ptr->age <<endl;

cout<<"Vi tri cong viec "<< ptr->position <<endl; cout<<"Gioi tinh: "<<g<<endl;

}

void uniTree::display(node* ptr)

{

// Hien thi cay

if(ptr==NULL)

return;

while(ptr!=NULL)

{

cout<< ptr->name <<endl;

display(ptr->fc);

ptr = ptr->ns;

}

}

void uniTree::updateX(node* ptr,int x)

{

// Cap nhat thong tin cua cay

if(ptr==NULL)

return;

while(ptr!=NULL)

{

updateX(ptr->fc,x++);

Trang 8

if(ptr->ns!=NULL)

ptr->ns->x = x;

ptr = ptr->ns;

}

}

node* uniTree::traverseRight(node* ptr, char s[50]) {

// Tim o cac anh em

ptr = ptr->ns;

while(ptr!=NULL)

{

if(strcmp(ptr->name,s)==0)

return ptr;

else if (traverseDown(ptr,s)!=NULL)

return traverseDown(ptr,s);

else

ptr = ptr->ns;

}

return NULL;

}

node* uniTree::traverseDown(node* ptr, char s[50]) {

// tim o nut con

ptr = ptr->fc;

while(ptr!=NULL)

{

if( strcmp(ptr->name,s)==0 )

return ptr;

else if(traverseRight(ptr,s)!=NULL)

return traverseRight(ptr,s);

else

ptr = ptr->fc;

Trang 9

}

return NULL;

}

node* uniTree::search(char s[50])

{

/*

tim theo ten

con tro chi vao tên hien tai

*/

node *ptr = start;

if(strcmp(ptr->name,s)==0)

return ptr;

else if(traverseRight(start,s)!=NULL)

return traverseRight(start,s);

else if(traverseDown(start,s)!=NULL)

return traverseDown(start,s);

else

{

return NULL;

cout<<"***Not found***";

}

}

void uniTree::find()

{

/*

Co cung do cao: là dong nghiep hoac dong cap o nhanh khac Khac do cao = 1 - Sep hoac truong bo mon khac

Khac do cao = 2 - Sep cua sep

khac do cao >2 xa qua nen bo

*/

char name1[50],name2[50];

cout<<"Nhap ten hai nguoi:\n";

fflush(stdin);

Trang 10

gets(name1);

fflush(stdin);

gets(name2);

node* ptr1 = search(name1);

node* ptr2 = search(name2);

node* ptr;

node* ptrk=ptr1;

node* ptrk1=ptr2;

switch(ptr1->x - ptr2->x)

{

case 0:

char s[50];

strcpy(s,"Dong nghiep");

ptr = ptr1;

while(ptr!=NULL)

{

if(ptr==ptr2)

{

cout<<endl<<name1<<" la "<<s<<" cua

"<<name2<<endl;

return;

}

ptr = ptr->ns;

}

ptr = ptr2;

while(ptr!=NULL)

{

if(ptr==ptr1)

{

cout<<endl<<name1<<" is "<<s<<" cua

"<<name2<<endl;

return;

}

ptr = ptr->ns;

}

Trang 11

cout<<endl<<name1<<" va "<<name2<<" la nguoi dong cap";

break;

case 1:

char str3[50];

strcpy(str3,"Cap tren");

ptr2 = ptr2->fc;

while(ptr2!=NULL)

{

if(ptr2==ptr1)

{

cout<<endl<<name1<<" is "<<name2<<"'s "<<str3; return;

}

ptr2=ptr2->ns;

}

strcpy(str3,"Cap duoi cua dong nghiep");

cout<<endl<<name1<<" is "<<name2<<"'s "<<str3;

break;

case -1:

char str[10];

strcpy(str,"Cap Tren");

ptr = ptrk->fc;

while(ptr!=NULL)

{

if(ptr==ptrk1)

{

cout<<endl<<name1<<" la "<<str<<" cua "<<name2; return;

}

ptr=ptr->ns;

}

strcpy(str,"Dong nghiep cua sep");

cout<<endl<<name1<<" la "<<str<<name2;

break;

Trang 12

case 2:

char str1[50];

strcpy(str1,"Cap duoi");

ptr2 = ptr2->fc->fc;

while(ptr2!=NULL)

{

if(ptr2==ptr1)

{

cout<<endl<<name1<<" la Sep "<<str1<<" cua

"<<name2;

return;

}

ptr2 = ptr2->ns;

}

break;

case -2:

char str2[50];

strcpy(str2,"Cap tren");

ptr1 = ptr1->fc->fc;

while(ptr1!=NULL)

{

if(ptr1==ptr2)

{

cout<<endl<<name1<<" la sep cua "<<str2<<" cua

"<<name2;

return;

}

ptr1 = ptr1->ns;

}

break;

default:

cout<<"Quan he xa qua (T _ T)";

break;

}

}

Trang 13

void uniTree::addNew()

{

node* temp = new node;

temp->getData();

if(start == NULL)

{

start = temp;

temp->x=0;

}

else

{

cout<<"\nNhap mot ten co quan he: ";

char name[50];

fflush(stdin);

gets(name);

cout<<"\n1 Cap duoi\n2 Dong nghiep\n\n"<< temp->name <<"

la voi "<<name<<" : ";

int opt;

cin>>opt;

switch(opt)

{

case 1:

addChild(search(name),temp);

break;

case 2:

addSib(search(name),temp);

break;

}

}

cout<<"\nDa them thanh cong.\n";

Trang 14

void uniTree::addSib(node* a,node* b)

{

// them b la nut anh chi cua a

while(a->ns!=NULL)

a=a->ns;

a->ns = b;

b->x = a->x;

}

void uniTree::addChild(node* a,node* b)

{

// b là nút con cua a

if(a->fc==NULL)

a->fc = b;

else

addSib(a->fc,b);

b->x = a->x+1;

}

void connect(uniTree *T1, uniTree *T2)

{

char name[50];

int opt;

int x;

cout<<"Ten nguoi duoc ket hop: ";

fflush(stdin);

gets(name);

cout<<T2->start->name<<" la cua "<<name<<"\n1 Cap duoi

2 Dong nghiep - ";

cin>>opt;

Trang 15

node *ptr = T1->search(name);

switch(opt)

{

case 1:

T1->addChild(ptr,T2->start);

x = ptr->x + 1;

break;

case 2:

T1->addSib(ptr,T2->start);

x = ptr->x;

break;

}

T2->updateX(T2->start,x);

T2->destroy(T2->start);

cout<<"\nDa ket hop\n";

}

int main()

{

uniTree T[100];

int opt,n,n1,n2;

char c,name[50];

cout<<"\nNhap Truong so = ";

cin>>n;

while(1)

{

#ifdef WINDOWS

system("cls");

#endif

cout<<"\n\n\n\t Truong so = "<<n<<"\n\n\t1 Them nguoi moi\ n\t2 Tim quan he giua hai nguoi\n\t3 Tim kiem\n\t4 Huy\n\t5 Hien thi cay\n\t6 Thay doi truong\n\t7 Ket noi hai cay\n\t8 Thoat\n\n\ tBan chon = ";

cin>>opt;

cout<<endl;

switch(opt)

{

Trang 16

default:

cout<<"Khong co chuc nang"; break;

case 1:

T[n].addNew();

break;

case 2:

T[n].find();

break;

case 3:

cout<<"Nhap ten nguoi can tim: "; fflush(stdin);

gets(name);

T[n].show(T[n].search(name)); break;

case 4:

T[n].destroy(T[n].start);

cout<<"Cay "<<n<<" Da huy"; break;

case 5:

T[n].display(T[n].start);

break;

case 6:

cout<<"Nhap truong so: ";

cin>>n;

break;

case 7:

cout<<"Ghep voi \n";

cin>>n2>>n1;

Trang 17

connect(&T[n1],&T[n2]);

break;

case 8:

return 0;

}

cout<<"\n\nPress any key to continue ";

cin>>c;

}

}

CHƯƠNG 3 KẾT LUẬN

Phần mềm đạt một số mục tiêu nhất định tuy nhiên còn nhiều

khuyết điểm như tính năng hạn chế Gặp một vài lỗi trong quá trình chạy

Tuy nhiên những gì thu được từ sau bài tập lớn lần này giúp chúng

em tự tin hơn để tiếp tục đam mê trong ngành lập trình

Trang 18

Chúng em rất mong nhận được sự quan tâm và góp ý từ phía cô! Chúng em xin chân thành cảm ơn!

TÀI LIỆU THAM KHẢO [1]

[2] https://www.youtube.com/watch?v=9zfpOe1Xs7Q&t=461s

Ngày đăng: 05/04/2024, 16:13

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

TÀI LIỆU LIÊN QUAN

w