1. Trang chủ
  2. » Tất cả

Đồ án cây tìm kiếm nhị phân và ứng dụng trong quản lý hồ sơ trong máy tính

23 48 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 đề Đồ án môn học Đề Tài Cây Tìm Kiếm Nhị Phân Và Ứng Dụng Trong Quản Lý Hồ Sơ Trong Máy Tính
Tác giả Nguyễn Nhựt Phong, Đỗ Tạ Minh Quân, Nguyễn Tôn Minh Quân, Trần Xuân Ngọc
Người hướng dẫn TS. Đặng Ngọc Hoàng Thành
Trường học Trường Đại Học Kinh Tế TP Hồ Chí Minh
Chuyên ngành Công Nghệ Phần Mềm
Thể loại đồ án môn học
Năm xuất bản 2022
Thành phố TP Hồ Chí Minh
Định dạng
Số trang 23
Dung lượng 849,87 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Untitled BỘ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC KINH TẾ TP HỒ CHÍ MINH (UEH) TRƯỜNG CÔNG NGHỆ VÀ THIẾT KẾ  ĐỒ ÁN MÔN HỌC ĐỀ TÀI CÂY TÌM KIẾM NHỊ PHÂN VÀ ỨNG DỤNG TRONG QUẢN LÝ HỒ SƠ TRONG MÁY TÍNH Học Phần[.]

Trang 1

B Ộ GIÁO DỤC VÀ ĐÀO TẠO ĐẠI HỌC KINH TẾ TP HỒ CHÍ MINH (UEH)

TRƯỜNG CÔNG NGHỆ VÀ THIẾT KẾ



ĐỒ ÁN MÔN HỌC

ĐỀ TÀI

CÂY TÌM KIẾM NHỊ PHÂN VÀ ỨNG DỤNG

H ọc Phần: Cấu Trúc Dữ Liệu & Giải Thuật Danh Sách Nhóm:

Trang 2

2

M ỤC LỤC 2

CHƯƠNG 1 CÂY NHỊ PHÂN TÌM KIẾM 3

1.1 Các Khái Niệm Liên Quan 3

1.2 C ấu Trúc và Cài Đặt Cây BST 3

1.3 Các Thuật Toán Trên Cây BST 4

a) Thu ật Toán Thêm nút vào BST 4

b) Thu ật Toán Thăm nút BST 4

c) Thu ật Toán Tìm nút Min/Max 7

d) Thu ật Toán Xác định độ cao BST 8

e) Thu ật Toán Tìm nút BST 9

f) Thu ật Toán Xóa nút BST 9

CHƯƠNG 2 PHÂN TÍCH VÀ THIẾT KẾ LỚP 10

2.1 Phân Tích Bài Toán Tìm Kiếm Hồ Sơ Bằng Cây BST 10

2.2 Sơ Đồ Lớp 10

2.3 Cài Đặt Lớp 10

CHƯƠNG 3 THIẾT KẾ GIAO DIỆN 14

3.1 Giao Di ện Menu Chính 14

3.2 Chi Ti ết Chức Năng 14

CHƯƠNG 4 THẢO LUẬN & ĐÁNH GIÁ 18

5.1 Các Kết Quả Nhận Được 18

5.2 M ột Số Tồn Tại 19

5.3 Hướng Phát Triển 20

PH Ụ LỤC 21

TÀI LIỆU THAM KHẢO 23

Trang 3

CHƯƠNG 1 CÂY NHỊ PHÂN TÌM KIẾM

Cây (Tree) là một dạng cấu trúc dữ liệu bao gồm: các đỉnh (Node) và cạnh (Edge) Các đỉnh chứa thông tin và được kết nối bởi các cạnh

Tập thứ tự các cạnh sẽ tạo thành một đường đi (Path)

Đỉnh ở trên cùng được gọi là gốc (Root)

Các đỉnh còn lại được gọi là nút con (Child)

Đỉnh không có nút con nào được gọi là lá (Leaf)

