SlideShare a Scribd company logo
1 of 76
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 Duy Linh - 51101863
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
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:
-Báocáo: http://www.slideshare.net/dlinhtruong/bo-co-ti-xy-dng-phn-mm-qun-l-khch-hng-
trn-android
- 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=Hd6l2VEuCyE&list=UUGL3sTMvA112IzwY0sa5Srg
- Clip Báo cáo thực hiện quá trình làm đề tài
https://www.youtube.com/watch?v=AbwZ_4d8sZk
- Báo cáo tuần 1
Báo Cáo: http://www.slideshare.net/dlinhtruong/bo-co-tun-1-ci-t-android
Video: https://www.youtube.com/watch?v=bA0BOu1h-zg
- Báo Cáo tuần 2
Báo cáo: http://www.slideshare.net/dlinhtruong/bo-co-tun-2-38110190
Video: https://www.youtube.com/watch?v=q7Fu8gcq2ZA
-Báo cáo tuần 3
Báo cáo:http://www.slideshare.net/dlinhtruong/bo-co-tun-3xy-dng-layout
Video:https://www.youtube.com/watch?v=yABsBARH24w
- Báo cáo tuần 4
Trương Duy Linh - 51101863
5
Báo cáo:
http://www.slideshare.net/dlinhtruong/bo-co-tun-4-xy-dng-cc-class-lin-quan-khch-hng-c-hi-
database
Video: https://www.youtube.com/watch?v=vb3BeXrF45w
- Báo cáo tuần 5
Báo cáo:
http://www.slideshare.net/dlinhtruong/bo-co-tun-5-xy-dng-cc-class-lin-quan-n-hng-c-hi-database
Video: https://www.youtube.com/watch?v=wMFsIi4G7kk
Nhận xét của giáo viên hướng dẫn
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
........................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
...........................................................................................................................
.......................................................................................................................Nhận xét của giáo viên
hướng dẫn
..............................................................................................................................................................
..............................................................................................................................................................
Trương Duy Linh - 51101863
6
..............................................................................................................................................................
......................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
..............................................................................................................................................................
...........................................................................................................................
Trương Duy Linh - 51101863
7
MỤC LỤC
LỜI CẢM ƠN.....................................................................................................................................2
TRUNG TÂM ATHENA....................................................................................................................2
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.
+ 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
Trương Duy Linh - 51101863
9
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.
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ử
Trương Duy Linh - 51101863
10
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.
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
Trương Duy Linh - 51101863
11
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 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
12
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
13
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
14
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
15
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
16
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
 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
Trương Duy Linh - 51101863
17
độ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
+ Bảng of_cus
Trương Duy Linh - 51101863
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_coh
oi
Of_cu
s
Of_bi
ll
Coins
18
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 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
Trương Duy Linh - 51101863
19
- 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.
- 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 để
Trương Duy Linh - 51101863
20
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.
- 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
21
- 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
Trương Duy Linh - 51101863
22
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
23
- 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
24
- 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
25
- 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
26
6. Hiện thực các Class
- Cấu trúc thư mục
Trương Duy Linh - 51101863
27
 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
