GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
CHƯƠNG 2. CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG
2.1. Bài toán và yêu cầu:
Bài toán: Xây dựng ứng dụng trên máy điện thoại quản lý thu chi. Chương trình cho phép người dùng nhập, quản lý thu chi theo ngày/tháng; gửi dữ liệu đến email để lưu giữ.
Yêu cầu:
- Người dùng nhập thông tin các khoản thu/chi của mình theo ngày
- Thực hiện sao lưu dữ liệu thông qua phương thức gửi dữ liệu lưu trữ lên email.
- Thực hiện đồng bộ hóa dữ liệu của lần dùng trước khi dữ liệu đã bị xóa
2,2. Phân tích hệ thống:
2.2.1. Chức năng:
Use case mô tả chức năng cơ bản của hệ thống
Hệ thống chỉ có duy nhất một tác nhân là người sử dụng phần mềm, gồm các chức năng chính sau đây:
Quản lí thu chi theo ngày: Hiển thị danh sách các khoản thu/chi theo từng ngày, gồm các chức năng nhỏ đi kèm như:
Thêm mới một khoản thu/chi
Cập nhật một khoản thu/chi
Xóa một khoản thu/chi khỏi cơ sở dữ liệu
Thống kê theo tháng: Sẽ thực hiện việc thống kê tổng khoản thu/chi của tháng hiện tại và vẽ sơ đồ thể hiện mối tương quan giữa các khoản chi theo từng loại.
Gửi email lưu trữ dữ liệu: Hệ thống sẽ gửi email về người dùng có nội dung về các khoản thu/chi theo ngày được chọn kèm một tệp tin chứa cơ sở dữ liệu.
Phục hồi dữ liệu: Hệ thống sẽ nhận email và thực hiện đồng bộ hóa dữ liệu để phục hồi những dữ liệu đã bị xóa.
2.2.2. Thiết kế hệ thống
* Môi trường cài đặt
- Hệ điều hành: Window.
- Ngôn ngữ lập trình: Android - Công cụ: Android Studio - Cơ sở dữ liệu: SQLite - Thư viện sử dụng: JavaMail
2.2.3. Giao thức gửi mail SMTP:
*
Các bước thực hiện
Quy trình cài đặt các phương thức để gửi mail gồm các bước sau đây:
Bước 1: Cài đặt Properties: thông số khởi tạo Session
Bước 2: Tạo đối tượng Session: một phiên làm việc với Server Bước 3: Soạn thảo Message
Bước 4: Gửi Message
* Thông số kết nối
Muốn kết nối được đến một Mail Server thì cần phải xác định được địa chỉ, cổng, các phương thức kết nối. Mỗi Mail Server sẽ có các thông số khác nhau, được tìm thấy ở phần thông tin của Mail Server.
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
* Đối tượng Session
Session ở javamail được hiểu là 1 phiên làm việc khi Mail Client giao tiếp với Mail Server. Khi Mail Client làm việc với cùng một Server theo các cách khác nhau (các giao thức khác nhau cho các mục đích khác nhau) thì đối tượng Session sẽ lưu giữ những thông tin của phiên làm việc.
Trong Java, việc tạo đối tượng Session được tiến hành như sau:
session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { //Authenticating the password
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(Config.EMAIL, Config.PASSWORD);
} });
Trong đó: Config.EMAIL, Config.PASSWORD chính là tài khoản email cần đăng nhập.
* Gửi mail
Các bước khởi tạo thì sẽ dùng chung các phương thức như khi nhận mail.
Muốn gửi một email thì cần phải có các nội dung đầu vào như sau: người gửi, mật khẩu, người nhân, subject của email, nội dung email, các attachment.
Toàn bộ các thông tin trên được đóng gói vào một đối tượng MimeMessage rồi được gửi đi bằng phương thức:
Transport.send(message);
2.2.4. Giao thức nhận mail IMAP
* Các bước thực hiện
Quy trình cài đặt các phương thức để nhận mail gồm các bước sau đây:
Bước 1: Cài đặt Properties: thông số khởi tạo Session
Bước 2: Tạo đối tượng Session: một phiên làm việc với Server Bước 3: Tạo đối tượng Store, kết nối với Server
Bước 4: Lấy Message
Bước 5: If Message khác rỗng then Đọc Message
*
Thông số kết nối
Muốn kết nối được đến một Mail Server thì cần phải xác định được địa chỉ, cổng, các phương thức kết nối. Mỗi Mail Server sẽ có các thông số khác nhau, được tìm thấy ở phần thông tin của Mail Server.
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imaps.host", "imaps.gmail.com");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.imaps.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imaps.socketFactory.fallback", "false");
* Đối tượng Store
Đối tượng Store chứa thông tin kho chứa email và các phương thức truy cập vào nó. Đối tượng này được dùng để lưu hoặc lấy email.
Cách khởi tạo:
store = session.getStore("imaps");
Trong đó: tham số là giao thức truy cập. Tham số “imaps” thể hiện ở đây dùng giao thức IMAP.
* Lấy Message chứa tệp dữ liệu
Mỗi đối tượng Message chứa thông tin của một tin nhắn email.
Với giao thức IMAP, chúng ta có thể lấy các Message trong từng folder cụ thể. Điều này với POP3 thì không thể, POP3 chỉ lấy từ hộp thư INBOX.
Mỗi Mail Server có cách đặt tên mail folder khác nhau.
Một Message chứa các thông tin như: địa chỉ gửi, địa chỉ nhận, Subject, nội dung mail…
Sau khi lấy được các Message, việc tiếp theo chúng ta cần làm là chuyển các thông tin này thành các thông tin cụ thể thông qua cài đặt lớp nội dung Mail riêng.
Nội dung Mail có thể có nhiều dạng khác nhau nên cần phải có một phương thức để hiển thị đúng nội dung đó. Ví dụ: không thể đọc kiểu html và kiểu text/plain bằng cách giống nhau được.
Ví dụ một phương thức đọc nội dung Message:
Message[] msgs =inbox.getMessages();
m=(Multipart)msgs[inbox.getMessageCount()-1].getContent();
for(int i=0;i<m.getCount();i++) { bp = m.getBodyPart(i);
disposition = bp.getDisposition();
if(disposition!=null && (disposition.equals("ATTACHMENT"))){
fileName = bp.getFileName();
String str = (String)bp.getContent();
base64dec = new ByteArrayInputStream(str.getBytes());
String dir = Environment.getExternalStorageDirectory();
OutputStream output = new FileOutputStream(dir+"/"+fileName);
byte data[] = new byte[8192];
long total = 0;
int count;
while ((count = base64dec.read(data)) != -1){
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();base64dec.close();
} }
2.3. Xây dựng ứng dụng
Phần trên đây đã giới thiệu về gửi mail và nhận mail, là hai phương thức nền móng của ứng dụng liên quan đến kiến thức cơ sở mạng.
Ngoài ra quan trọng hơn nữa là cần phải xây dựng giao diện và các lớp xử lí để ứng dụng trở thành một phần mềm quản lí thu chi theo ngày / tháng. Ứng dụng có giao diện được xây dựng bằng Android.