Các đỉnh được phân thành các mức khác nhau (level 0, level 1, v.v)

Một cây mà mỗi đỉnh có không quá hai nút con: nút trái (left) và nút phải (right) được gọi

là cây nhị phân (Binary tree)

CÂY TÌM KIẾM NHỊ PHÂN (BST – Binary Search Tree):

Giá trị của tất cả các nút ở cây con bên trái <= giá trị của nút gốc

Giá trị của tất cả các nút ở cây con bên phải > giá trị của nút gốc

Tất cả các cây con (bao gồm bên trái và phải) đều phải đảm bảo hai tính chất trên

Mỗi nút gồm có dữ liệu (Data), nút trái (Left) và nút phải (Right)

Trang 4

4

Mỗi BST có một nút gốc (Root)

public class Node

{

public Node LeftNode { get; set; }

public Node RightNode { get; set; }

public int Data { get; set; }

a) Thuật Toán Thêm nút vào BST

public bool Insert(int value)

{

Node before = null, after = this.Root;

while (after != null)

if (this.Root == null)

this.Root = newNode;

b) Thuật Toán Thăm nút BST

Duy ệt cây theo trung thứ tự:

Trang 5

public void TraverseInOrder(Node parent)

Trang 7

public void TraversePostOrder(Node parent)

int minv = node.Data;

while (node.LeftNode != null)

Trang 8

Node current = Root;

while (current.LeftNode != null)

int maxv = node.Data;

while (node.RightNode != null)

Node current = Root;

while (current.RightNode != null)

current = current.RightNode;

return current.Data;

}

d) Thu ật Toán Xác định độ cao BST

public int GetTreeDepth()

Trang 9

e) Thuật Toán Tìm nút BST

public Node Find(int value)

{ return this.Find(value, this.Root); }

private Node Find(int value, Node parent)

f) Thu ật Toán Xóa nút BST

public void Remove(int value)

{ this.Root = Remove(this.Root, value); }

private Node Remove(Node parent, int key)

{

if (parent == null) return parent;

if (key < parent.Data) parent.LeftNode = Remove(parent.LeftNode, key);

else if (key > parent.Data) parent.RightNode =

Remove(parent.RightNode, key);

else

{

if (parent.LeftNode == null) return parent.RightNode;

else if (parent.RightNode == null) return parent.LeftNode; parent.Data = MinValueOfNode(parent.RightNode);

parent.RightNode = Remove(parent.RightNode, parent.Data);

}

return parent;

}

Trang 10

10

CHƯƠNG 2 PHÂN TÍCH VÀ THIẾT KẾ LỚP

Mô tả thuật toán:

Đầu tiên tạo class HoSo để lưu các thuộc tính của 1 đối tượng hồ sơ như: Mã hồ sơ, Họ

và tên, Giới tính, Lương, Ngày làm (ngày chính thức làm việc)

Tạo class Node để định nghĩa các nút trái, nút phải và dữ liệu của cây để hổ trợ cho class BinarySearchTree

Tạo class BinarySearchTree để lưu thuộc tính của các đối tượng theo đề bài Trong class này chứa các phương thức chèn đối tượng vào cây, sắp xếp theo thứ tự thời gian từ cũ nhất đến mới nhất và in ra danh các hồ sơ, tìm kiếm theo tên, tìm kiếm theo khoảng thời gian t ừ A đến B

Yêu cầu: cần có kiến thức về lớp, cây tìm kiếm nhị phân, biết áp dụng thuật toán tìm kiếm trong cây BST và không kém phần quan trọng là khả năng làm winform để hoàn thành phần giao diện của bài ở chương 3

2.2 Sơ Đồ Lớp

2.3 Cài Đặt Lớp

Downloaded by vu ga (vuchinhhp2@gmail.com)

Trang 11

public string MaHoSo { get; set; }

public string Ten { get; set; }

public string GioiTinh { get; set; }

