Tải bản đầy đủ (.pdf) (68 trang)

DỰ ÁN 1 NGHÀNH LẬP TRÌNH MÁY TÍNH(LẬP TRÌNH MOBILE)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.74 MB, 68 trang )

The College of FPT Polytechnic in Danang

DỰ ÁN 1
NGHÀNH LẬP TRÌNH MÁY TÍNH(LẬP TRÌNH MOBILE)
ĐỀ TÀI: QUẢN LÝ THU CHI.

GIẢNG VIÊN HƯỚNG DẪN: NGUYỄN VĂN NAM
SINH VIÊN THỰC HIỆN

1. Phạm Phú Nhật (PD02142), Trưởng nhóm
2. Ngô Hoàng Linh(PD02236)
3. Nguyễn Xuân Vin(PD02108)

Đà Nẵng, Ngày 01 Tháng 12 Năm 2018


TÀI LIỆU DỰ ÁN

1

2

MỤC LỤC
Phân tích................................................................................................................................................ 2
1.1

Hiện trạng...................................................................................................................................... 2

1.2

Yêu cầu hệ thống ........................................................................... Error! Bookmark not defined.



1.3

Use case ......................................................................................... Error! Bookmark not defined.

Thiết kế ............................................................................................... Error! Bookmark not defined.
Mô hình triển khai .......................................................................... Error! Bookmark not defined.

2.1
2.1.1

Sơ đồ quan hệ thực thể ........................................................ Error! Bookmark not defined.

2.1.2

Thiết kế chi tiết các thực thể ............................................... Error! Bookmark not defined.
Thiết kế giao diện........................................................................... Error! Bookmark not defined.

2.2

3

2.2.1

Sơ đồ tổ chức giao diện ....................................................... Error! Bookmark not defined.

2.2.2

Thiết kế giao diện cho các chức năng nghiệp vụ ................ Error! Bookmark not defined.


Thực hiện viết mã ............................................................................... Error! Bookmark not defined.
3.1

Tạo SQLite truy vấn, thao tác & truy suất dữ liệu ......................... Error! Bookmark not defined.

3.2

Model clas- các lớp mô tả dữ liệu .................................................. Error! Bookmark not defined.

3.2.1

Class users ........................................................................... Error! Bookmark not defined.

3.3.2

Class Incomes ..................................................................... Error! Bookmark not defined.

3.3.3

Clas Expenses ..................................................................... Error! Bookmark not defined.

3.3

Viết mã cho các chức năng ............................................................ Error! Bookmark not defined.

1

Welcome ............................................................................. Error! Bookmark not defined.

2


Login ................................................................................... Error! Bookmark not defined.
2.1 Login sign in ................................................................ Error! Bookmark not defined.
2.2 Login sign up ............................................................... Error! Bookmark not defined.
2.3 Login activity ............................................................... Error! Bookmark not defined.

3

Main activity ........................................................................... Error! Bookmark not defined.

3.1

Menu drawer ....................................................................... Error! Bookmark not defined.

3.2

Menu bottom ....................................................................... Error! Bookmark not defined.

3.3

Main activity ....................................................................... Error! Bookmark not defined.

4
4.1

Spend..................................................................................... Error! Bookmark not defined.
InComes .............................................................................. Error! Bookmark not defined.
4.1Adapter incomes ............................................................... Error! Bookmark not defined.
4.1 Details incomes ................................................................ Error! Bookmark not defined.
4.3 Fragment incomes .......................................................... Error! Bookmark not defined.


DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 1


TÀI LIỆU DỰ ÁN
4.2

Expenses ............................................................................. Error! Bookmark not defined.
4.1Adapter Expenses .............................................................. Error! Bookmark not defined.
4.1 Details Expenses .............................................................. Error! Bookmark not defined.
4.1 Fragment Expenses .......................................................... Error! Bookmark not defined.

5

About us .............................................................................................. Error! Bookmark not defined.

6

