SlideShare a Scribd company logo
1 of 79
Download to read offline
Trương Duy Linh - 51101863 1
BÁO CÁO THỰC TẬP
ĐỀ TÀI:
PHÁT TRIỂN PHẦN MỀM QUẢ LÍ KHÁCH
HÀNG TRÊN ANDROID TRÊN ĐIỆN THOẠI SỬ
DỤNG ANDROID
GVHD : Thầy Võ Đỗ Thắng
SVTH : Trương Duy Linh
MSSV : 51101863
TP.HCM, Ngày 12 Tháng 8 Năm 2014
TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HỒ CHÍ MINH
KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH

TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG &
AN NINH MẠNG QUỐC TẾ ATHENA
Trương Duy Linh - 51101863 2
LỜI CẢM ƠN
TRUNG TÂM ATHENA
Em xin chân thành cảm ơn Ban giám đốc Trung Tâm Athena, thầy Võ Đỗ
Thắng và toàn thể các anh, chị, các bạn trong Trung Tâm đã tận tình giúp đỡ em trong
thời gian thực tập, tạo điều kiện tốt nhất để em được thực tập tốt tại Trung Tâm. Qua
đợt thực tập này em đã tích lũy cho bản thân được nhiều kinh nghiệm quý báo, những
kinh nghiệm đó sẽ giúp em hoàn thiện bản thân hơn,và giúp em làm tốt công việc sau
này.
Trong thời gian thực tập tại Trung Tâm em đã có những cố gắng để hoàn thành
báo cao thực tập một cách tốt nhất với tất cả những nổ lực của bản thân, nhưng cũng
không thể tránh khỏi những thiếu sót trong quá trình thực tập, rất mong nhận được sự
thông cảm của quý thầy cô ở Trung Tâm và đặc biệt là Thầy Võ Đỗ Thắng.
Một lần nữa em xin chân thành cảm ơn
Tp.Hồ Chí Minh, Ngày 12 Tháng 8 Năm 2014
Kí tên
Trương Duy Linh
Trương Duy Linh - 51101863 3
LỜI CẢM ƠN
TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM & KHOA
KHOA HỌC VÀ KĨ THUẬT MÁY TÍNH
Em xin chân thành cảm ơn Trường Đại Học Bách Khoa Tp.HCM và Khoa
Khoa Học & Kĩ Thuật Máy Tính đã tạo điều kiện cho em học tập cũng như thực tập
trong học kì này. Trong lần thực tập này em đã tích lũy được nhiều kinh nghiệm và
những vài học quý báo cho bản thân. Những kinh nghiệm và bài học trong lần thực
tập này sẽ giúp em hoàn thiện hơn trong học tập cũng như trong công việc.
Em xin chân thành cảm ơn quý thầy cô trong Khoa đã luôn luôn tận tình chỉ
dẫn, giảng dạy và trang bị cho em những kiến thức cần thiết nhất và giúp đỡ em rất
nhiều để hoàn thành tốt đợt thực tập này.
Trong quá trình thực tập em đã cố gắng để hoàn thành công việc với tất cả
những nổ lực của bản thân, nhưng cũng không thể tránh khỏi những thiếu sót trong
quá trình thực tập rất mong nhận được sự thông cảm của quý thầy cô.
Một lần nữa em xin chân thành cảm ơn.
TP.Hồ Chí Minh, Ngày 12 Tháng 8 Năm 2014
Kí Tên
Trương Duy Linh
Trương Duy Linh - 51101863 4
Trích yếu
Sự phát triển của các công ty, yêu cầu quan trọng nhất là sự ủng hộ của khách hàng,
do đó cần có những chính sách quan tâm chăm sóc khách hàng của mình để họ trở
nên thân thiết với công ty. Trong thời buổi hiện đại, sự phát triển của thiết bị di động
làm nảy sinh yêu cầu quản lí khách hàng trên thiết bị di động, giúp chăm sóc khách
hàng ở mọi lúc mọi nơi.
Trong thời gian thực tập tại trung tâm Athena, tôi được nghiên cứu dề tài quản lí
khách hàng trên android, đây là một đề tài thú vị, giúp tôi hiểu thêm về công tác quản
lí khách hàng của một công ty, nó mang tính thực tế rất cao. Tôi được làm quen với
android một nến tảng phát triển ứng dụng hiện đại, và mạnh mẽ. Hơn thế nữa tôi có
cơ hội phát triển kĩ năng của mình ngày càng phù hợp với chuyên ngành công nghệ
thông tin mà tôi đang theo đuổi.
Tôi cam kết kết quả đạt được do tôi tự thực hiện dưới sự hướng dẫn của thầy Võ Đỗ
Thắng (Trung Tâm Athena). Các bước quá trình thực hiện đã được ghi lại bằng video
và có thuyết minh từng bước.Chi tiết quay clip ghi lại quá trình thực hiện được liệt kê
dưới đây.
Danh sách các clip:
- Clip giới thiệu cá nhân và đề tài đăng kí thực tập
https://www.youtube.com/watch?v=hGt-AuRgqaA
- Clip báo cáo thực tập, khó khăn, thuận lợi ,rút kinh nghiệm
https://www.youtube.com/watch?v=HC2Ze7yffmo
- Clip Báo cáo thực hiện quá trình làm đề tài
https://www.youtube.com/watch?v=AbwZ_4d8sZk
Trương Duy Linh - 51101863 5
Nhận xét của giáo viên hướng dẫn
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
....................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
......................................................................................................................
.
Trương Duy Linh - 51101863 6
Nhận xét của giáo viên hướng dẫn
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
....................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
.......................................................................................................................
......................................................................................................................
.
Trương Duy Linh - 51101863 7
MỤC LỤC
I. Phân tích nhu cầu thị trường............................................................................................................7
1. Tại sao phải Quản lí khách hàng ?..........................................................................................7
2. Quản lí khách hàng cần những gì ? Dùng phương pháp CRM quản lí khách hàng...............8
3. Ưu điểm việc dùng phần mềm so với không dùng phần mềm.............................................10
II. Xây dựng phần mềm.....................................................................................................................11
1.Cài đặt Android và môi trường phát triển android như esclipse, SDK..................................11
3. Xây dựng mô hình ERD........................................................................................................16
4. Phân tích các chức năng........................................................................................................17
5. Xây dựng giao diện.. ............................................................................................................ 18
6. Hiện thực các Class.............................................................................................................. 25
7.Các Class được hỗ trợ sẵn và phương thức giao tiếp giữa các Activity, CSDL SQLite....... 75
IV. Tổng kết....................................................................................................................................77
V. Tài liệu tham khảo........................................................................................................................ 77
Trương Duy Linh - 51101863 8
I. Phân tích nhu cầu thị trường
1. Tại sao phải Quản lí khách hàng ?
Quản lý quan hệ đối tác là một lĩnh vực quản lý liên quan đến việc hiểu rõ vai trò,
quan điểm, mức độ ảnh hưởng và nhu cầu của các đối tác để có phương pháp quản lý
mối quan hệ và phương pháp giao tiếp cho phù hợp. Tùy theo từng đối tác mà các lợi
ích, quan tâm của họ đối với một doanh nghiệp có khác nhau.
Theo quan điểm truyền thống, các đối tác quan trọng đối với doanh nghiệp dường như
chỉ tập trung vào khách hàng (người mang tiền đến), nhà cung cấp (nguồn cung cấp
cho doanh nghiệp), nhân viên (cung cấp sức lao động). Việc quản lý các đối tác này
bám sát quy trình hoạt động của doanh nghiệp, chẳng hạn từ khâu mua hàng đến sản
xuất rồi bán hàng.
Trong khi đó quan điểm hiện đại lại cho rằng đối tác là người hoặc những nhóm
người có ảnh hưởng đáng kể đến sự sống còn và phát triển của doanh nghiệp.Với sự
ra đời của công nghệ mới, trải nghiệm mua sắm của người tiêu dùng đã được cải thiện
rõ rệt với việc xóa bỏ sự chênh lệch thông tin về sản phẩm và nhãn hàng . Khách hàng
ngày nay ít trung thành đối với một nhãn hiệu. Họ chuyển từ nhãn hiệu này sang nhãn
hiệu khác để có giá, sản phẩm và dịch vụ tốt nhất. Tuy nhiên, các chương trình quản
lý khách hàng đã cho thấy đến 75% trên tổng doanh số bán hàng là từ 30% khách
hàng thân thiết nhất (Imlay, 2006) Do đó, chương trình quản lý khách hàng hiệu quả
sẽ giúp các nhà bán lẻ có ưu thế trong thị trường đầy tính cạnh tranh với những lợi ích
như sau:
+ Nhận diện những khách hàng tốt nhất
Những khách hàng tốt nhất không thể chỉ được ghi nhận bởi 1 trong 2
yếu tố: hành vi tiêu dùng hay thái độ. Những dự định dựa trên những thái độ
tích cực chưa chắc dẫn đến hành động. Và, hành vi tiêu dùng mà thiếu đi nền
tảng thái độ kiên quyết sẽ rất dễ bị thay đổi khi khách hàng đối mặt với
những sản phẩm/dịch vụ có giá cả và chất lượng cạnh tranh. Với dữ liệu
được truy xuất từ chương trình quản lý khách hàng, các nhà bán lẻ có thể xác
định được những khách hàng có nhiều tiềm năng hơn - có thái độ lẫn hành vi
tiêu dùng trung thành, và ưu đãi cho họ các lợi ích tài chính cũng như phi tài
chính.
Trương Duy Linh - 51101863 9
+ Tăng cường việc giữ khách hàng và tìm kiếm khách hàng mới thông qua tiếp
thị truyền miệng.
Từ các cửa hàng may mặc, phân phối dụng cụ thể thao, đồ nội thất, mỹ
phẩm cho đến các nhà bán lẻ điện tử, khi các sản phẩm dễ dàng bị thay thế và
không nổi bật trên thị trường, việc tăng cường bán hàng thông qua phương
pháp truyền miệng là một vũ khí bí mật. Quản lý khách hàng mang lại cho
các nhà bán lẻ khả năng tiếp cận khách hàng và giới thiệu những ưu đãi hoặc
sản phẩm thích hợp với nhu cầu của người tiêu dùng ngay khi họ đặt chân
vào cửa hàng bằng cách truy cập dữ liệu của khách hàng như kích thước,
màu yêu thích, và các nhãn hàng ưu chuộng. Hơn nữa, với chương trình quản
lý khách hàng, khách hàng sẽ tin rằng nhà bán lẻ am hiểu và dành nhiều ưu
đãi cho họ hơn những đối thủ bán lẻ khác. Một khi họ được phục vụ tốt hơn
và nhận được nhiều lợi ích hơn, họ sẽ sẵn lòng giới thiệu nhà bán lẻ với bạn
bè và người thân.
+ Tăng cường bán chéo sản phẩm và tăng doanh số
Một trong những cách tốt nhất và dễ dàng nhất để cải thiện doanh thu và
lợi nhuận là bán nhiều mặt hàng hơn cho các khách hàng hiện tại. Tuy nhiên,
rất nhiều khách hàng chỉ biết đến sản phẩm họ đã mua. Việc đơn giản chia sẻ
với khách hàng về các sản phẩm mà doanh nghiệp cung cấp sẽ tăng cường
nguồn thu cho họ. Chương trình quản lý khách hàng cho phép các nhà bán lẻ
lấy được nhiều thông tin về khách hàng từ đó họ có thể gợi ý các sản phẩm
liên quan trong một giao dịch trọn gói và bán được nhiều sản phẩm hơn.
+ Nắm bắt xu hướng thị trường
Thị trường liên tục thay đổi. Những gì mà các nhà bán lẻ cần là phương
pháp tận dụng những sự thay đổi đó trong khi vẫn có thể phát triển nhằm
vượt qua được những thử thách đó. Nếu các nhà bán lẻ không thể thực hiện
điều này, họ sẽ chắc chắn để mất những khách hàng hiện tại vào tay các đối
thủ. Với dữ liệu từ chương trình quản lý khách hàng, các nhà bán lẻ có thể
đánh giá xu hướng và cđưa ra những quyết định tốt hơn dựa trên những biến
đổi trong thị trường.
Trương Duy Linh - 51101863 10
2. Quản lí khách hàng cần những gì ? Dùng phương pháp CRM
quản lí khách hàng
2.1 Quản lí khách hàng cần những gì ?
Có những đối tác mà quá trình quản lý họ lại gắn liền với quá trình tác
nghiệp của doanh nghiệp. Chẳng hạn như bộ phận kinh doanh làm việc với khách
hàng hoặc nhà phân phối trong quá trình đặt hàng, bộ phận mua hàng làm việc
với nhà cung cấp, giám đốc tài chính sẽ làm việc với ngân hàng, hay bộ phận
nhân sự sẽ làm việc với các nhân viên. Trong trường hợp ban giám đốc, những
nhà quản lý nếu không trực tiếp làm việc với đối tác cần tìm hiểu xem những đối
tượng này có hài lòng khi làm việc với doanh nghiệp không? Việc tìm ra câu trả
lời này ngày càng có ý nghĩa sống còn đối với doanh nghiệp.
Quá trình quản lý quan hệ đối tác đòi hỏi một kế hoạch tập trung và thực hành có
hệ thống, có phương pháp và phải nhất quán trong toàn doanh nghiệp. Nhiều
công ty nước ngoài sử dụng một công cụ, gọi là kế hoạch quản lý đối tác. Bản kế
hoạch này liệt kê các đối tác chủ chốt của doanh nghiệp, xác định vai trò, ảnh
hưởng của họ đối với doanh nghiệp, cũng như “sách lược” mà doanh nghiệp dành
cho họ. Bản kế hoạch quản lý đối tác do tổng giám đốc phê duyệt, và việc thực
hiện phải được ủy quyền tùy theo mức độ cho các trưởng bộ phận. Làm theo cách
này, các cấp quản lý ở doanh nghiệp đều có ý thức chung về quản lý quan hệ đối
tác và thực hành một cách hệ thống theo phương pháp đã được nghiên cứu và xét
duyệt.
Một trong những nội dung quan trọng nhất của kế hoạch quản lý quan hệ đối tác
chính là kế hoạch giao tiếp với các đối tác, tức là xác định những thông tin cần
trao đổi, mức độ tiếp xúc, cách truyền đạt thông tin sao cho hiệu quả nhất. Việc
lập kế hoạch này được xây dựng trên cơ sở hiểu rõ vai trò, nhu cầu và mong đợi
của các đối tác khác nhau. Vì thế các doanh nghiệp nên lưu ý việc giao tiếp này là
giao tiếp của tổ chức, thể hiện cấp độ doanh nghiệp chứ không phải là giao tiếp
mang màu sắc của một cá nhân cụ thể nào.
Các doanh nghiệp Việt Nam trong quá trình phát triển thường phải thực hiện rất
nhiều dự án mở rộng sản xuất kinh doanh như: triển khai ISO, kế toán quản trị,
tin học hóa quản lý, tái cấu trúc doanh nghiệp, cổ phần hóa, niêm yết, xây dựng
thương hiệu… Từng dự án đều có các đối tác với những lợi ích và mối quan tâm
khác nhau, vì thế sự thành công của doanh nghiệp cũng phụ thuộc vào cách quản
lý các kỳ vọng, lợi ích và sự hợp tác của các đối tác.
Trương Duy Linh - 51101863 11
2.2 Dùng phương pháp CRM quản lí khách hàng
 Định nghĩa CRM
- CRM (Customer Relationship Management: Quản lý quan hệ khách hàng)
là một phương pháp giúp các doanh nghiệp tiếp cận và giao tiếp với khách hàng
một cách có hệ thống và hiệu quả, quản lý các thông tin của khách hàng như
thông tin về tài khoản, nhu cầu, liên lạc… nhằm phục vụ khách hàng tốt hơn.
- Thông qua hệ thống quan hệ khách hàng, các thông tin của khách hàng sẽ
được cập nhật và được lưu trữ trong hệ thống quản lý cơ sở dữ liệu. Nhờ một
công cụ dò tìm dữ liệu đặc biệt, doanh nghiệp có thể phân tích, hình thành danh
sách khách hàng tiềm năng và lâu năm để đề ra những chiến lược chăm sóc khách
hàng hợp lý. Ngoài ra, doanh nghiệp còn có thể xử lý các vấn đề vướng mắc của
khách hàng một cách nhanh chóng và hiệu quả.
 Tại sao nên dùng CRM
Vì chi phí kiếm khách hàng mới nhiều hơn gấp 6 lần so với duy trì khách
hàng cũ, Trong khi đó, 20% khách hàng cũ đem lại 80% lợi nhuận cho công ty,
Một khách hàng không thoả mãn sẽ chia sẻ sự khó chịu của họ cho từ 8-10 người
khác.
Và kể cả nếu khách hàng không hài lòng nhưng nếu bạn quản lý, chăm sóc
tốt và giải quyết tốt khiếu nại thì khách hàng vẫn tín nhiệm bạn! Một con số
thống kê cho thấy 70% khách hàng có khiếu nại sẽ vẫn trung thành với công ty
nếu khiếu nại của họ được giải quyết thoả đáng.
 Đặc điểm của CRM
CRM là một “phương pháp” vì đó là một cách thức tìm kiếm, tổ chức và xử
lý các mối quan hệ khách hàng. Cũng có thể nói CRM là một chiến lược, bởi vì
CRM nó bao gồm cả một kế hoạch rõ ràng và chi tiết. Quả thực, chiến lược CRM
có thể được coi là chiến lược căn bản cho mọi chiến lược khác của tổ chức. Bất
kỳ chiến lược nào của tổ chức không đáp ứng cho việc tạo ra, duy trì và mở rộng
mối quan hệ với khách hàng mục tiêu của tổ chức đều được xem là không nhằm
đáp ứng cho tổ chức đó.c
Thứ hai, CRM là một phương pháp “toàn diện” là bởi CRM không phải dành
cho riêng hoạt động kinh doanh và marketing hay cũng không phải được chịu
trách nhiệm chính bởi bộ phận chăm sóc khách hàng trong tổ chức hoặc phòng IT.
Từng phòng ban tương ứng với từng chức năng riêng trong công ty đều có liên
quan đến chiến lược CRM. Nói cách khác CRM là một chiến lược hay phương
pháp được đưa ra và thực hiện có liên quan đến tất cả các phòng ban, bộ phận của
công ty. Khi CRM không có liên quan đến một phòng ban nào đó, ví dụ như
phòng IT, thì chất lượng quan hệ khách hàng sẽ bị giảm. Hay cũng như thế, khi
Trương Duy Linh - 51101863 12
bất kỳ một bộ phận nào trong tổ chức đứng ngoài kế hoạch CRM thì tổ chức đó
sẽ gặp phải rủi ro lớn trong quá trình thực hiện quản lý mối quan hệ khách hàng
của mình.
Thứ ba, chúng ta nói tới cụm từ “tạo ra, duy trì và mở rộng”. Điều này có
nghĩa CRM có liên quan đến toàn bộ chu kỳ và hành vi mua hàng của một khách
hàng (trước – đang – và sau khi mua hàng), cũng như gắn kết chặt chẽ với quy
trình kinh doanh của tổ chức (marketing – kinh doanh – và chăm sóc sau bán
hàng). Khi bạn thực hiện một chiến lược CRM bạn phải có được và phân tích dữ
liệu về khách hàng mục tiêu của mình và hành vi mua hàng mục tiêu của họ. Từ
nguồn thông tin chất lượng này bạn có thể hiểu và dự đoán được hành vi mua
hàng của khách hàng tốt hơn.
2. Ưu điểm việc dùng phần mềm so với không dùng phần mềm
- Công ty bạn đang dùng Access, Excel để quản lý thông tin hay không?
- Thông tin khách hàng "mỗi người một nơi", dữ liệu phân tán khó quản lý?
- Nhân viên nghĩ việc, bạn có bị mất thông tin về các khách hàng, các giao dịch, công
việc mà trước đây nhân viên đó đã làm?
- Nhân viên bạn quá đông, bạn có đủ khả năng kiểm soát mọi công việc họ phải làm?
- Các giao dịch của doanh nghiệp bạn với khách hàng, bạn có nắm được tất cả diễn
biến đó không?
- Thống kê doanh thu công ty, so sánh năng lực nhân viên,... bạn làm bằng tay...?
- Việc sử dụng phần mềm sẽ giải quyết các vấn đề trên 1 cách hiệu quả
3. Việc sử dụng trên điệm thoại di động có phù hợp không ?
- Ngày nay, tính di động, tiện lợi đang được yêu cầu rất cao khi phát triển 1 phần
mềm, phần mềm không những cần được cài đặt trên máy tính, mà còn cả trên thiết bị
di động như Iphone, Ipad, Samsung, nokia...Đây là 1 xu thế tất yếu nên việc phát
triển trên điện thoại di động là rất cần thiết.
Trương Duy Linh - 51101863 13
II. Xây dựng phần mềm
1. Cài đặt Android và môi trường phát triển android như esclipse,
SDK
Bước 1: Tải bộ cài đặt Android ADT Bundle
Đầu tiên chúng ta cần tải công cụ & bộ thư viện hỗ trợ phát triển ứng dụng Android
(Android SDK) ở trang http://developer.android.com/sdk/index.html
Chú ý:
 Chúng ta cần chọn phiên bản Android SDK 32-bit hay Android SDK 64-bit
phù hợp với hệ thống máy tính dự kiến sử dụng để lập trình Android.
 Android mặc định đóng gói môi trường phát triển ứng dụng Eclipse có tích
hợp sẵn các công cụ để phát triển ứng dụng Adnroid (Android Developer Tools -
ADT plugin), Android SDK Tools, cùng Android Platform-tools vào trong 1
file ADT Bundle duy nhất để người dùng có thể tải về các thành phần cần thiết
chỉ 1 lần duy nhất và triển khai môi trường phát triển ứng dụng Android một cách
nhanh nhất có thể.
Bước 2: Cài đặt Java để lập trình ứng dụng Android:
Máy tính dùng để lập trình Android cần phải được cài đặt Java trước. Nếu không thấy
biểu tượng Java trong Control Panel của Windows, chúng ta cần tải Java về và cài đặt
từ địa chỉ http://www.oracle.com/technetwork/java/javase/downloads/index.html
Trương Duy Linh - 51101863 14
Bước 3: Cài đặt Eclipse & ADT Plugin
Giải nén file Android ADT Bundle đã download được ở bước trên vào một thư mục
bất kì nào đó trên máy tính. Android đã đính kèm môi trường phát triển Eclipse tích
hợp ATD Plugin đã được đóng gói sẵn trong đó.
Mẹo: bạn nên để Android SDK ở ổ đĩa khác ổ đã cài hệ điều hành Windows, vì như
thế khi có nhu cầu cài lại máy, thì bản cài đặt Android SDK này vẩn còn, chúng ta
không cần phải download lại nữa.
Trong trường hợp chúng ta đã cài đặt Eclipse trên máy tính trước đây rồi, thì chỉ cần
cài thêm ADT Plugin (Android Development Tools - ADT Plugin) cho bản Eclipse
đó bằng cách:
 Khởi động phần mềm Eclipse
 Vào menu Help chọn mục Intall New Software…
 Nhập vào đường link sau đây trong mục “Work with:”
https://dl-ssl.google.com/android/eclipse để tiến hành cài đặt ADT Plugin cho
Eclipse
Trương Duy Linh - 51101863 15
Bước 4: Cài đặt Android SDK Manager:
Bật Eclipse lên, chọn Workpace. Chọn theo các bước hướng dẫn trên hình để cài
Android SDK Manager
Trương Duy Linh - 51101863 16
Bước 5: Tạo máy ảo Android để chạy ứng dụng Android:
Máy ảo Android là chương trình giả lập thiết bị Android (Android Virtual Device
– AVD) để giúp lập trình viên kiểm tra ứng dụng nhanh ngay trên máy tính trước khi
chính thức triển khai trên thiết bị Android thực tế.
Bước 6: Tạo và chạy ứng dụng Android đầu tiên
Tạo project Android đầu tiên bằng cách vào menu File => New => Android
Application Project
Trương Duy Linh - 51101863 17
2. Phân tích quy trình quản lí khách hàng theo phương pháp CRM
 Quản lý hồ sơ khách hàng: Quy trình quản lý khách hàng được tự động hóa từ
bước thu thập thông tin khách hàng đến việc đánh giá, phân loại khách hàng. Bao
gồm:
 Thu thập thông tin khách hàng.
 Phân nhóm khách hàng (Khách hàng, nhà cung cấp, đối tác).
 Theo dõi quá trình tiếp cận và giao dịch với khách hàng.
 Đánh giá, phân loại khách hàng theo mức độ tiềm năng.
 Quản lý thông tin liên hệ, đối tác
 Quản lý cơ hội bán hàng: Quản lý các cơ hội bán hàng phát sinh từ các khách
hàng đang quản lý. Bao gồm các bước:
 Tạo cơ hội bán hàng mới cho 1 khách hàng.
 Đánh giá, phân loại cơ hội bán hàng theo mức độ khả thi.
 Theo dõi quá trình giao dịch với khách hàng liên quan đến cơ hội bán hàng.
 Kết thúc và đóng cơ hội bán hàng.
 Quản lý lịch hẹn và giao dịch: Cho phép theo dõi quá trình giao dịch với khách
