Công nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile

60 107 2
Công nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên trên mobile

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Ứng dụng mà tôi xây dựng thực hiện được một số chức năng cơ bản về lịch âm dương và xem các tham khảo trong ngày cũng như đoán t nh cách con người qua năm sinh hay qua ngày tháng năm s[r]

(1)

TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN

-   -

Đề tài:

Tìm hiểu cơng nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên mobile

KHÓA LUẬN TỐT NGHIỆP CỬ NHÂN KHOA HỌC

GVHD : Lê Văn Mỹ

(2)

LỜI CẢM N

Em xin chân thành cảm thầy cô khoa Tin học như thầy cô giảng dạy trường Đại học Sư phạm – Đại học Đà N ng truy n ạt kiến thức quý báu cho em trong năm học vừa qua

Đặc biệt, Em xin chân thành cảm ơn thầy giáo Lê Văn Mỹ tận tình giúp ỡ, hướng dẫn cung cấp tài liệu liên quan ến án

Xin chân thành cảm ơn anh chị bạn khoa Tin học ủng hộ, giúp ỡ, chia sẻ kiến thức, kinh nghiệm tài liệu có ược cho em q trình nghiên cứu thực tài

Một lần em xin chân thành cảm ơn !

Đà N ng, ngày 07 tháng 05 năm 2012 Sinh viên thực

(3)

LỜI CAM ĐOAN

Em xin cam oan :

1 Những nội dung luận văn em thực sự hướng dẫn trực tiếp Thầy giáo Lê Văn Mỹ

2 Mọi tham khảo dùng luận văn u ược trích dẫn rõ ràng tên tác giả, tên cơng trình, thời gian, ịa iểm công bố 3 Mọi chép không hợp lệ, vi phạm quy chế tạo, hay

gian trá, em xin chịu hoàn toàn trách nhiệm

Sinh viên

(4)

MỞ ĐẦU 1

L DO CHỌN Đ TÀI 1

2 MỤC TIÊU, NHIỆM VỤ 1

2.1 Mục tiêu

2.2 Nhiệm vụ

3 ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU 2

3.1 Đối tượng

3.2 Phạm vi nghiên cứu

4 PHƯ NG PHÁP NGHIÊN CỨU 2

4.1 Về mặt lý thuyết

4.2 Công cụ xây dựng đề tài

5 NGHĨA KHOA HỌC, THỰC TIỄN CỦA Đ TÀI 3

5.1 Ý nghĩa khoa học

5.2 Ý nghĩa thực tiễn

6 BỐ CỤC 3

CHƯ NG : C SỞ L THU T 4

TỔNG QUAN V HỆ ĐI U HÀNH ANDROID 4

1.1 Lịch sử Android

1.2 Các phiên hệ điều hành Android (Android plaform)

1.3 Ứng dụng Android phát triển tương lai

2 KI N TRÚC HỆ ĐI U HÀNH ANDROID 7

2.1 Các thành phần cấu tạo nên Android (Android Architecture)

2.2 Activity 10

2.3 Broadcast receivers 14

2.4 DVM 15

3 LẬP TRÌNH ỨNG DỤNG ANDROID 15

3.1 Thiết lập môi trường phát triển ứng dụng 15

3.2 Các thành phần Android Project 16

4 L THU T CỦA BÀI TOÁN CHU ỂN ĐỔI NGÀ ÂM DƯ NG 18 4.1 Cơ sở lý thuyết t nh lịch âm Việt Nam 18

4.2 Các hàm chuyển đ i ngày âm dương 20

CHƯ NG 2: PHÂN TÍCH HỆ THỐNG 24

S ĐỒ USE CASE 24

1.1 Sơ đ use case t ng quát 24

1.2 Mô tả ca sử dụng hay chức 24

2 S ĐỒ TUẦN TỰ 25

2.1 Quá tr nh xem lịch âm dương 25

2.2 Quá tr nh xem tham khảo ngày 26

2.3 Quá tr nh xem tu i 27

2.4 Quá tr nh chọn ngày 29

2.5 Quá tr nh xem tử vi 30

3 TỔ CHỨC CÁC LỚP 31

3.1 Lớp ReadFileText 31

3.2 Lớp DateProcessing 31

(5)

Các lớp giao diện 33

4 TỔ CHỨC C SỞ DỮ LIỆU 35

CHƯ NG 3: TRIỂN KHAI VÀ K T QUẢ CHẠ DEMO 36

MÀN HÌNH HIỂN THỊ LỊCH ÂM, LỊCH DƯ NG 36

2 MÀN HÌNH XEM THẢO TRONG NGÀ 37

3 MÀN HÌNH XEM TUỔI 38

4 MÀN HÌNH CHỌN NGÀ ÂM, NGÀ DƯ NG 39

5 MÀN HÌNH XEM TỬ VI 40

K T LUẬN VÀ HƯỚNG PHÁT TRIỂN 42

K T QUẢ ĐẠT ĐƯỢC 42

1.1 Về mặt lý thuyết 42

1.2 Về thực nghiệm 42

2 HẠN CH 42

3 HƯỚNG PHÁT TRIỂN Đ TÀI 43

PHỤ LỤC 44

TÀI LIỆU THAM KHẢO 51

(6)

H nh 1.1 Biểu tượng cho số phiên

H nh 1.2 Samsung Galaxy S II

H nh 1.3 Kiến trúc hệ điều hành Android

H nh 1.4 Activity Lifecycle 13

H nh 1.5 Tạo ứng dụng Android 16

H nh 2.1 Sơ đ ca sử dụng t ng quát 24

H nh 2.2 Sơ đ tr nh xem lịch âm dương 26

H nh 2.3 Sơ đ tr nh xem nên kiêng ngày 26

H nh 2.4 Sơ đ tr nh xem hướng xuất hành 27

H nh 2.5 Sơ đ tr nh xem tu i làm nhà 27

H nh 2.6 Sơ đ tr nh xem tu i kết hôn 28

H nh 2.7 Sơ đ tr nh xem vận hạn tu i 28

H nh 2.8 Sơ đ tr nh chọn ngày dương 29

H nh 2.9 Sơ đ tr nh chọn ngày âm 29

H nh 2.10 Sơ đ tr nh xem tử vi đông phương 30

H nh 2.11 Sơ đ xem tử vi tây phương 30

H nh 2.12 Sơ đ d liệu 35

H nh 3.1 Màn h nh xem lịch dương 36

H nh 3.2 Màn h nh xem lịch âm 37

H nh 3.3 Màn h nh nên kiêng hướng xuất hành ngày 37

H nh 3.4 Màn h nh chọn tu i, xem tu i làm nhà, kết hôn vận hạn 38

H nh 3.5 Màn hình thơng tin kết hơn, vận hạn, làm nhà 39

H nh 3.6 Màn h nh chọn ngày dương hiển thị 39

H nh 3.7 Màn h nh chọn ngày âm hiển thị 40

H nh 3.8 Màn h nh chọn tu i xem t nh cách 40

(7)

Bảng 1.1: Bảng tiết kh 19

Bảng 2.1: Chức t ng ca sử dụng 25

Bảng 2.2: Các phương thức lớp ReadFileText 31

Bảng 2.3: Các phương thức lớp ProcessDate 32

Bảng 2.4: Các phương thức lớp CheckingForBuilding 33

Bảng 2.5: Các phương thức lớp MyDate 33

(8)

DANH MỤC TỪ VI T TẮT - User: người sử dụng

- State: trạng thái - Menu: tr nh đơn

- DVM: Dalvik virtual machine - JVM: Java virtual machine - JDK: Java Development Kit

- API: Application Programming Interface - SDK: Software Development Kit

- GPRS: General Packet Radio Service - WAP: Wireless Access Protocol - SOAP: Simple Object Access Protocol - UI: User Interface

- VM: Virtual Machine

