Báo cáo cuối kì

122
1 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 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 Trương Duy Linh - 51101863

description

Báo cáo cuối kì

Transcript of Báo cáo cuối kì

Page 1: Báo cáo cuối kì

1

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

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

Page 2: Báo cáo cuối kì

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 2014Kí tên

Trương Duy Linh

Trương Duy Linh - 51101863

Page 3: Báo cáo cuối kì

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ênTrương Duy Linh

Trương Duy Linh - 51101863

Page 4: Báo cáo cuối kì

4

Trích yếuSự 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ậphttps://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ệmhttps://www.youtube.com/watch?

v=Hd6l2VEuCyE&list=UUGL3sTMvA112IzwY0sa5Srg - Clip Báo cáo thực hiện quá trình làm đề tàihttps://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

Trương Duy Linh - 51101863

Page 5: Báo cáo cuối kì

5

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

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........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Trương Duy Linh - 51101863

Page 6: Báo cáo cuối kì

6

......................................................................................................................

......................................................................................................................

......................................................................................................................

....

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

......................................................................................................................

...............................................................................................................................................................................................................

.Nhận xét của giáo viên hướng dẫn...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Trương Duy Linh - 51101863

Page 7: Báo cáo cuối kì

7

MỤC LỤC

I. Phân tích nhu cầu thị trường..........................................................................................................7

1. Tại sao phải Quản lí khách hàng ?........................................................................................7

2. Quản lí khách hàng cần những gì ? Dùng phương pháp CRM quản lí khách hàng...............8

3. Ưu điểm việc dùng phần mềm so với không dùng phần mềm............................................10

II. Xây dựng phần mềm...................................................................................................................11

1.Cài đặt Android và môi trường phát triển android như esclipse, SDK.................................11

3. Xây dựng mô hình ERD......................................................................................................16

4. Phân tích các chức năng......................................................................................................17

5. Xây dựng giao diện.. ..........................................................................................................18

6. Hiện thực các Class......... ...................................................................................................25

7.Các Class được hỗ trợ sẵn và phương thức giao tiếp giữa các Activity, CSDL SQLite.......75

IV. Tổng kết...................................................................................................................................77

V. Tài liệu tham khảo......................................................................................................................77

Trương Duy Linh - 51101863

Page 8: Báo cáo cuối kì

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

Trương Duy Linh - 51101863

Page 9: Báo cáo cuối kì

9

thị truyền miệng.

Từ các cửa hàng may mặc, phân phối dụng cụ thể thao, đồ nội thất, mỹ phẩm cho đến các nhà bán lẻ điện tử, khi các sản phẩm dễ dàng bị thay thế và không nổi bật trên thị trường, việc tăng cường bán hàng thông qua phương pháp truyền miệng là một vũ khí bí mật. Quản lý khách hàng mang lại cho các nhà bán lẻ khả năng tiếp cận khách hàng và giới thiệu những ưu đãi hoặc sản phẩm thích hợp với nhu cầu của người tiêu dùng ngay khi họ đặt chân vào cửa hàng bằng cách truy cập dữ liệu của khách hàng như kích thước, màu yêu thích, và các nhãn hàng ưu chuộng. Hơn nữa, với chương trình quản lý khách hàng, khách hàng sẽ tin rằng nhà bán lẻ am hiểu và dành nhiều ưu đãi cho họ hơn những đối thủ bán lẻ khác. Một khi họ được phục vụ tốt hơn và nhận được nhiều lợi ích hơn, họ sẽ sẵn lòng giới thiệu nhà bán lẻ với bạn bè và người thân.

+ Tăng cường bán chéo sản phẩm và tăng doanh số

Một trong những cách tốt nhất và dễ dàng nhất để cải thiện doanh thu và lợi nhuận là bán nhiều mặt hàng hơn cho các khách hàng hiện tại. Tuy nhiên, rất nhiều khách hàng chỉ biết đến sản phẩm họ đã mua. Việc đơn giản chia sẻ với khách hàng về các sản phẩm mà doanh nghiệp cung cấp sẽ tăng cường nguồn thu cho họ. Chương trình quản lý khách hàng cho phép các nhà bán lẻ lấy được nhiều thông tin về khách hàng từ đó họ có thể gợi ý các sản phẩm liên quan trong một giao dịch trọn gói và bán được nhiều sản phẩm hơn.

+ Nắm bắt xu hướng thị trường

Thị trường liên tục thay đổi. Những gì mà các nhà bán lẻ cần là phương pháp tận dụng những sự thay đổi đó trong khi vẫn có thể phát triển nhằm vượt qua được những thử thách đó. Nếu các nhà bán lẻ không thể thực hiện điều này, họ sẽ chắc chắn để mất những khách hàng hiện tại vào tay các đối thủ. Với dữ liệu từ chương trình quản lý khách hàng, các nhà bán lẻ có thể đánh giá xu hướng và cđưa ra những quyết định tốt hơn dựa trên những biến đổi trong thị trường.

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àng2.1 Quản lí khách hàng cần những gì ?

Trương Duy Linh - 51101863

Page 10: Báo cáo cuối kì

10

Có những đối tác mà quá trình quản lý họ lại gắn liền với quá trình tác nghiệp của doanh nghiệp. Chẳng hạn như bộ phận kinh doanh làm việc với khách hàng hoặc nhà phân phối trong quá trình đặt hàng, bộ phận mua hàng làm việc với nhà cung cấp, giám đốc tài chính sẽ làm việc với ngân hàng, hay bộ phận nhân sự sẽ làm việc với các nhân viên. Trong trường hợp ban giám đốc, những nhà quản lý nếu không trực tiếp làm việc với đối tác cần tìm hiểu xem những đối tượng này có hài lòng khi làm việc với doanh nghiệp không? Việc tìm ra câu trả lời này ngày càng có ý nghĩa sống còn đối với doanh nghiệp.