Spend................................................................................................... Error! Bookmark not defined.

7

Statiscal ............................................................................................... Error! Bookmark not defined.

1 PHÂN TÍCH
1.1 HIỆN TRẠNG
Việc quản lý tài chính hiện tại của mọi người đang gặp rất nhiều khó khắn, về
vấn đề khoảng thu cũng như vấn đề khoảng chi, họ đang làm tất cả mọi công việc

thu chi trên sổ sách bằng tay nên việc này gây rất nhiều khó khăn cho người quản lý
thu chi trong quán cũng như việc quản lý thu chi trong gia đình nó rất dể gây sai sót,
tốn thời gian và khó tìm kiếm. Vì vậy chúng tôi phát triển nên ứng dụng quản lý thu
chi để giải quyết vấn đề quản lý thu chi trong mọi người.

1.2 Yêu cầu hệ thống:
Chúng tôi muốn xây dựng nên một phần mềm chạy trên thiết bị di động cá nhân để
dể dàng hổ trợ cho người dùng.
 Chức năng nghiệp vụ:
o Quản lý khoảng thu.
o Quản lý khoảng chi.
o Thống kê theo ngày, tuần, tháng…
o Muốn dùng ứng dụng người dùng phải đăng ký và đăng nhập….
 Yêu cầu hệ thống công nghệ:
o Ứng dụng cài đặt trên điện thoại chạy hệ điều hành android.
o Hệ quản trị CSDL là SQLite

DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 2


TÀI LIỆU DỰ ÁN

1.3 USE CASE

Đăng nhập và
đăng xuất

Khoảng thu


Người dùng

Khoảng chi

Thống kê

Máy tính

HỆ THỐNG QUẢN LÝ THU CHI

 Chi tiết chức năng
o Chức năng quản lý người dùng:
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 3


TÀI LIỆU DỰ ÁN

 Xem: xem tất cả và chi tiết thông tin của người dùng.
 Thêm: thêm mới vào cơ sở dữ liệu
 Xóa: xóa theo mã.
 Sửa: cập nhập dữ liệu đang xem.
o Chức năng thống kê:
 Thống kê theo ngày, tuần, tháng và năm.
o Chức năng nhập và đăng xuất
 Đăng ký: để có thể đăng nhập được bạn phải đăng ký trước.
 Đăng nhập: để sử dụng phần mềm, bắt buộc phải đăng nhập
 Đăng xuất: thoát khỏi và trở về màn hình đăng nhập

 Chi tiết bảo mật
o Tất cả phải đăng nhập mới được sử dụng các chức năng trong phần mềm. Và chỉ
có admin mới được xem và thay đổi thong tin của tất cả người dùng khi họ không
thể thực hiện được.
 Thông tin các thực thể
o Người dùng
 Mã người dùng
 Password
 Họ và tên
 Ngày tháng năm sinh
 Email
 Số điện thoại
o Khoảng thu:
 Tên khoảng thu
 Số tiền
 Ngày thu
 Loại thu
 Chú thích
o Khoảng chi:
 Tên khoảng chi
 Số tiền dự kiến
 Ngày dự kiến
 Số tiền
 Ngày chi
 Loại chi
 Chú thích

DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 4



TÀI LIỆU DỰ ÁN

o Sổ nợ:
 Tên nợ
 Số tiền nợ
 Ngày nợ
 Loại nợ
 Chú thích

2 THIẾT KẾ
2.1 MÔ HÌNH TRIỂN KHAI
Ứng dụng phần mềm được xây dựng để phục vụ cho một cá nhân vì vậy cơ sở dữ liệu
được lưu trữ tập trung trong thiết bị của khách hàng.
 Sử dụng cơ sở dữ liệu SQLite để lưu trữ.

2.1.1 Sơ đồ quan hệ thực thể
o
o
o
o

