Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 37

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ TP. HCM

ĐỒ ÁN CƠ SỞ

ỨNG DỤNG CALCULATOR TRÊN ANDROID

Ngành: CÔNG NGHỆ THÔNG TIN


Chuyên ngành: CÔNG NGHỆ PHẦN MỀM

Giảng viên hướng dẫn : Phạm Đức Thành


Sinh viên thực hiện : Hoàng Minh Nhật
MSSV: 1311060916 Lớp: 13DTH06

TP. Hồ Chí Minh, 2016

Trang | 0
LỜI CẢM ƠN

Hoàn thành bài báo cáo đồ án cơ sở này trước hết em xin trân thành cảm ơn đến
các thầy cô thuộc khoa Công Nghệ Thông Tin trường Đại Học Công Nghệ TP.HCM đã
tạo cơ hội cho em cũng như các bạn sinh viên thực hiện đồ án. Qua đây, em xin cảm ơn
thầy Phạm Đức Thành giảng viên của khoa Công Nghệ Thông Tin trong suốt quá trình
thực hiện đồ án đã giúp đỡ và tận tình giảng dạy cho em những kiến thức mới và em xin
cảm ơn thầy đã tận tình góp ý cho đồ án của em ngày càng hoàn thiện hơn.

Khi hoàn thành được bài báo cáo này đã trải qua khoảng thời gian làm việc độc
lập tuy bước đầu có chút khó khăn nhưng nhờ sự giúp đỡ của thầy và các bạn trong nhóm
đã giúp em tích thêm nhiều kinh nghiệm cũng như trải nghiệm mới trên lập trình di động,
đồng thời vận dụng những kiến thức đã học để hoàn thành công việc một cách tốt nhất.

TP.Hồ Chí Minh, Ngày 02/05/2016.

Sinh viên
Hoàng Minh Nhật

Trang | 1
MỤC LỤC

CHƯƠNG 1: TỔNG QUAN..............................................................................................4


1. GIỚI THIỆU VỀ CALCULATOR....................................................................................4
1.1. Lịch sử phát triển...............................................................................................4
1.2. Ứng dụng Calculator.........................................................................................6
1.2.1. Ứng dụng Calculator của Windows..........................................................6
1.2.2. Ứng dụng Calculator của Android............................................................7
2. NHIỆM VỤ ĐỒ ÁN........................................................................................................9
2.1. Mô tả đề tài.........................................................................................................9
2.2. Yêu cầu đồ án.....................................................................................................9
3. CẤU TRÚC ĐỒ ÁN......................................................................................................10
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT..............................................................................10
1. TỔNG QUAN VỀ ANDROID........................................................................................10
1.1. Android là gì?...................................................................................................10
1.2. Các thành phần và tính năng..........................................................................10
1.3. Kiến trúc Android.............................................................................................11
1.4. Ứng dụng..........................................................................................................11
1.5. Framework ứng dụng......................................................................................11
1.6. Hệ thống thư viện.............................................................................................12
1.7. Android runtime...............................................................................................13
1.8. Linux Kernel....................................................................................................13
2. TÌM HIỂU PHẦN MỀM ECLIPSE VÀ PHẦN MỀM SDK MANAGER...........................13
3. GIỚI THIỆU VỀ DRAW 9 – PATCH TRONG LẬP TRÌNH ANDROID............................17
3.1. Định dạng 9 – Patch........................................................................................17
3.2. Công cụ Draw 9 – Patch trong lập trình Android...........................................19
3.3. Giới thiệu các chức năng.................................................................................20
3.4. Các biến sử dụng..............................................................................................21
3.5. Xử lý từng chức năng......................................................................................21
3.5.1. Chức năng nhập số...................................................................................21
3.5.2. Phép toán cộng, trừ nhân chia.................................................................22
3.5.3. Phép toán phần trăm................................................................................23
3.5.4. Phép toán logarit cơ số 10........................................................................23
3.5.5. Phép toán căn bậc 2..................................................................................23
3.5.6. Phép toán bình phương............................................................................23
3.5.7. Phép toán lũy thừa...................................................................................24
3.5.8. Phép toán sin, cos , tan.............................................................................24
3.5.9. Chức năng dấu chấm ngăn cách thập phân...........................................24
3.5.10. Chức năng pi.........................................................................................24
3.5.11. Chức năng clear....................................................................................24
3.5.12. Chức năng backspace...........................................................................25
3.5.13. Chức năng bằng....................................................................................25
3.6. Thuật toán quan trọng.....................................................................................26
Trang | 2
3.7. Thiết kế giao diện.............................................................................................28
CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM.................................................................29
CHƯƠNG 4: KẾT LUẬN VÀ KIẾN NGHỊ................................................................35
1. KẾT QUẢ ĐẠT ĐƯỢC.................................................................................................35
2. ĐÁNH GIÁ ƯU, KHUYẾT ĐIỂM..................................................................................35
3. HƯỚNG PHÁT TRIỂN TƯƠNG LAI.............................................................................36
4. Tài liệu tham khảo.................................................................................................36

Trang | 3
NỘI DUNG ĐỒ ÁN

CHƯƠNG 1: TỔNG QUAN

1. Giới thiệu về Calculator