Quá trình quản lý quan hệ đối tác đòi hỏi một kế hoạch tập trung và thực hành có hệ thống, có phương pháp và phải nhất quán trong toàn doanh nghiệp. Nhiều công ty nước ngoài sử dụng một công cụ, gọi là kế hoạch quản lý đối tác. Bản kế hoạch này liệt kê các đối tác chủ chốt của doanh nghiệp, xác định vai trò, ảnh hưởng của họ đối với doanh nghiệp, cũng như “sách lược” mà doanh nghiệp dành cho họ. Bản kế hoạch quản lý đối tác do tổng giám đốc phê duyệt, và việc thực hiện phải được ủy quyền tùy theo mức độ cho các trưởng bộ phận. Làm theo cách này, các cấp quản lý ở doanh nghiệp đều có ý thức chung về quản lý quan hệ đối tác và thực hành một cách hệ thống theo phương pháp đã được nghiên cứu và xét duyệt.

Một trong những nội dung quan trọng nhất của kế hoạch quản lý quan hệ đối tác chính là kế hoạch giao tiếp với các đối tác, tức là xác định những thông tin cần trao đổi, mức độ tiếp xúc, cách truyền đạt thông tin sao cho hiệu quả nhất. Việc lập kế hoạch này được xây dựng trên cơ sở hiểu rõ vai trò, nhu cầu và mong đợi của các đối tác khác nhau. Vì thế các doanh nghiệp nên lưu ý việc giao tiếp này là giao tiếp của tổ chức, thể hiện cấp độ doanh nghiệp chứ không phải là giao tiếp mang màu sắc của một cá nhân cụ thể nào.

Các doanh nghiệp Việt Nam trong quá trình phát triển thường phải thực hiện rất nhiều dự án mở rộng sản xuất kinh doanh như: triển khai ISO, kế toán quản trị, tin học hóa quản lý, tái cấu trúc doanh nghiệp, cổ phần hóa, niêm yết, xây dựng thương hiệu… Từng dự án đều có các đối tác với những lợi ích và mối quan tâm khác nhau, vì thế sự thành công của doanh nghiệp cũng phụ thuộc vào cách quản lý các kỳ vọng, lợi ích và sự hợp tác của các đối tác.

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.

Trương Duy Linh - 51101863

Page 11: Báo cáo cuối kì

11

- 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 CRMVì chi phí kiếm khách hàng mới nhiều hơn gấp 6 lần so với duy trì khách

hàng cũ, Trong khi đó, 20% khách hàng cũ đem lại 80% lợi nhuận cho công ty, Một khách hàng không thoả mãn sẽ chia sẻ sự khó chịu của họ cho từ 8-10 người khác.

Và kể cả nếu khách hàng không hài lòng nhưng nếu bạn quản lý, chăm sóc tốt và giải quyết tốt khiếu nại thì khách hàng vẫn tín nhiệm bạn! Một con số thống kê cho thấy 70% khách hàng có khiếu nại sẽ vẫn trung thành với công ty nếu khiếu nại của họ được giải quyết thoả đáng. Đặc điểm của CRM

CRM là một “phương pháp” vì đó là một cách thức tìm kiếm, tổ chức và xử lý các mối quan hệ khách hàng. Cũng có thể nói CRM là một chiến lược, bởi vì CRM nó bao gồm cả một kế hoạch rõ ràng và chi tiết. Quả thực, chiến lược CRM có thể được coi là chiến lược căn bản cho mọi chiến lược khác của tổ chức. Bất kỳ chiến lược nào của tổ chức không đáp ứng cho việc tạo ra, duy trì và mở rộng mối quan hệ với khách hàng mục tiêu của tổ chức đều được xem là không nhằm đáp ứng cho tổ chức đó.c

Thứ hai, CRM là một phương pháp “toàn diện” là bởi CRM không phải dành cho riêng hoạt động kinh doanh và marketing hay cũng không phải được chịu trách nhiệm chính bởi bộ phận chăm sóc khách hàng trong tổ chức hoặc phòng IT. Từng phòng ban tương ứng với từng chức năng riêng trong công ty đều có liên quan đến chiến lược CRM. Nói cách khác CRM là một chiến lược hay phương pháp được đưa ra và thực hiện có liên quan đến tất cả các phòng ban, bộ phận của công ty. Khi CRM không có liên quan đến một phòng ban nào đó, ví dụ như phòng IT, thì chất lượng quan hệ khách hàng sẽ bị giảm. Hay cũng như thế, khi 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

Trương Duy Linh - 51101863

Page 12: Báo cáo cuối kì

12

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.

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

Trương Duy Linh - 51101863

Page 13: Báo cáo cuối kì

13

Đầ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

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ư

Trương Duy Linh - 51101863

Page 14: Báo cáo cuối kì

14

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

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

Page 15: Báo cáo cuối kì

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ế.

Trương Duy Linh - 51101863

Page 16: Báo cáo cuối kì

16

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

2. Phân tích quy trình quản lí khách hàng theo phương pháp CRM

Trương Duy Linh - 51101863

Page 17: Báo cáo cuối kì

17

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 động sau:

Trương Duy Linh - 51101863

Page 18: Báo cáo cuối kì

18

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àngMa_Bill Name Date smoney

+ Bảng ProductMa_SP Name Price Info

+ Bảng of_cus

Ma_KH Ma_Bill

Trương Duy Linh - 51101863

Khách HàngCơ Hội

Sản PhẩmHóa Đơn

Level

Phone

Email

Sex Name

Id

Id

Info

Name

IdName

Price

Info

Date smoney

Name

Id

Of_cohoi

Of_cus

Of_bill

Coins

Page 19: Báo cáo cuối kì

19

+Bảng of_billMa_SP Ma_Bill

+Bảng Cơ hộiId 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

Page 20: Báo cáo cuối kì

20

- 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 nKhá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

Trương Duy Linh - 51101863

Page 21: Báo cáo cuối kì

21