Người dùng: người sử dụng phần mềm
Khoảng thu: lưu các khoảng tiền thu vào của người dùng
Khoảng chi: số tiền cần chi ra của người dùng
Thống kê: lưu các thông tin về thống kê khoảng thu, khoảng chi ngày, tháng và
năm

2.1.2 Thiết kế chi tiết các thực thể

Bảng người dùng
Tên cột
maND
matkhau
tenND
ngaysinh
email
sodienthoai

Kiểu
CHAR(10)
CHAR(10)
NVARCHAR(50)
DATE
NVARCHAR(50)
INT

DỰ ÁN 1 – LẬP TRÌNH MOBILE

Ràng buộc
PK, NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL

Ghi chú
Mã người dùng
Mật khẩu người dùng

Tên người dùng
Ngày sinh người dùng
Email nguoi dùng
Số điện thoại người
dùng

TRANG 5


TÀI LIỆU DỰ ÁN

Bảng khoảng thu
Tên cột
tenKT
sotien
ngaythu
loaithu
chuthich

Kiểu
NVARCHAR(50)
DOUBLE
DATE
NVARCHAR(50)
NVARCHAR(50)

Ràng buộc
NOT NULL
NOT NULL
NOT NULL

NOT NULL
NOT NULL

Ghi chú
Tên khoảng thu
Số tiền
Ngày thu
Loại thu
Chú thích

Bảng khoảng chi
Tên cột
tenKC
sotiendukien
ngaydukienchi
sotienchi
ngaychi
loaithu
chuthich

Kiểu
NVARCHAR(50)
DOUBLE
DATE
DOUBLE
DATE
NVARCHAR(50)
NVARCHAR(50)

Ràng buộc

NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL

Ghi chú
Tên khoảng chi
Số tiền dự kiến
Ngày dự kiến chi
Số tiền chi
Ngày chi
Loại chi
Chú thích

Bảng sổ nợ
Tên cột
tenno
sotien
ngayno
loaino
chuthich

Kiểu
NVARCHAR(50)
DOUBLE
DATE
NVARCHAR(50)

NVARCHAR(50)

DỰ ÁN 1 – LẬP TRÌNH MOBILE

Ràng buộc
NOT NULL
NOT NULL
NOT NULL
NOT NULL
NOT NULL

Ghi chú
Tên khoảng nợ
Số tiền nợ
Ngày nợ
Loại nợ
Chú thích

TRANG 6


TÀI LIỆU DỰ ÁN

2.2

THIẾT KẾ GIAO DIỆN

2.2.1 Sơ đồ tổ chức giao diện

Màn hình chào


Khoảng thu
chi

Thống kê

Đăng nhập và đăng ký

Giao diện chính

Bottom Navigation

Màn hình thống kê

Người dùng
Navigation drawer

Thông tin người
dùng

Khoảng thu chi

DỰ ÁN 1 – LẬP TRÌNH MOBILE

Thống kê

Bật tắc
bottom

Khoảng

nợ

Máy tính

TRANG 7

Đăng xuất


TÀI LIỆU DỰ ÁN

2.2.2 Thiết kế giao diện cho các chức năng nghiệp vụ
View
EditText
Button
RadioButton
CheckBox
Spinner
ListView
TextVIew

Prefifx
Ed
Btn
Rdo
Chk
Spn
Lv
tv


Mô tả
Trường nhập dữ liệu
Nút
Hộp chọn
Hộp kiểm tra
Hộp chọn xổ xuống
Danh sách
Nhãn