- IDE: Integrated Development Environment - J2ME: Java Micro Edition

(9)

MỞ ĐẦU

MỞ ĐẦU 1 L DO CHỌN Đ TÀI

Hiện có nhiều công nghệ phát triển song song với việc phát triển công nghệ thông tin Bluetooth, Wireless, WAP, SOAP,… nhằm giúp công nghệ thông tin ngày thân thiết với người dùng Một nh ng công nghệ góp phần khơng nhỏ việc kết nối người với thông tin người với người công nghệ di động.Với tốc độ phát triển nh ng lợi ch to lớn cơng nghệ di động, thấy có ảnh hưởng lớn đến sống người Không giống trước nh ng điện thoại có chức đơn giản đàm thoại, điện thoại c n có thêm nhiều chức năng, ứng dụng khác như: email, truy cập Internet, video, nghe nhạc, chơi game, … đ ng thời với phát triển vũ bão dịch vụ gia tăng điện thoại di động dựa công nghệ WAP SOAP

V nh ng lý trên, em chọn đề tài “T m hiểu công nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên mobile” để làm luận văn tốt nghiệp Việc xây dựng ứng dụng nhằm t m hiểu thêm công nghệ lĩnh vực công nghệ di động áp dụng nh ng kiến thức mà em học trường thời gian qua để áp dụng vào thực tiễn với mong muốn s góp phần giải số nhu cầu cần thiết cho người sử dụng điện thoại di động

2 MỤC TIÊU, NHIỆM VỤ 2.1 Mục tiêu

Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên mobile cho điện thoại di động sử dụng hệ điều hành Android có số chức sau:

 Hiển thị lịch dương, xem ngày âm lịch, hoàng đạo  Xem tu i để làm nhà, kết hôn, vận hạn

(10)

 Xem tử vi đông phương, tây phương 2.2 Nhiệm vụ

 T m hiểu công nghệ Android

 T m hiểu thuật toán t nh ngày âm, ngày dương  Lưu d liệu dạng file text

3 ĐỐI TƯỢNG, PHẠM VI NGHIÊN CỨU

3 Đối tượng

Lịch vạn vạn niên kỉ XXI điện thoại có hệ điều hành Android

3.2 Phạm vi nghiên cứu

Ứng dụng thiết bị di động sử dụng hệ điều hành Android 1.6 Lịch vạn niên có khả sau:

 Xem tử vi nam n  Xem tham khảo ngày

 Xem loại hình: kích cỡ 380px 420px 4 PHƯ NG PHÁP NGHIÊN CỨU

4.1 Về mặt lý thuyết

 T m hiểu lý thuyết thiết bị di động, ngôn ng công nghệ để xây dựng ứng dụng

 T m hiểu thuật toán chuyển đ i lịch âm dương, thu thập d liệu tử vi, phong tục xem ngày tốt xấu

(11)

 Công cụ nghiên cứu sở lý thuyết: tài liệu tham khảo sách ngôn ng lập tr nh, giáo tr nh, Ebook, trang web… lập tr nh cho thiết bị di động lý thuyết mang t nh tham khảo sống  Công cụ thiết kế phần mềm: Eclipse, Android SDK, ADT plugin, J2SE

5 NGHĨA KHOA HỌC, THỰC TIỄN CỦA Đ TÀI

5 nghĩa khoa học

 Củng cố kiến thức học

 Nghiên cứu nắm bắt tảng lập tr nh hệ điều hành android Sử dụng thành thạo số công cụ hỗ trợ môi trường làm việc  Nâng cao khả lập trình, giải vấn đề

5 nghĩa thực tiễn

Tạo ứng dụng giúp người giải tr , tham khảo điện thoại có hệ điều hành Android với giao diện trực quan

6 BỐ CỤC

Với kết dự kiến đạt ứng dụng, luận văn t chức thành chương Cụ thể sau:

Chương Cơ sở lý thuyết: giới thiệu t ng quan công nghệ di động, ngôn ng lập tr nh, thuật toán chuyển đ i ngày âm dương

Chương Phân tích hệ thống: phân t ch chức hệ thống, t thiết kế cho chức t chức d liệu

Chương 3: Triển khai kết demo: kết chạy demo chức chương tr nh

(12)

CHƯ NG

CHƯ NG 1: C SỞ L THU T 1 TỔNG QUAN V HỆ ĐI U HÀNH ANDROID

1.1 Lịch sử Android

“Máy t nh ngày trở nên “thân thiện” với người ngày trở nên tiện dụng hơn, bất k nơi đâu bất k lúc nào” – Y.HASHIMI & SATYA KOMATINENI (Pro Android Book – 2009 )

Tháng năm 2005, Google mua lại Android Inc, tên dự án số công ty nhỏ thành lập có trụ sở Palo Alto, California, USA Nh ng nhà đ ng sáng lập nên Android chuyển sang làm việc Google có Andy Rubin ( đ ng sáng lập công ty Danger ), Rich Miner (đ ng sáng lập công ty Wildlife Communication), Nick Sears (t ng phó chủ tịch T-Mobile) Chris white (trưởng nhóm thiết kế phát triển giao diện WebTV) Tại thời điểm có t thông tin dự án Android, ngoại tr việc họ phát triển phần mềm cho điện thoại di động

Ở trụ sở Google, nhóm Rubin đứng đầu phát triển tảng thiết bị di động dựa nhân Linux Đến tháng năm 2007, InformationWeek đăng tải nghiên cứu Evalueserve cho biết Google nộp đơn xin cấp sáng chế lĩnh vực điện thoại di động

(13)

1.2 Các phiên hệ điều hành Android (Android plaform)

(14)

1.3 Ứng dụng Android phát triển tương lai

Android diện thị trường Mobile vào năm 2008 có nh ng bước tiến vượt bậc lĩnh vực phát triển ứng dụng cho thiết bị Mobile Smartphone

Tuy tảng sau số lượng ứng dụng Android tăng nhanh chóng t năm 2008 đến tháng năm 2012 th số ứng dụng Android lên đến 430.000 ứng dụng

Các hãng sản xuất thiết bị di động Samsung, HTC, Motorola, LG, Acer, Sony … có hướng chọn việc phát triển thiết bị di động m nh chạy hệ điều hành Android làm chiến lược Mặc dù hầu hết ứng dụng Google Play đa số miễn ph (72 % ) bù lại Android lại có đông đảo người sử dụng ưa th ch số lượng s c n tiếp tục tăng tương lai Bên cạnh mắt d ng sản phẩm Smartphone chạy Android gần bùng n mạnh m công nghệ này, chứng tỏ vai tr m nh giới thiết bị thông minh

Lấy dẫn chứng cụ thể hãng điện thoại Samsung v a cho mắt điện thoại Samsung Galaxy SII chạy hệ điều hành Android 2.3 vào ngày 22 tháng năm 2011 nâng cấp lên hệ điều hành 4.0.3

(15)

Đầu tháng năm 2012 Google cho phát hành phiên SDK r19 hỗ trợ công cụ phát triển ứng dụng cho tảng Android 4.0, tảng đầy hứa hẹn mở kỷ nguyên cho thiết bị thông minh tablet Đặc biệt phiên cài đặt số d ng máy Samsung HTC

2 KI N TRÚC HỆ ĐI U HÀNH ANDROID

2.1 Các thành phần cấu tạo nên Android (Android Architecture)

Hình 1.3 Kiến trúc hệ điều hành Android

2.1.1 Tầng Application

Android cung cấp ứng dụng cốt lõi bao g m ứng dụng email, chương tr nh tin nhắn SMS, lịch, đ , tr nh duyệt, địa liên hệ, Tất ứng dụng viết ngôn ng lập tr nh Java

2.1.2 Tầng Application Framework

(16)

