Môn học Phát triển ứng dụng cho thiết bị di động. Android là nền tảng di động phổ biến nhất. Nội dung báo cáo gồm: Giới thiệu nền tảng Android Phát biểu bài toán Phân tích thiết kế hệ thống Cài đặt cà kiểm thử ứng dụng Đồ án, đồ án môn học, bài tập lớn, project.
GIỚI THIỆU CHUNG
Lập trình hướng đối tượng trong Java
Trong lập trình hướng đối tượng, mọi thực thể trong hệ thống được xem như các đối tượng cụ thể Đối tượng là thực thể hoạt động trong quá trình chương trình chạy.
- Trong bài toán quản lí buôn bán xe hơi của một cửa hàng kinh doanh, mỗi chiếc xe đang
- Có mặt trong cửa hàng được coi là một đối tượng Chẳng hạn, một chiếc xe nhăn hiệu
- “Ford”, màu trắng, giá 5000$ là một đối tượng
Trong quản lý nhân viên văn phòng, mỗi nhân viên được xem như một đối tượng riêng biệt Ví dụ, nhân viên có tên "Vinh", 25 tuổi, làm việc tại phòng hành chính, là một minh chứng cụ thể cho khái niệm này.
Đối tượng là một thực thể tồn tại trong hệ thống, được xác định bởi ba yếu tố chính Đầu tiên là định danh đối tượng, giúp xác định duy nhất mỗi đối tượng trong hệ thống, từ đó phân biệt rõ ràng các đối tượng với nhau.
Trạng thái của đối tượng: là sự tổ hợp của các giá trị của các thuộc tính mà đối tượng đang có
Hoạt động của đối tượng: là các hành động mà đối tượng có khả năng thực hiện được
Trạng thái hiện tại của đối tượng qui định tính chất đặc trưng của đối tượng Ví dụ, nhân viên trong ví dụ trên có trạng thái là:
Trong khi đó, trạng thái của chiếc xe trong cửa hàng là :
- Nhãn hiệu xe là Ford
- Màu sơn xe là trắng
Mỗi đối tượng sẽ thực hiện một số hành động Ví dụ, đối tượng xe hơi có khả năng thực hiện những hành động sau :
- Chạy Để biểu diễn đối tượng trong lập tŕnh hướng đối tượng, người ta trừu tượng hoá đối tượng để tạo nên khái niệm lớp đối tượng
Trong lập trình hướng đối tượng, đối tượng đại diện cho một thực thể cụ thể trong hệ thống, trong khi lớp là khái niệm trừu tượng mô tả một tập hợp các thuộc tính và phương thức chung cho các đối tượng tương tự.
10 hợp các đối tượng có mặt trong hệ thống
Trong quản lý buôn bán xe hơi, mỗi chiếc xe trong cửa hàng được xem là một đối tượng riêng biệt Khái niệm "Xe hơi" đại diện cho một lớp đối tượng, bao gồm tất cả các loại xe mà cửa hàng cung cấp.
Trong quản lý nhân viên văn phòng, mỗi nhân viên được xem như một đối tượng riêng biệt Tuy nhiên, khái niệm “Nhân viên” lại là một lớp đối tượng tổng quát, dùng để chỉ tất cả các nhân viên trong văn phòng.
Lớp là một khái niệm trừu tượng dùng để biểu diễn một tập hợp các đối tượng, trong khi đối tượng là một thể hiện cụ thể của lớp, tồn tại như một thực thể trong hệ thống Lớp không chỉ biểu diễn đối tượng mà còn có thuộc tính và phương thức riêng.
- Thuộc tính của lớp tương ứng với thuộc tính của các đối tượng
Lớp trong lập trình có thể tương ứng với các hành động của đối tượng và có thể có một trong những khả năng sau: chỉ chứa thuộc tính mà không có phương thức, chỉ có phương thức mà không có thuộc tính, hoặc cả hai, với trường hợp này là phổ biến nhất Đặc biệt, các lớp không có thuộc tính và phương thức được gọi là lớp trừu tượng, và chúng không có đối tượng tương ứng.
Lớp và đối tượng có mối liên hệ chặt chẽ nhưng bản chất lại khác nhau Lớp là sự trừu tượng hóa của các đối tượng, trong khi đối tượng là một thực thể cụ thể, tồn tại trong hệ thống Đối tượng thể hiện các đặc tính chung của lớp, với tất cả các đối tượng thuộc cùng một lớp đều có các thuộc tính và phương thức giống nhau Lớp có thể được coi là nguyên mẫu của một đối tượng, xác định các hành động khả thi và các thuộc tính cần thiết cho nhóm đối tượng cụ thể Tóm lại, lớp là khái niệm trừu tượng tồn tại trong quá trình phát triển hệ thống.
1.1.3 Khái niệm về kế thừa
Xét trường hợp bài toán quản lí nhân sự và sinh viên của một trường đại học
Khi đó, ta có hai lớp đối tượng chính là lớp Nhân viên và lớp Sinh viên :
Bảng 1 Ví dụ về kế thừa
Lớp Sinh viên Thuộc tính :
Tên Ngày sinh Giới tính Lớp
Nhập/xem tên Nhập/xem ngày sinh Nhập/xem giới tính Nhập/xem lớp
Hai lớp này chia sẻ một số thuộc tính và phương thức chung như tên, ngày sinh và giới tính Tuy nhiên, không thể hợp nhất chúng thành một lớp duy nhất vì các thuộc tính như lương nhân viên và lớp của sinh viên là cần thiết cho việc quản lý Vấn đề này cần được giải quyết một cách hợp lý.
Ta phải viết mã trùng nhau đến hai lần cho các phương thức : nhập/xem tên, nhập/xem ngày sinh, nhập/xem giới tính
Khi có sự thay đổi về kiểu dữ liệu trong hệ thống, như kiểu ngày sinh, việc sửa đổi chương trình có thể trở nên phức tạp Để giảm thiểu rắc rối từ những vấn đề này, lập trình hướng đối tượng áp dụng kỹ thuật kế thừa, cho phép nhóm các phần tương đồng của các lớp thành một lớp mới Các lớp ban đầu sau đó có thể kế thừa từ lớp này, giúp mỗi lớp thừa kế (lớp con) sở hữu các thuộc tính và phương thức của lớp cơ sở (lớp cha).
Trong quản lý trường đại học, lớp Nhân viên và lớp Sinh viên có những thuộc tính và phương thức chung như: tên, ngày sinh, giới tính, cùng với các chức năng nhập và xem thông tin về tên, ngày sinh và giới tính.
Ta tách phần chung thành một lớp trừu tượng cao hơn, gọi là lớp Người Lớp Người sẽ là lớp cha cho lớp Nhân viên và lớp Sinh viên Như vậy, cấu trúc lớp sẽ bao gồm lớp Người, lớp Nhân viên và lớp Sinh viên.
Bảng 2 Ví dụ về kế thừa
Lớp Nhân viên kế thừa từ lớp
Lớp Sinh viên kế thừa từ lớp Người Thuộc tính :
Như vậy, sự kế thừa trong lập tŕnh hướng đối tượng:
Lớp dẫn xuất có khả năng sử dụng các thuộc tính và phương thức của lớp cơ sở, tương tự như cách mà nó sử dụng các thuộc tính và phương thức của chính nó.
Cho phép việc chỉ cần cài đặt phương thức ở một lớp cơ sở, mà có thể sử dụng được ở tất cả các lớp dẫn xuất
• Cho phép tránh sự cài đặt trùng lặp mă nguồn của chương tŕnh
• Cho phép chỉ phải thay đổi một lần khi cần phải thay đổi dữ liệu của các lớp
Trong ví dụ về quản lý trường đại học, chúng ta có hai lớp là Nhân viên và Sinh viên, đều kế thừa từ lớp Người Lớp Người có phương thức show() để giới thiệu tên và tuổi của người đó Lớp Nhân viên mở rộng phương thức show() để hiển thị thông tin về mức lương của nhân viên Trong khi đó, lớp Sinh viên sử dụng phương thức show() để cho biết sinh viên đó đang học ở lớp nào.
Bảng 3 Ví dụ về kế thừa
Lớp Nhân viên kế thừa từ lớp
Lớp Sinh viên kế thừa từ lớp Người
Tìm hiểu về Android và lập trình trong Android
1.2.1 Giới thiệu chung về Android
Android là hệ điều hành di động mã nguồn mở miễn phí do Google phát triển, dựa trên nền tảng Linux Tất cả các nhà sản xuất phần cứng đều có quyền tự do sử dụng Android cho thiết bị của mình.
14 mình, miễn là các thiết bị ấy đáp ứng được các tiêu chuẩn cơ bản do Google đặt ra
Các nhà sản xuất có quyền tự do thay đổi phiên bản Android trên thiết bị của họ mà không cần xin phép hay trả phí, tuy nhiên, họ phải đảm bảo tính tương thích ngược cho phiên bản tùy chỉnh đó.
Android là nền tảng di động bao gồm hệ điều hành, middleware và ứng dụng chủ đạo Bộ công cụ Android SDK cung cấp các công cụ và thư viện API cần thiết để phát triển ứng dụng trên nền tảng Android bằng ngôn ngữ lập trình Java.
- Nghiên cứu lập trình trên hệ điều hành android
- Nghiên cứu ngôn ngữ lập trình java
- Nghiên cứu xây dựng giao diện với xml trong android
Hệ điều hành Android hiện đang rất thịnh hành trên các smartphone vì vậy cần phát triển ứng dụng để có thể chạy trên điện thoại
Nội dung thực hiện/nghiên cứu cụ thể như sau:
- Nghiên cứu hệ điều hành Android và các công cụ hỗ trợ như Android Studio, SDK
- Cách tiếp cận: Nghiên cứu hệ điều hành Android, công cụ Android Studio, xml và lập trình hướng đối tượng trong java
- Sử dụng các phương pháp nghiên cứu như:
+ Phương pháp đọc tài liệu
+ Phương pháp xem các video hướng dẫn trên internet
+ Phương pháp trao đổi và làm việc nhóm
1.2.4 Công cụ phát triển Android
Hiện nay có hai công cụ phát triển Android phổ biến là: Eclipse và Android Studio
Eclipse là phần mềm miễn phí dành cho các nhà phát triển, hỗ trợ xây dựng ứng dụng J2EE Với Eclipse, người dùng có thể tích hợp nhiều công cụ hỗ trợ khác nhau để tạo thành một bộ công cụ hoàn chỉnh mà không cần sử dụng phần mềm riêng biệt Eclipse SDK bao gồm ba phần chính, giúp tối ưu hóa quy trình phát triển ứng dụng.
The Eclipse Platform serves as the foundation for the entire Eclipse software ecosystem, offering essential services for integrating development toolkits as Plug-ins The Java Development Toolkit (JDT) enhances Eclipse's capabilities, making it a robust environment for Java development Additionally, the Plug-in Development Environment (PDE) facilitates the expansion of Eclipse by allowing the integration of various Plug-ins, further enriching the development experience within the Eclipse Platform.
15 coi như là một Plug-in làm cho Eclipse như là một Java IDE (Integrated Development Enviroment)
Eclipse là một công cụ lập trình quan trọng trong phát triển ứng dụng Android, cung cấp đầy đủ các thành phần hỗ trợ thiết kế chương trình một cách hiệu quả.
Android Studio has replaced Eclipse as the primary development environment for Android programming, offering a dedicated platform similar to Visual Studio This transition marks a significant improvement in the coding experience for developers, as Google officially released Android Studio to streamline the development process.
Android Studio là môi trường lập trình chính thức cho Android, tích hợp tất cả các công cụ cần thiết và plug-in mở rộng Hôm nay, tôi xin chia sẻ thông tin về cách chuẩn bị và sử dụng Android Studio để phát triển ứng dụng Android hiệu quả.
ỨNG DỤNG QUẢN LÝ SINH VIÊN
Giới thiệu về ứng dụng đã xây dựng
- Tên ứng dụng: Quản lý sinh viên
- Mục đích: Quản lý thông tin sinh viên trong một lớp học
- Chức năng: Thực hiện bốn chức năng là:
9 Hiển thị thông tin sinh viên theo danh sách
9 Thêm mới thông tin sinh viên
9 Cập nhập thông tin sinh viên đã tồn tại
9 Xóa sinh viên có trong danh sách
Phân tích và thiết kế hệ thống
a) Biểu đồ UseCase hệ thống quản lý sinh viên:
Hình 1 Biểu đồ UseCase hệ thống quản lý sinh viên b) Biểu đồ UseCase quản lý thông tin sinh viên:
Biểu đồ Use Case quản lý thông tin sinh viên cho phép người dùng thực hiện các thao tác như thêm, sửa, xóa và hiển thị thông tin sinh viên trong hệ thống Điều kiện tiên quyết là hệ thống phải đang hoạt động Một trong những dòng sự kiện chính là thêm sinh viên vào hệ thống.
Bảng 4 Dòng sự kiện chính cho chức năng thêm sinh viên
Hành động của tác nhân Phản ứng của hệ thống
1.Nhập thông tin sinh viên
1.Nếu nhập thông tin hợp lệ và đầy đủ thì thực hiện bước 2 Nếu sai thực hiện dòng sự kiện rẽ nhánh A1
2.Lưu thông tin, refesh hiển thị danh sách sinh viên o Sửa thông tin sinh viên
Bảng 5 Dòng sự kiện chính cho chức năng sửa thông tin sinh viên
Hành động của tác nhân Phản ứng của hệ thống
1 Chọn một sinh viên 1.Hiển thị thông tin của sinh viên
2 Nhập thông tin cần thay đổi của sinh viên
1.Nếu sửa thành công thì thực hiện bước 2.2 Nếu sai thực hiện dòng sự kiện rẽ nhánh A1 2.Thông báo sửa thành công
1.1 Lưu thông tin 1.2 o Xóa thông tin sinh viên Bảng 6 Dòng sự kiện chính cho chức năng xóa thông tin sinh viên
Hành động của tác nhân Phản ứng của hệ thống
1.Chọn một sinh viên và giữ một lúc
1.Hệ thống kiểm tra dữ liệu
Hệ thống sẽ thông báo việc xóa thành công hoặc không thành công, đồng thời nêu rõ nguyên nhân Nếu dữ liệu không hợp lệ, hệ thống sẽ thông báo cho giáo viên để họ nhập lại thông tin Giáo viên có thể quay lại bước 3 để sửa thông tin sinh viên hoặc thêm sinh viên mới trong dòng sự kiện chính.
Thiết kế các bảng cơ sở dữ liệu
Bảng 7 Bảng thiết kế cơ sở dữ liệu sinhvien
STT Tên trường Kiểu dữ liệu Ràng buộc Mô tả
1 Student_name Text Not null Tên sinh viên
2 Sex Text Not null Giới tính
3 Student_code int Khóa chính Mã sinh viên
4 Date_of_birth Text Not null Ngày sinh
CHƯƠNG 3: CÀI ĐẶT VÀ XÂY DỰNG ỨNG DỤNG
3.1 Quá trình triển khai a) Thư mục:
Hình 3 Thư mục của projetc Quan Ly Sinh Vien
Hình 4 Thư mục của projetc Quan Ly Sinh Vien b) Code của phần database:
1 package com.example.qlsinhvien.database;
6 import android.database.sqlite.SQLiteDatabase;
7 import android.database.sqlite.SQLiteOpenHelper;
10 import com.example.qlsinhvien.model.Student;
11 import com.example.qlsinhvien.model.Subject;
13 public class database extends SQLiteOpenHelper {
15 private static String DATABASE_NAME = "studentmanagement";
17 private static String TABLE_SUBJECTS = "subject";
18 private static String ID_SUBJECTS = "idsubject";
19 private static String SUBJECT_TITLE = "subjecttitle";
20 private static String CREDITS = "credits";
21 private static String TIME = "time";
22 private static String PLACE = "place";
26 private static String TABLE_STUDENT = "student";
27 private static String ID_STUDENT = "idstudent";
28 private static String STUDENT_NAME = "sudentname";
29 private static String SEX = "sex";
30 private static String STUDENT_CODE = "studentcode";
31 private static String DATE_OF_BIRTH = "dateofbirth";
36 private String SQLQuery = "CREATE TABLE "+ TABLE_SUBJECTS +" (
"+ID_SUBJECTS+" INTEGER PRIMARY KEY AUTOINCREMENT, "
43 private String SQLQuery1 = "CREATE TABLE "+ TABLE_STUDENT +" (
"+ID_STUDENT+" integer primary key AUTOINCREMENT, "
48 +ID_SUBJECTS+" INTEGER , FOREIGN KEY ( "+ ID_SUBJECTS +" ) REFERENCES "+
51 public database(@Nullable Context context) {
52 super(context, DATABASE_NAME, null, VERSION);
56 public void onCreate(SQLiteDatabase db) {
63 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
67 public void AddSubjects(Subject subject){
70 //không thể lưu trực tiếp xuống insert nên thông qua contentvalues
72 values.put(SUBJECT_TITLE,subject.getSubject_title());
73 values.put(CREDITS,subject.getNumber_of_credits());
74 values.put(TIME,subject.getTime());
75 values.put(PLACE,subject.getPlace());
77 db.insert(TABLE_SUBJECTS,null,values);
78 //đóng lại db cho an toàn
82 public boolean UpdateSubject(Subject subject, int id){
88 values.put(SUBJECT_TITLE,subject.getSubject_title());
89 values.put(CREDITS,subject.getNumber_of_credits());
90 values.put(TIME,subject.getTime());
91 values.put(PLACE,subject.getPlace());
93 db.update(TABLE_SUBJECTS,values,ID_SUBJECTS+" = "+id,null);
94 Log.e("Ok : ",id+" - id "+values.get(SUBJECT_TITLE)+" +
"+values.get(CREDITS)+" + "+values.get(TIME)+" + "+values.get(PLACE));
98 public boolean UpdateStudent(Student student, int id){
103 values.put(STUDENT_NAME,student.getStudent_name());
104 values.put(SEX,student.getSex());
105 values.put(STUDENT_CODE,student.getStudent_code());
106 values.put(DATE_OF_BIRTH,student.getDate_of_birth());
107 db.update(TABLE_STUDENT,values,ID_STUDENT+" "+id,null);
108 Log.e("Ok : ",id+" - id "+values.get(STUDENT_NAME)+" +
"+values.get(SEX)+" + "+values.get(STUDENT_CODE)+" +
"+values.get(DATE_OF_BIRTH));
115 Cursor res = db.rawQuery("SELECT * FROM
122 int res = db.delete(TABLE_SUBJECTS,ID_SUBJECTS+" "+i,null);
128 int res = db.delete(TABLE_STUDENT,ID_SUBJECTS+" "+i,null);
133 public void AddStudent(Student student){
136 //không thể lưu trực tiếp xuống insert nên thông qua contentvalues
138 values.put(STUDENT_NAME,student.getStudent_name());
139 values.put(SEX,student.getSex());
140 values.put(STUDENT_CODE,student.getStudent_code());
141 values.put(DATE_OF_BIRTH,student.getDate_of_birth());
142 values.put(ID_SUBJECTS,student.getId_subject());
144 db.insert(TABLE_STUDENT,null,values);
145 //đóng lại db cho an toàn
148 //Lấy tất sinh viên thuộc môn học đó
149 public Cursor getDataStudent(int id_subject){
151 Cursor res = db.rawQuery("SELECT * FROM
"+TABLE_STUDENT+" WHERE "+ID_SUBJECTS+" = "+id_subject,null);
158 int res = db.delete(TABLE_STUDENT,ID_STUDENT+" "+i,null);
3.2 Thiết kế giao diện a) Giao diện chính
Hình 5 Giao diện chính b) Giao diện trang thêm sinh viên
Hình 6 Giao diện trang thêm sinh viên
1 Edit Text dùng để nhập tên sinh viên
2 Radio Button đùng để chọn giới tính
3 Edit Text dùng để nhập mã sinh viên
4 Edit Text dùng để nhập ngày sinh
5 Button thêm sinh viên c) Giao diện thông tin sinh viên:
Hình 7 Giao diện thông tin sinh viên d) Giao diện sửa thông tin sinh viên:
Hình 8 Giao diện sửa sinh viên e) Giao diện xóa sinh viên:
Hình 9 Giao diện xóa sinh viên
28 f) Giao diện trang danh sách sinh viên:
Hình 10 Giao diện trang danh sách sinh viên g) Giao diện author:
Hình 11 Giao diện tác giả h) Giao diện thoát chương trình:
29 Hình 12 Giao diện thoát chương trình
CHƯƠNG 4: DEMO CHƯƠNG TRÌNH QUẢN LÝ SINH
4.1 Link demo https://drive.google.com/file/d/1OimnBpF_uo7ZRVeWfgamSx4glEldywKl/vie w?usp=sharing
4.2 Up chương trình lên Amazon:
- Link cài đặt chương trình: https://www.amazon.com/gp/product/B09JK6Y5DY