Chiếc máy tính bỏ túi (Calculator) là một đồ vật rất quen thuộc đối với nhiều
người, từ sinh viên, học sinh cho đến các nhân viên bán hàng, kế toán v.v… Là
một thiết bị giúp bạn thực hiện các quy tắc toán học như cộng trừ, nhân chia, hay
cao cấp hơn như giải phương trình, tính toán ma trận. Để có thể trở thành một thiết
bị nhỏ gọn mà hữu dụng với nhiều chức năng như hiện nay, chiếc máy tính bỏ túi
đã phải trải qua những giai đoạn thăng trầm trong lịch sử mà mãi đến tận cuối thế
kỷ 20 nó mới được sử dụng một cách rộng rãi.

1.1. Lịch sử phát triển

Bàn tính cơ học chính là tiền thân của máy tính bỏ túi ngày nay. Công cụ tính
toán số học đầu tiên được biết đến là chiếc bàn tính (Abacus) được sử dụng bởi
những người Sumer và người Ai Cập vào khoảng 2000 năm trước công nguyên.
Sau đó, bàn tính được sử dụng rộng rãi ở các nước Châu Á, châu Phi và nhiều
vùng lãnh thổ khác chủ yếu bởi các thương nhân. Cho đến ngày nay, vẫn còn
khá nhiều người sử dụng loại bàn tính cơ học của người Trung Quốc, với các
hạt được xâu thành chuỗi theo chiều dọc trong một khung gỗ chữ nhật.

Trang | 4
Đến năm 1964, Công ty Nhật Bản Sharp đã chế tạo được chiếc máy tính đầu
tiên có thể tự thực hiện các phép tính toán, mặc dù chiếc máy tính có kích thước
gần bằng một chiếc xe ô tô. Năm 1967, Texas Instruments giới thiệu dự án công
nghệ “Cal Tech” với chiếc máy tính bỏ túi đầu tiên có kích thước nhỏ gọn, có
khả năng thực hiện các phép tính đơn giản như cộng trừ, nhân chia.

Sau đó vài năm, Canon đã sử dụng công nghệ này để sản xuất những chiếc máy
tính bỏ túi thương mại đầu tiên và bán rộng rãi trên thị trường với giá 400 USD.
Tuy nhiên chỉ đến năm 1971, sau khi Intel ra mắt mẫu chip xử lý thương mại
đầu tiên là Intel 4004, những chiếc máy tính bỏ túi mới thực sự trở nên hữu
dụng với khả năng tính toán tốt hơn, kích thước nhỏ hơn cũng như giá thành
hợp lý hơn.

Cho đến nay, với sự phát triển của khoa học, công nghệ những chiếc máy tính
bỏ túi không chỉ đơn giản là thực hiện các phép tính cộng trừ, nhân chia. Mà
bên cạnh đó chúng còn có khả năng thực hiện nhiều phép biến đổi, các hàm
lượng giác và logarit, làm việc với các hằng số như pi và e, tính toán với số
phức hay phân số, giải phương trình, phân tích thống kê, sác xuất hay ma trận.

Trang | 5
1.2. Ứng dụng Calculator

1.2.1. Ứng dụng Calculator của Windows

Ngày nay, công nghệ ngày càng phát triển thì chiếc máy tính bỏ túi ngày xưa
mà con người vẫn cầm để tính toán hay giải bài tập… đã dần được thay thế
bằng phần mềm máy tính bỏ túi (hay còn gọi là phần mềm Calculator).
Chương trình Calculator lần đầu tiên được Microsoft tích hợp vào hệ điều
hành Window 1.0 với các chức năng tính toán đơn giản. Trong Windows 3.0,
thêm vào chế độ Scientific, bao gồm khai căn và lũy thừa, lôgarit, hình học
(hỗ trợ radian, độ và các góc gradian), chuyển đổi hệ cơ số (2, 8, 10, 16).
Trong Windows 3.0 và Windows 3.1 giao diện chương trình có nền trắng và
các nút bấm 2D. Trong Windows 95 và sau này, chương trình sử dụng thư viện
bignumber, thay cho chuẩn dấu phẩy động của IEEE. Trong Windows ME,
chức năng nhóm số đã được thêm vào.

Hình ảnh phần mềm Calculator trên Windows 10 hiện nay.

 Dạng Standard

Trang | 6
 Dạng Scientific

Ngoài ra phần mềm Calculator trên Windows 10 còn có các chức năng đi kèm
khác như: Chế độ máy tính dành cho lập trình viên, tính ngày tháng, chuyển
đổi đơn vị độ dài, chuyển đổi nhiệt độ, chuyển đổi m/h -> km/h …và còn
nhiều chức năng khác. Tuy nhiên ở đồ án cơ sở này em chỉ tập trung vào hai
dạng chính của một chiếc máy tính bỏ túi đó là Standard và Scientific.

1.2.2. Ứng dụng Calculator của Android

Ngoài hệ điều hành Windows của máy tính thì hiện nay ứng dụng máy tính bỏ
túi được phát triển trên hầu hết các điện thoại cầm tay thông minh đặc biệt là
trên hệ điều hành Android. Các chức năng của ứng dụng Calculator chạy trên
hệ điều hành này không thua kém gì ứng dụng Calculator trên Windows. Nó
đáp ứng các nhu cầu cần thiết cho người dùng.