28
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);
db.addKhachHang(custom);
arrlvkh.add(l2);
custo.add(custom);
//-----------------
Trương Duy Linh - 51101863
29
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);
//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
Trương Duy Linh - 51101863
30
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);
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()))){
Trương Duy Linh - 51101863
31
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;
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));
Trương Duy Linh - 51101863
32
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();
}
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
Trương Duy Linh - 51101863
33
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;
}
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;
}
}
Trương Duy Linh - 51101863
34
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;
}
}
- 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(){
Trương Duy Linh - 51101863
35
}
//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;}
//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){
Trương Duy Linh - 51101863
36
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
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
Trương Duy Linh - 51101863
37
//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);
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
Trương Duy Linh - 51101863
38
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;
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){
Trương Duy Linh - 51101863
39
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);
}
//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);
}
}
Trương Duy Linh - 51101863
40
//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();
}
});
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_HANG);
}
//Intent gọi Activity Activity_ChuyenKhachHang
Trương Duy Linh - 51101863
41
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);
}
//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");
arrkh.get(position).getListDH().clear();
Trương Duy Linh - 51101863
42
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
ArrayAdapter<LevelKhachHang>(this,android.R.layout.simple_list_item_single_choice,arrlv);
lvlevel.setAdapter(adapter);
//Lấy vị trí sự kiện click trên ListView, nếu CheckView được tick
Trương Duy Linh - 51101863
43
// 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
public class Activity_SuaKhachHang extends Activity {
EditText txtma,txtten,txtsdt,txtemail;
Button btnxoa,btnluu;
RadioButton raNam;
KhachHang khachhang=null;
@Override
Trương Duy Linh - 51101863
44
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);
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
Trương Duy Linh - 51101863
45
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
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);
Trương Duy Linh - 51101863
46
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);
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("KHACHHANG", cus);
i.putExtra("DATA", b);
setResult(MainActivity.THEM_KHACH_HANG_THANHCONG,i);
finish();
}
Trương Duy Linh - 51101863
47
}
});
}
}
- 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;
}
}
- 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ố
Trương Duy Linh - 51101863
48
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
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);
Trương Duy Linh - 51101863
49
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("");
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);
Trương Duy Linh - 51101863
50
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.
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";
Trương Duy Linh - 51101863
51
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";
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 )";
Trương Duy Linh - 51101863
52
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, "
+ 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);
}
Trương Duy Linh - 51101863
53
//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();
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),cursor.getStrin
g(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)=="Nam"?true:false);
return khachhang;
}
Trương Duy Linh - 51101863
54
//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));
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();
}
Trương Duy Linh - 51101863
55
}
}
//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())});
}
// 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){
Trương Duy Linh - 51101863
56
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));
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));
Trương Duy Linh - 51101863
57
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());
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();
Trương Duy Linh - 51101863
58
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());
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();
Trương Duy Linh - 51101863
59
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 + " = ?",
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
Trương Duy Linh - 51101863
60
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){
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()) });
Trương Duy Linh - 51101863
61
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));
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();
}
Trương Duy Linh - 51101863
62
}
}
}
- 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;
//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++){
Trương Duy Linh - 51101863
63
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);
}
}
//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;
Trương Duy Linh - 51101863
64
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>();
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,arrdh);
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();
}
Trương Duy Linh - 51101863
65
});
//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) {
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;
Trương Duy Linh - 51101863
66
}
return super.onContextItemSelected(item);
}
//Intent gọi Activity DanhSachSanPham
public void doDanhSachSanPham(){
//for(SanPham 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();
}
});
Trương Duy Linh - 51101863
67
builder.setPositiveButton("Có",new DialogInterface.OnClickListener() {
@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){
Bundle b=data.getBundleExtra("DATA");
DonHang d=(DonHang)b.getSerializable("DONHANG");
arrdh.set(position, d);
db.updateDonHang(d);
Trương Duy Linh - 51101863
68
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);
//goi layout activity_them_don_hang
setContentView(R.layout.activity_them_don_hang);
//get id của các View Button
Trương Duy Linh - 51101863
69
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);
Intent i=getIntent();
Bundle b=new Bundle();
b.putSerializable("DONHANG",donhang);
i.putExtra("DATA", b);
setResult(MainActivity.SUA_DON_HANG_THANHCONG,i);
Trương Duy Linh - 51101863
70
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
btnxoa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Trương Duy Linh - 51101863
71
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
+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"
Trương Duy Linh - 51101863
72
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>
<activity
android:name=".DanhSachCoHoi"
android:label="@string/app_name" >
</activity>
Trương Duy Linh - 51101863
73
<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>
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.
Trương Duy Linh - 51101863
74
- 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:
startActivityForResult(Intent, requestcodeID)
+ Hàm xử lí kết quả trả về
onActivityForResult(requestcodeId,resultCode, Intent)
- Bundle: dùng để đóng gói dữ liệu truyền đi, đối với Android khi truyền dữ liệu chúng
ta cũng có thể truyền từng thông số riêng lẻ nhưng chúng ta không nên, chúng ta phải bỏ tất
cả các dữ liệu riêng lẻ đó vào 1 Bundle rồi gửi Bundle này qua Activity nào đó. Bên kia chỉ
cần lấy Bundle này ra, mọi dữ liệu đều nằm trong Bundle và ta dễ dàng xử lý.
- Activity: dùng để hiển thị một màn hình giao diện, dùng intent đễ gọi giao diện này
- SQLiteOpenHelper: Một lớp helper để quản lý cơ sở dữ liệu tạo ra và quản lý phiên
Trương Duy Linh - 51101863
Báo cáo cuối kì
Báo cáo cuối kì