phú sáng tạo Các nhà phát triển, lập tr nh viên tự tận dụng thiết bị phần cứng, thông tin địa điểm truy cập, chạy dịch vụ nền, thiết lập hệ thống cảnh báo,thêm thông báo trạng thái nhiều n a

Các lập tr nh viên có tồn quyền truy cập đến API Framework, thường sử dụng ứng dụng Kiến trúc tầng ứng dụng thiết kế đơn giản cho việc tái sử dụng thành phần; bất k ứng dụng publish ứng dụng khác sử dụng chúng Cơ chế cho phép thành phần tương tự thay người dùng

Tất ứng dụng tập hợp dịch vụ hệ thống, bao g m:

 Có nhiều thành phần phong phú mở rộng cho việc thể (Views) UI xây dựng ứng dụng List, Grid, Text box, Button chí mã nhúng cho trình duyệt web

 Content Providers cho phép ứng dụng truy cập d liệu t nh ng ứng dụng khác ( Contact) để chia sẻ d liệu với ứng dụng khác

 Một Resource Manager cung cấp truy cập đến tài nguyên Phi Mã (Non-code) Strings, Graphic, file Layout

 Một Notification Manager cho phép tất ứng dụng hiển thị nh ng thông báo trạng thái

 Một Activity Manager quản lý v ng đời ứng dụng cung cấp Navigation Backstack ph biến

2.1.3 Tầng Libraries

Android cài đặt số thư viện C/C++ sử dụng nhiều thành phần khác hệ thống Android Một số thư viện liệt kê đây:

 System library C – có ngu n gốc t thư viện chuẩn C (libc) chỉnh để nhúng vào thiết bị dựa Linux

(17)

cũng định dạng số ảnh bao g m MPEG4, H.246, MP3, AAC, AMR, JPG PNG

 Sureface Manager: quản lý truy cập để hiển thị subsystem seamlessly

 Libwebcore engine web mạnh m chứa nh ng t nh trình duyệt web Android trình duyệt web nhúng

 SGL có thư viện hỗ trợ cho lập trình 2D  3D Libraries OPEN GL hỗ trợ cho lập trình 3D  Freetype

SQLite sở d liệu nhỏ gọn mạnh m cho tất ứng dụng 2.1.4 Tầng Android Runtime

Android bao g m tập hợp thư viện cung cấp hầu hết chức có sẵn thư viện lõi ngôn ng lập tr nh Java

Mỗi ứng dụng Android chạy tr nh riêng với trường hợp riêng m nh, máy ảo Dalvik Dalvik viết cho thiết bị chạy nhiều máy ảo (VMs) cách hiệu Các máy ảo Dalvik thực thi file Dalvik Executable (.dex) tối ưu hóa nhớ cách tối thiểu VM dựa đăng ký chạy lớp biên dịch tr nh biên dịch ngôn ng Java mà chuyển đ i thành định dạng file dex công cụ “dx”

Các máy ảo Dalvik dựa nhân Linux cho chức lu ng quản lý nhớ mức độ thấp

2.1.5 Linux Kernel

(18)

2.2 Activity

Activity gì?

Activity thành phần ứng dụng Android Mỗi activity thực chức ứng dụng, ứng dụng Android ln có MainActivity, ta chạy ứng dụng th Activity gọi thực thi trước thể nh ng giao diện hay control lên h nh để người dùng tương tác

Một ứng dụng thường bao g m nhiều activity có mối liên quan với nhau, activity hoạt động theo chế hàng đợi ( queue mechanism ) có nghĩa activity hoạt động activity khác k ch hoạt activity có độ ưu tiên lớn (priority) th activity trước s chuyển sang trạng thái Stop Pause để activity thực

Tạo Activity

Để tạo activity bạn cần tạo lớp kế th a t lớp Activity Trong lớp bạn cần thực phương thức callback (callback method) mà hệ thống s thực chuyển đ i gi a activity v ng đời nó, bao g m trạng thái Khởi tạo, D ng, Chạy lại hay Ng ng hẳn Trong có phương thức hay dùng là:

Tên phương thức Mô tả

onCreate() Phương thức dùng để khởi tạo Activity, phương thức bạn nên khởi tạo thành phần thiết yếu

cho activity Quan trọng bạn phải gọi câu lệnh setContentView() để định nghĩa layout cho activity onPause() Hệ thống s gọi phương thức người dùng chuyển

(19)

Thực giao diện người dùng

Giao diện người dùng cho hoạt động cung cấp hệ thống quan điểm, đối tượng dẫn xuất t lớp View Mỗi đối tượng View tr nh bày không gian h nh ch nhật (Màn h nh Mobile) ta xử lý nh ng kiện thông qua câu lệnh đối tượng View

Khai báo activity manifest

Bạn cần khai báo activity tập tin AndroidManifest để truy cập vào hệ thống Để khai báo cần mở tập tin AndroidManifest Project bạn r i thêm thẻ <activity> bên cặp thẻ <application> sau:

<manifest >

<application >

<activity android:name=.ExampleActivity/>

</application >

</manifest >

Bạn thêm số thuộc t nh khác cho activity label, icon, theme style

Sử dụng intent filters

Một Activity định nh ng lọc khác tùy mục đ ch sử dụng, yếu tố lọc để thẻ <intent-filter> bao g m yếu tố để k ch hoạt activity

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"> <intent-filter>

<action android:name="android.intent.action.MAIN"/>

(20)

</activity>

Các phần tử thẻ tab <action> xác định thực hành động ứng dụng activity C n phần tử thẻ <category> xác định activity nên liệt kê khởi tạo ứng dụng hệ thống ( cho phép người dùng gọi activity đó)

Bắt đầu Activity

Bạn gọi activity phương thức startActivity(), thông qua Intent mà bạn miêu tả activity bạn muốn bắt đầu

V dụ: Ở ta có lớp SignInActivity

Intent intent= new Intent(this, SignInActivity.class);

startActivity(intent);

Tuy nhiên, ứng dụng bạn muốn thực vài action send mail, text message, hay cập nhật trạng thái, sử dụng d liệu t activity bạn Trong trường hợp này, ứng dụng bạn khơng có nh ng hoạt động riêng m nh để thực action này, v bạn cần tận dụng nh ng activities cung cấp thiết bị mà thực action cho bạn Nếu có nhiều hoạt động xử lý intent, th người dùng chọn bất k intent để sử dụng V dụ bạn muốn cho người dùng gửi email, bạn tạo intent sau đây:

Intent intent =new Intent(Intent.ACTION_SEND);

intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);

startActivity(intent);

(21)

Dừng Activity

Để tắt activity th bạn cần gọi phương thức finish() Bạn tắt activity mà bạn gọi trước phương thức finishActivity()

Vịng đời Activity

Hình 1.4 Activity Lifecycle

Trong đó:

 onCreate : Khởi tạo activity  onStart : Thực activity

(22)

 onStop : D ng hẳn activity  onRestart : Thực lại activity  onDestroy: Phá hủy activity

Android có chế quản lý tiến tr nh theo độ ưu tiên Các tiến tr nh có độ ưu tiên thấp s bị Android giải phóng mà khơng cảnh báo nhằm đảm bảo tài nguyên

Một Activity bao gồm trạng thái:

 active (running): Activity hiển thị lên hình (foreground)  paused: Activity hiển thị (visible) tương tác

(lost focus)

 stop: Một activity thay hoàn toàn activity khác s chuyển sang trạng thái stop

 killed: hệ thống thiếu nhớ s giải phóng tiến trình theo ngun tắc độ ưu tiên Các activity trạng thái stop pause bị giải phóng hiển thị lại Activity phải khởi động lại hoàn toàn phục h i lại trạng thái trước  Vậy ta hiểu vịng đời Activity sau:

 Entire lifetime : Bắt đầu t phương thức onCreate() phương thức onDestroy()

 Visible lifetime : T phương thức onStart() phương thức onStop()

 Foreground lifetime : T phương thức onResume() đến phương thức onPause()