Hình ảnh của ứng dụng Calculator trên hệ điều hành Android.

Trang | 7
 Dạng Standard

 Dạng Scientific

Trang | 8
2. Nhiệm vụ đồ án

2.1. Mô tả đề tài

Gần đây điện thoại cầm tay thông minh đã trở thành một vật hầu như ”cần phải
có” trong cuộc sống hằng ngày của giới làm việc “trí thức”. Viết phần mềm tiện
ích nâng cao giá trị sử dụng cho chúng cũng trở nên một trào lưu cho các công
ty phát triển phần mềm, các giới lập trình viên chuyên nghiệp cũng như không
chuyên. Đặc biệt là những ứng dụng cho máy chạy trên hệ điều hành Android.

Điểm cần lưu ý là trong phần cứng (hardware) của đa số điện thoại cầm tay
không có bộ xử lý tính dấu phẩy động (floatting-point processor). Điều này làm
việc phát triển phần mềm cho chúng trở phức tạp và lý thú hơn. Cũng nên biết
rằng rất nhiều ứng dụng phần mềm đòi hỏi phép tính dấu phẩy động(bề ngoài
tưởng là không cần thiết), ví dụ như tính toán các phần cong (curves) cho các
font chữ DGOPSWY… Để xử lý số thực sinh viên sẽ tìm hiểu và áp dụng
fixed-point vào tất cả phép tính toán.

Đề tài “Lập trình ứng dụng Calculator trên hệ điều hành Android” nhằm
nâng cao kỹ năng lập trình, cũng như phân tích, thiết kế và xây dựng một ứng
dụng thực tiễn cho sinh viên từ những yêu cầu được phân tích như trên. Xây
dựng được một phần mềm ứng dụng như một máy tính khoa học thực thụ sẽ
không đơn giản. Cho nên mức độ yêu cầu của đề tài chỉ bao gồm những phép
toán và hàm đơn giản. Đồng thời ứng dụng được giới hạn chỉ cho máy điện
thoại cầm tay thông minh do màn hình (lớn, cảm ứng…) của chúng sẽ cho phép
thiết kế và xây dựng một giao diện phức tạp đa năng và bộ xử lý của chúng đủ
mạnh để tính toán bài toán phức tạp (phát sinh từ việc không có bộ xử lý tính
dấu phẩy động) nhằm đáp ứng được yêu cầu của đề tài.

2.2. Yêu cầu đồ án

 Dạng Standard

Khi ở dạng Standard, chương trình sẽ thực hiện các phép toán đơn giản nhất
của caculator (+, -, *, /). Màn hình hiển thị khi ở dạng Standard là portrait.

 Dạng Scientific

Khi ở dạng Scientific, ngoài những phép toán đơn giản ở standard chương
trình sẽ thực hiện thêm các chức năng khó hơn như (√, %, log, sin, cos, tan,
x², Xⁿ ). Màn hình hiển thị khi ở dạng Scientific là landscape.

Trang | 9
3. Cấu trúc đồ án

 Chương 1: Tổng quan về Calculator. Giới thiệu sơ bộ về lịch sử phát triển


Calculator. Giới thiệu phần mềm Calculator của Windows.

 Chương 2: Tìm hiểu về Android và cách tạo Android Project bằng Eclipse.
Đồng thời nêu rõ mô tả đề tài và yêu cầu đồ án Calculator, giới thiệu các chức
năng của chương trình. Trong đó nếu rõ các biến sử dụng, chi tiết xử lý từng
chức năng, thuật toán quan trọng, trình bày về thiết kế giao diện.

 Chương 3: Cài đặt và kiểm thử chương trình. Tạo một số các test case chạy
thử chương trình.

 Chương 4: Đánh giá chất lượng sản phẩm. Trình bày các ưu điểm, khuyết
điểm của phần mềm. Đề ra hướng phát triển trong tương lai.

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

1. Tổng quan về Android

1.1. Android là gì?

Android là một bộ phận phần mềm cho các thiết bị di động bao gồm một hệ
điều hành, middleware và các ứng dụng thiết yếu. Bộ Android SDK cung các
công cụ và API cần thiết để phát triển các ứng dụng trên nền tảng Android bằng
ngôn ngữ lập trình Java.

1.2. Các thành phần và tính năng

Framework phát triển ứng dụng cho phép tái sử dụng và thay thế các thành
phần.

Máy ảo Java Dalvik được tối ưu hóa cho các thiết bị di động.

Trình duyệt tích hợp dựa trên engine WebKit mã nguồn mở.

Hệ thống đồ họa tối ưu hóa được hỗ trợ bởi thư viện đồ họa 2D, 3D đặc biệt
dựa trên đặc tả kỹ thuật của OpenGL ES 1.0 (tùy chọn phần cứng tăng tốc đồ
họa).

SQLite dùng cho việc lưu trữ cấu trúc dữ liệu.

Hỗ trợ các định dạng video, audio và hình ảnh phổ biến(MPEG4, H.264,
MP3, ACC, AMR, JPG, PNG, GIF).

Hỗ trợ GSM (phụ thuộc phần cứng).


Trang | 10
Bluetooth, RDGE, 3G và Wifi (phụ thuộc phần cứng).

Camera, GPS, la bàn và cảm ứng gia tốc (phụ thuộc phần cứng).

