Bối cảnh và vấn đề nghiên cứu

Đồ án môn học "Ứng dụng quản lí chi tiêu cá nhân" được thực hiện trong khuôn khổ học phần Phát triển phần mềm hướng dịch vụ tại Khoa Công nghệ Thông tin 2, Học viện Công nghệ Bưu chính Viễn thông (Cơ sở TP. Hồ Chí Minh). Đề tài do nhóm sinh viên gồm Nguyễn Văn Chung, Nguyễn Đăng Hậu, Nguyễn Thành Phong và Lương Đình Khang thực hiện dưới sự hướng dẫn của ThS. Huỳnh Trung Trụ vào tháng 06 năm 2022.

Bối cảnh thực tiễn của đề tài xuất phát từ nhu cầu quản lý tài chính cá nhân, theo dõi các khoản thu chi hằng ngày, quản lý ngân sách dự kiến, kiểm soát các tài khoản ngân hàng và thiết lập các mục tiêu tiết kiệm tích lũy. Để giải quyết bài toán này, nhóm tác giả định hướng xây dựng một giải pháp phần mềm hướng dịch vụ, cho phép kết nối tập trung giữa máy chủ xử lý dữ liệu với các ứng dụng phía người dùng trên nhiều nền tảng.

Mục tiêu và nhiệm vụ nghiên cứu cụ thể của đồ án bao gồm:

  1. Thiết kế và đặc tả cơ sở dữ liệu quan hệ phục vụ nghiệp vụ quản lý tài chính cá nhân.
  2. Xây dựng dịch vụ giao diện lập trình ứng dụng (REST API) trên ngăn xếp máy chủ web phục vụ việc trao đổi dữ liệu.
  3. Phát triển các ứng dụng khách (Client) bao gồm ứng dụng di động Android và ứng dụng nền tảng Web tương tác trực tiếp với hệ thống API.
  4. Triển khai các tính năng nghiệp vụ: quản lý danh mục thu/chi, quản lý giao dịch, tạo sao kê, quản lý tài khoản ngân hàng, lập kế hoạch ngân sách, thiết lập mục tiêu và phân quyền quản trị hệ thống.

Đối tượng nghiên cứu của đề tài là quy trình quản lý chi tiêu cá nhân và kiến trúc phần mềm hướng dịch vụ dựa trên REST API. Phạm vi nghiên cứu tập trung vào việc thiết kế kỹ thuật, lập trình hệ thống máy chủ và các client truy cập trong môi trường học tập và thử nghiệm.


Cơ sở lý thuyết và phương pháp

Khung lý thuyết và mô hình kiến trúc

Đồ án ứng dụng các mô hình và khái niệm công nghệ phần mềm tiêu chuẩn trong việc thiết kế hệ thống hướng dịch vụ:

  • Kiến trúc REST API (Representational State Transfer): Sử dụng các phương thức chuẩn của giao thức HTTP (GET, POST, PUT, DELETE) để thực hiện các thao tác trên tài nguyên. Dữ liệu trao đổi giữa máy chủ và máy khách được định dạng chủ yếu qua JSON hoặc XML, thay thế cho các giải pháp dịch vụ web truyền thống như SOAP hay WSDL.
  • Mô hình MVC (Model - View - Controller): Được áp dụng trong môi trường phát triển máy chủ PHP. Lớp Model đảm nhận việc giao tiếp và truy vấn cơ sở dữ liệu; lớp View chịu trách nhiệm biểu diễn giao diện dữ liệu; lớp Controller điều phối luồng hoạt động, tiếp nhận yêu cầu từ client và trả về kết quả tương ứng.
  • Mô hình MVVM (Model - View - ViewModel): Được áp dụng cho phát triển ứng dụng di động (Android/iOS). Trong đó, View tương tác chủ động thông qua cơ chế Data Binding và Command; Model quản lý đối tượng dữ liệu; ViewModel đóng vai trò trung gian chứa mã lệnh liên kết, áp dụng mẫu thiết kế Observer (Observer pattern) và lập trình phản ứng (Reactive Programming / Event Data Stream) để đồng bộ dữ liệu mà không phụ thuộc trực tiếp vào View.
  • Ngăn xếp máy chủ LAMP (Linux - Apache - MySQL - PHP): Mô hình hệ thống gồm hệ điều hành Linux làm nền tảng, web server Apache tiếp nhận và xử lý yêu cầu HTTP, hệ quản trị cơ sở dữ liệu MySQL lưu trữ thông tin, và ngôn ngữ PHP thực thi logic nghiệp vụ kết nối dữ liệu.