2.3 Broadcast receivers

(23)

Broadcast receivers không hiển thị giao diện người dùng Tuy nhiên chúng khởi tạo Activity phản h i lại nh ng thơng tin nhận Chúng dùng Notification Manager để thông báo đến người dùng

2.4 DVM

DVM máy ảo giúp ứng dụng Java chạy thiết bị di động Android Nó chạy ứng dụng chuyển đ i thành file thực thi Dalvik(dex) Định dạng phù hợp cho hệ thống mà thường bị hạn chế nhớ tốc độ xử lý DVM thiết kế viết Dan Bornstein, ông đặt tên cho máy ảo sau đến thăm ngơi làng có tên Dalv k đảo Eyjafjưrður, nơi mà số t tiên ông sinh sống

T góc nh n nhà phát triển, DVM giống máy ảo Java (Java vitrual machine) thực tế th hoàn toàn khác Khi nhà phát triển viết ứng dụng dành cho Android, thực đoạn mã mơi trường Java Sau s biên dịch sang bytecode Java, nhiên để thực thi ứng dụng Android th nhà phát triển phải thực thi công cụ có tên dx Đây cơng cụ dùng để chuyển đ i bytecode sang dạng khác gọi dex bytecode “Dex” t viết tắt Dalvik Executable đóng vai tr chế ảo thực thi ứng dụng Android

3 LẬP TRÌNH ỨNG DỤNG ANDROID 3.1 Thiết lập môi trường phát triển ứng dụng

Môi trường thiết lập hệ điều hành Windows cụ thể Windows Để thực việc bạn cần có gói cài đặt sau:

 JDK Java for windows

Link: http://www.oracle.com/technetwork/java/javase/downloads/index.html

 SDK Android for windows

Link: http://developer.android.com/sdk/index.html

 IDE Eclipse for Java Developer

(24)

3.2 Các thành phần Android Project Tạo Android Project:

Click menu File-> New -> Project chọn Android-> Android Project Hoặc tạo nhanh cách click vào biểu tưởng cơng cụ

Hình 1.5 Tạo ứng dụng Android

Project name: Tên cho Project Application name: Tên ứng dụng

Package name: Tên package, bạn đặt sao cho dễ nhớ khơng có ký tự đặc biệt (chỉ g m ch thường số t ~ 9)

Create Activity: Đặt tên cho Activity ch nh s khởi tạo chạy ứng dụng, không muốn tạo cách bỏ dấu Tick

(25)

/src folder: chứa mã ngu n (source code) file Java

/gen: Chứa file R.java dùng để quản lý tài nguyên tạo t tập tin ngu n, file tự tạo nên không chỉnh sửa thay đ i

/Android 1.6: bao g m API 1.6 tương ứng với HĐH Android 1.6, thư viện Import ta khởi tạo Project cách chọn Target

/assets: chứa file tài nguyên database s kèm với Project ta đóng gói ứng dụng

/res/drawable-hdpi: nơi lưu h nh ảnh sử dụng cho ứng dụng hdpi (High dpi: độ phân giải cao) tương th ch với điện thoại có h nh WVGA800 (480x800), WVGA854 (480x854)

/res/drawable-ldpi: thư mục để chứa file ảnh có độ phân giải thấp Low dpi: QVGA (240x320), WQVGA400 (240x400), WQVGA432 (240x432)

/res/drawable-mdpi: chứa file ảnh có độ phân giải trung b nh Medium dpi: HVGA (320x480), WVGA800 (480x800), WVGA854 (480x854)

/res/layout/main.xml: file thiết kế giao diện cho ứng dụng, tạo thêm nhiều file khác cho nh ng hình khác

/res/values/strings.xml: định nghĩa giá trị cho tài nguyên project, giúp tối ưu hóa việc quản lý giá trị mặc định đối tượng String layout

/AndroidManifest.xml: file cấu h nh cho ứng dụng

(26)

4 L THU T CỦA BÀI TOÁN CHU ỂN ĐỔI NGÀ ÂM DƯ NG 4.1 Cơ sở lý thuyết tính lịch âm Việt Nam

Âm lịch Việt Nam loại lịch thiên văn Nó t nh toán dựa chuyển động mặt trời, trái đất mặt trăng Ngày tháng âm lịch t nh dựa theo nguyên tắc sau:

 Ngày tháng âm lịch ngày chứa điểm Sóc

 Một năm b nh thường có 12 tháng âm lịch, năm nhuận có 13 tháng âm lịch

 Đông ch rơi vào tháng 11 âm lịch

 Trong năm nhuận, có tháng khơng có Trung kh th tháng tháng nhuận Nếu nhiều tháng năm nhuận Trung kh th tháng sau Đơng ch tháng nhuận

 Việc t nh toán dựa kinh tuyến 105° đông 4.1.1 Điểm s c

Sóc thời điểm hội diện, trái đất, mặt trăng mặt trời nằm đường thẳng mặt trăng nằm gi a trái đất mặt trời (Như góc gi a mặt trăng mặt trời độ) Gọi “hội diện” v mặt trăng mặt trời hướng trái đất Chu k điểm Sóc khoảng 29,530588 ngày tức 29 ngày 12 44 phút 2,8032 giây Ngày chứa điểm Sóc gọi ngày Sóc ngày bắt đầu tháng âm lịch

4.1.2 Tiết khí

Trung kh điểm chia đường hoàng đạo thành 12 phần Trong đó, bốn Trung kh gi a bốn mùa đặc biệt nhất: Xuân phân (khoảng 20/3), Hạ ch (khoảng 22/6), Thu phân (khoảng 23/9) Đông ch (khoảng 22/12) Thời gi a Trung kh khoảng 30,43685 ngày tức 30 ngày 10 29 phút 3,84 giây Đông ch rơi tháng 11 âm lịch Sau bảng tiết kh :

Số

thứ tự Độ

Tiết kh Dương lịch

Gregorius Trung kh Tiết kh Việt Nam

1 o

270 Đông ch Gi a đông 21(22) -12

2 o

285 Tiểu hàn Chớm rét 4(5)-1

3 o

(27)

4 o

315 Lập xuân Đầu xuân 4(5)-2

5 o

330 Vũ thuỷ m ướt 18(19)-2

6 o

345 Kinh trập Sâu nở 5(6)-3

7 o

0 Xuân phân Gi a xuân 20(21)-3

8 o

15 Thanh minh Trong sáng 5(6)-4

9 o

30 Cốc vũ Mưa rào 20(21)-4

10 o

45 Lập hạ Đầu hè 5(6)-5

11 o

60 Tiểu mãn Kết hạt 21(22)-5

12 o

75 Mang chủng Tua rua 6(7)-6

13 o

90 Hạ ch Gi a hè 21(22)-6

14 o

105 Tiểu thư Nắng oi 7(8)-7

15 o

120 Đại thử Nóng nực 23(24)-7

16 o

135 Lập thu Đầu thu 7(8)-8

17 o

150 Xử thử Mang chủng 23(24)-8

18 o

165 Bạch lộ Nắng nhạt 7(8)-9

19 o

180 Thu phân Gi a thu 23(24)-9

20 o

195 Hàn lộ Mát mẻ 8(9)-10

21 o

210 Sương giáng Sương sa 23(24)-10

22 o

225 Lập đông Đầu đông 7(8)-11

23 o

240 Tiểu tuyết Hanh heo 22(23)-11

24 o

255 Đại tuyết Khô úa 7(8)-12

Bảng : Bảng tiết khí 4.1.3 Tháng nhuận

Do độ dài gi a Trung kh (30,43685) dài độ dài tuần trăng hay c n gọi chu k trăng (29,530588) nên có nh ng tuần trăng khơng chứa Trung kh ta đặt tháng nhuận