Môi trường phát triển phong phú bao gồm hệ mô phỏng thiết bị, công cụ gỡ
lỗi, tối ưu hóa bộ nhớ và hiệu suất và một plugin cho IDE Eclipse.

1.3. 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ả như sau:

1.4. Ứng dụng

Android đóng gói kèm một bộ các ứng dụng lõi bao gồm một ứng dụng email,
lịch, chương trình tin nhắn SMS, bản đồ, trình duyệt, danh bạ, … Tất cả các
ứng dụng được viết bằng cách sử dụng ngôn ngữ lập trình Java.

1.5. Framework ứng dụng

Các nhà phát triển có toàn quyền truy cập vào các API được sử dụng bởi các
ứng dụng lõi. Kiến trúc ứng dụng được thiết kế sao cho đơn giản hóa việc tái sử
dụng các thành phần. Bất kỳ ứng cũng có thể công bố các tính năng của mình
và ứng dụng nào khác sau đó đều có thể sử dụng những tính năng này(tùy thuộc
vào quy định bảo mật của framework). Cơ chế này cũng cho phép các thánh
phần được thay thế bởi người dùng.

Trang | 11
Nền của tất cả các ứng dụng là một tập hợp các dịch vụ và hệ thống, bao gồm:

 Một phong phú và đa dạng Views có thể được sử dụng để xây dựng một
ứng dụng, bao gồm lists, grids, text boxes, buttons và thậm chí một trình
duyệt web nhú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 (như danh bạ), hoặc chia sẻ dữ liệu của riêng mình.

 Một Resource Manager cung cấp quyền truy cập vào tài nguyên phi mã
nguồn như ngôn ngữ, tài nguyên đồ họa và giao diện.

 Một Notification Manager cho phép tất cả các ứng dụng có thể hiển thị
thong báo trong thanh trạng thái.

 Một Activity Manager quản lý vòng đời của các ứng dụng và cung cấp
một backstack navigation thông dụng.

1.6. Hệ thống thư viện

Android bao gồm một hệ thống như thư viện C/C++, được sử dụng bởi các
thành phần khác nhau của hệ thống Android. Các nhà phát triển truy cập những
tính năng cung cấp bởi các thư viện tiệp thông qua Framework ứng dụng
Android. Một số các thư viện chính được liệt kê dưới đây:

 Hệ thống thư viện C – kế thừa các thống thư viện chuẩn C(LIBC) theo
giấy phép BSD, điều chỉnh tương thích các thiết bị nhúng trên nền
Linux.

 Media Libraies – dựa trên OpenCORE của PacketVideo; hỗ trợ thu và


phát nhiều định dạng audio, video và hình ảnh tĩnh phổ biến bao gồm:
MPEG4, H.264, MP3, AAC, AMR, JPG và PNG.

 Surface Manager – quản lý quyền truy cập vào phần hiển thị giao diện
cả 2D và 3D. Hỗ trợ đa ứng dụng.

 LibWebCore – trình duyệt web trên một engine hiện đại, có hỗ trợ cho
cả trình duyệt web của Android lẫn các View nhúng.

 SGL – các engine đồ họa 2D nền bên dưới.

 Thư viện 3D – một kế thừa dựa trên OpenGL ES 1.0 API; các thư viện,
hoặc sử dụng phần cứng tăng tốc 3D (nếu có) hoặc bao gồm, tối ưu hóa
3D trên phần mềm.

Trang | 12
1.7. Android runtime

Android bao gồm một tập các thư viện lõi cung cấp hầu hết các chức năng sẵn
có trong thư viện của ngôn ngữ lập trình Java.

Mỗi ứng dụng Android chạy trong tiến trình riêng của mình, với thực thể riêng
của máy ảo Dalvik. Dalvik đã được viết để một thiết bị có thể chạy nhiều máy
ảo một cách hiệu quả. Máy ảo Dalvik thực thi file trong định dạng Executable
Dalvik (dek). Định dạng được tối ưu hóa bộ nhớ giảm thiểu footprint. Máy ảo
được đăng ký và chạy các class biên dịch bởi một Java Compiler thành các file
dex, đính kèm các công cụ “dx”.

Máy ảo Dalvik dựa vào nhân Linux cho các chức năng nền như phân luồng và
quản lý bộ nhớ cấp thấp.

1.8. Linux Kernel

Android dựa trên Linux cho các dịch vụ cốt lõi như hệ thống bảo mật, quản lý
bộ nhớ, quản lý tiến trính, hệ thống mạng và driver điều khiển. Nhân cũng đóng
vai trò như một lớp trừu tượng giữa phần cứng và tất cả các phần mềm.

2. Tìm hiểu phần mềm Eclipse và phần mềm SDK Manager

Chương trình được viết trên Eclipse Mar.2. Sau đây các bước do em tìm hiểu và
thực hành.

Bước 1: Khởi động chương trình Eclipse

Trang | 13
Bước 2: Tạo Android Application Project

Bước 3: Điền tên Android Application Project

Trang | 14
Bước 4: Next

Bước 5: Chọn hình ảnh

Trang | 15
Bước 6: Next

Bước 7: Next

Trang | 16
3. Giới thiệu về Draw 9 – Patch trong lập trình Android

3.1. Định dạng 9 – Patch

