Tải bản đầy đủ (.docx) (53 trang)

Thiết kế ứng dụng android và gửi dữ liệu lên database ứng dụng trong việc gọi món trong nhà hàng và quán ăn

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 (1.26 MB, 53 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
KHOA ĐÀO TẠO CHÂT LƯỢNG CAO

ĐỒ ÁN MÔN HỌC 2
ĐỀ TÀI: THIẾT KẾ ỨNG DỤNG ANDROID VÀ
GỬI DỮ LIỆU LÊN DATABASE ỨNG
DỤNG TRONG VIỆC GỌI MÓN
TRONG NHÀ HÀNG VÀ QUÁN ĂN
GV hướng dẫn:
SV thực hiện:

Ngành:

TS. Phan Học
Nguyễn Vũ Long
MSSV: 171057
Trần Thái Hà Phong
MSSV: 17161115
CNKT Điện tử- Viễn thơng

Hồ Chí Minh, ngày 10 tháng 01 năm 2022


CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
----***----

Tp. Hồ Chí Minh, ngày 10 tháng 01 năm 2022

NHIỆM VỤ ĐỒ ÁN MÔN HỌC


Họ và tên sinh viên: Nguyễn Vũ Long
Trần Thái Hà Phong

MSSV:17161057
MSSV: 17161115

Ngành: CNKT Điện tử- Viễn thông

Lớp:18161CLVT2B

Giảng viên hướng dẫn:Th.S Phan Học

ĐT: 0869683324

Ngày nhận đề tài:06/09/2021

Ngày nộp đề tài: 10/01/2022

1. Tên đề tài: Thiết kế ứng dụng android và gửi dữ liệu lên database ứng dụng trong
việc gọi món trong nhà hàng và quán ăn
2. Các số liệu, tài liệu ban đầu:
- Trang web />- Trang web />3. Nội dung thực hiện đề tài:
- Tìm hiểu về cách xây dựng mobile app bằng ngơn ngữ Dart sử dụng SDK Flutter.
- Tìm hiểu và xây dựng database.
- Kết nối mobile app và database thành một hệ thống hoàn chỉnh.
4. Sản phẩm:
Ứng dụng android có thể gửi dữ liệu lên database.

GIẢNG VIÊN HƯỚNG DẪN



CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT
NAM

-

Độc lập – Tự do – Hạnh Phúc

-

*******

- PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên Sinh viên: Nguyễn Vũ Long
MSSV: 17161057
Trần Thái Hà Khang

MSSV: 17161115

Ngành: CNKT Điện tử – Viễn thông
Tên đề tài: Thiết kế ứng dụng android và gửi dữ liệu lên database ứng dụng trong việc gọi
món trong nhà hàng và quán ăn
Họ và tên Giáo viên hướng dẫn: TS Phan Học
NHẬN XÉT
1. Về nội dung đề tài & khối lượng thực hiện:

.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
Ưu điểm:

.....................................................................................................................................
.....................................................................................................................................
.....................................................................................................................................
2. Khuyết điểm:
.....................................................................................................................................

.....................................................................................................................................
.....................................................................................................................................
3. Đề nghị cho bảo vệ hay không?
.....................................................................................................................................
4. Đánh giá loại:
.....................................................................................................................................
5. Điểm:……………….(Bằng chữ:...........................................................................)
.....................................................................................................................................

Tp. Hồ Chí Minh, ngày 10 tháng 01
Giáo viên hướng dẫn

năm 2022


(Ký & ghi rõ họ tên)
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT
NAM

-

Độc lập – Tự do – Hạnh Phúc

-


*******

- PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
Họ và tên Sinh viên: Nguyễn Vũ Long
MSSV: 17161057
Trần Thái Hà Khang

MSSV: 17161115

Ngành: CNKT Điện tử – Viễn thông
Tên đề tài: Thiết kế ứng dụng android và gửi dữ liệu lên database ứng dụng trong việc gọi
món trong nhà hàng và quán ăn
Họ và tên Giáo viên hướng dẫn: TS Phan Học
NHẬN XÉT
Về nội dung đề tài & khối lượng thực hiện:
.....................................................................................................................................
1.

.....................................................................................................................................
.....................................................................................................................................
2.
Ưu điểm:
.....................................................................................................................................

.....................................................................................................................................
.....................................................................................................................................
3.
Khuyết điểm:
.....................................................................................................................................


.....................................................................................................................................
Đề nghị cho bảo vệ hay không?
.....................................................................................................................................
4.

Đánh giá loại:
.....................................................................................................................................
5.

Điểm:……………….(Bằng chữ:.......................................................................)
.....................................................................................................................................
6.

Tp. Hồ Chí Minh, ngày

10

tháng 01

Giáo viên phản biện

năm 2022


(Ký & ghi rõ họ tên)

LỜI CẢM ƠN
Quá trình thực hiện Đồ án môn học 2 là giai đoạn quan trọng trong quãng đời mỗi
sinh viên, nó là tiền đề nhằm trang bị kiến thức quý báu, kỹ năng nghiên cứu lẫn kinh

nghiệm khi thi công để chuẩn bị cho đồ án tốt nghiệp.
Trước tiên, em xin gửi lời cảm ơn chân thành đến các Thầy trong khoa Đào tạo
Chất lượng cao, trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh, những
người đã truyền đạt cho em những kiến thức quý báu, chỉ dẫn và định hướng cho nhóm
trong q trình học tập.
Em xin trân trọng cảm ơn thầy Phan Học đã tận tình giúp đỡ, định hướng cách tư
duy và cách làm việc khoa học. Đó là những góp ý hết sức q báu khơng chỉ trong q
trình thực hiện đồ án này mà cịn là hành trang tiếp bước cho em trong quá trình học tập
và lập nghiệp sau này.
Do kiến thức còn hạn hẹp nên mặc dù đã hoàn thành đề tài nhưng cũng khó tránh
khỏi thiếu sót, rất mong sự chỉ dẫn và đóng góp của Thầy để đề tài của em được hoàn
thiện hơn.
Em xin chân thành cảm ơn!


LỜI NĨI ĐẦU
Trong tình hình dịch bệnh COVID-19 đang ngày càng diễn biến theo xu hướng
tiêu cực, kéo theo nhiều hệ luỵ khác nhau gây thiệt lớn về người và của trong nước ta nói
riêng và trên tồn thế giới nói chung. Nhưng song song nó, đây cũng là cơ hội để các
công nghệ không dây, IoT bước vào thời kì bùng nổ vì giảm sự tiếp xúc giữa người với
người. Nắm bắt được điều này, nhóm chúngg em đã quyết định lựa chọn đề tài:” THIẾT
KẾ ỨNG DỤNG ANDROID VÀ GỬI DỮ LIỆU LÊN DATABASE ỨNG DỤNG
TRONG VIỆC GỌI MÓN TRONG NHÀ HÀNG VÀ QUÁN ĂN”.
Hưởng ứng theo cái qui định phòng chống dịch bệnh, đặc biệt là qui tắc “5K”,
nhóm chúng em đã tiến hành nghiên cứu và xây dựng ra 1 ứng dụng giúp các nhà hàng và
quán ăn có thể sử dụng để nâng cao hiệu quả phịng chống dịch bệnh trong tình hình hiện
tại.


MỤC LỤC



DANH MỤC HÌNH ẢNH
Hình 3.2 Mơ hình cấu tạo nên một project của Flutter……………………………..2
Hình 3.2.1 Sử dụng Figma thiết kế giao diện ứng dụng……………………………5
Hình 3.2.2 Minh họa các tạo một text……………………………………………...6
Hình 3.2.3 Các sử dụng các Container……………………………………………..7
Hình 3.2.4 Cách tạo srolling menu 2 cột…………………………………………...8
Hình 3.3.1 Tạo database MySQL…………………………………………………10
Hình 3.3.2 Bảng sản phẩm……………………………………………………...…11
Hình 3.3.3 Tạo liên kết giữa các bảng…………………………………………….12
Hình 3.4.1 Kết quả bảng báo cáo hóa đơn chi tiết………………………………...14


CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Đặt vấn đề

Trong thời điểm dịch bệnh hiện tại, việc các quán ăn hay nhà hàng đóng cửa là
điều khơng tránh khỏi vì để tránh lây lan dịch giữa các khách hàng với nhau. Từ đị,
nhóm chúng em đã suy nghĩ ra phương hướng giải pháp giúp đỡ các nhà hàng, quán
ăn là nâng cao hiệu quả chống dịch.
Từ những suy nghĩ trên, đồng thơi với bản thân là sinh viên ngành CNKT Điện
tử-Viễn thơng, nhóm chúng em đã quyết định lựa chọn đề:” THIẾT KẾ ỨNG
DỤNG ANDROID VÀ GỬI DỮ LIỆU LÊN DATABASE ỨNG DỤNG TRONG
VIỆC GỌI MÓN TRONG NHÀ HÀNG VÀ QUÁN ĂN”. Với phương hướng đặt
ra là giảm sự tiếp xúc giữa nhân viên phục vụ trong nhà hàng, quán ăn với thực khách
nhiều nhất có thể cũng như tiếp xúc giữa các thực khách với nhau.
1.2 Mục tiêu

Xây dựng thành công ứng dụng điện thoại, tạo , quản lý thành công cơ sở dữ

liệu và kết nối thiết bị và cơ sở dữ liệu.
1.3 Nội dung nghiên cứu
Nghiên cứu về ngơn ngữ lập trình Dart, cách thức xây dựng được ứng dụng
Android. Đồng thời có thể bổ sung được kiến thức về lập trình nâng cao khả năng
sáng tạo của bản thân.
Tạo và quản lý hệ cơ sở dữ liệu.
Kết nối thiết bị với cơ sở dữ liệu
1.4 Phương pháp nghiên cứu
Cài đặt và sử dụng Flutter, sử dụng ngơn ngữ lập trình Dart để xây dựng ứng
dụng điện thoại.
Cài đặt và sử dụng ứng dụng Docker Desktop với mục đích chạy MySQL và
PhpMyAdmin.
Sử dụng PhpMyAdmin quản trị hệ cơ sở dữ liệu MySQL: thêm, xóa, cập nhật
dữ liệu và tạo các bảng.
Kết nối thiết bị với cơ sở dữ liệu.
1.5 Bố cục
Nội dung đề tài gồm 5 chương
-

Chương 1: Tổng quan về đề tài
Chương 2: Cơ sở lý thuyết
Chương 3: Thiết kế và xây dựng hệ thống
Chương 4: Kết quả thực hiện
Chương 5: Kết luận và phương hướng phát triển

9


CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 Ngơn ngữ lập trình Dart và Flutter


2.1.1 Sơ lược về ngơn ngữ lập trình Dart
Dart là một ngữ lập trình với mã nguồn mở đa năng và được phát triển bởi
Google. Ngôn ngữ Dart được ứng dụng trong lập trình web, server và di
động( Android và IOS).
Ngơn ngữ lập trình Dart là ngơn ngữ lập trình hướng đối tượng, hoạt động theo
lớp (class) và sử dụng cú pháp kiểu C để dịch mã JavaScript .
 Ưu điểm khi sử dụng ngơn ngữ lập trình Dart:
- Bộ công cụ đơn giản, dễ sử dụng nhưng mang lại hiệu suất cao .
- Hỗ trợ xác định và sửa lỗi bằng type-safe.
- Có thể biên dịch thành mã x86 và ARM giúp hoạt động một cách trơn tru trên
IOS, Android..
2.1.2. Sơ lược về Flutter
Flutter là một SDK (Software Development Kit) hỗ trợ người dùng phát triển
ứng dụng dành riêng cho Android và IOS.
Flutter còn là một Mobile UI Framework của Google dựa trên ngơn ngữ lập
trình Dart. Cho phép người dùng tạo ra các giao diện trông tự nhiên nhưng đạt hiệu
quả cao về chất lượng trên Android và IOS.
Mơ hình cấu tạo nên một project của Flutter:

Hình 3.2 Mơ hình cấu tạo nên một project của Flutter
MyApp là một Widget được tạo ra từ Widget gốc của Flutter, MaterialApp.

10


MaterialApp có các thuộc tính của màn hình như title, theme và home , nó lại
được tạo ra bởi một widget khác, MyHomePage.
MyHomePage được tạo bởi một widget gốc của flutter, Scaffold
Scaffold đóng vai trị như phần nền để bố trí các thành phần cơ bản khác.

Scaffold có 2 thuộc tính – body và appBar.
Body chứa giao diện chính cịn appBar chứa phần đầu (header) của ứng dụng.
 Ưu điểm của Flutter:
- Xây dựng và phát triển ứng dụng nhanh.
- Giao diện linh hoạt đẹp mắt.
2.2 Ứng dụng Docker

Docker là một dự án mã nguồn mở giúp triển khai các ứng dụng Windows và
Linux vào trong các Container
Container của Docker cho phép người dùng đóng gói tất cả các ứng dụng và
phần mềm cần thiết như thư viện dưới dạng một package.
Xây dựng môi trường phát triển ứng dụng Php và MySql bằng Docker-compose:
-

Bước 1: tạo docker network, điều này giúp các container trong cùng 1 network
có thể giao tiếp với nhau thơng qua container name

Docker network này có tên là mysql , tiếp theo ta sẽ đặt 2 container chạy
mysql và phpmyadmin trong network mysql này
-

Bước 2: Khởi tạo Docker container từ Docker Image của MySql

Trước tiên là tạo một thư mục dùng để lưu dữ liệu của Docker container, ví
dụ: /home/moe/mysql_data
Sau đó, chạy lệnh:
docker
run
--name
learn_mysql

--network
mysql
-v
/home/moe/mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123
-d mysql:5.7
- Bước 3: Khởi tạo Docker container từ Docker Image của PhpMyAdmin
Chạy lệnh sau: docker run --name myadmin -d --network mysql -p 8081:80 -e
PMA_HOST=learn_mysql phpmyadmin/phpmyadmin
- Sau khi hoàn thành cả bước trên ta truy cập vào địa chỉ http://localhost:8081/.
2.3 MySql và PhpMyAdmin
2.3.1 MySQL
MySQL là hệ quản trị cơ sở dữ liệu (Database management) với mã nguồn mở
phổ biến nhất thế giới.
11


Câu lệnh SQL là ngôn ngữ MySQL dùng để trao đổi dữ liệu giữa máy tính và
máy cài MySQL server. Có 4 loại ngơn ngữ: ngơn ngữ định nghĩa dữ liệu, ngôn ngữ
truy vấn dữ liệu, ngôn ngữ thao tác dữ liệu và ngôn ngữ điều khiển dữ liệu.
MySQL lưu trữ dữ liệu trong một bảng (table) gồm nhiều hàng (bảng ghi dữ
liệu) và cột (trường dữ liệu).
MySQL cung cấp các câu lệnh phong phú để kết nối, yêu cầu và truy xuất lấy dữ
liệu phục vụ cho trang web như: chỉnh sửa các hàng trong một mối quan hệ ( chèn,
xóa, cập nhật), thêm/xóa/sửa các đối tượng trong cơ sở dữ liệu, điều khiển việc truy
cập đến cơ sở dữ liệu.
2.3.2 PhpMyAdmin
PhpMyAdmin là phần mềm mã nguồn mở được viết bằng ngôn ngữ PHP giúp
quản trị cở sở dữ liệu MySQL thơng qua giao diện web.
Một số tính năng của PhpMyAdmin như:
-


Quản lý người dùng (User): thêm, xóa, sửa, cấp quyền.
Quản lý cơ sở dữ liệu: Thêm, xóa, sửa, thêm bảng, thêm hàng…
Truy vấn MySQL
Sao lưu và khôi phục

2.3.3 Quá trình phối hợp và hoạt động của MySQL và PhpMyAdmin
Khi Client yêu cầu server cho phép tải một tập tin hay một số dữ liệu lên web, có 4
bước diễn ra:
-

Bước 1: Server sử dụng PHP để tải tập tin.
Bước 2: PHP truyền tập tin đến MySQL và nhờ MySQL lưu trữ tập tin này.
Bước 3: MySQL chấp nhận yêu cầu của PHP.
Bước 4: PHP phản hồi là MySQL đã chấp nhận yêu cầu, lệnh đã được gửi
server có thể in nội dung tập tin đó.

12


CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG
3.1 Phân tích các chứng năng chính của hệ thống

Một số chức năng chính của hệ thống:
Chức năng này sẽ hiển thị tồn bộ thơng tin của các món ăn đang có khi chạy
ứng dụng.
Ngồi thơng tin ta cịn có thể điều chỉnh số lượng món ăn sao cho phù hợp với
yêu cầu.
Chức năng đặt hàng: sau khi chọn món ăn và số lượng thì sẽ đặt hàng để người
quản lý nhà hàng quản lý các đơn hàng này.

Chức năng quản lý các đơn hàng, xuất hóa đơn.
3.2 Quy trình thiết kế ứng dụng đặt hàng
3.2.1 Thiết kế giao diện ứng dụng
Thiết kế giao diện ứng dụng hay còn được gọi là UI Design là cơng đoạn thiết
kế giúp người dùng có khả năng trao đổi với thiết bị điện tử thông qua phần mềm, nút
ấn, thanh trượt và cịn là cơng đoạn quyết định màu sắc, hình ảnh của ứng dụng.
Ở phần này, nhóm em đã chọn Figma làm cơng cụ để thiết kế giao diện

Hình 3.2.1 Sử dụng Figma thiết kế giao diện ứng dụng
3.2.2 Tiến hành lập trình ứng dụng
a. Trang đầu tiên của ứng dụng
Để cho giao diện phù hợp với mọi kích cỡ màn hình, ta import thêm
package ‘dart:ui’ và dùng cú pháp

MediaQuery dùng để đọc trực tiếp kích thước màn hình hiện tại, trường hợp trên
đã cho sẵn kích thước là Pixel 3 là 393 x 786. Tiếp theo đó dùng phương pháp tham
suất chia chiều dài cho 786 và chiều rộng cho 393 ta sẽ có được một giao diện
13


freesize, bằng cách đó khi lập trình các phần cần kích thước, ta chỉ cần nhân kích
thước freesize với kích thước mong muốn ta sẽ có được giao diện phù hợp kích thước
màn hình hiện tại của thiết bị.
Ví dụ:

Để hiệu chỉnh chiều cao của Container là 30 thì ta nhân 30 với tỉ lệ màn hình đã
tính ở trên.
Container là một hộp được sử dụng để chứa một widget con và để thiết lập
kiểu dáng làm nổi bật một nội dung hoặc ngăn cách nội dung này với một nội dung
khác.

Ví dụ như để tạo được một text như “THE CAKE STORE”

Hình 3.2.2 Minh họa cách tạo
một text
Điểm nổi bật của cách thức
lập trình này là ta chia màn hình
thành các cột và các hàng và các
phần tử tiếp theo sẽ được phân cách bằng các container với độ height và witdh xác
định.
14


Hình 3.2.3 Cách sử dụng các Container
Ta giả định body là một column (cột) các phần tử trong cột này gồm các
container. Ở chỗ được đánh số thứ tự 1 là tạo ra một container rỗng có chiều cao 90
nhằm ngăn bỏ 1 khoảng trắng ở trên để chèn Text vào phần tiếp theo phía dưới.
Tương tự vậy container số 2 cũng là một container rỗng và container số 3 được làm
đầy bằng một bức hình. Tiếp tục làm như vậy cho bottom.
Để có thể nhấn chuyển sang trang tiếp theo ta phải sử dụng hàm
GestureDetector nhằm xử lí tất cả cử chỉ, và trong chương trình này cử chỉ chính là
onTap (chạm).

b. Trang thứ hai của ứng dụng
Ở trang này, các món ăn sẽ được triển khai bằng một danh sách từ trên xuống
dưới dạng column, row và có thể scroll được, ta dùng SingleChildScrollView Widget.
Tiếp theo sẽ là các Padding Widget được giới hạn 8.0 theo mọi hướng, ta dùng phần
này để bao bọc các phần như hình ảnh món ăn, giá tiền và số lượng.
Ta sẽ dùng nhiều câu lệnh column và row lồng vào nhau để đặt các Padding vào
nơi mong muốn được minh họa như hình dưới :


15


Hình 3.2.4 Cách tạo Srolling Menu 2 cột
Đầu tiên ta sẽ mặc tồn màn hình là một cột chính ( nơi được đánh số 1 trên
hình), tiếp theo ta sẽ chia cột lớn thành nhiều hàng ( nơi được đánh số 2), từ trên
xuống vậy thì số 2 sẽ là hàng đầu tiên. Trong hàng đầu tiên này ta sẽ chia làm hai cột
được đánh số là 3 và 4, mỗi cột đặt một Padding thì sẽ được kết quả như hình. Làm
tương tự như vậy cho hàng 2,3,4,5…. Theo u cầu.
Để có thể thêm hình vào các Padding, ta kéo hình ảnh vào thư mục Assets trong
thư mục project rồi dùng câu lệnh chèn hình vào nơi mình mong muốn ví dụ: chèn
mình vào Padding đầu tiên, tên hình là an1.jpg

16


Tiếp theo là các phím tăng giảm số lượng của sản phẩm ta lại dùng
GestureDetector để phát hiện cử chỉ và hành động vẫn là OnTap ( chạm). Sử dụng
hàm có sẵn của thư viện đó là hai hàm decreaseFunc và increaseFunc để thực hiện các
yêu cầu.
Giao tiếp với Server: Ở phần này, các món ăn sẽ được xếp vào 1 mảng nhưng
Flutter không hỗ trợ mảng nên ta sắp nó vào 1 list gồm n phần tử tương ứng n món
ăn. Ta tạo thêm 1 class đặt tên là Service.dart, địa chỉ host của device( trường hợp này
là AVD) là 10.0.2.2 được nối vào port 8000 của Php. Trong class này chuỗi các món
ăn đã order sẽ được mã hóa thành Json nhằm mục đích truyền tải dữ liệu giữ client và
server. Giá trị trả về ( danh sách, số lượng món ăn, kết nối với server thành cơng hay
thất bại) sẽ được in ra output nhờ vào câu lệnh print.

3.3 Tạo và xây dựng cơ sở dữ liệu MySQL
17



Đầu tiên ta cần phải truy cập vào http://localhost:8081/ đăng nhập

Hình 3.3.1 Tạo database MySQL
Để quản lí đơn hàng thì ta cần tạo 3 bảng lich_su_giao_dich, san_pham và
hoa_don
a. Bảng san_pham
CREATE TABLE san_pham (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
tenSanPham VARCHAR(30) NOT NULL,
giaTien INT UNSIGNED NOT NULL);

Kiểu giá trị NOT NULL dùng để thiết lập để cột không nhận giá trị NULL tức là
cột này bắt buộc phải có giá trị.
Sau khi đã tạo được bảng, ta tiến hành nhập các món ăn vào bảng
INSERT
INTO
san_pham
(id,
tenSanPham,
giaTien)
VALUES
(1,
'banhchocolate',120000);
INSERT
INTO
san_pham
(tenSanPham,
giaTien)

VALUES
('banhkemtranchau',120000);
INSERT INTO san_pham (tenSanPham, giaTien) VALUES ('banhkepnuong',120000);
INSERT INTO san_pham (tenSanPham, giaTien) VALUES ('banhkemque',120000);
INSERT
INTO
san_pham
(tenSanPham,
giaTien)
VALUES
('1latbanhkemdau',120000);
INSERT
INTO
san_pham
(tenSanPham,
giaTien)
VALUES
('bo5banhkemdau',120000);
INSERT INTO san_pham (tenSanPham, giaTien) VALUES ('cafe',120000);
INSERT INTO san_pham (tenSanPham, giaTien) VALUES ('cacaodaxay',120000);
INSERT INTO san_pham (tenSanPham, giaTien) VALUES ('sodaduahau',120000);
INSERT INTO hoa_don(id, thoiGianGiaoDich) VALUES (1,'2012-12-31');
INSERT INTO lich_su_giao_dich (id, id_hoaDon, id_sanPham, soLuong) VALUES (1,
1,2,9);

Kết quả
18


Hình 3.3.2 Bảng sản phẩm

b. Bảng lich_su_giao_dich
CREATE TABLE lich_su_giao_dich (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_hoaDon INT UNSIGNED not null,
id_sanPham INT UNSIGNED not null,
soLuong INT UNSIGNED Not NULL,
FOREIGN KEY (id_hoaDon) REFERENCES hoa_don (id),
FOREIGN KEY (id_sanPham) REFERENCES san_pham(id)
);

c. Bảng hoa_don
CREATE TABLE hoa_don (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
thoiGianGiaoDich DATE
);

Sau khi đã tạo xong ta liên kết 3 bảng lại với nhau bằng cách vào bộ thiết kế,
chọn create relationship

19


Hình 3.3.3 tạo liên kết giữa các bảng
3.4 Lập trình Php truy vấn dữ liệu MySQL
3.4.1 Kết nối với CSDL MySQL
Để có thể nhập xuất dữ liệu vào MySql ta cần phải kết nối với Mysql trước
$host = 'db_appBanHang';
// Database use name
$user = 'root';

//database user password
$pass = '123';
// database name
$mydatabase = 'appMuaHangDB';
// check the mysql connection status
$conn = new mysqli($host, $user, $pass, $mydatabase);
if ($conn->connect_error) {
die("Connection Failed: " . $conn->connect_error);
return;
}

Khi nãy ta có đề cập đến dữ liệu được mã hóa thành json và khi đến bước này
dữ liệu đấy sẽ được giải mã
$data = json_decode(file_get_contents('php://input'), true);
$danhsachmonan = $data["danhsachmonan"];
$time = date_create('now')->format('Y-m-d');
$sql = "INSERT INTO hoa_don (thoiGianGiaoDich) VALUES ('$time')";

20


$result = $conn->query($sql);
$id_HoaDon = calNewHoaDonID();
for ($x = 0; $x < 9; $x++) {
if ($danhsachmonan[$x]["soLuong"] > 0) {
$soLuong = $danhsachmonan[$x]["soLuong"];
$id = $danhsachmonan[$x]["id"];
$sql = "INSERT INTO lich_su_giao_dich (id_hoaDon, id_sanPham, soLuong)
VALUES
('$id_HoaDon','$id',$soLuong)";

$result = $conn->query($sql);
}
}
$conn->close();

Danh sách món ăn gồm 9 món được đánh số từ 0 đến 8, khi bất kể món ăn nào
có số lượng > 0 thì các thành phần sẽ cập nhật vào các bảng của Mysql bằng $sql.
3.4.2 Tạo trang báo cáo chi tiết hóa đơn
Bằng cách sử dụng vscode và copy file code để chung thư mục với file index, ta
có thể tạo ra thêm một trang mới ở port 8000 bằng cách truy cập vào đường dẫn
http://localhost:8000/doanhthu.php
Ý tưởng: ta sẽ đọc dữ liệu từ bảng hoa_don, san_pham của MySql. Ở những
hàng có cùng id hóa đơn tức cùng 1 đơn hàng, ta có được id của sản phẩm và giá tiền
của sản phẩm. Tính tổng tiền bằng cách
$tongtien = $tongtien + $tien['giaTien'] * $row['soLuong'];

Trong đó
-

Giá tiền được query từ bảng sản phẩm

$queryGiaSanPham = "SELECT giaTien FROM
$row['id_sanPham'];
$getTien = $conn->query($queryGiaSanPham);
- Tên sản phẩm và số lượng

san_pham

$queryTenSanPham = "SELECT tenSanPham FROM san_pham
$row['id_sanPham'];

$getName = $conn->query($queryTenSanPham);
$name = mysqli_fetch_array($getName);
echo "------".$name['tenSanPham'] ." : ".$row['soLuong'] . "
";

Kết quả

21

where

where

id

id

=

=

".

".


Hình 3.4.1 Kết quả bảng báo cáo hóa đơn chi tiết

22



CHƯƠNG 4: KẾT QUẢ THỰC HIỆN
 Giao diện của ứng dụng:

Trang thứ nhất

Trang thứ hai

 Khi đặt đơn hàng đầu tiên, ví dụ chọn 3 bánh chocolate và 5 bánh kẹp nướng nhấn

Buy và nhấn OK. Data sẽ được mã hóa và gửi lên server và số lượng các sản phẩm
vừa chọn sẽ được trả về 0.

23


 Xem thông tin đơn hàng trên MySQL

Truy cập localhost port 8081 bằng chrome http://localhost:8081/
Điền thông tin đăng nhập :
Máy chủ: db_appBanHang
Tài khoản: root
Mật khẩu: 123
Vào database appMuaHangDB
- Ở bảng hóa đơn ta thấy thơng tin số hóa đơn đã được tăng lên 2 (ban đầu
chưa có đơn id thì id =1)

24


-


Ở bảng lịch sử giao dịch ta thấy id 2 và 3 được thêm vào bảng, đó là 2 sản
phẩm vừa được thêm vào, cột id hóa đơn cùng là số 2 chứng tỏ 2 sản phẩm
này là cùng một đơn hàng. Id sản phẩm là 1 và 3 ta đối chiếu sang bảng sản
phẩm để biết được đó là sản phẩm gì và số lượng bao nhiêu.

-

Ở bảng sản phẩm, id 1 và 3 là banhchocolate và banhkepnuong vậy ta đã có
thể thấy được tồn bộ những thơng tin của đơn hàng vừa được gửi từ thiết bị.

 Báo cáo hóa đơn chi tiết

Truy cập localhost port 8000 với tên file là
http://localhost:8000/doanhthu.php ta được kết quả như sau.

25

doanhthu.php


×