Ngày nay, công nghệ thông tin là một ngành khoa học phát triển rất mạnh. Song song với các ngành khoa học khác, công nghệ thông tin đã và đang mang lại cho cuộc sống của chúng ta rất nhiều thành tựu to lớn. Công nghệ thông tin đang được ứng dụng rộng rãi trong nhiều lĩnh vực như học tập giải trí cũng như trong công việc. Cùng với đó là sự phát triển không ngừng của các loại thiết bị thông minh như máy tính hay smastphone. Việc sử dụng một chiếc điện thoại thông minh để ứng dụng vào công việc và học đang càng ngày càng phổ biến hơn. Chiếc điện thoại là một thiết bị thông minh không thể tách rời với những con người hiện đại. Chính vì thế mà việc dùng điện thoại hỗ trợ một phần với máy tính để có thể phục vụ cho các công việc của con người là xu hướng của xã hội hiện đại.
Trang 1HỮU NGHỊ VIỆT - HÀN
KHOA CÔNG NGHỆ THÔNG TIN
ĐỒ ÁN CHUYỀN ĐỀ NGÀNH: LẬP TRÌNH MÁY TÍNH
Đề tài:
PHÁT TRIỂN ỨNG DỤNG DI ĐỘNG
QUẢN LÝ NHÂN VIÊN
Sinh viên thực hiện : Nguyễn Hùng Bản
Giảng viên hướng dẫn: Trần Văn Đạị
Đà Nẵng, tháng 6 năm 2016
Trang 3LỜI MỞ ĐẦU
Ngày nay, công nghệ thông tin là một ngành khoa học phát triển rất mạnh Songsong với các ngành khoa học khác, công nghệ thông tin đã và đang mang lại cho cuộcsống của chúng ta rất nhiều thành tựu to lớn Công nghệ thông tin đang được ứng dụngrộng rãi trong nhiều lĩnh vực như học tập giải trí cũng như trong công việc Cùng với
đó là sự phát triển không ngừng của các loại thiết bị thông minh như máy tính haysmastphone
Việc sử dụng một chiếc điện thoại thông minh để ứng dụng vào công việc và họcđang càng ngày càng phổ biến hơn
Chiếc điện thoại là một thiết bị thông minh không thể tách rời với những conngười hiện đại Chính vì thế mà việc dùng điện thoại hỗ trợ một phần với máy tính để
có thể phục vụ cho các công việc của con người là xu hướng của xã hội hiện đại
Ứng dụng di động đang được rất nhiều người phát triển và đang khai thác thêmnhiều ứng dụng vào mọi lĩnh vực, để tạo ra nhiều ứng dụng hữu ích cho việc học tậpgiải trí cũng như là công việc
Được sự hướng dẫn của giảng viên Trần Văn Đại em xin làm đồ án chuyên đềnày với đề tài “Phát triển ứng dụng di động quản lý nhân viên” để có thể góp phầngiúp người quản lý có thể thuận tiện hơn trong việc quản lý nhân viên và phòng bancủa họ
Em xin gửi lời cảm ơn đến GVHD của em là thầy Trần Văn Đại Cảm ơn thầy đãtạo điều kiện tốt nhất để em hoàn thành đồ án này
1 Lý do chọn đề tài
Ngày nay, điện thoại di động đã trở thành vật bất ly thân của con người Mộtchiếc điện thoại thông minh có thể chứa đầy đủ các chức năng để phục vụ cho các nhucầu cần thiết của con người
Việc phát triển một ứng dụng Quản lý nhân viên để giúp cho người dùng có thể
dễ dàng thực hiện các nhu cầu quản lý nhân viên của họ cũng là nhu cầu thiết yếu vì
họ có thể quản lý nhân viên trong khi họ ở mọi nơi mọi lúc
Phát triển ứng dụng di động để người quản lý có thể dễ dàng làm việc hơn vàgiảm chi phí thời gian trong công việc
Với những lý do trên, được sự hướng dẫn của thầy giáo Trần Văn Đại em đãchọn đề tài “Phát triển ứng dụng di động Quản lý nhân viên”
Trang 42 Mục tiêu và phạm vi nghiên cứu
Tiếp tục cố gắn là tiếp thu thêm nhiều ý tưởng mới để ứng dụng ngày càng hoànthiện hơn
Phạm vi nghiên cứu
Xây dựng ứng dụng quản lý nhân viên với những yêu cầu:
Thân thiện và dễ dàng với người sử dụng
Tốc độ xử lý và thao tác phải nhanh
Giao diện phù hợp với người dùng
Trang 5MỤC LỤC
LỜI MỞ ĐẦU i
MỤC LỤC iii
DANH MỤC HÌNH ẢNH v
CHƯƠNG 1: SƠ SỞ LÝ THUYẾT 1
1.1 Tổng quan về hệ điều hành Android 1
1.1.1 Khái niệm Android 1
1.1.2 Kiến trúc Android 2
1.1.2.1 Application 2
1.1.2.2 Application Framework 2
1.1.2.3 Libraries 3
1.1.2.4 Android Runtime 3
1.1.2.5 Linux Kernel 4
1.1.3 Phát triển ứng dụng trên Android 5
1.1.3.1 Ngôn ngữ lập trình 5
1.1.3.2 Môi trường lập trình cho Android 5
1.1.3.2 Cơ sở dữ liệu cơ bản trong Android (SQLite) 16
CHƯƠNG 2 : PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG CỦA ỨNG DỤNG QUẢN LÝ NHÂN VIÊN 19
2.1 Xác định các tác nhân 19
2.2 Xác định các trường hợp sử dụng 19
2.3 Biểu đồ trường hợp sử dụng 20
2.4 Mô hình hóa khái niệm 22
2.4.1 Xác định các lớp đối tượng 22
2.4.3 Biểu đồ lớp điều khiển 24
2.4.4 Biểu đồ lớp thực thể 24
2.5 Biểu đồ tình tự 25
2.5.1 Biểu đồ trình tự đăng nhập 25
2.5.2 Biểu đồ trình tự đăng ký 25
2.5.3 Biểu đồ trình tự thay đổi thông tin tài khoản 26
2.5.4 Biểu đồ trình tự cập nhật phòng ban 27
2.5.5 Biểu đồ trình tự cập nhật nhân viên nhân viên 28
Trang 62.5.6 Biểu đồ trình tự tìm kiếm: 30
2.5.7 Biểu đồ cộng tác 31
2.5.7.1 Biểu đồ cộng tác đăng nhập 31
2.5.7.2 Biểu đồ cộng tác đăng ký 31
2.5.7.3 Biểu đồ cộng tác thay đổi thông tin tài khoản 32
2.5.2.4 Biểu đồ cộng tác cập nhật phòng ban 32
2.5.7.4 Biểu đồ cộng tác cập nhật nhân viên nhân viên 34
2.5.2.6 Biểu đồ cộng tác tìm kiếm 35
2.5.3 Mô hình hóa hành vi xử lý 36
2.5.3.1 Biểu đồ trạng thái đăng nhập 36
2.5.3.2 Biểu đồ trạng thái tìm kiếm 36
2.5.4 Biểu đồ hoạt động 37
2.5.5 Biểu đồ lớp chi tiết 39
CHƯƠNG 3: THIẾT KẾ ỨNG DỤNG QUẢN LÝ NHÂN VIÊN 40
3.1 Thiết kế 40
3.2 Chạy ứng dụng 40
3.2.1 Màn hình đăng nhập 40
3.2.2 Màn hình đăng ký 41
3.2.3 Màn hình quản lý phòng ban 42
3.2.4 Màn hình chi tiết phòng ban 43
3.2.5 Màn hình quản lý nhân viên 44
3.2.6 Màn hình chi tiết nhân viên 45
3.2.7 Màn hình thay đổi thông tin tài khoản 46
3.2.8 Màn hình tìm kiếm 47
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 48
TÀI LIỆU THAM KHẢO 49
Trang 7DANH MỤC HÌNH ẢNH
Hình 1.1 Kiến trúc Android 2
Hình 1.2 Mô hình hợp tác giữa máy ảo Dalvik và Navite code 4
Hình 1.3 Cấu trúc thư mục và file của một dự án phần mềm Android trên Eclipse 6
Hình 1.4 Lược đồ vòng đời của 1 activity 11
Hình 1.5 Sử dụng Intent để trao đổi thông tin giữa hai chương trình 12
Hình 1.6 Lược đồ vòng đời của một service 15
Hình 2.1 Biểu đồ trường hợp sử dụng 20
Hình 2.2 Biểu đồ cập nhật phòng ban 21
Hình 2.3 Biểu đồ cập nhật nhân viên 21
Hình 2.4 Biểu đồ thay đổi TT tài khoản 22
Hình 2.5 Biểu đồ tìm kiếm 22
Hình 2.6 Biểu đồ lớp biên 23
Hình 2.7 Biểu đồ lớp điều khiển 24
Hình 2.8 Biểu đồ lớp thực thể.Mô hình hóa tương tác 24
Hình 2.9 Biểu đồ trình tự đăng nhập 25
Hình 2.10 Biểu đồ trình tự đăng ký 25
Hình 2.11 Biểu đồ thay đổi TT tài khoản 26
Hình 2.12 Biểu đồ trình tự thêm phòng ban 27
Hình 2.13 Biểu đồ trình tự sửa phòng ban 27
Hình 2.14 Biểu đồ trình tự xóa phòng ban 28
Hình 2.15 Biểu đồ trình tự thêm nhân viên 28
Hình 2.16 Biểu đồ trình tự sửa nhân viên 29
Hình 2.17 Biểu đồ trình tự thêm nhân viên 29
Hình 2.18 Biểu đồ trình tự tìm kiếm phòng ban 30
Hình 2.19 Biểu đồ trình tự tìm kiếm nhân viên 30
Hình 2.20 Biểu đồ cộng tác đăng nhập 31
Hình 2.21 Biểu đồ cộng tác đăng ký 31
Hình 2.22 Biểu đồ cộng tác thay đổi TT tài khoản 32
Hình 2.23 Biểu đồ cộng tác thêm phòng ban 32
Hình 2.24 Biểu đồ cộng tác sửa phòng ban 33
Hình 2.25 Biểu đồ cộng tác xóa phòng ban 33
Trang 8Hình 2.26 Biểu đồ cộng tác thêm nhân viên 34
Hình 2.27 Biểu đồ cộng tác sửa nhân viên 34
Hình 2.28 Biểu đồ cộng tác xóa nhân viên 35
Hình 2.29 Biểu đồ cộng tác tìm kiếm phòng ban 35
Hình 2.30 Biểu đồ cộng tác tìm kiếm nhân viên 36
Hình 2.31 Biểu đồ trạng thái đăng nhập 36
Hình 2.32 Biểu đồ trạng thái tìm kiếm 36
Hình 2.33 Biểu đồ hoạt động cập nhật TT tài khoản 37
Hình 2.34 Biểu đồ hoạt động cập nhật phòng ban 37
Hình 2.35 Biểu đồ hoạt động cập nhật nhân viên 38
Hình 2.36 Biểu đồ lớp chi tiết 39
Hình 3.1 Màn hình đăng nhập 40
Hình 3.2 Màn hình đăng ký 41
Hình 3.3 Màn hình quản lý phòng ban 42
Hình 3.4 Màn hình chi tiết phòng ban 43
Hình 3.5 Màn hình quản lý nhân viên 44
Hình 3.6 Màn hình chi tiết nhân viên 45
Hình 3.7 Màn hình thay đổi thông tin tài khoản 46
Hình 3.8 Màn hình tìm kiếm 47
Trang 9CHƯƠNG 1: SƠ SỞ LÝ THUYẾT
1.1 Tổng quan về hệ điều hành Android
1.1.1 Khái niệm Android
Android là hệ điều hành điện thoại mã nguồn mở miễn phí do Google phát triểndựa trên nền tảng Linux Bất kì một hãng sản xuất phần cứng nào cũng đều có thể tự
do sử dụng hệ điều hành Android cho thiết bị của mình, miễn là các thiết bị phải đápứng được các tiêu chuẩn cơ bản do Google đặt ra Các nhà sản xuất có thể tự do thayđổi phiên bản Android trên máy của mình một cách tự do mà không cần xin phép haytrả bất kỳ một khoản phí nào nhưng phải đảm bảo tính tương thích ngược của phiênbản chế riêng đó Android là nền tàng cho thiết bị di động bao gồm một hệ điều hànhmidware và một số ứng dụng chủ đạo Bộ công cụ Android SDK cung cấp các công cụ
và bộ thư viện các hàm API cần thiết để phát triển ứng dụng cho nền tảng Android sửdụng ngôn ngữ lập trình Java
Những tính năng mà nền tảng Android hỗ trợ :
Application framework : cho phép tái sử dụng và thay thế các thành phần sẵn
có trong Android
Dalvik virtual machine : máy ảo Java được tối ưu hóa cho thiết bị di động
Intergrated browser : trình duyệt web tích hợp được xây dựng dựa trên webkitengine
Optimized graphics : hỗ trợ bộ thư viện 2D và 3D dựa vào đặc tả OpenGL ES1.0
SQLite : cơ sở dữ liệu dùng để lưu trữ dữ liệu có cấu trúc
Hỗ trợ các định dạng phổ biến như MPEG4, H.264, MP3, AAC, ARM, JPG,PNG, GIF
Hộ trợ thoại trên nền tảng GSM
Bluetooth,EDGE,3G và wifi
Camera,GPS,la bàn và cảm biến
Bộ công cụ phát triển ứng dụng mạnh mẽ
Trang 101.1.2 Kiến trúc Android
Mô hình thể hiện kiến trúc của hệ điều hành Android:
Hình 1.1 Kiến trúc Android 1.1.2.1 Application.
Hệ điều hành Android tích hợp sẳn một số ứng dụng cơ bản như email client,SMS, lịch điện tử, bản đồ, trình duyệt web, sổ liên lạc và một số ứng dụng khác Ngoài
ra tầng này cũng chính là tầng chứa các ứng dụng được phát triển bằng ngôn ngữ Java
1.1.2.2 Application Framework.
Tầng này của hệ điều hành Android cung cấp một nền tảng phát triển ứng dụng
mở qua đó cho phép nhà phát triển ứng dụng có khả năng tạo ra các ứng dụng vô cùngsáng tạo và phong phú Các nhà phát triển ứng dụng được tự do sử dụng các tính năngcao cấp của thiết bị phần cứng như: thông tin định vị địa lý, khả năng chạy dịch vụdưới nền, thiết lập đồng hồ báo thức, thêm notification vào status bar của màn hìnhthiết bị… Người phát triển ứng dụng được phép sử dụng đầy đủ bộ API được dùngtrong các ứng dụng tích hợp sẳn của Android Kiến trúc ứng dụng của Android đượcthiết kế nhằm mục đích đơn giản hóa việc tái sử dụng các component Qua đó bất kìứng dụng nào cũng có thể công bố các tính năng mà nó muốn chia sẻ cho các ứng
Trang 11dụng khác (VD: Ứng dụng email có muốn các ứng dụng khác có thể sử dụng tính nănggởi mail của nó) Phương pháp tương tự cho phép các thành phần có thể được thay thếbởi người sử dụng Tầng này bao gồm một tập các services và thành phần sau:
Một tập phong phú và có thể mở rộng bao gồm các đối tượng View được dùng
để xây dựng ứng dụng như: list, grid, text box, button và thậm chí là một trình duyệtweb có thể nhúng vào ứng dụng
Content Provider: Cho phép các ứng dụng có thể truy xuất dữ liệu từ các ứngdụng khác hoặc chia sẽ dữ liệu của chúng
Resource Manager: Cung cấp khả năng truy xuất các tài nguyên non-code nhưhình ảnh hoặc file layout
Notification Manager: Cung cấp khả năng hiển thị custom alert trên thanhstatus bar
Activity Manager: Giúp quản lý vòng đời của một ứng dụng
1.1.2.3 Libraries.
System C library: một thể hiện được xây dựng từ BSD của bộ thư viện hệ thống
C chuẩn (libc), được điều chỉnh để tối ưu hóa cho các thiết bị chạy trên nền Linux
Media libraries: Bộ thư viện hổ trợ trình diễn và ghi các định dạng âm thanh vàhình ảnh phổ biến
Surface manager: Quản lý hiển thị nội dung 2D và 3D
LibWebCore: Một web browser engine hiện đại được sử dụng trong trình duyệtcủa Android lần trong trình duyệt nhúng web view được sử dụng trong ứng dụng
SGL: Engine hổ trợ đồ họa 2D
3D libraries: Một thể hiện được xây dựng dựa trên các APIs của OpenGL ES1.0 Những thư viện này sử dụng các tăng tốc 3D bằng phần cứng lẫn phần mềm để tối
ưu hóa hiển thị 3D
FreeType: Bitmap and vector font rendering
SQLite: Một DBMS nhỏ gọn và mạnh mẽ
1.1.2.4 Android Runtime.
Hệ điều hành Android tích hợp sẳn một tập hợp các thư viện cốt lõi cung cấp hầuhết các chức năng có sẵn trong các thư viện lõi của ngôn ngữ lập trình Java Mọi ứngdụng của Android chạy trên một tiến trình của riêng nó cùng với một thể hiện của máy
ảo Dalvik Máy ảo Dalvik thực tế là một biến thể của máy ảo Java được sửa đổi, bổ
Trang 12sung các công nghệ đặc trưng của thiết bị di động Nó được xây dựng với mục đíchlàm cho các thiết bị di động có thể chạy nhiều máy ảo một cách hiệu quả Trước khithực thi, bất kì ứng dụng Android nào cũng được convert thành file thực thi với địnhdạng nén Dalvik Executable (.dex) Định dạng này được thiết kế để phù hợp với cácthiết bị hạn chế về bộ nhớ cũng như tốc độ xử lý Ngoài ra máy ảo Dalvik sử dụng bộnhân Linux để cung cấp các tính năng như thread, low-level memory management.
1.1.2.5 Linux Kernel.
Hệ điều hành Android được xây dựng trên bộ nhân Linux 2.6 cho những dịch vụ
hệ thống cốt lõi như: security, memory management, process management, networkstack, driver model Bộ nhân này làm nhiệm vụ như một lớp trung gian kết nối phầncứng thiết bị và phần ứng dụng
Dưới đây là mô hinh hợp tác giữa máy ảo Dalvik và Navite code:
Hình 1.2 Mô hình hợp tác giữa máy ảo Dalvik và Navite code.
JNI: Java Native Interface (Tương tự khái niệm Application ProgrammingInterface) Java Native Interface: là một bộ framework cho phép mã lệnh viết bằngJava chạy trên máy ảo java có thể gọi hoặc được gọi bởi một ứng dụng viết bằngnative code (Ứng dụng được viết cho một phần cứng cụ thể và trên một hệ điều hành
cụ thể) hoặc những bộ thư viện viết bằng C, C++ hoặc Assembly
Bằng cách sử dụng JNI, Android cho phép các ứng dụng chạy trên máy ảoDalvik có thể sử dụng những phương thức được viết bằng các ngôn ngữ cấp thấp như:
C, C++, Assembly Qua đó các nhà phát triển ứng dụng có thể xây dựng ứng dụng dựatrên các bộ thư viện viết bằng C, C++, Assembly nhằm tăng tốc độ thực thi của ứngdụng hoặc sử dụng những tính năng mức thấp mà ngôn ngữ Java không hỗ trợ Tuynhiên người phát triển ứng dụng cần phải cân nhắc sự gia tăng độ phức tạp của ứngdụng khi quyết định sử dụng các bộ thư viện này
Trang 131.1.3 Phát triển ứng dụng trên Android.
1.1.3.1 Ngôn ngữ lập trình
Ngôn ngữ lập trình chính thức của Android là Java Mặc dù các ứng dụng trênAndroid được phát triển dựa trên nền tảng Java, nhưng Android không hỗ J2ME vàJ2SE, là hai ngôn ngữ lập trình phổ dụng cho các thiết bị di động
Dựa trên máy ảo Java của Sun, Google đã tinh chỉnh và phát triển nên máy ảoDalvik để biên dịch mã Java với tốc độ biên dịch nhanh hơn và nhẹ hơn
Google đã cập nhật các phiên bản của Android qua các phiên bản gần đây nhưAndroid 4.4.x Kitkat, Android 5.0 Lolipop hay mới đây nhất là 6.0 Masmalow vàAndroid N các phiên bản nhằm mục đích tới giao diện và tốc độ xử lý của Androidngày càng cải tiến hơn nữa
Bằng cách sử dụng các frameworks của hãng thứ ba (VD: PhoneGap,Titanium, ), các nhà lập trình web cũng có thể phát triển ứng dụng Android một cách
dễ dàng bằng các ngôn ngữ web phổ dụng như HTML, CSS, Javascript Tuy nhiên sốlượng các ứng dụng đi theo chiều hướng này chưa nhiều
Cơ sở dữ liệu cơ bản để quản lý dữ liệu trong Android là SQLite
1.1.3.2 Môi trường lập trình cho Android.
Android SDK bao gồm các công cụ riêng lẻ như: debugger, các thư viện, trìnhgiả 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
Môi trường lập trình (IDE) chính thức của Android là Eclipse và được Googlephát triển riêng một công cụ hỗ trợ lập trình có tên là Android Studio với giao diệnmới và nhiều tích năng hơn để hỗ trợ tốt nhất cho việc lập trình Android
Trong đồ án này em phát triển ứng dụng dựa trên công cụ Eclipse
Ứ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) 8.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ệuSQLite 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 ý
Trang 14tưở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ế
Các thành phần cơ bản của một project Android trên Eclipse:
Hình 1.3 Cấu trúc thư mục và file của một dự án phần mềm Android trên Eclipse.
Trang 15Stt Thư mục, Tập tin và mô tả
1 Src: Thư mục này chứa các tập tin nguồn đuôi java Theo mặc định, nó chứa 1
tập tin nguồn MainActivity.java Trong tập tin này có chứa lớp Activity sẽ chạy
khi mở ứng dụng bằng cách chạm vào biểu tượng ứng dụng trên màn hình
2 Gen: Thư mục này chứa các tập tin nguồn đuôi R – một tập tin được tạo ra bởitrình biên dịch (compiler) Các tập tin này sẽ tham khảo tới toàn bộ tài nguyêntrong Project Bạn không nên chỉnh sửa chúng
3 Bin: Thư mục này chứa các tập tin là các gói Android có đuôi apk – được tạo rabởi ADT trong quá trình build Ngoài ra, thư mục bin cũng chứa những tập tinkhác cần thiết để chạy ứng dụng Android đang được lập trình trong Project này
4 res/drawable-hdpi: Thư mục này dành cho hình ảnh dành cho màn hình độ phângiải cao
5 res/layout: Thư mục này chứa các tập tin xác định giao diện của ứng dụng
6 res/values: Thư mục này chuawsc các tập tin XML, chứa tập hợp tài nguyên như
là các chuỗi, định nghĩa các màu
7 AndroidManifest.xml: là tập tin manifest diễn tả tính chất cơ bản của ứng dụng vàxác định các Component
Bảng 1.1 - Mô tả cấu trúc của một project Android trong eclipse.
File AndroidManifest.xml
Là nền tảng của mọi ứng dụng Android, file AndroidManifest.xml được đặttrong thư mục root và cho biết những thành phần có trong ứng dụng của: cácactivities, các services, cũng như cách các thành phần ấy gắn bó với nhau
Mỗi file manifest đều bắt đầu với một thẻ manifest:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.commonsware.android.search">
</manifest>
Trang 16Khi tạo file manifest, điều quan trọng nhất là phải cung cấp thuộc tính củapackage, tức tên của Java package dùng làm cơ sở cho ứng dụng của ta Sau khi đã đặttên package, sau này khi cần ghi tên lớp trong file manifest, ta có thể rút ngắn, chẳnghạn với lớp “com.yourapp.android.search.Someclass” ta chỉ cần ghi “.Someclass” làđủ.
Các thành phần manifest khác là :
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ácnhau)
permission: chỉ định các quyền mà các activities hay services yêu cầu các ứngdụng khác phải 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ệnquan 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ư
Trang 17Thành phần này cung cấp các thông tin sau:
- android:name : tên class hiện thực activity này
- android:label : tên activity
- intent-filter : Một thành phần con, chỉ ra dưới điều kiện nào thì activity này
Trang 18Do gần như mọi activity đều tương tác với người dùng, lớp Activity đảm nhận việc tạo
ra một cửa sổ (window) để người lập trình đặt lên đó một giao diện UI vớisetContentView(View) Một activity có thể mang nhiều dạng khác nhau: Một cửa sổtoàn màn hình (full screen window), một cửa sổ floating (với windowsIsFloating) haynằm lồng bên trong 1 activity khác (với ActivityGroup) Có 2 phương thức mà gầnnhư mọi lớp con của Activity đều phải hiện thực:
onCreate(Bundle) - Nơi khởi tạo activity Quan trọng hơn, đây chính ngườilập trình gọi setContentView(int) kèm theo layout để thể hiện UI của riêng mình.Đồng thời còn có findViewById(int) giúp gọi các widget (buttons, text boxes, labels, )
b Vòng đời của một Activity
Các activity được quản lí dưới dạng các activity stack - First-In-Last-Out:
Khi một activity mới được khởi tạo, nó sẽ được đưa lên trên cùng stack, cácactivity khác muốn chạy trên nền (foreground) trở lại thì cần phải chờ tới khi Activitymới này kết thúc
Một Activity có 4 trạng thái:
- Active hay Running: Khi một activity đang chạy trên màn hình
- Paused: Khi một activity vẫn đang chạy trên màn hình nhưng đang bị mộtactivity trong suốt (transparent) hay không chiếm toàn màn hình hiển thị phía trên
Tuy vẫn lưu trữ dữ liệu, nhưng các paused activity này sẽ bị hệ thống bắtchấm dứt khi đang thiếu bộ nhớ trầm trọng
- Stopped: Khi 1 activity bị che khuất hoàn toàn bởi 1 activity khác Tuy vẫn
Trang 19lưu trữ dữ liệu, nhưng các stopped activity này sẽ thường xuyên bị hệ thống bắt chấmdứt để dành chỗ cho các tiến trình khác.
- Killed hay Shut down: Khi 1 activity đang paused hay stopped, hệ thống sẽxóa activity ấy ra khỏi bộ nhớ
Hình 1.4 Lược đồ vòng đời của 1 activity.
Dựa vào lược đồ trên, thấy được có 3 vòng lặp quan trọng sau:
- Vòng đời toàn diện (Entire Lifetime): Diễn ra từ lần gọi onCreate(Bundle) đầu
tiên và kéo dài tới lần gọi onDestroy() cuối cùng
- Vòng đời thấy được (Visible Lifetime):Diễn ra từ khi gọi onStart() và kéo dài
tới khi gọionStop() Ở vòng đời này, activity được hiển thị trên màn hình nhưng có thếkhông tương tác với người dùng ở trên nền Các phương thức onStart(0 và onStop() cóthể được gọi nhiều lần
- Vòng đời trên nền (Foreground Lifetime): Diễn ra từ khi gọi onResume() và
kéo dài tới khi gọi onPause() Ở vòng đời này, activity nằm trên mọi activity khác và
tương tác được với người dùng 1 activity có thể liên tục thay đổi giữa 2 trạng thái
Trang 20paused và resumed, chẳng hạn khi thiết bị sleep hay 1 intent mới được đưa tới.
c Intent
Định nghĩa intent:
Khi Tim Berners phát minh ra giao thức Hypertext Transfer Protocol (HTTP),ông cũng đã phát minh ra một định dạng URLs chuẩn Định dạng này là một hệ thốngcác động từ đi kèm các địa chỉ Địa chỉ sẽ xác định nguồn tài nguyên như Web page,hình ảnh hay các server-side program Động từ sẽ xác định cần phải làm cái gì vớinguồn tài nguyên đó: GET để nhận dữ liệu về, POST để đưa dữ liệu cho nó để thực thimột công việc nào đó Khái niệm Intent cũng tương tự, Intent là một mô tả trừu tượngcủa một hành động được thực thi Nó đại diện cho một hành động đi kèm với một ngữcảnh xác định Với Intent thì có nhiều hành động và nhiều component (Một thể hiệncủa một class java dùng để thực thi các hành động được đặc tả trong Intent) dành choIntent của Android hơn là so với HTTP verbs (POST, GET) và nguồn tài nguyên (hìnhảnh, web page) của giao thức HTTP, tuy nhiên khái niệm vẫn tương tự nhau Intentđược sử dụng với phương thức startActivity() để mở một Activity, và dùng vớibroadcastIntent để gởi nó đến bất kì BroadcastReceiver liên quan nào, và dùng vớistartService(Intent), bindService(Intent, Service Connection, int ) để giao tiếp với cácService chạy dưới nền
Intent cung cấp một chức năng cho phép kết nối hai chương trình khác nhautrong quá trình thực thi (runtime) (Cung cấp khả năng cho phép hai chương trình khácnhau giao tiếp với nhau) Chức năng quan trọng và được sử dụng nhiều nhất của mộtIntent là mở một Activity, nơi mà nó có thểđược dùng như một vật kết nối các Activitylại với nhau (Truyền thông tin giữa hai Activity khác nhau)
Hình 1.5 Sử dụng Intent để trao đổi thông tin giữa hai chương trình
Trang 21 Thành phần chính của Intent bao gồm:
- Action: Xác định hành động sẽ được thực thi, các hành động này có thể là:ACTION_VIEW, ACTION_EDIT, ACTION_MAIN…
- Data: Các dữ liệu được sử dụng để hành động (Action) thao tác trên nó, nhưbản ghi về một người nào đó trong cơ sở dữ liệu chứa các contact của thiết bị
- Type: Chỉ định 1 kiểudữ liệu chính xác (kiểu MIME) được mang bởi intent
- Thường thì type được suy ra từ chính dữ liệu Bằng cách thiết lập thuộc tínhtype, bạn có thể vô hiệu hóa sự phỏng đoán kiểu dữ liệu và chỉ định rỏ một kiểu chínhxác
- Component: Chỉ định rõ tên của lớp thành phần (Một thể hiện của một classjava dùng để thực thi các hành động được đặc tả trong Intent) sử dụng cho Intent Thông thường thì nó được xác định bằng cách tìm kiếm thông tin trong Intent (Cácthông tin như Action, data/type, và category) và nối chúng với các component (Mộtthể hiện của một Class java dùng để thực thi các hành động được đặc tả trong Intent)
có thể đáp ứng được các yêu cầu sử lý của Intent
- Extracts: là một đối tượng Bundle dùng để chứa các thông tin kèm theođược
- dùng để cung cấp thông tin cần thiết cho component Ví dụ: Nếu có mộtIntent đặc tả hành động send email thì những thông tin cần chứa trong đối tượngBundle là subject, body…
- Intent Resolution
Intent có 2 dạng chính sau:
+Explicit Intents: Xác định rỏ một component (Một thể hiện của một classjava dùng để thực thi các hành động được đặc tả trong Intent) (thông qua phương thứcsetComponent(ComponentName) hoặc setClass(Context, Class)) cung cấp lớp sẽ thựcthi các hành động được đặc tả trong Intent Thông thường thì những Intent này khôngchứa bất kỳ thông tin nào khác (như category, type) mà đơn giản chỉ là cách để ứngdụng mở các Activity khác bên trong một Activity
+ Implicit Intents: Không chỉ định một component nào cả, thay vào đó, chúng
sẽ chứa đủ thông tin để hệ thống có thể xác định component có sẵn nào là tốt nhất đểthực thi hiệu quả cho intent đó
Trang 22d Service.
Định nghĩa service:
Một service là một thành phần của ứng dụng, thể hiện mong muốn ứng dụng thựchiện các hành động trong khi không tương tác với người dùng hoặc cung cấp chứcnăng cho các ứng dụng khác sử dụng Nói một cách đơn giản, service là các tác vụ(task) chạy ngầm dưới hệ thống nhằm thực hiện một nhiệm vụ nào đó
Cũng như các đối tượng của ứng dụng khác, services chạy trên luồng (Thread)của tiến trình chính Có nghĩa là nếu service của bạn dự định chạy các hành vi cócường độ lớn hoặc các hành vi có thể gây nghẽn mạch, nó sẽ tự sinh ra luồng (Thread)của chính nó để làm thực hiện các tác vụ được đặc tả trong Service
Cần lưu ý:
Service không phải là một tiến trình độc lập Đối tượng Service không chạy trêntiến trình (process) của riêng nó (trừ khi có một yêu cầu đặt biệt), Service chạy trêntiến trình của chương trình
Service không phải là một luồng (thread)
- Service có chứa 2 đặc trưng cơ bản sau:
Là một chức năng để ứng dụng thông báo với hệ thống về việc mà nó muốn thựchiện ở phía dưới nền (ngay cả khi người dùng không tương tác trực tiếp tới ứng dụng).Điều này tương ứng với việc gọi phương thức Context.startservice(), nó sẽ yêu cầu hệthống lên lịch cho service để chạy cho đến khi bị chính service hay người nào đó dừng
nó lại
Là một chức năng cho phép ứng dụng để cung cấp các chức năng của nó cho cácứng dụng khác Điều đó tương ứng với việc gọi Context.bindService(), cho phép mộtlong-standing connection được tạo ra để service có thể tương tác với nó
Trang 23 Vòng đời của một service:
Hình 1.6 Lược đồ vòng đời của một service.
Dựa theo hình trên, 1 service được bắt đầu bởi phương thức startService() làservice dùng để thực hiện các tác vụ ngầm dưới nền, service được bắt đầu bởi phươngthức bindService() là service được dùng để cung cấp các chức năng cho các chươngtrình khác
BroadcastReceiver:
Là lớp nhận về các intents
- Có hai lớp broadcast quan trọng cần xét đến:
Broadcasts bình thường (Normal broadcasts): Được gửi bởicontext.sendBroadcast
tới các receivers hoàn toàn không theo 1 trật tự nào, dẫn tới đôi khi tồn tại cùng 1lúc nhiều receivers khác nhau Tuy nhanh nhưng không thể trao đổi kết quả nhận vềgiữa các receivers với nhau
Broadcasts có thứ tự (Ordered broadcasts) - Được gửi bởiContext.sendOrderedBroadcast() tới từng receiver một Như vậy, kết quả nhận về của
1 receiver có thể trở thành input của 1 receiver khác, hay có thể ngay lập tức dừngviệc
Trang 241.1.3.2 Cơ sở dữ liệu cơ bản trong Android (SQLite).
Giới thiệu SQLite:
SQLite là hệ quản trị cơ sở dữ liệu quan hệ (Relational database managementsystem – RDBMS) SQLite có những điểm mạnh sau:
SQLite nổi tiếng là cơ sở dữ liệu cực kỳ đáng tin cậy và là sự lựa chọn cho nhiềuthiết bị điện tự bao gồm máy nghe nhạc MP3, Iphone, iPod về hệ thống cơ sở dữ liệu.Kích thước nhẹ và mạnh mẽ, SQLite khác với nhiều với nhiều cơ sở dữ liệu khácbằng cách sử dụng hướng tiếp cận mềm dẻo để định nghĩa cột Thay vì yêu cầu giá trịcủa cột phải phù hợp với 1 loại duy nhất, giá trị trong mỗi hàng cho mỗi cột Dẫn đến
là không có sự yêu cầu chặt chẽ nào cho giá trị của mỗi cột trong một hàng
Để có thể hiểu nhiều hơn và sâu hơn về SQLite, bao gồm cả điểm mạnh điểmyếu và hạn chế của nó, hãy truy cập vào website chính thức www.sqlite.com
Cursors and Content Values
Đối tượng ContentValues được sử dụng để chèn 1 hàng mới vào trong bảng cơ
sở dữ liệu Mỗi đối tượng ContentValues biểu diễn một hàng và ánh xạ cột sang giá trịtương ứng
Truy vấn trong Android được trả về như các đối tượng con trỏ (Cursor object).Thay vì giải nén và trả về một bản sao của các giá trị kết quả, Cursors hoạt động nhưcon trỏ đến một tập hợp các dữ liệu cơ bản Cursor là một cách quản lý kiểm soát vị trícủa hàng trong kết quả trả về của một truy vấn cơ sở dữ liệu
Lớp Cursor bao gồm một số hàm để điều hướng kết quả truy vấn:
moveToFirst : di chuyển con trỏ đến hàng đầu tiên trong kết quả truy vấn
moveToNext : di chuyển con trỏ đến hàng tiếp theo
Trang 25 moveToPrevious : di chuyển con trỏ đến hàng phía trước
getCount : trả về số hàng trong tập kết quả
getColumnIndexOrThrow : trả về chỉ số của cột với tên được chỉ định
getColumnName : trả về tên cuả chỉ số cột được chỉ địn
getColumnNames: Trả về mảng String của tất cả tên các cột in cursor hiệntại
moveToPosition: di chuyển con trỏ đến hàng được chỉ địn
getPosition: trả về vị trí hiện tại của con trỏ
Android cung cấp các cơ chế để quản lý các Cursor bên trong các Activities.Phương thức startManagingCursor được tích hợp vào vòng thời gian của Cursor bêntrong vòng thời gian của Activity Khi kết thúc Cursor thì sẽ tự động gọistopManagingCursor
- Thêm, sửa và xóa hàng:
Lớp SQLiteDatabase đã đưa các phương thức insert, delete và update và đượcđóng gói để thực thi các câu lệnh SQL được yêu cầu Tuy nhiên, phương thưcexecSQL cho phép bạn thực thi bất kỳ SQL hợp lệ nào vào trong bảng cơ sở dữ liệu
Để thêm hàng mới, sử dụng đối tượng ContentValues và phương thức put để đặtcác giá trị cho mỗi cột Ví dụ:
//Create a new row of values to insert
ContentValues newValues = new ContentValues();
// Assign values for each row
newValues.put(COLUMN_NAME, newValue);
[ Repeat for each column ]
// Insert the row into your table
myDatabase.insert(DATABASE_TABLE, null, newValues);
Cập nhật hàng
Tạo mới đối tượng ContentValues và sử dụng phưowng thức put để gán giá trịmới cho mỗi cột cần cập nhật Sau đó cập nhật lại đối tượng Cursor
// Define the updated row content
ContentValues updatedValues = new ContentValues();
// Assign values for each row
Trang 26updatedValues.put(COLUMN_NAME, newValue);
[ Repeat for each column ]
String where = KEY_ID + “=” + rowId;
// Update the row with the specified index with the new values
myDatabase.update(DATABASE_TABLE, updatedValues, where, null);
Trang 27CHƯƠNG 2 : PHÂN TÍCH THIẾT KẾ HƯỚNG ĐỐI TƯỢNG
CỦA ỨNG DỤNG QUẢN LÝ NHÂN VIÊN
2. Xác định các tác nhân
Người dùng: Là người điều hành hệ thống, đồng thời đảm bảo hệ thống hoạt
động thông suốt, có quyền bổ sung, thay đổi các thông tin và dữ liệu của ứng dụng
- Xem chi tiết phòng ban
- Thêm nhân viên
- Sửa thông tin nhân viên
- Xóa nhân viên
- Xem chi tiết nhân viên
Trang 28người dùng cũng có quyền sửa xóa thông tin của phòng ban.