3 THỰC HIỆN VIẾT MÃ
3.1 TẠO SQLITE TRUY VẤN, THAO TÁC VÀ TRUY SUẤT DỮ LIỆU
public class my_database extends SQLiteOpenHelper {
private static final String DB_NAME = “expenditure”;
private static final int VERSION = 1;
private static final String TB_USERS = “CREATE TABLE USERS(\n” +
“idUser INTEGER PRIMARY KEY AUTOINCREMENT, \n” +
“nameUser TEXT, \n” +
“passUser TEXT, \n” +
“emailUser TEXT, \n” +
“phoneUser TEXT, \n” +
“CONSTRAINT name_unique UNIQUE (nameUser) )”;
private static final String TB_INCOMES = “CREATE TABLE INCOMES(\n” +
“idIC INTEGER PRIMARY KEY AUTOINCREMENT, \n” +
“nameIC TEXT, \n” +
“amountIC REAL, \n” +
“actualDateIC TEXT, \n” +
“typeIC TEXT, \n” +
“noteIC TEXT, \n” +
“idUser INTEGER )”;
private static final String TB_EXPENSES = “CREATE TABLE EXPENSES(“ +

“idEP INTEGER PRIMARY KEY AUTOINCREMENT, \n” +
“nameEP TEXT, \n” +
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 8


TÀI LIỆU DỰ ÁN

“expected_amount REAL, \n” +
“expected_date TEXT,” +
“amountEP REAL, \n” +
“actualDateEP TEXT, \n” +
“typeEP TEXT, \n” +
“noteEP TEXT, \n” +
“idUser INTEGER )”;
public my_database(Context context) {
super( context, DB_NAME, null, VERSION );
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL( TB_USERS );
db.execSQL( TB_INCOMES );
db.execSQL( TB_EXPENSES );
}
//query not return
public void query(String sql){
SQLiteDatabase db = getWritableDatabase();
db.execSQL( sql );
}

//query return
public Cursor queryData(String sql){
SQLiteDatabase db = getWritableDatabase();
return db.rawQuery( sql, null );
}
//insert data table user
public int insertDataUser(users us){
SQLiteDatabase db = getWritableDatabase();
ContentValues value = new ContentValues();
value.put( “nameUser”, us.getmName() );
value.put( “passUser”, us.getmPass() );
value.put( “emailUser”, us.getmEmail() );
value.put( “phoneUser”, us.getmPhone() );
if(db.insert( “USERS”, null, value ) == -1){
return -1;
}
return 1;
}
// insert data table fragment_incomes
public int insertDataIncomes(incomes ic){
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 9


TÀI LIỆU DỰ ÁN

SQLiteDatabase db = getWritableDatabase();
ContentValues value = new ContentValues( );
value.put( “nameIC”, ic.getmName() );

value.put( “amountIC” ,ic.getmAmount());
value.put( “actualDateIC”, ic.getmActualDate() );
value.put( “typeIC”, ic.getmType() );
value.put( “noteIC”, ic.getmNote() );
value.put( “idUser”, ic.getmIdUser());
if(db.insert( “INCOMES”, null, value ) == -1){
return -1;
}
return 1;
}
//insert data table fragment_expenses
public int insertDataExpenses(expenses ep){
SQLiteDatabase db = getWritableDatabase();
ContentValues value = new ContentValues();
value.put( “nameEP”, ep.getmName() );
value.put( “expected_amount”, ep.getmExpectedAmount() );
value.put( “expected_date”, ep.getmExpectedDate() );
value.put( “amountEP”, ep.getmAmount() );
value.put( “actualDateEP”, ep.getmActualDate() );
value.put( “typeEP”, ep.getmType() );
value.put( “noteEP”, ep.getmNote() );
value.put( “idUser”, ep.getmIdUser() );
if(db.insert( “EXPENSES”, null, value ) == -1){
return -1;
}
return 1;
}
//check user login
public int checkUser(String u, String p){
int id = -1;

SQLiteDatabase db = getReadableDatabase();
Cursor c = db.rawQuery( “SELECT idUser FROM ‘USERS’ \n” +
“WHERE nameUser = ‘” + u + “’ and passUser = ‘”+ p +”’”, null );
c.moveToFirst();
if(c.getCount() > 0){
id = c.getInt( 0 );
c.close();
}
return id;
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 10


TÀI LIỆU DỰ ÁN

}

// get data table User
public List<users> getDataUsers(){
List<users> listUser = new ArrayList<>();
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.query( “USERS”, null, null,null,null,null,null );
c.moveToFirst();
while(!c.isAfterLast()){
users us = new users();
us.setmID( Integer.parseInt( c.getString( 0 ) ));
us.setmName( c.getString( 1 ) );
us.setmPass( c.getString( 2 ) );
us.setmEmail( c.getString( 3 ) );

us.setmPhone( c.getString( 4 ) );
listUser.add( us );
c.moveToNext();
}
c.close();
return listUser;
}
//get data form table fragment_incomes
public List<incomes> getDataIncomes(){
List<incomes> listIncomes = new ArrayList<>();
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.query( “INCOMES”, null,null,null,null,null,null );
c.moveToFirst();
while (!c.isAfterLast()){
incomes ic = new incomes();
ic.setmID( Integer.parseInt( c.getString( 0 ) ) );
ic.setmName( c.getString( 1 ) );
ic.setmAmount( Double.parseDouble(c.getString(2) ));
ic.setmActualDate( c.getString( 3 ) );
ic.setmType( c.getString( 4 ) );
ic.setmNote( c.getString( 5 ) );
ic.setmIdUser( Integer.parseInt( c.getString( 6 ) ) );
listIncomes.add( ic );
c.moveToNext();
}
return listIncomes;
}
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 11



TÀI LIỆU DỰ ÁN

//get data form table fragment_expenses
public List<expenses> getDataExpenses() {
List<expenses> listExpenses = new ArrayList<>();
SQLiteDatabase db = getWritableDatabase();
Cursor c = db.query( “EXPENSES”, null, null, null, null, null, null );
c.moveToFirst();
while (!c.isAfterLast()) {
expenses ep = new expenses();
ep.setmID( Integer.parseInt( c.getString( 0 ) ) );
ep.setmName( c.getString( 1 ) );
ep.setmExpectedAmount( Double.parseDouble( c.getString( 2 ) ) );
ep.setmExpectedDate( c.getString( 3 ) );
ep.setmAmount( Double.parseDouble( c.getString( 4 ) ) );
ep.setmActualDate( c.getString( 5 ) );
ep.setmType( c.getString( 6 ) );
ep.setmNote( c.getString( 7 ) );
ep.setmIdUser( Integer.parseInt( c.getString( 8 ) ) );
listExpenses.add( ep );
c.moveToNext();
}
return listExpenses;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public int changepass(users users){

SQLiteDatabase db = getWritableDatabase();
ContentValues values=new ContentValues();
values.put(“nameUser”, users.getmName());
values.put(“passUsers”, users.getmPass());
int result=db.update(String.valueOf(users),values,”nameUser=?”, new
String[]{users.getmName()});
if (result==0){
return -1;
}
return 1;
}
}

DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 12


TÀI LIỆU DỰ ÁN

3.2 Model class- các lớp mô tả dữ liệu
1. Class users:
public class users {
private String mName, mPass, mEmail, mPhone;
private int mID;
public users() {
}
public users(String mName, String mPass, String mEmail, String mPhone) {
this.mName = mName;
this.mPass = mPass;

this.mEmail = mEmail;
this.mPhone = mPhone;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public String getmPass() {
return mPass;
}
public void setmPass(String mPass) {
this.mPass = mPass;
}
public String getmEmail() {
return mEmail;
}
public void setmEmail(String mEmail) {
this.mEmail = mEmail;
}
public String getmPhone() {
return mPhone;
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 13


TÀI LIỆU DỰ ÁN


}
public void setmPhone(String mPhone) {
this.mPhone = mPhone;
}
public int getmID() {
return mID;
}
public void setmID(int mID) {
this.mID = mID;
}
}
2. Incomes:
public class incomes {
private int mID, mIdUser;
private double mAmount;
private String mName, mActualDate, mType, mNote;
public incomes() {
}
public incomes( int mIdUser, String mName, double mAmount, String
mActualDate, String mType, String mNote) {
this.mIdUser = mIdUser;
this.mName = mName;
this.mAmount = mAmount;
this.mActualDate = mActualDate;
this.mType = mType;
this.mNote = mNote;
}
public int getmID() {
return mID;
}

public void setmID(int mID) {
this.mID = mID;
}
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 14


TÀI LIỆU DỰ ÁN

public int getmIdUser() {
return mIdUser;
}
public void setmIdUser(int mIdUser) {
this.mIdUser = mIdUser;
}
public double getmAmount() {
return mAmount;
}
public void setmAmount(double mAmount) {
this.mAmount = mAmount;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public String getmActualDate() {
return mActualDate;

}
public void setmActualDate(String mActualDate) {
this.mActualDate = mActualDate;
}
public String getmType() {
return mType;
}
public void setmType(String mType) {
this.mType = mType;
}
public String getmNote() {
return mNote;
}
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 15


TÀI LIỆU DỰ ÁN

public void setmNote(String mNote) {
this.mNote = mNote;
}
}
3. Expenses
public class expenses {
private int mID, mIdUser;
private double mExpectedAmount, mAmount;
private String mName, mExpectedDate, mActualDate, mType, mNote;
public expenses() {

}
public expenses( int mIdUser, double mExpectedAmount, double mAmount,
String mName, String mExpectedDate, String mActualDate, String mType, String
mNote) {
this.mIdUser = mIdUser;
this.mExpectedAmount = mExpectedAmount;
this.mAmount = mAmount;
this.mName = mName;
this.mExpectedDate = mExpectedDate;
this.mActualDate = mActualDate;
this.mType = mType;
this.mNote = mNote;
}
public int getmID() {
return mID;
}
public void setmID(int mID) {
this.mID = mID;
}
public int getmIdUser() {
return mIdUser;
}
public void setmIdUser(int mIdUser) {
this.mIdUser = mIdUser;
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 16


TÀI LIỆU DỰ ÁN


}
public double getmExpectedAmount() {
return mExpectedAmount;
}
public void setmExpectedAmount(double mExpectedAmount) {
this.mExpectedAmount = mExpectedAmount;
}
public double getmAmount() {
return mAmount;
}
public void setmAmount(double mAmount) {
this.mAmount = mAmount;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public String getmExpectedDate() {
return mExpectedDate;
}
public void setmExpectedDate(String mExpectedDate) {
this.mExpectedDate = mExpectedDate;
}
public String getmActualDate() {
return mActualDate;
}
public void setmActualDate(String mActualDate) {

this.mActualDate = mActualDate;
}
public String getmType() {
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 17


TÀI LIỆU DỰ ÁN

return mType;
}
public void setmType(String mType) {
this.mType = mType;
}
public String getmNote() {
return mNote;
}
public void setmNote(String mNote) {
this.mNote = mNote;
}
}
3.3 Viết mã cho các chức năng
1. Welcome:
public class Welcome extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);
new Handler().postDelayed(new Runnable() {

@Override
public void run() {
startActivity(new
Intent(getApplicationContext(),Login_Activity.class));
finish();
}
}, 1500);
}
}
2. Login:
2.1 Login sign-in
public class login_sign_in extends Fragment {
private View mView;
private my_database db;
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 18


TÀI LIỆU DỰ ÁN

private TextInputEditText user, pass;
private CheckBox checkBox;
private SharedPreferences spf;
private Button btnLogin, btnCancel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup
container, @Nullable Bundle savedInstanceState) {
mView = inflater.inflate( R.layout.login_sign_in, container, false );

anhxa( mView );
spf = getActivity().getSharedPreferences( "USERS_FILE",
Context.MODE_PRIVATE );
//get value login
user.setText( spf.getString( "USER", "" ) );
// pass.setText( spf.getString( "PASS", "" ) );
checkBox.setChecked( spf.getBoolean( "CHECK", false ) );
//even click cancel
btnCancel.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().finish();
}
} );
//event click login
btnLogin.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
final String u, p;
u = user.getText().toString();p = pass.getText().toString();
if(u.isEmpty()||p.isEmpty()){
if(u.isEmpty()){
Notification( "Please! Input \"USER NAME\"" );
}
if(p.isEmpty()){
Notification( "Please! input your \"PASSWORD\"" );
}
}else{
int id = db.checkUser( u, p );
if(id < 0 ){

Notification( "User Do Not Exsis" );
}else {
rememberUser( u, p, checkBox.isChecked() );
Intent i = new Intent(getActivity(), MainActivity.class );
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 19


TÀI LIỆU DỰ ÁN

i.putExtra( "idUser", "" + id );
startActivity( i );
}
}
}
} );
return mView;
}
private void anhxa(View v) {
db = new my_database( getActivity() );
user = v.findViewById( R.id.edtUser );
pass = v.findViewById( R.id.edtPass );
btnLogin = v.findViewById( R.id.btnLogin );
btnCancel = v.findViewById( R.id.btnCanel );
TextView tvRegister = v.findViewById( R.id.tvNewAccount );
checkBox = v.findViewById( R.id.cbRemember );
tvRegister.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {

FragmentManager fragment = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = fragment.beginTransaction();
transaction.replace( R.id.loginContainer, new login_sign_up() );
transaction.commit();
}
} );
}
private void Notification(String text){
AlertDialog.Builder builder = new AlertDialog.Builder( getActivity() );
builder.setTitle( "Messager" );
builder.setIcon( R.drawable.ic_warning_dialog );
builder.setMessage( text );
builder.show();
}
public void rememberUser(String u, String p, boolean status){
SharedPreferences spf = getActivity().getSharedPreferences( "USERS_FILE",
Context.MODE_PRIVATE );
SharedPreferences.Editor editor = spf.edit();
if(!status){
//clear stata
DỰ ÁN 1 – LẬP Tdar.getInstance();
year = c.get( Calendar.YEAR );
month = c.get( Calendar.MONTH );
day = c.get( Calendar.DAY_OF_MONTH );
DatePickerDialog dateDialog = new DatePickerDialog(
getActivity(), AlertDialog.THEME_HOLO_LIGHT, new
DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int
dayOfMonth) {

yearFinal = year;
monthFinal = month + 1;
dayFinal = dayOfMonth;
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 42


TÀI LIỆU DỰ ÁN

Calendar c = Calendar.getInstance();
hour = c.get( Calendar.HOUR_OF_DAY );
minues = c.get( Calendar.MINUTE );
TimePickerDialog timeDialog = new TimePickerDialog( getActivity(),
AlertDialog.THEME_HOLO_LIGHT, new
TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
hourFinal = hourOfDay;
minuesFinal = minute;
time[0] = "" + hourFinal + ":" + minuesFinal + "\t
"+
dayFinal + "/" + monthFinal + "/" + yearFinal;
}
}, hour, minues, true );
timeDialog.setTitle( "Choose Time" );
timeDialog.setIcon( R.drawable.ic_clock );
timeDialog.show();
}
}, year, month, day );