button ADD CUSTOMER để thêm khách hàng, nhấp vào mỗi khách hàng để sửa, xóa, xem danh sách cơ hội sẽ có với khách hàng này hoặc xem danh sách đơn hàng của khách hàng đã giao dịch.

- 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

Page 22: Báo cáo cuối kì

22

- 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

Trương Duy Linh - 51101863

Page 23: Báo cáo cuối kì

23

nhập vào nếu muốn thêm các cơ hội và danh sách các cơ hội đã được thêm trước đó sẽ hiển thị ra, nếu cần xóa thì nhấn button Xóa, có thể xóa nhiều ghi chú cùng 1 lúc khi check vào ô check box.

Trương Duy Linh - 51101863

Page 24: Báo cáo cuối kì

24

- Khi người dùng nhấp chọn vào menu item danh sách đơn hàng thì giao diện danh sách đơn hàng sẽ hiện ra, người quản lí có thể thêm sửa xóa danh sách đơn hàng

Trương Duy Linh - 51101863

Page 25: Báo cáo cuối kì

25

- Khi người quản lí nhấp vào một đơn hàng bất kì, menu item sửa, xóa, xem danh sách sản phẩm sẽ hiện ra, khi chọn item Danh Sách Sản Phẩm thi danh sách sản phẩm sẽ hiện ra.

Trương Duy Linh - 51101863

Page 26: Báo cáo cuối kì

26

- Khi người quản lí chọn 1 button ADD PRODUCT thì form yêu cầu nhập thông tin cho sản phẩm mới sẽ hiện ra và khi nhấn button Lưu thì nó sẽ lưu vào csdl.

Trương Duy Linh - 51101863

Page 27: Báo cáo cuối kì

27

6. Hiện thực các Class- Cấu trúc thư mục

Trương Duy Linh - 51101863

Page 28: Báo cáo cuối kì

28

Trong cấu trúc trên có 3 pakage: com.example.demoqlkh, donhang, sanphamco. - Class MainActivity

public class MainActivity extends ActionBarActivity {

//Định nghĩa các requestCode, resultCode truyền đi

//trong Intent

public static final int MO_ACTIVITY_THEM_KHACH_HANG=1;

public static final int MO_ACTIVITY_SUA_KHACH_HANG=2;

public static final int THEM_KHACH_HANG_THANHCONG=3;

public static final int SUA_KHACH_HANG_THANHCONG=4;

public static final int XEM_DS_KHACH_HANG=5;

public static final int CAPNHAT_DS_KHACH_HANG_THANHCONG=6;

public static final int MO_ACTIVITY_CHUYEN_LEVEL=9;

public static final int CHUYEN_LEVEL_THANHCONG=10;

public static final int MO_ACTIVITY_THEM_DON_HANG=11;

public static final int THEM_DON_HANG_THANHCONG=12;

public static final int MO_ACTIVITY_SUA_DON_HANG=13;

public static final int SUA_DON_HANG_THANHCONG=14;

public static final int MO_ACTIVITY_DANHSACH_DON_HANG=15;

public static final int MO_ACTIVITY_DANHSACH_SAN_PHAM=20;

public static final int CAPNHAT_DS_SAN_PHAM_THANHCONG=6;

public static final int MO_ACTIVITY_SUA_SAN_PHAM=16;

public static final int SUA_SAN_PHAM_THANHCONG=17;

public static final int MO_ACTIVITY_THEM_SAN_PHAM=18;

public static final int THEM_SAN_PHAM_THANHCONG=19;

public static final int CAPNHAT_DS_DON_HANG_THANHCONG=16;

public static final int MO_DS_COHOI=20;

public static final int CAP_NHAT_DS_CO_HOI_THANHCONG=21;

//lvallkh hiển thị danh sách tất cả các khách hàng

ListView lvallkh;

EditText search;

ArrayList<KhachHang>custo;

ArrayAdapter<KhachHang> adaptercusto;

private static ArrayList<LevelKhachHang>arrlvkh=new

ArrayList<LevelKhachHang>();

Trương Duy Linh - 51101863

Page 29: Báo cáo cuối kì

29

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","[email protected]","VIP","0",true);

l1.Themkh(custom);

db.addKhachHang(custom);

arrlvkh.add(l1);

custo.add(custom);

//-----------------

custom=new

KhachHang("2","Tien","2","[email protected]","TIMNANG","0",true);

l2.Themkh(custom);

db.addKhachHang(custom);

arrlvkh.add(l2);

custo.add(custom);

//-----------------

Trương Duy Linh - 51101863

Page 30: Báo cáo cuối kì

30

custom=new

KhachHang("3","An","3","[email protected]","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() {

Trương Duy Linh - 51101863

Page 31: Báo cáo cuối kì

31

@Override

public void onTextChanged(CharSequence s, int start,

int before, int count) {

// TODO Auto-generated method stub

adaptercusto.notifyDataSetChanged();

MainActivity.this.adaptercusto.getFilter().filter(s);

}

@Override

public void beforeTextChanged(CharSequence s, int

start, int count,

int after) {

// TODO Auto-generated method stub

}

@Override

public void afterTextChanged(Editable s) {

// TODO Auto-generated method stub

}

});

//xử lí sự kiên click vào item của ListView

//lấy vi trí của khách hàng gọi hiển thị danh sách đơn hàng

lvallkh.setOnItemClickListener(new

AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View

view,

int position, long id) {

// TODO Auto-generated method stub

khach=custo.get(position);

posi=position;

Intent inte=new

Intent(MainActivity.this,DanhSachDonHang.class);

Bundle bundle=new Bundle();

bundle.putSerializable("KHACHHANG", khach);

inte.putExtra("DATA", bundle);

startActivityForResult(inte,MainActivity.MO_ACTIVITY_DANHSACH_DON

_HANG);

Trương Duy Linh - 51101863

Page 32: Báo cáo cuối kì

32

}

});

}

//truy xuất CSDL thêm đơn hàng tương ứng với mỗi khách hàng

// tính coins cho khách hàng dựa trên các đơn hàng