NinePatch cho phép chia một tấm ảnh thành 9 phần với 4 góc không co giãn, 4
cạnh co giãn về một hướng, phần nội dung chính giữa được co giãn theo hai
hướng. Thông thường phần nội dung chính giữa trong suốt, vì vậy phần chính
giữa có thể đẩy nội dung như chuỗi vào trong nó. Nó cho phép tạo các bức ảnh
mà có thể co giãn theo cách ta muốn khi mà nội dung vượt khỏi kích thước của
hình ảnh .

Đối với NinePatch ta có thể lập trình bằng 2 cách: mã lệnh Java với lớp
NinePatch và tạo ra một bức ảnh NinePatch sử dụng công cụ Draw 9-patch.
Ảnh NinePatch là một bức ảnh có thể co giãn một cách tự động tùy thuộc vào
kích thước nội dung bên trong nó.

Một ví dụ sử dụng NinePatch là các hình nền sử dụng cho nút nhấn chuẩn của
Android. Khi tạo một nút nhấn, nếu nội dung chuỗi hay hình ảnh trong một nút
nhấn quá lớn hay quá nhiều thì nút nhấn sẽ bự dần ra tùy thuộc vào kích thước
của hình hay chuỗi đó. Nhưng chung quy lại, cho dù lớn bao nhiêu thì nút nhấn
vẫn có hình nền đồng bộ với nhau và không bị bể ảnh như trong 5 trạng thái
hình bên dưới:

Trang | 17
Hình ảnh dạng NinePatch phải là hình ảnh PNG chuẩn mà bao gồm hình ảnh
chính phía bên trong và một đến bốn đường viền ở ngoài cùng có kích thước bề
rộng là 1 pixel và ảnh phải lưu với phần mở rộng là .9.png; đương nhiên là ảnh
sẽ được lưu trữ trong thư mục \res\raw trong thư mục của một project Android.
Ý nghĩa các đường viền như sau:

 Đường viền trên và đường viền trái của hình NinePatch: quy định độ
giãn của tấm hình theo chiều dọc và chiều ngang khi View chứa nó co giãn.
Chú ý, bất kể một hình kiểu NinePatch nào đều phải có viền trên và viền
trái; nếu thiếu một trong trong hai đường thì chương trình sẽ không chấp
nhận ảnh này.

 Đường viền dưới và đường viền phải của hình NinePatch: quy định
khoảng cách tối thiểu giữa phần nội dung của View chứa nó với đường viền
của nó. Nói một cách dễ hiểu, nếu chiều cao và chiều rộng của phần nội
dung quá lớn thì kích thước chiều cao và chiều rộng của hình sẽ giãn nở
phù hợp với nội dung và khoảng cách tối thiểu giữa phần nội dung và
đường viền sẽ được quy định bởi hình vẽ sau:

Trang | 18
3.2. Công cụ Draw 9 – Patch trong lập trình Android

Draw 9-patch là công cụ tạo ảnh thuộc kiểu NinePatch dễ dàng nhất. Cách thức
sử dụng công cụ:

 Từ dòng lệnh commanline hoặc trong thư mục chứa SDK \tool tìm và chạy
draw9patch.

 Kéo và thả một tấm hình (chỉ hỗ trợ định dạng PNG) vào trong cửa sổứng
dụng Draw 9-patch (như hình minh họa bên trên).

 Nhấn chuột vào một trong 4 cạnh của tấm hình (mỗi lần nhấp chuột sẽ tạo 1
pixel màu đen, đây chính là phần quy định độ giãn của tấm hình) và quan
sát độ co giãn của hình ảnh ở khung bên phải của ứng dụng Draw 9-patch.
Trang | 19
 Sau khi chỉnh sửa tạo được hình ảnh như ý, ta tiến hành chọn File/ Save 9
patch để lưu lại hình đã chỉnh sửa thành định dạng NinePatch.

3.3. Giới thiệu các chức năng

- Đối với 10 button thể hiện từ số 0-> 9. Khi người dùng click vào một số bất kỳ
sẽ hiển thị ra số người dùng sẽ click vào.

- Tiếp đến 4 button thể hiện cho các phép tính (+, - , *, /). Khi muốn cộng hoặc
nhân chia 2 chuỗi với nhau. Người dùng phải nhập số từ 0-> 9 sau đó lại nhập
phép tính thể hiện dưới dạng button. Xong lại nhập chuỗi số muốn thực hiện và
cuối cùng ấn button bằng và đưa kết quả ra TextView.

- Button xóa: Khi người dùng nhập sai số người dùng có thể nhấn button trở về
(Backspace) để nhập lại số cho đúng hoặc người dùng có thể nhấn button Xóa
hết (Clear) để nhập lại từ đầu.

- Dấu (.) thể hiện số thực khi người dùng chia lấy số thực. VD: ½ = 0.5 hoặc
0.5+0.5=1.

- Button (=) dùng để thực hiện các phép toán (+, -, *, /) và đưa ra kết quả.

- Button √ dùng để tính căn bậc 2.

- Button % dùng để tính phần trăm.

- Button log dùng để tính logarit cơ số 10 của 1 số.

- Hai button x², Xⁿ dùng để tính bình phương cũng như lũy thừa của 1 số.

- Ba button sin, cos, tan dùng để tính các hàm lượng giác.