Phương pháp nghiên cứu và kỹ thuật thực hiện

Nhóm tác giả sử dụng phương pháp thiết kế và thực nghiệm hệ thống phần mềm kỹ thuật:

  • Phương pháp phân tích và thiết kế hệ thống: Khảo sát các chức năng tài chính cá nhân cần thiết, phân rã chức năng thành các dịch vụ độc lập và mô hình hóa cấu trúc bảng dữ liệu quan hệ.
  • Phương pháp xây dựng dịch vụ mạng: Thiết kế giao diện API thống nhất với định dạng phản hồi chuẩn hóa, cơ chế xác thực JWT và các tham số lọc, phân trang dữ liệu.
  • Nguồn dữ liệu: Dữ liệu thử nghiệm được tạo lập trực tiếp trong hệ thống cơ sở dữ liệu MySQL thông qua các giao dịch mô phỏng, danh mục chi tiêu, tài khoản và mục tiêu tài chính.

Thiết kế và triển khai

Ngăn xếp công nghệ và môi trường máy chủ

Hệ thống máy chủ ứng dụng được triển khai trên nền tảng LAMP:

  • Hệ điều hành: Linux cung cấp môi trường vận hành máy chủ.
  • Máy chủ web: Apache tiếp nhận yêu cầu từ các client và chuyển tiếp cho module xử lý.
  • Cơ sở dữ liệu: MySQL thực hiện lưu trữ toàn bộ cấu trúc dữ liệu người dùng và giao dịch.
  • Ngôn ngữ xử lý máy chủ: PHP kết nối CSDL, xử lý các nghiệp vụ và trả kết quả về cho Apache.

Thiết kế cơ sở dữ liệu

Hệ thống sử dụng cơ sở dữ liệu quan hệ với các bảng được định danh bằng tiền tố mp_ (MoneyPro):

Tên bảng Mô tả chức năng
mp_users Lưu trữ danh sách thông tin người dùng trong hệ thống.
mp_accounts Lưu danh sách tài khoản ngân hàng (tên, mô tả, số tài khoản, số dư hiện có; không lưu mật khẩu).
mp_categories Lưu danh mục thể loại giao dịch (mua sắm, ăn uống, v.v.).
mp_transactions Lưu trữ danh sách các giao dịch thu nhập và chi tiêu của người dùng.
mp_budgets Lưu trữ ngân sách chi tiêu dự kiến cho từng khoản mục.
mp_goals Lưu trữ các mục tiêu tài chính cần tích lũy và đạt được.
mp_notifications Lưu trữ các thông báo hệ thống gửi tới người dùng.
mp_general_data Lưu trữ các thông tin cấu hình và dữ liệu chung của hệ thống.

Cơ chế xác thực và quy ước giao tiếp REST API

  • Xác thực: Sử dụng chuỗi mã hóa JSON Web Token truyền qua tiêu đề yêu cầu: Authorization: JWT <token>.
  • Chính sách tải (Rate limit): Do phục vụ mục đích học tập và kiểm thử phi thương mại, hệ thống không áp dụng giới hạn tần suất gửi yêu cầu.
  • Quy ước mã phản hồi: Tất cả các yêu cầu gửi đến API đều trả về HTTP Status Code 200. Trạng thái thành công hay thất bại của nghiệp vụ được nhận biết thông qua trường dữ liệu result trong thân phản hồi JSON.

Cấu trúc đối tượng JSON phản hồi chuẩn gồm các thuộc tính:

  • result: Giá trị số nguyên (0: thất bại, 1: thành công).
  • msg: Chuỗi thông báo kết quả thực thi đến người dùng.
  • method: Phương thức HTTP đã thực hiện (GET, POST, PUT, DELETE).
  • data: Mảng hoặc đối tượng chứa dữ liệu trả về theo từng yêu cầu cụ thể.

Nội dung chính theo từng chương

Chương 1: MÔ TẢ HỆ THỐNG

Nội dung chương này trình bày mô hình sơ đồ tổng quát và đặc tả các bảng cơ sở dữ liệu phục vụ hệ thống quản lý chi tiêu. Bên cạnh đó, tác giả phân tích cơ sở lý thuyết về kiến trúc phần mềm được áp dụng:

  • Định nghĩa và nguyên lý hoạt động của REST API trong việc chuyển đổi cấu trúc dữ liệu qua giao thức HTTP.
  • Cấu trúc phân tầng của mô hình MVC trong PHP gồm Model (quản trị dữ liệu), View (giao diện hiển thị) và Controller (điều phối luồng xử lý và tiếp nhận request).
  • Cấu trúc và nguyên lý của mô hình MVVM trong phát triển ứng dụng di động Android/iOS, nhấn mạnh vai trò độc lập của ViewModel và cơ chế liên kết dữ liệu hai chiều thông qua mẫu thiết kế Observer.

