SVTH: Mai Thị Hồng My – Lớp 09CNTT1 42
V.3.4. Mức 2.4 chức năng tim kiếm
Hình 17. Mức 2 mô tả dịng dữ liệu từng chức năng tìm kiếm
VI. THIẾT KẾ CƠ SỞ DỮ LIỆU
VI.1. Xác định các thực thể VI.1.1. tb_introduce VI.1.1. tb_introduce
tb_introduce bảng chứa danh mục của chức năng giới thiệu STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh mục ( khóa chính )
2 title varchar 45 Tên danh mục
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 43
VI.1.2. tb_content
tb_content bảng chứa danh sách hiển thị của danh mục
STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh sách hiển thị( khóa chính
)
2 name varchar 45 Tên danh mục
3 src_img text Hình ảnh hiển thị
4 tb_introduce_id int 11 Số thứ tự của danh mục
5 id_stt int 11 Thứ tự danh sách của mỗi danh mục
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 44
VI.1.3. tb_detail
tb_detail bảng chứa nội dung chi tiết bài viết hiển thị
STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh sách hiển thị( khóa chính
)
2 id_stt varchar 45 Thứ tự danh sách của mỗi danh mục
3 name text Tên bài viết
4 content int 11 Nội dung bài viết chi tiết
5 tb_introduce_id int 11 Số thứ tự của danh mục
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 45
VI.1.4. tb_imagedetail
tb_imagedetail bảng chứa hình ảnh hiển thị ở bài viết chi tiết STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh sách hình ảnh( khóa chính
)
2 title varchar 45 Tên hình ảnh
3 src_img text Đƣờng dẫn hình ảnh
4 tb_detail_id int 11 Id bài viết chi tiết 5 tb_introduce_id int 11 Id của danh mục
Bảng 7. tb_imagedetail bảng chứa hình ảnh hiển thị ở bài viết chi tiết
VI.1.5. tb_tour
tb_tour bảng chứa danh mục của chức năng tour
STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh mục ( khóa chính )
2 title varchar 45 Tên danh mục
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 46
VI.1.6. tb_tourcontent
tb_tourcontent bảng chứa danh mục và nội dung chi tiết của chức năng tour
STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh sách tour ( khóa chính )
2 name varchar 45 Tên tour
3 src_img text Đƣờng dẫn hình ảnh
4 content int 11 Nội dung bài viết chi tiết
5 label int 1 Cờ đánh dấu trạng thái lƣu tour và
xóa tour
Bảng 9. tb_tourcontent bảng chứa danh mục và nội dung chi tiết của chức năng tour
VI.1.7. tb_tourimagedetail
tb_imagedetail bảng chứa hình ảnh hiển thị ở bài viết chi tiết
STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh sách tour( khóa chính )
2 title varchar 45 Tên hình ảnh
3 src_img text Đƣờng dẫn hình ảnh
4 tb_detail_id int 11 Id bài viết chi tiết
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 47
VI.1.8. tb_savetour
tb_savetour bảng chứa danh sách khi lƣu tour
STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh sách lƣu( khóa chính )
2 id_save int 11 Id của tour đƣợc luu
Bảng 11. tb_savetour bảng chứa danh sách khi lƣu tour
VI.1.9. tb_keyword
tb_keyword bảng chứa chỉ mục tiêu đề của chức năng tìm kiếm
STT Tên trƣờng Kiểu dữ liệu Độ dài Mô tả
1 id int 11 Id danh sách từ khóa ( khóa chính
)
2 title varchar 45 Chỉ mục tiêu đề
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 48
VI.2. Quan hệ thực thể
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 49
CHƢƠNG 3. THUẬT TỐN ÁP DỤNG
I. TÌM ĐƢỜNG
Nghiên cứu thuật tốn tìm đƣờng đi ngắn nhất trong chức năng tìm đƣờng. Ta đặt ra bài tốn tìm đƣờng đƣờng đi ngắn nhất từ một đỉnh đến các đỉnh cịn lại. Bài tốn này cịn đƣợc gọi là bài tốn tìm đƣờng ngắn nhất từ gốc duy nhất.
Các dạng của bài tốn:
Tìm đƣờng đi ngắn nhất đến đỉnh duy nhất.
Tìm đƣờng đƣờng đi ngắn nhất từ các đỉnh cho trƣớc. Tìm đƣờng đi ngắn nhát cho mọi cặp đỉnh.
I.1 Thuật toán Dijkstra
Giả thiết là các cạnh (cung) (l(u) ≥ 0). Giả sử G có n đính đánh số thứ tự từ 1 tới n. Bài tốn đặt ra là tìm đƣờng đi ngắn nhất từ đỉnh 1 đến các đỉnh còn lại trong đồ thị.
I.1.1. Ký hiệu: = số phần tử chƣa chọn: [ ] { ( ) ( ) ( ) Pr(p) = đỉnh trƣớc đỉnh p theo đƣờng đi ngắn nhất từ gốc đến đỉnh p. d = khoảng các ngắn nhất từ gốc đến các đỉnh còn lịa trong dồ thị Quy ƣớc cho các đỉnh khơng có đƣờng đi từ gốc đến nó.
Mark = Tập đỉnh đã đánh dấu, định nghĩa nhƣ sau:
Mark[i] {
I.1.2. Thực hiện
Khởi tạo: Xuất phả từ đỉnh 1; = n -1 ;
Pr = [1,1,1,…1]
D = a[1,j], j= 1..2( Dòng đầu của ma trận kề A) Mark = [1,0..0]
Ở mỗi bƣớc lặp: Chọn đỉnh đánh dấu là đỉnh có độ dài ngắn nhất trong những
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 50
d[k] = Min {d[i] : Mark[i]= 0 } ; Mark[k]=1.
Cập nhật lại d[j], Pr[j] với những đỉnh j chƣa đánh dấu (Mark[j]=0) theo công thức:
o d[j] = d[k] + a[k,j] nếu d[j] > d[k] +a[k,j]. o Pr[j] = k.
Nếu tất cả mọi đỉnh đã đƣợc chọn, nghĩa là = 0. Dừng, nếu không quay lại bƣớc 2.
I.1.3. Thủ tục Dijkstra
// giả sử đã nhập ma trận chiều dài l theo ma trận kề A // Gán ban đầu cho d, Pr, Mark,
For (int j= 1; j≤ n ; j++) { d[j] = a(1,j) ; pr[j]=1 ; Mark[j] = 0;}
Mark[1] =1 ; n0 = n-1 ; WHILE (n0 > 0)
{d[k] = Min {d[j] : Mark[j]= 0 } ;
// Cập nhật lại , d vào Pr, Mark Mark[k] =1 ; n0 = n0 - 1 ;
For (int j= 1; j≤ n ; j++) if (Mark [j] = 0) && (d[k]+ a[k,j] < d[j])
{ d[j] = d[k] +a[k,j] ; pr[j]=k} }
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 51
I.1.4. Ví dụ
Hình 19. Đồ thị có hƣớng, có trọng số
Ta có ma trận kề A
Gá ầu: cho Mark, d, Pr: Mark = [1, 0, 0, 0, 0, 0] d = [0, 10, 3, , 6, ] Pr = [1,1, 1, 1, 1, 1] B c 1. Ch nh . C p nh t Mark, d, Pr : Mark = [1, 0,1, 0, 0, 0] d = [0, 7,3, , 5, ] Pr = [1, 3, 1, 1, 3, 1] B c 2. Đ nh hiện thờ l . Ch nh . C p nh t Mark, d, Pr : Mark = [1, 0,1, 0, 1, 0] d = [0, 5,3, , 5, 6]
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 52 Pr = [1, 5, 1, 1, 3, 5] B c 3. Đ nh hiện thờ l . Ch nh . C p nh t Mark, d, Pr : Mark = [1, 1, 1, 0, 1, 0] d = [0, 5,3, , 5, 6] Pr = [1, 5, 1, 1, 3, 5] B c 4. Đ nh hiện thờ l . Ch nh . C p nh t Mark, d, Pr : Mark = [1, 1, 1, 0, 1, 1] d = [0, 5,3, , 5, 6] Pr = [1, 5, 1, 1, 3, 5]
Thuật tốn kết thúc vì đỉnh , ta có d[ ] = Min {d[j] : Mark[j] = 0}= d[ ] = . Từ thuật tốn, ta có kết quả sau:
d = [0, 5,3, , 5, 6] Pr = [1, 5, 1, 1, 3, 5] Đ ờ ắn nhất từ n : → → → v ộ l 5 Đ ờ ắn nhất từ n : → v ộ l 3 Đ ờ ắn nhất từ n : → → v ộ l 5 Đ ờ ắn nhất từ n : → → v ộ l 6 K ô ờ ắn nhất từ nh → (d[ ] = ) vì ơ ờng n i từ →
II. XÂY DỰNG THUẬT TOÁN ĐIỀU KHIỂN REMOTE
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 53
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 54
Hình 21. Lƣu đồ thuật toán điều khiển menu di chuyển xuống
Hàm điều khiên remote di chuyển xuống (viết bằng javaScript)
Function moveDown(liMenuLength){
if ($(“#menu” + current).hasClass(“highlight”)) { $(“#menu” +current).removeClass(“highlight”); }
// check position of menu > liMenuLength I = liMenuLength;
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 55 if (current == I – 1 ){ current = 0; } else { current = current + 1; } $("#menu" + current).addClass("highlight"); Phân tích:
Đầu vào là biến current chứa class highlight
Đầu ra là vị trí của biến current đƣợc di chuyển đến
Đầu tiên ta kiểm tra id menu nào có chứa class highlight
Nếu current = Tổng độ dài của menu - 1 thì current = 0;
Nếu current != 0 thì sau mỗi lần gọi thì current = current + 1;
II.2. Điều khiển remote di chuyển lên ở danh mục
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 56
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 57
Hàm điều khiên remote di chuyển lên (viết bằng javaScript)
Function moveLeft(liMenuLength){
if ($("#menu" + current).hasClass("highlight")) { $("#menu" +current).removeClass("highlight"); }
// check position of menu > liMenuLength if (current == 0){ current = (liMenuLength - 1); } else { current = current - 1; } $("#menu" + current).addClass("highlight"); Phân tích:
● Đầu vào là biến current chứa class highlight
● Đầu ra là vị trí của biến current đƣợc di chuyển đến ● Đầu tiên ta kiểm tra id menu nào có chứa class highlight ● Nếu current = 0 thì current = Tổng độ dài của menu - 1; ● Nếu current != 0 thì sau mỗi lần gọi thì current = current – 1;
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 58
II.3. Điều khiển remote di chuyển qua phải ở danh mục chi tiết
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 59
Hình 25. Lƣu đồ thuật tốn điều khiển menu di chuyển qua phải chi tiết
Hàm điều khiển remote di chuyển qua phải (viết bằng javaScript)
Function moveRight(liMenuLength){ if ($("#menu" + current).hasClass("highlight")) { $("#menu" +current).removeClass("highlight"); } if (current == 0){ current = (liMenuLength - 1); }
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 60 else { current = current + 1; } $("#menu" + current).addClass("highlight"); Phân tích:
● Đầu vào là biến current chứa class highlight
● Đầu ra là vị trí của biến current đƣợc di chuyển đến ● Đầu tiên ta kiểm tra id menu nào có chứa class highlight ● Nếu current = Tổng độ dài của menu - 1 thì current = 0 ; ● Nếu current != 0 thì sau mỗi lần gọi thì current = current + 1;
II.4. Điều khiển remote di chuyển qua trái ở danh mục chi tiết
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 61
Hình 27. Lƣu đồ điều khiển remote di chuyển qua trái ở danh mục chi tiết
Hàm điều khiển remote di chuyển qua trái (viết bằng javaScript)
Function moveLeft(liMenuLength){
if ($("#menu" + current).hasClass("highlight")) { $("#menu" +current).removeClass("highlight"); }
// check position of menu > liMenuLength if (current == 0){
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 62 } else { current = current - 1; } $("#menu" + current).addClass("highlight"); Phân tích:
● Đầu vào là biến current chứa class highlight
● Đầu ra là vị trí của biến current đƣợc di chuyển đến ● Đầu tiên ta kiểm tra id menu nào có chứa class highlight ● Nếu current = 0 thì current = Tổng độ dài của menu - 1; ● Nếu current != 0 thì sau mỗi lần gọi thì current = current – 1;
II.5. Điều khiển remote di chuyển lên ở danh mục chi tiết
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 63
Hình 29. Lƣu đồ điều khiển remote di chuyển lên ở danh mục chi tiết
Hàm điều khiển remote di chuyển lên (viết bằng javaScript)
Function moveUp(liMenuLength){
if ($("#menu" + current).hasClass("highlight")) { $("#menu" +current).removeClass("highlight"); }
// check position of menu > liMenuLength if (current == 0){
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 64 current = (liMenuLength - 1); } else { current = current - 2; } $("#menu" + current).addClass("highlight"); Phân tích:
· Đầu vào là biến current chứa class highlight
· Đầu ra là vị trí của biến current đƣợc di chuyển đến · Đầu tiên ta kiểm tra id menu nào có chứa class highlight · Nếu current = 0 thì current = Tổng độ dài của menu - 1; · Nếu current != 0 thì sau mỗi lần gọi thì current = current – 2;
II.6. Điều khiển remote di chuyển xuống ở danh mục chi tiết
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 65
Hình 31. Lƣu đồ điều khiển remote di chuyển xuống ở danh mục chi tiết
Hàm điều khiên remote di chuyển xuống (viết bằng javaScript)
Function moveDown(liMenuLength){
if ($("#menu" + current).hasClass("highlight")) { $("#menu" +current).removeClass("highlight"); }
// check position of menu > liMenuLength if (current == 0){
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 66 current = (liMenuLength - 1); } else { current = current + 2; } $("#menu" + current).addClass("highlight"); Phân tích:
● Đầu vào là biến current chứa class highlight
● Đầu ra là vị trí của biến current đƣợc di chuyển đến ● Đầu tiên ta kiểm tra id menu nào có chứa class highlight ● Nếu current = Tổng độ dài của menu - 1 thì current = 0; ● Nếu current != 0 thì sau mỗi lần gọi thì current = current + 2;
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 67
CHƢƠNG 4. TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
Chƣơng này trình bài kết quả thực hiện đƣợc.
I. KẾT QUẢ ĐẠT ĐƢỢC
Sau khi phân tích thiết kế hệ thống, cơ sở dữ liệu thì tơi đã hồn thành xong 4 chức năng chính của ứng dụng gồm có chức năng giới thiệu, tour, địa điểm và tìm kiếm.
Hình 32. Giao diện của chƣơng trình
I.1. Chức năng giới thiệu
Chức năng này tập trung giới thiệu về các địa điểm tham quan, sự kiện diễn ra hằng năm, các quán ăn nhà hàng nổi tiếng, các món đặc sản, những cây cầu nổi tiếng. Với hình ảnh sinh động, sắc nét, nội dung mô tả lý thú chi tiết sẽ đem lại cho ngƣời dùng khoảng khắc trải nghiệm thú vị cùng với chiếc tivi tại ngay gia đình của mình, hoặc là khám phá địa điểm khi đang đi du lịch với chiếc điện thoại thông minh trên tay.
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 68
Hình 33. Giao diện chức năng giới thiệu trên Samsung Smart TV
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 69
I.2. Chức năng tour
o Cung cấp các tour mẫu
Phần này sẽ cũng cấp cho ngƣời dùng một loạt các tour mẫu và những thông tin chi tiết về tour, các hình ảnh về địa điểm du lịch để ngƣời dùng có thể tìm hiểu và lựa chọn tour du lịch cho mình.Ngồi ra ở chức năng tour ngƣời dùng có thể thực hiện lƣu tour mà mình u thích, có thể xóa tour mà ngƣời dùng đã lƣu.
o Lƣu tour yêu thích
Sau khi tham khảo các tour mẫu, nếu nhƣ chọn đƣợc tour u thích cho mình thì ngƣời dùng có thể lƣu lại bằng cách bấm vào nút lƣu tour, khi đó tour sẽ đƣợc lƣu vào mục tour yêu thích của từng ngƣời dùng.
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 70
o Xóa tour đã lƣu
Nếu muốn xóa tour đã lƣu ta có thể xóa tour bằng 2 cách
● Xóa trực tiếp trong tour mẫu
● Xóa ở mục tour u thích
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 71
I.3. Địa điểm
Chức năng địa điểmgồm có hai phần chính: hiển thị địa điểm và tìm đƣờng:
Hiển thị địa điểm
Các địa điểm đƣợc hiển thị lên bản đồ theo nhóm
I.3.1. Chức năng hiển thị địa điểm lên bản đồ
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 72
I.3.2. Chức năng tìm đƣờng
Hình 38. Giao diện chức năng tìm đƣờng trên Samsung Smart TV
I.4. Tìm kiếm
Sử dụng Fulltext Search của MySQL để tiến hành xây dựng chức năng tìm kiếm nhƣ sau:
Chúng ta tạo bảng dùng lệnh Fulltext của MySQL để chỉ định những trƣờng mà chúng ta đánh dấu chỉ mục cho việc tìm kiếm:
create table tb_keyWord (
id int auto_increment not null, title varchar(200),
content TEXT,
fulltext(title, content) ) ENGINE=MyISAM;
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 73
SVTH: Mai Thị Hồng My – Lớp 09CNTT1 74
II. ĐÁNH GIÁ
Ứng dụng Danang Travel Ứng dụng trên thị trƣờng
Đặc điểm
- Dùng đƣợc trên:
Samsung Smart Tivi
- Thích hợp cho nhiều loại ngƣời dùng, phục vụ cho một ngƣời hoặc một nhóm ngƣời có nhu cầu đi du lịch
- Chỉ dùng đƣợc trên một vài loại
thiết bị cố định, khơng có màn hình to rõ nhƣ Tivi
Phân tích
- Có nhiều chức năng, mang tính
tƣơng tác ngƣời dùng.
- Giới thiệu chi tiết về từng địa danh,