public int Luong { get; set; }

public DateTime NgayLam { get; set; }

}

public class Node

{

public Node LeftNode { get; set; }

public Node RightNode { get; set; }

public HoSo Data { get; set; }

}

public class BinarySearchTree

{

public Node Root { get; set; }

public bool Insert(HoSo value)

{

Node before = null, after = this.Root;

while (after != null)

if (this.Root == null)

this.Root = newNode;

Trang 12

12

parent.Data.MaHoSo, parent.Data.Ten, parent.Data.GioiTinh, parent.Data.Luong, parent.Data.NgayLam.ToString("d",viVn)); TraverseInOrder(parent.RightNode);

finddate(parent.LeftNode, date1, date2);

if (parent.Data.NgayLam <= date2 && parent.Data.NgayLam >= date1)

HoSo h = new HoSo();

Console.WriteLine("Nhap Ma ho so: ");

Console.WriteLine("Nhap Luong: ");

h.Luong = int.Parse(Console.ReadLine());

Console.WriteLine("Nhap Ngay lam: ");

BinarySearchTree binaryTree = new BinarySearchTree();

Console.WriteLine("Nhap so luong ho so can them:");

int n = int.Parse(Console.ReadLine());

for (int i = 1; i <= n; i++)

Downloaded by vu ga (vuchinhhp2@gmail.com)

Trang 13

Console.WriteLine("nhap ten can tim kiem: ");

string name = Console.ReadLine();

binaryTree.findname(binaryTree.Root, name);

Console.WriteLine("nhap khoang thoi gian can tim kiem");

DateTime date1 = DateTime.Parse(Console.ReadLine());

DateTime date2 = DateTime.Parse(Console.ReadLine());

binaryTree.finddate(binaryTree.Root, date1, date2);

Console.ReadLine();

}

}

}

Trang 14

binaryTree = new BinarySearchTree();

dataTable = new DataTable();

Trang 15

HoSo hs = new HoSo(txtMahs.Text, txtHoten.Text, txtGioitinh.Text, txtLuong.Text, dtpNgaylam.Value);

Trang 16

List<HoSo> lsths = new List<HoSo>();

string value = txtTimkiemtheoten.Text;

public string MaHoSo { get; set; }

public string Ten { get; set; }

public string GioiTinh { get; set; }

public string Luong { get; set; }

public DateTime NgayLam { get; set; }

public HoSo(string maHoSo, string ten, string gioiTinh, string luong, DateTime ngayLam)

{

this.MaHoSo = maHoSo;

this.Ten = ten;

this.GioiTinh = gioiTinh;

this.Luong = luong;

this.NgayLam = ngayLam;

}

}

public class Node

{

public Node LeftNode { get; set; }

public Node RightNode { get; set; }

public HoSo Data { get; set; }

}

public class BinarySearchTree