Chương 2: MÔI TRƯỜNG MÁY CHỦ WEBSERVER

Chương 2 mô tả chi tiết về ngăn xếp phần mềm LAMP phục vụ việc triển khai hệ thống dịch vụ:

  • Mô tả vai trò nền tảng của hệ điều hành Linux trong việc hỗ trợ các lớp ứng dụng.
  • Cơ chế tiếp nhận và chuyển tiếp yêu cầu của máy chủ HTTP Apache.
  • Vai trò lưu trữ thông tin của hệ quản trị cơ sở dữ liệu MySQL.
  • Luồng thực thi nghiệp vụ của PHP khi kết nối cơ sở dữ liệu, tiếp nhận truy vấn từ Apache và trả kết quả cho máy khách.

Chương 3: CÁC CLIENT, APPLICATION TRUY CẬP API

Chương 3 trình bày chi tiết về giao diện và chức năng của các ứng dụng người dùng cuối truy cập vào hệ thống API:

  • Ứng dụng di động Android:
    • Cấu trúc Activity: Home Activity đóng vai trò điều phối chính và quản lý các Fragment; Introduce Activity hiển thị giới thiệu trong lần đầu mở ứng dụng; Main Activity phục vụ chức năng đăng nhập hỗ trợ 3 hình thức khác nhau.
    • Phân hệ chức năng: Quản lý giao dịch thu nhập/chi tiêu và tạo sao kê theo chuẩn Ngân hàng Nhà nước; Quản lý thẻ/tài khoản ngân hàng (Card); Tạo danh mục thu/chi (Category); Quản lý mục tiêu tiết kiệm (Goal); Hiển thị thông báo trên thanh cài đặt nhanh (Notification); Hỗ trợ giao diện tối (Dark Mode).
  • Ứng dụng Web:
    • Giao diện tương tác: Giao diện đăng nhập, nhớ mật khẩu, quên mật khẩu và quy trình đổi mật khẩu; Giao diện Dashboard tích hợp thanh điều hướng, thanh sáng nhận diện vị trí, tổng hợp số dư và biểu đồ giao dịch theo tháng/năm; Quick menu hỗ trợ nhập nhanh giao dịch và ngân sách.
    • Nghiệp vụ tài chính: Quản lý giao dịch thu nhập và chi tiêu kèm tính năng nhập dữ liệu hàng loạt qua tệp tin CSV; Quản lý thông tin tài khoản ngân hàng; Quản lý danh sách ngân sách dự kiến; Quản lý mục tiêu tiết kiệm tài chính; Giao diện xem lịch sử giao dịch theo ngày/tháng/năm; Phân hệ thống kê, lọc báo cáo theo loại giao dịch, tài khoản và thời gian.
    • Nghiệp vụ quản trị và cài đặt: Phân quyền quản trị viên (Admin) cho phép quản lý tài khoản người dùng trên ứng dụng và website; Quản lý danh mục thể loại; Quản lý hồ sơ cá nhân (Profile), cấu hình hệ thống và thiết lập máy chủ thư điện tử qua giao thức SMTP.

Chương 4: REST API