public void them_don_hang_va_tinh_gia(){

for(KhachHang kha:custo){

int gia=0;

for(DonHang

don:db.getdsdh_ofkh(Integer.parseInt(kha.getma()))){

kha.Themdh(don);

gia+=Integer.parseInt(don.getsmoney());

}

kha.setcoins(String.valueOf(gia));

db.updateKhachHang(kha);

}

}

//dăng kí contextmenu

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

// TODO Auto-generated method stub

super.onCreateContextMenu(menu, v, menuInfo);

getMenuInflater().inflate(R.menu.context_menu_level, menu);

}

//xử lí sự kiên click vào item menu gồm:

// xem danh sách khác hàng của level VIP, THUONG, TIMNANG

@Override

public boolean onContextItemSelected(MenuItem item){

switch(item.getItemId()){

case R.id.mnuvip:

pos=0;

doDanhSachKhachHang();

break;

case R.id.mnunormal:

pos=1;

doDanhSachKhachHang();

break;

case R.id.mnukhtimnang:

pos=2;

Trương Duy Linh - 51101863

Page 33: Báo cáo cuối kì

33

doDanhSachKhachHang();

break;

}

return super.onContextItemSelected(item);

}

//Intent goi Activity DanhSachKhachHang

public void doDanhSachKhachHang()

{

Intent i=new Intent(this, DanhSachKhachHang.class);

Bundle bundle=new Bundle();

bundle.putSerializable("LEVEL", arrlvkh.get(pos));

i.putExtra("DATA", bundle);

startActivityForResult(i,MainActivity.XEM_DS_KHACH_HANG);

}

//Nhận result trả về từ cập nhật danh sách khách hàng,

//cập nhật danh sách đơn hàng thành công

//có 2 cập nhật trên mảng arrlvkh và custo

@Override

public void onActivityResult(int requestCode,int

resultCode,Intent data){

super.onActivityResult(requestCode, resultCode, data);

if(resultCode==MainActivity.CAPNHAT_DS_KHACH_HANG_THANHCONG){

Bundle bundle=data.getBundleExtra("DATA");

LevelKhachHang

lvk=(LevelKhachHang)bundle.getSerializable("LEVEL");

arrlvkh.get(pos).getListKH().clear();

arrlvkh.get(pos).getListKH().addAll(lvk.getListKH());

custo.clear();

for(KhachHang k:db.getAllKhachHang()){

custo.add(k);

Log.d("KhachHang",k.getten());

}

them_don_hang_va_tinh_gia();

adaptercusto.notifyDataSetChanged();

}

else

if(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){

Trương Duy Linh - 51101863

Page 34: Báo cáo cuối kì

34

Bundle bundle=data.getBundleExtra("DATA");

KhachHang

k=(KhachHang)bundle.getSerializable("KHACHHANG");

custo.get(posi).getListDH().clear();

custo.get(posi).getListDH().addAll(k.getListDH());

int p=0;

for(DonHang d:custo.get(posi).getListDH()){

p+=Integer.parseInt(d.getsmoney());

}

custo.get(posi).setcoins(String.valueOf(p));

db.updateKhachHang(custo.get(posi));

adaptercusto.notifyDataSetChanged();

}

}

//hàm trả về danh sách khách hàng của mỗi level

public static ArrayList<LevelKhachHang> getListLevel(){

return arrlvkh;

}

}

- Class LevelKhachHangpublic class LevelKhachHang implements Serializable {

private static final long serialVersionUID = 1L;

//mãng danh sách khách hàng

private ArrayList<KhachHang> arrkh =new

ArrayList<KhachHang>();

//tên level

private String ten;

//hàm tạo với tham số tên

public LevelKhachHang(String ten) {

this.ten=ten;

}

//phương thức get,set tên của level

public String getTenlv(){

return this.ten;

}

Trương Duy Linh - 51101863

Page 35: Báo cáo cuối kì

35

public void setTenlv(String ten){

this.ten=ten;

}

//hàm tạo không tham số

public LevelKhachHang() {

super();

}

//hàm thêm khách hàng của mỗi level

public void Themkh(KhachHang kh){

int i=0;

for(;i<arrkh.size();i++){

KhachHang old=arrkh.get(i);

if(old.getma().trim().equalsIgnoreCase(kh.getma().trim())){

break;

}

}

if(i<arrkh.size()){

arrkh.set(i, kh);

}

else{

arrkh.add(kh);

}

}

//get khách hàng tại vị trí index của level

public KhachHang get(int index){

return arrkh.get(index);

}

//lấy số lượng khách hàng của level đó

public int size(){

return arrkh.size();

}

//lấy danh sách khách hàng của level đó

public ArrayList<KhachHang> getListKH(){

return this.arrkh;

}

}

Trương Duy Linh - 51101863

Page 36: Báo cáo cuối kì

36

- Class KhachHang chứa các thuộc tính liên quan khách hàng(mã khách hàng, tên, giới tính, số điện thoại, email, số coins), và các tác vụ get,set.

