Người dùng bình thường có thể thực hiện các công việc: Thêm các giao dịch Add Trasaction Quản lý các khoản chi chung Manage Project Xem các thống kê, báo cáo Statistic Thay đổi
Trang 1VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ────────
BÀI TẬP LỚN
PROJECT 1
ĐỀ TÀI 15:
Xây dựng hệ thống quản lý chi tiêu cho các
thành viên trong gia đình
Sinh viên thực hiện : Lê Trung Hiếu 20111568
Đỗ Đăng Hiển 20111581 Phạm Văn Đại 20111363
Giáo viên hướng dẫn : TS Vũ Thị Hương Giang
ThS Nguyễn Ngọc Dũng
Trang 2MỤC LỤC
CHƯƠNG 1 KHẢO SÁT, ĐẶC TẢ YÊU CẦU BÀI TOÁN 6
1.1 Mô tả yêu cầu bài toán 6
1.2 Biểu đồ use case 7
1.2.1 Biểu đồ use case tổng quan 7
1.3 Đặc tả use case với biểu đồ usecase phân rã mức 2 8
1.3.1 Add Transaction 8
1.3.2 Manage Project 9
1.3.3 Statistic 11
CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ BÀI TOÁN 12
2.1 Thiết kế Cơ sở dữ liệu 12
2.2 Biểu đồ lớp 13
2.2.1 Tầng Model 14
2.2.2 Tầng Control 14
2.2.3 Tầng NewGUI 14
2.3 ImportExport Thiết kế chi tiết lớp 16
2.3.1 Lớp Database 16
2.3.2 Lớp ImportExport 16
2.3.3 Lớp User 18
CHƯƠNG 3 CÔNG NGHỆ VÀ THUẬT TOÁN SỬ DỤNG 19
3.1 Các công nghệ được sử dụng 19
3.1.1 Công nghệ Java 19
3.1.2 Cơ sở dữ liệu 19
3.2 Kiến thức áp dụng để xây dựng chương trình 19
3.2.1 Cơ sở dữ liệu 19
3.2.2 Thiết kế giao diện xử lý sự kiện, tạo mã nguồn 20
CHƯƠNG 4 XÂY DỰNG CHƯƠNG TRÌNH MINH HỌA 21
4.1 Giao diện chương trình 21
4.1.1 Login , Preferences 21
4.1.2 MainUI 22
4.1.3 Category manager 23
4.1.4 Account manager 24
4.1.5 Transaction 24
4.1.6 Project 26
4.1.7 Statistics 28
4.2 Kết quả chương trình minh họa 30
Trang 3Hướng phát triển 32
TÀI LIỆU THAM KHẢO 33
PHỤ LỤC 34
Trang 4LỜI NÓI ĐẦU
Việc ứng dụng công nghệ thông tin vào cuộc sống đã trở thành hoạt động không thể thiếu của con người trong thời kì công nghiệp hóa, hiện đại hóa Hiện nay, việc quản
lý chi tiêu của gia đình có thể được thực hiện một cách đơn giản, hiệu quả hơn với việc sử dụng các phần mềm tin học Việc lưu trữ, quản lý bằng máy tính giúp giải phóng con người khỏi các công việc ghi chép và tính toán bằng giấy bút, giảm sự nhầm lẫn khi tính toán
Xuất phát từ thực tế việc chi tiêu hàng ngày của bản thân và gia đình, nhóm chũng
em đã phân tích những vấn đề thường xảy ra trong quản lí chi tiêu gia đình và thấy được
sự cần thiết của phần mềm quản lý chi tiêu cho các thành viên Nếu có phần mềm tốt, các thành viên sẽ dễ dàng quản lí việc chi tiêu của mình cũng như có được thông tin cần thiết của những thành viên khác, qua đó tạo sự đoàn kết, thống nhất trong gia đình Đó chính là
lí do chúng em đã chọn đề tài 15 “Xây dựng hệ thống quản lý chi tiêu cho các thành viên trong gia đình”
Chúng em đã thiết kế hệ thống chương trình, cơ sở dữ liệu và tiến hành cài đặt, hoàn thiện hệ thống dựa trên các dữ liệu thực tế về chi tiêu trong gia đình, kiến thức được các thầy cô giảng dạy trên lớp về cơ sở dữ liệu, lập trình, quản lí dự án phần mềm… Sản phẩm của đề tài là kết quả sự nỗ lực của tất cả thành viên trong nhóm
Để hoàn thành được đề tài này, nhóm chúng em xin được gửi lời cảm ơn chân thành đến:
Cô Vũ Thị Hương Giang, thầy Nguyễn Ngọc Dũng - giảng viên Khoa Công nghệ Thông tin và Truyền thông Trường Đại học Bách Khoa Hà Nội
- đã hết lòng giúp đỡ, hướng dẫn, chỉ dạy tận tình để nhóm em hoàn thành được đề tài này
Các thầy cô giảng dạy các học phần của ngành Công nghệ thông tin và truyền thông đã cung cấp những kiến thức quý báu để chúng em ứng dụng vào đề tài này
Các bạn cùng lớp Project 1 đã góp ý và giúp đỡ chúng em trong quá trình làm đề tài này
Hà Nội, tháng 12 năm 2013
Nhóm 4, Lớp 65310
1 Lê Trung Hiếu
Trang 5PHÂN CÔNG THÀNH VIÊN TRONG NHÓM
Lê Trung Hiếu Hiệu chỉnh cơ sở dữ liệu và các chức năng hệ
thống
Tuần 2 - 8
Cài đặt các lớp:
- InfoImportExport tầng Model
- ImportExport, User tầng Control
- AddTransaction, Account tầng NewGUI
Tuần 8 - 11
Đỗ Đăng Hiển Thiết kế cơ sở dữ liệu và các chức năng Tuần 2 - 8
Cài đặt thử nghiệm bản mẫu chương trình Tuần 2 – 8
Cài đặt các lớp:
- InfoUser, Infoconfig tầng Model
- Database, ComboxRender, rsTableModel tầng Control
- Login, MainUI, Statistic, Filter, Category, Prefecense, DataGeneration tầng NewGUI
Tuần 8 - 11
Phạm Văn Đại Góp ý thiết kế chức năng hệ thống và cơ sở dữ liệu Tuần 2 - 8
Cài đặt các lớp
- Project tầng NewGUI
Tuần 8 - 11 Kiểm thử chương trình và viết báo cáo kiểm thử Tuần 12
Trang 6CHƯƠNG 1 KHẢO SÁT, ĐẶC TẢ YÊU CẦU
BÀI TOÁN
1.1 Mô tả yêu cầu bài toán
Bài toán đặt ra là xây dựng được hệ thống quản lí chi tiêu với các chức năng cần thiết cho việc quản lý chi tiêu của gia đình, tiện lợi cho việc tra cứu, tổng hợp thông tin chi tiêu Người dùng có thể quản lý thông tin chi tiêu của mình và có thể chia sẻ thông tin với thành viên khác trong gia đình Hệ thống cũng cần cung cấp
cả chức năng thống kê, báo cáo, tìm kiếm theo yêu cầu người dùng
Các chức năng quản lý chi tiêu cơ bản
Người dùng có thể lưu lại các thông tin chi tiêu hàng ngày Các thông tin lưu trữ cho một phần chi tiêu bao gồm: thời gian, lý do, mục chi tiêu, hình ảnh liên quan…
Các danh mục chi tiêu có thể được tạo ra bởi người dùng một cách linh hoạt
Có chức năng tìm kiếm theo tên, ngày tháng, mô tả…
Có chức năng đánh tag phục vụ cho tìm kiếm
Chức năng phân quyền người dùng, yêu cầu đăng nhập hệ thống Mỗi người sử dụng có một tên đăng nhập và mật khẩu riêng, có thể sửa đổi thông tin cá nhân của mình và được xem một số thông tin của những người dùng khác Trong số người dùng có người dùng đặc biệt (admin) có quyền xem thông tin cá nhân và được phép sửa đổi thông tin của những người dùng khác
Chức năng thống kê, đánh giá theo các khoảng thời gian nhất định, theo các loại khoản mục chi tiêu Người dùng có thể chọn khoảng thời gian, chọn loại chi tiêu cần quan tâm và hệ thống sẽ hiển thị những khoản mục mà người dùng được phép thấy
Chức năng vẽ biểu đồ và lập báo cáo: giúp người dùng hình dung một cách trực quan về tình hình chi tiêu của bản thân và gia đình
Ngoài ra hệ thống cần cung cấp chức năng tạo lập và kiểm soát các khoản chi tiêu chung (project)
Trang 71.2 Biểu đồ use case
1.2.1 Biểu đồ use case tổng quan
Biểu đồ usecase tổng quan thể hiện các chức năng chính của hệ thống và sự phân cấp người dùng
Người dùng bình thường có thể thực hiện các công việc:
Thêm các giao dịch (Add Trasaction)
Quản lý các khoản chi chung (Manage Project)
Xem các thống kê, báo cáo (Statistic)
Thay đổi, xóa giao dịch (Update, Delete Transaction)
Sửa đổi thông tin cá nhân (Update Personal Information) (của chính mình)
Admin cũng là một người dùng, có đủ các chức năng của người dùng và có thêm các chức năng quản lí tài khoản (Manage Account) và thêm các loại khoản mục chi tiêu (Add Category)
Trang 81.3 Đặc tả use case với biểu đồ usecase phân rã mức 2
Một số usecase phức tạp sẽ được trình bày chi tiết:
1.3.1 Add Transaction
Người dùng khi muốn thêm một giao dịch cần chuẩn bị thông tin theo mẫu cho trước (Provide Information), sau đó tiến hành xác nhận giao dịch (Confirm
Transaction)
Thông tin người dùng đưa vào cần có thời gian, số tiền, loại chi tiêu… Người dùng
có thể thiết lập quyền nhìn thấy giao dịch cho những người dùng khác (Set
Sharing)
Khi người dùng xác nhận thêm giao dịch, hệ thống sẽ kiểm tra các thông tin có hợp
lệ hay không và có thể xảy ra hai trường hợp:
Thông tin hợp lệ: Tiến hành hoàn thiện việc thêm giao dịch vào cơ sở dữ liệu (Complete)
Thông tin không hợp lệ: Báo lỗi cho người dùng (Error)
Trang 9Biểu đồ hoạt động
1.3.2 Manage Project
Người dùng có thể thêm một khoản chi tiêu chung (project), đóng góp một vào một project, khẳng định hay xóa bỏ một project do mình tạo
Trang 10 Khi tạo một project, người dùng sẽ xác định ngày bắt đầu, ngày kết thúc, số tiền cần, số tiền đóng góp ban đầu của mình, sau đó đề xuất để những người dùng khác tham gia đóng góp thêm (giai đoạn gây quỹ)
Khi project đã đủ tiền, người tạo project sẽ xác nhận và các khoản chi được chính thức đưa vào danh sách các chi tiêu của những người tham gia
Khi project hết hạn mà không đủ tiền đóng góp thì project sẽ không được hoàn thành
Trong giai đoạn gây quỹ nếu người tạo project không muốn tiếp tục project thì
có thể xóa bỏ project đó
Người dùng có thể thấy các project và tham gia đóng góp Chức năng lọc thông tin project (Filter) được tích hợp khi xem thông tin project, có thể lọc theo ngày bắt đầu hoặc trạng thái project
Trang 11 Các chức năng lọc văn bản: dựa trên thông tin mô tả các khoản thu chi
Các chức năng lọc đa trị: chọn được nhiều giá trị từ danh sách
Các chức năng lọc với điều kiện loại trừ (không thống kê một hay nhiều người dùng, một hay nhiều loại hạng mục chi tiêu…)
Khi xem các khoản thu chi, người dùng có thể tiến hành thay đổi thông tin của khoản thu chi đó (bấm chuột phải vào khoản thu chi sẽ hiện ra tùy chọn xóa, cập nhật…)
Chức năng sắp xếp thông tin: Người dùng có thể chọn một thuộc tính của các khoản thu chi và tiến hành sắp xếp theo ý mình
Với chức năng vẽ biểu đồ, việc thống kê sẽ trực quan hơn với các biểu đồ theo năm, tháng, loại thu chi…
Ngoài ra hệ thống còn tính tổng tiền thu chi của người dùng để hiển thị ngay khi đăng nhập
Trang 12CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ BÀI TOÁN
2.1 Thiết kế Cơ sở dữ liệu
Cơ sở dữ liệu bao gồm các bảng đã chỉ ra trên hình vẽ, trong đó các bảng quan trọng là:
Bảng user lưu trữ thông tin về những người dùng (username, passWord, gender, -birthday…) và có thêm khóa chính id là chỉ số người dùng khi tạo
Hai bảng importing và exporting lưu trữ các khoản thu và chi (các giao dịch) của tất cả những người dùng, có thể lưu ngày tháng, giá trị, loại khoản chi tiêu (tham chiếu tới import_type và export_type), các thông tin mô tả chi tiết…
Các hàng của bảng có tham chiếu đến bảng user để xác định khoản thu chi thuộc người dùng nào
Ngoài ra còn có trường share cho biết khoản chi tiêu đó có được cho phép người khác nhìn thấy hay không Nếu trường này khác 0 thì thông tin về những người được phép nhìn thấy giao dịch này sẽ được thể hiện trong bảng share
Bảng share với các hàng chỉ ra chỉ số khoản thu chi và chỉ số người dùng có thể nhìn thấy khoản thu chi đó, cùng trường type_id để xác định là thu hay chi
Bảng project lưu trữ các thông tin về khoản thu chi chung, gồm người tạo, giá trị, ngày bắt đầu kết thúc, trạng thái (thông qua tham chiếu tới bảng
Trang 13- Trường project_id nếu khác 0 thì giao dịch này là giao dịch chung của nhiều người dùng (gọi là project) Khi đó thông tin về project sẽ được lưu trong bảng project
Thông tin về những người tham gia project được lưu trữ trong bảng
project_contribute, bao gồm chỉ số người dùng, chỉ số project (tham chiếu tới bảng project), số tiền người dùng đóng góp, ngày giờ tham gia
2.2 Biểu đồ lớp
Tầng Model-Control
Trang 14Tầng NewGUI (giao diện)
2.2.1 Tầng Model
Các lớp với tên bắt đầu Info: tạo ra các đối tượng mang thông tin của người dùng hay giao dịch
InfoUser: chứa các thuộc tính là thông tin về một người dùng
InfoImportExport: chứa các thuộc tính là thông tin về một giao dịch cụ thể
InfoConfig: chứa thông tin về cấu hình hệ thống (đường dẫn, mật khẩu,… tới
cơ sở dữ liệu MySQL)
2.2.2 Tầng Control
Các lớp chứa các phương thức xử lí dữ liệu
Database: Chứa các phương thức để kết nối tới cơ sở dữ liệu
ImportExport: Chứa các phương thức xử lí giao dịch của người dùng
rsTableModel: Chứa các phương thức xử lí dữ liệu bảng
ComboxRender: Chứa các phương thức xử lí ảnh
User: kế thừa từ InfoUser, chứa các phương thức quản lí tài khoản người dùng
và quản lí việc “share” thông tin giao dịch
2.2.3 Tầng NewGUI
Các lớp thừa kế từ lớp javax.swing.JFrame
Login: Tạo hộp thoại đăng nhập
Trang 15 Account: Tạo ra giao diện quản lí tài khoản người dung
AddTransaction: Tạo ra giao diện thêm các khoản thu chi
Category: Tạo ra giao diện thêm các danh mục thu chi
DataGeneration: Tạo giao diện thêm dữ liệu mẫu
Prefercences: Tạo hộp thoại cập nhật thông tin cơ sở dũ liệu
Project: Tạo giao diện quản lí project
Statistic: Tạo giao diện thống kê, lọc thông tin
Filter: Tạo giao diện lọc dữ liệu theo yêu cầu người dùng
Trang 162.3 ImportExport Thiết kế chi tiết lớp
Các phương thức trong Database
setstate(Preferences)
o Đây là phương thức tạo kết nối từ chương trình tới cơ sở dữ liệu, nếu thất bại sẽ yêu cầu người dùng nhập lại đường dẫn, mật khẩu… để kết nối tới MySQL
o Khi thành công, biến tĩnh stm của lớp sẽ là đối tượng thực hiện các truy vấn MySQL cho toàn bộ các lớp trong chương trình
createDatabase()
- Phương thức này tạo ra cơ sở dữ liệu là các bảng đã chỉ ra trong sơ đồ trên, nếu thất bại sẽ trả lại kết quả là false để các phương thức khác thực hiện các
xử lí cần thiết Phương thức sử dụng các câu lệnh “create schema”, tạo bảng
“create table…”, “insert into…”, để tạo các bảng và một số dữ liệu ban đầu
2.3.2 Lớp ImportExport
Đây là lớp chứa các phương thức xử lí dữ liệu đối với các bảng lưu trữ thông tin thu chi Các câu lệnh truy vấn MySQL từ các bảng import_type và export_type thông qua biến stm của Database
Các phương thức thêm khoản thu/chi
Trang 17- Phương thức sẽ cập nhật thông tin khoản thu chi dựa trên thông tin của infoImportExport
- Có hai phương thức được gọi dựa trên loại giao dịch là thu hay chi:
update_import(InfoImport) và update_export(InfoImport)
- Các phương thức sẽ dùng câu lệnh “update …” để thay đổi dữ liệu vào hai bảng importing và exporting dựa vào điều kiện là trường id trong
infoImportExport
- Nếu thành công trả về true, nếu thất bại trả về false
Các phương thức xóa khoản thu/chi
delete(int id, boolean isImport)
- Phương thức sẽ xóa khoản thu chi dựa trên thông tin về id của khoản thu chi
và giao dịch là thu hay chi (biểu diễn bởi biến isImport)
- Có hai phương thức được gọi dựa trên loại giao dịch là thu hay chi:
delete_import(infoImport) và delete_export(infoImport)
- Các phương thức sẽ dùng câu lệnh “insert into …” để chèn dữ liệu vào hai bảng importing và exporting, nếu thành công trả về true, nếu thất bại trả về false
Các phương thức lấy danh sách các danh mục chi tiêu
getShareListUserId(int id_transaction, int type) , getShareListUserName(int
id_transacstion, int type)
- Hai phương thức trả về danh sách của những người dùng được nhìn thấy giao dịch với id là tham số đầu tiên, tham số thứ hai xác định đó là thu hay chi Kết quả được dùng trong hiển thị thông tin ở các lớp giao diện
insertShare(int id_transaction, int user_id, int type)
- Phương thức chèn thêm vào bảng share thông tin người dùng có id là
user_id được nhìn thấy khoản giao dịch có id là tham số thứ nhất
deleteShare(int transaction_id, int type)
- Phương thức xóa toàn bộ các hàng của bảng share có id của giao dịch và loại giao dịch là hai tham số đầu vào Điều này tương đương với việc thiết lập giao dịch đó không được nhìn thấy bởi bất kì người dùng nào
Các phương thức lấy tên loại thu/chi và chỉ số loại thư mục
getImportType(int id) và getImportTypeId(String type)
getExportType(int id) và getExportTypeId(String type)