Chương 4 cung cấp tài liệu kỹ thuật đặc tả các điểm cuối (endpoints) của hệ thống dịch vụ MoneyPro (tài liệu trực tuyến tại https://bitly.vn/ndz4xl):

  • Phân loại danh mục thu/chi: Hệ thống quy ước giá trị loại giao dịch gồm Thu nhập (Income - giá trị 1) và Chi tiêu (Expense - giá trị 2).
  • Nhóm API Thể loại (Categories):
    • GET /api/incomecategories: Lấy danh sách thể loại thu nhập (hỗ trợ các tham số order[column], order[dir], start, length, search).
    • POST /api/incomecategories: Thêm mới thể loại thu nhập (các trường name, description, color).
    • PUT /api/incomecategories/{id}: Chỉnh sửa thông tin thể loại.
    • DELETE /api/incomecategories/{id}: Xóa thể loại khỏi hệ thống.
    • GET /api/incomecategories/{id}: Lấy thông tin chi tiết một thể loại.
    • GET /api/expensecategories: Lấy danh sách thể loại chi tiêu có phân trang và tìm kiếm.
  • Nhóm API Tài khoản (Accounts):
    • GET /api/accounts: Lấy danh sách tài khoản ngân hàng của người dùng (trả về các trường id, name, description, balance, accountnumber).
    • POST /api/accounts: Tạo mới tài khoản với số dư và số tài khoản ban đầu.
    • PUT /api/accounts/{id}: Cập nhật thông tin tài khoản ngân hàng.
    • DELETE /api/accounts/{id}: Xóa tài khoản và các giao dịch liên quan.
    • GET /api/accounts/{id}: Xem chi tiết thông tin và ngày cập nhật của tài khoản.
    • GET /api/accounts/getaccounttransaction/{id}: Lấy danh sách lịch sử giao dịch gắn liền với một tài khoản cụ thể.
  • Nhóm API Mục tiêu (Goals):
    • GET /api/goals: Lấy danh sách mục tiêu tiết kiệm, hỗ trợ lọc theo trạng thái (status), khoảng thời gian (dateFrom, dateTo), sắp xếp và phân trang.
    • PUT /api/goals/{id}: Cập nhật thông tin và tiến độ nạp tiền vào mục tiêu tiết kiệm.

Kết quả và đóng góp

Kết quả triển khai

  1. Thiết kế hoàn chỉnh dịch vụ REST API: Xây dựng hệ thống giao diện lập trình ứng dụng hoạt động trên ngăn xếp LAMP, đáp ứng đầy đủ các thao tác CRUD (Create, Read, Update, Delete) cho các thực thể người dùng, tài khoản, thể loại, giao dịch và mục tiêu.
  2. Xây dựng hệ thống đa ứng dụng khách:
    • Triển khai ứng dụng Android theo mô hình MVVM với cấu trúc nhiều Activity, hỗ trợ giao diện Dark Mode và khả năng xuất sao kê dữ liệu.
    • Triển khai ứng dụng Web với bảng điều khiển trực quan, hỗ trợ nhập dữ liệu giao dịch nhanh thông qua định dạng file CSV và phân hệ quản trị người dùng, cấu hình SMTP.
  3. Chuẩn hóa quy trình nghiệp vụ tài chính: Thiết lập cơ chế phân tách rõ ràng giữa hai luồng tiền Thu nhập (type: 1) và Chi tiêu (type: 2), liên kết trực tiếp với các tài khoản thanh toán và các mốc tiết kiệm mục tiêu.

Đóng góp kỹ thuật của đề tài

  • Cung cấp giải pháp phần mềm hướng dịch vụ cho bài toán quản lý tài chính cá nhân, cho phép nhiều loại client (Web, Android) chia sẻ chung một nguồn tài nguyên và logic xử lý từ máy chủ.
  • Hiện thực hóa việc ứng dụng kết hợp giữa mô hình MVC ở tầng dịch vụ web backend và mô hình MVVM ở tầng ứng dụng di động client.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế được ghi nhận

  • Hệ thống API được thiết kế nhằm mục đích học tập và kiểm thử nội bộ, chưa được tối ưu hóa thương mại và chưa cấu hình cơ chế giới hạn tần suất gọi dịch vụ (Rate limit).
  • Cơ chế mã trạng thái HTTP chưa áp dụng đầy đủ các mã lỗi tiêu chuẩn (như 400 Bad Request, 401 Unauthorized, 404 Not Found, 500 Internal Server Error) mà quy ước trả về mã 200 cho toàn bộ các request, sau đó phân biệt trạng thái qua trường dữ liệu nội dung result.
  • Nhóm tác giả tự đánh giá vốn kiến thức thực tế còn hạn chế, dẫn đến việc báo cáo và triển khai kỹ thuật khó tránh khỏi những điểm thiếu sót; phân hệ ứng dụng trên nền tảng iOS mới chỉ dừng lại ở mục tiêu kiến trúc, chưa được mô tả chi tiết giao diện như phiên bản Android và Web.

Hướng phát triển tiếp

  • Hoàn thiện việc triển khai client trên nền tảng iOS theo thiết kế kiến trúc MVVM đã đề ra.
  • Chuẩn hóa mã phản hồi HTTP theo đúng chuẩn RESTful API quốc tế.
  • Tích hợp thêm các giải pháp bảo mật nâng cao và thiết lập cơ chế Rate limiting phục vụ việc mở rộng thương mại hóa.

Giá trị tham khảo

Báo cáo đồ án môn học này là tài liệu tham khảo phù hợp cho:

  • Sinh viên ngành Công nghệ Thông tin và Kỹ thuật Phần mềm: Đặc biệt là sinh viên theo học các học phần về Phát triển phần mềm hướng dịch vụ, Lập trình ứng dụng Web và Lập trình thiết bị di động.
  • Người nghiên cứu xây dựng ứng dụng tài chính cá nhân: Tham khảo cấu trúc cơ sở dữ liệu phân tầng (mp_users, mp_accounts, mp_transactions, mp_goals, mp_budgets) và các thông số quản lý dòng tiền.
  • Lập trình viên tham khảo thiết kế REST API: Cung cấp tài liệu mẫu về cấu trúc endpoints, tham số phân trang, sắp xếp và cách định dạng JSON phản hồi giữa client và server.

Câu hỏi thường gặp

1. Hệ thống REST API của đồ án sử dụng cơ chế xác thực nào và quy ước phản hồi dữ liệu ra sao?
Hệ thống sử dụng cơ chế xác thực JWT thông qua tiêu đề yêu cầu Authorization: JWT <token>. Tất cả các request đều trả về mã trạng thái HTTP 200, trong đó kết quả thực thi được quy ước qua thuộc tính result trong thân JSON (1 là thành công, 0 là thất bại), đi kèm thông điệp msg, phương thức method và mảng dữ liệu data.

2. Cơ sở dữ liệu của ứng dụng gồm những bảng chính nào và chức năng của từng bảng là gì?
Cơ sở dữ liệu gồm 8 bảng với tiền tố mp_: mp_users (danh sách người dùng), mp_accounts (tài khoản ngân hàng và số dư), mp_categories (thể loại giao dịch), mp_transactions (danh sách giao dịch thu/chi), mp_budgets (ngân sách dự kiến), mp_goals (mục tiêu tiết kiệm), mp_notifications (thông báo hệ thống) và mp_general_data (dữ liệu cấu hình chung).

3. Những mô hình kiến trúc phần mềm nào đã được áp dụng trong đồ án?
Đồ án áp dụng kiến trúc hướng dịch vụ REST API kết nối giữa các thành phần. Phía máy chủ PHP sử dụng mô hình kiến trúc MVC (Model - View - Controller). Phía ứng dụng khách di động (Android / iOS) sử dụng mô hình MVVM (Model - View - ViewModel) kết hợp với mẫu thiết kế Observer và lập trình phản ứng (Reactive Programming).

4. Phân hệ Web của hệ thống cung cấp những tính năng nổi bật nào cho người dùng và quản trị viên?
Phân hệ Web cung cấp bảng điều khiển (Dashboard) thống kê số dư, tính năng thêm/xóa/sửa giao dịch thu nhập và chi tiêu, tính năng import dữ liệu giao dịch nhanh bằng tệp tin CSV, quản lý ngân sách, quản lý mục tiêu, xem lịch giao dịch và in báo cáo. Đối với quản trị viên (Admin), hệ thống hỗ trợ quản lý danh sách tài khoản người dùng, quản lý thể loại và cấu hình cài đặt email SMTP.

5. Ứng dụng Android trong đồ án được cấu trúc như thế nào và có những tính năng đặc thù gì?
Ứng dụng Android được tổ chức qua các Activity gồm Home Activity (màn hình chính điều phối các Fragment), Introduce Activity (màn hình giới thiệu khi mở ứng dụng lần đầu) và Main Activity (màn hình đăng nhập hỗ trợ 3 hình thức). Ứng dụng tích hợp các tính năng: quản lý thu chi, tạo sao kê dữ liệu theo chuẩn Ngân hàng Nhà nước, quản lý thẻ/số dư, tạo mục tiêu tiết kiệm, hiển thị thông báo trên quick-setting và hỗ trợ chế độ nền tối (Dark Mode).


Kết luận

Đồ án môn học "Ứng dụng quản lí chi tiêu cá nhân" của nhóm sinh viên Khoa Công nghệ Thông tin 2, Học viện Công nghệ Bưu chính Viễn thông Cơ sở TP.HCM đã hoàn thành việc xây dựng một hệ thống phần mềm hướng dịch vụ đa nền tảng. Báo cáo đã đặc tả chi tiết kiến trúc máy chủ web LAMP, thiết kế cơ sở dữ liệu quan hệ, hệ thống REST API xác thực JWT và các phân hệ ứng dụng khách trên Android và Web. Mặc dù hệ thống còn một số hạn chế về chuẩn hóa mã lỗi HTTP và tính năng thử nghiệm phi thương mại, công trình đã thể hiện đầy đủ các nguyên lý lập trình phân tầng MVC/MVVM và cung cấp tài liệu tham khảo có giá trị kỹ thuật thực tiễn cho các đề tài phát triển phần mềm tương tự.