[Solved]Bài tập ứng tuyển internship program Q1/2015 – App quản lý giá vé xem phim – Android

Xây dựng phần mềm quản lý giá vé xem phim giúp cho chủ rạp chiếu phim có công cụ quản lý thay vì dùng excel.
3 loại vé cố định: 2d, 3d, 4d. Mỗi loại có giá tùy theo ngày.
Trên excel trước đây tổ chức như sau:

2016-02-16 18_52_02-Solved_Android_Cinetic.odt - LibreOffice Writer

Các tính năng cần có của phần mềm:


1. Yêu cầu 1: Quản lý giá
1.1.
User có thể xem giá vé mỗi ngày theo tuần

1.2. User có thể sửa giá từ ngày đến ngày cho loại vé nào


2. Yêu cầu 2: Lấy bảng giá từ website
Công ty mẹ có đưa bảng giá lên website nhưng không có web service để các rạp có thể lấy tự động. Url: http://adinao.surge.sh/

2.1. User có thể lấy tự động bảng giá từ website trên khi cần thiết

3. Yêu cầu kỹ thuật:

Ưu tiên hoàn thành chức năng. Các vấn đề khác như multiscreen, performance, styling,… sẽ tính điểm cộng.

Bài tập thực hiện bằng 1 trong các platform sau:

UWP apps C# / JS

– Android Java

4. Thời gian thực hiện:

3 ngày kể từ thời điểm nhận email

Giải: chọn Android Java để thực hiện bài tập

Wireframe:
wf_1 wf_2

Technical design:

Data: SQLite

movieType : có trị hằng: 2d, 3d, 4d nên không lưu database

ticketPrice(movieType, date, price) : mỗi record 1 giá cho 1 loại phim và áp dụng trong 1 ngày

Field

Data Type

Format

movieType

TEXT

date

TEXT

yyyyMMdd

price

INTEGER

Nhân lên 100 (Làm tròn 2 số thập phân)

Data Access: Repository Pattern

MovieType Repository:

interface IMovieTypeRepository {
    ArrayList<String> getAll();
}

Ticket Price Repository:

interface ITicketPriceRepository {
    ArrayList<TicketPrice> get(Calendar fromDate, Calendar toDate);
    Boolean createOrUpdate(TicketPrice ticketPrice);
    Boolean createOrUpdate(String movieType, Calendar fromDate, Calendar toDate, Double price);
}

UI: Android DataBinding (MVVM)

– Các widget sử dụng: Calendar Grid (không có sẵn, custom từ RecyclerView), TextView, EditText, Spinner, Date Picker (không có sẵn), Button, Menu

– Định nghĩa thêm 1 số custom BindingAdapter để có markup gọn gàng, dễ nhìn

Cần implement thêm cơ chế bi-direction binding hay còn gọi là two-way binding và hỗ trợ BindingAdapter cho Java Bean (chứ không phải POJO)

Cần implement 1 số converter để format output trên view: convert từ calendar ra string, double ra string,…

Html Parser: Jsoup, Async & Callback Pattern

Logic: theo phong cách functional programming, để có thể sử dụng lambda expression và stream như Java 8 thì Java 7 cần sử dụng thư viện retrolambda và stream thay thế, tuy là sẽ không đạt được parallel processing nhưng code sẽ khá gọn và không xa Android sẽ support tốt Java 8.

Dependency Manager: Gradle

Implement:

struct2 struct

Source code:

sẽ cập nhật tiếp

2016-02-16 23_50_40-cinetic - [E__code_android_cinetic] - [app] - ..._app_src_main_java_vn_adinao_ci

2016-02-16 23_50_59-Genymotion for personal use - PREVIEW - Google Nexus 5X - 6.0.0 - API 23 - 1080x

2016-02-16 23_52_38-Genymotion for personal use - PREVIEW - Google Nexus 5X - 6.0.0 - API 23 - 1080x

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s