More Related Content

What's hot

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
LeHongQuang2912
 
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ỳ
phạm ngọc phú
 
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ỳ
Khỉ Lù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 athena
Le Chuong
 
Báo cáo cuối kỳ - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...
Báo cáo cuối kỳ  - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...Báo cáo cuối kỳ  - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...
Báo cáo cuối kỳ - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...
Đàm Văn Sáng
 
Báo cáo thực tập tốt nghiệp
Báo cáo thực tập tốt nghiệpBáo cáo thực tập tốt nghiệp
Báo cáo thực tập tốt nghiệp
Chung Thuận
 
Trieu van phubaocao
Trieu van phubaocaoTrieu van phubaocao
Trieu van phubaocao
hoainhan1501
 

What's hot (20)

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 ATHENA
Báo cáo thực tập ATHENA Báo cáo thực tập ATHENA
Báo cáo thực tập ATHENA
 
Đề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSS
Đề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSSĐề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSS
Đề tài: Xây dựng ứng dụng Android đọc báo mạng qua dịch vụ RSS
 
Báo cáo thực tập cuối kỳ - Phạm Tiến Quân
Báo cáo thực tập cuối kỳ   - Phạm Tiến QuânBáo cáo thực tập cuối kỳ   - Phạm Tiến Quân
Báo cáo thực tập cuối kỳ - Phạm Tiến Quân
 
Đề tài: Xây dựng Website hỗ trợ theo dõi thông tin sinh viên, HOT
Đề tài: Xây dựng Website hỗ trợ theo dõi thông tin sinh viên, HOTĐề tài: Xây dựng Website hỗ trợ theo dõi thông tin sinh viên, HOT
Đề tài: Xây dựng Website hỗ trợ theo dõi thông tin sinh viên, HOT
 
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 - Nhơn Mỹ - Nguyễn Hoàng Dương - 2016
Báo cáo thực tập - Nhơn Mỹ - Nguyễn Hoàng Dương - 2016Báo cáo thực tập - Nhơn Mỹ - Nguyễn Hoàng Dương - 2016
Báo cáo thực tập - Nhơn Mỹ - Nguyễn Hoàng Dương - 2016
 
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 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
 
Đề 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
 