Đơng ch rơi vào tháng 11 năm âm lịch Bởi cần t nh điểm Sóc: Sóc A trước ngày Đơng ch thứ Sóc B trước ngày Đông ch thứ hai Nếu khoảng cách gi a A B 365 ngày th năm âm lịch có 12 tháng, nh ng tháng có tên là: tháng 11, tháng 12, tháng 1, tháng 2, …, tháng 10 Ngược lại, khoảng cách gi a hai Sóc A B 365 ngày th năm âm lịch năm nhuận, cần t m xem đâu tháng nhuận Để làm việc ta xem xét tất tháng gi a A B, tháng không chứa Trung kh sau ngày Đông ch thứ tháng nhuận Tháng s mang tên tháng trước kèm ch "nhuận"

(28)

4.2 Các hàm chuyển đổi ngày âm dương

4.2.1 Chuyển ngày dương số ngày Julius

Trong t nh toán thiên văn người ta lấy ngày 1/1/4713 trước công nguyên lịch Julius (tức ngày 24/11/4714 trước CN theo lịch Gregorius) làm điểm gốc Số ngày t nh t điểm gốc gọi số ngày Julius (Julian day number) thời điểm V dụ: số ngày Julius 1/1/2000 24515455

Lịch Julius hoàng đế Julius Caesar đưa vào năm 45 trước Công nguyên Lịch Julius chia thành 12 tháng với 365 ngày, năm th thêm ngày vào cuối tháng tạo thành năm nhuận V theo lịch Julius th năm có 365,25 ngày Nhưng độ dài năm mặt trời 365,242216 ngày lịch Julius dài khoảng 0,0078 ngày năm, tức khoảng 11 phút 14 giây

Để bù vào khác biệt th 400 năm ta s bỏ bớt ngày năm nhuận Cho đến năm 1582, th sai biệt lên đến 10 ngày Giáo Hoàng Gregory XIII định bỏ 10 ngày tháng 10 năm lịch mùa màng tương ứng trở lại Sau ngày tháng 10 năm 1582 ngày 15 tháng 10 (số ngày Julius 2299161) Và để tránh sai biệt, lịch lấy năm nhuận năm có số thứ tự chia chẵn cho năm tận 00 phải chia chẵn cho 400 năm nhuận Lịch sửa mang tên lịch Gregory áp dụng

Để đ i ngày dương dd/mm/yyyy ngày Julius jd ta dung thuật toán sau:  a=(14-mm) mod 12

 y=yyyy+4800-a  m=mm+12*a-3

 jd= dd+(153*m+2) mod 5+365*y + y mod – y mod 100 + y mod 400- 32045

 Nếu jd<2299161 th t nh lại jd :

 jd= dd+(153*m+2) mod 5+365*y + y mod – 32083 Ghi : Xem code phụ lục

(29)

Nếu số ngày Julius nhập vào mà lớn 2299161 s t nh theo lịch Gregorius

 Nếu jd>2299160 th :  a = jd + 32044;

 b = (4 * a + 3) mod 146097;  c = a - (b * 146097) mod 4;  Ngược lại:

 b = 0;

 c = jd + 32082;

 d = (4 * c + 3) mod 1461;  e = c - (1461 * d) mod  m = (5 * e + 2) mod 153;

 day = e - (153 * m + 2) mod +  month = m + - 12 * (m mod 10)  year = b * 100 + d - 4800 + m mod 10

Ghi chú: Xem code phụ lục 4.2.3 Tính ngày S c

Như nói, việc quan trọng t nh lịch âm t nh xem điểm Sóc (tức Hội diện) rơi vào ngày Phương thức sau cho phép t nh thời điểm (t nh số ngày Julius) Sóc thứ k t nh t điểm Sóc lúc 13:51 GMT ngày 1/1/1900 (ngày Julius 2415021.076998695)

Ghi chú: Xem code phụ lục 4.2.4 Tính tọa độ mặt trời

Để biết Trung kh nằm tháng âm lịch nào, ta cần t nh xem mặt trời nằm khoảng đường hoàng đạo vào thời điểm bắt đầu tháng âm lịch Ta chia đường hoàng đạo làm 12 phần đánh số cung t đến 11: t Xuân phân đến Cốc vũ 0; t Cốc vũ đến Tiểu mãn 1; t Tiểu mãn đến Hạ ch 2; v.v Cho jdn số ngày Julius bất k ngày, phương pháp sau s trả lại số cung nói

(30)

Với hàm ta biết tháng âm lịch chứa Trung kh Giả sử tháng âm lịch bắt đầu vào ngày N1 tháng sau bắt đầu vào ngày N2 hàm getSunLongitude cho kết với N1 với N2 Như tháng âm lịch bắt đầu ngày N1 tháng chứa Đông ch : khoảng t N1 đến N2 có ngày mặt trời di chuyển t cung (sau Tiểu tuyết) sang cung (sau Đông ch ) Nếu hàm getSunLongitude trả lại kết cho ngày bắt đầu tháng âm lịch ngày bắt đầu tháng sau th tháng khơng có Trung kh tháng nhuận

4.2.5 Tìm ngày bắt đầu tháng âm lịch

Đông ch thường nằm vào khoảng 19/12-22/12, trước hết ta t m ngày Sóc trước ngày 31/12 Nếu tháng bắt đầu vào ngày khơng chứa Đơng ch th ta phải lùi lại tháng n a

 Đ i ngày 31/12/yy ngày Julius jd

 Đ i jd tuần trăng thứ k kể t tuần trăng 1/1/1900  T m điểm sóc tuần trăng k nm

 T nh tọa độ mặt trời nm r i chia 30, kết lớn th nm t nh lại k-1

 nm ngày bắt đầu tháng 11 năm yy Ghi chú: Xem code phụ lục

4.2.6 Xác định tháng nhuận

Nếu gi a hai tháng 11 âm lịch (tức tháng có chứa Đơng ch ) có 13 tháng âm lịch th năm âm lịch có tháng nhuận Để xác định tháng nhuận, ta sử dụng hàm getSunLongitude nói Cho a11 ngày bắt đầu tháng 11 âm lịch mà 13 tháng sau tháng nhuận Thuật toán sau cho biết tháng nhuận nằm vị tr sau tháng 11

 Đ i ngày bắt đầu tháng 11 năm yy jd  Đ i jd sang tuần trăng k

 i=1

 Lặp: T nh tọa độ mặt trời tuần trăng k +i k+(++i) Nếu hai vị tr sau chia 30 mà th th tháng nhuần i-1

(31)

Giả sử thuật toán trả lại giá trị 4, tháng nhuận s tháng sau tháng thường (Tháng thứ sau tháng 11 đáng tháng 3, v tháng nhuận nên s lấy tên tháng trước tức tháng 2, tháng thứ sau tháng 11 tháng 3)

4.2.7 Đổi ngày dương ngày âm

Với phương pháp hỗ trợ ta đ i ngày dương dd/mm/yy ngày âm dễ dàng Trước hết ta xem ngày monthStart bắt đầu tháng âm lịch chứa (dùng hàm getNewMoonDay nói) Sau đó, ta t m ngày a11 b11 ngày bắt đầu tháng 11 âm lịch trước sau ngày xem xét Nếu hai ngày cách 365 ngày th ta c n cần xem monthStart a11 cách tháng t nh dd/mm/yy nằm tháng âm lịch Ngược lại, a11 b11 cách khoảng 13 tháng âm lịch th ta phải t m xem tháng tháng nhuận t suy ngày t m nằm tháng

 Đ i ngày dương sang jd t nh xem thuộc tuần trăng thứ k  T m ngày đầu tuần trăng k nm

 Ngày âm tính được: jd-nm+1

 T nh ngày bắt đầu tháng 11 năm yy a11

 Nếu a11>=nm, năm âm: yy ngược lại la yy +1 tính lai b11  Kiểm tra năm yy có nhuận khơng

 Tính tháng âm