public class KhachHang implements Serializable{

private static final long serialVersionUID = 1L;

private String ma;

private String ten;

private String sdt;

private String email;

private String level;

private String coins;

private boolean sex;

private ArrayList<DonHang> arrdh= new ArrayList<DonHang>();

//Hàm tạo không tham số

public KhachHang(){

}

//hàm tạo với các tham số mã, tên, sdt, email, level, coins

public KhachHang(String ma,String ten,String sdt,String

email,String level,String coins,boolean sex){

this.ma=ma;

this.ten=ten;

this.sdt=sdt;

this.email=email;

this.sex=sex;

this.coins=coins;

this.level=level;

}

//phương thức get,set cho tên

public String getten(){return ten;}

public void setten(String ten){this.ten=ten;}

//phương thức get,set cho mã

public String getma(){return ma;}

public void setma(String ma){this.ma=ma;}

//phương thức get,set cho sdt

public String getsdt(){return sdt;}

public void setsdt(String sdt){this.sdt=sdt;}

Trương Duy Linh - 51101863

Page 37: Báo cáo cuối kì

37

//phương thức get,set cho emial

public String getemail(){return email;}

public void setemail(String email){this.email=email;}

//phương thức get,set cho level

public String getlevel(){return level;}

public void setlevel(String level){this.level=level;}

//phương thức get,set cho coins

public String getcoins(){return coins;}

public void setcoins(String coin){this.coins=coin;}

//phương thức get,set cho sex

public boolean getsex(){return sex;}

public void setsex(boolean sex){this.sex=sex;}

//phương thức thêm đơn hàng của mỗi khách hàng

public void Themdh(DonHang dh){

int i=0;

for(;i<arrdh.size();i++){

DonHang old=arrdh.get(i);

if(old.getmaDH().trim().equalsIgnoreCase(dh.getmaDH().trim()))

{

break;

}

}

if(i<arrdh.size()){

arrdh.set(i, dh);

}

else{

arrdh.add(dh);

}

}

//phương thức lấy đơn hàng tại index

public DonHang get(int index){

return arrdh.get(index);

}

//lấy số lượng đơn hàng của khách hàng

public int size(){

Trương Duy Linh - 51101863

Page 38: Báo cáo cuối kì

38

return arrdh.size();

}

//lấy danh sách đơn hàng của khách hàng

public ArrayList<DonHang> getListDH(){

return this.arrdh;

}

//--------------------------------------------

//viết lại hàm chuyển thành chuổi toString

@Override

public String toString()

{

return this.ma+"---"+"Ten: " +this.ten +"\n"

+"Level: "+this.level+"---"+"Coins: "+this.coins;

}

}

- Class DanhSachKhachHang //Class Danh sách khách hàng hiển thị danh sách khách hàng

//Thiết lập hàm goi các tác vụ thêm,sửa, xóa khách hàng

//chuyển level khách hàng, xem danh sách cơ hội

public class DanhSachKhachHang extends Activity {

ImageButton imgback;

ListView lv;

TextView txtshowlv;

Button btnthemkh;

ArrayList<KhachHang>arrkh =null;

AdapterKhachHang adapter=null;

LevelKhachHang lvkh=null;

private KhachHang cus=null;

int position =-1;

DatabaseHandler db;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_dskh);

db=new DatabaseHandler(this);

txtshowlv=(TextView)findViewById(R.id.txtlevel);

imgback=(ImageButton)findViewById(R.id.imgback);

btnthemkh=(Button)findViewById(R.id.btnthemkhachhang);

lv=(ListView)findViewById(R.id.lvkhachhang);

Trương Duy Linh - 51101863

Page 39: Báo cáo cuối kì

39

getdata();

Event();

registerForContextMenu(lv);

}

//lấy danh sách khách hàng của mỗi level truyền từ class

MainActivity

public void getdata(){

Intent i=getIntent();

Bundle b=i.getBundleExtra("DATA");

lvkh=(LevelKhachHang)b.getSerializable("LEVEL");

arrkh=lvkh.getListKH();

them_don_hang_va_tinh_gia();

adapter=new

AdapterKhachHang(this,R.layout.item_layout_custom,arrkh);

lv.setAdapter(adapter);

txtshowlv.setText(lvkh.getTenlv());

}

//Xử lí các sự kiện

public void Event(){

//quay lại layout trước đó, truyền gói LEVEL qua

MainActivity

imgback.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent i=getIntent();

Bundle b=new Bundle();

b.putSerializable("LEVEL", lvkh);

i.putExtra("DATA", b);

setResult(MainActivity.CAPNHAT_DS_KHACH_HANG_THANHCONG,i);

finish();

}

});

//bắt sự kiện click vào mỗi item

lv.setOnItemLongClickListener(new OnItemLongClickListener()

{

@Override

public boolean onItemLongClick(AdapterView<?> parent,

View view,

int arg, long id) {

cus=arrkh.get(arg);

position=arg;

Trương Duy Linh - 51101863

Page 40: Báo cáo cuối kì

40

return false;

}

});

//Lấy sư kiện click button thêm khách hàng

btnthemkh.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

doThemKhachHang();

}

});

}

//Đăng kí menu context_menu_kh khi click vào mỗi khách hàng

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

// TODO Auto-generated method stub

super.onCreateContextMenu(menu, v, menuInfo);

getMenuInflater().inflate(R.menu.context_menu_kh, menu);

}

//Bắt sự kiện click các item khi click các memu.

@Override

public boolean onContextItemSelected(MenuItem item){

switch(item.getItemId()){

case R.id.mnuchuyenkh:doChuyenKhachHang();break;

case R.id.mnusuakh:doSuaKhachHang();break;

case R.id.mnuxoakh:doXoaKhachHang();break;

case R.id.mnucohoi:doDanhSachCoHoi();break;

case R.id.mnudsdh:doDanhSachDonHang();break;

}

return super.onContextItemSelected(item);

}

//Intent gọi Activity DanhSachCoHoi

public void doDanhSachCoHoi(){

Intent i=new Intent(this, DanhSachCoHoi.class);

Bundle bundle=new Bundle();

bundle.putSerializable("KHACHHANG", cus);

i.putExtra("DATA", bundle);

startActivityForResult(i,MainActivity.MO_DS_COHOI);

}

Trương Duy Linh - 51101863

Page 41: Báo cáo cuối kì

41

//Intent gọi Activity DanhSachDonHang

public void doDanhSachDonHang(){

//for(DonHang

don:db.getdsdh_ofkh(Integer.parseInt(cus.getma()))){

// cus.Themdh(don);

//}

Intent i=new Intent(this, DanhSachDonHang.class);

Bundle bundle=new Bundle();

bundle.putSerializable("KHACHHANG", cus);

i.putExtra("DATA", bundle);

startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_DON_HA

NG);

}

//Truy xuất vào cơ sở dữ liệu the tính coins của mỗi khách

hàng