[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...
[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...
[Báo cáo Thực tập Athena] Nghiên cứu cơ chế routing của Cisco, mô phỏng trên ...
 
Báo cáo thực tập - Nhơn Mỹ - Trần Nguyên An - 2016
Báo cáo thực tập - Nhơn Mỹ - Trần Nguyên An - 2016Báo cáo thực tập - Nhơn Mỹ - Trần Nguyên An - 2016
Báo cáo thực tập - Nhơn Mỹ - Trần Nguyên An - 2016
 
[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ỳ - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...
Báo cáo cuối kỳ  - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...Báo cáo cuối kỳ  - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...
Báo cáo cuối kỳ - đề tài "nghiên cứu cơ chế routing của cisco mô phỏng trên ...
 
Baocaoathena
BaocaoathenaBaocaoathena
Baocaoathena
 
Báo cáo thực tập tốt nghiệp
Báo cáo thực tập tốt nghiệpBáo cáo thực tập tốt nghiệp
Báo cáo thực tập tốt nghiệp
 
Trieu van phubaocao
Trieu van phubaocaoTrieu van phubaocao
Trieu van phubaocao
 
luan van thac si xay dung chuong trinh ho tro bao cao cong viec tren web
luan van thac si xay dung chuong trinh ho tro bao cao cong viec tren webluan van thac si xay dung chuong trinh ho tro bao cao cong viec tren web
luan van thac si xay dung chuong trinh ho tro bao cao cong viec tren web
 
đồ áN
đồ áNđồ áN
đồ áN
 
Bao cao thuc tap athena
Bao cao thuc tap athenaBao cao thuc tap athena
Bao cao thuc tap athena
 

Similar to Báo cáo cuối kì

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
Tuan Huy
 
Báo cáo cuối kì (nguyễn phượng nhung)
Báo cáo cuối kì (nguyễn phượng nhung)Báo cáo cuối kì (nguyễn phượng nhung)
Báo cáo cuối kì (nguyễn phượng nhung)
Nhung Nguyễn
 
Bao cao gk
Bao cao gkBao cao gk
Bao cao gk
ice_eyes
 
Bao cao thuc tap
Bao cao thuc tapBao cao thuc tap
Bao cao thuc tap
Leo Aurico
 

Similar to Báo cáo cuối kì (20)

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
 
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
 
Bao cao athena
Bao cao athenaBao cao athena
Bao cao 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
 
Phan cường
Phan cườngPhan cường
Phan cường
 
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ì
 
Bao cao cuoi ky
Bao cao cuoi kyBao cao cuoi ky
Bao cao cuoi ky
 
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
 
Báo cáo thực tập Athena -CNTT
Báo cáo thực tập Athena -CNTTBáo cáo thực tập Athena -CNTT
Báo cáo thực tập Athena -CNTT
 
Báo cáo cuối kì (nguyễn phượng nhung)
Báo cáo cuối kì (nguyễn phượng nhung)Báo cáo cuối kì (nguyễn phượng nhung)
Báo cáo cuối kì (nguyễn phượng nhung)
 
Baocao cuoi ki ATHENA (autosaved)
Baocao cuoi ki ATHENA (autosaved)Baocao cuoi ki ATHENA (autosaved)
Baocao cuoi ki ATHENA (autosaved)
 
Baocaocuoiki
BaocaocuoikiBaocaocuoiki
Baocaocuoiki
 
Báo cáo cuối kỳ - thực tập Athena
Báo cáo cuối kỳ - thực tập AthenaBáo cáo cuối kỳ - thực tập Athena
Báo cáo cuối kỳ - thực tập Athena
 
Báo cáo thực tập cuối khóa - Trung Tâm Athena
Báo cáo thực tập cuối khóa - Trung Tâm AthenaBáo cáo thực tập cuối khóa - Trung Tâm Athena
Báo cáo thực tập cuối khóa - Trung Tâm Athena
 
Báo cáo Thực tập công nghiệp 2 Trung Tâm Athena
Báo cáo Thực tập công nghiệp 2 Trung Tâm AthenaBáo cáo Thực tập công nghiệp 2 Trung Tâm Athena
Báo cáo Thực tập công nghiệp 2 Trung Tâm Athena
 
Bao cao gk
Bao cao gkBao cao gk
Bao cao gk
 
Bao cao giua ky
Bao cao giua kyBao cao giua ky
Bao cao giua ky
 
Bao cao gk
Bao cao gkBao cao gk
Bao cao gk
 
Bao cao thuc tap
Bao cao thuc tapBao cao thuc tap
Bao cao thuc tap
 
luan van thac si xay dung website ho tro cham cong
luan van thac si xay dung website ho tro cham congluan van thac si xay dung website ho tro cham cong
luan van thac si xay dung website ho tro cham cong
 

Báo cáo cuối kì

  • 1. 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 Duy Linh - 51101863 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. 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. 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. 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: -Báocáo: http://www.slideshare.net/dlinhtruong/bo-co-ti-xy-dng-phn-mm-qun-l-khch-hng- trn-android - 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=Hd6l2VEuCyE&list=UUGL3sTMvA112IzwY0sa5Srg - Clip Báo cáo thực hiện quá trình làm đề tài https://www.youtube.com/watch?v=AbwZ_4d8sZk - Báo cáo tuần 1 Báo Cáo: http://www.slideshare.net/dlinhtruong/bo-co-tun-1-ci-t-android Video: https://www.youtube.com/watch?v=bA0BOu1h-zg - Báo Cáo tuần 2 Báo cáo: http://www.slideshare.net/dlinhtruong/bo-co-tun-2-38110190 Video: https://www.youtube.com/watch?v=q7Fu8gcq2ZA -Báo cáo tuần 3 Báo cáo:http://www.slideshare.net/dlinhtruong/bo-co-tun-3xy-dng-layout Video:https://www.youtube.com/watch?v=yABsBARH24w - Báo cáo tuần 4 Trương Duy Linh - 51101863
  • 5. 5 Báo cáo: http://www.slideshare.net/dlinhtruong/bo-co-tun-4-xy-dng-cc-class-lin-quan-khch-hng-c-hi- database Video: https://www.youtube.com/watch?v=vb3BeXrF45w - Báo cáo tuần 5 Báo cáo: http://www.slideshare.net/dlinhtruong/bo-co-tun-5-xy-dng-cc-class-lin-quan-n-hng-c-hi-database Video: https://www.youtube.com/watch?v=wMFsIi4G7kk Nhận xét của giáo viên hướng dẫn .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. ........................................ .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. ........................................................................................................................... .......................................................................................................................Nhận xét của giáo viên hướng dẫn .............................................................................................................................................................. .............................................................................................................................................................. Trương Duy Linh - 51101863
  • 6. 6 .............................................................................................................................................................. ...................................................................................................................... .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. .............................................................................................................................................................. ........................................................................................................................... Trương Duy Linh - 51101863
  • 7. 7 MỤC LỤC LỜI CẢM ƠN.....................................................................................................................................2 TRUNG TÂM ATHENA....................................................................................................................2 Trương Duy Linh - 51101863
  • 8. 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. + 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 Trương Duy Linh - 51101863
  • 9. 9 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. 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ử Trương Duy Linh - 51101863
  • 10. 10 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. 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 Trương Duy Linh - 51101863
  • 11. 11 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 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
  • 12. 12 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
  • 13. 13 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
  • 14. 14 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
  • 15. 15 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
  • 16. 16 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  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 Trương Duy Linh - 51101863
  • 17. 17 độ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 + Bảng of_cus Trương Duy Linh - 51101863 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_coh oi Of_cu s Of_bi ll Coins
  • 18. 18 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 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 Trương Duy Linh - 51101863
  • 19. 19 - 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. - 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 để Trương Duy Linh - 51101863
  • 20. 20 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. - 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
  • 21. 21 - 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 Trương Duy Linh - 51101863
  • 22. 22 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
  • 23. 23 - 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
  • 24. 24 - 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
  • 25. 25 - 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
  • 26. 26 6. Hiện thực các Class - Cấu trúc thư mục Trương Duy Linh - 51101863
  • 27. 27  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
  • 28. 28 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); db.addKhachHang(custom); arrlvkh.add(l2); custo.add(custom); //----------------- Trương Duy Linh - 51101863
  • 29. 29 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); //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 Trương Duy Linh - 51101863
  • 30. 30 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); 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()))){ Trương Duy Linh - 51101863
  • 31. 31 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; 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)); Trương Duy Linh - 51101863
  • 32. 32 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(); } 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 Trương Duy Linh - 51101863
  • 33. 33 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; } 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; } } Trương Duy Linh - 51101863
  • 34. 34 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; } } - 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(){ Trương Duy Linh - 51101863
  • 35. 35 } //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;} //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){ Trương Duy Linh - 51101863
  • 36. 36 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 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 Trương Duy Linh - 51101863
  • 37. 37 //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); 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 Trương Duy Linh - 51101863
  • 38. 38 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; 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){ Trương Duy Linh - 51101863
  • 39. 39 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); } //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); } } Trương Duy Linh - 51101863
  • 40. 40 //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(); } }); 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_HANG); } //Intent gọi Activity Activity_ChuyenKhachHang Trương Duy Linh - 51101863
  • 41. 41 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); } //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"); arrkh.get(position).getListDH().clear(); Trương Duy Linh - 51101863
  • 42. 42 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 ArrayAdapter<LevelKhachHang>(this,android.R.layout.simple_list_item_single_choice,arrlv); lvlevel.setAdapter(adapter); //Lấy vị trí sự kiện click trên ListView, nếu CheckView được tick Trương Duy Linh - 51101863
  • 43. 43 // 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 public class Activity_SuaKhachHang extends Activity { EditText txtma,txtten,txtsdt,txtemail; Button btnxoa,btnluu; RadioButton raNam; KhachHang khachhang=null; @Override Trương Duy Linh - 51101863
  • 44. 44 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); 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 Trương Duy Linh - 51101863
  • 45. 45 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 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); Trương Duy Linh - 51101863
  • 46. 46 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); Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("KHACHHANG", cus); i.putExtra("DATA", b); setResult(MainActivity.THEM_KHACH_HANG_THANHCONG,i); finish(); } Trương Duy Linh - 51101863
  • 47. 47 } }); } } - 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; } } - 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ố Trương Duy Linh - 51101863
  • 48. 48 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 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); Trương Duy Linh - 51101863
  • 49. 49 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(""); 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); Trương Duy Linh - 51101863
  • 50. 50 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. 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"; Trương Duy Linh - 51101863
  • 51. 51 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"; 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 )"; Trương Duy Linh - 51101863
  • 52. 52 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, " + 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); } Trương Duy Linh - 51101863
  • 53. 53 //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(); 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),cursor.getStrin g(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)=="Nam"?true:false); return khachhang; } Trương Duy Linh - 51101863
  • 54. 54 //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)); 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(); } Trương Duy Linh - 51101863
  • 55. 55 } } //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())}); } // 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){ Trương Duy Linh - 51101863
  • 56. 56 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)); 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)); Trương Duy Linh - 51101863
  • 57. 57 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()); 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(); Trương Duy Linh - 51101863
  • 58. 58 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()); 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(); Trương Duy Linh - 51101863
  • 59. 59 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 + " = ?", 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 Trương Duy Linh - 51101863
  • 60. 60 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){ 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()) }); Trương Duy Linh - 51101863
  • 61. 61 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)); 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(); } Trương Duy Linh - 51101863
  • 62. 62 } } } - 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; //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++){ Trương Duy Linh - 51101863
  • 63. 63 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); } } //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; Trương Duy Linh - 51101863
  • 64. 64 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>(); 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,arrdh); 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(); } Trương Duy Linh - 51101863
  • 65. 65 }); //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) { 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; Trương Duy Linh - 51101863
  • 66. 66 } return super.onContextItemSelected(item); } //Intent gọi Activity DanhSachSanPham public void doDanhSachSanPham(){ //for(SanPham 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(); } }); Trương Duy Linh - 51101863
  • 67. 67 builder.setPositiveButton("Có",new DialogInterface.OnClickListener() { @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){ Bundle b=data.getBundleExtra("DATA"); DonHang d=(DonHang)b.getSerializable("DONHANG"); arrdh.set(position, d); db.updateDonHang(d); Trương Duy Linh - 51101863
  • 68. 68 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); //goi layout activity_them_don_hang setContentView(R.layout.activity_them_don_hang); //get id của các View Button Trương Duy Linh - 51101863
  • 69. 69 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); Intent i=getIntent(); Bundle b=new Bundle(); b.putSerializable("DONHANG",donhang); i.putExtra("DATA", b); setResult(MainActivity.SUA_DON_HANG_THANHCONG,i); Trương Duy Linh - 51101863
  • 70. 70 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 btnxoa.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Trương Duy Linh - 51101863
  • 71. 71 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 +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" Trương Duy Linh - 51101863
  • 72. 72 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> <activity android:name=".DanhSachCoHoi" android:label="@string/app_name" > </activity> Trương Duy Linh - 51101863
  • 73. 73 <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> 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. Trương Duy Linh - 51101863
  • 74. 74 - 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: startActivityForResult(Intent, requestcodeID) + Hàm xử lí kết quả trả về onActivityForResult(requestcodeId,resultCode, Intent) - Bundle: dùng để đóng gói dữ liệu truyền đi, đối với Android khi truyền dữ liệu chúng ta cũng có thể truyền từng thông số riêng lẻ nhưng chúng ta không nên, chúng ta phải bỏ tất cả các dữ liệu riêng lẻ đó vào 1 Bundle rồi gửi Bundle này qua Activity nào đó. Bên kia chỉ cần lấy Bundle này ra, mọi dữ liệu đều nằm trong Bundle và ta dễ dàng xử lý. - Activity: dùng để hiển thị một màn hình giao diện, dùng intent đễ gọi giao diện này - SQLiteOpenHelper: Một lớp helper để quản lý cơ sở dữ liệu tạo ra và quản lý phiên Trương Duy Linh - 51101863