Ghi chú: Xem code phụ lục 4.2.8 Đổi lịch âm lịch dương

(32)

CHƯ NG

CHƯ NG 2: PHÂN TÍCH HỆ THỐNG 1 S ĐỒ USE CASE

1.1 Sơ đồ use case tổng quát

Hình 2.1 Sơ đồ ca sử dụng tổng quát

1.2 Mô tả ca sử dụng hay chức n

Tên ca sử dụng Chức

Xem ngày âm dương

(33)

Tham khảo ngày

Người dùng xem số tham khảo ngày nên làm g , không nên làm g , nên hướng nào, không nên hướng

Xem tu i Trong chức người dùng s nhập tu i xem tu i m nh năm làm nhà hay khơng, làm nhà vào nh ng năm tương lai, nh ng tu i làm nhà năm Ngoài ra, người dùng c n xem tu i m nh năm làm ăn, danh vọng (gọi vận hạn năm) Xem tu i m nh kết với nh ng tu i nào, không nên kết hôn với tu i

Tử Vi Đông Phương Chức giúp người dùng khám phá thân m nh qua năm sinh (T , Sửu, ) t nh cách, tinh yêu, …

Tư Vi Tây Phương Tương tự chức trên, giải mã theo ngày tháng sinh thông qua ch m (Bảo B nh, Kim Ngưu,…)

Chọn ngày âm dương

Người dùng đến ngày th chọn ngày dương ngày âm bất k Chương tr nh s tự động hiển thị ngày mà bạn muốn xem Nếu ngày âm th s tự động chuyển sang ngày dương r i hiển thị

Bảng 2.1: Chức ca sử dụng 2 S ĐỒ TUẦN TỰ

2.1 Quá trình xem lịch âm dương

(34)

Hình 2.2 Sơ đồ trình xem lịch âm dương

2.2 Quá trình xem tham khảo ngày

Sau mở ứng dụng, lịch s ngày ta xem nh ng việc nên, không nên làm hướng tốt xấu ngày V dụ như: Nên: xuất hành, nhập học, khai trương, … Kiêng: cúng tế, nhận chức, … Nên hướng: Đông, …

(35)

Hình 2.4 Sơ đồ trình xem hướng xuất hành

2.3 Quá trình xem tuổi

Xem tu i để làm nhà xem tu i có phạm vào ba điều k : Tam Tai, Kim Lâu Hoang c, phạm vào điều kị s khơng làm nhà Chương tr nh s tự động t nh đưa lời khuyên bạn nên làm nhà năm khơng, nh ng năm bạn làm tương lai, nh ng tu i làm nhà năm

(36)

Xem tu i để kết hôn xem tu i bạn hợp với tu i nào, không hợp với tu i Chương tr nh s đưa lời khuyên mang t nh tham khảo cho bạn dựa vào d liệu năm sinh giới t nh bạn nhập

Hình 2.6 Sơ đồ q trình xem tuổi kết

Xem vận hạn xem tu i năm có biến cố g tiền tài, danh vọng bệnh tật, … Mỗi tu i nam n tương ứng với Mỗi s mang ý nghĩa khác vận hạn tu i năm Chương tr nh s cho biết điều

(37)

2.4 Quá trình chọn ngày

Để đến ngày khác, ta cần nhập ngày, tháng, năm dương lịch nhập vào ngày, tháng, năm âm lịch t chương tr nh s tự động chuyển sang ngày dương hiển thị h nh

Hình 2.8 Sơ đồ trình chọn ngày dương

(38)

2.5 Quá trình xem tử vi

Xem tử vi để khám phá thân bạn thông qua năm sinh ngày tháng năm sinh Điều góp phần t m ưu điểm nhược điểm để có cách phát huy khắc phục, giúp bạn thành công dễ dàng sống Có cách xem: Tử vi đơng phương theo 12 giáp, Tử vi tây phương theo 12 ch m

Hình 2.10 Sơ đồ q trình xem tử vi đơng phương

(39)

3 TỔ CHỨC CÁC LỚP 3.1 Lớp ReadFileText

Lớp ReadFileText dùng để đọc file d liệu dạng text (.txt) Nó có phương thức h trợ đọc t ng t , t ng d ng nhảy đến d ng bất k

Các phương thức quan trọng ReadFileText:

Phương thức Chức

ReadFileText(String FilePath)

Khởi tạo ReadFileText với đường dẫn file cần đọc

String readLine() Đọc d ng file

String[] readWordsLine() Đọc d ng trả t d ng boolean seek(String s) Di chuyển trỏ đến d ng sau d ng s

Bảng 2: Các phương thức lớp ReadFileText 3.2 Lớp DateProcessing

Đây lớp chứa phương thức xử lý ngày tháng năm dương lịch âm lịch Dùng để chuuyển đ i ngày âm sang ngày dương ngược lại Ngồi c n có phương thức đ i ngày, tháng, năm can chi, cộng tr ngày, kiểm tra hoàng đạo, …

Các phương thức quan trọng lớp ProcessDate:

Phương thức Chức

int convertDateToJulius(int dd, int mm, int yy) Đ i ngày dương sang số ngày MyDate convertJuliusToDate ( int jd ) Đ i số ngày sang ngày

MyDate convertSolarToLunar(int dd, int mm, int yy, double timeZone)

Đ i ngày dương sang ngày âm

MyDate convertLunarToSolar(int lunarDay, int lunarMonth, int lunarYear, int lunarLeap, double timeZone)

Đ i ngày âm sang ngày dương

(40)

String getCanChi(int mm, int yy,boolean CanChi) Đ i tháng mm năm yy can chi

String getCanChi(int dd, int mm, int yy,boolean CanChi)

Đ i ngày đ thánh mm năm yy can chi

MyDate addMyDate(int k, int dd, int mm, int yy) Cộng thêm k ngày

int getLeapMonthOfYear(int yy, int timeZone) Lấy tháng nhuận năm âm lịch

int getNumberDayOfLunarMonth(int mm, int leapMonth, int yy)

Lấy số ngày tháng âm String getCanChiGio(String CanChi,int gio,

boolean Chuoi)

Lấy can chi theo ngày CanChi

String getHoangDao(String CanChi) Lấy hoàng đạo ngày

int getDayBetweenTwoDate(int dd1, int mm1, int yy1, int dd2, int mm2, int yy2)

Lấy khoảng cách ngày gi a ngày dương

Bảng 3: Các phương thức lớp ProcessDate 3.3 Lớp CheckingForBuilding

Lớp dùng để t nh tốn tu i có phạm vào điều kị khơng, làm nhà khơng Có phương thức sau:

Phương thức Chức

boolean checkAge(int yy1, int yy2) Kiểm tra người có năm sinh yy1 làm nhà vào năm yy2 không

boolean checkTamTai(int yy1, int yy2) Kiểm tra người có năm sinh yy1 có phạm vào điều kị Tam Tại năm yy2 không

(41)

boolean checkHoangOc(int yy1, int yy2) Kiểm tra người có năm sinh yy1 có phạm vào điều kị Hoang c năm yy2 không

Bảng 4: Các phương thức lớp CheckingForBuilding 3.4 Lớp MyDate

Lớp MyDate dùng để lưu tr đối tượng ngày g m ngày âm ngày dương Lớp chứa phương thức set get thuộc t nh lớp

Phương thức Chức

MyDate(int day, int month, int year) Khởi tạo đối tượng ngày với

int getDay() Lấy ngày

setDay(int day) Thiết lập ngày

int getMonth() Lấy tháng

setMonth(int month) Thiết lập tháng

int getYear() Lấy năm

setYear(int year) Thiết lập năm

int getLeapMonth() Lấy tháng nhuận nhuận setLeapMonth(int leapMonth) Thiết lập tháng nhuận