// dựa trên giá của các đơn hàng của khách hàng đó bằng cách

truy suất

//dữ liêu trong cơ sở dữ liệu

public void them_don_hang_va_tinh_gia(){

for(KhachHang kha:arrkh){

int gia=0;

for(DonHang

don:db.getdsdh_ofkh(Integer.parseInt(kha.getma()))){

kha.Themdh(don);

gia+=Integer.parseInt(don.getsmoney());

}

kha.setcoins(String.valueOf(gia));

db.updateKhachHang(kha);

}

}

//Xóa khách hàng dùng AlertDialog hiển thị form hỏi xóa

public void doXoaKhachHang() {

AlertDialog.Builder builder=new AlertDialog.Builder(this);

builder.setTitle("XOA");

builder.setMessage("Bạn có chắc muốn xóa");

builder.setIcon(R.drawable.ic_launcher);

builder.setNegativeButton("Không", new

DialogInterface.OnClickListener() {

@Override

Trương Duy Linh - 51101863

Page 42: Báo cáo cuối kì

42

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

public void doChuyenKhachHang() {

Intent i=new Intent(this,Activity_ChuyenKhachHang.class);

Bundle b=new Bundle();

Trương Duy Linh - 51101863

Page 43: Báo cáo cuối kì

43

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

Trương Duy Linh - 51101863

Page 44: Báo cáo cuối kì

44

if(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){

Bundle bundle=data.getBundleExtra("DATA");

KhachHang

k=(KhachHang)bundle.getSerializable("KHACHHANG");

arrkh.get(position).getListDH().clear();

arrkh.get(position).getListDH().addAll(k.getListDH());

int p=0;

for(DonHang d:arrkh.get(position).getListDH()){

p+=Integer.parseInt(d.getsmoney());

}

arrkh.get(position).setcoins(String.valueOf(p));

db.updateKhachHang(arrkh.get(position));

adapter.notifyDataSetChanged();

}

}

}

- Class Activity_ChuyenKhachHangpublic 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");

Trương Duy Linh - 51101863

Page 45: Báo cáo cuối kì

45

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_it

em_single_choice,arrlv);

lvlevel.setAdapter(adapter);

//Lấy vị trí sự kiện click trên ListView, nếu CheckView

được tick

// thì lấy vị trí level được tick tại position thêm vào

level đó

// và thêm khách hàng vào cơ sở dữ liệu

lvlevel.setOnItemClickListener(new OnItemClickListener() {

Boolean somethingChecked=false;

@Override

public void onItemClick(AdapterView<?> parent, View

view,

int position, long id) {

// TODO Auto-generated method stub

if(somethingChecked){

CheckedTextView cv=(CheckedTextView)view;

cv.setChecked(false);

}

CheckedTextView cv=(CheckedTextView)view;

if(!cv.isChecked()){

cv.setChecked(true);

arrlv.get(position).Themkh(kh);

db.chuyenKhachHang(kh,position);

}

somethingChecked=true;

}

});

//Bắt sự kiện khi nhấn button apply,

//thiết lập result thông báo thành công

imgapply.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

setResult(MainActivity.CHUYEN_LEVEL_THANHCONG);

finish();

Trương Duy Linh - 51101863

Page 46: Báo cáo cuối kì

46

}

});

}

}

- Class Activity_SuaKhachHangpublic class Activity_SuaKhachHang extends Activity {

EditText txtma,txtten,txtsdt,txtemail;

Button btnxoa,btnluu;

RadioButton raNam;

KhachHang khachhang=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//Gọi layout activity_them_khach_hang

setContentView(R.layout.activity_them_khach_hang);

//lấy id từ các View,Button của layout

txtma=(EditText)findViewById(R.id.txtma);

txtten=(EditText)findViewById(R.id.txtten);

txtsdt=(EditText)findViewById(R.id.txtsdt);

txtemail=(EditText)findViewById(R.id.txtemail);

btnxoa=(Button)findViewById(R.id.btnxoa);

btnluu=(Button)findViewById(R.id.btnluu);

raNam=(RadioButton)findViewById(R.id.raNam);

setdefault();

btnxoa.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

txtten.setText("");

txtsdt.setText("");

txtemail.setText("");

txtten.requestFocus();

}

});

btnluu.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Trương Duy Linh - 51101863

Page 47: Báo cáo cuối kì

47

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

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

Trương Duy Linh - 51101863

Page 48: Báo cáo cuối kì

48

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);

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()+"";

Trương Duy Linh - 51101863

Page 49: Báo cáo cuối kì

49

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();

}

}

});

}

}

- 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);

Trương Duy Linh - 51101863

Page 50: Báo cáo cuối kì

50

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ố

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

Trương Duy Linh - 51101863

Page 51: Báo cáo cuối kì

51

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);

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()+"";

Trương Duy Linh - 51101863

Page 52: Báo cáo cuối kì

52

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);

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);

Trương Duy Linh - 51101863

Page 53: Báo cáo cuối kì

53

}

}

}

- 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 hangprivate 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 donhangprivate static final String TABLE_DONHANG="donhang";private static final String ID_DH="id_dh";private static final String NAME_DH="name_dh";private static final String DATE_DH="date_dh";private static final String MONEY_DH="sum_money";//table productprivate 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_cusprivate 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_billprivate 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";

Trương Duy Linh - 51101863

Page 54: Báo cáo cuối kì

54

//table co hoiprivate 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 đó@Overridepublic void onCreate(SQLiteDatabase db) {

// TODO Auto-generated method stubString CREATE_KhachHang_TABLE="CREATE TABLE

"+TABLE_KHACHHANG+" ( "+ID+" INTEGER PRIMARY KEY, "+NAME+" TEXT, "+PHONE+" TEXT, "+EMAIL+ " TEXT, "+LEVEL+ " TEXT, "+COINS+ " TEXT, "+SEX+" TEXT )";

String CREATE_DonHang_TABLE="CREATE TABLE "+TABLE_DONHANG+" ("