hàng từ khâu lập kế hoạch đến khâu thực hiện và theo dõi lịch sử giao dịch.
 Lập lịch cuộc gọi
 Lập lịch hẹn
 Theo dõi quá trình thực hiện
 Theo dõi lịch sử giao dịch
Trương Duy Linh - 51101863 18
 Quản lý dịch vụ khách hàng: Chức năng quản lý dịch vụ khách hàng bao gồm
các hoạt động sau:
 Quản lý thông tin yêu cầu bảo hành, hỗ trợ, khiếu nại của khách hàng: Tên
khách hàng, chủ đề yêu cầu của khách hàng, mô tả yêu cầu, phương án giải quyết,
mức độ ưu tiên, tình trạng xử lý, người chịu trách nhiệm giải quyết.
 Lịch gọi, lịch gặp và các giao dịch xử lý yêu cầu của khách hàng.
 Lịch sử giao dịch xử lý yêu cầu, chăm sóc khách hàng.
3. Xây dựng mô hình ERD
1 N
1
N
N N
- Chuyển thành các bảng trong CSDL
+ Bảng Customer
Ma_KH Name Sex Email Phone level Coins
+ Bảng Đơn hàng
Ma_Bill Name Date smoney
+ Bảng Product
Ma_SP Name Price Info
Khách Hàng
Cơ Hội
Sản Phẩm
Hóa Đơn
Level
Phone
Email
Sex Name
Id
Id
Info
Name
Id
Name
Price
Info
Date
smoney
Name
Id
Of_cohoi
Of_cus
Of_bill
Coins
Trương Duy Linh - 51101863 19
+ Bảng of_cus
Ma_KH Ma_Bill
+Bảng of_bill
Ma_SP Ma_Bill
+Bảng Cơ hội
Id Name info Ma_KH
4. Phân tích các chức năng
- Để Xây dựng 1 phần mềm có thể đáp ứng yêu cầu khách hàng đặt ra, đảm bảo là
hệ thống này cần cho người dùng, tránh làm ra 1 phần mềm mà thị trường không cần
thiết.
- Phân tích chức năng giúp xác định các chức năng cần thiết một cách rõ ràng đầy
đủ, hạn chế chi phí phân tích lại trong quá trình phát triển phần mềm
- Phần mềm quản lí khách hàng: là một phần mềm để doanh nghiệp quản lí khách
hàng của mình một cách hiệu quả.
+ Chức năng (xem,sửa,xóa) khách hàng: là điều đầu tiên cần nghĩ tới, một khách
hàng có thông tin riêng của mình như tên ,tuổi, ngày sinh, giới tính, email...Nếu là
công ty thì có thông tin tên công ty, ...
+ Chức năng xem danh sách khách hàng : 1 phần mềm quản lí khách hàng không
chỉ quản lí 1 khách hàng mà cần quả lí nhiều khách hàng, công ty, nên việc xem danh
sách khách hàng là cần thiết
+ Chức năng tìm kiếm khách hàng: Trong 1 danh sach khách hang với vài trăm
người thì việc lướt trên màng mình rất mất thời gian, do đó 1 thanh search giúp giảm
việc tốn thời gian cho quá trình tiềm kiếm, khi biết 1 số thông tin nào đó.
+ Chức năng quản lí khách hàng theo cấp trong siêu thị: giúp ta dễ dành phân loại
và có chính sách chăm sóc dễ dàng không bỏ sót khách hàng nào trong cấp đó cho
phù hợp.
+ Chức năng (xem,xóa,thêm) danh sách đơn hàng mà khách hàng đã mua: 1
khách hàng cần được lưu những lần giao dịch dể có thể cộng điểm tích lũy cho khách
hàng, thăng cấp cho khách hàng, xác định những khách hàng này cần mua những loại
sản phẩm nào, nhu bao nhiêu từ đó công ty có thế thêm các lọa sản phẩm của mặt
hàng này giúp tăng doanh thu đáp ứng yêu cầu khách hàng.
+ Chức năng xem các chương trình chăm sóc khách hàng, số lượng người tham
gia, từ đó có thể cách định các chương trình khách hàng yêu thích, tăng số lượng
chương trình này lên giúp tăng doanh thu cho siêu thị.
+ Chức năng thống kê theo sản phẩm được mua, theo chương trình khuyến mãi,
theo tháng, theo năm...: giúp công ty đưa ra các quyết định phù hợp.
+ Chức năng gửi mail chúc mừng sinh nhật, gửi mail thông báo các chương trình
Trương Duy Linh - 51101863 20
khuyến mãi, các sản phẩm mới sẽ được bán... Nhằm cung cấp thông tin cho khách
hàng để họ có thể tham gia, tạo sự thân thiết giữa khách hàng va công ty.
5. Xây dựng giao diện
- Sau khi phân tích các chức năng cần có, tiếp theo là đi xây dựng giao diện, việc
xây dựng giao diện giúp định hình phần mềm 1 cách rõ ràng hơn.
- Đầu tiên là giao diện khi người quản lí mở phần mềm:
+ Gồm thanh search giúp người quản lí có thể tìm kiếm khách hàng của mình.
+ Button Chọn loại khách hàng, giúp người quản lí xem danh sách các khách
hàng theo cấp VIP, THUONG, TIMNANG.
+ Danh sách khách hàng, khi người quản lí nhấp vào sẽ hiện lên các đơn hàng n
Khách hàng đã mua.
Trương Duy Linh - 51101863 21
- Khi người quản lí nhấp vào button chọn loại khách hàng, và chọn loại khách
hàng như VIP thì giao diện danh sách khách hàng sẽ hiện ra.gười quản lí nhấp vào
button ADD CUSTOMER để thêm khách hàng, nhấp vào mỗi khách hàng để sửa, xóa,
xem danh sách cơ hội sẽ có với khách hàng này hoặc xem danh sách đơn hàng của
khách hàng đã giao dịch.
Trương Duy Linh - 51101863 22
- Khi gười quản lí nhấp vào menu thêm hoặc sửa khách hàng, thì giao diện bên
dưới sẽ hiện ra, nếu là sửa khách hàng thì sẽ có thông tin khách hàng để ta chỉnh sửa
Trương Duy Linh - 51101863 23
- Khi người quản lí nhấp vào menu item danh sách cơ hội gồm các yêu cầu cần
nhập vào nếu muốn thêm các cơ hội và danh sách các cơ hội đã được thêm trước đó sẽ
hiển thị ra, nếu cần xóa thì nhấn button Xóa, có thể xóa nhiều ghi chú cùng 1 lúc khi
check vào ô check box.
Trương Duy Linh - 51101863 24
- Khi người dùng nhấp chọn vào menu item danh sách đơn hàng thì giao diện
danh sách đơn hàng sẽ hiện ra, người quản lí có thể thêm sửa xóa danh sách đơn hàng
Trương Duy Linh - 51101863 25
- Khi người quản lí nhấp vào một đơn hàng bất kì, menu item sửa, xóa, xem danh
sách sản phẩm sẽ hiện ra, khi chọn item Danh Sách Sản Phẩm thi danh sách sản phẩm
sẽ hiện ra.
Trương Duy Linh - 51101863 26
- Khi người quản lí chọn 1 button ADD PRODUCT thì form yêu cầu nhập thông
tin cho sản phẩm mới sẽ hiện ra và khi nhấn button Lưu thì nó sẽ lưu vào csdl.
Trương Duy Linh - 51101863 27
6. Hiện thực các Class
- Cấu trúc thư mục
Trương Duy Linh - 51101863 28
 Trong cấu trúc trên có 3 pakage: com.example.demoqlkh, donhang, sanphamco.