Bảng 5: Các phương thức lớp MyDate 3.5 Các lớp giao diện

(42)

Tên lớp Chức

Start Hiển thị menu chọn lựa thao tác với ứng dụng Các dialog thao tác hiển thị thông tin: Chọn ngày, xem tu i, xem tử vi, …

SolarCalendar Dùng để hiển thị tất ngày dương tháng, nh ng ngày cuối tháng trước , nh ng ngày đầu tháng sau Hiển thị dialog thao tác liên quan đến ngày, tháng năm: Xem ngày âm dương, Hướng xuất hành, Nên kiêng ngày

(43)

4 TỔ CHỨC C SỞ DỮ LIỆU

D liệu chương tr nh file text Các file lớp ReadFileText đọc đ d liệu vào lớp giao diện như: XuatHanh, VanHan, LamNha, KetHon, NenKieng, TuViTayPhuong, TuViDongPhuong

(44)

CHƯ NG

CHƯ NG 3: TRIỂN KHAI VÀ K T QUẢ CHẠ DEMO

1 MÀN HÌNH HIỂN THỊ LỊCH ÂM, LỊCH DƯ NG

Khi chạy ứng dụng, h nh hiển thị lịch dương hiển thị Đây h nh ch nh để đến h nh khác T h nh này, ta chọn ngày bất k touch vào h nh S có dialog hiển thị cho lựa chọn t nh xem ngày âm, hướng xuất hành, nên kiêng

Hình 3.1 Màn hình xem lịch dương lịch âm

(45)

Hình 3.2 Màn hình xem lịch âm 2 MÀN HÌNH XEM THẢO TRONG NGÀ

Tương tự h nh trên, t h nh dialog chọn “Nên-Kiêng” “Hướng xuất hành”

(46)

3 MÀN HÌNH XEM TUỔI

Tương tự trên, ta chọn “Menu” Màn h nh chọn năm sinh âm lịch s xuất Trong h nh ta chọn năm sinh Sau h nh s xuất T h nh ta chọn hạng mục muốn xem chọn “Xen tu i Nam” “Xem tu i N ” S có dialog để hiển thị thong tin cho ta biết tu i bạn có thề làm nhà năm khơng, cóthể làm vào nh ng năm nh ng năm đến, vận hạn năm tu i bạn nên kết hôn với tu i nào, …

(47)

Hình 3.5 Màn hình thơng tin kết hôn, vận hạn, làm nhà

4 MÀN HÌNH CHỌN NGÀ ÂM, NGÀ DƯ NG

T h nh hiển thị lịch dương, chọn “Menu “ chọn “Chọn ngày” , xuất h nh cho phép ta chọn ngày dương muốn xem Chọn “Đ ng ý” để hiển thị ngày mà ta chọn

(48)

Hình 3.7 Màn hình chọn ngày âm hiển thị 5 MÀN HÌNH XEM TỬ VI

Trong “Menu” h nh hiển thị lịch dương ta bấm chọn “Tử vi Đông phương” s xuất list chứa danh sách tu i T , Sửu, … Sau ta chọn tu i m nh danh sách để xem t nh cách m nh, tu i hợp, tu i k

Hình 3.8 Màn hình chọn tuổi xem tính cách

(49)(50)

K T LUẬN

K T LUẬN VÀ HƯỚNG PHÁT TRIỂN K T QUẢ ĐẠT ĐƯỢC

Về mặt lý thuyết

Có nhiều vấn đề cần nghiên cứu để xây dựng chương tr nh chạy thiết bị di động hoàn chỉnh Tuy vậy, đ án tốt nghiệp em đặt số yêu cầu cần giải Cụ thể hiển thị lịch âm dương, đưa số nội dung mang t nh chất tham khảo sống ngày Với yêu cầu đặt thế, nghiên cứu nhiều lý thuyết liên quan đến việc xây dựng ứng dụng điện thoại di đông, ngôn ng lập tr nh d liệu phong tục xem ngày truyền thống Ứng với chức em nghiên cứu thuật tốn thực chức để t rút nhận xét, so sánh r i chọn lựa thuật toán phù hợp cho việc cài đặt ứng dụng Chi tiết nh ng lý thuyết nghiên cứu em tr nh bày rõ ràng chương II Đó ch nh kết đạt mặt lý thuyết đ án

1.2 Về thực nghiệm

Dựa vào yêu cầu đặt ban đầu đ án tốt nghiệp, xây dựng thành công chạy thử nghiệm điện thoại di động đạt kết sau:

 Xây dựng thành công ứng dụng chạy thật thiết bị di động điển h nh điện thoại di động

 Giao diện dễ sử dụng

 Số năm mà ứng dụng chạy lớn

 Đưa tiện ch xử lý ngày số tham khảo ngày sống

2 HẠN CH

(51)

 Giao diện chưa hoàn thiện, cố định nên thay đ i được, gây nhàm chán cho người dùng

 Chưa phát triển cho d ng điện thoại có k ch thước h nh khác  D liệu phải load lên t file text nên c n chậm

 Còn nhiều d liệu tham khảo ngày chưa t ch hợp hết 3 HƯỚNG PHÁT TRIỂN Đ TÀI

Trong luận văn việc xem ngày âm dương bạn c n xem tham khảo ngày, nên hướng phát triển t ch hợp thêm nhiều tiện ch khác tử vi hàng ngày, tử vi hàng tuần, tử vi năm, xem bói, …

Ngồi ra, phải thiết kế giao diện sử dụng đẹp hơn, mềm dẻo hơn, thay đ i theo tùy th ch người sử dụng

T m giải pháp để tăng tốc load d liệu nhanh hơn, đ ng thời giải vấn đề d liệu nhiều dung lượng phải nhỏ để thiết bị di động chạy

(52)

PHỤ LỤC Phụ lục

public int convertDateToJulius(int dd, int mm, int yy) {

int a = (14 - mm) / 12;

int y = yy + 4800 - a;

int m = mm + 12 * a - 3; // Lich Gregory

int jd = dd + (153 * m + 2) / + 365 * y + y / - y / 100 + y / 400 - 32045;

// Lich Julius

if (jd < 2299161) {

jd = dd + (153 * m + 2) / + 365 * y + y / - 32083; }

return jd; }

Phụ lục

public MyDate convertJuliusToDate(int jd) {

int a, b, c;

// Julius lon hon 2299160 la lich Gregory (Sau 5/10/1582

if (jd > 2299160) { a = jd + 32044;

b = (4 * a + 3) / 146097; c = a - (b * 146097) / 4; } else { // Lich Julius b = 0;

c = jd + 32082; }

int d = (4 * c + 3) / 1461;

(53)

int m = (5 * e + 2) / 153;

int day = e - (153 * m + 2) / + 1;

int month = m + - 12 * (m / 10);

int year = b * 100 + d - 4800 + m / 10;

returnnew MyDate(day, month, year);

}

Phụ lục :

private int INT(double d) {

return (int) Math.floor(d); }

Phụ lục