{

public Node Root { get; set; }

public bool Insert(HoSo value)

{

Node before = null, after = this.Root;

while (after != null)

{

Downloaded by vu ga (vuchinhhp2@gmail.com)

Trang 17

if (this.Root == null)

this.Root = newNode;

Trang 18

18

CHƯƠNG 4 THẢO LUẬN & ĐÁNH GIÁ

Kết quả của thuật toán:

Kết quả chạy trên winform:

Chức năng thêm dữ liệu:

Downloaded by vu ga (vuchinhhp2@gmail.com)

Trang 19

19

Chức năng tìm kiếm theo tên:

Chức năng tìm kiếm theo thời gian:

5.2 M ột Số Tồn Tại

Những hạn chế trong việc lưu trữ thông tin trên BST đó là với lượng dữ liệu lớn sẽ mất nhiều thời gian và gặp khó khăn trong việc quản lý và truy xuất dữ liệu

Trang 20

20

Biện pháp của vấn đề này là liên kết các dữ liệu đã lưu trữ trong database với window forms Khi ta cần truy xuất hay cập nhật thông tin chỉ cần truy vấn theo cú pháp SQL

5.3 Hướng Phát Triển

Từ thuật toán Cây tìm kiếm nhị phân ta có thể ứng dụng trong việc quản lý sinh viên, quản

lý khách sạn, quản lý nhân sự trong 1 công ty

Downloaded by vu ga (vuchinhhp2@gmail.com)

Trang 21

21

- Đưa Link Toàn Bộ Mã Nguồn Lên GitHub và Đưa Link Vào Đây

https://github.com/PhongNguyen25/Do_An_CTDL.git

- Viết Hướng Dẫn Cách Cài Đặt Để Chạy

Các bước tạo Form:

Bước 1: Việc đầu tiên cần làm là tạo 1 Window Forms

Bước 2: Tạo các label và đặt tên dữ liệu cần nhập ở phần Text trong Properties tương ứng với tên của các cột trong 1 bảng

Ví dụ: Họ và tên, Lương

Bước 3: Tạo các textbox để nhập dữ liệu và textbox cho phần tìm kiếm theo tên và đặt tên cho textbox ở phần Name trong Properties để ta truy cập đến ô đó khi tạo sự kiện Do ta tìm kiếm theo thời gian nên sẽ tạo datetimepicker để chọn thời gian mà không cần nhập và

dễ dành cho việc tìm kiếm

(đây là kết quả khi tạo datetimepicker) (đây là textbox)

Lưu ý tạo textbox tương ứng với label

Bước 4: Tạo các button với chức năng thêm và tìm kiếm (tìm kiếm ở đây có 2 buttons là tìm kiếm theo tên và tìm kiếm theo thời gian)

Bước 5: Tạo một datagridview để xuất dữ liệu đã nhập

Trang 22

22

Lưu ý: tạo 1 datagridview trống và không cần tạo cột vì phần này được xử lý trong code Tất cả button, datetimepicker, textbox phải được đặt tên ở phần Name để xử lý sự kiện Code chi tiết đã được trình bày ở phần Chi tiết chức năng

Chạy chương trình:

Cần nhập đầy đủ tất cả thông tin trước khi click “thêm”, nếu không sẽ có thông báo lỗi

Ở phần tìm kiếm theo tên khi ta nhập bất kể họ hoặc tên hoặc tên đệm đã có thì form sẽ xuất ra thông tin nếu không sẽ hiện thông báo không tìm thấy và quay lại bảng có đầy đủ đối tượng Khi cần reset lại phần tìm kiếm theo tên chỉ cần xóa những gì đã nhập ở ô text tìm kiếm và click “Tìm”, giao diện sẽ thông báo không tìm thấy và quay lại với đầy đủ tất

cả các đối tượng và ta sẽ thực các thao tác tiếp theo

Ở phần tìm kiếm theo thời gian thì ta chỉ việc chọn khung thời gian và click “Tìm”, thông tin đối tượng cần tìm sẽ xuất hiện Nếu không tìm thấy sẽ thông báo và quay lại giao diện ban đầu Khi muốn reset tìm kiếm ta chọn khung thời gian ngoài phạm vi các đối tượng và click “Tìm”, tương tự phần reset tìm kiếm theo tên

- Phân Công Công Việc

Nguyễn Nhựt Phong Viết code phần thuật toán và code

Winform, báo cáo chương 3

Nguyễn Tôn Minh Quân Làm báo cáo chương 2

Lưu ý: nhiệm vụ cần phân công rõ ràng, ko có kiểu là “cùng nhau” làm cái này !

Downloaded by vu ga (vuchinhhp2@gmail.com)

Trang 23

23

TÀI LIỆU THAM KHẢO

1 Tham khảo kiểu dữ liệu DateTime và phương thức liên quan:

https://openplanning.net/10457/csharp-date-time

2 Tham khảo DataTable và các phương thức:

https://freetuts.net/datatable-trong-c-sharp-5447.html

Ngày đăng: 23/02/2023, 21:57

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w