Dự án Ứng dụng xem lịch là một ứng dụng Android hoàn chỉnh, cung cấp các chức năng cơ bản và nâng cao giúp người dùng quản lý lịch cá nhân một cách dễ dàng. Khi tải về, bạn sẽ nhận được full source code và báo cáo chi tiết về quy trình phát triển, thích hợp cho cả học tập và triển khai thực tế. Các tính năng chính: Hiển thị lịch theo tháng, tuần và ngày: Giao diện thân thiện, trực quan, dễ sử dụng. Xem chi tiết các ngày trong tháng với các sự kiện được đánh dấu. Quản lý sự kiện cá nhân: Thêm, sửa, và xóa sự kiện dễ dàng. Thiết lập nhắc nhở (notification) cho sự kiện. Tích hợp lịch âm và lịch dương: Hiển thị đồng thời ngày âm và ngày dương. Hỗ trợ tra cứu ngày tốt/xấu theo phong thủy (tùy chọn mở rộng). Đồng bộ hóa dữ liệu: Tích hợp Google Calendar để đồng bộ hóa lịch. Sao lưu và khôi phục dữ liệu lịch từ tài khoản Google. Tùy chỉnh giao diện: Chọn màu sắc và chủ đề ứng dụng. Hiển thị widget trên màn hình chính. Tìm kiếm sự kiện: Tìm nhanh sự kiện theo từ khóa. Lọc sự kiện theo ngày, tuần, hoặc tháng.
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ GIAO THÔNG VẬN TẢI
KHOA CÔNG NGHỆ THÔNG TIN
**********
BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH DI ĐỘNG
ĐỀ TÀI: “Xây dựng ứng dụng xem lịch”
GIÁO VIÊN HƯỚNG DẪN: TRẦN VĂN TÂM
SINH VIÊN THỰC HIỆN:
PHẠM TUẤN HÙNG
VŨ NGỌC SƠN NGUYỄN THÀNH AN ĐÀO TUẤN PHÁT HOÀNG ANH ĐỨC LỚP: 72DCTT21
Hà Nội, 2002
Trang 2MỤC LỤC
LỜI NÓI ĐẦU 3
NỘI DUNG 4
CHƯƠNG 1: KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ ỨNG DỤNG 4
1 Khảo sát và phân tích bài toán 4
2 Xây dựng cơ sở dữ liệu 4
CHƯƠNG 2: CƠ SỞ NGHIÊN CỨU LÝ THUYẾT 9
1 Ngôn ngữ truy vấn SQL 9
2 Ngôn ngữ lập trình Android 9
CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG 10
1 Chức Năng Đăng Nhập 10
2 Chức Năng Đăng Ký 13
3 Xem lịch 18 Kết luận và hướng phát triên
Trang 3LỜI NÓI ĐẦU
Công nghệ thông tin là một ngành rất phát triển trong xã hội ngày nay Nó được ứng dụng trong rất nhiều ngành, lĩnh vực khác nhau và đạt được nhiều hiệu quả cao Đặc biệt là trong công tác bán hàng, tin học làm giảm nhẹ được sức của người bán hàng, tiết kiệm thời gian và gọn nhẹ hơn nhiều so với cách quản lý bằng giấy tờ như trước kia Ứng dụng tin học vào hoạt động buôn bán còn giúp người mua hàng dễ dàng tiếp cận, thuận lợi hơn và cũng như tiết kiệm thời gian một cách hiệu quả Hơn nữa
nó còn giúp tìm kiếm tra cứu thông tin một cách nhanh chóng, chính xác
và đầy đủ.
Từ những nhận thức về tầm quan trọng của ngành công nghệ thông tin với công tác bán hàng, cùng với sự mong muốn học hỏi và góp một phần nhỏ đưa tin học ứng dụng vào đời sống, nhóm chúng em đã làm đề tài
“Xây dựng ứng dụng xem lịch”.
Trang 4CHƯƠNG 1: KHẢO SÁT VÀ PHÂN TÍCH THIẾT KẾ ỨNG
DỤNG
1 Khảo sát và phân tích bài toán
1.1 Xác định yêu cầu bài toán
Hiện nay điện thoại di động đã trở thành thiết bị phổ biến Xu hướng và nhu cầu sử dụng điện thoại của con người ngày càng cao Và từ đó kéo theo việc thiết kế ứng dụng xem lịch là cần thiết trong cuộc sống hàng ngày.
Với ứng dụng xem lịch thì việc chúng ta xác định được ngày tháng năm dễ dàng hơn bao giờ hết Chúng ta có thể xem lịch và từ đó có thể vạch ra kế hoạch công việc hay đi chơi nhanh chóng và thuận tiện
1.2, Xác định tác nhân:
- Admin: Đảm bảo hệ thống hoạt động thông suốt, đồng thời là người điều hành hệ thống.
- Người dùng: Những người được hệ thống phục vụ trong việc xem lịch trong ứng dụng
2, Xây dựng cơ sở dữ liệu
Sơ đồ cơ sở dữ liệu:
Trang 5Chi tiết các bảng:
- Bảng ngày lịch:
Column Name Description Data
Type Size Required
Default Value
Calender date Lịch ngày DATE 50 Null
Day of week Ngày trong
- Bảng sự kiện:
Column Name Description Data
Type Size Required
Default Value
Event id Mã số sự
Description Mô tả Nvarchar MAX Null
Location Địa điểm Nvarchar 255 Null
Trang 6- Bảng người dùng:
Column Name Description Data
Type Size Required
Default Value
Customer id Mã người
Password Mật khẩu Nvarchar MAX Null
Phonenumber Số điện
CHƯƠNG 2: CƠ SỞ NGHIÊN CỨU LÝ THUYẾT
1 Ngôn ngữ truy vấn SQL
1.1 Insert:
Mục đích: Thêm dữ liệu vào bảng
Cú pháp:
INSERT INTO Table_Ten (cot1, cot2, cot3, …, cotN)] VALUES (giatri1, giatri2, giatri3, …, giatriN);
Ví Dụ:
INSERT INTO TheLoai (matheloai, tentheloai) VALUES (p_matheloai, p_tentheloai)
1.2 Update:
Mục đích: Cập nhật dữ liệu vào bảng
Cú Pháp:
Trang 7UPDATE ten_bang SET cot1 = giatri1, cot2 = giatri2, …, cotN = giatriN WHERE [dieu_kien];
Ví dụ: UPDATE GiaoVien SET Luong = 3500 WHERE MAGV =
001
1.3 Delete:
Mục đích: Xóa dữ liệu trong bảng
Cú pháp:
DELETE FROM ten_bang [WHERE dieu_kien];
Ví dụ: DELETE GiaoVien WHERE MaGV = 002
1.4 Select:
Mục đích: Tên cột trong danh sách chọn
Cú pháp: SELECT giatri1, giatri2, …, giatriN FROM table
name;
Ví dụ: SELECT * FROM KhachHang;
2 Ngôn ngữ lập trình Android
- Form
Các Control (điều khiển cơ bản): TextView, EditText, Listview, Button, RecyclerView, ImageView, Toolbar, …
Trang 8CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG
1 Chức năng đăng nhập
1.1 Giao diện
Trang 91.2 Dangnhap.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/emailEditText"
android:layout_width="match_parent"
android:layout_height="70dp"
android:hint="Email"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/passwordEditText"
android:layout_width="match_parent"
android:layout_height="74dp"
android:hint="Mật khẩu"
android:inputType="textPassword" />
<Button
android:id="@+id/loginButton"
android:layout_width="172dp"
android:layout_height="66dp"
android:text="Đăng nhập" />
<Button
android:id="@+id/registerButton"
android:layout_width="174dp"
android:layout_height="65dp"
android:text="Đăng ký" />
</LinearLayout>
1.3 DangnhapActivity
package com.example.lch;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
Trang 10import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class MainActivity extends AppCompatActivity {
private EditText emailEditText, passwordEditText;
private Button loginButton, registerButton;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)
emailEditText = findViewById(R.id.emailEditText)
passwordEditText = findViewById(R.id.passwordEditText)
loginButton = findViewById(R.id.loginButton)
registerButton = findViewById(R.id.registerButton)
mAuth = FirebaseAuth.getInstance();
loginButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
String email = emailEditText.getText().toString(); String password =
passwordEditText.getText().toString();
mAuth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
Trang 11@Override
public void onComplete(@NonNull
Task<AuthResult> task) {
if (task.isSuccessful()) {
Toast.makeText(MainActivity.this,
"Login successful", Toast.LENGTH_SHORT).show();
// Chuyển sang hoạt động thứ ba sau khi đăng nhập thành công
Intent thirdActivityIntent = new Intent(MainActivity.this, LichActivity.class)
startActivity(thirdActivityIntent); } else { Toast.makeText(MainActivity.this, "Login failed", Toast.LENGTH_SHORT).show(); }
}
});
}
});
registerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Chuyển sang màn hình đăng ký Intent registerIntent = new Intent(MainActivity.this, DangkyActivity.class) startActivity(registerIntent); }
});
}
}
Trang 122 Chức năng đăng ký
2.1 Giao diện đăng ký
2.2 Dangky.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/emailEditText"
android:layout_width="match_parent"
android:layout_height="79dp"
Trang 13android:hint="Email"
android:inputType="textEmailAddress" /> <EditText
android:id="@+id/passwordEditText"
android:layout_width="match_parent"
android:layout_height="77dp"
android:hint="Nhập mật khẩu"
android:inputType="textPassword" />
<EditText
android:id="@+id/confirmPasswordEditText" android:layout_width="match_parent"
android:layout_height="77dp"
android:hint="Nhập lại mật khẩu"
android:inputType="textPassword" />
<Button
android:id="@+id/registerButton"
android:layout_width="146dp"
android:layout_height="64dp"
android:text="Đăng ký" />
</LinearLayout>
2.3 DangkyActivity
package com.example.lch;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
Trang 14import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class DangkyActivity extends AppCompatActivity {
private EditText emailEditText, passwordEditText;
private Button registerButton;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dangky)
emailEditText = findViewById(R.id.emailEditText)
passwordEditText = findViewById(R.id.passwordEditText)
registerButton = findViewById(R.id.registerButton)
mAuth = FirebaseAuth.getInstance();
registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email = emailEditText.getText().toString(); String password =
passwordEditText.getText().toString();
mAuth.createUserWithEmailAndPassword(email, password)
Trang 15addOnCompleteListener(DangkyActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull
Task<AuthResult> task) {
if (task.isSuccessful()) {
Toast.makeText(DangkyActivity.this, "Đăng ký thành công", Toast.LENGTH_SHORT).show(); Intent loginIntent = new Intent(DangkyActivity.this, MainActivity.class) startActivity(loginIntent); } else {
Toast.makeText(DangkyActivity.this, "Đăng ký thất bại", Toast.LENGTH_SHORT).show(); }
}
});
}
});
}
}
Trang 163 Ứng dụng xem lịch
3.1 Giao diện
3.2 Lich.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
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=".LichActivity">
Trang 17<TextView
android:id="@+id/date_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="150dp"
android:layout_marginTop="20dp"
android:text="Chọn ngày"
android:textColor="@android:color/background_dark" android:textStyle="bold" />
<CalendarView
android:id="@+id/calendar"
android:layout_marginTop="80dp"
android:layout_marginLeft="19dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</CalendarView>
</RelativeLayout>
3.3 LichActivity
package com.example.lch;
import android.os.Bundle;
import android.widget.CalendarView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
Trang 18public class LichActivity extends AppCompatActivity {
CalendarView calendar;
TextView date_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lich)
calendar = findViewById(R.id.calendar)
date_view = findViewById(R.id.date_view)
calendar.setOnDateChangeListener(new
CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
String Date = dayOfMonth + "-" + (month + 1) + "-" + year;
date_view.setText(Date);
}
});
}
}
Trang 19Kết luận và hướng phát triển
1.Kết luận
- Tìm hiểu được cách thức hoạt động của một cửa hàng kinh doanh trực tuyến.
- Áp dụng được các kiến thức đã học như sử dụng cơ sở dữ liệu, phân tích
và thiết kế hệ thống, sử dụng thư viện SDK , Firebase và đặc biệt là ngôn ngữ lập trình Java để xây dựng nên ứng dụng di động chạy trên nền tảng
hệ điều hành Android với nhiều chức năng.
2.Hướng phát triển
- Tìm hiểu kĩ hơn về thành phần, chức năng của một ứng dụng di động thương mại điện tử.
- Cải tiến ứng dụng bằng những thuật toán, ngôn ngữ tốt hơn nhằm tối ưu thời gian thực hiện
trên hệ thống, tăng trải nghiệm người dùng.