- Button Pi dùng để hiện thị số pi.

- TextView dùng để hiện thị số người dùng nhập cũng như kết quả được tính ra.

3.4. Các biến sử dụng


Trang | 20
STT Tên biến Kiểu dữ liệu Ý nghĩa
1 KQ Double Lưu kết quả
2 So1 Double Lưu số thứ nhất
3 So2 Double Lưu số thứ 2
4 clear_flag Boolean Cờ báo hiệu xóa số
5 operator_flag Boolean Cờ báo hiệu toán tử
6 evalue_flag Boolean Cờ báo hiệu phép toán còn
thực hiện
7 sign_flag Character Cờ báo hiệu xuất hiện toán
tử như +, - , *, /
8 numPercent Double Lưu số phần trăm
9 otherSymbols DecimalFormatSymbols Thay đổi ký tự phân cách
thập phân
10 df DecimalFormat Lấy và làm tròn số thập
phân sau dấu phẩy
11 tanError_flag Boolean Cờ báo hiệu khi phép toán
tan bị lỗi.
12 pi Double Lưu số pi
13 unknown_flag Boolean Cờ báo hiệu khi n/0
14 infinity_flag Boolean Cờ báo hiệu khi 1/0

3.5. Xử lý từng chức năng

3.5.1. Chức năng nhập số

