



















Preview text:
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO LẬP TRÌNH NÂNG CAO Đề tài:
Thiết kế phần mềm nhật ký sử dụng son môi cho
phái nữ trên điện thoại nền tảng Android Giảng viên hướng dẫn: TS. Phạm Doãn Tĩnh Sinh viên thực hiện: Lê Quang Minh 20159503 Nguyễn Duy Thịnh 20149575 Nguyễn Minh Thành 20115752 Hoàng Tuấn 20146973 Hà Nội, 5 - 2016 LỜI NÓI ĐẦU
Hiện nay, với việc phát triển vô cùng nhanh chóng của các công nghệ phần mềm,
việc hỗ trợ cuộc sống hàng ngày của con người ngày càng được chú trọng. Một trong
những xu hướng phổ biến nhất hiện nay đó là sự xuất hiện rộng rãi các máy điện thoại
di động chạy trên nền tảng Android. Với nền tảng mở này, hàng loạt các ứng dụng phần
mềm ra đời để phục vụ các mục đích khác nhau của con người như: nhắn tin, ghi chú,
thiết lập thời gian, soạn thảo văn bản… Mỗi một ứng dụng đều phục vụ một mục đích
cụ thể và là công cụ hỗ trợ mãnh mẽ bên cạnh mỗi người sử dụng điện thoại.
Với vấn đề nêu trên, được sự hướng dẫn và định hướng của thầy, nhóm em đã lựa
chọn đề tài: “Thiết kế phần mềm nhật ký sử dụng son môi cho phái nữ trên điện thoại
Android”. Đề tài này sẽ tập trung vào việc nghiên cứu và xây dựng một ứng dụng dựa
trên một số kiến thức nền tảng như sau:
• Tìm hiểu lý thuyết lập trình android.
• Nghiên cứu về cơ sở dữ liệu • Công nghệ Barcode
Mặc dù đã cố gắng và nỗ lực hết sức nhưng chắc chắn đề tài của em vẫn còn
nhiều thiếu sót, em rất mong nhận được sự đóng góp ý kiến và đánh giá của thầy. Em
cũng xin được chân thành cảm ơn sự hướng dẫn nhiệt tình của thầy giáo đã giúp đỡ em
trong quá trình thực tập để hoàn thành đề tài này. 1 MỤC LỤC
LỜI NÓI ĐẦU ................................................................................................................................................. 1
MỤC LỤC ........................................................................................................................................................ 2
DANH SÁCH HÌNH VẼ ................................................................................................................................. 3
CHƯƠNG 1. MỞ ĐẦU ................................................................................................................................... 4
1.1 Đặt vấn đề............................................................................................................................................... 4
1.2 Mục đích đề tài ....................................................................................................................................... 4
1.3 Hướng phát triển đề tài .......................................................................................................................... 5
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT ............................................................................................................... 5
2.1 Cơ sở dữ liệu .......................................................................................................................................... 5
2.1.1 Khái niệm ........................................................................................................................................ 5
2.1.2 Một số ưu điểm CSDL .................................................................................................................... 5
2.1.3 Phân loại ......................................................................................................................................... 7
2.2 Công nghệ quét Barcode......................................................................................................................... 8
2.2.1 Định nghĩa ...................................................................................................................................... 8
2.2.2 Phân loại ......................................................................................................................................... 9
2.2.3 Công nghệ quét ..............................................................................................................................10
2.3 Lập trình android ................................................................................................................................... 11
2.3.1 Tìm hiểu về android ....................................................................................................................... 11
2.3.2 Kiến trúc Android .......................................................................................................................... 11
2.3.3 Môi trường lập trình android..........................................................................................................12
2.3.4 Các thành phần cơ bản của một project Android trên Eclipse .......................................................13
CHƯƠNG 3. Thiết kế phần mềm trên điện thoại Android .........................................................................15
3.1 Sơ đồ khối cho ứng dụng .......................................................................................................................15
3.2 Lập trình các khối ..................................................................................................................................16
3.2.1 Khối cơ sở dữ liệu ..........................................................................................................................16
3.2.2 Khối quản lý cơ sở dữ liệu .............................................................................................................16
3.2.3 Khối khởi tạo bộ khung hiển thị dữ liệu ........................................................................................18
3.2.4 Khối Adapter ..................................................................................................................................18
3.2.5 Khối quét barcode ..........................................................................................................................19
3.2.6 Khối Branch ...................................................................................................................................23
3.2.7 Khối Home .....................................................................................................................................27
3.3 Thiết kế giao diện ..................................................................................................................................29
3.3.1 Giao diện cho lớp Main .................................................................................................................30
3.3.2 Giao diện cho lớp Barcode.............................................................................................................30
3.3.3 Giao diện cho lớp Trend.................................................................................................................31
3.3.4 Giao diện kết nối cơ sở dữ liệu với listview ..................................................................................31
3.3.5 Giao diện chỉnh sửa cơ sở dữ liệu ..................................................................................................32
3.4 File cấu hình cho hệ thống: ...................................................................................................................33
CHƯƠNG 4. ĐÁNH GIÁ KẾT QUẢ ...........................................................................................................35
4.1 Giao diện và chức năng phần mềm .......................................................................................................36
4.1.1 MainActivity ..................................................................................................................................36
4.1.2 Các giao diện chức năng ................................................................................................................37
4.1.3 Giao diện nhập liệu ........................................................................................................................39
4.1.4 Giao diện Scanbarcode ..................................................................................................................40
4.2 Đánh giá kết quả....................................................................................................................................41 2
KẾT LUẬN .....................................................................................................................................................42
TÀI LIỆU THAM KHẢO..............................................................................................................................42 DANH SÁCH HÌNH VẼ
Hình 1.1 Facebook- một ứng dụng phổ biến nhất trên điện thoại................................................................4
Hình 2.1 Minh họa cho một hệ CSDL..............................................................................................................6
Hình 2.2 Một mô hình CSDL thực tế...............................................................................................................8
Hình 2.3 Một thiết bị quét barcode đơn giản..................................................................................................9
Hình 2.4 Mã barcode.........................................................................................................................................9
Hình 2.5 Mã QRCode......................................................................................................................................10
Hình 2.6 Quét barcode trên điện thoại..........................................................................................................10
Hình 2.7 Kiến trúc Android............................................................................................................................11
Hình 3.1 Sơ đồ khối ứng dụng........................................................................................................................15
Hình 4.1 Giao diện phần mềm khi khởi động...............................................................................................36
Hình 4.2 Giao diện khi có navigation view....................................................................................................37
Hình 4.3 Giao diện Trend................................................................................................................................37
Hình 4.4 Giao diện Daily.................................................................................................................................38
Hình 4.5 Giao diện Color................................................................................................................................38
Hình 4.6 Giao diện nhập.................................................................................................................................39
Hình 4.7 Giao diện danh sách.........................................................................................................................40
Hình 4.8 giao diện Scanbarcode.....................................................................................................................41 3
CHƯƠNG 1. MỞ ĐẦU 1.1 Đặt vấn đề
Hiện nay, rất nhiều các ứng dụng trên điện thoại được ra đời nhằm mục đích phục
vụ các nhu cầu từ lớn tới nhỏ nhất của người dùng sao cho thuận lợi nhất.
Hình 1.1 Facebook- một ứng dụng phổ biến nhất trên điện thoại
Với việc ra đời nhiều ứng dụng hỗ trợ người dùng như vậy, việc ra đời một ứng
dụng chuyên biệt dành riêng cho sở thích của phái nữ là vô cùng cần thiết để giúp cuộc
sống của họ trở nên hoàn thiện hơn với chiếc điện thoại thông minh của mình.
1.2 Mục đích đề tài
Từ vấn đề nêu trên, dựa vào việc tìm hiểu về thói quen sử dụng của phái nữ, một
ứng dụng mang tính chất ghi chú, lưu trữ dữ liệu và hỗ trợ đọc dữ liệu từ mã sản phẩm được ra đời.
Trong ứng dụng này của nhóm chúng em, các chức năng đều hướng tới việc sao
cho cung cấp một cách hiệu quả nhất các thông tin về son môi cũng như giúp người sử
dụng ghi chú lại những gợi ý hay mẹo dùng sao cho thuận tiện nhất. Đơn giản hơn, người
dùng có thể sử dụng phần mềm như một lựa chọn sáng giá trong thời gian rảnh của mình. 4
1.3 Hướng phát triển đề tài
Đây là một đề tài có hướng phát triển rất lớn. Nếu có thể, ứng dụng tích hợp thêm
một số chức năng như nhận diện và ra lệnh bằng giọng nói, phản hồi người dùng bằng
ngôn ngữ tiếng việt cùng với khả năng kết nối như một mạng xã hội.
Bên cạnh đó, khi ứng dụng được thương mại hóa, việc quảng cáo đối với các
nhãn hàng son môi sẽ trở nên dễ dàng hơn khi họ có một nơi để tiếp cận khách hàng tốt hơn bao giờ hết.
CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Để có thể tạo ra một ứng dụng có khả năng ghi chép, lưu trữ và hiển thị dữ liệu,
cần có những kiến thức cơ bản về cơ sở dữ liệu. Sau khi đã tổng hợp được những kiến
thức cơ bản về cơ sở dữ liệu, nhóm em cần nắm được việc lập trình Android diễn ra như
thế nào và những yếu tố cần thiết để tạo ra một ứng dụng chạy ổn định trên nền tảng này.
Với nhiệm vụ đọc được mã sản phẩm, việc sử dụng và điều khiển camera của điện thoại
là việc không thể thiếu trong quá trình lập trình.
Dưới đây là phần trình bày cơ sở lý thuyết của nhóm chúng em.
2.1 Cơ sở dữ liệu
2.1.1 Khái niệm
Cơ sở dữ liệu (viết tắt CSDL; tiếng Anh là database) được hiểu theo cách định
nghĩa kiểu kĩ thuật thì nó là một tập hợp thông tin có cấu trúc. Tuy nhiên, thuật ngữ này
thường dùng trong công nghệ thông tin và nó thường được hiểu rõ hơn dưới dạng một
tập hợp liên kết các dữ liệu, thường đủ lớn để lưu trên một thiết bị lưu trữ như đĩa hay
băng. Dữ liệu này được duy trì dưới dạng một tập hợp các tập tin trong hệ điều hành hay
được lưu trữ trong các hệ quản trị cơ sở dữ liệu.
2.1.2 Một số ưu điểm CSDL
• Giảm sự trùng lặp thông tin xuống mức thấp nhất. Do đó đảm bảo thông tin
có tính nhất quán và toàn vẹn dữ liệu.
• Đảm bảo dữ liệu có thể được truy xuất theo nhiều cách khác nhau.
• Nhiều người có thể sử dụng một cơ sở dữ liệu. 5
Hình 2.1 Minh họa cho một hệ CSDL
• CSDL có thể giải quyết được :
o Tính chủ quyền của dữ liệu. o Thể hiện ở phương diện an toàn dữ liệu.
o Khả năng biểu diễn mỗi liên hệ ngữ nghĩa của dữ liệu và tính chính xác của dữ liệu.
o Người khai thác cơ sở dữ liệu phải cập nhật cho CSDL những thông tin mới nhất.
• Tính bảo mật và quyền khai thác thông tin của người sử dụng.
o Do ưu điểm CSDL có thể cho nhiều người khai thác đồng thời. nên
cần phải có một cơ chế bảo mật phân quyền khai thác CSDL.
o Các hệ điều hành nhiều người sử dụng hay cục bộ đều cung cấp cơ chế này. • Tranh chấp dữ liệu.
• o Khi nhiều người cùng truy nhập CSDL với các mục đích khác nhau. Rất
có thể sẽ xảy ra hiện tượng tranh chấp dữ liệu.
o Cần có cơ chế ưu tiên khi truy cập CSDL. Ví dụ: admin luôn có thể
truy cập cơ sở dữ liệu.
o Cấp quyền ưu tiên cho từng người khai thác. 6
• Đảm bảo an toàn dữ liệu khi có sự cố.
o Khi CSDL nhiều và được quản lý tập trung. Khả năng rủi ro mất
dữ liệu rất cao. Các nguyên nhân chính là mất điện đột ngột hoặc
hỏng thiết bị lưu trữ.
o Hiện tại có một số hệ điều hành đã có cơ chế tự động sao lưu ổ
cứng và fix lỗi khi có sự cố xảy ra.
o Tuy nhiên: cẩn tắc vô áy náy. Chúng ta nên sao lưu dự phòng cho
dữ liệu đề phòng trường hợp xấu xảy ra.
2.1.3 Phân loại
Cơ sở dữ liệu được phân chia ra nhiều loại khác nhau :
• Cơ sở dữ liệu dạng file: dữ liệu được lưu trữ dưới dạng các file có thể là text,
ascii, *.dbf. Tiêu biểu cho cơ sở dữ liệu dạng file là*.mdb Foxpro
• Cơ sở dữ liệu quan hệ: dữ liệu được lưu trữ trong các bảng dữ liệu gọi là các thực
thể, giữa các thực thể này có mối liên hệ với nhau gọi là các quan hệ, mỗi quan
hệ có các thuộc tính, trong đó có một thuộc tính là khóa chính. Các hệ quản trị
hỗ trợ cơ sở dữ liệu quan hệ như: MS SQL server, Oracle, MySQL...
• Cơ sở dữ liệu hướng đối tượng: dữ liệu cũng được lưu trữ trong các bảng dữ liệu
nhưng các bảng có bổ sung thêm các tính năng hướng đối tượng như lưu trữ thêm
các hành vi, nhằm thể hiện hành vi của đối tượng. Mỗi bảng xem như một lớp dữ
liệu, một dòng dữ liệu trong bảng là một đối tượng. Các hệ quản trị có hỗ trợ cơ
sở dữ liệu hướng đối tượng như: MS SQL server, Oracle, Postgres
• Cơ sở dữ liệu bán cấu trúc: dữ liệu được lưu dưới dạng XML, với định dạng này
thông tin mô tả về đối tượng thể hiện trong các tag. Đây là cơ sở dữ liệu có nhiều
ưu điểm do lưu trữ được hầu hết các loại dữ liệu khác nhau nên cơ sở dữ liệu bán
cấu trúc là hướng mới trong nghiên cứu và ứng dụng. 7
Hình 2.2 Một mô hình CSDL thực tế
2.2 Công nghệ quét Barcode
2.2.1 Định nghĩa
Đây là một công nghệ dùng để nhận dạng và thu thập dữ liệu, dựa vào một mã số hoặc
chữ số cho một đối tượng nào đó. Mã vạch này bao gồm dãy vạch có độ lớn nhỏ khác
nhau và có khoảng trống song song xen kẽ, chúng được sắp xếp theo một quy tắc mã
hóa nhất định nào đó để các máy quét, máy đọc mã vạch có thể đọc được thông tin. Hay
định nghĩa một cách dễ hiểu nhất là mã vạch chính là sự thể hiện thông tin dưới dạng
nhìn thấy được trên các bề mặt của sản phẩm, hàng hóa mà con người chúng ta có thể
nhìn thấy và máy móc có thể đọc được. 8
Hình 2.3 Một thiết bị quét barcode đơn giản
2.2.2 Phân loại
• Loại 1 : Một là mã vạch tuyến tính hay còn biết đến là mã vạch 1 chiều (1D).
Cách để nhận biết mã vạch tuyến tính này là, mã vạch này là các đường thẳng
song song với nhau và có độ rộng chênh lệch với nhau. Tiêu biểu và được sử
dụng rộng rãi nhất mã vạch tuyến tính đó chính là loại EANUCC. Đây là loại mã
được sử dụng phổ biến in trên các sản phẩm trên thế giới. Hình 2.4 Mã barcode
• Loại 2: Hai là mã vạch 2 chiều hay còn gọi là mã ma trận. Nhưng ưu điểm của
nó so với mã vạch tuyến tính thì nó lưu trữ nhiều thông tin hơn. Tiêu biểu trong
đây có thể kể đến QR code 9 Hình 2.5 Mã QRCode
2.2.3 Công nghệ quét
Với ứng dụng trên điện thoại di động, ta sử dụng camera để quét barcode nên công
nghệ được sử dụng dựa trên nguyên lý Máy quét mã vạch 2D được sử dụng bằng công
nghệ chụp ảnh ma trận.
• Công nghệ chụp ảnh ma trận được sử dụng bằng camera.
• Cách thức vận hành: Máy quét mã vạch 2D sẽ chụp ảnh mã vạch và đưa vào bộ
xử lý trong máy để giải mã các ma trận thành các đoạn văn bản thuần túy.
Các loại mã vạch 2D thường gặp: • Datamatrix, QR Code • PDF417
Hình 2.6 Quét barcode trên điện thoại 10
2.3 Lập trình android
2.3.1 Tìm hiểu về android
Android là một "Hệ Điều Hành" được cài đặt trên một số phần cứng riêng biệt
mà ở đây chủ yếu là cài đặt trên các thiết bị smartphone (của SamSung, LG, HTC,
Motorola ... ). Cũng giống như các hệ điều hành khác trên điện thoại (window phone 7,
ios, blackberry ...), Android là một hệ điều hành dành cho điện thoại được viết từ java,
mã nguồn mở hoàn toàn giúp có các lập trình viên cài đặt các ứng dụng trên thiết bị do chính mình viết ra.
Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ Java. Sự ra mắt
của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị
cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm
mục đính tạo nên một chuẩn mở cho điện thoại di động trong tương lai.
2.3.2 Kiến trúc Android
Hình 2.7 Kiến trúc Android
Tầng 1 :tầng Application là tầng ở trên cùng cách xa với phần cứng nhất: Chứa
các ứng dụng mà lập trình viên phát triển như : browser, Contacts, media.
Tầng 2:Application Framework
• Activity Manager - quản lý vòng đời của các ứng dụng.
• Windows Manager - quản lý form của các ứng dụng.
• Content Providers - cho phép các ứng dụng truy cập dữ liệu từ các ứng
dụng khác hoặc để chia sẻ dữ liệu của riêng ứng dụng 11
• Google xây dựng cho các developer để phát triển các ứng dụng của họ
trên Android chỉ bằng cách gọi các API.
• View UI - để xây dựng layout của ứng dụng bao gồm: list view, text
field, button, dialog, form …
• Resource Manager - cung cấp cách thức truy cập đến non-code
resources như các asset, graphic, image, music, video …
• Notification Manager - cho phép tất cả các ứng dụng hiển thị thông báo
của mình trên hệ điều hành. Tầng 3:Libraries
Là các thư viện được viết bằng ngôn ngữ C/C++ sẽ được các developer phát triển
ứng dụng android thông qua tầng Android Framework. Có thể kể ra đây một số thư viện
quen thuộc với các lập trình viên như:
• Media Libraries – mở rộng từ PacketVideo’s OpenCORE. Hỗ trợ nhiều
định dạng video và image phổ biến: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG
• Surface Manager – quản lý việc hiển thị và kết hợp đồ họa 2D và 3D.
• LibWebCore – dùng webkit engine cho việc render trình duyệt mặc
định của HDH Android browser và cho dạng web nhúng (như HTML nhúng)
• OpenGL|ES – thư viện đồ họa 2D và 3D
• SQLite – quản lý database của ứng dụng
• Runtime Android một tập hợp các thư viện Java Core.
• Máy ảo Dalvik thực thi các file định dạng .dex (Dalvik Excutable)
• Mỗi ứng dụng Android chạy trên tiến trình riêng của máy ảo Dalvik.
Dalvik được viết để chạy nhiều máy ảo cùng một lúc một cách hiệu
quả trên cùng một thiết bị.
Tầng 4: Kernel Linux layer:
Dựa trên Kernel Linux version 2.6 bởi nó cung cấp các trình điều khiển các thiết
bị phần cứng(driver), quản lý tiến trình, quản lý tài nguyên, bảo mật,... như sau: • Security system • Memory management
• Process management • Network stack • Driver model.
2.3.3 Môi trường lập trình android
Android SDK bao gồm các công cụ riêng lẻ như: debugger, các thư viện, trình
giả lập điện thoại Android, các tài liệu hỗ trợ và code mẫu. Hiện Android cung cấp bộ
công cụ này trên nhiều nền tảng hệ điều hành khác nhau (Windows, Linux, Mac,...),
miễn là có sẵn Java Development Kit, Apache Ant và Python2.2 trở lên.
Android SDK cung cấp các công cụ và API cần thiết để bắt đầu phát triển các ứng
dụng trên nền tảng Android bằng cách sử dụng ngôn ngữ lập trình Java. Những đặc tính 12 •
Ứng dụng framework cho phép tái sử dụng và thay thế các thành phần •
Dalvik máy ảo được tối ưu hóa cho các thiết bị di động •
Tích hợp trình duyệt dựa trên động cơ WebKit mã nguồn mở •
Tối ưu hóa đồ họa được hỗ trợ bởi một tùy chỉnh đồ họa 2D thư
viện; đồhọa 3D dựa trên những đặc điểm kỹ thuật OpenGLES 1,0 (Tùy chôn tăng
tốc phần cứng ) • SQLite cho việc lưu trữ dữ liệu cấu trúc •
Phương tiện truyền thông hỗ trợ cho âm thanh phổ biến, video, và
vẫn cònđịnh dạng hình ảnh (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
• GSM điện thoại (phụ thuộc phần cứng) •
Bluetooth, EDGE, 3G và WiFi (phụ thuộc phần cứng) •
Camera, GPS, la bàn, và gia tốc (phụ thuộc phần cứng) •
Môi trường phát triển phong phú bao gồm một mô phỏng thiết bị,
công cụđể gỡ lỗi, bộ nhớ và profiling hiệu suất, và một plugin cho IDE Eclipse
Kiến trúc Android Sơ đồ dưới đây cho thấy các thành phần chính của hệ điều
hành Android. Mỗi phần được mô tả chi tiết hơn dưới đây.
Môi trường lập trình (IDE) chính thức của Android là Eclipse (từ phiên bản 3.2)
với sự hỗ trợ của plugin Android Development Tools (ADT). Tuy nhiên, người lập trình
có thể sử dụng bất kỳ 1 IDE hay trình soạn thảo văn bản nào để viết code Java và XML
rồi biên dịch nên ứng dụng hoàn chỉnh bằng cách sử dụng dòng lệnh (command lines).
Ứng dụng Android được đóng gói thành các file .apk và đuợc lưu trong thư mục
/data/app của hệ điều hành Android.Java Development Kit (JDK) 5.0.
Một số công cụ hỗ trợ lập trình Android tiêu biểu:
SQLite Manager: Là một addon của Firefox giúp quản lí cơ sở dữ liệu SQLite của Android.
DroidDraw: Giúp thiết kế file XML giao diện ứng dụng.
Balsamiq Mockups và AdobeFireworks: Giúp nhanh chóng phác thảo ý tưởng và giao
diện sơ bộ của ứng dụng.
StarUML: Vẽ các lược đồ UML hỗ trợ phân tích thiết kế.
2.3.4 Các thành phần cơ bản của một project Android trên Eclipse
AndroidManifest.xml: file XML mô tả ứng dụng và các thành phần đuợc cung
cấp bởi ứng dụng (activities, services,...). Là nền tảng của mọi ứng dụng Android, file
AndroidManifest.xml được đặt trong thư mục root và cho biết những thành phần có
trong ứng dụng của: các activities, các services,...cũng như cách các thành phần ấy gắn
bó với nhau. Các thành phần của AndroidManifest.xml:
• uses-persmission: chỉ định các quyền mà ứng dụng của ta đuợc cấp để
hoạt động trôi chảy (như đã nói, các ứng dụng Android nằm dưới nhiều
lớp bảo mật khác nhau). 13
• permission: chỉ định các quyền mà các activities hay services yêu cầu
các ứng dụng khác phaỉ có mới được truy cập dữ liệu của ứng dụng của ta.
• instrumentation: chỉ định phần code cần được gọi khi xảy ra những sự
kiện quan trọng (chẳng hạn khởi động activities) nhằm phục vụ việc
ghi chú (logging) và tra soát (monitoring)
• uses-library: nhằm kết nối với các thành phần có sẵn của Android (như service tra bản đồ,...)
• uses-sdk: có thể có hoặc không, chỉ ra phiên bản củaAndroid mà ứng dụng này yêu cầu.
• application: định nghĩa phần trung tâm của ứng dụng của file manifest.
build.xml: Một file chứa mã script Ant (ant.apache.com) nhằm compile và
cài đặt ứng dụng lên máy.
default.properties: file property tạo bởi script Ant trên. bin/ : nơi
chứa ứng dụng sau khi được compile. bin/classes/ : chứa các lớp
Java đã được compile. bin/classes.dex : chứa các file executable tạo bởi các lớp Java.
bin/yourapp.ap_ : chứa các tài nguyên của ứng dụng, đóng gói thành 1 file zip.
bin/yourapp-debug.apk hay bin/yourapp-unsigned.apk : chứa chính ứngdụng Android của ta.
libs/ : nơi chứa các file Java JAR ứng dụng yêu cầu (third party). src/ :
nơi chứa mã nguồn Java của ứng dụng. res/ : chứa các tài nguyên của
ứng dụng, như các icons, GUI layouts,... res/drawable/ : chứa file hình ảnh (PNG, JPEG,...).
res/layout/ : chứa UI layout, dưới dạng XML. res/menu/ :
chi tiết các menu, dưới dạng XML.
res/raw/ : chứa các file khác (CSV chứa thông tin account,...). res/values/ :
chứa các strings, dimensions,...
res/zml/ : chứa các file XML khác cần cho ứng dụng. 14
assets/ : nơi chứa các files tĩnh (static) được yêu cầu đi kèm với ứng dụng.
CHƯƠNG 3. Thiết kế phần mềm trên điện thoại Android
Để điện thoại android có khả năng phục vụ đúng chức năng đã được đề ra trong
mục yêu cầu, cần có một bản thiết kế cụ thể các khối Activity cho phần mềm. Về cơ bản,
phần mềm sẽ bao gồm các Activity có khả năng hiển thị trực quan các chức năng bên
trong nó. Dữ liệu được nhập xuất đồng thời lưu trữ trong cơ sở dữ liệu. Việc điều khiển
camera trong ứng dụng cũng được viết dưới dạng một activity, không khởi tạo thành một
luồng riêng để tránh các xung đột không đáng có.
3.1 Sơ đồ khối cho ứng dụng
Hình 3.1 Sơ đồ khối ứng dụng
• Khối Hobby: tùy chọn theo sở thích người dùng.
• Khối Trend: thông tin về xu hướng chung hiện nay.
• Khối Daily: lưu trữ dữ liệu sử dụng hang ngày của người dùng.
• Khối Barcode: Quét mã vạch sản phẩm để đối chiếu với dữ liệu có sẵn.
• Khối MainActiviy: màn hình đăng nhập chính.
• Khối cơ sở dữ liệu: lưu trữ dữ liệu
• Khối camera: điều khiển camera 15
Toàn bộ ứng dụng được lập trình bằng ngôn ngữ Java, dựa trên nền tảng Android.
3.2 Lập trình các khối
3.2.1 Khối cơ sở dữ liệu
Các thành phần cơ bản của một cơ sở dữ liệu được khai báo trong DatabaseHelper:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "BARCODE.DB";
public static final String TABLE_NAME = "LIPSTICK";
public static final String ID = "id"; public static
final String CODE = "CODE"; public static final
String NAME = "NAME"; public static final String
PRICE = "PRICE"; public static final int DB_VERSION = 1; //
private static final String CREATE_TABLE = "create table "+
TABLE_NAME+"("+ ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "+ CODE +
" TEXT NOT NULL, "+ NAME + " TEXT NOT NULL, " + PRICE + " TEXT);";
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION); } @Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE); } @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXIST "+TABLE_NAME); onCreate(db); } }
3.2.2 Khối quản lý cơ sở dữ liệu
Đây là khối được thiết kế chứa các phương thức quản lý một cơ sở dữ liệu
public class DBManager { private
DatabaseHelper dbHelper; private
Context context; private
SQLiteDatabase database; public
DBManager(Context c) { context = c; }
public DBManager open() throws SQLException {
dbHelper = new DatabaseHelper(context);
database = dbHelper.getWritableDatabase(); return this; }
public void insert(String code, String name, String price) {
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.CODE, code); 16
contentValues.put(DatabaseHelper.NAME, name);
contentValues.put(DatabaseHelper.PRICE, price);
database.insert(DatabaseHelper.TABLE_NAME, null, contentValues); }
public int update(long id, String code, String name, String price) {
ContentValues contentValues = new ContentValues();
contentValues.put(DatabaseHelper.CODE, code);
contentValues.put(DatabaseHelper.NAME, name);
contentValues.put(DatabaseHelper.PRICE, price);
int i = database.update(DatabaseHelper.TABLE_NAME, contentValues,
DatabaseHelper.ID + " = " + id, null); return i; }
public Cursor fetch() {
String[] col = new String[]{DatabaseHelper.ID,
DatabaseHelper.CODE, DatabaseHelper.NAME, DatabaseHelper.PRICE};
Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, col,
null, null, null, null, null, null);
if (cursor != null) { cursor.moveToFirst(); } return cursor; }
public void delete(long id) {
database.delete(DatabaseHelper.TABLE_NAME, DatabaseHelper.ID +
"=" + id, null); }
public void deleteall() {
database.delete(DatabaseHelper.TABLE_NAME, null, null); }
public boolean checkData(String TableName, String Col, String Value) {
String Query = "Select * from " + TableName + " where " + Col + " = " + Value;
Cursor cursor = database.rawQuery(Query, null);
if (cursor.getCount() <= 0) { cursor.close(); return false; } cursor.close(); return true; }
public String[] getValue(String code) {
database = dbHelper.getReadableDatabase();
String[] col = new String[]{DatabaseHelper.ID,
DatabaseHelper.CODE, DatabaseHelper.NAME, DatabaseHelper.PRICE};
Cursor cursor = database.query(DatabaseHelper.TABLE_NAME, col,
DatabaseHelper.CODE + "=?", new String[]{String.valueOf(code)}, null,
null, null, null);
if(cursor!=null) cursor.moveToFirst();
return new String[]{cursor.getString(1), cursor.getString(2), cursor.getString(3)}; } } 17
3.2.3 Khối khởi tạo bộ khung hiển thị dữ liệu
Trong một listview hiển thị dữ liệu được lưu, cần có 1 generic ban đầu để tạo ra
chuẩn cho các dữ liệu được hiển thị đó.
public class InforData {
private Object field1;
private Object field2;
private Object field3; public Object getField1() { return field1; }
public void setField1(Object field1) {
this.field1 = field1; }
public Object getField2() { return field2; }
public void setField2(Object field2) {
this.field2 = field2; }
public Object getField3() { return field3; }
public void setField3(Object field3) {
this.field3 = field3; } @Override
public String toString() {
// TODO Auto-generated method stub
return this.field1 +" - " +this.field2 +" - "+this.field3; } }
3.2.4 Khối Adapter
Đây là khối thực hiện chức năng liên kết cơ sở dữ liệu với listview thông qua 1 ArrayList
public class MySimpleArrayAdapter extends ArrayAdapter {
private Activity context;
private int layout; private List list;
public MySimpleArrayAdapter(Context context, int textViewResourceId, List objects) {
super(context, textViewResourceId, objects); // TODO
Auto-generated constructor stub
this.context=(Activity) context;
this.layout=textViewResourceId;
this.list=objects; } @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater flater=context.getLayoutInflater();
View row=flater.inflate(layout, parent,false);
TextView txt1=(TextView) row.findViewById(R.id.tv1_branch);
TextView txt2=(TextView) row.findViewById(R.id.tv2_branch); 18
TextView txt3=(TextView) row.findViewById(R.id.tv3_branch);
/*txt1.setTextAlignment(Gravity.LEFT);
txt2.setTextAlignment(Gravity.LEFT);
txt3.setTextAlignment(Gravity.LEFT);*/
InforData data=list.get(position);
txt1.setText(data.getField1()==null?"":data.getField1().toString());
txt2.setText(data.getField2()==null?"":data.getField2().toString());
txt3.setText(data.getField3()==null?"":data.getField3().toString()); if(position==0) {
row.setBackgroundColor(Color.CYAN); } return row; } }
3.2.5 Khối quét barcode
Đây là khối có chức năng quét mã barcode sản phẩm, trả lại tên và giá tiền
sản phẩm nếu sản phẩm này đã tồn tại trong cơ sở dữ liệu
public class Scanbarcode extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
public int stateMediaPlayer; public
final int stateMP_Error = 0; public final
int stateMP_NotStarter = 1; public
MediaPlayer mediaPlayer;
private static final int RC_BARCODE_CAPTURE = 9001;
private static final String TAG = "BarcodeMain";
private CompoundButton autoFocus;
private CompoundButton useFlash;
private Button bt_check; private
TextView tv_name, tv_price;
private ListView lv;
private DBManager dbManager;
List list = new ArrayList();
MySimpleArrayAdapter adapter = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_barcode);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);
//getSupportActionBar().setDisplayShowHomeEnabled();
String title = getString(R.string.app_name); bt_check
= (Button) findViewById(R.id.bt_barcode_check); autoFocus =
(CompoundButton) findViewById(R.id.auto_focus); useFlash =
(CompoundButton) findViewById(R.id.use_flash); tv_name =
(TextView) findViewById(R.id.tv_barcode_name); tv_price = 19