private double getNewMoon(int k, double timeZone) {

double T = k / 1236.85;

double T2 = T * T;

double T3 = T2 * T;

double dr = Math.PI / 180;

double Jd1 = 2415020.75933 + 29.53058868 * k + 0.0001178 * T2

- 0.000000155 * T3;

Jd1 = Jd1 + 0.00033 * Math.sin((166.56 + 132.87 * T - 0.009173 * T2) * dr);

double M = 359.2242 + 29.10535608 * k - 0.0000333 * T2 - 0.00000347

* T3; // Sun's mean anomaly

double Mpr = 306.0253 + 385.81691806 * k + 0.0107306 * T2 +

0.00001236 * T3; // Moon's mean anomaly

double F = 21.2964 + 390.67050646 * k - 0.0016528 * T2 - 0.00000239

* T3; // Moon's argument of latitude

double C1 = (0.1734 - 0.000393 * T) * Math.sin(M * dr) + 0.0021 *

Math.sin(2 * dr * M);

(54)

C1 = C1 + 0.0104 * Math.sin(dr * * F) - 0.0051 * Math.sin(dr * (M + Mpr));

C1 = C1 - 0.0074 * Math.sin(dr * (M - Mpr)) + 0.0004 * Math.sin(dr * (2 * F + M));

C1 = C1 - 0.0004 * Math.sin(dr * (2 * F - M)) - 0.0006* Math.sin(dr * (2 * F + Mpr));

C1 = C1 + 0.0010 * Math.sin(dr * (2 * F - Mpr)) + 0.0005* Math.sin(dr * (2 * Mpr + M));

double deltat;

if (T < -11) {

deltat = 0.001 + 0.000839 * T + 0.0002261 * T2 - 0.00000845 * T3

- 0.000000081 * T * T3; } else {

deltat = -0.000278 + 0.000265 * T + 0.000262 * T2; }

double JdNew = Jd1 + C1 - deltat;

return INT(JdNew + 0.5 + timeZone/24);

}

Phụ lục

private double getSunLongitude(double jdn, double timeZone) {

double T = (jdn - 2451545.0 - 0.5 - timeZone / 24) / 36525; // Time in Julian centuries from 2000-01-01 12:00:00 GMT

double T2 = T * T;

double dr = Math.PI / 180; // degree to radian

double M = 357.52910 + 35999.05030 * T - 0.0001559 * T2 - 0.00000048

* T * T2; // mean anomaly, degree

double L0 = 280.46645 + 36000.76983 * T + 0.0003032 * T2; // mean

longitude, degree

(55)

DL = DL + (0.019993 - 0.000101 * T) * Math.sin(dr * * M) + 0.000290 * Math.sin(dr * * M);

double L = L0 + DL; // true longitude, degree

L = L - 360 * (INT(L / 360)); // Normalize to (0, 360)

return L; }

Phụ lục

private int getLunarMonth11(int yy, double timeZone) {

double off = convertDateToJulius(31, 12, yy) - 2415021.076998695;

int k = INT(off / 29.530588853);

int nm = getNewMoonDay(k, timeZone);

int sunLong = INT(getSunLongitude(nm, timeZone) / 30);

if (sunLong >= 9) {

nm = getNewMoonDay(k - 1, timeZone); }

return nm;

}

Phụ lục

private int getLeapMonth(int a11, double timeZone) {

int k = INT(0.5 + (a11 - 2415021.076998695) / 29.530588853);

int last; // Month 11 contains point of sun longutide 3*PI/2 (December // solstice)

int i = 1; // We start with the month following lunar month 11

int arc = INT(getSunLongitude(getNewMoonDay(k + i, timeZone), timeZone) / 30);

do {

(56)

arc = INT(getSunLongitude(getNewMoonDay(k + i, timeZone), timeZone) / 30);

} while (arc != last && i < 14);

return i - 1; }

Phụ lục

public MyDate convertSolarToLunar(int dd, int mm, int yy, double timeZone) {

MyDate obj = new MyDate();

int lunarDay, lunarMonth, lunarYear, leapMonth;

int dayNumber = convertDateToJulius(dd, mm, yy);

int k = INT((dayNumber - 2415021.076998695) / 29.530588853);

int monthStart = getNewMoonDay(k + 1, timeZone);

if (monthStart > dayNumber) {

monthStart = getNewMoonDay(k, timeZone); }

int a11 = getLunarMonth11(yy, timeZone);

int b11 = a11;

if (a11 >= monthStart) { lunarYear = yy;

a11 = getLunarMonth11(yy - 1, timeZone); } else {

lunarYear = yy + 1;

b11 = getLunarMonth11(yy + 1, timeZone); }

lunarDay = dayNumber - monthStart + 1;

int diff = INT((monthStart - a11) / 29); leapMonth = 0;

lunarMonth = diff + 11;

if (b11 - a11 > 365) {

int leapMonthDiff = getLeapMonth(a11, timeZone);

(57)

lunarMonth = diff + 10;

if (diff == leapMonthDiff) { leapMonth = 1;

} } }

if (lunarMonth > 12) {

lunarMonth = lunarMonth - 12; }

if (lunarMonth >= 11 && diff < 4) { lunarYear -= 1;

}

obj.setDay(lunarDay); obj.setMonth(lunarMonth); obj.setYear(lunarYear);

obj.setLeapMonth(leapMonth);

return obj; }

Phụ lục

public MyDate convertLunarToSolar(int lunarDay, int lunarMonth,

int lunarYear, int lunarLeap, double timeZone) {

int a11, b11;

if (lunarMonth < 11) {

a11 = getLunarMonth11(lunarYear - 1, timeZone); b11 = getLunarMonth11(lunarYear, timeZone); } else {

a11 = getLunarMonth11(lunarYear, timeZone); b11 = getLunarMonth11(lunarYear + 1, timeZone); }

(58)

if (off < 0) { off += 12; }

if (b11 - a11 > 365) {

int leapOff = getLeapMonth(a11, timeZone);

int leapMonth = leapOff - 2;

if (leapMonth < 0) { leapMonth += 12; }

// System.out.println(leapMonth);

if (lunarLeap != && lunarMonth != leapMonth) { System.out.println("Invalid input!");

returnnew MyDate(0, 0, 0);

} elseif (lunarLeap != || off >= leapOff) { off += 1;

} }

int monthStart = getNewMoonDay(k + off, timeZone);

return convertJuliusToDate(monthStart + lunarDay - 1);

(59)

TÀI LIỆU THAM KHẢO Tiếng Việt

[1] Chu Văn Khánh Lịch Vạn Niên Việt Nam Thế Kỷ XXI (2001-2100). Nhà xuất Văn Hóa - Thơng Tin 2008

[2] Đỗ Quang Thái Tự học ngôn ngữ lập trình Java Nhà xuất thống kê 1999

Trang web

[3] http://www.informatik.uni-leipzig.de/~duc/amlich/

(60)

TÓM TẮT LUẬN VĂN TỐT NGHIỆP

Cùng với phát triển công nghệ thông tin giới, phát triển công nghệ di động không thua Con người sử dụng nh ng thiết bị di động đại ngày nhiều V vậy, việc xây dựng nh ng ứng dụng cho nh ng thiết bị cần thiết Mọi công việc ngày đưa hết vào thiết bị Lúc thiệt bị giống người bạn đưa nh ng lời khuyên cần thiết cho sống ngày

Đề tài “Tìm hiểu công nghệ Android - Xây dựng ứng dụng Lịch Vạn Sự Vạn Niên mobile” nhằm khám phá công nghệ Android xây dựng ứng dụng cụ thể góp phần phong phú giới ứng dụng di động Người dùng nhanh chóng t m nh ng g mong muốn việc xem ngày âm lịch tham khảo ngày, xem tu i, xem t nh cách cá nhân

Ứng dụng mà xây dựng thực số chức lịch âm dương xem tham khảo ngày đoán t nh cách người qua năm sinh hay qua ngày tháng năm sinh: xem ngày dương, ngày âm; hướng xuất hành, nên kiêng ngày; xem tu i để làm nhà, kết hơn, vận hạn; xem tính cách theo tử vi đơng phương, tây phương; t nh tốn ngày; xem ngày lễ

Lịch Julius Julius Caesar http://www.informatik.uni-leipzig.de/~duc/amlich/ http://developer.android.com/guide/appendix/g-app-intents.html http://www.i2tuvi.com/Xem_tu_vi_26/Tu_vi_Tay_Phuong/ http://www.i2tuvi.com/Xem_tu_vi_10/Tu_vi_Dong_Phuong/ http://www.tinhte.vn/threads/785470/

Ngày đăng: 01/04/2021, 09:35