2.1.7.2. Biểu đồ tuần tự thêm giao dịch
SVTH: Trần Tiến Anh Trang 51 GVHD: ThS. Hồ Ngọc Tú
2.1.7.3. Biểu đồ tuần tự quản lý sổ chi tiêu
Hình 2.14. Biểu đồ tuần tự quản lý chi tiêu 2.1.7.4. Biểu đồ tuần tự quản lý sổ tiết kiệm 2.1.7.4. Biểu đồ tuần tự quản lý sổ tiết kiệm
SVTH: Trần Tiến Anh Trang 52 GVHD: ThS. Hồ Ngọc Tú
2.1.7.5. Biểu đồ tuần tự đồng bộ dữ liệu
Hình 2.16. Biểu đồ tuần tự đồng bộ dữ liệu 2.1.7.6. Biểu đồ tuần tự khôi phục dữ liệu 2.1.7.6. Biểu đồ tuần tự khôi phục dữ liệu
SVTH: Trần Tiến Anh Trang 53 GVHD: ThS. Hồ Ngọc Tú
2.1.8. Sơ đồ thuật toán
2.1.8.1. Sơ đồ thuật toán đăng nhập
Hình 2.18. Sơ đồ thuật toán đăng nhập 2.1.8.2. Sơ đồ thuật toán đăng ký 2.1.8.2. Sơ đồ thuật toán đăng ký
SVTH: Trần Tiến Anh Trang 54 GVHD: ThS. Hồ Ngọc Tú 2.1.8.3. Sơ đồ thuật toán thêm giao dịch
Hình 2.20. Sơ đồ thuật toán thêm giao dịch 2.1.8.4. Sơ đồ thuật toán đồng bộ dữ liệu 2.1.8.4. Sơ đồ thuật toán đồng bộ dữ liệu
Hình 2.21. Sơ đồ thuật toán đồng bộ dữ liệu 2.1.8.5. Sơ đồ thuật toán khôi phục dữ liệu 2.1.8.5. Sơ đồ thuật toán khôi phục dữ liệu
SVTH: Trần Tiến Anh Trang 55 GVHD: ThS. Hồ Ngọc Tú
SVTH: Trần Tiến Anh Trang 56 GVHD: ThS. Hồ Ngọc Tú
2.2. Phân tích và thiết kế cơ sở dữ liệu
2.2.1. Cấu trúc bảng
2.2.1.1. Bảng ThuChi (Bảng Thu chi)
STT Tên Trường Kiểu dữ liệu Ràng buộc Giải thích
1 id int PRIMARY KEY id
2 ma_id varchar (50) Ma id
3 tengiaodich varchar (100) Tên giao dich
4 sotien double Số tiền
5 ngaygiaodich date Ngày giao dịch
6 ghichu Varchar(100) Ghi chú
7 theloai int Thể loại
8 taikhoan Varchar(50) Tài khoản
Bảng 2.19. Bảng cơ sở dữ liệu thu chi 2.2.1.2. Bảng Vayno (Bảng Vay nợ) 2.2.1.2. Bảng Vayno (Bảng Vay nợ)
STT Tên Trường Kiểu dữ liệu Ràng buộc Giải thích
1 id int PRIMARY KEY id
2 ma_id varchar (50) Ma id
3 tengiaodich varchar (100) Tên giao dich
4 sotien double Số tiền
5 ngaygiaodich date Ngày giao dịch
6 ngaytra date Ngày trả
7 ghichu Varchar(100) Ghi chú
8 taikhoan Varchar(50) Tài khoản
SVTH: Trần Tiến Anh Trang 57 GVHD: ThS. Hồ Ngọc Tú
2.2.1.3. Bảng Login (Bảng tài khoản)
STT Tên trường Kiểu dữ liêu Ràng buộc Giải thích
1 taikhoan Varchar(50) PRIMARY KEY Tài khoản
2 matkhau Varchar(50) Mật khẩu
Bảng 2.21. Bảng cơ sở dữ liệu login 2.2.1.4. Bảng Dutinh (Bảng dự tính) 2.2.1.4. Bảng Dutinh (Bảng dự tính)
STT Tên Trường Kiểu dữ liệu Ràng buộc Giải thích
1 id int PRIMARY KEY id
2 Ma_id varchar (50) Ma id
3 tengiaodich varchar (100) Tên giao dich
4 sotien double Số tiền
5 ngaygiaodich date Ngày giao dịch
6 theloai int Thể loại
8 taikhoan Varchar(50) Tài khoản
Bảng 2.22. Bảng cơ sở dữ liệu dự tính 2.2.1.5. Bảng TietKiem (Bảng tiết kiệm) 2.2.1.5. Bảng TietKiem (Bảng tiết kiệm)
STT Tên Trường Kiểu dữ liệu Ràng buộc Giải thích
1 id int PRIMARY KEY id
2 Ma_id varchar (50) Ma id
3 muctieu double Mục tiêu
4 sotien double Số tiền
5 ngaygiaodich date Ngày giao dịch
6 taikhoan Varchar(50) Tài khoản
SVTH: Trần Tiến Anh Trang 58 GVHD: ThS. Hồ Ngọc Tú
2.2.2. Sơ đồ thực thể quan hệ
SVTH: Trần Tiến Anh Trang 59 GVHD: ThS. Hồ Ngọc Tú
2.3. Phân tích vàThiết kế Web Service
2.3.1. Mô hình hoạt động Web Service
Model là lớp thể hiện các câu lệnh truy vấn đến cơ sở dữ liệu từ MYSQL (Server), còn lớp Controller điều hướng các phương thức (API) của lớp model để trả dữ liệu về theo kiểu định dạng nào đó. Sau đây là mô hình hoạt động của Model và Controller.
Hình 2.24. Mô hình hoạt động của web service
Khi Controller nhận dữ liệu đầu vào từ client sau đó điều hướng dữ liệu sang Model để model có thê truy vấn cơ sở dữ liệu cũng như kiêm tra sự tồn tại của dữ liệu, sau đó khi thực hiện quá trinh truy vấn đến CSDL thì Model trả dữ liệu về cho Controller.
Quá trình truyền dữ liệu sang cho Controller sau đó lớp Controller này dùng REST để trả dữ liệu về theo dạng JSON hoặc XML.
2.3.2. Các API
STT Tên Mô tả
1 dangNhap()
Kiểm tra sự tồn tại của tài khoản mà mật khẩu khi client gửi dữ liệu lên, khi kiểm tra xong hàm này sẽ trả về kết quả dưới dạng JSON.
SVTH: Trần Tiến Anh Trang 60 GVHD: ThS. Hồ Ngọc Tú matkhau, email) đã tồn tại chưa, nếu chưa tồn tại thì thêm vào CSDL, ngược lại trả về tình trạng theo dạng chuỗi json.
3 dongBo()
Nhận dữ liệu từ client và kiểm tra sự hợp lệ của dữ liệu, nếu hơp lệ lưu dữ liệu vào Server. Ngược lại thì không thực hiện lưu vào mà có thể update ….
4 duLieuOnline()
Trả dữ liệu về theo dạng JSON hoặc XML, khi nhận điều kiện đầu vào từ client và thực hiện điều hướng sang Model.
5 khoiPhucDuLieu() Nhận các điều kiện đầu vào từ Client sau đó điều hương dữ liệu sang Model và thực hiện nhận dữ liệu từ model gửi qua, sau đó thực hiện chuyển dữ liệu dưới dang json.
SVTH: Trần Tiến Anh Trang 61 GVHD: ThS. Hồ Ngọc Tú
CHƯƠNG 3. KẾT QUẢ VÀ ĐÁNH GIÁ
3.1. Kết quả
3.1.1. Màn hình đăng nhập
Hình 3.1. Hình ảnh màn hình đăng nhập
3.1.2. Màn hình chính
SVTH: Trần Tiến Anh Trang 62 GVHD: ThS. Hồ Ngọc Tú
3.1.3. Màn hình chức năng
SVTH: Trần Tiến Anh Trang 63 GVHD: ThS. Hồ Ngọc Tú
3.1.4. Màn hình thêm giao dich
Hình 3.4. Hình ảnh màn hình thêm giao dịch
3.1.5. Màn hình cập nhật giao dich
SVTH: Trần Tiến Anh Trang 64 GVHD: ThS. Hồ Ngọc Tú
3.1.6. Màn hình sổ chi tiêu
Hình 3.6. Hình ảnh màn hình sổ chi tiêu
3.1.7. Màn hình sổ nợ
SVTH: Trần Tiến Anh Trang 65 GVHD: ThS. Hồ Ngọc Tú
3.1.8. Màn hình chọn biểu đồ
Hình 3.8. Hình ảnh màn hình chọn biểu đồ
3.1.9. Màn hình Dự tính chi tiêu
SVTH: Trần Tiến Anh Trang 66 GVHD: ThS. Hồ Ngọc Tú
3.1.10. Màn hình sổ tiết kiệm
Hình 3.10.Hình ảnh màn hình sổ tiết kiệm
3.1.11. Màn hình đăng ký
SVTH: Trần Tiến Anh Trang 67 GVHD: ThS. Hồ Ngọc Tú
3.1.12. Màn hình đồng bộ dữ liệu
Hình 3.12. Hình ảnh đồng bộ dữ liệu
3.1.13. Màn hình cài đặt
SVTH: Trần Tiến Anh Trang 68 GVHD: ThS. Hồ Ngọc Tú
3.2. Hướng dẫn cài đặt ứng dụng trên điện thoại
Để cài đặt ứng dụng trên điện thoại chúng ta thực hiện theo các bước sau. Bước 1: Tải ứng dụng theo địa chỉ link sau:
https://play.google.com/store/apps/details?id=com.moneymana&hl=en
Bước 2: Chọn thư mục mà ứng dụng tải xuống sau đó các bạn chọn ứng dụng
Money Manager để cài đặt theo trình tự như sau. - Chọn ứng dụng có tên “Quanlychitieu.apk”
- Chọn bộ cài đặt và click vào chỉ một lần như hình vẽ
SVTH: Trần Tiến Anh Trang 69 GVHD: ThS. Hồ Ngọc Tú - Chọn vào cài đặt như hình bên dưới
Hình 3.15. Hình ảnh chọn mục cài đặt
- Ứng dụng đã cài đặt hoàn tất và các bạn mở ứng dụng lên như hình bên dưới.
SVTH: Trần Tiến Anh Trang 70 GVHD: ThS. Hồ Ngọc Tú
3.3. Kiểm thử ứng dụng
Test Cài đặt và định hình ứng dụng
+ Ứng dụng được kiểm thử và hoạt động chỉ trên các thiết bị có hệ điều hành Android, có phiên bản 4.1 trở lên và hỗ trợ màn hình 480x480 trở lên nhưng màn hình 720x1280 thể hiện giao diện và các icon đẹp hơn, bắt mắt hơn cho người dùng.
+ Bộ nhớ và dữ liệu của ứng dụng được lưu vào thẻ nhớ hoặc bộ nhớ trong của máy điện thoại.
+ Cài đặt và gở bỏ ứng dụng khỏi hệ thống khi bị gián đoán sẽ cài đặt lại ứng dụng và không ảnh hưởng gì đến hệ thống và xung đột khác.
Test giao diện ứng dụng
+ Màu nền, màu chữ, kiểu chữ khớp với quá trình Desgin, màu nền không làm ảnh hướng đến thị giác người dùng, màu chữ không làm hưởng đến hiện thị đến người dùng đọc, màu nền và màu chữ không trùng lặp trong một màn hình, không gây khó khăn đến mắt người nhìn.
+ Font size của các EditText, Textview và Button đều canh trai, giữa, phải ở chế độ bình thường.
+ Bàn phím nhập liệu hoạt động tốt và không gây lỗi khi tiến hành input dữ liệu vào.
+ Có chế độ Scroll khi dữ liệu quá lớn.
+ Giao diện không bị vỡ khi kích thước màn hình thay đổi. + Hỗ trợ chế độ xoay màn hình.
Test chức năng của ứng dụng
+ Các chức năng như thêm giao dich, quản lý sổ nợ, sổ tiết kiêm, xem biểu đồ, xuất file, đồng bộ dữ liệu, khôi phục dữ liệu đều hoạt động bình thường.
SVTH: Trần Tiến Anh Trang 71 GVHD: ThS. Hồ Ngọc Tú + Khi thực hiện các chức năng gửi dữ liệu lên server như (Đăng ký, đồng bộ dữ liệu, khôi phục dữ liệu, cũng như chế độ xem dữ liệu online) nếu bị gián đoạn về Internet thì chường trình sẽ bị hủy trong một thời gian nào đó.
+ Notification hoạt động ở chế độ nhắc nhỏ đều hoạt động tốt ở chế độ cài đặt. + Các trường hợp bị gián đoán khi bị các chế độ ưu tiên hoạt động như (cuộc gọi, tin nhắn, pin yếu hoặc đang ở chế độ mở nhạc) thì ứng dụng sẽ dùng lại tất cả các chương trình của ứng dụng và dành ưu tiên cho các chế độ ưu tiên đó. + Khi dữ liệu nhập đầu vào rỗng thì chương trình sẽ báo lỗi và không gây ảnh hưởng đến quá trình của chương trình.
+ Nội dung và hình ảnh hiện thị tốt và rỏ ràng như danh sách các khoản chi tiêu.
+ Chỉ thực hiện từng chức năng, khi người dùng chọn nhiều chế độ sẽ làm chương trình bị gián đoán và chết.
+ Chức năng khôi phục dữ liêu có thể bị dừng lại khi bị gián đoạn về mạng internet hoặc xung đột chương trình khác.
3.4. Đánh giá
Qua kết quả xây dựng ứng dụng “quản lý chi tiêu” trên nền tảng Android đề tài đã thực hiện được những chức năng cơ bản đã đề ra ở phần phân tích và thiết kế. Ứng dụng đã đáp ứng được các yêu cầu của người sử dụng.
SVTH: Trần Tiến Anh Trang 72 GVHD: ThS. Hồ Ngọc Tú
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Kết quả đạt được
- Tôi đã xây dụng thành công ứng dụng quản lý chi tiêu trên nền tảng Android.
- Tìm hiểu được những công nghệ mới trong lập trình.
- Nắm bắt về hướng đối tượng và quy trình tạo ra một ứng dụng. - Hiểu biết về cơ chế hoạt động của hệ điều hành Android.
- Hiểu biết ngôn ngữ lập trình PHP và cơ chế hoạt động của công nghệ mới Framework CodeIgniter.
- Sản phẩm dùng được và vận dụng trong thực tế. - Nắm bắt được cơ chế hoạt động của Web Service. Hướng phát triển
- Cải tiến về giao diện.
- Xây dụng ứng dụng chạy đa nên tảng: IOS, Windownphone.
- Cải thiện được giảm thời gian khi khôi phục dữ liệu cũng như đồng bộ dữ liệu.
- Hỗ trợ đa ngôn ngữ.
SVTH: Trần Tiến Anh Trang 73 GVHD: ThS. Hồ Ngọc Tú
TÀI LIỆU THAM KHẢO.
Giáo trình
1. Châu Duy Thiện, Vũ Thùy Linh, Lê Quốc Tiến. Tiểu luận Tìm hiểu và viết ứng dụng trên nền hệ điều hành mobile Android. 2010.
2. Sayed Y. Hashimi, Satya Komatineni, Dave MacLean. Pro android 2. Apress. Springer-Verlag New York. 2010.
3. Reto Meier. Professional Android™ Application Development. Wiley Publishing, Inc. 2009.
4. Kari Pulli, Tomi Aarnio, Ville Miettinen, Kimmo Roimela, Jani Vaarala. Mobile 3D Graphics with OpenGL ES and M3G. Morgan Kaufmann Publishers. Elsevier Inc. 2008.
5. Aaftab Munshi, Jon Leech. OpenGL ES Common Profile Specification.
The Khronos Group Inc. 2009.
6. Frank Ableson. Nhập môn phát triền ứng dụng Android. 2011.
7. Android OpenGL ES Issues. OmniG Software Inc. 2008
Link Website
1. http://www.android.com/
2. http://developer.android.com/index.html 3. http://code.google.com/intl/vi-VN/android/ 4. http://www.androidhive.info/
SVTH: Trần Tiến Anh Trang 74 GVHD: ThS. Hồ Ngọc Tú
PHỤ LỤC
Code đồng bộ dữ liệu trong Android
class Dong_bo_data_ThuChi extends AsyncTask<Void, Void,
Void> {
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
String user = sharepren.load_user("user_name");
selectedId =
radiogroup.getCheckedRadioButtonId(); tungay = lay_ngay
.setInsertDataBase(txt_tungay.getText().toString());
denngay =
lay_ngay.setInsertDataBase(txt_denngay.getText()
.toString());
if (selectedId == radio_all.getId()) { list_thuchi = db
.arraylist_all_chi_thu_no_dutinh_tietkiem_login(user,tunga
y,denngay);
} else if (selectedId == radio_thuchi.getId()) { list_thuchi = db.arrayListThuChi(user,
tungay, denngay);
} else if (selectedId == radio_vayno.getId()) { list_thuchi = db.listVayNo(user, tungay,
denngay);
} else if (selectedId == radio_dutinh.getId()) { list_thuchi = db.array_list_dutinh(user,
tungay, denngay);
} else{
list_thuchi = db.listTietKiem(user, tungay,
denngay);
}
if (list_thuchi != null) {
ThuChi tc = new ThuChi();
for (int i = 0; i < list_thuchi.size();
i++) {
tc = list_thuchi.get(i);
SVTH: Trần Tiến Anh Trang 75 GVHD: ThS. Hồ Ngọc Tú ma_id = tc.getMa_id(); ten_giao_dich = tc.getTen_giao_dich(); so_tien = tc.getSo_tien(); ngay_thuchi = tc.getNgay_thu_chi(); ghi_chu = tc.getGhichu();
List<NameValuePair> param = new
ArrayList<NameValuePair>();
param.add(new
BasicNameValuePair("id_thu_vay", String
.valueOf(id)));
param.add(new
BasicNameValuePair("ma_id", ma_id));
param.add(new
BasicNameValuePair("ten_giao_dich",
ten_giao_dich));
param.add(new
BasicNameValuePair("so_tien", String
.valueOf(so_tien)));
param.add(new
BasicNameValuePair("ngay_thu_chi",
ngay_thuchi));
if (ma_id.equals("vay") ||
ma_id.equals("no")|| ma_id.equals("pvay") ||
ma_id.equals("pno")){
ngay_tra = tc.getNgay_vay_no();
param.add(new
BasicNameValuePair("ngay_tra", ngay_tra));
param.add(new
BasicNameValuePair("ghi_chu", ghi_chu));
}
if (ma_id.equals("thu") ||
ma_id.equals("chi")|| ma_id.equals("dutinh")) {
the_loai = tc.getTheloai();
param.add(new
BasicNameValuePair("the_loai", String.valueOf(the_loai)));
param.add(new
BasicNameValuePair("ghi_chu", ghi_chu));
}if (ma_id.equals("tietkiem")) {muc_tieu = tc.getMuctieu();
param.add(new BasicNameValuePair("muctieu",
String.valueOf(muc_tieu)));
}
param.add(new BasicNameValuePair("tai_khoan", user));
jsonOb = jsonParser.makeHttpRequest(url, "POST", param);
progressbar.setProgress(((i + 1) * 100) /
SVTH: Trần Tiến Anh Trang 76 GVHD: ThS. Hồ Ngọc Tú } } return null; } @Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result); if (result == null) { progressbar.setProgress(0); progressbar.dismiss(); } } @Override
protected void onPreExecute() {
// TODO Auto-generated method stub
progressbar.show();
super.onPreExecute();