- Class MainActivity
public class MainActivity extends ActionBarActivity {
//Định nghĩa các requestCode, resultCode truyền đi
//trong Intent
public static final int MO_ACTIVITY_THEM_KHACH_HANG=1;
public static final int MO_ACTIVITY_SUA_KHACH_HANG=2;
public static final int THEM_KHACH_HANG_THANHCONG=3;
public static final int SUA_KHACH_HANG_THANHCONG=4;
public static final int XEM_DS_KHACH_HANG=5;
public static final int CAPNHAT_DS_KHACH_HANG_THANHCONG=6;
public static final int MO_ACTIVITY_CHUYEN_LEVEL=9;
public static final int CHUYEN_LEVEL_THANHCONG=10;
public static final int MO_ACTIVITY_THEM_DON_HANG=11;
public static final int THEM_DON_HANG_THANHCONG=12;
public static final int MO_ACTIVITY_SUA_DON_HANG=13;
public static final int SUA_DON_HANG_THANHCONG=14;
public static final int MO_ACTIVITY_DANHSACH_DON_HANG=15;
public static final int MO_ACTIVITY_DANHSACH_SAN_PHAM=20;
public static final int CAPNHAT_DS_SAN_PHAM_THANHCONG=6;
public static final int MO_ACTIVITY_SUA_SAN_PHAM=16;
public static final int SUA_SAN_PHAM_THANHCONG=17;
public static final int MO_ACTIVITY_THEM_SAN_PHAM=18;
public static final int THEM_SAN_PHAM_THANHCONG=19;
public static final int CAPNHAT_DS_DON_HANG_THANHCONG=16;
public static final int MO_DS_COHOI=20;
public static final int CAP_NHAT_DS_CO_HOI_THANHCONG=21;
//lvallkh hiển thị danh sách tất cả các khách hàng
ListView lvallkh;
EditText search;
ArrayList<KhachHang>custo;
Trương Duy Linh - 51101863 29
ArrayAdapter<KhachHang> adaptercusto;
private static ArrayList<LevelKhachHang>arrlvkh=new
ArrayList<LevelKhachHang>();
private int pos=-1;
private Button btnchonlevel;
DatabaseHandler db;
private KhachHang khach;
int posi=-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvallkh=(ListView)findViewById(R.id.lvallkh);
search=(EditText)findViewById(R.id.txtsearch);
custo=new ArrayList<KhachHang>();
//tạo truy vấn database
db=new DatabaseHandler(this);
btnchonlevel=(Button)findViewById(R.id.btnxoatt);
KhachHang custom=null;
//khởi tạo 3 level
LevelKhachHang l1=new LevelKhachHang("VIP");
LevelKhachHang l2=new LevelKhachHang("THUONG");
LevelKhachHang l3=new LevelKhachHang("TIMNANG");
//------------------------------------------------------------
-
//kiểm tra xam dữ liệu có khách hàng nào hay chưa
//nếu chưa thì thêm vào
// nếu có thì đọc ra từ CSDL
if(db.getKhachHangCount()==0){
Log.d("12345", "6789");
custom=new
KhachHang("1","Nam","1","1.@gmail.com","VIP","0",true);
l1.Themkh(custom);
db.addKhachHang(custom);
arrlvkh.add(l1);
custo.add(custom);
//-----------------
custom=new
KhachHang("2","Tien","2","2.@gmail.com","TIMNANG","0",true);
l2.Themkh(custom);
Trương Duy Linh - 51101863 30
db.addKhachHang(custom);
arrlvkh.add(l2);
custo.add(custom);
//-----------------
custom=new
KhachHang("3","An","3","3.@gmail.com","THUONG","0",true);
l3.Themkh(custom);
db.addKhachHang(custom);
arrlvkh.add(l3);
custo.add(custom);
}
else{
for(KhachHang kh:db.getAllKhachHang()){
if(kh.getlevel().equals("VIP")){
l1.Themkh(kh);
custo.add(kh);
Log.d("LEVEL1", kh.getlevel());
}
else if(kh.getlevel().equals("THUONG")){
l2.Themkh(kh);
custo.add(kh);
Log.d("LEVEL2", kh.getlevel());
}
else {
l3.Themkh(kh);
custo.add(kh);
Log.d("LEVEL3", kh.getlevel());
}
}
arrlvkh.add(l1);
arrlvkh.add(l2);
arrlvkh.add(l3);
}
them_don_hang_va_tinh_gia();
adaptercusto=new
ArrayAdapter<KhachHang>(this,android.R.layout.simple_list_item_1,
custo);
lvallkh.setAdapter(adaptercusto);
adaptercusto.notifyDataSetChanged();
//Đăng kí contextmenu
registerForContextMenu(btnchonlevel);
Trương Duy Linh - 51101863 31
//Xử lí sự kiện khi gõ từ vào thanh search
search.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int
before, int count) {
// TODO Auto-generated method stub
adaptercusto.notifyDataSetChanged();
MainActivity.this.adaptercusto.getFilter().filter(s);
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
//xử lí sự kiên click vào item của ListView
//lấy vi trí của khách hàng gọi hiển thị danh sách đơn hàng
lvallkh.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
khach=custo.get(position);
posi=position;
Intent inte=new
Intent(MainActivity.this,DanhSachDonHang.class);
Bundle bundle=new Bundle();
bundle.putSerializable("KHACHHANG", khach);
inte.putExtra("DATA", bundle);
Trương Duy Linh - 51101863 32
startActivityForResult(inte,MainActivity.MO_ACTIVITY_DANHSACH_
DON_HANG);
}
});
}
//truy xuất CSDL thêm đơn hàng tương ứng với mỗi khách hàng
// tính coins cho khách hàng dựa trên các đơn hàng
public void them_don_hang_va_tinh_gia(){
for(KhachHang kha:custo){
int gia=0;
for(DonHang
don:db.getdsdh_ofkh(Integer.parseInt(kha.getma()))){
kha.Themdh(don);
gia+=Integer.parseInt(don.getsmoney());
}
kha.setcoins(String.valueOf(gia));
db.updateKhachHang(kha);
}
}
//dăng kí contextmenu
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu_level, menu);
}
//xử lí sự kiên click vào item menu gồm:
// xem danh sách khác hàng của level VIP, THUONG, TIMNANG
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.mnuvip:
pos=0;
doDanhSachKhachHang();
break;
case R.id.mnunormal:
pos=1;
doDanhSachKhachHang();
break;
Trương Duy Linh - 51101863 33
case R.id.mnukhtimnang:
pos=2;
doDanhSachKhachHang();
break;
}
return super.onContextItemSelected(item);
}
//Intent goi Activity DanhSachKhachHang
public void doDanhSachKhachHang()
{
Intent i=new Intent(this, DanhSachKhachHang.class);
Bundle bundle=new Bundle();
bundle.putSerializable("LEVEL", arrlvkh.get(pos));
i.putExtra("DATA", bundle);
startActivityForResult(i,MainActivity.XEM_DS_KHACH_HANG);
}
//Nhận result trả về từ cập nhật danh sách khách hàng,
//cập nhật danh sách đơn hàng thành công
//có 2 cập nhật trên mảng arrlvkh và custo
@Override
public void onActivityResult(int requestCode,int
resultCode,Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==MainActivity.CAPNHAT_DS_KHACH_HANG_THANHCONG){
Bundle bundle=data.getBundleExtra("DATA");
LevelKhachHang
lvk=(LevelKhachHang)bundle.getSerializable("LEVEL");
arrlvkh.get(pos).getListKH().clear();
arrlvkh.get(pos).getListKH().addAll(lvk.getListKH());
custo.clear();
for(KhachHang k:db.getAllKhachHang()){
custo.add(k);
Log.d("KhachHang",k.getten());
}
them_don_hang_va_tinh_gia();
adaptercusto.notifyDataSetChanged();
}
Trương Duy Linh - 51101863 34
else
if(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){
Bundle bundle=data.getBundleExtra("DATA");
KhachHang
k=(KhachHang)bundle.getSerializable("KHACHHANG");
custo.get(posi).getListDH().clear();
custo.get(posi).getListDH().addAll(k.getListDH());
int p=0;
for(DonHang d:custo.get(posi).getListDH()){
p+=Integer.parseInt(d.getsmoney());
}
custo.get(posi).setcoins(String.valueOf(p));
db.updateKhachHang(custo.get(posi));
adaptercusto.notifyDataSetChanged();
}
}
//hàm trả về danh sách khách hàng của mỗi level
public static ArrayList<LevelKhachHang> getListLevel(){
return arrlvkh;
}
}
- Class LevelKhachHang
public class LevelKhachHang implements Serializable {
private static final long serialVersionUID = 1L;
//mãng danh sách khách hàng
private ArrayList<KhachHang> arrkh =new ArrayList<KhachHang>();
//tên level
private String ten;
//hàm tạo với tham số tên
public LevelKhachHang(String ten) {
this.ten=ten;
}
//phương thức get,set tên của level
public String getTenlv(){
return this.ten;
}
Trương Duy Linh - 51101863 35
public void setTenlv(String ten){
this.ten=ten;
}
//hàm tạo không tham số
public LevelKhachHang() {
super();
}
//hàm thêm khách hàng của mỗi level
public void Themkh(KhachHang kh){
int i=0;
for(;i<arrkh.size();i++){
KhachHang old=arrkh.get(i);
if(old.getma().trim().equalsIgnoreCase(kh.getma().trim())){
break;
}
}
if(i<arrkh.size()){
arrkh.set(i, kh);
}
else{
arrkh.add(kh);
}
}
//get khách hàng tại vị trí index của level
public KhachHang get(int index){
return arrkh.get(index);
}
//lấy số lượng khách hàng của level đó
public int size(){
return arrkh.size();
}
//lấy danh sách khách hàng của level đó
public ArrayList<KhachHang> getListKH(){
return this.arrkh;
}
}
Trương Duy Linh - 51101863 36
- Class KhachHang chứa các thuộc tính liên quan khách hàng(mã khách hàng, tên,
giới tính, số điện thoại, email, số coins), và các tác vụ get,set.
public class KhachHang implements Serializable{
private static final long serialVersionUID = 1L;
private String ma;
private String ten;
private String sdt;
private String email;
private String level;
private String coins;
private boolean sex;
private ArrayList<DonHang> arrdh= new ArrayList<DonHang>();
//Hàm tạo không tham số
public KhachHang(){
}
//hàm tạo với các tham số mã, tên, sdt, email, level, coins
public KhachHang(String ma,String ten,String sdt,String
email,String level,String coins,boolean sex){
this.ma=ma;
this.ten=ten;
this.sdt=sdt;
this.email=email;
this.sex=sex;
this.coins=coins;
this.level=level;
}
//phương thức get,set cho tên
public String getten(){return ten;}
public void setten(String ten){this.ten=ten;}
//phương thức get,set cho mã
public String getma(){return ma;}
public void setma(String ma){this.ma=ma;}
//phương thức get,set cho sdt
public String getsdt(){return sdt;}
public void setsdt(String sdt){this.sdt=sdt;}
Trương Duy Linh - 51101863 37
//phương thức get,set cho emial
public String getemail(){return email;}
public void setemail(String email){this.email=email;}
//phương thức get,set cho level
public String getlevel(){return level;}
public void setlevel(String level){this.level=level;}
//phương thức get,set cho coins
public String getcoins(){return coins;}
public void setcoins(String coin){this.coins=coin;}
//phương thức get,set cho sex
public boolean getsex(){return sex;}
public void setsex(boolean sex){this.sex=sex;}
//phương thức thêm đơn hàng của mỗi khách hàng
public void Themdh(DonHang dh){
int i=0;
for(;i<arrdh.size();i++){
DonHang old=arrdh.get(i);
if(old.getmaDH().trim().equalsIgnoreCase(dh.getmaDH().trim()))
{
break;
}
}
if(i<arrdh.size()){
arrdh.set(i, dh);
}
else{
arrdh.add(dh);
}
}
//phương thức lấy đơn hàng tại index
public DonHang get(int index){
return arrdh.get(index);
}
//lấy số lượng đơn hàng của khách hàng
Trương Duy Linh - 51101863 38
public int size(){
return arrdh.size();
}
//lấy danh sách đơn hàng của khách hàng
public ArrayList<DonHang> getListDH(){
return this.arrdh;
}
//--------------------------------------------
//viết lại hàm chuyển thành chuổi toString
@Override
public String toString()
{
return this.ma+"---"+"Ten: " +this.ten +"n"
+"Level: "+this.level+"---"+"Coins: "+this.coins;
}
}
- Class DanhSachKhachHang
//Class Danh sách khách hàng hiển thị danh sách khách hàng
//Thiết lập hàm goi các tác vụ thêm,sửa, xóa khách hàng
//chuyển level khách hàng, xem danh sách cơ hội
public class DanhSachKhachHang extends Activity {
ImageButton imgback;
ListView lv;
TextView txtshowlv;
Button btnthemkh;
ArrayList<KhachHang>arrkh =null;
AdapterKhachHang adapter=null;
LevelKhachHang lvkh=null;
private KhachHang cus=null;
int position =-1;
DatabaseHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dskh);
db=new DatabaseHandler(this);
txtshowlv=(TextView)findViewById(R.id.txtlevel);
imgback=(ImageButton)findViewById(R.id.imgback);
btnthemkh=(Button)findViewById(R.id.btnthemkhachhang);
Trương Duy Linh - 51101863 39
lv=(ListView)findViewById(R.id.lvkhachhang);
getdata();
Event();
registerForContextMenu(lv);
}
//lấy danh sách khách hàng của mỗi level truyền từ class
MainActivity
public void getdata(){
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
lvkh=(LevelKhachHang)b.getSerializable("LEVEL");
arrkh=lvkh.getListKH();
them_don_hang_va_tinh_gia();
adapter=new
AdapterKhachHang(this,R.layout.item_layout_custom,arrkh);
lv.setAdapter(adapter);
txtshowlv.setText(lvkh.getTenlv());
}
//Xử lí các sự kiện
public void Event(){
//quay lại layout trước đó, truyền gói LEVEL qua MainActivity
imgback.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("LEVEL", lvkh);
i.putExtra("DATA", b);
setResult(MainActivity.CAPNHAT_DS_KHACH_HANG_THANHCONG,i);
finish();
}
});
//bắt sự kiện click vào mỗi item
lv.setOnItemLongClickListener(new OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> parent, View
view,
int arg, long id) {
cus=arrkh.get(arg);
position=arg;
Trương Duy Linh - 51101863 40
return false;
}
});
//Lấy sư kiện click button thêm khách hàng
btnthemkh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
doThemKhachHang();
}
});
}
//Đăng kí menu context_menu_kh khi click vào mỗi khách hàng
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu_kh, menu);
}
//Bắt sự kiện click các item khi click các memu.
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.mnuchuyenkh:doChuyenKhachHang();break;
case R.id.mnusuakh:doSuaKhachHang();break;
case R.id.mnuxoakh:doXoaKhachHang();break;
case R.id.mnucohoi:doDanhSachCoHoi();break;
case R.id.mnudsdh:doDanhSachDonHang();break;
}
return super.onContextItemSelected(item);
}
//Intent gọi Activity DanhSachCoHoi
public void doDanhSachCoHoi(){
Intent i=new Intent(this, DanhSachCoHoi.class);
Bundle bundle=new Bundle();
bundle.putSerializable("KHACHHANG", cus);
i.putExtra("DATA", bundle);
startActivityForResult(i,MainActivity.MO_DS_COHOI);
}
Trương Duy Linh - 51101863 41
//Intent gọi Activity DanhSachDonHang
public void doDanhSachDonHang(){
//for(DonHang
don:db.getdsdh_ofkh(Integer.parseInt(cus.getma()))){
// cus.Themdh(don);
//}
Intent i=new Intent(this, DanhSachDonHang.class);
Bundle bundle=new Bundle();
bundle.putSerializable("KHACHHANG", cus);
i.putExtra("DATA", bundle);
startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_DON
_HANG);
}
//Truy xuất vào cơ sở dữ liệu the tính coins của mỗi khách hàng
// dựa trên giá của các đơn hàng của khách hàng đó bằng cách truy
suất
//dữ liêu trong cơ sở dữ liệu
public void them_don_hang_va_tinh_gia(){
for(KhachHang kha:arrkh){
int gia=0;
for(DonHang
don:db.getdsdh_ofkh(Integer.parseInt(kha.getma()))){
kha.Themdh(don);
gia+=Integer.parseInt(don.getsmoney());
}
kha.setcoins(String.valueOf(gia));
db.updateKhachHang(kha);
}
}
//Xóa khách hàng dùng AlertDialog hiển thị form hỏi xóa
public void doXoaKhachHang() {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("XOA");
builder.setMessage("Bạn có chắc muốn xóa");
builder.setIcon(R.drawable.ic_launcher);
builder.setNegativeButton("Không", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
Trương Duy Linh - 51101863 42
}
});
builder.setPositiveButton("Có",new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
arrkh.remove(cus);
db.delete_quanhe_KHDH_tu_KH(cus);
db.deleteKhachHang(cus);
for(DonHang do1:cus.getListDH()){
db.delete_quanhe_DH_SP_tu_DH(do1);
db.deleteDonHang(do1);
}
adapter.notifyDataSetChanged();
}
});
builder.show();
}
//Intent gọi Activity Activity_SuaKhachHang
public void doSuaKhachHang() {
Intent i=new Intent(this,Activity_SuaKhachHang.class);
Bundle b=new Bundle();
cus.setlevel(lvkh.getTenlv());
b.putSerializable("KHACHHANG", cus);
i.putExtra("DATA", b);
startActivityForResult(i,MainActivity.MO_ACTIVITY_SUA_KHACH_HA
NG);
}
//Intent gọi Activity Activity_ChuyenKhachHang
public void doChuyenKhachHang() {
Intent i=new Intent(this,Activity_ChuyenKhachHang.class);
Bundle b=new Bundle();
b.putSerializable("KHACHHANG", cus);
i.putExtra("DATA", b);
startActivityForResult(i,MainActivity.MO_ACTIVITY_CHUYEN_LEVEL)
;
Trương Duy Linh - 51101863 43
}
//Intent goi Activity Activity_ThemKhachHang
public void doThemKhachHang(){
Intent i=new Intent(this, Activity_ThemKhachHang.class);
Bundle b=new Bundle();
b.putSerializable("KHACHHANG", cus);
i.putExtra("DATA", b);
startActivityForResult(i,
MainActivity.MO_ACTIVITY_THEM_KHACH_HANG);
}
//Nhận các result từ viêc thêm,sửa,xóa khách hàng, xem danh sách
đơn hàng
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==MainActivity.SUA_KHACH_HANG_THANHCONG){
Bundle b=data.getBundleExtra("DATA");
KhachHang k=(KhachHang)b.getSerializable("KHACHHANG");
arrkh.set(position, k);
db.updateKhachHang(k);
adapter.notifyDataSetChanged();
}
else
if(resultCode==MainActivity.THEM_KHACH_HANG_THANHCONG){
Bundle b=data.getBundleExtra("DATA");
KhachHang k=(KhachHang)b.getSerializable("KHACHHANG");
k.setlevel(lvkh.getTenlv());
arrkh.add(k);
db.addKhachHang(k);
adapter.notifyDataSetChanged();
}
else
if(resultCode==MainActivity.CHUYEN_LEVEL_THANHCONG){
arrkh.remove(cus);
adapter.notifyDataSetChanged();
}
else
if(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){
Bundle bundle=data.getBundleExtra("DATA");
KhachHang
k=(KhachHang)bundle.getSerializable("KHACHHANG");
Trương Duy Linh - 51101863 44
arrkh.get(position).getListDH().clear();
arrkh.get(position).getListDH().addAll(k.getListDH());
int p=0;
for(DonHang d:arrkh.get(position).getListDH()){
p+=Integer.parseInt(d.getsmoney());
}
arrkh.get(position).setcoins(String.valueOf(p));
db.updateKhachHang(arrkh.get(position));
adapter.notifyDataSetChanged();
}
}
}
- Class Activity_ChuyenKhachHang
public class Activity_ChuyenKhachHang extends Activity {
//mảng level
private static ArrayList<LevelKhachHang> arrlv=null;
//lvlevel hiển thị các lựa chọn để chuyển level
ListView lvlevel;
ImageButton imgapply;
//adapter chuyển dữ liệu từ ArratList arrlv thành dữ liệu trên
ListView lvlevel
ArrayAdapter<LevelKhachHang>adapter;
KhachHang kh=null;
DatabaseHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chuyen_level);
db=new DatabaseHandler(this);
lvlevel=(ListView)findViewById(R.id.lvlevel);
imgapply=(ImageButton)findViewById(R.id.imgapply);
//Intent lấy gói dữ liệu được truyền đi từ danh sách khách hàng
//do đó láy được khách hàng được truyền tới
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
kh=(KhachHang)b.getSerializable("KHACHHANG");
arrlv=MainActivity.getListLevel();
//khai báo adapter với layout danh sách single choose, lấy dữ
liệu từ mảng arrlv
adapter=new
Trương Duy Linh - 51101863 45
ArrayAdapter<LevelKhachHang>(this,android.R.layout.simple_list_it
em_single_choice,arrlv);
lvlevel.setAdapter(adapter);
//Lấy vị trí sự kiện click trên ListView, nếu CheckView được
tick
// thì lấy vị trí level được tick tại position thêm vào level
đó
// và thêm khách hàng vào cơ sở dữ liệu
lvlevel.setOnItemClickListener(new OnItemClickListener() {
Boolean somethingChecked=false;
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
if(somethingChecked){
CheckedTextView cv=(CheckedTextView)view;
cv.setChecked(false);
}
CheckedTextView cv=(CheckedTextView)view;
if(!cv.isChecked()){
cv.setChecked(true);
arrlv.get(position).Themkh(kh);
db.chuyenKhachHang(kh,position);
}
somethingChecked=true;
}
});
//Bắt sự kiện khi nhấn button apply,
//thiết lập result thông báo thành công
imgapply.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setResult(MainActivity.CHUYEN_LEVEL_THANHCONG);
finish();
}
});
}
}
- Class Activity_SuaKhachHang
Trương Duy Linh - 51101863 46
public class Activity_SuaKhachHang extends Activity {
EditText txtma,txtten,txtsdt,txtemail;
Button btnxoa,btnluu;
RadioButton raNam;
KhachHang khachhang=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Gọi layout activity_them_khach_hang
setContentView(R.layout.activity_them_khach_hang);
//lấy id từ các View,Button của layout
txtma=(EditText)findViewById(R.id.txtma);
txtten=(EditText)findViewById(R.id.txtten);
txtsdt=(EditText)findViewById(R.id.txtsdt);
txtemail=(EditText)findViewById(R.id.txtemail);
btnxoa=(Button)findViewById(R.id.btnxoa);
btnluu=(Button)findViewById(R.id.btnluu);
raNam=(RadioButton)findViewById(R.id.raNam);
setdefault();
btnxoa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
txtten.setText("");
txtsdt.setText("");
txtemail.setText("");
txtten.requestFocus();
}
});
btnluu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String ten=txtten.getText()+"";
String sdt=txtsdt.getText()+"";
String email=txtemail.getText()+"";
Boolean sex=!raNam.isChecked();
khachhang.setten(ten);
Trương Duy Linh - 51101863 47
khachhang.setsdt(sdt);
khachhang.setemail(email);
khachhang.setsex(sex);
//sau khi chỉnh sửa thì đóng gói dữ liệu và thiết lập
//result thành công
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("KHACHHANG",khachhang);
i.putExtra("DATA", b);
setResult(MainActivity.SUA_KHACH_HANG_THANHCONG,i);
finish();
}
});
}
//Thiết lâp các giá trị mặc định
//lấy gói DATA được truyền từ danh sách khách hàng
//thiết lập thông tin khách hàng lên các View
public void setdefault(){
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
khachhang=(KhachHang)b.getSerializable("KHACHHANG");
txtma.setText(khachhang.getma());
txtten.setText(khachhang.getten());
txtsdt.setText(khachhang.getsdt());
txtemail.setText(khachhang.getemail());
raNam.setChecked(true);
if(khachhang.getsex()){
raNam.setChecked(false);
}
}
}
- Class Activity_ThemKhachHang
public class Activity_ThemKhachHang extends Activity {
EditText txtma,txtten,txtsdt,txtemail;
Button btnxoa,btnluu;
RadioButton raNam;
DatabaseHandler db;
@Override
Trương Duy Linh - 51101863 48
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//gọi layout activity_them_khach_hang
setContentView(R.layout.activity_them_khach_hang);
//Lấy Id các View từ layout
txtma=(EditText)findViewById(R.id.txtma);
txtten=(EditText)findViewById(R.id.txtten);
txtsdt=(EditText)findViewById(R.id.txtsdt);
txtemail=(EditText)findViewById(R.id.txtemail);
btnxoa=(Button)findViewById(R.id.btnxoa);
btnluu=(Button)findViewById(R.id.btnluu);
raNam=(RadioButton)findViewById(R.id.raNam);
//truy vấn vào cơ sở dữ liệu
db=new DatabaseHandler(this);
//thiết lập clear các View khi nhấn xóa
btnxoa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
txtma.setText("");
txtten.setText("");
txtsdt.setText("");
txtemail.setText("");
txtma.requestFocus();
}
});
//Khi lưu dữ liệu được lưu vào cus
//đóng gói DATA truyền đi,thiết lập result thành công
btnluu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String ma=txtma.getText()+"";
String ten=txtten.getText()+"";
String sdt=txtsdt.getText()+"";
String email=txtemail.getText()+"";
String tongtien="";
Boolean sex=!raNam.isChecked();
String level="";
if(db.checkTrung(ma,"id","KhachHang")==0){
KhachHang cus= new
KhachHang(ma,ten,sdt,email,level,tongtien,sex);
Trương Duy Linh - 51101863 49
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("KHACHHANG", cus);
i.putExtra("DATA", b);
setResult(MainActivity.THEM_KHACH_HANG_THANHCONG,i);
finish();
}
}
});
}
}
- Class AdapterKhachHang
public class AdapterKhachHang extends ArrayAdapter<KhachHang> {
Activity context;
int layoutId;
ArrayList<KhachHang> arrkhachhang;
public AdapterKhachHang(Activity context,int textViewResourceId,
ArrayList<KhachHang> objects) {
super(context,textViewResourceId, objects);
this.context=context;
this.layoutId=textViewResourceId;
this.arrkhachhang= objects;
}
@Override
public View getView(int position,View convertView,ViewGroup
parent){
convertView=context.getLayoutInflater().inflate(layoutId,
null);
TextView
ten=(TextView)convertView.findViewById(R.id.txttenkh);
TextView
coins=(TextView)convertView.findViewById(R.id.txtcoins);
ImageView
img=(ImageView)convertView.findViewById(R.id.imageView1);
KhachHang kh=arrkhachhang.get(position);
ten.setText(kh.getten());
coins.setText(kh.getcoins());
img.setImageResource(R.drawable.girlicon);
if(!kh.getsex()){
img.setImageResource(R.drawable.boyicon);
}
return convertView;
Trương Duy Linh - 51101863 50
}
}
- Class CoHoi tạo các thuộc tính và các tác vu get, set
public class CoHoi {
private String tench;
private String mach;
private String ngaych;
private String makh_of_ch;
//hàm tạo CoHoi không tham số
public CoHoi(){};
//hàm tạo CoHoi có tham số: mã cơ hội, tên, ngày thêm, mã khách
hàng của cơ hội
public CoHoi(String mach,String tench,String ngaych,String
makh_of_ch)
{
this.mach=mach;
this.tench=tench;
this.ngaych=ngaych;
this.makh_of_ch=makh_of_ch;
}
//các tác vụ get, set cho ten,ma ngay,makh
public String gettench(){return this.tench;}
public String getmach(){return this.mach;}
public String getngaych(){return this.ngaych;}
public String getmakh_of_ch(){return this.makh_of_ch;}
public void setmach(String ma){this.mach=ma;}
public void settench(String ten){this.tench=ten;}
public void setngaych(String ngay){this.ngaych=ngay;}
public void setmakh_of_ch(String
makh_of_ch){this.makh_of_ch=makh_of_ch;}
//viết lại hàm toString
@Override
public String toString(){
return this.mach+" "+this.tench+" "+this.ngaych;
}
}
- Class DanhSachCoHoi
//class này thiện danh sách các cơ hội
//thêm các cơ hội, xóa các cơ hội
Trương Duy Linh - 51101863 51
public class DanhSachCoHoi extends Activity{
private ArrayList<CoHoi> arrch=new ArrayList<CoHoi>();
AdapterChoHoi adapter=null;
ListView listcohoi;
EditText txttench,txtngaych,txtmach1;
Button addch,xoach;
DatabaseHandler db;
int so=0;
KhachHang kh=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dsch);
listcohoi=(ListView)findViewById(R.id.listcohoi);
txttench=(EditText)findViewById(R.id.txttench);
txtngaych=(EditText)findViewById(R.id.txtngaych);
txtmach1=(EditText)findViewById(R.id.txtmach1);
addch=(Button)findViewById(R.id.btnaddch);
xoach=(Button)findViewById(R.id.btnxoach);
db=new DatabaseHandler(this);
getData();
//thiết lập Adapter theo cấu trúc cơ hội
adapter=new AdapterChoHoi(this,R.layout.item_cohoi,arrch);
listcohoi.setAdapter(adapter);
// thực hiện sự kiện thêm cơ hội
addch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String ma=txtmach1.getText()+"";
String ten=txttench.getText()+"";
String ngay=txtngaych.getText()+"";
if(db.checkTrung(ma,"ma_ch","Cohoi")==0){
CoHoi ch=new CoHoi(ma,ten,ngay,kh.getma());
arrch.add(ch);
db.addCoHoi(ch);
adapter.notifyDataSetChanged();
txttench.setText("");
Trương Duy Linh - 51101863 52
txtngaych.setText("");
txttench.requestFocus();
}
}
});
//thực hiện sự kiện xóa các cơ hội,có thể xóa 1 hoặc nhiều
xoach.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for(int i=listcohoi.getChildCount()-1;i>=0;i--){
View t=listcohoi.getChildAt(i);
CheckBox
ch=(CheckBox)t.findViewById(R.id.chkitem);
if(ch.isChecked()){
db.deleteCoHoi(arrch.get(i));
arrch.remove(i);
}
}
adapter.notifyDataSetChanged();
}
});
adapter.notifyDataSetChanged();
}
//Lấy khách hàng sẽ thêm cơ hội
public void getData(){
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
kh=(KhachHang)b.getSerializable("KHACHHANG");
for(CoHoi c:db.getAllCoHoi(Integer.parseInt(kh.getma()))){
arrch.add(c);
}
}
}
- Class DatabaseHandle xây dựng cấu trúc các bảng dữ liệu và các hàm insert, update,
delete.
Trương Duy Linh - 51101863 53
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME="KhachHangManager";
//table khach hang
private static final String TABLE_KHACHHANG="KhachHang";
private static final String ID="id";
private static final String NAME="name";
private static final String PHONE="phone";
private static final String EMAIL="email";
private static final String LEVEL="level";
private static final String COINS="coins";
private static final String SEX="sex";
//table donhang
private static final String TABLE_DONHANG="donhang";
private static final String ID_DH="id_dh";
private static final String NAME_DH="name_dh";
private static final String DATE_DH="date_dh";
private static final String MONEY_DH="sum_money";
//table product
private static final String TABLE_PRODUCT="product";
private static final String ID_SP="ma_sp";
private static final String NAME_SP="ten_sp";
private static final String INFO_SP="info_sp";
private static final String PRICE_SP="price_sp";
//table of_cus
private static final String TABLE_OF_CUS="of_cus";
private static final String ID_KH_OF_CUS="id_kh_of_cus";
private static final String ID_DH_OF_CUS="id_dh_of_cus";
//table bo_bill
private static final String TABLE_OF_BILL="of_bill";
private static final String ID_SP_OF_BILL="id_sp_of_bill";
private static final String ID_DH_OF_BILL="id_dh_of_bill";
//table co hoi
private static final String TABLE_COHOI="Cohoi";
private static final String ID_MA_CH="ma_ch";
private static final String ID_TEN_CH="ten_ch";
private static final String ID_NGAY_CH="ngay_ch";
private static final String ID_MA_KH_CH="ma_kh_ch";
Trương Duy Linh - 51101863 54
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
//thiết lập lệnh tạo các table và thực thi các lệnh đó
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String CREATE_KhachHang_TABLE="CREATE TABLE
"+TABLE_KHACHHANG+" ( "
+ID+" INTEGER PRIMARY KEY, "
+NAME+" TEXT, "
+PHONE+" TEXT, "
+EMAIL+ " TEXT, "
+LEVEL+ " TEXT, "
+COINS+ " TEXT, "
+SEX+" TEXT )";
String CREATE_DonHang_TABLE="CREATE TABLE
"+TABLE_DONHANG+" ("
+ID_DH +" INTEGER PRIMARY KEY, "
+NAME_DH+ " TEXT, "
+DATE_DH+ " TEXT, "
+MONEY_DH+ " TEXT )";
String CREATE_Product_TABLE="CREATE TABLE
"+TABLE_PRODUCT+" ("
+ID_SP +" INTEGER PRIMARY KEY, "
+NAME_SP+ " TEXT, "
+INFO_SP+ " TEXT, "
+PRICE_SP+ " TEXT )";
String CREATE_of_cus_TABLE="CREATE TABLE "+TABLE_OF_CUS+"
("
+ ID_KH_OF_CUS+ " INTEGER, "
+ ID_DH_OF_CUS+ " INTEGER, "
+" PRIMARY KEY ("+ID_KH_OF_CUS+","+ID_DH_OF_CUS+" )"
+" FOREIGN KEY("+ID_KH_OF_CUS+") REFERENCES "
+TABLE_KHACHHANG+"( "+ID+") ON DELETE CASCADE ON UPDATE
CASCADE,"
+" FOREIGN KEY("+ID_DH_OF_CUS+") REFERENCES "
+TABLE_DONHANG+"( "+ID_DH+") ON DELETE CASCADE ON UPDATE
CASCADE )";
String CREATE_of_bill_TABLE="CREATE TABLE "+TABLE_OF_BILL +
" ( "+ ID_DH_OF_BILL+" INTEGER, "
Trương Duy Linh - 51101863 55
+ ID_SP_OF_BILL+" INTEGER, "
+ " PRIMARY KEY
("+ID_DH_OF_BILL+","+ID_SP_OF_BILL+" )"
+" FOREIGN KEY("+ID_DH_OF_BILL+") REFERENCES "
+TABLE_DONHANG+"( "+ID_DH+") ON DELETE CASCADE ON UPDATE
CASCADE,"
+" FOREIGN KEY("+ID_SP_OF_BILL+") REFERENCES "
+TABLE_PRODUCT+"( "+ID_SP+") ON DELETE CASCADE ON UPDATE
CASCADE )";
String CREATE_co_hoi_TABLE="CREATE TABLE "+TABLE_COHOI
+" ( "+ID_MA_CH +" TEXT PRIMARY KEY, "
+ ID_TEN_CH+" TEXT, "
+ ID_NGAY_CH+" TEXT, "
+ ID_MA_KH_CH+" INTEGER, "
+ "FOREIGN KEY("+ID_MA_KH_CH+") REFERENCES
"+TABLE_KHACHHANG+"("+ID+") ON DELETE CASCADE ON UPDATE
CASCADE )";
db.execSQL(CREATE_KhachHang_TABLE);
db.execSQL(CREATE_DonHang_TABLE);
db.execSQL(CREATE_Product_TABLE);
db.execSQL(CREATE_of_cus_TABLE);
db.execSQL(CREATE_of_bill_TABLE);
db.execSQL(CREATE_co_hoi_TABLE);
}
//xóa các table khi version thay đổi
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS "+TABLE_KHACHHANG);
db.execSQL("DROP TABLE IF EXISTS "+TABLE_DONHANG);
db.execSQL("DROP TABLE IF EXISTS "+TABLE_PRODUCT);
db.execSQL("DROP TABLE IF EXISTS "+TABLE_OF_CUS);
db.execSQL("DROP TABLE IF EXISTS "+TABLE_OF_BILL);
db.execSQL("DROP TABLE IF EXISTS "+TABLE_COHOI);
onCreate(db);
}
//add single KhachHang
public void addKhachHang(KhachHang khachhang){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
Trương Duy Linh - 51101863 56
values.put(NAME, khachhang.getten());
values.put(PHONE, khachhang.getsdt());
values.put(EMAIL, khachhang.getemail());
values.put(LEVEL, khachhang.getlevel());
values.put(COINS, khachhang.getcoins());
values.put(SEX, khachhang.getsex()?"Nam":"Nu");
//insert row
db.insert(TABLE_KHACHHANG, null, values);
db.close();
}
//read row
public KhachHang getKhachHang(int id){
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.query(TABLE_KHACHHANG, new String[]{ID,NAME},
ID +" = ?", new String[]{String.valueOf(id)}, null, null, null,null);
if(cursor!=null)
cursor.moveToFirst();
KhachHang khachhang=new
KhachHang(String.valueOf(cursor.getInt(0)),cursor.getString(1),cursor.getString(2),c
ursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)=="Nam"?
true:false);
return khachhang;
}
//Trả về danh sách khách hàng đọng từ cơ sở dữ liệu
public ArrayList<KhachHang> getAllKhachHang(){
ArrayList<KhachHang> KhachHanglist=new ArrayList<KhachHang>();
String selectquery="SELECT * FROM "+TABLE_KHACHHANG;
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.rawQuery(selectquery, null);
if(cursor.moveToFirst()){
do{
KhachHang khachhang=new KhachHang();
khachhang.setma(cursor.getString(0));
khachhang.setten(cursor.getString(1));
khachhang.setsdt(cursor.getString(2));
khachhang.setemail(cursor.getString(3));
khachhang.setlevel(cursor.getString(4));
khachhang.setcoins(cursor.getString(5));
Trương Duy Linh - 51101863 57
khachhang.setsex((cursor.getString(6)=="Nam"?true:false));
KhachHanglist.add(khachhang);
}while(cursor.moveToNext());
}
return KhachHanglist;
}
//lấy số lượng khách hàng đọc từ cơ sở dữ liệu
public int getKhachHangCount(){
String countQuery = "SELECT * FROM " + TABLE_KHACHHANG;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int count = 0;
try {
if (cursor.moveToFirst()) {
count = cursor.getCount();
}
return count;
}
finally {
if (cursor != null) {
cursor.close();
db.close();
}
}
}
//cập nhật thông tin khách hàng trong cơ sở dữ liệu
public int updateKhachHang(KhachHang khachhang){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(NAME, khachhang.getten());
values.put(PHONE, khachhang.getsdt());
values.put(SEX,khachhang.getsex()?"Nam":"Nu");
values.put(EMAIL, khachhang.getemail());
values.put(LEVEL, khachhang.getlevel());
values.put(COINS, khachhang.getcoins());
return db.update(TABLE_KHACHHANG, values, ID+" = ?", new
String[]{String.valueOf(khachhang.getma())});
Trương Duy Linh - 51101863 58
}
// thay đổi level khách hàng bằng cách cập nhật lại côt level
//trong table KhachHang
public void chuyenKhachHang(KhachHang k,int i){
SQLiteDatabase db = this.getWritableDatabase();
if(i==0){k.setlevel("VIP");}
else if(i==1){k.setlevel("THUONG");}
else {k.setlevel("TIMNANG");}
updateKhachHang(k);
db.close();
}
//xóa khách hàng
public void deleteKhachHang(KhachHang khachhang){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_KHACHHANG, ID + " = ?",
new String[] { String.valueOf(khachhang.getma()) });
db.close();
}
//lay Danh sach don hang cua khach hang
public ArrayList<DonHang> getdsdh_ofkh(int id){
ArrayList<DonHang> listdh=new ArrayList<DonHang>();
String query ="SELECT * FROM "+TABLE_OF_CUS +" WHERE
"+ID_KH_OF_CUS+" = "+id;
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.rawQuery(query,null);
if(cursor.moveToFirst()){
do{
String query2 ="SELECT * FROM "+TABLE_DONHANG +"
WHERE "+ID_DH+" = "+cursor.getString(1);
Cursor cursor2=db.rawQuery(query2,null);
if(cursor2.moveToFirst()){
do{
DonHang dh=new DonHang();
dh.setmaDH(cursor2.getString(0));
dh.settenDH(cursor2.getString(1));
dh.setdate(cursor2.getString(2));
dh.setsmoney(cursor2.getString(3));
Trương Duy Linh - 51101863 59
listdh.add(dh);
}while(cursor2.moveToNext());
}
}while(cursor.moveToNext());
}
return listdh;
}
//lay danh sach san pham cua don hang
public ArrayList<SanPham> getdssp_ofdh(int id){
ArrayList<SanPham> listsp=new ArrayList<SanPham>();
String query ="SELECT * FROM "+TABLE_OF_BILL +" WHERE
"+ID_DH_OF_BILL+" = "+id;
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.rawQuery(query,null);
if(cursor.moveToFirst()){
do{
String query2 ="SELECT * FROM "+TABLE_PRODUCT +"
WHERE "+ID_SP+" = "+cursor.getString(1);
Cursor cursor2=db.rawQuery(query2,null);
if(cursor2.moveToFirst()){
do{
SanPham sp=new SanPham();
sp.setmaSP(cursor2.getString(0));
sp.settenSP(cursor2.getString(1));
sp.setthongtinSP(cursor2.getString(2));
sp.setprice(cursor2.getString(3));
listsp.add(sp);
}while(cursor2.moveToNext());
}
}while(cursor.moveToNext());
}
return listsp;
}
//them don hang vao 1 khach hang va vao csdl
public void addSanPham(SanPham sanpham){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(ID_SP, sanpham.getmaSP());
Trương Duy Linh - 51101863 60
values.put(NAME_SP, sanpham.gettenSP());
values.put(INFO_SP, sanpham.getthongtinSP());
values.put(PRICE_SP, sanpham.getprice());
//insert row
db.insert(TABLE_PRODUCT, null, values);
db.close();
}
//them san pham vao 1 don hang
public void addDonHang(DonHang donhang){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(ID_DH, donhang.getmaDH());
values.put(NAME_DH, donhang.gettenDH());
values.put(DATE_DH, donhang.getdate());
values.put(MONEY_DH, donhang.getsmoney());
//insert row
db.insert(TABLE_DONHANG, null, values);
db.close();
}
//update don hang
public int updateDonHang(DonHang donhang){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(ID_DH, donhang.getmaDH());
values.put(NAME_DH, donhang.gettenDH());
values.put(DATE_DH, donhang.getdate());
values.put(MONEY_DH, donhang.getsmoney());
return db.update(TABLE_DONHANG, values, ID_DH+" = ?", new
String[]{String.valueOf(donhang.getmaDH())});
}
//update san pham
public int updateSanPham(SanPham sanpham){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(ID_SP, sanpham.getmaSP());
Trương Duy Linh - 51101863 61
values.put(NAME_SP, sanpham.gettenSP());
values.put(INFO_SP, sanpham.getthongtinSP());
values.put(PRICE_SP, sanpham.getprice());
return db.update(TABLE_PRODUCT, values, ID_SP+" = ?", new
String[]{String.valueOf(sanpham.getmaSP())});
}
//xoa don hang
public void deleteDonHang(DonHang donhang){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_DONHANG, ID_DH + " = ?",
new String[] { String.valueOf(donhang.getmaDH()) });
db.close();
}
//xoa delete_quanhe_KHDH_tu_KH
public void delete_quanhe_KHDH_tu_KH(KhachHang khachhang){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_OF_CUS, ID_KH_OF_CUS + " = ?",
new String[] { String.valueOf(khachhang.getma()) });
db.close();
}
//xoa delete_quanhe_KHHD_tu_DH
public void delete_quanhe_KHDH_tu_DH(DonHang donhang){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_OF_CUS, ID_DH_OF_CUS + " = ?",
new String[] { String.valueOf(donhang.getmaDH()) });
db.close();
}
//xoa delete_quanhe_DH_SP_tu_DH
public void delete_quanhe_DH_SP_tu_DH(DonHang donhang){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_OF_BILL, ID_DH_OF_BILL + " = ?",
new String[] { String.valueOf(donhang.getmaDH()) });
db.close();
}
//xoa delete_quanhe_DHSP_tu_SP
public void delete_quanhe_DHSP_tu_SP(SanPham sanpham){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_OF_BILL, ID_SP_OF_BILL + " = ?",
Trương Duy Linh - 51101863 62
new String[] { String.valueOf(sanpham.getmaSP()) });
db.close();
}
//xoa san pham
public void deleteSanPham(SanPham sanpham){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_PRODUCT, ID_SP + " = ?",
new String[] { String.valueOf(sanpham.getmaSP()) });
db.close();
}
//them vao bang of_cus
public void addof_cus(KhachHang khachhang,DonHang donhang){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(ID_KH_OF_CUS, khachhang.getma());
values.put(ID_DH_OF_CUS, donhang.getmaDH());
//insert row
db.insert(TABLE_OF_CUS, null, values);
db.close();
}
//them vao bang of_bill
public void addof_bill(DonHang donhang,SanPham sanpham){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(ID_DH_OF_BILL, donhang.getmaDH());
values.put(ID_SP_OF_BILL, sanpham.getmaSP());
//insert row
db.insert(TABLE_OF_BILL, null, values);
db.close();
}
public boolean chkDB(){
boolean chk = false;
SQLiteDatabase db = this.getWritableDatabase();
Cursor mCursor = db.rawQuery("SELECT * FROM " +
TABLE_KHACHHANG, null);
if (mCursor != null){
Trương Duy Linh - 51101863 63
mCursor.moveToFirst();
if (mCursor.getInt(0) == 0){
chk = false;
}
}else{
chk = true;
}
db.close();
return chk;
}
//thêm 1 cơ hội vào CSDL
public void addCoHoi(CoHoi cohoi){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues values=new ContentValues();
values.put(ID_MA_CH, cohoi.getmach());
values.put(ID_TEN_CH, cohoi.gettench());
values.put(ID_NGAY_CH, cohoi.getngaych());
values.put(ID_MA_KH_CH, cohoi.getmakh_of_ch());
//insert row
db.insert(TABLE_COHOI, null, values);
db.close();
}
// xóa cơ hội khỏi CSDL
public void deleteCoHoi(CoHoi cohoi){
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_COHOI, ID_MA_CH + " = ?",
new String[] { String.valueOf(cohoi.getmach()) });
db.close();
}
//Lấy danh sách cơ hội
public ArrayList<CoHoi> getAllCoHoi(int ma){
ArrayList<CoHoi> CoHoilist=new ArrayList<CoHoi>();
String selectquery="SELECT * FROM "+TABLE_COHOI+" WHERE
"+ID_MA_KH_CH+" = "+ma;
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.rawQuery(selectquery, null);
if(cursor.moveToFirst()){
do{
CoHoi cohoi=new CoHoi();
cohoi.setmach(cursor.getString(0));
Trương Duy Linh - 51101863 64
cohoi.settench(cursor.getString(1));
cohoi.setngaych(cursor.getString(2));
cohoi.setmakh_of_ch(cursor.getString(3));
CoHoilist.add(cohoi);
}while(cursor.moveToNext());
}
return CoHoilist;
}
//Kiểm tra khi thêm 1 khách hàng, 1 đơn hàng, 1 cơ hội, mã của nó
//có cùng với mã hiện tại hay chưa
public int checkTrung(String i,String column,String table){
String countQuery = "SELECT * FROM " + table+" WHERE "+column+" =
"+i;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int count = 0;
try {
if (cursor.moveToFirst()) {
count = cursor.getCount();
}
return count;
}
finally {
if (cursor != null) {
cursor.close();
db.close();
}
}
}
}
- Class DonHang
//Class đơn hàng chứa thông tin đơn hàng gồm mã, tên, date, smoney
public class DonHang implements Serializable{
private static final long serialVersionUID = 1L;
private String maDH;
private String tenDH;
private String date;
private String smoney;
Trương Duy Linh - 51101863 65
//khởi tạo danh sách sản phẩm
private ArrayList<SanPham>arrsp=new ArrayList<SanPham>();
public DonHang(){
}
public DonHang(String maDH,String tenDH,String date,String
smoney){
this.maDH=maDH;
this.tenDH=tenDH;
this.date=date;
this.smoney=smoney;
}
//các tác vụ get,set
public String gettenDH(){return tenDH;}
public void settenDH(String ten){this.tenDH=ten;}
public String getmaDH(){return maDH;}
public void setmaDH(String ma){this.maDH=ma;}
public String getdate(){return date;}
public void setdate(String date){this.date=date;}
public String getsmoney(){return smoney;}
public void setsmoney(String smoney){this.smoney=smoney;}
//thêm sản phẩm cho đơn hàng
public void Themsp(SanPham sp){
int i=0;
for(;i<arrsp.size();i++){
SanPham old=arrsp.get(i);
if(old.getmaSP().trim().equalsIgnoreCase(sp.getmaSP().trim()))
{
break;
}
}
if(i<arrsp.size()){
arrsp.set(i, sp);
}
else{
arrsp.add(sp);
}
Trương Duy Linh - 51101863 66
}
//lấy sản phẩm tại vị trí index của mảng
public SanPham get(int index){
return arrsp.get(index);
}
//lấy sô lượng sản phẩm
public int size(){
return arrsp.size();
}
//lấy danh sách sản phẩm của đon hàng đó
public ArrayList<SanPham> getListSP(){
return this.arrsp;
}
//--------------------------------------------
@Override
public String toString()
{
return this.maDH+" "+this.tenDH+" "+this.date+"
"+this.smoney;
}
}
- Class DanhSachDonHang
public class DanhSachDonHang extends Activity{
ImageButton btnbackDH;
ListView lvdh;
Button btnthemdh;
KhachHang kh=null;
ArrayAdapter<DonHang> adapter=null;
ArrayList<DonHang> arrdh=null;
DonHang donhang=null;
DatabaseHandler db;
private int position =-1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dsdh);
btnbackDH=(ImageButton)findViewById(R.id.btnbackDH);
lvdh=(ListView)findViewById(R.id.lvDH);
btnthemdh=(Button)findViewById(R.id.btnthemdh);
db=new DatabaseHandler(this);
arrdh=new ArrayList<DonHang>();
Trương Duy Linh - 51101863 67
getData();
Event();
registerForContextMenu(lvdh);
}
/*
* Lấy khách hàng là chủ của các đơn hàng này
* Lấy danh sách các sản phẩm từ CSDL
*/
public void getData(){
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
kh=(KhachHang)b.getSerializable("KHACHHANG");
arrdh=kh.getListDH();
Them_sp_va_tinh_giadonhang();//-----------
adapter=new
ArrayAdapter<DonHang>(this,android.R.layout.simple_list_item_1,ar
rdh);
lvdh.setAdapter(adapter);
}
//Xử lí các sự kiện
public void Event(){
//Xử lí sự kiện trở về danh sách khách hàng
btnbackDH.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("KHACHHANG", kh);
i.putExtra("DATA", b);
setResult(MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG,i);
finish();
}
});
//Xử lí sự kiện click vào item ListView
lvdh.setOnItemLongClickListener(new
OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View
view,
int arg, long id) {
Trương Duy Linh - 51101863 68
donhang=arrdh.get(arg);
position=arg;
return false;
}
});
//Xử lí sự kiện thêm đơn hàng cho vào danh sách đơn hàng
btnthemdh.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
doThemDonHang();
}
});
}
//Đăng kí Contextmenu
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu_dh, menu);
}
//Xử lí xự kiện click item trong contextmenu
//Gồm: sửa, xóa, xem danh sách sản phẩm
@Override
public boolean onContextItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.mnusuadh:doSuaDonHang();break;
case R.id.mnuxoadh:doXoaDonHang();break;
case R.id.mnudssp:doDanhSachSanPham();break;
}
return super.onContextItemSelected(item);
}
//Intent gọi Activity DanhSachSanPham
public void doDanhSachSanPham(){
//for(SanPham
Trương Duy Linh - 51101863 69
san:db.getdssp_ofdh(Integer.parseInt(donhang.getmaDH()))){
//donhang.Themsp(san);
//}
Intent i=new Intent(this, DanhSachSanPham.class);
Bundle bundle=new Bundle();
bundle.putSerializable("DONHANG", donhang);
i.putExtra("DATA", bundle);
startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_SAN
_PHAM);
}
//Thêm các sản phẩm vào mỗi đơn hàng tương ứng
//tính giá của đơn hàng thông qua các sản phẩm đó
public void Them_sp_va_tinh_giadonhang(){
for(DonHang dhang:arrdh){
int gia=0;
for(SanPham
san:db.getdssp_ofdh(Integer.parseInt(dhang.getmaDH()))){
dhang.Themsp(san);
gia+=Integer.parseInt(san.getprice());
}
dhang.setsmoney(String.valueOf(gia));
db.updateDonHang(dhang);
}
}
//Hiển thị form AlertDialog, thực hiện việc xóa đơn hàng
public void doXoaDonHang() {
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("XOA");
builder.setMessage("Bạn có chắc muốn xóa");
builder.setIcon(R.drawable.ic_launcher);
builder.setNegativeButton("Không", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setPositiveButton("Có",new
DialogInterface.OnClickListener() {
Trương Duy Linh - 51101863 70
@Override
public void onClick(DialogInterface dialog, int which) {
arrdh.remove(donhang);
db.delete_quanhe_DH_SP_tu_DH(donhang);
db.delete_quanhe_KHDH_tu_DH(donhang);
db.deleteDonHang(donhang);
adapter.notifyDataSetChanged();
}
});
builder.show();
}
//Intent gọi Activity Activity_SuaDonHang
public void doSuaDonHang() {
Intent i=new Intent(this,Activity_SuaDonHang.class);
Bundle b=new Bundle();
b.putSerializable("DONHANG", donhang);
i.putExtra("DATA", b);
startActivityForResult(i,MainActivity.MO_ACTIVITY_SUA_DON_HANG)
;
}
//Intetn gọi Activity Activity_ThemDonHang
public void doThemDonHang(){
Intent i=new Intent(this, Activity_ThemDonHang.class);
Bundle b=new Bundle();
b.putSerializable("DONHANG", donhang);
i.putExtra("DATA", b);
startActivityForResult(i,
MainActivity.MO_ACTIVITY_THEM_DON_HANG);
}
//Nhận result từ thêm, sửa đơn hàng và cập nhật danh sách sản phẩm
thành công
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==MainActivity.SUA_DON_HANG_THANHCONG){
Trương Duy Linh - 51101863 71
Bundle b=data.getBundleExtra("DATA");
DonHang d=(DonHang)b.getSerializable("DONHANG");
arrdh.set(position, d);
db.updateDonHang(d);
adapter.notifyDataSetChanged();
}
else if(resultCode==MainActivity.THEM_DON_HANG_THANHCONG){
Bundle b=data.getBundleExtra("DATA");
DonHang d=(DonHang)b.getSerializable("DONHANG");
arrdh.add(d);
db.addDonHang(d);
db.addof_cus(kh, d);
adapter.notifyDataSetChanged();
}
else
if(resultCode==MainActivity.CAPNHAT_DS_SAN_PHAM_THANHCONG){
Bundle bundle=data.getBundleExtra("DATA");
DonHang d=(DonHang)bundle.getSerializable("DONHANG");
arrdh.get(position).getListSP().clear();
arrdh.get(position).getListSP().addAll(d.getListSP());
//Them_sp_va_tinh_giadonhang();//-----------
int p=0;
for(SanPham s:arrdh.get(position).getListSP()){
p+=Integer.parseInt(s.getprice());
}
arrdh.get(position).setsmoney(String.valueOf(p));
db.updateDonHang(arrdh.get(position));
adapter.notifyDataSetChanged();
}
}
}
- Class Activity_SuaDonHang
public class Activity_SuaDonHang extends Activity {
EditText txtma,txtten,txtdate,txtmoney;
Button btnxoa,btnluu;
DonHang donhang=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Trương Duy Linh - 51101863 72
//goi layout activity_them_don_hang
setContentView(R.layout.activity_them_don_hang);
//get id của các View Button
txtma=(EditText)findViewById(R.id.txtmaDH);
txtten=(EditText)findViewById(R.id.txttenDH);
txtdate=(EditText)findViewById(R.id.txtngay);
txtmoney=(EditText)findViewById(R.id.txtmoney);
btnxoa=(Button)findViewById(R.id.btnxoatt);
btnluu=(Button)findViewById(R.id.btnsavettdh);
setdefault();
btnxoa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
txtten.setText("");
txtdate.setText("");
txtmoney.setText("");
txtten.requestFocus();
}
});
//lưu thông tin từ layout vao donhang,
//set result sưa đơn hàng thành công
btnluu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String ten=txtten.getText()+"";
String ngay=txtdate.getText()+"";
String money=txtmoney.getText()+"";
donhang.settenDH(ten);
donhang.setdate(ngay);
donhang.setsmoney(money);
Trương Duy Linh - 51101863 73
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("DONHANG",donhang);
i.putExtra("DATA", b);
setResult(MainActivity.SUA_DON_HANG_THANHCONG,i);
finish();
}
});
}
//get thông tin đơn hàng từ gói DATA
public void setdefault(){
Intent i=getIntent();
Bundle b=i.getBundleExtra("DATA");
donhang=(DonHang)b.getSerializable("DONHANG");
txtma.setText(donhang.getmaDH());
txtten.setText(donhang.gettenDH());
txtdate.setText(donhang.getdate());
txtmoney.setText(donhang.getsmoney());
}
}
- Class Activity_ThemDonHang
public class Activity_ThemDonHang extends Activity {
EditText txtma,txtten,txtngay,txtmoney;
Button btnxoa,btnluu;
DatabaseHandler db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_them_don_hang);
db=new DatabaseHandler(this);
txtma=(EditText)findViewById(R.id.txtmaDH);
txtten=(EditText)findViewById(R.id.txttenDH);
txtngay=(EditText)findViewById(R.id.txtngay);
txtmoney=(EditText)findViewById(R.id.txtmoney);
btnxoa=(Button)findViewById(R.id.btnxoatt);
btnluu=(Button)findViewById(R.id.btnsavettdh);
//clear các dữ liệu hiển thị trên layout
Trương Duy Linh - 51101863 74
btnxoa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
txtma.setText("");
txtten.setText("");
txtngay.setText("");
txtmoney.setText("");
txtma.requestFocus();
}
});
//Xử lí lưu các thông tin vào dh đóng gói và truyền lại cho
//Activity DanhSachDonHang
btnluu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String ma=txtma.getText()+"";
String ten=txtten.getText()+"";
String ngay=txtngay.getText()+"";
String tien=txtmoney.getText()+"";
if(db.checkTrung(ma,"id_dh","donhang")==0)
{
DonHang dh=new DonHang(ma,ten,ngay,tien);
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("DONHANG", dh);
i.putExtra("DATA", b);
setResult(MainActivity.THEM_DON_HANG_THANHCONG,i);
finish();
}
}
});
}
}
- Các Class trong Pakage có cấu trúc tương tự như trong Package donhang.
- Ngoài ra còn cấu trúc Các menu
+ context_menu_dh: chứa các item Xửa, Xóa, Xem Danh sách sản phẩm
+ context_menu_kh: chứa các item Xửa, Xóa, chuyển khách hàng, xem danh sách
cơ hội
+ context_menu_level:chứa các item level VIP, THUONG, TIMNANG
Trương Duy Linh - 51101863 75
+context_menu_sp: chứa các item Xửa, Xóa sản phẩm.
- Cấu trúc AndroidManifest
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity_ChuyenKhachHang"
android:label="@string/app_name"
android:theme="@android:style/Theme.Dialog">
</activity>
<activity
android:name=".Activity_SuaKhachHang"
android:label="@string/app_name" >
</activity>
<activity
android:name=".Activity_ThemKhachHang"
android:label="@string/app_name" >
</activity>
<activity
android:name=".DanhSachKhachHang"
android:label="@string/app_name" >
</activity>
Trương Duy Linh - 51101863 76
<activity
android:name=".DanhSachCoHoi"
android:label="@string/app_name" >
</activity>
<activity
android:name="donhang.DanhSachDonHang"
android:label="@string/app_name" >
</activity>
<activity
android:name="donhang.Activity_SuaDonHang"
android:label="@string/app_name" >
</activity>
<activity
android:name="donhang.Activity_ThemDonHang"
android:label="@string/app_name" >
</activity>
<activity
android:name="sanphamco.Activity_ThemSanPham"
android:label="@string/app_name" >
</activity>
<activity
android:name="sanphamco.DanhSachSanPham"
android:label="@string/app_name" >
</activity>
<activity
android:name="sanphamco.Activity_SuaSanPham"
android:label="@string/app_name" >
</activity>
</application>
Trương Duy Linh - 51101863 77
7. Các Class được hỗ trợ sẵn và phương thức giao tiếp giữa các
Activity, CSDL SQLite
- Serializable: giải quyết vấn đề giúp quản lí ràn buộc khi đọc và ghi xuống
tập tin.Việc đọc và ghi các đối tượng không phải lúc nào cũng đơn giản, có những
đói tượng mà bản thân nó bao gồm nhiều đối tượng khác thì sao? (và những đối
tượng lại tham khảo đến hàng tá đối tượng khác nữa). Do đó java hiện thực giao
diện Serializable. Java chịu trách nhiệm dò tìm bất cứ đối tượng nào có liên quan
đến đối tượng đó khi đọc và ghi dữ liệu.
- Intent: Ứng dụng Android có thể bao gồm nhiều Activities hoạt động độc
lập. Tuy nhiên để gắn kết các thành phần này thành 1 hệ thống có trao đổi dữ liệu
và tương tác lẫn nhau, Android đưa ra khái niệm quan trọng, mấu chốt trong lập
trình Android đó chính là Intent.
Android sử dụng Intents như là những thông điệp bất đồng bộ để cho phép các
thành phần ứng dụng “nói chuyện” được với nhau: yêu cầu chức năng từ thành
phần khác, cho phép tương tác với các thành phần riêng và các ứng dụng khác.Có
2 thuộc tính quan trọng của Intent khi lập trình trên Android cần chú ý đó là
Action và Data:
 Action: qui định hành động chung sẽ được thực hiện.
 Data: là dữ liệu sẽ được xử lý.
