ĐỘNG NHÓM: ĐỀ SỐ: 10 TÊN ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG MOBILE ĐỌC SÁCH ĐIỆN TỬ STT Sinh viên thực Điểm bằng số Điểm bằng chữ... Trước như cầu đó, cùng với yêu cầu môn học, nhóm chúng em quyế
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á
KHOA: CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚNHỌC PHẦN: PHÁT TRIỂN ỨNG DỤNG CHO THIẾT BỊ DI
Trang 2ĐỘNG NHÓM:
ĐỀ SỐ: 10 TÊN ĐỀ TÀI: XÂY DỰNG ỨNG DỤNG MOBILE
ĐỌC SÁCH ĐIỆN TỬ
STT Sinh viên thực
Điểm bằng số
Điểm bằng chữ
Trang 3MỤC LỤC
LỜI MỞ ĐẦU 4
CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI 5
1.1 Lý do chọn đề tài 5
1.2 Mục tiêu của đề tài 5
1.3 Nội dung thực hiện 5
1.4 Khảo sát và phân tích ứng dụng 6
1.5 Các yêu cầu về chức năng 6
2 Biểu đồ Diagram 8
CHƯƠNG 2 TRIỂN KHAI ỨNG DỤNG 9
1 Triển Khai Giao Diện Hệ Thống 9
2 Triển khai các chức năng của hệ thống 16
Chức năng đăng nhập 16
Chức năng tìm kiếm 22
Chức năng đăng bài 26
3 Kiểm thử và triển khai ứng dụng 30
4 Định hướng phát triển ứng dụng 30
Trang 4LỜI MỞ ĐẦU
Ngày nay Internet đã trở thành dịch vụ phổ biến, thiết yếu và có ảnh hưởng sâurộng tới thói quen, sinh hoạt, giải trí của nhiều người nhất là trong khi tình hình dịchngày càng phức tạp nhiều diễn biến Với sự phát triển của internet thì các hình thứcgiai trí cho mọi người ngày càng đa dạng và phát triển hơn Các ứng dụng web ngàycàng trở nên phổ biến Trước như cầu đó, cùng với yêu cầu môn học, nhóm chúng em
quyết định chọn đề tài Xây dựng ứng dụng mobile Đọc sách điện tử
Để có thể hoàn thành bài tập lớn này, lời đầu tiên em xin phép gửi lời cảm ơn tớithầy cô bộ môn, Khoa Công nghệ thông tin đã tạo điều kiện thuận lợi cho em thực hiệnbài tập lớn môn học này
Đặc biệt em xin chân thành cảm ơn thầy đã rất tận tình hướng dẫn, chỉ bảo emtrong suốt thời gian thực hiện đồ án vừa qua
Em cũng xin chân thành cảm ơn tất cả các Thầy, các Cô trong Trường đã tận tìnhgiảng dạy, trang bị cho em những kiến thức cần thiết, quý báu để giúp em thực hiệnđược bài tập lớn này
Mặc dù em đã có cố gắng, nhưng với trình độ còn hạn chế, trong quá trình thựchiện đề tài không tránh khỏi những thiếu sót Em hi vọng sẽ nhận được những ý kiếnnhận xét, góp ý của các Thầy giáo, Cô giáo về những kết quả triển khai trong đồ án
Em xin trân trọng cảm ơn!
4
Trang 5CHƯƠNG I: TỔNG QUAN VỀ ĐỀ TÀI
Nhưng đọc truyện qua smartphone/tablet còn có vài thứ bất cập của nó chẳng hạnnhư là tốc độ tải hình ảnh qua web trên smartphone thường chậm hơn trên pc/laptopbởi vì bộ nhớ điện thoại rất ít và trình duyệt web xử lí thao tác nhiều tác vụ khác nhaucộng thêm tốc độ mạng chậm khiến nhiều người vô cùng khó chịu Nhưng ứng dụngđọc truyện tranh thì khác, khi người đọc mở trang truyện nào đó thì tất cả tập trung xử
lí hình ảnh truyện và cũng tốn ít dung lượng 4G hơn bên trang web và các nhóm dịchtruyện dễ dàng nhận được nguồn vốn đóng góp quỹ duy trì hoạt động Từ đó, tôi muốnxây dựng một ứng dụng đọc truyện miễn phí cho mọi người để không còn ai đắn đoviệc đọc truyện qua mạng tốn dung lượng 4G và tốc độ xử lí chậm chạp
1.2 Mục tiêu của đề tài
1.3 Nội dung thực hiện
Hệ thống ứng dụng thực hiện sẽ được mô tả như sau:
- Người dùng phải đăng kí và đăng nhập để dọc truyện
Trang 6- Người dùng có thẻ đánh giá , chia sẻ, yêu thích.
1.4 Khảo sát và phân tích ứng dụng
Trong thời đại 4.0 ai cũng có cho riêng mình một chiếc điện thoại thông minh
để cập nhật mọi tin tức đời sống cũng như để giải trí sau những giờ làm việc căngthẳng bằng việc như: đọc truyện tranh online,… Nhưng hầu hết phải lên các trang webchính thống để đọc do đó nó có rất nhiều bất cập xảy đến như: yêu cầu phải kết nối vớimạng internet, đắn đo về dung lượng khi đọc truyện qua mạng, tốc độ xử lý chậm, …
Do đó chúng em muốn mang tới một ứng dụng có thể thay đổi được các bất cậpxảy đến khi đọc truyện tranh hay đọc sách online xảy ra với người sử dụng Nhằmmang đến một ứng dụng trên điện thoại có thể giúp mọi người đọc truyện không bịgián đoạn hay phải lo nghĩ về hết data khi sử dụng internet, và hơn hết tốc độ xử lý sẽvượt trội hơn khi sử dụng trên web
Dựa trên các kết quả khảo sát và phân tích trên, nhóm chúng em đã đưa ra quyếtđịnh để xây dựng các tính năng và thiết kế ứng dụng đọc truyện tranh, với mục tiêu tối
đa hóa trải nghiệm người dùng và đáp ứng nhu cầu giải trí của sử dụng ứng dụng
1.5 Các yêu cầu về chức năng
Sơ đồ USECASE tổng quát
6
Trang 7 Người quản trị: Quản lý truyện
Trang 9CHƯƠNG 2 TRIỂN KHAI ỨNG DỤNG
1 Triển Khai Giao Diện Hệ Thống
1.1 Giao diện đăng nhập
Trang 101.2 Giao diện ứng dụng
10
Trang 111.3 Giao diện account
Trang 121.4 Giao diện chia sẻ truyện
12
Trang 131.5 Giao diện nội dung
Trang 141.6 Giao diện đánh giá
14
Trang 151.7 Giao diện cập nhật truyện
Trang 162 Triển khai các chức năng của hệ thống
Để xây dựng được các chức năng của ứng dụng theo thiết kế đã được trình bày ởchương 3, đồ án đã sử dụng drawable để thiết kế giao diện người dùng theo yêu cầu.Tiếp theo, đồ án sẽ trình bày các kỹ thuật được sử dụng để xây dựng ứng dụng
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/longhihi"
>
<! TODO: Update blank fragment layout >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Wellcome to App"
android:textColor="#2CA7E0"
android:textStyle="bold"
android:layout_gravity="center"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
16
Trang 17android:hint="username"
android:textColorHint="#2CA7E0"
android:layout_gravity="center"
android:drawableLeft="@drawable/ic_person" android:drawablePadding="10dp"
android:hint="Password"
android:textColorHint="#2CA7E0"
android:layout_gravity="center"
android:drawableLeft="@drawable/ic_person" android:drawablePadding="10dp"
android:textColor="#E11010"
android:fontFamily="sans-serif-medium" android:layout_gravity="right"
android:layout_marginTop="20dp"
android:textSize="15dp"
android:layout_marginRight="35dp" />
<Button
android:id="@+id/btnDangNhap"
android:layout_width="300dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:text="Đăng nhập"
android:textColor="#fff"
android:layout_marginTop="20dp"
android:background="@drawable/botron"
Trang 18android:layout_width="300dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:text="Đăng ký"
Trang 19android:startColor="#38BDAD"
android:centerColor="#64E4FF" android:endColor="#62CBFF" android:angle="270" />
<corners
android:radius="100dp"/> <padding
android:left="5dp"
android:top="5dp"
android:right="10dp"
android:bottom="5dp"/> <stroke android:color="@color/blue"
<! SHADOW >
<item>
<shape>
<solid android:color="#1E000000"/> <corners android:radius="100dp"/> </shape>
android:startColor="#FFFDE4"
android:endColor="#005AA7" android:angle="270" />
<corners
android:radius="100dp"/>
Trang 20Button btnDangNhap btnDangKy, ;
databaseDocTruyen = new databasedoctruyen(this);
btnDangKy.setOnClickListener(new View.OnClickListener() { @Override
Intent intent = new
Intent(MainDangNhap.this,MainDangKy.class);
startActivity(intent);
}
});
20
Trang 21btnDangNhap.setOnClickListener(new View.OnClickListener() { @Override
String tentaikhoan = edtTaiKhoan.getText().toString(); String matkhau = edtMatKhau.getText().toString(); Cursor cursor = databaseDocTruyen.getData();
while (cursor.moveToNext()){
String datatentaikhoan cursor.getString( );= 1
String datamatkhau cursor.getString( );= 2
if(datatentaikhoan.equals(tentaikhoan) &&
datamatkhau.equals(matkhau)){
int phanquyen cursor.getInt( );= 4
int idd cursor.getInt( );= 0
String tentk cursor.getString( );= 1
String email cursor.getString( );= 3
Intent intent = new
Intent(MainDangNhap.this,MainActivity.class);
intent.putExtra("phanq",phanquyen);
intent.putExtra("idd",idd);
intent.putExtra("email",email);
intent.putExtra("tentaikhoan",tentk);
private void AnhXa() {
edtTaiKhoan = findViewById(R.id.edtUsername);
edtMatKhau = findViewById(R.id.edtPasswod);
Trang 22}
}
Chức năng tìm kiếm
a Thiết kế layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainTimKiem">
<LinearLayout
android:layout_margin="5dp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:hint="Search"
android:id="@+id/timkiem"
android:layout_width="match_parent"
android:layout_height="wrap_content"></EditText>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/listviewtimkiem"
android:layout_width="match_parent"
Trang 24public void onTextChanged(CharSequence s, int start, int before, int count) { }
private void filter(String text){
//xóa sau mỗi lần gọi tới filter
arrayList.clear();
ArrayList<Truyen filteredList > = new ArrayList<>();
for(Truyen item : TruyenArrayList){
if (item.getTenTruyen().toLowerCase().contains(text.toLowerCase())){ filteredList.add(item);
//Thêm dữ liệu để hiển thị ra item nội dung
arrayList.add(item);
}
}
adaptertruyen.filterList(filteredList);
}
//Hàm gán dữ liệu từ CSDL vào listview
public void initList(){
TruyenArrayList = new ArrayList<>();
//
arrayList = new ArrayList<>();
databaseDocTruyen = new databasedoctruyen(this);
Cursor cursor1 = databaseDocTruyen.getData2();
while (cursor1.moveToNext()){
int id cursor1.getInt( );= 0
String tentruyen cursor1.getString( );= 1
String noidung cursor1.getString( );= 2
String anh cursor1.getString( );= 3
int id_tk cursor1.getInt( );= 4
24
Trang 25TruyenArrayList.add(new Truyen(id,tentruyen noidung,anh,id_tk, )); //Thêm dữ liệu vào mảng
arrayList.add(new Truyen( ,id tentruyen,noidung anh id_tk, , ));
}
LinearLayoutManager linearLayoutManager = new
LinearLayoutManager(getApplicationContext(), RecyclerView.VERTICAL, false); listView.setLayoutManager(linearLayoutManager);
adaptertruyen=new adapterTruyen(getApplicationContext(),TruyenArrayList); listView.setAdapter(adaptertruyen);
cursor1.moveToFirst();
cursor1.close();
}
// //Tạo thanh action bar với toolbar
// private void ActionBar() {
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainDangBai">
<TextView
android:textColor="#2196F3"
android:textStyle="bold"
android:textSize="30sp"
android:gravity="center"
android:text="Đăng bài"
Trang 26android:inputType="text"
android:id="@+id/dbtieude"
android:hint="Tên truyện"
android:layout_gravity="center"
android:hint="Nội dung"
android:inputType="text"></EditText>
<EditText
android:inputType="textUri"
android:hint="Ảnh bìa"
android:id="@+id/dbimg"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:layout_width="300dp"
android:layout_height="wrap_content"></EditText> <Button
android:id="@+id/dbdangbai"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="Đăng bài"
android:textColor="@color/white"
android:background="@drawable/themtruyen" android:layout_width="100dp"
android:layout_height="wrap_content"></Button>
Trang 27import com.example.appdoctruyen_v2.model.main.MainAdmin;import java.util.ArrayList;
private void init() {
listView = getActivity().findViewById(R.id.listviewAdmin); buttonThem = getActivity().findViewById(R.id.buttonAddTruyen);
Trang 28buttonThem.setOnClickListener(new View.OnClickListener() { @Override
Intent intent = getActivity().getIntent();
int id intent.getIntExtra(= "Id", );0
Intent intent1 = new Intent(getContext(), MainDangBai.class); intent.putExtra("Id",id);
public void initList(){
TruyenArrayList = new ArrayList<>();
databaseDocTruyen = new databasedoctruyen(getContext()); Cursor cursor1 = databaseDocTruyen.getData2();
while (cursor1.moveToNext()){
int id cursor1.getInt( );= 0
String tentruyen cursor1.getString( );= 1
String noidung cursor1.getString( );= 2
String anh cursor1.getString( );= 3
int id_tk cursor1.getInt( );= 4
TruyenArrayList.add(new Truyen(id,tentruyen noidung,anh,id_tk, ));
}
LinearLayoutManager linearLayoutManager = new
LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false); listView.setLayoutManager(linearLayoutManager);
adaptertruyen = new adapterDangBai(getContext(),TruyenArrayList); listView.setAdapter(adaptertruyen);
Trang 29Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_dangbai, container, false);
- Cập nhật các truyện mới nhanh chóng
- Thêm tính năng xem truyện đã đọc qua