dateDialog.setTitle( "Choose Date" );
dateDialog.setIcon( R.drawable.ic_calerdar );
dateDialog.show();
}
} );
dialog.getWindow().getAttributes().windowAnimations =
R.style.PauseDialogAnimation;
dialog.show();
dialog.show();
}
private void Nofiticatin(String text) {
AlertDialog.Builder builder = new AlertDialog.Builder( getActivity() );
builder.setTitle( "Messager" );
builder.setIcon( R.drawable.ic_warning_dialog );
builder.setMessage( text );
builder.show();
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
}
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 43


TÀI LIỆU DỰ ÁN

@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
}

}
4.2 Expenses
4.2.1 Adapter expenses
public class Adapter_Expenses extends
RecyclerView.Adapter<Adapter_Expenses.ViewHolder> implements
DatePickerDialog.OnDateSetListener,
TimePickerDialog.OnTimeSetListener{
public static List<expenses> mListExpenses = new ArrayList<>();
private fragment_expenses mContent;
private TextView tvEmpty;
private ImageView imgEmpty;
int day, month, year, hour, minutes;
int dayFinal, monthFinal, yearFinal, hourFinal, minutesFinal;
private RecyclerView mRcv;
private my_database db;
public Adapter_Expenses(List<expenses> list, fragment_expenses conten,
RecyclerView rcv, TextView tv, ImageView img) {
this.mListExpenses = list;
this.mContent = conten;
this.mRcv = rcv;
this.tvEmpty = tv;
this.imgEmpty = img;
checkIfEmpty();
}
private void checkIfEmpty() {
int check = getItemCount();
if(check == 0){
tvEmpty.setVisibility( View.VISIBLE );
imgEmpty.setVisibility( View.VISIBLE );
mRcv.setVisibility( View.GONE );

}else {
tvEmpty.setVisibility( View.GONE );
imgEmpty.setVisibility( View.GONE );
mRcv.setVisibility( View.VISIBLE );
}
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 44


TÀI LIỆU DỰ ÁN

}
@NonNull
@Override
public Adapter_Expenses.ViewHolder onCreateViewHolder(@NonNull ViewGroup
parent, int viewType) {
View itemView = LayoutInflater.from( parent.getContext()).inflate(
R.layout.recyler_view_custom_item,parent, false );
return new ViewHolder( itemView );
}
@Override
public void onBindViewHolder(@NonNull Adapter_Expenses.ViewHolder holder,
int position) {
holder.tvName.setText( mListExpenses.get( position ).getmName() );
holder.tvAmount.setText( "" + mListExpenses.get( position ).getmAmount() );
holder.tvDate.setText( mListExpenses.get( position ).getmActualDate() );
}
@Override
public int getItemCount() {

return mListExpenses.size();
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
}
public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener {
ImageView icDel, icEdit;
TextView tvName, tvAmount, tvDate;
public ViewHolder(final View itemView) {
super( itemView );
itemView.setOnClickListener( this );
icDel = itemView.findViewById( R.id.icDelete );
icEdit = itemView.findViewById( R.id.icEdit );
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 45


TÀI LIỆU DỰ ÁN

tvName = itemView.findViewById( R.id.tvNameRcv );
tvAmount = itemView.findViewById( R.id.tvAmountRcv );
tvDate = itemView.findViewById( R.id.tvDateRcv );
//set margin
RecyclerView.LayoutParams pr =
(RecyclerView.LayoutParams)itemView.getLayoutParams();

pr.setMargins( 5,15,5,10 );
icEdit.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
expenses ep = (expenses)mListExpenses.get( getPosition() );
DialogEdit( itemView.getContext(), ep.getmName(), ep.getmID() );
}
} );
icDel.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
expenses ep = (expenses)mListExpenses.get( getPosition() );
DialogDel( itemView.getContext(), ep.getmID(), ep.getmName() );
}
} );
}
@Override
public void onClick(View v) {
details_expenses.position = getPosition();
mContent.getActivity().getSupportFragmentManager().beginTransaction().replace(
R.id.frame_container, new details_expenses()
).commit();
}
}
private void DialogDel(final Context context, final int idEP, final String nameEP){
db = new my_database( context );
AlertDialog.Builder builder = new AlertDialog.Builder( context );
builder.setIcon( R.drawable.ic_warning_dialog );
builder.setTitle( "Messager" );
builder.setMessage( "Do you want delete named expenses \"" + nameEP + "\"

?");
builder.setPositiveButton( "Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
db.query( "DELETE FROM EXPENSES \n" +
DỰ ÁN 1 – LẬP TRÌNH MOBILE

TRANG 46


×