+ Trong Project thực hiện mở 1 Activity khác đồng thời truyền dữ liệu qua và
xử lí kết quả trả về.
Chúng ta dựa vào requestCode, resultCode để xử lí.
+ Hàm gọi:
Báo Cáo Đề Tài Xây Dựng Phần Mềm Quản Lí Khách Hàng Trên Android
Báo Cáo Đề Tài Xây Dựng Phần Mềm Quản Lí Khách Hàng Trên Android

More Related Content

What's hot

C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...Long Kingnam
 
Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...
Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...
Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...hoainhan1501
 
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Tú Cao
 
Do an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tuDo an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tuThiênĐàng CôngDân
 
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền androidĐồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền androidlaonap166
 
Giáo trình bảo mật thông tin
Giáo trình bảo mật thông tinGiáo trình bảo mật thông tin
Giáo trình bảo mật thông tinjackjohn45
 
Hệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHan Nguyen
 
Phân tích và thiết kế hệ thống quản lý quán Internet
Phân tích và thiết kế hệ thống quản lý quán InternetPhân tích và thiết kế hệ thống quản lý quán Internet
Phân tích và thiết kế hệ thống quản lý quán Internetnataliej4
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngleemindinh
 
Báo cáo phân tích thiết kế đồ án game
Báo cáo phân tích thiết kế đồ án game Báo cáo phân tích thiết kế đồ án game
Báo cáo phân tích thiết kế đồ án game Tạ Thành Đạt
 
Xây dựng biểu đồ use case
Xây dựng biểu đồ use caseXây dựng biểu đồ use case
Xây dựng biểu đồ use caseTrung Chinh Hà
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựleemindinh
 
Báo cáo t hiết kế mạng doanh nghiệp
Báo cáo t hiết kế mạng doanh nghiệpBáo cáo t hiết kế mạng doanh nghiệp
Báo cáo t hiết kế mạng doanh nghiệpLe Trung Hieu
 
Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.ssuser499fca
 
Báo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngBáo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngjackjohn45
 

What's hot (20)

C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
C# Báo cáo môn lập trình hướng đối tượng - Xây dựng chương trinh quản lí sinh...
 
Luận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAY
Luận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAYLuận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAY
Luận văn: Xây dựng ứng dụng Android xem video trực tuyến, HAY
 
Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...
Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...
Báo Cáo Cuối Ký Thực Tập Tốt Nghiệp Xậy Dựng Web Bán Hàng Trực Tuyến bằng Ope...
 
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
Slide báo cáo đồ án tốt nghiệp "Website cửa hàng điện thoại trực tuyến"
 
Do an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tuDo an xay_dung_website_thuong_mai_dien_tu
Do an xay_dung_website_thuong_mai_dien_tu
 
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền androidĐồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
Đồ án tốt nghiệp Xây dựng ứng dụng fastfood trên nền android
 
Đề tài: Xây dựng website bán hàng trực tuyến, HAY
Đề tài: Xây dựng website bán hàng trực tuyến, HAYĐề tài: Xây dựng website bán hàng trực tuyến, HAY
Đề tài: Xây dựng website bán hàng trực tuyến, HAY
 
Giáo trình bảo mật thông tin
Giáo trình bảo mật thông tinGiáo trình bảo mật thông tin
Giáo trình bảo mật thông tin
 
Hệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng onlineHệ thống quản lý bán hàng online
Hệ thống quản lý bán hàng online
 
Phân tích và thiết kế hệ thống quản lý quán Internet
Phân tích và thiết kế hệ thống quản lý quán InternetPhân tích và thiết kế hệ thống quản lý quán Internet
Phân tích và thiết kế hệ thống quản lý quán Internet
 
Đề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOT
Đề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOTĐề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOT
Đề tài: Xây dựng website giới thiệu sản phẩm phần mềm, HOT
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàng
 
Báo cáo phân tích thiết kế đồ án game
Báo cáo phân tích thiết kế đồ án game Báo cáo phân tích thiết kế đồ án game
Báo cáo phân tích thiết kế đồ án game
 
Đề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đ
Đề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đĐề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đ
Đề tài: Thiết kế hệ thống mạng cho một công ty, HOT, 9đ
 
Xây dựng biểu đồ use case
Xây dựng biểu đồ use caseXây dựng biểu đồ use case
Xây dựng biểu đồ use case
 
Thiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sựThiết kế csdl quản lý nhân sự
Thiết kế csdl quản lý nhân sự
 
Báo cáo t hiết kế mạng doanh nghiệp
Báo cáo t hiết kế mạng doanh nghiệpBáo cáo t hiết kế mạng doanh nghiệp
Báo cáo t hiết kế mạng doanh nghiệp
 
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin TứcBáo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
 
Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.Báo cáo thực tập công nghệ thông tin.
Báo cáo thực tập công nghệ thông tin.
 
Báo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạngBáo cáo phân tích thiết kế mạng
Báo cáo phân tích thiết kế mạng
 

Similar to Báo Cáo Đề Tài Xây Dựng Phần Mềm Quản Lí Khách Hàng Trên Android

Báo cáo cuối kì
Báo cáo cuối kìBáo cáo cuối kì
Báo cáo cuối kìDlinh Truong
 
Báo cáo cuối kỳ athena
Báo cáo cuối kỳ athenaBáo cáo cuối kỳ athena
Báo cáo cuối kỳ athenaLeHongQuang2912
 