+ID_DH +" INTEGER PRIMARY KEY, "+NAME_DH+ " TEXT, "+DATE_DH+ " TEXT, "+MONEY_DH+ " TEXT )";

String CREATE_Product_TABLE="CREATE TABLE "+TABLE_PRODUCT+" ("

+ID_SP +" INTEGER PRIMARY KEY, "+NAME_SP+ " TEXT, "+INFO_SP+ " TEXT, "+PRICE_SP+ " TEXT )";

String CREATE_of_cus_TABLE="CREATE TABLE "+TABLE_OF_CUS+" ("

+ ID_KH_OF_CUS+ " INTEGER, "+ ID_DH_OF_CUS+ " INTEGER, "+" PRIMARY KEY ("+ID_KH_OF_CUS+","+ID_DH_OF_CUS+" )"+" FOREIGN KEY("+ID_KH_OF_CUS+") REFERENCES "

+TABLE_KHACHHANG+"( "+ID+") ON DELETE CASCADE ON UPDATE

Trương Duy Linh - 51101863

Page 55: Báo cáo cuối kì

55

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);

}

//xóa các table khi version thay đổi@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stubdb.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);

Trương Duy Linh - 51101863

Page 56: Báo cáo cuối kì

56

}

//add single KhachHangpublic 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 rowdb.insert(TABLE_KHACHHANG, null, values);db.close();

}

//read rowpublic 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.getString(3),cursor.getString(4),cursor.getString(5),cursor.getString(6)=="Nam"?true:false);

return khachhang;}

//Trả về danh sách khách hàng đọng từ cơ sở dữ liệupublic 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{

Trương Duy Linh - 51101863

Page 57: Báo cáo cuối kì

57

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ệupublic int getKhachHangCount(){

String countQuery = "SELECT * FROM " + TABLE_KHACHHANG; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); int count = 0; try { if (cursor.moveToFirst()) { count = cursor.getCount(); } return count; } finally { if (cursor != null) { cursor.close(); db.close(); } }

}

//cập nhật thông tin khách hàng trong cơ sở dữ liệupublic int updateKhachHang(KhachHang khachhang){

SQLiteDatabase db=this.getWritableDatabase();ContentValues values=new ContentValues();values.put(NAME, khachhang.getten());

Trương Duy Linh - 51101863

Page 58: Báo cáo cuối kì

58

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 KhachHangpublic 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àngpublic 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 hangpublic ArrayList<DonHang> getdsdh_ofkh(int id){

ArrayList<DonHang> listdh=new ArrayList<DonHang>();String query ="SELECT * FROM "+TABLE_OF_CUS +" WHERE

"+ID_KH_OF_CUS+" = "+id;SQLiteDatabase db=this.getReadableDatabase();Cursor cursor=db.rawQuery(query,null);if(cursor.moveToFirst()){

do{String query2 ="SELECT * FROM "+TABLE_DONHANG +"

WHERE "+ID_DH+" = "+cursor.getString(1);Cursor cursor2=db.rawQuery(query2,null);

Trương Duy Linh - 51101863

Page 59: Báo cáo cuối kì

59

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));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;}

Trương Duy Linh - 51101863

Page 60: Báo cáo cuối kì

60

//them don hang vao 1 khach hang va vao csdlpublic 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 rowdb.insert(TABLE_PRODUCT, null, values);db.close();

}

//them san pham vao 1 don hangpublic 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 rowdb.insert(TABLE_DONHANG, null, values);db.close();

}

//update don hangpublic int updateDonHang(DonHang donhang){

SQLiteDatabase db=this.getWritableDatabase();ContentValues values=new ContentValues();

values.put(ID_DH, donhang.getmaDH());values.put(NAME_DH, donhang.gettenDH());values.put(DATE_DH, donhang.getdate());values.put(MONEY_DH, donhang.getsmoney());return db.update(TABLE_DONHANG, values, ID_DH+" = ?", new String[]

{String.valueOf(donhang.getmaDH())});

}

Trương Duy Linh - 51101863

Page 61: Báo cáo cuối kì

61

//update san phampublic 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 hangpublic 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_KHpublic 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_DHpublic void delete_quanhe_KHDH_tu_DH(DonHang donhang){

SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_OF_CUS, ID_DH_OF_CUS + " = ?", new String[] { String.valueOf(donhang.getmaDH()) }); db.close();

}//xoa delete_quanhe_DH_SP_tu_DHpublic 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()) });

Trương Duy Linh - 51101863

Page 62: Báo cáo cuối kì

62

db.close();

}//xoa delete_quanhe_DHSP_tu_SPpublic 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 phampublic 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_cuspublic 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 rowdb.insert(TABLE_OF_CUS, null, values);db.close();

}

//them vao bang of_billpublic 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 rowdb.insert(TABLE_OF_BILL, null, values);db.close();

}

Trương Duy Linh - 51101863

Page 63: Báo cáo cuối kì

63

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 CSDLpublic 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 rowdb.insert(TABLE_COHOI, null, values);db.close();

}// xóa cơ hội khỏi CSDLpublic void deleteCoHoi(CoHoi cohoi){

SQLiteDatabase db = this.getWritableDatabase(); db.delete(TABLE_COHOI, ID_MA_CH + " = ?", new String[] { String.valueOf(cohoi.getmach()) }); db.close();

}

//Lấy danh sách cơ hộipublic ArrayList<CoHoi> getAllCoHoi(int ma){

ArrayList<CoHoi> CoHoilist=new ArrayList<CoHoi>();String selectquery="SELECT * FROM "+TABLE_COHOI+" WHERE

"+ID_MA_KH_CH+" = "+ma;

Trương Duy Linh - 51101863

Page 64: Báo cáo cuối kì

64

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ưapublic int checkTrung(String i,String column,String table){

String countQuery = "SELECT * FROM " + table+" WHERE "+column+" = "+i;

SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); int count = 0; try { if (cursor.moveToFirst()) { count = cursor.getCount(); } return count; } finally { if (cursor != null) { cursor.close(); db.close(); } }

}}