Khi thực hiện một phép toán bất kỳ việc đầu tiên ta phải có ít nhất một số hạng
(với các phép toán (√, log, sin, cos, tan…. ) và hai số hạng đối các phép toán
(+, -, *, /) .

Để thực hiện điều đó ta cần 1 hàm Shownum(character num) để gán 1 ký tự


(từ 0-> 9) thành số mỗi khi ta click vào 1 một button bất kỳ từ 0-> 9.
Vd: Khi ta click vào button 1, lúc này Shownum(‘1’) sẽ kiểm tra nếu
TextView (tvKetQua) đang hiển thị là số 0 (tức chưa nhập gì cả) thì lúc này số
0 sẽ được xóa đi và sẽ cộng thêm số 1 vào chuỗi. Sau đó chuỗi sẽ được hiển
Trang | 21
thị trên TextView. Chuỗi được ép kiểu thành Double và lưu vào biến So1
nếu operator_flag = false (chưa có dấu hiệu xuất hiện của toán tử) và ngược lại
thì chuỗi được lưu vào biến So2.

Code mô tả:

3.5.2. Phép toán cộng, trừ nhân chia

Để thực hiện phép toán cộng, trừ, nhân, chia ta cần 2 số hạng. Ở đây ta có 2
biến là So1 và So2 đã được lưu 2 chuỗi số do người dùng nhập vào. Đồng thời
lúc này operator_flag = true. Khi đó ta cần 1 hàm để thực hiện phép toán là
KetQuaTinhToan(). Hàm này sẽ thực hiện các phép toán cộng, trừ , nhân, chia
tùy theo biến sign_flag (kiểu Character) lưu kí tự của từng toán tử ứng với các
button mà người dùng click vào và trả về kết quả kiểu Double. Sau đó Kết quả
sẽ được gọi ra từ hàm ShowKetQua() và được hiển thị trên TextView.

Vd: Ta có biểu thức (2+3). Lúc này So1 = 2, So2 = 3 và sign_flag = ‘+’. Khi ta
nhấn button bằng thì sự kiện Onclick của button bằng sẽ gọi tới hàm
ShowKetQua() để lấy ra kết quả từ KetQuaTinhToan(). KetQuaTinhToan() sẽ
tìm tới sign_flag = ‘+’ và return kq = 2+3 = 5.

Nếu như biểu thức của ta chưa kết thúc: 2+3+6+…. Lúc này sẽ có 2 cách để
thực hiện:

- Cách 1: Nhấn button bằng sau khi thực hiện phép toán 2+3. Lúc này
Kq=5 và So1=Kq=5. Sau đó ta có thể nhấn tiếp button toán tử (+, -, *, /)
để thực hiện tiếp tục phép toán. Như ở trên 2+3 = 5 -> Kq = 5 = So1 và
So2 = 6 -> Kq = 5+6 = 11. Và cứ tiếp tục vậy cho tới khi người dùng
Click vào button Clear.

Trang | 22
- Cách 2: Thay vì nhấn button bằng như cách 1 ta có thể nhấn button toán
tử (+, -, *, /) thì lúc này cờ hiệu evalue_flag đã được bật lên mỗi khi ta
nhập So2. Các button toán tử lần này sẽ gọi hàm ShowKetQua() để thực
hiện phép toán.

Code mô tả hàm KetQuaTinhToan():

3.5.3. Phép toán phần trăm

Giả sử ta có bài toán “a % của b = x?“. Cách giải quyết như sau:
- Ta giả sử b là 100% vì nó là đầu ra của nhiệm vụ => b = 100%.
- Ta giả sử x là giá trị ta đang cần tìm.
- Như ta đã biết x là a% của số vậy ta viết thành x = a%.
- Bây giờ ta có 2 phương trình đơn giản: b = 100% và x = a%. Từ đó ta
được phương trình như sau: b/x = 100/a => x=(a*b)/100.

Ở đây ta khai báo 1 biến numPercent kiểu Double để lưu giá trị số phần trăm.
Giá trị này được lưu lại khi hàm ShowKetQua() được gọi. Theo công thức trên
thì ta được KQ=(KQ*numPercent)/100. Sau đó ta gán So1=KQ.

3.5.4. Phép toán logarit cơ số 10

Ta áp dụng hàm Math.Log10(Double d) của thư viện Math của java.


Trang | 23
3.5.5. Phép toán căn bậc 2

Ta áp dụng hàm Math.sqrt(Double d) của thư viện Math của java.

3.5.6. Phép toán bình phương

Ta áp dụng hàm Math.pow(Double a,2) của thư viện Math của java.

3.5.7. Phép toán lũy thừa

Ta áp dụng hàm Math.pow(Double a, Double b) của thư viện Math của java.
Lần này thì So1 đóng vai trò là cơ số và So2 đóng vai trò là số mũ. Button lũy
thừa sẽ có nhiệm vụ giống như 1 toán tử (+, -, *, /) cách thức chạy lần nãy sẽ
tương tự như chức năng cộng, trừ nhân chia.

3.5.8. Phép toán sin, cos , tan

Đối với sin ta áp dụng hàm sau Math.sin(Math.toRadians(Double d)) của thư
viện Math của java.

Đối với cos ta áp dụng hàm sau Math.cos(Math.toRadians(Double d)) của thư
viện Math của java.

Đối với tan ta áp dụng hàm sau Math.cos(Math.toRadians(Double d)) của thư
viện Math của java.

3.5.9. Chức năng dấu chấm ngăn cách thập phân

Giả sử chuỗi ta muốn nhập “12.5”. Ban đầu ta nhập “12” lúc đó ta sẽ kiểm tra
trong chuỗi có dấu “.” chưa. Nếu chưa có thì ta thêm “.” sau chuỗi “12” và
tiếp tục nhập chuỗi số sau dấu thập phân. Cuối cùng chuỗi trên màn hình sẽ
được ép kiểu thành Double và lưu vào biến So1 hoặc So2.

Code mô tả:

Trang | 24
3.5.10. Chức năng pi

Ta khai báo biến pi kiểu Double và lưu số pi ở đó. Số pi sẽ được lưu vào So1
hoặc So2 tùy trường hợp khi người dung nhấn button pi.

3.5.11. Chức năng clear

Xóa những gì hiển thị trên TextView và đưa các biến trở về ban đầu của nó.

Code mô tả:

3.5.12. Chức năng backspace

Ta dùng hàm substring(int start,int end) để cắt chuỗi từ vị trí 0 đến vị trí bằng
với độ dài của chuỗi -1.

Code mô tả:

Trang | 25
3.5.13. Chức năng bằng

Gọi hàm ShowKetQua() để hiển thị kết quả lên TextView.

3.6. Thuật toán quan trọng

Xử lý dấu chấm động.

Vì số dấu chấm động nhị phân không thể biểu diễn chính xác các số thập phân
nên việc sử dụng chúng sẽ không thể đảm bảo cho kết quả như khi sử dụng các
phép toán thập phân. Điều này gây rất nhiều khó khăn cho việc phát triển và thử
nghiệm các ứng dụng có sử dụng dữ liệu thực như thương mại hay tài chính.
Dưới đây là một vài ví dụ điển hình.

Thập phân Nhị phân


0.1 0.1
0.01 0.01
0.001 9.999999E-4
0.0001 9.999999E-5
0.00001 9.999999E-6
0.000001 9.999999E-7
1E-7 9.999999E-8
1E-8 9.999999E-9
1E-9 9.999999E-10

Cột bên trái hiển thị các kết quả mong đợi hay kết quả nhận được khi dùng
BigDecimal class của Java, cột bên phải hiển thị các kết quả nhận được bằng
việc sử dụng kiểu dữ liệu float của Java. Các kết quả nhận được từ việc sử dụng
kiểu dữ liệu double cũng tương tự như vậy (sẽ có nhiều số 0 hay số 9 hơn).

Trong một chừng mực nào đó, những vấn đề như vậy có thể được giấu đi bằng
cách làm tròn nhưng sẽ gây nhầm lẫn cho người dùng. Những lỗi này sẽ không
bị phát hiện và tích lũy dần sau nhiều phép toán cho tới khi sai số quá lớn. Ví dụ
dưới đây sử dụng biến kiểu double trong Java cho thấy 0.1 × 8 sẽ cho kết quả
khác với việc cộng tám lần 0.1.

Chương trình Kết quả


public class Test{ False
public static void main(String args[]){ 0.7999999999999999
double i, j, k; 0.8
i=0.1;
j=i+i+i+i+i+i+i+i;
k=i*8;
System.out.println(j==k?"True":"False");
System.out.println(j);
System.out.println(k);
}
}
Trang | 26
Vì vậy, để khắc phục tình trạng trên ta dùng DecimalFormat để làm tròn số thập
phân.

Ta giới hạn chữ số sau dấu chấm là 11 ký tự. Tức là ta format kết quả của 1
phép toán số thực cho tới khi phần thập phân < 11 ký tự. Nếu vượt quá thì sẽ
không format nữa. Phương pháp này chưa hẳn là tối ưu nhưng đủ để đáp ứng
nhu cầu của người dùng.

Để làm được điều đó ta cần hàm CatChuoi() để chuyển số thực về chuỗi sau đó
ta cắt chuỗi bắt đầu từ ký tự đầu tiên sau dấu “.” đến hết chuỗi.

Code mô tả hàm CatChuoi():

Code mô tả hàm ShowKetQua() kết hợp với hàm CatChuoi() để xử lý dấu


chấm động.

Trang | 27
3.7. Thiết kế giao diện

Standard

Trang | 28
Scientific

Các button của chương trình được chỉnh sửa bằng công cụ draw9patch của
Android SDK để đảm bảo hình ảnh của các button không mờ khi ta thay đổi kích
thước của button.

CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM

Chương trình thực thi kết quả gần giống với ứng dụng Calculator của Windows.
Các chức năng ở chế độ Scientific hoạt động khá ổn.

Một số test case chạy thử nghiệm:

STT Phép thử Cách nhấn Kết quả trả về


1 1+2 button”1” -> button”+”-> button”2” -> 3
button”=”
2 3*2-0.3 button”3” -> button”x” -> button”2” -> 5.7
button”-” -> button”0” -> button”.” ->
button”3” -> button”=”
3 √9 button”9” -> button” √” 3
4 Log(8) button”8” -> button”log” 0.90308998699
5 2+3% button”2” -> button”+” -> button”3” -> 2.06
button”%” -> button”=”
6 9² button”9” -> button”x²” 81
7 35 button”3” -> button”xⁿ” -> button”5” 243
-> button”=”
8 Sin(30) button”30” -> button”sin” 0.5
9 Sin(90)- button”90” -> button”sin” -> button”-” 0.5
cos(60) -> button”60” -> button”cos” ->
button”=”
10 Tan(90) button”90” -> button”tan” Invalid input
Trang | 29
Một số hình ảnh cho các test case:

 Phép toán 5+6

- Đầu tiên ta nhấn button”5”.

- Sau đó ta nhấn button”+” rồi nhấn tiếp button”6”.

Trang | 30
- Nhấn button”=” để hiển thị kết quả.

 Phép toán √9

- Đầu tiên ta nhấn button”9”.

- Kế tiếp ta nhấn button” √” để hiển thị kết quả.

Trang | 31
 Phép toán Log(8)

- Đầu tiên ta nhấn button”8”.

- Kế tiếp ta nhấn button”log” để hiển thị kết quả.

 Phép toán 2+3%

- Đầu tiên ta nhấn button”2”.

Trang | 32
- Kế tiếp ta nhấn button”+” và button”3”.

- Ta nhấn tiếp button”%”.

- Cuối cùng ta nhấn button”=” để hiển thị kết quả.

Trang | 33
 Phép toán 6²

- Đầu tiên ta nhấn button”6”.

- Sau đó ta nhấn button x2 để hiển thị kết quả.

 Phép toán Sin(30)

- Đầu tiên ta nhấn button”3” sau đó nhấn tiếp button”0”.

Trang | 34
- Sau đó ta nhấn button”sin” để hiển thị kết quả.

CHƯƠNG 4: KẾT LUẬN VÀ KIẾN NGHỊ

1. Kết quả đạt được

Em đã thực hiện 3 yêu cầu chính là:

 Đảm bảo tính đúng đắn khi thực hiện phép tính.

 Tính toán bốn phép tính cơ bản có dấu chấm động đó là cộng, trừ, nhân, chia.

 Một số hàm yêu cầu đã thực hiện đó là:


- Hàm sin
- Hàm cos
- Hàm tan
- Hàm phần trăm
- Hàm log
- Hàm căn bậc 2
- Hàm bình phương
- Hàm lũy thừa xy

2. Đánh giá ưu, khuyết điểm

Ưu điểm:
 Chương trình có giao diện thân thiện, đáp ứng các nhu cầu cơ bản cho
người dùng.

 Đảm bảo tính đúng đắn của chương trình, hạn chế tối đa các lỗi có thể xảy
ra.

Trang | 35
Khuyết điểm:
 Chương trình còn vài thuật toán chưa tối ưu và một số lỗi nhỏ mà em chưa
kiểm soát được hết.

 Chưa có chức năng xem lịch sử.

 Chưa xử lý được số nguyên, số thực lớn.

3. Hướng phát triển tương lai

Chương trình hiện tại chỉ dừng lại ở các chức năng cơ bản đủ nhu cầu cho một
người dùng bình thường. Tuy nhiên trong tương lai em sẽ cố gắng phát triển thêm
các tính năng mới để phục vụ cho người dùng có nhu cầu cao hơn như: Các phép
tính dựa trên nền sáu mươi (sexagesminal) của độ, phút, giây; Các phép tính cơ
bản cho Base-N (hex, dec, oct, bin); Tính hàm lượng giác ở chế độ radian; Các
phép tính với các hàm: sin-1, cos-1, tan-1, sinh, cosh, tanh, sinh-1, cos-1, tanh-1.

4. Tài liệu tham khảo

[1] https://goo.gl/WVpMUY

[2] http://goo.gl/k19hUo

[3] http://goo.gl/hXWDfD

[4] Fpt. Ebook Lập trình Android cơ bản.

[5] http://goo.gl/Zws7su

Trang | 36

You might also like