Báo cáo thực tập cuoi ki joomla athena
Báo cáo thực tập cuoi ki joomla athenaBáo cáo thực tập cuoi ki joomla athena
Báo cáo thực tập cuoi ki joomla athenaTuan Huy
 
[Athena] Bao cao cuoi ki
[Athena] Bao cao cuoi ki[Athena] Bao cao cuoi ki
[Athena] Bao cao cuoi kiNPVinhLoc
 
Báo cáo cuối kỳ thực tập - Trung tâm Athena
Báo cáo cuối kỳ thực tập - Trung tâm AthenaBáo cáo cuối kỳ thực tập - Trung tâm Athena
Báo cáo cuối kỳ thực tập - Trung tâm AthenaVu Tran
 
Báo cáo thực tập cuối kì
Báo cáo thực tập cuối kìBáo cáo thực tập cuối kì
Báo cáo thực tập cuối kìHai Te
 
BÁO CÁO THỰC TẬP - TRẦN VĂN ANH
BÁO CÁO THỰC TẬP - TRẦN VĂN ANHBÁO CÁO THỰC TẬP - TRẦN VĂN ANH
BÁO CÁO THỰC TẬP - TRẦN VĂN ANHtranvananh2407
 
Nguyenthithuhien_baocaothuctap
Nguyenthithuhien_baocaothuctapNguyenthithuhien_baocaothuctap
Nguyenthithuhien_baocaothuctapThu Hien
 
Bao cao thuc tap tran nguyen bao khanh
Bao cao thuc tap  tran nguyen bao khanhBao cao thuc tap  tran nguyen bao khanh
Bao cao thuc tap tran nguyen bao khanhLan Nguyễn
 
Báo cáo thực tập Athena
Báo cáo thực tập AthenaBáo cáo thực tập Athena
Báo cáo thực tập AthenaKhánh Trung Lý
 
Baocaoathena
BaocaoathenaBaocaoathena
BaocaoathenaTrung Mai
 
Baocao cuoi ki ATHENA (autosaved)
Baocao cuoi ki ATHENA (autosaved)Baocao cuoi ki ATHENA (autosaved)
Baocao cuoi ki ATHENA (autosaved)Long Thanh
 
THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...
THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...
THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...Chun Che Lin
 
Luan van tot nghiep 2014 - Nguyễn Trọng Hiếu - Athena
Luan van tot nghiep 2014 - Nguyễn Trọng Hiếu - AthenaLuan van tot nghiep 2014 - Nguyễn Trọng Hiếu - Athena
Luan van tot nghiep 2014 - Nguyễn Trọng Hiếu - AthenaHiếu Nguyễn Trọng
 
Báo cáo thực tập athena
Báo cáo thực tập athenaBáo cáo thực tập athena
Báo cáo thực tập athenaChelsea Phuoc
 
BaoCaoThucTap_NguyenTruongNhatNam
BaoCaoThucTap_NguyenTruongNhatNamBaoCaoThucTap_NguyenTruongNhatNam
BaoCaoThucTap_NguyenTruongNhatNamNguyễn Nam
 

Similar to Báo Cáo Đề Tài Xây Dựng Phần Mềm Quản Lí Khách Hàng Trên Android (20)

Báo cáo cuối kì
Báo cáo cuối kìBáo cáo cuối kì
Báo cáo cuối kì
 
Báo cáo cuối kỳ athena
Báo cáo cuối kỳ athenaBáo cáo cuối kỳ athena
Báo cáo cuối kỳ athena
 
Báo cáo thực tập cuoi ki joomla athena
Báo cáo thực tập cuoi ki joomla athenaBáo cáo thực tập cuoi ki joomla athena
Báo cáo thực tập cuoi ki joomla athena
 
[Athena] Bao cao cuoi ki
[Athena] Bao cao cuoi ki[Athena] Bao cao cuoi ki
[Athena] Bao cao cuoi ki
 
Báo cáo cuối kỳ thực tập - Trung tâm Athena
Báo cáo cuối kỳ thực tập - Trung tâm AthenaBáo cáo cuối kỳ thực tập - Trung tâm Athena
Báo cáo cuối kỳ thực tập - Trung tâm Athena
 
Baocaothuctap
BaocaothuctapBaocaothuctap
Baocaothuctap
 
Báo cáo thực tập cuối kì
Báo cáo thực tập cuối kìBáo cáo thực tập cuối kì
Báo cáo thực tập cuối kì
 
BÁO CÁO THỰC TẬP - TRẦN VĂN ANH
BÁO CÁO THỰC TẬP - TRẦN VĂN ANHBÁO CÁO THỰC TẬP - TRẦN VĂN ANH
BÁO CÁO THỰC TẬP - TRẦN VĂN ANH
 
Đề tài: Xây dựng, triển khai và quản lý mô hình mạng, HAY
Đề tài: Xây dựng, triển khai và quản lý mô hình mạng, HAYĐề tài: Xây dựng, triển khai và quản lý mô hình mạng, HAY
Đề tài: Xây dựng, triển khai và quản lý mô hình mạng, HAY
 
bao_cao_thuc_tap
bao_cao_thuc_tapbao_cao_thuc_tap
bao_cao_thuc_tap
 
Nguyenthithuhien_baocaothuctap
Nguyenthithuhien_baocaothuctapNguyenthithuhien_baocaothuctap
Nguyenthithuhien_baocaothuctap
 
Bao cao thuc tap tran nguyen bao khanh
Bao cao thuc tap  tran nguyen bao khanhBao cao thuc tap  tran nguyen bao khanh
Bao cao thuc tap tran nguyen bao khanh
 
Báo cáo thực tập Athena
Báo cáo thực tập AthenaBáo cáo thực tập Athena
Báo cáo thực tập Athena
 
Baocaoathena
BaocaoathenaBaocaoathena
Baocaoathena
 
Baocao cuoi ki ATHENA (autosaved)
Baocao cuoi ki ATHENA (autosaved)Baocao cuoi ki ATHENA (autosaved)
Baocao cuoi ki ATHENA (autosaved)
 
THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...
THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...
THỰC TRẠNG CÔNG TÁC ĐÃI NGỘ LAO ĐỘNG TẠI TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN...
 
Luan van tot nghiep 2014 - Nguyễn Trọng Hiếu - Athena
Luan van tot nghiep 2014 - Nguyễn Trọng Hiếu - AthenaLuan van tot nghiep 2014 - Nguyễn Trọng Hiếu - Athena
Luan van tot nghiep 2014 - Nguyễn Trọng Hiếu - Athena
 
Báo cáo thực tập athena
Báo cáo thực tập athenaBáo cáo thực tập athena
Báo cáo thực tập athena
 
BaoCaoThucTap_NguyenTruongNhatNam
BaoCaoThucTap_NguyenTruongNhatNamBaoCaoThucTap_NguyenTruongNhatNam
BaoCaoThucTap_NguyenTruongNhatNam
 
bao_cao_athena_cuoi_ki_thuc_tap
bao_cao_athena_cuoi_ki_thuc_tapbao_cao_athena_cuoi_ki_thuc_tap
bao_cao_athena_cuoi_ki_thuc_tap
 