- Class DonHang

Trương Duy Linh - 51101863

Page 65: Báo cáo cuối kì

65

//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++){

SanPham old=arrsp.get(i);

if(old.getmaSP().trim().equalsIgnoreCase(sp.getmaSP().trim()))

{

break;

}

Trương Duy Linh - 51101863

Page 66: Báo cáo cuối kì

66

}

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 DanhSachDonHangpublic class DanhSachDonHang extends Activity{

ImageButton btnbackDH;

ListView lvdh;

Button btnthemdh;

KhachHang kh=null;

ArrayAdapter<DonHang> adapter=null;

ArrayList<DonHang> arrdh=null;

DonHang donhang=null;

DatabaseHandler db;

private int position =-1;

@Override

Trương Duy Linh - 51101863

Page 67: Báo cáo cuối kì

67

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,ar

rdh);

lvdh.setAdapter(adapter);

}

//Xử lí các sự kiện

public void Event(){

//Xử lí sự kiện trở về danh sách khách hàng

btnbackDH.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Intent i=getIntent();

Bundle b=new Bundle();

b.putSerializable("KHACHHANG", kh);

i.putExtra("DATA", b);

setResult(MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG,i);

finish();

}

});

Trương Duy Linh - 51101863

Page 68: Báo cáo cuối kì

68

//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;

Trương Duy Linh - 51101863

Page 69: Báo cáo cuối kì

69

case R.id.mnudssp:doDanhSachSanPham();break;

}

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_PH

AM);

}

//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() {

Trương Duy Linh - 51101863

Page 70: Báo cáo cuối kì

70

@Override

public void onClick(DialogInterface dialog, int which)

{

dialog.cancel();

}

});

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);

Trương Duy Linh - 51101863

Page 71: Báo cáo cuối kì

71

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);

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();

}

}

Trương Duy Linh - 51101863

Page 72: Báo cáo cuối kì

72

}

- Class Activity_SuaDonHangpublic 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

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() {

Trương Duy Linh - 51101863

Page 73: Báo cáo cuối kì

73

@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);

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) {

Trương Duy Linh - 51101863

Page 74: Báo cáo cuối kì

74

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

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();

Trương Duy Linh - 51101863

Page 75: Báo cáo cuối kì

75

}

}

});

}

}

- 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"

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>

Trương Duy Linh - 51101863

Page 76: Báo cáo cuối kì

76

<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>

<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>

Trương Duy Linh - 51101863

Page 77: Báo cáo cuối kì

77

<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.

- 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ề.

Trương Duy Linh - 51101863

Page 78: Báo cáo cuối kì

78

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 bản. Bạn tạo một lớp con thực hiện onCreate (SQLiteDatabase), onUpgrade (SQLiteDatabase, int, int) và tùy chọn OnOpen (SQLiteDatabase), và lớp này sẽ chăm sóc của cơ sở dữ liệu mở nếu nó tồn tại, tạo ra nó nếu nó không, và nâng cấp nó khi cần thiết . Các giao dịch được sử dụng để đảm bảo cơ sở dữ liệu luôn luôn ở trong trạng thái nhạy cảm.

- Tìm hiểu về SQLite: SQLite là 1 csdl mobile. Có nhiều cách lưu trữ dữ liệu trong android như file text, xml, SharePreference và SQLite. Do SQLite được lưu theo cấu trúc database nên rất dễ sử dụng. Cài đặt chi gần dowload gói phần mềm và chạy.

IV. Tổng kết

Trương Duy Linh - 51101863

Page 79: Báo cáo cuối kì

79

- Trải qua quá trình làm project quản lí khách hàng trên android, giúp em rút ra một số kinh nghiệm+ Quá trình phân tích rất quan trọng, càng phân tích sâu thì việc hiên thực càng dễ dàng. Trong quá trình phân tích project này em nhận thấy mình còn chưa hiểu rõ được vấn đề yêu cầu thực sự của khách hàng, phần mềm xây như thế nào là hợp lí nhất dẫn đến phần mềm chưa hoàn thiện về chức năng, chưa hỗ trợ đắc lực cho người quản lí.+ Việc tìm hiểu ngôn ngữ mới cần nhiều thời gian đễ có thể vận dụng nó một cách hiệu quả.+ Qua Project này, em cũng gặt hái được một số kinh nghiệm, kiến thức phát triển một phần mềm trên android, hiểu về cách thức quản lí khách hàng của một công ty, doanh nghiệp, cũng như làm sao đễ chăm sóc khách hàng một cách hiệu quả.

V. Tài liệu tham khảohttp://www.google.com.vn/giaidap/thread?tid=346d102531410bdc (Tại sao phải quản lý quan hệ khách hàng?)

http://blog.trginternational.com/ban-le/bid/162262/V-sao-doanh-nghi-p-b-n-l-c-n-ph-i-qu-n-l-kh-ch-h-ng-hi-u-qu (Vì sao doanh nghiệp bán lẻ cần phải quản lý khách hàng hiệu quả)

http://www.itgvietnam.com/san-pham/3s-erp/quy-trinh-quan-ly-quan-he-khach-hang/(Quy Trình quản lí quan hệ khách hàng)http://www.hvaonline.net/hvaonline/posts/list/9598.hva (Serializable)

http://itstudent.net/vi/tin-t%E1%BB%A9c/chuy%C3%AAn-m%E1%BB%A5c/l%E1%BA%ADp-tr%C3%ACnh/gi%E1%BB%9Bi-thi%E1%BB%87u-v%E1%BB%81-intent-trong-l%E1%BA%ADp-tr%C3%ACnh-android.html (Intent)

http://duythanhcse.wordpress.com/2013/04/19/bai-tap-24-thuc-hanh-ve-intent-trong-android/ (Intent) http://basetut.com/sqlite-trong-android-part-1/ (SQLite)

Trương Duy Linh - 51101863