Báo Cáo Đề Tài Xây Dựng Phần Mềm Quản Lí Khách Hàng Trên Android

  • 1. Trương Duy Linh - 51101863 1 BÁO CÁO THỰC TẬP ĐỀ TÀI: PHÁT TRIỂN PHẦN MỀM QUẢ LÍ KHÁCH HÀNG TRÊN ANDROID TRÊN ĐIỆN THOẠI SỬ DỤNG ANDROID GVHD : Thầy Võ Đỗ Thắng SVTH : Trương Duy Linh MSSV : 51101863 TP.HCM, Ngày 12 Tháng 8 Năm 2014 TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HỒ CHÍ MINH KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH  TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN NINH MẠNG QUỐC TẾ ATHENA
  • 2. Trương Duy Linh - 51101863 2 LỜI CẢM ƠN TRUNG TÂM ATHENA Em xin chân thành cảm ơn Ban giám đốc Trung Tâm Athena, thầy Võ Đỗ Thắng và toàn thể các anh, chị, các bạn trong Trung Tâm đã tận tình giúp đỡ em trong thời gian thực tập, tạo điều kiện tốt nhất để em được thực tập tốt tại Trung Tâm. Qua đợt thực tập này em đã tích lũy cho bản thân được nhiều kinh nghiệm quý báo, những kinh nghiệm đó sẽ giúp em hoàn thiện bản thân hơn,và giúp em làm tốt công việc sau này. Trong thời gian thực tập tại Trung Tâm em đã có những cố gắng để hoàn thành báo cao thực tập một cách tốt nhất với tất cả những nổ lực của bản thân, nhưng cũng không thể tránh khỏi những thiếu sót trong quá trình thực tập, rất mong nhận được sự thông cảm của quý thầy cô ở Trung Tâm và đặc biệt là Thầy Võ Đỗ Thắng. Một lần nữa em xin chân thành cảm ơn Tp.Hồ Chí Minh, Ngày 12 Tháng 8 Năm 2014 Kí tên Trương Duy Linh
  • 3. Trương Duy Linh - 51101863 3 LỜI CẢM ƠN TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM & KHOA KHOA HỌC VÀ KĨ THUẬT MÁY TÍNH Em xin chân thành cảm ơn Trường Đại Học Bách Khoa Tp.HCM và Khoa Khoa Học & Kĩ Thuật Máy Tính đã tạo điều kiện cho em học tập cũng như thực tập trong học kì này. Trong lần thực tập này em đã tích lũy được nhiều kinh nghiệm và những vài học quý báo cho bản thân. Những kinh nghiệm và bài học trong lần thực tập này sẽ giúp em hoàn thiện hơn trong học tập cũng như trong công việc. Em xin chân thành cảm ơn quý thầy cô trong Khoa đã luôn luôn tận tình chỉ dẫn, giảng dạy và trang bị cho em những kiến thức cần thiết nhất và giúp đỡ em rất nhiều để hoàn thành tốt đợt thực tập này. Trong quá trình thực tập em đã cố gắng để hoàn thành công việc với tất cả những nổ lực của bản thân, nhưng cũng không thể tránh khỏi những thiếu sót trong quá trình thực tập rất mong nhận được sự thông cảm của quý thầy cô. Một lần nữa em xin chân thành cảm ơn. TP.Hồ Chí Minh, Ngày 12 Tháng 8 Năm 2014 Kí Tên Trương Duy Linh
  • 4. Trương Duy Linh - 51101863 4 Trích yếu Sự phát triển của các công ty, yêu cầu quan trọng nhất là sự ủng hộ của khách hàng, do đó cần có những chính sách quan tâm chăm sóc khách hàng của mình để họ trở nên thân thiết với công ty. Trong thời buổi hiện đại, sự phát triển của thiết bị di động làm nảy sinh yêu cầu quản lí khách hàng trên thiết bị di động, giúp chăm sóc khách hàng ở mọi lúc mọi nơi. Trong thời gian thực tập tại trung tâm Athena, tôi được nghiên cứu dề tài quản lí khách hàng trên android, đây là một đề tài thú vị, giúp tôi hiểu thêm về công tác quản lí khách hàng của một công ty, nó mang tính thực tế rất cao. Tôi được làm quen với android một nến tảng phát triển ứng dụng hiện đại, và mạnh mẽ. Hơn thế nữa tôi có cơ hội phát triển kĩ năng của mình ngày càng phù hợp với chuyên ngành công nghệ thông tin mà tôi đang theo đuổi. Tôi cam kết kết quả đạt được do tôi tự thực hiện dưới sự hướng dẫn của thầy Võ Đỗ Thắng (Trung Tâm Athena). Các bước quá trình thực hiện đã được ghi lại bằng video và có thuyết minh từng bước.Chi tiết quay clip ghi lại quá trình thực hiện được liệt kê dưới đây. Danh sách các clip: - Clip giới thiệu cá nhân và đề tài đăng kí thực tập https://www.youtube.com/watch?v=hGt-AuRgqaA - Clip báo cáo thực tập, khó khăn, thuận lợi ,rút kinh nghiệm https://www.youtube.com/watch?v=HC2Ze7yffmo - Clip Báo cáo thực hiện quá trình làm đề tài https://www.youtube.com/watch?v=AbwZ_4d8sZk
  • 5. Trương Duy Linh - 51101863 5 Nhận xét của giáo viên hướng dẫn ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... .................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ...................................................................................................................... .
  • 6. Trương Duy Linh - 51101863 6 Nhận xét của giáo viên hướng dẫn ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... .................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ....................................................................................................................... ...................................................................................................................... .
  • 7. Trương Duy Linh - 51101863 7 MỤC LỤC I. Phân tích nhu cầu thị trường............................................................................................................7 1. Tại sao phải Quản lí khách hàng ?..........................................................................................7 2. Quản lí khách hàng cần những gì ? Dùng phương pháp CRM quản lí khách hàng...............8 3. Ưu điểm việc dùng phần mềm so với không dùng phần mềm.............................................10 II. Xây dựng phần mềm.....................................................................................................................11 1.Cài đặt Android và môi trường phát triển android như esclipse, SDK..................................11 3. Xây dựng mô hình ERD........................................................................................................16 4. Phân tích các chức năng........................................................................................................17 5. Xây dựng giao diện.. ............................................................................................................ 18 6. Hiện thực các Class.............................................................................................................. 25 7.Các Class được hỗ trợ sẵn và phương thức giao tiếp giữa các Activity, CSDL SQLite....... 75 IV. Tổng kết....................................................................................................................................77 V. Tài liệu tham khảo........................................................................................................................ 77
  • 8. Trương Duy Linh - 51101863 8 I. Phân tích nhu cầu thị trường 1. Tại sao phải Quản lí khách hàng ? Quản lý quan hệ đối tác là một lĩnh vực quản lý liên quan đến việc hiểu rõ vai trò, quan điểm, mức độ ảnh hưởng và nhu cầu của các đối tác để có phương pháp quản lý mối quan hệ và phương pháp giao tiếp cho phù hợp. Tùy theo từng đối tác mà các lợi ích, quan tâm của họ đối với một doanh nghiệp có khác nhau. Theo quan điểm truyền thống, các đối tác quan trọng đối với doanh nghiệp dường như chỉ tập trung vào khách hàng (người mang tiền đến), nhà cung cấp (nguồn cung cấp cho doanh nghiệp), nhân viên (cung cấp sức lao động). Việc quản lý các đối tác này bám sát quy trình hoạt động của doanh nghiệp, chẳng hạn từ khâu mua hàng đến sản xuất rồi bán hàng. Trong khi đó quan điểm hiện đại lại cho rằng đối tác là người hoặc những nhóm người có ảnh hưởng đáng kể đến sự sống còn và phát triển của doanh nghiệp.Với sự ra đời của công nghệ mới, trải nghiệm mua sắm của người tiêu dùng đã được cải thiện rõ rệt với việc xóa bỏ sự chênh lệch thông tin về sản phẩm và nhãn hàng . Khách hàng ngày nay ít trung thành đối với một nhãn hiệu. Họ chuyển từ nhãn hiệu này sang nhãn hiệu khác để có giá, sản phẩm và dịch vụ tốt nhất. Tuy nhiên, các chương trình quản lý khách hàng đã cho thấy đến 75% trên tổng doanh số bán hàng là từ 30% khách hàng thân thiết nhất (Imlay, 2006) Do đó, chương trình quản lý khách hàng hiệu quả sẽ giúp các nhà bán lẻ có ưu thế trong thị trường đầy tính cạnh tranh với những lợi ích như sau: + Nhận diện những khách hàng tốt nhất Những khách hàng tốt nhất không thể chỉ được ghi nhận bởi 1 trong 2 yếu tố: hành vi tiêu dùng hay thái độ. Những dự định dựa trên những thái độ tích cực chưa chắc dẫn đến hành động. Và, hành vi tiêu dùng mà thiếu đi nền tảng thái độ kiên quyết sẽ rất dễ bị thay đổi khi khách hàng đối mặt với những sản phẩm/dịch vụ có giá cả và chất lượng cạnh tranh. Với dữ liệu được truy xuất từ chương trình quản lý khách hàng, các nhà bán lẻ có thể xác định được những khách hàng có nhiều tiềm năng hơn - có thái độ lẫn hành vi tiêu dùng trung thành, và ưu đãi cho họ các lợi ích tài chính cũng như phi tài chính.
  • 9. Trương Duy Linh - 51101863 9 + Tăng cường việc giữ khách hàng và tìm kiếm khách hàng mới thông qua tiếp thị truyền miệng. Từ các cửa hàng may mặc, phân phối dụng cụ thể thao, đồ nội thất, mỹ phẩm cho đến các nhà bán lẻ điện tử, khi các sản phẩm dễ dàng bị thay thế và không nổi bật trên thị trường, việc tăng cường bán hàng thông qua phương pháp truyền miệng là một vũ khí bí mật. Quản lý khách hàng mang lại cho các nhà bán lẻ khả năng tiếp cận khách hàng và giới thiệu những ưu đãi hoặc sản phẩm thích hợp với nhu cầu của người tiêu dùng ngay khi họ đặt chân vào cửa hàng bằng cách truy cập dữ liệu của khách hàng như kích thước, màu yêu thích, và các nhãn hàng ưu chuộng. Hơn nữa, với chương trình quản lý khách hàng, khách hàng sẽ tin rằng nhà bán lẻ am hiểu và dành nhiều ưu đãi cho họ hơn những đối thủ bán lẻ khác. Một khi họ được phục vụ tốt hơn và nhận được nhiều lợi ích hơn, họ sẽ sẵn lòng giới thiệu nhà bán lẻ với bạn bè và người thân. + Tăng cường bán chéo sản phẩm và tăng doanh số Một trong những cách tốt nhất và dễ dàng nhất để cải thiện doanh thu và lợi nhuận là bán nhiều mặt hàng hơn cho các khách hàng hiện tại. Tuy nhiên, rất nhiều khách hàng chỉ biết đến sản phẩm họ đã mua. Việc đơn giản chia sẻ với khách hàng về các sản phẩm mà doanh nghiệp cung cấp sẽ tăng cường nguồn thu cho họ. Chương trình quản lý khách hàng cho phép các nhà bán lẻ lấy được nhiều thông tin về khách hàng từ đó họ có thể gợi ý các sản phẩm liên quan trong một giao dịch trọn gói và bán được nhiều sản phẩm hơn. + Nắm bắt xu hướng thị trường Thị trường liên tục thay đổi. Những gì mà các nhà bán lẻ cần là phương pháp tận dụng những sự thay đổi đó trong khi vẫn có thể phát triển nhằm vượt qua được những thử thách đó. Nếu các nhà bán lẻ không thể thực hiện điều này, họ sẽ chắc chắn để mất những khách hàng hiện tại vào tay các đối thủ. Với dữ liệu từ chương trình quản lý khách hàng, các nhà bán lẻ có thể đánh giá xu hướng và cđưa ra những quyết định tốt hơn dựa trên những biến đổi trong thị trường.
  • 10. Trương Duy Linh - 51101863 10 2. Quản lí khách hàng cần những gì ? Dùng phương pháp CRM quản lí khách hàng 2.1 Quản lí khách hàng cần những gì ? Có những đối tác mà quá trình quản lý họ lại gắn liền với quá trình tác nghiệp của doanh nghiệp. Chẳng hạn như bộ phận kinh doanh làm việc với khách hàng hoặc nhà phân phối trong quá trình đặt hàng, bộ phận mua hàng làm việc với nhà cung cấp, giám đốc tài chính sẽ làm việc với ngân hàng, hay bộ phận nhân sự sẽ làm việc với các nhân viên. Trong trường hợp ban giám đốc, những nhà quản lý nếu không trực tiếp làm việc với đối tác cần tìm hiểu xem những đối tượng này có hài lòng khi làm việc với doanh nghiệp không? Việc tìm ra câu trả lời này ngày càng có ý nghĩa sống còn đối với doanh nghiệp. Quá trình quản lý quan hệ đối tác đòi hỏi một kế hoạch tập trung và thực hành có hệ thống, có phương pháp và phải nhất quán trong toàn doanh nghiệp. Nhiều công ty nước ngoài sử dụng một công cụ, gọi là kế hoạch quản lý đối tác. Bản kế hoạch này liệt kê các đối tác chủ chốt của doanh nghiệp, xác định vai trò, ảnh hưởng của họ đối với doanh nghiệp, cũng như “sách lược” mà doanh nghiệp dành cho họ. Bản kế hoạch quản lý đối tác do tổng giám đốc phê duyệt, và việc thực hiện phải được ủy quyền tùy theo mức độ cho các trưởng bộ phận. Làm theo cách này, các cấp quản lý ở doanh nghiệp đều có ý thức chung về quản lý quan hệ đối tác và thực hành một cách hệ thống theo phương pháp đã được nghiên cứu và xét duyệt. Một trong những nội dung quan trọng nhất của kế hoạch quản lý quan hệ đối tác chính là kế hoạch giao tiếp với các đối tác, tức là xác định những thông tin cần trao đổi, mức độ tiếp xúc, cách truyền đạt thông tin sao cho hiệu quả nhất. Việc lập kế hoạch này được xây dựng trên cơ sở hiểu rõ vai trò, nhu cầu và mong đợi của các đối tác khác nhau. Vì thế các doanh nghiệp nên lưu ý việc giao tiếp này là giao tiếp của tổ chức, thể hiện cấp độ doanh nghiệp chứ không phải là giao tiếp mang màu sắc của một cá nhân cụ thể nào. Các doanh nghiệp Việt Nam trong quá trình phát triển thường phải thực hiện rất nhiều dự án mở rộng sản xuất kinh doanh như: triển khai ISO, kế toán quản trị, tin học hóa quản lý, tái cấu trúc doanh nghiệp, cổ phần hóa, niêm yết, xây dựng thương hiệu… Từng dự án đều có các đối tác với những lợi ích và mối quan tâm khác nhau, vì thế sự thành công của doanh nghiệp cũng phụ thuộc vào cách quản lý các kỳ vọng, lợi ích và sự hợp tác của các đối tác.
  • 11. Trương Duy Linh - 51101863 11 2.2 Dùng phương pháp CRM quản lí khách hàng  Định nghĩa CRM - CRM (Customer Relationship Management: Quản lý quan hệ khách hàng) là một phương pháp giúp các doanh nghiệp tiếp cận và giao tiếp với khách hàng một cách có hệ thống và hiệu quả, quản lý các thông tin của khách hàng như thông tin về tài khoản, nhu cầu, liên lạc… nhằm phục vụ khách hàng tốt hơn. - Thông qua hệ thống quan hệ khách hàng, các thông tin của khách hàng sẽ được cập nhật và được lưu trữ trong hệ thống quản lý cơ sở dữ liệu. Nhờ một công cụ dò tìm dữ liệu đặc biệt, doanh nghiệp có thể phân tích, hình thành danh sách khách hàng tiềm năng và lâu năm để đề ra những chiến lược chăm sóc khách hàng hợp lý. Ngoài ra, doanh nghiệp còn có thể xử lý các vấn đề vướng mắc của khách hàng một cách nhanh chóng và hiệu quả.  Tại sao nên dùng CRM Vì chi phí kiếm khách hàng mới nhiều hơn gấp 6 lần so với duy trì khách hàng cũ, Trong khi đó, 20% khách hàng cũ đem lại 80% lợi nhuận cho công ty, Một khách hàng không thoả mãn sẽ chia sẻ sự khó chịu của họ cho từ 8-10 người khác. Và kể cả nếu khách hàng không hài lòng nhưng nếu bạn quản lý, chăm sóc tốt và giải quyết tốt khiếu nại thì khách hàng vẫn tín nhiệm bạn! Một con số thống kê cho thấy 70% khách hàng có khiếu nại sẽ vẫn trung thành với công ty nếu khiếu nại của họ được giải quyết thoả đáng.  Đặc điểm của CRM CRM là một “phương pháp” vì đó là một cách thức tìm kiếm, tổ chức và xử lý các mối quan hệ khách hàng. Cũng có thể nói CRM là một chiến lược, bởi vì CRM nó bao gồm cả một kế hoạch rõ ràng và chi tiết. Quả thực, chiến lược CRM có thể được coi là chiến lược căn bản cho mọi chiến lược khác của tổ chức. Bất kỳ chiến lược nào của tổ chức không đáp ứng cho việc tạo ra, duy trì và mở rộng mối quan hệ với khách hàng mục tiêu của tổ chức đều được xem là không nhằm đáp ứng cho tổ chức đó.c Thứ hai, CRM là một phương pháp “toàn diện” là bởi CRM không phải dành cho riêng hoạt động kinh doanh và marketing hay cũng không phải được chịu trách nhiệm chính bởi bộ phận chăm sóc khách hàng trong tổ chức hoặc phòng IT. Từng phòng ban tương ứng với từng chức năng riêng trong công ty đều có liên quan đến chiến lược CRM. Nói cách khác CRM là một chiến lược hay phương pháp được đưa ra và thực hiện có liên quan đến tất cả các phòng ban, bộ phận của công ty. Khi CRM không có liên quan đến một phòng ban nào đó, ví dụ như phòng IT, thì chất lượng quan hệ khách hàng sẽ bị giảm. Hay cũng như thế, khi
  • 12. Trương Duy Linh - 51101863 12 bất kỳ một bộ phận nào trong tổ chức đứng ngoài kế hoạch CRM thì tổ chức đó sẽ gặp phải rủi ro lớn trong quá trình thực hiện quản lý mối quan hệ khách hàng của mình. Thứ ba, chúng ta nói tới cụm từ “tạo ra, duy trì và mở rộng”. Điều này có nghĩa CRM có liên quan đến toàn bộ chu kỳ và hành vi mua hàng của một khách hàng (trước – đang – và sau khi mua hàng), cũng như gắn kết chặt chẽ với quy trình kinh doanh của tổ chức (marketing – kinh doanh – và chăm sóc sau bán hàng). Khi bạn thực hiện một chiến lược CRM bạn phải có được và phân tích dữ liệu về khách hàng mục tiêu của mình và hành vi mua hàng mục tiêu của họ. Từ nguồn thông tin chất lượng này bạn có thể hiểu và dự đoán được hành vi mua hàng của khách hàng tốt hơn. 2. Ưu điểm việc dùng phần mềm so với không dùng phần mềm - Công ty bạn đang dùng Access, Excel để quản lý thông tin hay không? - Thông tin khách hàng "mỗi người một nơi", dữ liệu phân tán khó quản lý? - Nhân viên nghĩ việc, bạn có bị mất thông tin về các khách hàng, các giao dịch, công việc mà trước đây nhân viên đó đã làm? - Nhân viên bạn quá đông, bạn có đủ khả năng kiểm soát mọi công việc họ phải làm? - Các giao dịch của doanh nghiệp bạn với khách hàng, bạn có nắm được tất cả diễn biến đó không? - Thống kê doanh thu công ty, so sánh năng lực nhân viên,... bạn làm bằng tay...? - Việc sử dụng phần mềm sẽ giải quyết các vấn đề trên 1 cách hiệu quả 3. Việc sử dụng trên điệm thoại di động có phù hợp không ? - Ngày nay, tính di động, tiện lợi đang được yêu cầu rất cao khi phát triển 1 phần mềm, phần mềm không những cần được cài đặt trên máy tính, mà còn cả trên thiết bị di động như Iphone, Ipad, Samsung, nokia...Đây là 1 xu thế tất yếu nên việc phát triển trên điện thoại di động là rất cần thiết.
  • 13. Trương Duy Linh - 51101863 13 II. Xây dựng phần mềm 1. Cài đặt Android và môi trường phát triển android như esclipse, SDK Bước 1: Tải bộ cài đặt Android ADT Bundle Đầu tiên chúng ta cần tải công cụ & bộ thư viện hỗ trợ phát triển ứng dụng Android (Android SDK) ở trang http://developer.android.com/sdk/index.html Chú ý:  Chúng ta cần chọn phiên bản Android SDK 32-bit hay Android SDK 64-bit phù hợp với hệ thống máy tính dự kiến sử dụng để lập trình Android.  Android mặc định đóng gói môi trường phát triển ứng dụng Eclipse có tích hợp sẵn các công cụ để phát triển ứng dụng Adnroid (Android Developer Tools - ADT plugin), Android SDK Tools, cùng Android Platform-tools vào trong 1 file ADT Bundle duy nhất để người dùng có thể tải về các thành phần cần thiết chỉ 1 lần duy nhất và triển khai môi trường phát triển ứng dụng Android một cách nhanh nhất có thể. Bước 2: Cài đặt Java để lập trình ứng dụng Android: Máy tính dùng để lập trình Android cần phải được cài đặt Java trước. Nếu không thấy biểu tượng Java trong Control Panel của Windows, chúng ta cần tải Java về và cài đặt từ địa chỉ http://www.oracle.com/technetwork/java/javase/downloads/index.html
  • 14. Trương Duy Linh - 51101863 14 Bước 3: Cài đặt Eclipse & ADT Plugin Giải nén file Android ADT Bundle đã download được ở bước trên vào một thư mục bất kì nào đó trên máy tính. Android đã đính kèm môi trường phát triển Eclipse tích hợp ATD Plugin đã được đóng gói sẵn trong đó. Mẹo: bạn nên để Android SDK ở ổ đĩa khác ổ đã cài hệ điều hành Windows, vì như thế khi có nhu cầu cài lại máy, thì bản cài đặt Android SDK này vẩn còn, chúng ta không cần phải download lại nữa. Trong trường hợp chúng ta đã cài đặt Eclipse trên máy tính trước đây rồi, thì chỉ cần cài thêm ADT Plugin (Android Development Tools - ADT Plugin) cho bản Eclipse đó bằng cách:  Khởi động phần mềm Eclipse  Vào menu Help chọn mục Intall New Software…  Nhập vào đường link sau đây trong mục “Work with:” https://dl-ssl.google.com/android/eclipse để tiến hành cài đặt ADT Plugin cho Eclipse
  • 15. Trương Duy Linh - 51101863 15 Bước 4: Cài đặt Android SDK Manager: Bật Eclipse lên, chọn Workpace. Chọn theo các bước hướng dẫn trên hình để cài Android SDK Manager
  • 16. Trương Duy Linh - 51101863 16 Bước 5: Tạo máy ảo Android để chạy ứng dụng Android: Máy ảo Android là chương trình giả lập thiết bị Android (Android Virtual Device – AVD) để giúp lập trình viên kiểm tra ứng dụng nhanh ngay trên máy tính trước khi chính thức triển khai trên thiết bị Android thực tế. Bước 6: Tạo và chạy ứng dụng Android đầu tiên Tạo project Android đầu tiên bằng cách vào menu File => New => Android Application Project
  • 17. Trương Duy Linh - 51101863 17 2. Phân tích quy trình quản lí khách hàng theo phương pháp CRM  Quản lý hồ sơ khách hàng: Quy trình quản lý khách hàng được tự động hóa từ bước thu thập thông tin khách hàng đến việc đánh giá, phân loại khách hàng. Bao gồm:  Thu thập thông tin khách hàng.  Phân nhóm khách hàng (Khách hàng, nhà cung cấp, đối tác).  Theo dõi quá trình tiếp cận và giao dịch với khách hàng.  Đánh giá, phân loại khách hàng theo mức độ tiềm năng.  Quản lý thông tin liên hệ, đối tác  Quản lý cơ hội bán hàng: Quản lý các cơ hội bán hàng phát sinh từ các khách hàng đang quản lý. Bao gồm các bước:  Tạo cơ hội bán hàng mới cho 1 khách hàng.  Đánh giá, phân loại cơ hội bán hàng theo mức độ khả thi.  Theo dõi quá trình giao dịch với khách hàng liên quan đến cơ hội bán hàng.  Kết thúc và đóng cơ hội bán hàng.  Quản lý lịch hẹn và giao dịch: Cho phép theo dõi quá trình giao dịch với khách hàng từ khâu lập kế hoạch đến khâu thực hiện và theo dõi lịch sử giao dịch.  Lập lịch cuộc gọi  Lập lịch hẹn  Theo dõi quá trình thực hiện  Theo dõi lịch sử giao dịch
  • 18. Trương Duy Linh - 51101863 18  Quản lý dịch vụ khách hàng: Chức năng quản lý dịch vụ khách hàng bao gồm các hoạt động sau:  Quản lý thông tin yêu cầu bảo hành, hỗ trợ, khiếu nại của khách hàng: Tên khách hàng, chủ đề yêu cầu của khách hàng, mô tả yêu cầu, phương án giải quyết, mức độ ưu tiên, tình trạng xử lý, người chịu trách nhiệm giải quyết.  Lịch gọi, lịch gặp và các giao dịch xử lý yêu cầu của khách hàng.  Lịch sử giao dịch xử lý yêu cầu, chăm sóc khách hàng. 3. Xây dựng mô hình ERD 1 N 1 N N N - Chuyển thành các bảng trong CSDL + Bảng Customer Ma_KH Name Sex Email Phone level Coins + Bảng Đơn hàng Ma_Bill Name Date smoney + Bảng Product Ma_SP Name Price Info Khách Hàng Cơ Hội Sản Phẩm Hóa Đơn Level Phone Email Sex Name Id Id Info Name Id Name Price Info Date smoney Name Id Of_cohoi Of_cus Of_bill Coins
  • 19. Trương Duy Linh - 51101863 19 + Bảng of_cus Ma_KH Ma_Bill +Bảng of_bill Ma_SP Ma_Bill +Bảng Cơ hội Id Name info Ma_KH 4. Phân tích các chức năng - Để Xây dựng 1 phần mềm có thể đáp ứng yêu cầu khách hàng đặt ra, đảm bảo là hệ thống này cần cho người dùng, tránh làm ra 1 phần mềm mà thị trường không cần thiết. - Phân tích chức năng giúp xác định các chức năng cần thiết một cách rõ ràng đầy đủ, hạn chế chi phí phân tích lại trong quá trình phát triển phần mềm - Phần mềm quản lí khách hàng: là một phần mềm để doanh nghiệp quản lí khách hàng của mình một cách hiệu quả. + Chức năng (xem,sửa,xóa) khách hàng: là điều đầu tiên cần nghĩ tới, một khách hàng có thông tin riêng của mình như tên ,tuổi, ngày sinh, giới tính, email...Nếu là công ty thì có thông tin tên công ty, ... + Chức năng xem danh sách khách hàng : 1 phần mềm quản lí khách hàng không chỉ quản lí 1 khách hàng mà cần quả lí nhiều khách hàng, công ty, nên việc xem danh sách khách hàng là cần thiết + Chức năng tìm kiếm khách hàng: Trong 1 danh sach khách hang với vài trăm người thì việc lướt trên màng mình rất mất thời gian, do đó 1 thanh search giúp giảm việc tốn thời gian cho quá trình tiềm kiếm, khi biết 1 số thông tin nào đó. + Chức năng quản lí khách hàng theo cấp trong siêu thị: giúp ta dễ dành phân loại và có chính sách chăm sóc dễ dàng không bỏ sót khách hàng nào trong cấp đó cho phù hợp. + Chức năng (xem,xóa,thêm) danh sách đơn hàng mà khách hàng đã mua: 1 khách hàng cần được lưu những lần giao dịch dể có thể cộng điểm tích lũy cho khách hàng, thăng cấp cho khách hàng, xác định những khách hàng này cần mua những loại sản phẩm nào, nhu bao nhiêu từ đó công ty có thế thêm các lọa sản phẩm của mặt hàng này giúp tăng doanh thu đáp ứng yêu cầu khách hàng. + Chức năng xem các chương trình chăm sóc khách hàng, số lượng người tham gia, từ đó có thể cách định các chương trình khách hàng yêu thích, tăng số lượng chương trình này lên giúp tăng doanh thu cho siêu thị. + Chức năng thống kê theo sản phẩm được mua, theo chương trình khuyến mãi, theo tháng, theo năm...: giúp công ty đưa ra các quyết định phù hợp. + Chức năng gửi mail chúc mừng sinh nhật, gửi mail thông báo các chương trình
  • 20. Trương Duy Linh - 51101863 20 khuyến mãi, các sản phẩm mới sẽ được bán... Nhằm cung cấp thông tin cho khách hàng để họ có thể tham gia, tạo sự thân thiết giữa khách hàng va công ty. 5. Xây dựng giao diện - Sau khi phân tích các chức năng cần có, tiếp theo là đi xây dựng giao diện, việc xây dựng giao diện giúp định hình phần mềm 1 cách rõ ràng hơn. - Đầu tiên là giao diện khi người quản lí mở phần mềm: + Gồm thanh search giúp người quản lí có thể tìm kiếm khách hàng của mình. + Button Chọn loại khách hàng, giúp người quản lí xem danh sách các khách hàng theo cấp VIP, THUONG, TIMNANG. + Danh sách khách hàng, khi người quản lí nhấp vào sẽ hiện lên các đơn hàng n Khách hàng đã mua.
  • 21. Trương Duy Linh - 51101863 21 - Khi người quản lí nhấp vào button chọn loại khách hàng, và chọn loại khách hàng như VIP thì giao diện danh sách khách hàng sẽ hiện ra.gười quản lí nhấp vào button ADD CUSTOMER để thêm khách hàng, nhấp vào mỗi khách hàng để sửa, xóa, xem danh sách cơ hội sẽ có với khách hàng này hoặc xem danh sách đơn hàng của khách hàng đã giao dịch.
  • 22. Trương Duy Linh - 51101863 22 - Khi gười quản lí nhấp vào menu thêm hoặc sửa khách hàng, thì giao diện bên dưới sẽ hiện ra, nếu là sửa khách hàng thì sẽ có thông tin khách hàng để ta chỉnh sửa
  • 23. Trương Duy Linh - 51101863 23 - Khi người quản lí nhấp vào menu item danh sách cơ hội gồm các yêu cầu cần nhập vào nếu muốn thêm các cơ hội và danh sách các cơ hội đã được thêm trước đó sẽ hiển thị ra, nếu cần xóa thì nhấn button Xóa, có thể xóa nhiều ghi chú cùng 1 lúc khi check vào ô check box.
  • 24. Trương Duy Linh - 51101863 24 - Khi người dùng nhấp chọn vào menu item danh sách đơn hàng thì giao diện danh sách đơn hàng sẽ hiện ra, người quản lí có thể thêm sửa xóa danh sách đơn hàng
  • 25. Trương Duy Linh - 51101863 25 - Khi người quản lí nhấp vào một đơn hàng bất kì, menu item sửa, xóa, xem danh sách sản phẩm sẽ hiện ra, khi chọn item Danh Sách Sản Phẩm thi danh sách sản phẩm sẽ hiện ra.
  • 26. Trương Duy Linh - 51101863 26 - Khi người quản lí chọn 1 button ADD PRODUCT thì form yêu cầu nhập thông tin cho sản phẩm mới sẽ hiện ra và khi nhấn button Lưu thì nó sẽ lưu vào csdl.
  • 27. Trương Duy Linh - 51101863 27 6. Hiện thực các Class - Cấu trúc thư mục
  • 28. Trương Duy Linh - 51101863 28  Trong cấu trúc trên có 3 pakage: com.example.demoqlkh, donhang, sanphamco. - Class MainActivity public class MainActivity extends ActionBarActivity { //Định nghĩa các requestCode, resultCode truyền đi //trong Intent public static final int MO_ACTIVITY_THEM_KHACH_HANG=1; public static final int MO_ACTIVITY_SUA_KHACH_HANG=2; public static final int THEM_KHACH_HANG_THANHCONG=3; public static final int SUA_KHACH_HANG_THANHCONG=4; public static final int XEM_DS_KHACH_HANG=5; public static final int CAPNHAT_DS_KHACH_HANG_THANHCONG=6; public static final int MO_ACTIVITY_CHUYEN_LEVEL=9; public static final int CHUYEN_LEVEL_THANHCONG=10; public static final int MO_ACTIVITY_THEM_DON_HANG=11; public static final int THEM_DON_HANG_THANHCONG=12; public static final int MO_ACTIVITY_SUA_DON_HANG=13; public static final int SUA_DON_HANG_THANHCONG=14; public static final int MO_ACTIVITY_DANHSACH_DON_HANG=15; public static final int MO_ACTIVITY_DANHSACH_SAN_PHAM=20; public static final int CAPNHAT_DS_SAN_PHAM_THANHCONG=6; public static final int MO_ACTIVITY_SUA_SAN_PHAM=16; public static final int SUA_SAN_PHAM_THANHCONG=17; public static final int MO_ACTIVITY_THEM_SAN_PHAM=18; public static final int THEM_SAN_PHAM_THANHCONG=19; public static final int CAPNHAT_DS_DON_HANG_THANHCONG=16; public static final int MO_DS_COHOI=20; public static final int CAP_NHAT_DS_CO_HOI_THANHCONG=21; //lvallkh hiển thị danh sách tất cả các khách hàng ListView lvallkh; EditText search; ArrayList<KhachHang>custo;
  • 29. Trương Duy Linh - 51101863 29 ArrayAdapter<KhachHang> adaptercusto; private static ArrayList<LevelKhachHang>arrlvkh=new ArrayList<LevelKhachHang>(); private int pos=-1; private Button btnchonlevel; DatabaseHandler db; private KhachHang khach; int posi=-1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvallkh=(ListView)findViewById(R.id.lvallkh); search=(EditText)findViewById(R.id.txtsearch); custo=new ArrayList<KhachHang>(); //tạo truy vấn database db=new DatabaseHandler(this); btnchonlevel=(Button)findViewById(R.id.btnxoatt); KhachHang custom=null; //khởi tạo 3 level LevelKhachHang l1=new LevelKhachHang("VIP"); LevelKhachHang l2=new LevelKhachHang("THUONG"); LevelKhachHang l3=new LevelKhachHang("TIMNANG"); //------------------------------------------------------------ - //kiểm tra xam dữ liệu có khách hàng nào hay chưa //nếu chưa thì thêm vào // nếu có thì đọc ra từ CSDL if(db.getKhachHangCount()==0){ Log.d("12345", "6789"); custom=new KhachHang("1","Nam","1","1.@gmail.com","VIP","0",true); l1.Themkh(custom); db.addKhachHang(custom); arrlvkh.add(l1); custo.add(custom); //----------------- custom=new KhachHang("2","Tien","2","2.@gmail.com","TIMNANG","0",true); l2.Themkh(custom);
  • 30. Trương Duy Linh - 51101863 30 db.addKhachHang(custom); arrlvkh.add(l2); custo.add(custom); //----------------- custom=new KhachHang("3","An","3","3.@gmail.com","THUONG","0",true); l3.Themkh(custom); db.addKhachHang(custom); arrlvkh.add(l3); custo.add(custom); } else{ for(KhachHang kh:db.getAllKhachHang()){ if(kh.getlevel().equals("VIP")){ l1.Themkh(kh); custo.add(kh); Log.d("LEVEL1", kh.getlevel()); } else if(kh.getlevel().equals("THUONG")){ l2.Themkh(kh); custo.add(kh); Log.d("LEVEL2", kh.getlevel()); } else { l3.Themkh(kh); custo.add(kh); Log.d("LEVEL3", kh.getlevel()); } } arrlvkh.add(l1); arrlvkh.add(l2); arrlvkh.add(l3); } them_don_hang_va_tinh_gia(); adaptercusto=new ArrayAdapter<KhachHang>(this,android.R.layout.simple_list_item_1, custo); lvallkh.setAdapter(adaptercusto); adaptercusto.notifyDataSetChanged(); //Đăng kí contextmenu registerForContextMenu(btnchonlevel);
  • 31. Trương Duy Linh - 51101863 31 //Xử lí sự kiện khi gõ từ vào thanh search search.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub adaptercusto.notifyDataSetChanged(); MainActivity.this.adaptercusto.getFilter().filter(s); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); //xử lí sự kiên click vào item của ListView //lấy vi trí của khách hàng gọi hiển thị danh sách đơn hàng lvallkh.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub khach=custo.get(position); posi=position; Intent inte=new Intent(MainActivity.this,DanhSachDonHang.class); Bundle bundle=new Bundle(); bundle.putSerializable("KHACHHANG", khach); inte.putExtra("DATA", bundle);
  • 32. Trương Duy Linh - 51101863 32 startActivityForResult(inte,MainActivity.MO_ACTIVITY_DANHSACH_ DON_HANG); } }); } //truy xuất CSDL thêm đơn hàng tương ứng với mỗi khách hàng // tính coins cho khách hàng dựa trên các đơn hàng public void them_don_hang_va_tinh_gia(){ for(KhachHang kha:custo){ int gia=0; for(DonHang don:db.getdsdh_ofkh(Integer.parseInt(kha.getma()))){ kha.Themdh(don); gia+=Integer.parseInt(don.getsmoney()); } kha.setcoins(String.valueOf(gia)); db.updateKhachHang(kha); } } //dăng kí contextmenu @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.context_menu_level, menu); } //xử lí sự kiên click vào item menu gồm: // xem danh sách khác hàng của level VIP, THUONG, TIMNANG @Override public boolean onContextItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.mnuvip: pos=0; doDanhSachKhachHang(); break; case R.id.mnunormal: pos=1; doDanhSachKhachHang(); break;
  • 33. Trương Duy Linh - 51101863 33 case R.id.mnukhtimnang: pos=2; doDanhSachKhachHang(); break; } return super.onContextItemSelected(item); } //Intent goi Activity DanhSachKhachHang public void doDanhSachKhachHang() { Intent i=new Intent(this, DanhSachKhachHang.class); Bundle bundle=new Bundle(); bundle.putSerializable("LEVEL", arrlvkh.get(pos)); i.putExtra("DATA", bundle); startActivityForResult(i,MainActivity.XEM_DS_KHACH_HANG); } //Nhận result trả về từ cập nhật danh sách khách hàng, //cập nhật danh sách đơn hàng thành công //có 2 cập nhật trên mảng arrlvkh và custo @Override public void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode, resultCode, data); if(resultCode==MainActivity.CAPNHAT_DS_KHACH_HANG_THANHCONG){ Bundle bundle=data.getBundleExtra("DATA"); LevelKhachHang lvk=(LevelKhachHang)bundle.getSerializable("LEVEL"); arrlvkh.get(pos).getListKH().clear(); arrlvkh.get(pos).getListKH().addAll(lvk.getListKH()); custo.clear(); for(KhachHang k:db.getAllKhachHang()){ custo.add(k); Log.d("KhachHang",k.getten()); } them_don_hang_va_tinh_gia(); adaptercusto.notifyDataSetChanged(); }
  • 34. Trương Duy Linh - 51101863 34 else if(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){ Bundle bundle=data.getBundleExtra("DATA"); KhachHang k=(KhachHang)bundle.getSerializable("KHACHHANG"); custo.get(posi).getListDH().clear(); custo.get(posi).getListDH().addAll(k.getListDH()); int p=0; for(DonHang d:custo.get(posi).getListDH()){ p+=Integer.parseInt(d.getsmoney()); } custo.get(posi).setcoins(String.valueOf(p)); db.updateKhachHang(custo.get(posi)); adaptercusto.notifyDataSetChanged(); } } //hàm trả về danh sách khách hàng của mỗi level public static ArrayList<LevelKhachHang> getListLevel(){ return arrlvkh; } } - Class LevelKhachHang public class LevelKhachHang implements Serializable { private static final long serialVersionUID = 1L; //mãng danh sách khách hàng private ArrayList<KhachHang> arrkh =new ArrayList<KhachHang>(); //tên level private String ten; //hàm tạo với tham số tên public LevelKhachHang(String ten) { this.ten=ten; } //phương thức get,set tên của level public String getTenlv(){ return this.ten; }
  • 35. Trương Duy Linh - 51101863 35 public void setTenlv(String ten){ this.ten=ten; } //hàm tạo không tham số public LevelKhachHang() { super(); } //hàm thêm khách hàng của mỗi level public void Themkh(KhachHang kh){ int i=0; for(;i<arrkh.size();i++){ KhachHang old=arrkh.get(i); if(old.getma().trim().equalsIgnoreCase(kh.getma().trim())){ break; } } if(i<arrkh.size()){ arrkh.set(i, kh); } else{ arrkh.add(kh); } } //get khách hàng tại vị trí index của level public KhachHang get(int index){ return arrkh.get(index); } //lấy số lượng khách hàng của level đó public int size(){ return arrkh.size(); } //lấy danh sách khách hàng của level đó public ArrayList<KhachHang> getListKH(){ return this.arrkh; } }
  • 36. Trương Duy Linh - 51101863 36 - Class KhachHang chứa các thuộc tính liên quan khách hàng(mã khách hàng, tên, giới tính, số điện thoại, email, số coins), và các tác vụ get,set. public class KhachHang implements Serializable{ private static final long serialVersionUID = 1L; private String ma; private String ten; private String sdt; private String email; private String level; private String coins; private boolean sex; private ArrayList<DonHang> arrdh= new ArrayList<DonHang>(); //Hàm tạo không tham số public KhachHang(){ } //hàm tạo với các tham số mã, tên, sdt, email, level, coins public KhachHang(String ma,String ten,String sdt,String email,String level,String coins,boolean sex){ this.ma=ma; this.ten=ten; this.sdt=sdt; this.email=email; this.sex=sex; this.coins=coins; this.level=level; } //phương thức get,set cho tên public String getten(){return ten;} public void setten(String ten){this.ten=ten;} //phương thức get,set cho mã public String getma(){return ma;} public void setma(String ma){this.ma=ma;} //phương thức get,set cho sdt public String getsdt(){return sdt;} public void setsdt(String sdt){this.sdt=sdt;}
  • 37. Trương Duy Linh - 51101863 37 //phương thức get,set cho emial public String getemail(){return email;} public void setemail(String email){this.email=email;} //phương thức get,set cho level public String getlevel(){return level;} public void setlevel(String level){this.level=level;} //phương thức get,set cho coins public String getcoins(){return coins;} public void setcoins(String coin){this.coins=coin;} //phương thức get,set cho sex public boolean getsex(){return sex;} public void setsex(boolean sex){this.sex=sex;} //phương thức thêm đơn hàng của mỗi khách hàng public void Themdh(DonHang dh){ int i=0; for(;i<arrdh.size();i++){ DonHang old=arrdh.get(i); if(old.getmaDH().trim().equalsIgnoreCase(dh.getmaDH().trim())) { break; } } if(i<arrdh.size()){ arrdh.set(i, dh); } else{ arrdh.add(dh); } } //phương thức lấy đơn hàng tại index public DonHang get(int index){ return arrdh.get(index); } //lấy số lượng đơn hàng của khách hàng
  • 38. Trương Duy Linh - 51101863 38 public int size(){ return arrdh.size(); } //lấy danh sách đơn hàng của khách hàng public ArrayList<DonHang> getListDH(){ return this.arrdh; } //-------------------------------------------- //viết lại hàm chuyển thành chuổi toString @Override public String toString() { return this.ma+"---"+"Ten: " +this.ten +"n" +"Level: "+this.level+"---"+"Coins: "+this.coins; } } - Class DanhSachKhachHang //Class Danh sách khách hàng hiển thị danh sách khách hàng //Thiết lập hàm goi các tác vụ thêm,sửa, xóa khách hàng //chuyển level khách hàng, xem danh sách cơ hội public class DanhSachKhachHang extends Activity { ImageButton imgback; ListView lv; TextView txtshowlv; Button btnthemkh; ArrayList<KhachHang>arrkh =null; AdapterKhachHang adapter=null; LevelKhachHang lvkh=null; private KhachHang cus=null; int position =-1; DatabaseHandler db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dskh); db=new DatabaseHandler(this); txtshowlv=(TextView)findViewById(R.id.txtlevel); imgback=(ImageButton)findViewById(R.id.imgback); btnthemkh=(Button)findViewById(R.id.btnthemkhachhang);
  • 39. Trương Duy Linh - 51101863 39 lv=(ListView)findViewById(R.id.lvkhachhang); getdata(); Event(); registerForContextMenu(lv); } //lấy danh sách khách hàng của mỗi level truyền từ class MainActivity public void getdata(){ Intent i=getIntent(); Bundle b=i.getBundleExtra("DATA"); lvkh=(LevelKhachHang)b.getSerializable("LEVEL"); arrkh=lvkh.getListKH(); them_don_hang_va_tinh_gia(); adapter=new AdapterKhachHang(this,R.layout.item_layout_custom,arrkh); lv.setAdapter(adapter); txtshowlv.setText(lvkh.getTenlv()); } //Xử lí các sự kiện public void Event(){ //quay lại layout trước đó, truyền gói LEVEL qua MainActivity imgback.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("LEVEL", lvkh); i.putExtra("DATA", b); setResult(MainActivity.CAPNHAT_DS_KHACH_HANG_THANHCONG,i); finish(); } }); //bắt sự kiện click vào mỗi item lv.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int arg, long id) { cus=arrkh.get(arg); position=arg;
  • 40. Trương Duy Linh - 51101863 40 return false; } }); //Lấy sư kiện click button thêm khách hàng btnthemkh.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub doThemKhachHang(); } }); } //Đăng kí menu context_menu_kh khi click vào mỗi khách hàng @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.context_menu_kh, menu); } //Bắt sự kiện click các item khi click các memu. @Override public boolean onContextItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.mnuchuyenkh:doChuyenKhachHang();break; case R.id.mnusuakh:doSuaKhachHang();break; case R.id.mnuxoakh:doXoaKhachHang();break; case R.id.mnucohoi:doDanhSachCoHoi();break; case R.id.mnudsdh:doDanhSachDonHang();break; } return super.onContextItemSelected(item); } //Intent gọi Activity DanhSachCoHoi public void doDanhSachCoHoi(){ Intent i=new Intent(this, DanhSachCoHoi.class); Bundle bundle=new Bundle(); bundle.putSerializable("KHACHHANG", cus); i.putExtra("DATA", bundle); startActivityForResult(i,MainActivity.MO_DS_COHOI); }
  • 41. Trương Duy Linh - 51101863 41 //Intent gọi Activity DanhSachDonHang public void doDanhSachDonHang(){ //for(DonHang don:db.getdsdh_ofkh(Integer.parseInt(cus.getma()))){ // cus.Themdh(don); //} Intent i=new Intent(this, DanhSachDonHang.class); Bundle bundle=new Bundle(); bundle.putSerializable("KHACHHANG", cus); i.putExtra("DATA", bundle); startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_DON _HANG); } //Truy xuất vào cơ sở dữ liệu the tính coins của mỗi khách hàng // dựa trên giá của các đơn hàng của khách hàng đó bằng cách truy suất //dữ liêu trong cơ sở dữ liệu public void them_don_hang_va_tinh_gia(){ for(KhachHang kha:arrkh){ int gia=0; for(DonHang don:db.getdsdh_ofkh(Integer.parseInt(kha.getma()))){ kha.Themdh(don); gia+=Integer.parseInt(don.getsmoney()); } kha.setcoins(String.valueOf(gia)); db.updateKhachHang(kha); } } //Xóa khách hàng dùng AlertDialog hiển thị form hỏi xóa public void doXoaKhachHang() { AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setTitle("XOA"); builder.setMessage("Bạn có chắc muốn xóa"); builder.setIcon(R.drawable.ic_launcher); builder.setNegativeButton("Không", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel();
  • 42. Trương Duy Linh - 51101863 42 } }); builder.setPositiveButton("Có",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { arrkh.remove(cus); db.delete_quanhe_KHDH_tu_KH(cus); db.deleteKhachHang(cus); for(DonHang do1:cus.getListDH()){ db.delete_quanhe_DH_SP_tu_DH(do1); db.deleteDonHang(do1); } adapter.notifyDataSetChanged(); } }); builder.show(); } //Intent gọi Activity Activity_SuaKhachHang public void doSuaKhachHang() { Intent i=new Intent(this,Activity_SuaKhachHang.class); Bundle b=new Bundle(); cus.setlevel(lvkh.getTenlv()); b.putSerializable("KHACHHANG", cus); i.putExtra("DATA", b); startActivityForResult(i,MainActivity.MO_ACTIVITY_SUA_KHACH_HA NG); } //Intent gọi Activity Activity_ChuyenKhachHang public void doChuyenKhachHang() { Intent i=new Intent(this,Activity_ChuyenKhachHang.class); Bundle b=new Bundle(); b.putSerializable("KHACHHANG", cus); i.putExtra("DATA", b); startActivityForResult(i,MainActivity.MO_ACTIVITY_CHUYEN_LEVEL) ;
  • 43. Trương Duy Linh - 51101863 43 } //Intent goi Activity Activity_ThemKhachHang public void doThemKhachHang(){ Intent i=new Intent(this, Activity_ThemKhachHang.class); Bundle b=new Bundle(); b.putSerializable("KHACHHANG", cus); i.putExtra("DATA", b); startActivityForResult(i, MainActivity.MO_ACTIVITY_THEM_KHACH_HANG); } //Nhận các result từ viêc thêm,sửa,xóa khách hàng, xem danh sách đơn hàng protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(resultCode==MainActivity.SUA_KHACH_HANG_THANHCONG){ Bundle b=data.getBundleExtra("DATA"); KhachHang k=(KhachHang)b.getSerializable("KHACHHANG"); arrkh.set(position, k); db.updateKhachHang(k); adapter.notifyDataSetChanged(); } else if(resultCode==MainActivity.THEM_KHACH_HANG_THANHCONG){ Bundle b=data.getBundleExtra("DATA"); KhachHang k=(KhachHang)b.getSerializable("KHACHHANG"); k.setlevel(lvkh.getTenlv()); arrkh.add(k); db.addKhachHang(k); adapter.notifyDataSetChanged(); } else if(resultCode==MainActivity.CHUYEN_LEVEL_THANHCONG){ arrkh.remove(cus); adapter.notifyDataSetChanged(); } else if(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){ Bundle bundle=data.getBundleExtra("DATA"); KhachHang k=(KhachHang)bundle.getSerializable("KHACHHANG");
  • 44. Trương Duy Linh - 51101863 44 arrkh.get(position).getListDH().clear(); arrkh.get(position).getListDH().addAll(k.getListDH()); int p=0; for(DonHang d:arrkh.get(position).getListDH()){ p+=Integer.parseInt(d.getsmoney()); } arrkh.get(position).setcoins(String.valueOf(p)); db.updateKhachHang(arrkh.get(position)); adapter.notifyDataSetChanged(); } } } - Class Activity_ChuyenKhachHang public class Activity_ChuyenKhachHang extends Activity { //mảng level private static ArrayList<LevelKhachHang> arrlv=null; //lvlevel hiển thị các lựa chọn để chuyển level ListView lvlevel; ImageButton imgapply; //adapter chuyển dữ liệu từ ArratList arrlv thành dữ liệu trên ListView lvlevel ArrayAdapter<LevelKhachHang>adapter; KhachHang kh=null; DatabaseHandler db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chuyen_level); db=new DatabaseHandler(this); lvlevel=(ListView)findViewById(R.id.lvlevel); imgapply=(ImageButton)findViewById(R.id.imgapply); //Intent lấy gói dữ liệu được truyền đi từ danh sách khách hàng //do đó láy được khách hàng được truyền tới Intent i=getIntent(); Bundle b=i.getBundleExtra("DATA"); kh=(KhachHang)b.getSerializable("KHACHHANG"); arrlv=MainActivity.getListLevel(); //khai báo adapter với layout danh sách single choose, lấy dữ liệu từ mảng arrlv adapter=new
  • 45. Trương Duy Linh - 51101863 45 ArrayAdapter<LevelKhachHang>(this,android.R.layout.simple_list_it em_single_choice,arrlv); lvlevel.setAdapter(adapter); //Lấy vị trí sự kiện click trên ListView, nếu CheckView được tick // thì lấy vị trí level được tick tại position thêm vào level đó // và thêm khách hàng vào cơ sở dữ liệu lvlevel.setOnItemClickListener(new OnItemClickListener() { Boolean somethingChecked=false; @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub if(somethingChecked){ CheckedTextView cv=(CheckedTextView)view; cv.setChecked(false); } CheckedTextView cv=(CheckedTextView)view; if(!cv.isChecked()){ cv.setChecked(true); arrlv.get(position).Themkh(kh); db.chuyenKhachHang(kh,position); } somethingChecked=true; } }); //Bắt sự kiện khi nhấn button apply, //thiết lập result thông báo thành công imgapply.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub setResult(MainActivity.CHUYEN_LEVEL_THANHCONG); finish(); } }); } } - Class Activity_SuaKhachHang
  • 46. Trương Duy Linh - 51101863 46 public class Activity_SuaKhachHang extends Activity { EditText txtma,txtten,txtsdt,txtemail; Button btnxoa,btnluu; RadioButton raNam; KhachHang khachhang=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Gọi layout activity_them_khach_hang setContentView(R.layout.activity_them_khach_hang); //lấy id từ các View,Button của layout txtma=(EditText)findViewById(R.id.txtma); txtten=(EditText)findViewById(R.id.txtten); txtsdt=(EditText)findViewById(R.id.txtsdt); txtemail=(EditText)findViewById(R.id.txtemail); btnxoa=(Button)findViewById(R.id.btnxoa); btnluu=(Button)findViewById(R.id.btnluu); raNam=(RadioButton)findViewById(R.id.raNam); setdefault(); btnxoa.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub txtten.setText(""); txtsdt.setText(""); txtemail.setText(""); txtten.requestFocus(); } }); btnluu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String ten=txtten.getText()+""; String sdt=txtsdt.getText()+""; String email=txtemail.getText()+""; Boolean sex=!raNam.isChecked(); khachhang.setten(ten);
  • 47. Trương Duy Linh - 51101863 47 khachhang.setsdt(sdt); khachhang.setemail(email); khachhang.setsex(sex); //sau khi chỉnh sửa thì đóng gói dữ liệu và thiết lập //result thành công Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("KHACHHANG",khachhang); i.putExtra("DATA", b); setResult(MainActivity.SUA_KHACH_HANG_THANHCONG,i); finish(); } }); } //Thiết lâp các giá trị mặc định //lấy gói DATA được truyền từ danh sách khách hàng //thiết lập thông tin khách hàng lên các View public void setdefault(){ Intent i=getIntent(); Bundle b=i.getBundleExtra("DATA"); khachhang=(KhachHang)b.getSerializable("KHACHHANG"); txtma.setText(khachhang.getma()); txtten.setText(khachhang.getten()); txtsdt.setText(khachhang.getsdt()); txtemail.setText(khachhang.getemail()); raNam.setChecked(true); if(khachhang.getsex()){ raNam.setChecked(false); } } } - Class Activity_ThemKhachHang public class Activity_ThemKhachHang extends Activity { EditText txtma,txtten,txtsdt,txtemail; Button btnxoa,btnluu; RadioButton raNam; DatabaseHandler db; @Override
  • 48. Trương Duy Linh - 51101863 48 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //gọi layout activity_them_khach_hang setContentView(R.layout.activity_them_khach_hang); //Lấy Id các View từ layout txtma=(EditText)findViewById(R.id.txtma); txtten=(EditText)findViewById(R.id.txtten); txtsdt=(EditText)findViewById(R.id.txtsdt); txtemail=(EditText)findViewById(R.id.txtemail); btnxoa=(Button)findViewById(R.id.btnxoa); btnluu=(Button)findViewById(R.id.btnluu); raNam=(RadioButton)findViewById(R.id.raNam); //truy vấn vào cơ sở dữ liệu db=new DatabaseHandler(this); //thiết lập clear các View khi nhấn xóa btnxoa.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub txtma.setText(""); txtten.setText(""); txtsdt.setText(""); txtemail.setText(""); txtma.requestFocus(); } }); //Khi lưu dữ liệu được lưu vào cus //đóng gói DATA truyền đi,thiết lập result thành công btnluu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String ma=txtma.getText()+""; String ten=txtten.getText()+""; String sdt=txtsdt.getText()+""; String email=txtemail.getText()+""; String tongtien=""; Boolean sex=!raNam.isChecked(); String level=""; if(db.checkTrung(ma,"id","KhachHang")==0){ KhachHang cus= new KhachHang(ma,ten,sdt,email,level,tongtien,sex);
  • 49. Trương Duy Linh - 51101863 49 Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("KHACHHANG", cus); i.putExtra("DATA", b); setResult(MainActivity.THEM_KHACH_HANG_THANHCONG,i); finish(); } } }); } } - Class AdapterKhachHang public class AdapterKhachHang extends ArrayAdapter<KhachHang> { Activity context; int layoutId; ArrayList<KhachHang> arrkhachhang; public AdapterKhachHang(Activity context,int textViewResourceId, ArrayList<KhachHang> objects) { super(context,textViewResourceId, objects); this.context=context; this.layoutId=textViewResourceId; this.arrkhachhang= objects; } @Override public View getView(int position,View convertView,ViewGroup parent){ convertView=context.getLayoutInflater().inflate(layoutId, null); TextView ten=(TextView)convertView.findViewById(R.id.txttenkh); TextView coins=(TextView)convertView.findViewById(R.id.txtcoins); ImageView img=(ImageView)convertView.findViewById(R.id.imageView1); KhachHang kh=arrkhachhang.get(position); ten.setText(kh.getten()); coins.setText(kh.getcoins()); img.setImageResource(R.drawable.girlicon); if(!kh.getsex()){ img.setImageResource(R.drawable.boyicon); } return convertView;
  • 50. Trương Duy Linh - 51101863 50 } } - Class CoHoi tạo các thuộc tính và các tác vu get, set public class CoHoi { private String tench; private String mach; private String ngaych; private String makh_of_ch; //hàm tạo CoHoi không tham số public CoHoi(){}; //hàm tạo CoHoi có tham số: mã cơ hội, tên, ngày thêm, mã khách hàng của cơ hội public CoHoi(String mach,String tench,String ngaych,String makh_of_ch) { this.mach=mach; this.tench=tench; this.ngaych=ngaych; this.makh_of_ch=makh_of_ch; } //các tác vụ get, set cho ten,ma ngay,makh public String gettench(){return this.tench;} public String getmach(){return this.mach;} public String getngaych(){return this.ngaych;} public String getmakh_of_ch(){return this.makh_of_ch;} public void setmach(String ma){this.mach=ma;} public void settench(String ten){this.tench=ten;} public void setngaych(String ngay){this.ngaych=ngay;} public void setmakh_of_ch(String makh_of_ch){this.makh_of_ch=makh_of_ch;} //viết lại hàm toString @Override public String toString(){ return this.mach+" "+this.tench+" "+this.ngaych; } } - Class DanhSachCoHoi //class này thiện danh sách các cơ hội //thêm các cơ hội, xóa các cơ hội
  • 51. Trương Duy Linh - 51101863 51 public class DanhSachCoHoi extends Activity{ private ArrayList<CoHoi> arrch=new ArrayList<CoHoi>(); AdapterChoHoi adapter=null; ListView listcohoi; EditText txttench,txtngaych,txtmach1; Button addch,xoach; DatabaseHandler db; int so=0; KhachHang kh=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dsch); listcohoi=(ListView)findViewById(R.id.listcohoi); txttench=(EditText)findViewById(R.id.txttench); txtngaych=(EditText)findViewById(R.id.txtngaych); txtmach1=(EditText)findViewById(R.id.txtmach1); addch=(Button)findViewById(R.id.btnaddch); xoach=(Button)findViewById(R.id.btnxoach); db=new DatabaseHandler(this); getData(); //thiết lập Adapter theo cấu trúc cơ hội adapter=new AdapterChoHoi(this,R.layout.item_cohoi,arrch); listcohoi.setAdapter(adapter); // thực hiện sự kiện thêm cơ hội addch.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String ma=txtmach1.getText()+""; String ten=txttench.getText()+""; String ngay=txtngaych.getText()+""; if(db.checkTrung(ma,"ma_ch","Cohoi")==0){ CoHoi ch=new CoHoi(ma,ten,ngay,kh.getma()); arrch.add(ch); db.addCoHoi(ch); adapter.notifyDataSetChanged(); txttench.setText("");
  • 52. Trương Duy Linh - 51101863 52 txtngaych.setText(""); txttench.requestFocus(); } } }); //thực hiện sự kiện xóa các cơ hội,có thể xóa 1 hoặc nhiều xoach.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub for(int i=listcohoi.getChildCount()-1;i>=0;i--){ View t=listcohoi.getChildAt(i); CheckBox ch=(CheckBox)t.findViewById(R.id.chkitem); if(ch.isChecked()){ db.deleteCoHoi(arrch.get(i)); arrch.remove(i); } } adapter.notifyDataSetChanged(); } }); adapter.notifyDataSetChanged(); } //Lấy khách hàng sẽ thêm cơ hội public void getData(){ Intent i=getIntent(); Bundle b=i.getBundleExtra("DATA"); kh=(KhachHang)b.getSerializable("KHACHHANG"); for(CoHoi c:db.getAllCoHoi(Integer.parseInt(kh.getma()))){ arrch.add(c); } } } - Class DatabaseHandle xây dựng cấu trúc các bảng dữ liệu và các hàm insert, update, delete.
  • 53. Trương Duy Linh - 51101863 53 public class DatabaseHandler extends SQLiteOpenHelper { private static final int DATABASE_VERSION=1; private static final String DATABASE_NAME="KhachHangManager"; //table khach hang private static final String TABLE_KHACHHANG="KhachHang"; private static final String ID="id"; private static final String NAME="name"; private static final String PHONE="phone"; private static final String EMAIL="email"; private static final String LEVEL="level"; private static final String COINS="coins"; private static final String SEX="sex"; //table donhang private static final String TABLE_DONHANG="donhang"; private static final String ID_DH="id_dh"; private static final String NAME_DH="name_dh"; private static final String DATE_DH="date_dh"; private static final String MONEY_DH="sum_money"; //table product private static final String TABLE_PRODUCT="product"; private static final String ID_SP="ma_sp"; private static final String NAME_SP="ten_sp"; private static final String INFO_SP="info_sp"; private static final String PRICE_SP="price_sp"; //table of_cus private static final String TABLE_OF_CUS="of_cus"; private static final String ID_KH_OF_CUS="id_kh_of_cus"; private static final String ID_DH_OF_CUS="id_dh_of_cus"; //table bo_bill private static final String TABLE_OF_BILL="of_bill"; private static final String ID_SP_OF_BILL="id_sp_of_bill"; private static final String ID_DH_OF_BILL="id_dh_of_bill"; //table co hoi private static final String TABLE_COHOI="Cohoi"; private static final String ID_MA_CH="ma_ch"; private static final String ID_TEN_CH="ten_ch"; private static final String ID_NGAY_CH="ngay_ch"; private static final String ID_MA_KH_CH="ma_kh_ch";
  • 54. Trương Duy Linh - 51101863 54 public DatabaseHandler(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } //thiết lập lệnh tạo các table và thực thi các lệnh đó @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String CREATE_KhachHang_TABLE="CREATE TABLE "+TABLE_KHACHHANG+" ( " +ID+" INTEGER PRIMARY KEY, " +NAME+" TEXT, " +PHONE+" TEXT, " +EMAIL+ " TEXT, " +LEVEL+ " TEXT, " +COINS+ " TEXT, " +SEX+" TEXT )"; String CREATE_DonHang_TABLE="CREATE TABLE "+TABLE_DONHANG+" (" +ID_DH +" INTEGER PRIMARY KEY, " +NAME_DH+ " TEXT, " +DATE_DH+ " TEXT, " +MONEY_DH+ " TEXT )"; String CREATE_Product_TABLE="CREATE TABLE "+TABLE_PRODUCT+" (" +ID_SP +" INTEGER PRIMARY KEY, " +NAME_SP+ " TEXT, " +INFO_SP+ " TEXT, " +PRICE_SP+ " TEXT )"; String CREATE_of_cus_TABLE="CREATE TABLE "+TABLE_OF_CUS+" (" + ID_KH_OF_CUS+ " INTEGER, " + ID_DH_OF_CUS+ " INTEGER, " +" PRIMARY KEY ("+ID_KH_OF_CUS+","+ID_DH_OF_CUS+" )" +" FOREIGN KEY("+ID_KH_OF_CUS+") REFERENCES " +TABLE_KHACHHANG+"( "+ID+") ON DELETE CASCADE ON UPDATE CASCADE," +" FOREIGN KEY("+ID_DH_OF_CUS+") REFERENCES " +TABLE_DONHANG+"( "+ID_DH+") ON DELETE CASCADE ON UPDATE CASCADE )"; String CREATE_of_bill_TABLE="CREATE TABLE "+TABLE_OF_BILL + " ( "+ ID_DH_OF_BILL+" INTEGER, "
  • 55. Trương Duy Linh - 51101863 55 + ID_SP_OF_BILL+" INTEGER, " + " PRIMARY KEY ("+ID_DH_OF_BILL+","+ID_SP_OF_BILL+" )" +" FOREIGN KEY("+ID_DH_OF_BILL+") REFERENCES " +TABLE_DONHANG+"( "+ID_DH+") ON DELETE CASCADE ON UPDATE CASCADE," +" FOREIGN KEY("+ID_SP_OF_BILL+") REFERENCES " +TABLE_PRODUCT+"( "+ID_SP+") ON DELETE CASCADE ON UPDATE CASCADE )"; String CREATE_co_hoi_TABLE="CREATE TABLE "+TABLE_COHOI +" ( "+ID_MA_CH +" TEXT PRIMARY KEY, " + ID_TEN_CH+" TEXT, " + ID_NGAY_CH+" TEXT, " + ID_MA_KH_CH+" INTEGER, " + "FOREIGN KEY("+ID_MA_KH_CH+") REFERENCES "+TABLE_KHACHHANG+"("+ID+") ON DELETE CASCADE ON UPDATE CASCADE )"; db.execSQL(CREATE_KhachHang_TABLE); db.execSQL(CREATE_DonHang_TABLE); db.execSQL(CREATE_Product_TABLE); db.execSQL(CREATE_of_cus_TABLE); db.execSQL(CREATE_of_bill_TABLE); db.execSQL(CREATE_co_hoi_TABLE); } //xóa các table khi version thay đổi @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS "+TABLE_KHACHHANG); db.execSQL("DROP TABLE IF EXISTS "+TABLE_DONHANG); db.execSQL("DROP TABLE IF EXISTS "+TABLE_PRODUCT); db.execSQL("DROP TABLE IF EXISTS "+TABLE_OF_CUS); db.execSQL("DROP TABLE IF EXISTS "+TABLE_OF_BILL); db.execSQL("DROP TABLE IF EXISTS "+TABLE_COHOI); onCreate(db); } //add single KhachHang public void addKhachHang(KhachHang khachhang){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues();
  • 56. Trương Duy Linh - 51101863 56 values.put(NAME, khachhang.getten()); values.put(PHONE, khachhang.getsdt()); values.put(EMAIL, khachhang.getemail()); values.put(LEVEL, khachhang.getlevel()); values.put(COINS, khachhang.getcoins()); values.put(SEX, khachhang.getsex()?"Nam":"Nu"); //insert row db.insert(TABLE_KHACHHANG, null, values); db.close(); } //read row public KhachHang getKhachHang(int id){ SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.query(TABLE_KHACHHANG, new String[]{ID,NAME}, ID +" = ?", new String[]{String.valueOf(id)}, null, null, null,null); if(cursor!=null) cursor.moveToFirst(); KhachHang khachhang=new KhachHang(String.valueOf(cursor.getInt(0)),cursor.getString(1),cursor.getString(2),c ursor.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)=="Nam"? true:false); return khachhang; } //Trả về danh sách khách hàng đọng từ cơ sở dữ liệu public ArrayList<KhachHang> getAllKhachHang(){ ArrayList<KhachHang> KhachHanglist=new ArrayList<KhachHang>(); String selectquery="SELECT * FROM "+TABLE_KHACHHANG; SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.rawQuery(selectquery, null); if(cursor.moveToFirst()){ do{ KhachHang khachhang=new KhachHang(); khachhang.setma(cursor.getString(0)); khachhang.setten(cursor.getString(1)); khachhang.setsdt(cursor.getString(2)); khachhang.setemail(cursor.getString(3)); khachhang.setlevel(cursor.getString(4)); khachhang.setcoins(cursor.getString(5));
  • 57. Trương Duy Linh - 51101863 57 khachhang.setsex((cursor.getString(6)=="Nam"?true:false)); KhachHanglist.add(khachhang); }while(cursor.moveToNext()); } return KhachHanglist; } //lấy số lượng khách hàng đọc từ cơ sở dữ liệu public int getKhachHangCount(){ String countQuery = "SELECT * FROM " + TABLE_KHACHHANG; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); int count = 0; try { if (cursor.moveToFirst()) { count = cursor.getCount(); } return count; } finally { if (cursor != null) { cursor.close(); db.close(); } } } //cập nhật thông tin khách hàng trong cơ sở dữ liệu public int updateKhachHang(KhachHang khachhang){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(NAME, khachhang.getten()); values.put(PHONE, khachhang.getsdt()); values.put(SEX,khachhang.getsex()?"Nam":"Nu"); values.put(EMAIL, khachhang.getemail()); values.put(LEVEL, khachhang.getlevel()); values.put(COINS, khachhang.getcoins()); return db.update(TABLE_KHACHHANG, values, ID+" = ?", new String[]{String.valueOf(khachhang.getma())});
  • 58. Trương Duy Linh - 51101863 58 } // thay đổi level khách hàng bằng cách cập nhật lại côt level //trong table KhachHang public void chuyenKhachHang(KhachHang k,int i){ SQLiteDatabase db = this.getWritableDatabase(); if(i==0){k.setlevel("VIP");} else if(i==1){k.setlevel("THUONG");} else {k.setlevel("TIMNANG");} updateKhachHang(k); db.close(); } //xóa khách hàng public void deleteKhachHang(KhachHang khachhang){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_KHACHHANG, ID + " = ?", new String[] { String.valueOf(khachhang.getma()) }); db.close(); } //lay Danh sach don hang cua khach hang public ArrayList<DonHang> getdsdh_ofkh(int id){ ArrayList<DonHang> listdh=new ArrayList<DonHang>(); String query ="SELECT * FROM "+TABLE_OF_CUS +" WHERE "+ID_KH_OF_CUS+" = "+id; SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.rawQuery(query,null); if(cursor.moveToFirst()){ do{ String query2 ="SELECT * FROM "+TABLE_DONHANG +" WHERE "+ID_DH+" = "+cursor.getString(1); Cursor cursor2=db.rawQuery(query2,null); if(cursor2.moveToFirst()){ do{ DonHang dh=new DonHang(); dh.setmaDH(cursor2.getString(0)); dh.settenDH(cursor2.getString(1)); dh.setdate(cursor2.getString(2)); dh.setsmoney(cursor2.getString(3));
  • 59. Trương Duy Linh - 51101863 59 listdh.add(dh); }while(cursor2.moveToNext()); } }while(cursor.moveToNext()); } return listdh; } //lay danh sach san pham cua don hang public ArrayList<SanPham> getdssp_ofdh(int id){ ArrayList<SanPham> listsp=new ArrayList<SanPham>(); String query ="SELECT * FROM "+TABLE_OF_BILL +" WHERE "+ID_DH_OF_BILL+" = "+id; SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.rawQuery(query,null); if(cursor.moveToFirst()){ do{ String query2 ="SELECT * FROM "+TABLE_PRODUCT +" WHERE "+ID_SP+" = "+cursor.getString(1); Cursor cursor2=db.rawQuery(query2,null); if(cursor2.moveToFirst()){ do{ SanPham sp=new SanPham(); sp.setmaSP(cursor2.getString(0)); sp.settenSP(cursor2.getString(1)); sp.setthongtinSP(cursor2.getString(2)); sp.setprice(cursor2.getString(3)); listsp.add(sp); }while(cursor2.moveToNext()); } }while(cursor.moveToNext()); } return listsp; } //them don hang vao 1 khach hang va vao csdl public void addSanPham(SanPham sanpham){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(ID_SP, sanpham.getmaSP());
  • 60. Trương Duy Linh - 51101863 60 values.put(NAME_SP, sanpham.gettenSP()); values.put(INFO_SP, sanpham.getthongtinSP()); values.put(PRICE_SP, sanpham.getprice()); //insert row db.insert(TABLE_PRODUCT, null, values); db.close(); } //them san pham vao 1 don hang public void addDonHang(DonHang donhang){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(ID_DH, donhang.getmaDH()); values.put(NAME_DH, donhang.gettenDH()); values.put(DATE_DH, donhang.getdate()); values.put(MONEY_DH, donhang.getsmoney()); //insert row db.insert(TABLE_DONHANG, null, values); db.close(); } //update don hang public int updateDonHang(DonHang donhang){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(ID_DH, donhang.getmaDH()); values.put(NAME_DH, donhang.gettenDH()); values.put(DATE_DH, donhang.getdate()); values.put(MONEY_DH, donhang.getsmoney()); return db.update(TABLE_DONHANG, values, ID_DH+" = ?", new String[]{String.valueOf(donhang.getmaDH())}); } //update san pham public int updateSanPham(SanPham sanpham){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(ID_SP, sanpham.getmaSP());
  • 61. Trương Duy Linh - 51101863 61 values.put(NAME_SP, sanpham.gettenSP()); values.put(INFO_SP, sanpham.getthongtinSP()); values.put(PRICE_SP, sanpham.getprice()); return db.update(TABLE_PRODUCT, values, ID_SP+" = ?", new String[]{String.valueOf(sanpham.getmaSP())}); } //xoa don hang public void deleteDonHang(DonHang donhang){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_DONHANG, ID_DH + " = ?", new String[] { String.valueOf(donhang.getmaDH()) }); db.close(); } //xoa delete_quanhe_KHDH_tu_KH public void delete_quanhe_KHDH_tu_KH(KhachHang khachhang){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_OF_CUS, ID_KH_OF_CUS + " = ?", new String[] { String.valueOf(khachhang.getma()) }); db.close(); } //xoa delete_quanhe_KHHD_tu_DH public void delete_quanhe_KHDH_tu_DH(DonHang donhang){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_OF_CUS, ID_DH_OF_CUS + " = ?", new String[] { String.valueOf(donhang.getmaDH()) }); db.close(); } //xoa delete_quanhe_DH_SP_tu_DH public void delete_quanhe_DH_SP_tu_DH(DonHang donhang){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_OF_BILL, ID_DH_OF_BILL + " = ?", new String[] { String.valueOf(donhang.getmaDH()) }); db.close(); } //xoa delete_quanhe_DHSP_tu_SP public void delete_quanhe_DHSP_tu_SP(SanPham sanpham){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_OF_BILL, ID_SP_OF_BILL + " = ?",
  • 62. Trương Duy Linh - 51101863 62 new String[] { String.valueOf(sanpham.getmaSP()) }); db.close(); } //xoa san pham public void deleteSanPham(SanPham sanpham){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_PRODUCT, ID_SP + " = ?", new String[] { String.valueOf(sanpham.getmaSP()) }); db.close(); } //them vao bang of_cus public void addof_cus(KhachHang khachhang,DonHang donhang){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(ID_KH_OF_CUS, khachhang.getma()); values.put(ID_DH_OF_CUS, donhang.getmaDH()); //insert row db.insert(TABLE_OF_CUS, null, values); db.close(); } //them vao bang of_bill public void addof_bill(DonHang donhang,SanPham sanpham){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(ID_DH_OF_BILL, donhang.getmaDH()); values.put(ID_SP_OF_BILL, sanpham.getmaSP()); //insert row db.insert(TABLE_OF_BILL, null, values); db.close(); } public boolean chkDB(){ boolean chk = false; SQLiteDatabase db = this.getWritableDatabase(); Cursor mCursor = db.rawQuery("SELECT * FROM " + TABLE_KHACHHANG, null); if (mCursor != null){
  • 63. Trương Duy Linh - 51101863 63 mCursor.moveToFirst(); if (mCursor.getInt(0) == 0){ chk = false; } }else{ chk = true; } db.close(); return chk; } //thêm 1 cơ hội vào CSDL public void addCoHoi(CoHoi cohoi){ SQLiteDatabase db=this.getWritableDatabase(); ContentValues values=new ContentValues(); values.put(ID_MA_CH, cohoi.getmach()); values.put(ID_TEN_CH, cohoi.gettench()); values.put(ID_NGAY_CH, cohoi.getngaych()); values.put(ID_MA_KH_CH, cohoi.getmakh_of_ch()); //insert row db.insert(TABLE_COHOI, null, values); db.close(); } // xóa cơ hội khỏi CSDL public void deleteCoHoi(CoHoi cohoi){ SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_COHOI, ID_MA_CH + " = ?", new String[] { String.valueOf(cohoi.getmach()) }); db.close(); } //Lấy danh sách cơ hội public ArrayList<CoHoi> getAllCoHoi(int ma){ ArrayList<CoHoi> CoHoilist=new ArrayList<CoHoi>(); String selectquery="SELECT * FROM "+TABLE_COHOI+" WHERE "+ID_MA_KH_CH+" = "+ma; SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.rawQuery(selectquery, null); if(cursor.moveToFirst()){ do{ CoHoi cohoi=new CoHoi(); cohoi.setmach(cursor.getString(0));
  • 64. Trương Duy Linh - 51101863 64 cohoi.settench(cursor.getString(1)); cohoi.setngaych(cursor.getString(2)); cohoi.setmakh_of_ch(cursor.getString(3)); CoHoilist.add(cohoi); }while(cursor.moveToNext()); } return CoHoilist; } //Kiểm tra khi thêm 1 khách hàng, 1 đơn hàng, 1 cơ hội, mã của nó //có cùng với mã hiện tại hay chưa public int checkTrung(String i,String column,String table){ String countQuery = "SELECT * FROM " + table+" WHERE "+column+" = "+i; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); int count = 0; try { if (cursor.moveToFirst()) { count = cursor.getCount(); } return count; } finally { if (cursor != null) { cursor.close(); db.close(); } } } } - Class DonHang //Class đơn hàng chứa thông tin đơn hàng gồm mã, tên, date, smoney public class DonHang implements Serializable{ private static final long serialVersionUID = 1L; private String maDH; private String tenDH; private String date; private String smoney;
  • 65. Trương Duy Linh - 51101863 65 //khởi tạo danh sách sản phẩm private ArrayList<SanPham>arrsp=new ArrayList<SanPham>(); public DonHang(){ } public DonHang(String maDH,String tenDH,String date,String smoney){ this.maDH=maDH; this.tenDH=tenDH; this.date=date; this.smoney=smoney; } //các tác vụ get,set public String gettenDH(){return tenDH;} public void settenDH(String ten){this.tenDH=ten;} public String getmaDH(){return maDH;} public void setmaDH(String ma){this.maDH=ma;} public String getdate(){return date;} public void setdate(String date){this.date=date;} public String getsmoney(){return smoney;} public void setsmoney(String smoney){this.smoney=smoney;} //thêm sản phẩm cho đơn hàng public void Themsp(SanPham sp){ int i=0; for(;i<arrsp.size();i++){ SanPham old=arrsp.get(i); if(old.getmaSP().trim().equalsIgnoreCase(sp.getmaSP().trim())) { break; } } if(i<arrsp.size()){ arrsp.set(i, sp); } else{ arrsp.add(sp); }
  • 66. Trương Duy Linh - 51101863 66 } //lấy sản phẩm tại vị trí index của mảng public SanPham get(int index){ return arrsp.get(index); } //lấy sô lượng sản phẩm public int size(){ return arrsp.size(); } //lấy danh sách sản phẩm của đon hàng đó public ArrayList<SanPham> getListSP(){ return this.arrsp; } //-------------------------------------------- @Override public String toString() { return this.maDH+" "+this.tenDH+" "+this.date+" "+this.smoney; } } - Class DanhSachDonHang public class DanhSachDonHang extends Activity{ ImageButton btnbackDH; ListView lvdh; Button btnthemdh; KhachHang kh=null; ArrayAdapter<DonHang> adapter=null; ArrayList<DonHang> arrdh=null; DonHang donhang=null; DatabaseHandler db; private int position =-1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dsdh); btnbackDH=(ImageButton)findViewById(R.id.btnbackDH); lvdh=(ListView)findViewById(R.id.lvDH); btnthemdh=(Button)findViewById(R.id.btnthemdh); db=new DatabaseHandler(this); arrdh=new ArrayList<DonHang>();
  • 67. Trương Duy Linh - 51101863 67 getData(); Event(); registerForContextMenu(lvdh); } /* * Lấy khách hàng là chủ của các đơn hàng này * Lấy danh sách các sản phẩm từ CSDL */ public void getData(){ Intent i=getIntent(); Bundle b=i.getBundleExtra("DATA"); kh=(KhachHang)b.getSerializable("KHACHHANG"); arrdh=kh.getListDH(); Them_sp_va_tinh_giadonhang();//----------- adapter=new ArrayAdapter<DonHang>(this,android.R.layout.simple_list_item_1,ar rdh); lvdh.setAdapter(adapter); } //Xử lí các sự kiện public void Event(){ //Xử lí sự kiện trở về danh sách khách hàng btnbackDH.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("KHACHHANG", kh); i.putExtra("DATA", b); setResult(MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG,i); finish(); } }); //Xử lí sự kiện click vào item ListView lvdh.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int arg, long id) {
  • 68. Trương Duy Linh - 51101863 68 donhang=arrdh.get(arg); position=arg; return false; } }); //Xử lí sự kiện thêm đơn hàng cho vào danh sách đơn hàng btnthemdh.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub doThemDonHang(); } }); } //Đăng kí Contextmenu @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.context_menu_dh, menu); } //Xử lí xự kiện click item trong contextmenu //Gồm: sửa, xóa, xem danh sách sản phẩm @Override public boolean onContextItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.mnusuadh:doSuaDonHang();break; case R.id.mnuxoadh:doXoaDonHang();break; case R.id.mnudssp:doDanhSachSanPham();break; } return super.onContextItemSelected(item); } //Intent gọi Activity DanhSachSanPham public void doDanhSachSanPham(){ //for(SanPham
  • 69. Trương Duy Linh - 51101863 69 san:db.getdssp_ofdh(Integer.parseInt(donhang.getmaDH()))){ //donhang.Themsp(san); //} Intent i=new Intent(this, DanhSachSanPham.class); Bundle bundle=new Bundle(); bundle.putSerializable("DONHANG", donhang); i.putExtra("DATA", bundle); startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_SAN _PHAM); } //Thêm các sản phẩm vào mỗi đơn hàng tương ứng //tính giá của đơn hàng thông qua các sản phẩm đó public void Them_sp_va_tinh_giadonhang(){ for(DonHang dhang:arrdh){ int gia=0; for(SanPham san:db.getdssp_ofdh(Integer.parseInt(dhang.getmaDH()))){ dhang.Themsp(san); gia+=Integer.parseInt(san.getprice()); } dhang.setsmoney(String.valueOf(gia)); db.updateDonHang(dhang); } } //Hiển thị form AlertDialog, thực hiện việc xóa đơn hàng public void doXoaDonHang() { AlertDialog.Builder builder=new AlertDialog.Builder(this); builder.setTitle("XOA"); builder.setMessage("Bạn có chắc muốn xóa"); builder.setIcon(R.drawable.ic_launcher); builder.setNegativeButton("Không", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setPositiveButton("Có",new DialogInterface.OnClickListener() {
  • 70. Trương Duy Linh - 51101863 70 @Override public void onClick(DialogInterface dialog, int which) { arrdh.remove(donhang); db.delete_quanhe_DH_SP_tu_DH(donhang); db.delete_quanhe_KHDH_tu_DH(donhang); db.deleteDonHang(donhang); adapter.notifyDataSetChanged(); } }); builder.show(); } //Intent gọi Activity Activity_SuaDonHang public void doSuaDonHang() { Intent i=new Intent(this,Activity_SuaDonHang.class); Bundle b=new Bundle(); b.putSerializable("DONHANG", donhang); i.putExtra("DATA", b); startActivityForResult(i,MainActivity.MO_ACTIVITY_SUA_DON_HANG) ; } //Intetn gọi Activity Activity_ThemDonHang public void doThemDonHang(){ Intent i=new Intent(this, Activity_ThemDonHang.class); Bundle b=new Bundle(); b.putSerializable("DONHANG", donhang); i.putExtra("DATA", b); startActivityForResult(i, MainActivity.MO_ACTIVITY_THEM_DON_HANG); } //Nhận result từ thêm, sửa đơn hàng và cập nhật danh sách sản phẩm thành công protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(resultCode==MainActivity.SUA_DON_HANG_THANHCONG){
  • 71. Trương Duy Linh - 51101863 71 Bundle b=data.getBundleExtra("DATA"); DonHang d=(DonHang)b.getSerializable("DONHANG"); arrdh.set(position, d); db.updateDonHang(d); adapter.notifyDataSetChanged(); } else if(resultCode==MainActivity.THEM_DON_HANG_THANHCONG){ Bundle b=data.getBundleExtra("DATA"); DonHang d=(DonHang)b.getSerializable("DONHANG"); arrdh.add(d); db.addDonHang(d); db.addof_cus(kh, d); adapter.notifyDataSetChanged(); } else if(resultCode==MainActivity.CAPNHAT_DS_SAN_PHAM_THANHCONG){ Bundle bundle=data.getBundleExtra("DATA"); DonHang d=(DonHang)bundle.getSerializable("DONHANG"); arrdh.get(position).getListSP().clear(); arrdh.get(position).getListSP().addAll(d.getListSP()); //Them_sp_va_tinh_giadonhang();//----------- int p=0; for(SanPham s:arrdh.get(position).getListSP()){ p+=Integer.parseInt(s.getprice()); } arrdh.get(position).setsmoney(String.valueOf(p)); db.updateDonHang(arrdh.get(position)); adapter.notifyDataSetChanged(); } } } - Class Activity_SuaDonHang public class Activity_SuaDonHang extends Activity { EditText txtma,txtten,txtdate,txtmoney; Button btnxoa,btnluu; DonHang donhang=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
  • 72. Trương Duy Linh - 51101863 72 //goi layout activity_them_don_hang setContentView(R.layout.activity_them_don_hang); //get id của các View Button txtma=(EditText)findViewById(R.id.txtmaDH); txtten=(EditText)findViewById(R.id.txttenDH); txtdate=(EditText)findViewById(R.id.txtngay); txtmoney=(EditText)findViewById(R.id.txtmoney); btnxoa=(Button)findViewById(R.id.btnxoatt); btnluu=(Button)findViewById(R.id.btnsavettdh); setdefault(); btnxoa.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub txtten.setText(""); txtdate.setText(""); txtmoney.setText(""); txtten.requestFocus(); } }); //lưu thông tin từ layout vao donhang, //set result sưa đơn hàng thành công btnluu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String ten=txtten.getText()+""; String ngay=txtdate.getText()+""; String money=txtmoney.getText()+""; donhang.settenDH(ten); donhang.setdate(ngay); donhang.setsmoney(money);
  • 73. Trương Duy Linh - 51101863 73 Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("DONHANG",donhang); i.putExtra("DATA", b); setResult(MainActivity.SUA_DON_HANG_THANHCONG,i); finish(); } }); } //get thông tin đơn hàng từ gói DATA public void setdefault(){ Intent i=getIntent(); Bundle b=i.getBundleExtra("DATA"); donhang=(DonHang)b.getSerializable("DONHANG"); txtma.setText(donhang.getmaDH()); txtten.setText(donhang.gettenDH()); txtdate.setText(donhang.getdate()); txtmoney.setText(donhang.getsmoney()); } } - Class Activity_ThemDonHang public class Activity_ThemDonHang extends Activity { EditText txtma,txtten,txtngay,txtmoney; Button btnxoa,btnluu; DatabaseHandler db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_them_don_hang); db=new DatabaseHandler(this); txtma=(EditText)findViewById(R.id.txtmaDH); txtten=(EditText)findViewById(R.id.txttenDH); txtngay=(EditText)findViewById(R.id.txtngay); txtmoney=(EditText)findViewById(R.id.txtmoney); btnxoa=(Button)findViewById(R.id.btnxoatt); btnluu=(Button)findViewById(R.id.btnsavettdh); //clear các dữ liệu hiển thị trên layout
  • 74. Trương Duy Linh - 51101863 74 btnxoa.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub txtma.setText(""); txtten.setText(""); txtngay.setText(""); txtmoney.setText(""); txtma.requestFocus(); } }); //Xử lí lưu các thông tin vào dh đóng gói và truyền lại cho //Activity DanhSachDonHang btnluu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String ma=txtma.getText()+""; String ten=txtten.getText()+""; String ngay=txtngay.getText()+""; String tien=txtmoney.getText()+""; if(db.checkTrung(ma,"id_dh","donhang")==0) { DonHang dh=new DonHang(ma,ten,ngay,tien); Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("DONHANG", dh); i.putExtra("DATA", b); setResult(MainActivity.THEM_DON_HANG_THANHCONG,i); finish(); } } }); } } - Các Class trong Pakage có cấu trúc tương tự như trong Package donhang. - Ngoài ra còn cấu trúc Các menu + context_menu_dh: chứa các item Xửa, Xóa, Xem Danh sách sản phẩm + context_menu_kh: chứa các item Xửa, Xóa, chuyển khách hàng, xem danh sách cơ hội + context_menu_level:chứa các item level VIP, THUONG, TIMNANG
  • 75. Trương Duy Linh - 51101863 75 +context_menu_sp: chứa các item Xửa, Xóa sản phẩm. - Cấu trúc AndroidManifest <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Activity_ChuyenKhachHang" android:label="@string/app_name" android:theme="@android:style/Theme.Dialog"> </activity> <activity android:name=".Activity_SuaKhachHang" android:label="@string/app_name" > </activity> <activity android:name=".Activity_ThemKhachHang" android:label="@string/app_name" > </activity> <activity android:name=".DanhSachKhachHang" android:label="@string/app_name" > </activity>
  • 76. Trương Duy Linh - 51101863 76 <activity android:name=".DanhSachCoHoi" android:label="@string/app_name" > </activity> <activity android:name="donhang.DanhSachDonHang" android:label="@string/app_name" > </activity> <activity android:name="donhang.Activity_SuaDonHang" android:label="@string/app_name" > </activity> <activity android:name="donhang.Activity_ThemDonHang" android:label="@string/app_name" > </activity> <activity android:name="sanphamco.Activity_ThemSanPham" android:label="@string/app_name" > </activity> <activity android:name="sanphamco.DanhSachSanPham" android:label="@string/app_name" > </activity> <activity android:name="sanphamco.Activity_SuaSanPham" android:label="@string/app_name" > </activity> </application>
  • 77. Trương Duy Linh - 51101863 77 7. Các Class được hỗ trợ sẵn và phương thức giao tiếp giữa các Activity, CSDL SQLite - Serializable: giải quyết vấn đề giúp quản lí ràn buộc khi đọc và ghi xuống tập tin.Việc đọc và ghi các đối tượng không phải lúc nào cũng đơn giản, có những đói tượng mà bản thân nó bao gồm nhiều đối tượng khác thì sao? (và những đối tượng lại tham khảo đến hàng tá đối tượng khác nữa). Do đó java hiện thực giao diện Serializable. Java chịu trách nhiệm dò tìm bất cứ đối tượng nào có liên quan đến đối tượng đó khi đọc và ghi dữ liệu. - Intent: Ứng dụng Android có thể bao gồm nhiều Activities hoạt động độc lập. Tuy nhiên để gắn kết các thành phần này thành 1 hệ thống có trao đổi dữ liệu và tương tác lẫn nhau, Android đưa ra khái niệm quan trọng, mấu chốt trong lập trình Android đó chính là Intent. Android sử dụng Intents như là những thông điệp bất đồng bộ để cho phép các thành phần ứng dụng “nói chuyện” được với nhau: yêu cầu chức năng từ thành phần khác, cho phép tương tác với các thành phần riêng và các ứng dụng khác.Có 2 thuộc tính quan trọng của Intent khi lập trình trên Android cần chú ý đó là Action và Data:  Action: qui định hành động chung sẽ được thực hiện.  Data: là dữ liệu sẽ được xử lý. + Trong Project thực hiện mở 1 Activity khác đồng thời truyền dữ liệu qua và xử lí kết quả trả về. Chúng ta dựa vào requestCode, resultCode để xử lí. + Hàm gọi: