79
Trương Duy Linh - 51101863 1 BÁO CÁO THỰC TẬP ĐỀ TÀI: PHÁT TRIỂN PHẦN MỀM QUẢ LÍ KHÁCH HÀNG TRÊN ANDROID TRÊN ĐIỆN THOẠI SỬ DỤNG ANDROID GVHD : Thầy Võ Đỗ Thắng SVTH : Trương Duy Linh MSSV : 51101863 TP.HCM, Ngày 12 Tháng 8 Năm 2014 TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HỒ CHÍ MINH KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG & AN NINH MẠNG QUỐC TẾ ATHENA

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

Trương Duy Linh - 51101863 1

BÁO CÁO THỰC TẬPĐỀ TÀI:

PHÁT TRIỂN PHẦN MỀM QUẢ LÍ KHÁCH

HÀNG TRÊNANDROID TRÊN ĐIỆN THOẠI SỬ

DỤNGANDROID

GVHD : Thầy Võ Đỗ Thắng

SVTH : Trương Duy Linh

MSSV : 51101863

TP.HCM, Ngày 12 Tháng 8 Năm 2014

TRƯỜNG ĐẠI HỌC BÁCH KHOATP.HỒ CHÍ MINHKHOAKHOAHỌC & KỸ THUẬTMÁYTÍNH

TRUNG TÂM ĐÀO TẠO QUẢN TRỊ MẠNG &AN NINH MẠNG QUỐC TẾATHENA

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

Trương Duy Linh - 51101863 2

LỜI CẢM ƠN

TRUNG TÂM ATHENA

Em xin chân thành cảm ơn Ban giám đốc Trung Tâm Athena, thầy Võ ĐỗThắng và toàn thể các anh, chị, các bạn trong Trung Tâm đã tận tình giúp đỡ em trongthờ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ữngkinh 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 saunày.

Trong thời gian thực tập tại Trung Tâm em đã có những cố gắng để hoàn thànhbá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ũngkhô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

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

Trương Duy Linh - 51101863 3

LỜI CẢM ƠN

TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM & KHOA

KHOA HỌC VÀ KĨ THUẬT MÁY TÍNH

Em xin chân thành cảm ơn Trường Đại Học Bách Khoa Tp.HCM và KhoaKhoa 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ậptrong 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ựctậ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ấtnhiề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 trongquá 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 2014Kí Tên

Trương Duy Linh

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

Trương Duy Linh - 51101863 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 độnglà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áchhà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ảnlí 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ớiandroid 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 videovà có thuyết minh từng bước.Chi tiết quay clip ghi lại quá trình thực hiện được liệt kê

dưới đây.Danh sách các clip:

- Clip giới thiệu cá nhân và đề tài đăng kí thực tậ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=HC2Ze7yffmo

- Clip Báo cáo thực hiện quá trình làm đề tàihttps://www.youtube.com/watch?v=AbwZ_4d8sZk

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

Trương Duy Linh - 51101863 5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.

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

Trương Duy Linh - 51101863 6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.

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

Trương Duy Linh - 51101863 7

MỤC LỤC

I. Phân tích nhu cầu thị trường............................................................................................................71. Tại sao phải Quản lí khách hàng ?.......................................................................................... 72. 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...............83. Ư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.....................................................................................................................111.Cài đặt Android và môi trường phát triển android như esclipse, SDK..................................113. Xây dựng mô hình ERD........................................................................................................164. Phân tích các chức năng........................................................................................................175. Xây dựng giao diện.. ............................................................................................................ 186. Hiện thực các Class......... ..................................................................................................... 257.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.................................................................................................................................... 77V. Tài liệu tham khảo........................................................................................................................ 77

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

Trương Duy Linh - 51101863 8

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

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

Quản lý quan hệ đối tác là một lĩnh vực quản lý liên quan đến việc hiểu rõ vai trò,quan điểm, mức độ ảnh hưởng và nhu cầu của các đối tác để có phương pháp quản lýmối quan hệ và phương pháp giao tiếp cho phù hợp. Tùy theo từng đối tác mà các lợiích, quan tâm của họ đối với một doanh nghiệp có khác nhau.

Theo quan điểm truyền thống, các đối tác quan trọng đối với doanh nghiệp dường nhưchỉ tập trung vào khách hàng (người mang tiền đến), nhà cung cấp (nguồn cung cấpcho 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àybá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ảnxuấ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ómngườ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ệnrõ 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àngngà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ãnhiệ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ảnlý khách hàng đã cho thấy đến 75% trên tổng doanh số bán hàng là từ 30% kháchhà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 íchnhư 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 2yế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ềntảng thái độ kiên quyết sẽ rất dễ bị thay đổi khi khách hàng đối mặt vớinhữ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 vitiê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àichính.

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

Trương Duy Linh - 51101863 9

+ Tăng cường việc giữ khách hàng và tìm kiếm khách hàng mới thông qua tiếpthị 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ươngpháp truyền miệng là một vũ khí bí mật. Quản lý khách hàng mang lại chocá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ặcsả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ânvà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ảnlý 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ơnvà 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ạnbè 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ườngnguồ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ẩmliê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ươngpháp tận dụng những sự thay đổi đó trong khi vẫn có thể phát triển nhằmvượ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 đốithủ. 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.

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

Trương Duy Linh - 51101863 10

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

quản lí khách hàng2.1 Quản lí khách hàng cần những gì ?

Có những đối tác mà quá trình quản lý họ lại gắn liền với quá trình tácnghiệp của doanh nghiệp. Chẳng hạn như bộ phận kinh doanh làm việc với kháchhàng hoặc nhà phân phối trong quá trình đặt hàng, bộ phận mua hàng làm việcvớ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ậnnhâ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ữngnhà 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 đốitượ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ềucô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ò, ảnhhưởng của họ đối với doanh nghiệp, cũng như “sách lược” mà doanh nghiệp dànhcho 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ựchiện phải được ủy quyền tùy theo mức độ cho các trưởng bộ phận. Làm theo cáchnày, các cấp quản lý ở doanh nghiệp đều có ý thức chung về quản lý quan hệ đốitá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étduyệ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ácchí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ầntrao đổi, mức độ tiếp xúc, cách truyền đạt thông tin sao cho hiệu quả nhất. Việclậ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 đợicủ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ếpmang 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ấtnhiề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ựngthươ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âmkhác nhau, vì thế sự thành công của doanh nghiệp cũng phụ thuộc vào cách quảnlý các kỳ vọng, lợi ích và sự hợp tác của các đối tác.

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

Trương Duy Linh - 51101863 11

2.2 Dùng phương pháp CRM quản lí khách hàng Định nghĩa CRM

- CRM (Customer Relationship Management: Quản lý quan hệ khách hàng)là một phương pháp giúp các doanh nghiệp tiếp cận và giao tiếp với khách hàngmột cách có hệ thống và hiệu quả, quản lý các thông tin của khách hàng nhưthông tin về tài khoản, nhu cầu, liên lạc… nhằm phục vụ khách hàng tốt hơn.

- Thông qua hệ thống quan hệ khách hàng, các thông tin của khách hàng sẽđược cập nhật và được lưu trữ trong hệ thống quản lý cơ sở dữ liệu. Nhờ mộtcông cụ dò tìm dữ liệu đặc biệt, doanh nghiệp có thể phân tích, hình thành danhsá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áchhà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ủakhá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ườikhá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óctố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 tynế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 CRMcó 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ấtkỳ 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ộngmố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ànhcho riêng hoạt động kinh doanh và marketing hay cũng không phải được chịutrá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ênquan đến chiến lược CRM. Nói cách khác CRM là một chiến lược hay phươngphá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ủacô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

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

Trương Duy Linh - 51101863 12

bất kỳ một bộ phận nào trong tổ chức đứng ngoài kế hoạch CRM thì tổ chức đósẽ gặp phải rủi ro lớn trong quá trình thực hiện quản lý mối quan hệ khách hàngcủ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áchhàng (trước – đang – và sau khi mua hàng), cũng như gắn kết chặt chẽ với quytrình kinh doanh của tổ chức (marketing – kinh doanh – và chăm sóc sau bánhà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 muahà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ôngviệ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ễnbiế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áttriển trên điện thoại di động là rất cần thiết.

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

Trương Duy Linh - 51101863 13

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

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

SDK

Bước 1: Tải bộ cài đặt Android ADT Bundle

Đầu tiên chúng ta cần tải công cụ & bộ thư viện hỗ trợ phát triển ứng dụng Android(Android SDK) ở trang http://developer.android.com/sdk/index.html

Chú ý:

Chúng ta cần chọn phiên bản Android SDK 32-bit hay Android SDK 64-bitphù 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íchhợ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 1file ADT Bundle duy nhất để người dùng có thể tải về các thành phần cần thiếtchỉ 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áchnhanh 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ấybiểu tượng Java trong Control Panel của Windows, chúng ta cần tải Java về và cài đặttừ địa chỉ http://www.oracle.com/technetwork/java/javase/downloads/index.html

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

Trương Duy Linh - 51101863 14

Bước 3: Cài đặt Eclipse &ADT Plugin

Giải nén file Android ADT Bundle đã download được ở bước trên vào một thư mụcbất kì nào đó trên máy tính. Android đã đính kèm môi trường phát triển Eclipse tíchhợp ATD Plugin đã được đóng gói sẵn trong đó.

Mẹo: bạn nên để Android SDK ở ổ đĩa khác ổ đã cài hệ điều hành Windows, vì nhưthế khi có nhu cầu cài lại máy, thì bản cài đặt Android SDK này vẩn còn, chúng takhô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ầncà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 choEclipse

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

Trương Duy Linh - 51101863 15

Bước 4: Cài đặt Android SDK Manager:

Bật Eclipse lên, chọn Workpace. Chọn theo các bước hướng dẫn trên hình để càiAndroid SDK Manager

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

Trương Duy Linh - 51101863 16

Bước 5: Tạo máy ảo Android để chạy ứng dụng Android:

Máy ảo Android là chương trình giả lập thiết bị Android (Android Virtual Device– AVD) để giúp lập trình viên kiểm tra ứng dụng nhanh ngay trên máy tính trước khichính thức triển khai trên thiết bị Android thực tế.

Bước 6: Tạo và chạy ứng dụng Android đầu tiên

Tạo project Android đầu tiên bằng cách vào menu File => New => AndroidApplication Project

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

Trương Duy Linh - 51101863 17

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

Quản lý hồ sơ khách hàng: Quy trình quản lý khách hàng được tự động hóa từbước thu thập thông tin khách hàng đến việc đánh giá, phân loại khách hàng. Baogồ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áchhà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áchhà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

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

Trương Duy Linh - 51101863 18

Quản lý dịch vụ khách hàng: Chức năng quản lý dịch vụ khách hàng bao gồmcác hoạt động sau:

Quản lý thông tin yêu cầu bảo hành, hỗ trợ, khiếu nại của khách hàng: Tênkhá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

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 Đề Tài Xây Dựng Phần Mềm Quản Lí Khách Hàng Trên Android

Trương Duy Linh - 51101863 19

+ Bảng of_cus

Ma_KH Ma_Bill

+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ầnthiế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áchhà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áchhà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ôngchỉ 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 danhsá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ămngườ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ảmviệ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ạivà 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 đó chophù hợp.

+ Chức năng (xem,xóa,thêm) danh sách đơn hàng mà khách hàng đã mua: 1khá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áchhà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ạisả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ặthà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 thamgia, từ đó có thể cách định các chương trình khách hàng yêu thích, tăng số lượngchươ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

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

Trương Duy Linh - 51101863 20

khuyến mãi, các sản phẩm mới sẽ được bán... Nhằm cung cấp thông tin cho kháchhàng để họ có thể tham gia, tạo sự thân thiết giữa khách hàng va công ty.

5. Xây dựng giao diện- Sau khi phân tích các chức năng cần có, tiếp theo là đi xây dựng giao diện, việc

xây dựng giao diện giúp định hình phần mềm 1 cách rõ ràng hơn.- Đầu tiên là giao diện khi người quản lí mở phần mềm:+ Gồm thanh search giúp người quản lí có thể tìm kiếm khách hàng của mình.+ Button Chọn loại khách hàng, giúp người quản lí xem danh sách các khách

hàng theo cấp VIP, THUONG, TIMNANG.+ Danh sách khách hàng, khi người quản lí nhấp vào sẽ hiện lên các đơn hàng nKhách hàng đã mua.

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

Trương Duy Linh - 51101863 21

- Khi người quản lí nhấp vào button chọn loại khách hàng, và chọn loại kháchhà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àobutton 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ủakhách hàng đã giao dịch.

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

Trương Duy Linh - 51101863 22

- Khi gười quản lí nhấp vào menu thêm hoặc sửa khách hàng, thì giao diện bêndướ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

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

Trương Duy Linh - 51101863 23

- Khi người quản lí nhấp vào menu item danh sách cơ hội gồm các yêu cầu cầnnhậ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 khicheck vào ô check box.

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

Trương Duy Linh - 51101863 24

- Khi người dùng nhấp chọn vào menu item danh sách đơn hàng thì giao diệndanh 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

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

Trương Duy Linh - 51101863 25

- Khi người quản lí nhấp vào một đơn hàng bất kì, menu item sửa, xóa, xem danhsá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ẩmsẽ hiện ra.

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

Trương Duy Linh - 51101863 26

- Khi người quản lí chọn 1 button ADD PRODUCT thì form yêu cầu nhập thôngtin 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.

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

Trương Duy Linh - 51101863 27

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

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

Trương Duy Linh - 51101863 28

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

- Class MainActivity

public class MainActivity extends ActionBarActivity {

//Định nghĩa các requestCode, resultCode truyền đi//trong Intentpublic 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àngListView lvallkh;EditText search;ArrayList<KhachHang>custo;

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

Trương Duy Linh - 51101863 29

ArrayAdapter<KhachHang> adaptercusto;private static ArrayList<LevelKhachHang>arrlvkh=new

ArrayList<LevelKhachHang>();private int pos=-1;private Button btnchonlevel;DatabaseHandler db;private KhachHang khach;int posi=-1;@Overrideprotected 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 databasedb=new DatabaseHandler(this);

btnchonlevel=(Button)findViewById(R.id.btnxoatt);

KhachHang custom=null;//khởi tạo 3 levelLevelKhachHang 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ừ CSDLif(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=newKhachHang("2","Tien","2","[email protected]","TIMNANG","0",true);

l2.Themkh(custom);

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

Trương Duy Linh - 51101863 30

db.addKhachHang(custom);arrlvkh.add(l2);custo.add(custom);//-----------------

custom=newKhachHang("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í contextmenuregisterForContextMenu(btnchonlevel);

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

Trương Duy Linh - 51101863 31

//Xử lí sự kiện khi gõ từ vào thanh searchsearch.addTextChangedListener(new TextWatcher() {

@Overridepublic void onTextChanged(CharSequence s, int start, int

before, int count) {// TODO Auto-generated method stubadaptercusto.notifyDataSetChanged();

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

@Overridepublic void beforeTextChanged(CharSequence s, int start,

int count,int after) {

// TODO Auto-generated method stub

}

@Overridepublic 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ànglvallkh.setOnItemClickListener(new

AdapterView.OnItemClickListener() {

@Overridepublic void onItemClick(AdapterView<?> parent, View view,

int position, long id) {// TODO Auto-generated method stubkhach=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);

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

Trương Duy Linh - 51101863 32

startActivityForResult(inte,MainActivity.MO_ACTIVITY_DANHSACH_DON_HANG);

}});

}

//truy xuất CSDL thêm đơn hàng tương ứng với mỗi khách hàng// tính coins cho khách hàng dựa trên các đơn hàngpublic 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@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {// TODO Auto-generated method stubsuper.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@Overridepublic boolean onContextItemSelected(MenuItem item){

switch(item.getItemId()){case R.id.mnuvip:

pos=0;doDanhSachKhachHang();

break;case R.id.mnunormal:

pos=1;doDanhSachKhachHang();break;

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

Trương Duy Linh - 51101863 33

case R.id.mnukhtimnang:pos=2;doDanhSachKhachHang();break;

}return super.onContextItemSelected(item);

}

//Intent goi Activity DanhSachKhachHangpublic 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@Overridepublic 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();

}

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

Trương Duy Linh - 51101863 34

elseif(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){

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

k=(KhachHang)bundle.getSerializable("KHACHHANG");custo.get(posi).getListDH().clear();custo.get(posi).getListDH().addAll(k.getListDH());

int p=0;for(DonHang d:custo.get(posi).getListDH()){

p+=Integer.parseInt(d.getsmoney());}custo.get(posi).setcoins(String.valueOf(p));db.updateKhachHang(custo.get(posi));adaptercusto.notifyDataSetChanged();

}

}//hàm trả về danh sách khách hàng của mỗi levelpublic 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àngprivate ArrayList<KhachHang> arrkh =new ArrayList<KhachHang>();//tên levelprivate String ten;

//hàm tạo với tham số tênpublic LevelKhachHang(String ten) {

this.ten=ten;}

//phương thức get,set tên của levelpublic String getTenlv(){

return this.ten;}

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

Trương Duy Linh - 51101863 35

public void setTenlv(String ten){this.ten=ten;

}

//hàm tạo không tham sốpublic LevelKhachHang() {

super();}

//hàm thêm khách hàng của mỗi levelpublic 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 levelpublic 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;}

}

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

Trương Duy Linh - 51101863 36

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

public class KhachHang implements Serializable{private static final long serialVersionUID = 1L;private String ma;private String ten;private String sdt;private String email;private String level;private String coins;private boolean sex;private ArrayList<DonHang> arrdh= new ArrayList<DonHang>();//Hàm tạo không tham sốpublic KhachHang(){

}//hàm tạo với các tham số mã, tên, sdt, email, level, coinspublic 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ênpublic 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 sdtpublic String getsdt(){return sdt;}public void setsdt(String sdt){this.sdt=sdt;}

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

Trương Duy Linh - 51101863 37

//phương thức get,set cho emialpublic String getemail(){return email;}public void setemail(String email){this.email=email;}

//phương thức get,set cho levelpublic String getlevel(){return level;}public void setlevel(String level){this.level=level;}

//phương thức get,set cho coinspublic String getcoins(){return coins;}public void setcoins(String coin){this.coins=coin;}

//phương thức get,set cho sexpublic 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àngpublic 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 indexpublic DonHang get(int index){

return arrdh.get(index);}

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

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

Trương Duy Linh - 51101863 38

public int size(){return arrdh.size();

}

//lấy danh sách đơn hàng của khách hàngpublic ArrayList<DonHang> getListDH(){

return this.arrdh;}//--------------------------------------------

//viết lại hàm chuyển thành chuổi toString@Overridepublic 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ộipublic 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;@Overrideprotected 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);

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

Trương Duy Linh - 51101863 39

lv=(ListView)findViewById(R.id.lvkhachhang);getdata();Event();registerForContextMenu(lv);

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

MainActivitypublic 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ệnpublic void Event(){

//quay lại layout trước đó, truyền gói LEVEL qua MainActivityimgback.setOnClickListener(new OnClickListener() {

@Overridepublic 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 itemlv.setOnItemLongClickListener(new OnItemLongClickListener()

{

@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View

view,int arg, long id) {

cus=arrkh.get(arg);position=arg;

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

Trương Duy Linh - 51101863 40

return false;}

});//Lấy sư kiện click button thêm khách hàngbtnthemkh.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stubdoThemKhachHang();

}});

}

//Đăng kí menu context_menu_kh khi click vào mỗi khách hàng@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {// TODO Auto-generated method stubsuper.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.@Overridepublic 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 DanhSachCoHoipublic 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);

}

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

Trương Duy Linh - 51101863 41

//Intent gọi Activity DanhSachDonHangpublic void doDanhSachDonHang(){

//for(DonHangdon:db.getdsdh_ofkh(Integer.parseInt(cus.getma()))){

// cus.Themdh(don);//}Intent i=new Intent(this, DanhSachDonHang.class);Bundle bundle=new Bundle();bundle.putSerializable("KHACHHANG", cus);i.putExtra("DATA", bundle);

startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_DON_HANG);

}

//Truy xuất vào cơ sở dữ liệu the tính coins của mỗi khách hàng// dựa trên giá của các đơn hàng của khách hàng đó bằng cách truy

suất//dữ liêu trong cơ sở dữ liệupublic 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óapublic 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() {

@Overridepublic void onClick(DialogInterface dialog, int which) {

dialog.cancel();

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

Trương Duy Linh - 51101863 42

}});builder.setPositiveButton("Có",new

DialogInterface.OnClickListener() {

@Overridepublic 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_SuaKhachHangpublic 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_ChuyenKhachHangpublic void doChuyenKhachHang() {

Intent i=new Intent(this,Activity_ChuyenKhachHang.class);Bundle b=new Bundle();b.putSerializable("KHACHHANG", cus);i.putExtra("DATA", b);

startActivityForResult(i,MainActivity.MO_ACTIVITY_CHUYEN_LEVEL);

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

Trương Duy Linh - 51101863 43

}//Intent goi Activity Activity_ThemKhachHangpublic 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 stubsuper.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();

}

elseif(resultCode==MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG){

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

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

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

Trương Duy Linh - 51101863 44

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

int p=0;for(DonHang d:arrkh.get(position).getListDH()){

p+=Integer.parseInt(d.getsmoney());}arrkh.get(position).setcoins(String.valueOf(p));db.updateKhachHang(arrkh.get(position));adapter.notifyDataSetChanged();

}}

}

- Class Activity_ChuyenKhachHangpublic class Activity_ChuyenKhachHang extends Activity {

//mảng levelprivate static ArrayList<LevelKhachHang> arrlv=null;//lvlevel hiển thị các lựa chọn để chuyển levelListView lvlevel;ImageButton imgapply;//adapter chuyển dữ liệu từ ArratList arrlv thành dữ liệu trên

ListView lvlevelArrayAdapter<LevelKhachHang>adapter;KhachHang kh=null;DatabaseHandler db;@Overrideprotected 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ớiIntent i=getIntent();Bundle b=i.getBundleExtra("DATA");kh=(KhachHang)b.getSerializable("KHACHHANG");arrlv=MainActivity.getListLevel();//khai báo adapter với layout danh sách single choose, lấy dữ

liệu từ mảng arrlvadapter=new

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

Trương Duy Linh - 51101863 45

ArrayAdapter<LevelKhachHang>(this,android.R.layout.simple_list_item_single_choice,arrlv);

lvlevel.setAdapter(adapter);//Lấy vị trí sự kiện click trên ListView, nếu CheckView được

tick// 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ệulvlevel.setOnItemClickListener(new OnItemClickListener() {

Boolean somethingChecked=false;@Overridepublic void onItemClick(AdapterView<?> parent, View view,

int position, long id) {// TODO Auto-generated method stubif(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ôngimgapply.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stubsetResult(MainActivity.CHUYEN_LEVEL_THANHCONG);finish();

}});

}}

- Class Activity_SuaKhachHang

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

Trương Duy Linh - 51101863 46

public class Activity_SuaKhachHang extends Activity {EditText txtma,txtten,txtsdt,txtemail;Button btnxoa,btnluu;RadioButton raNam;KhachHang khachhang=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);//Gọi layout activity_them_khach_hangsetContentView(R.layout.activity_them_khach_hang);//lấy id từ các View,Button của layouttxtma=(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() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stub

txtten.setText("");txtsdt.setText("");txtemail.setText("");txtten.requestFocus();}

});btnluu.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

String ten=txtten.getText()+"";String sdt=txtsdt.getText()+"";String email=txtemail.getText()+"";Boolean sex=!raNam.isChecked();

khachhang.setten(ten);

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

Trương Duy Linh - 51101863 47

khachhang.setsdt(sdt);khachhang.setemail(email);khachhang.setsex(sex);

//sau khi chỉnh sửa thì đóng gói dữ liệu và thiết lập//result thành côngIntent 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 Viewpublic void setdefault(){

Intent i=getIntent();Bundle b=i.getBundleExtra("DATA");khachhang=(KhachHang)b.getSerializable("KHACHHANG");txtma.setText(khachhang.getma());txtten.setText(khachhang.getten());txtsdt.setText(khachhang.getsdt());txtemail.setText(khachhang.getemail());raNam.setChecked(true);if(khachhang.getsex()){

raNam.setChecked(false);}

}}

- Class Activity_ThemKhachHang

public class Activity_ThemKhachHang extends Activity {EditText txtma,txtten,txtsdt,txtemail;Button btnxoa,btnluu;RadioButton raNam;DatabaseHandler db;@Override

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

Trương Duy Linh - 51101863 48

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//gọi layout activity_them_khach_hangsetContentView(R.layout.activity_them_khach_hang);//Lấy Id các View từ layouttxtma=(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ệudb=new DatabaseHandler(this);//thiết lập clear các View khi nhấn xóabtnxoa.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stubtxtma.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ôngbtnluu.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

String ma=txtma.getText()+"";String ten=txtten.getText()+"";String sdt=txtsdt.getText()+"";String email=txtemail.getText()+"";String tongtien="";Boolean sex=!raNam.isChecked();String level="";if(db.checkTrung(ma,"id","KhachHang")==0){

KhachHang cus= newKhachHang(ma,ten,sdt,email,level,tongtien,sex);

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

Trương Duy Linh - 51101863 49

Intent i=getIntent();Bundle b=new Bundle();b.putSerializable("KHACHHANG", cus);i.putExtra("DATA", b);

setResult(MainActivity.THEM_KHACH_HANG_THANHCONG,i);finish();

}}

});}

}

- Class AdapterKhachHangpublic 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;

}

@Overridepublic View getView(int position,View convertView,ViewGroup

parent){convertView=context.getLayoutInflater().inflate(layoutId,

null);TextView

ten=(TextView)convertView.findViewById(R.id.txttenkh);TextView

coins=(TextView)convertView.findViewById(R.id.txtcoins);ImageView

img=(ImageView)convertView.findViewById(R.id.imageView1);KhachHang kh=arrkhachhang.get(position);ten.setText(kh.getten());coins.setText(kh.getcoins());img.setImageResource(R.drawable.girlicon);if(!kh.getsex()){

img.setImageResource(R.drawable.boyicon);}return convertView;

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

Trương Duy Linh - 51101863 50

}

}

- Class CoHoi tạo các thuộc tính và các tác vu get, setpublic 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ộipublic 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,makhpublic 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@Overridepublic 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

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

Trương Duy Linh - 51101863 51

public class DanhSachCoHoi extends Activity{private ArrayList<CoHoi> arrch=new ArrayList<CoHoi>();AdapterChoHoi adapter=null;ListView listcohoi;EditText txttench,txtngaych,txtmach1;Button addch,xoach;DatabaseHandler db;int so=0;

KhachHang kh=null;@Overrideprotected 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ộiadapter=new AdapterChoHoi(this,R.layout.item_cohoi,arrch);listcohoi.setAdapter(adapter);

// thực hiện sự kiện thêm cơ hộiaddch.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stubString ma=txtmach1.getText()+"";String ten=txttench.getText()+"";String ngay=txtngaych.getText()+"";

if(db.checkTrung(ma,"ma_ch","Cohoi")==0){CoHoi ch=new CoHoi(ma,ten,ngay,kh.getma());arrch.add(ch);db.addCoHoi(ch);adapter.notifyDataSetChanged();

txttench.setText("");

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

Trương Duy Linh - 51101863 52

txtngaych.setText("");txttench.requestFocus();

}}

});

//thực hiện sự kiện xóa các cơ hội,có thể xóa 1 hoặc nhiềuxoach.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stubfor(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ộipublic void getData(){

Intent i=getIntent();Bundle b=i.getBundleExtra("DATA");kh=(KhachHang)b.getSerializable("KHACHHANG");

for(CoHoi c:db.getAllCoHoi(Integer.parseInt(kh.getma()))){arrch.add(c);

}

}}

- Class DatabaseHandle xây dựng cấu trúc các bảng dữ liệu và các hàm insert, update,delete.

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

Trương Duy Linh - 51101863 53

public class DatabaseHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION=1;private static final String DATABASE_NAME="KhachHangManager";//table khach 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";

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

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

Trương Duy Linh - 51101863 54

public DatabaseHandler(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

//thiết lập lệnh tạo các table và thực thi các lệnh đó@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 UPDATECASCADE,"

+" FOREIGN KEY("+ID_DH_OF_CUS+") REFERENCES "+TABLE_DONHANG+"( "+ID_DH+") ON DELETE CASCADE ON UPDATECASCADE )";

String CREATE_of_bill_TABLE="CREATE TABLE "+TABLE_OF_BILL +" ( "+ ID_DH_OF_BILL+" INTEGER, "

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

Trương Duy Linh - 51101863 55

+ ID_SP_OF_BILL+" INTEGER, "+ " PRIMARY KEY

("+ID_DH_OF_BILL+","+ID_SP_OF_BILL+" )"+" FOREIGN KEY("+ID_DH_OF_BILL+") REFERENCES "

+TABLE_DONHANG+"( "+ID_DH+") ON DELETE CASCADE ON UPDATECASCADE,"

+" FOREIGN KEY("+ID_SP_OF_BILL+") REFERENCES "+TABLE_PRODUCT+"( "+ID_SP+") ON DELETE CASCADE ON UPDATECASCADE )";

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

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

}

//add single KhachHangpublic void addKhachHang(KhachHang khachhang){

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

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

Trương Duy Linh - 51101863 56

values.put(NAME, khachhang.getten());values.put(PHONE, khachhang.getsdt());values.put(EMAIL, khachhang.getemail());values.put(LEVEL, khachhang.getlevel());values.put(COINS, khachhang.getcoins());values.put(SEX, khachhang.getsex()?"Nam":"Nu");

//insert 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{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));

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

Trương Duy Linh - 51101863 57

khachhang.setsex((cursor.getString(6)=="Nam"?true:false));KhachHanglist.add(khachhang);

}while(cursor.moveToNext());}return KhachHanglist;

}

//lấy số lượng khách hàng đọc từ cơ sở dữ liệ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());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())});

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

Trương Duy Linh - 51101863 58

}

// thay đổi level khách hàng bằng cách cập nhật lại côt level//trong table 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);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));

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

Trương Duy Linh - 51101863 59

listdh.add(dh);}while(cursor2.moveToNext());

}}while(cursor.moveToNext());

}return listdh;

}

//lay danh sach san pham cua don hang

public ArrayList<SanPham> getdssp_ofdh(int id){

ArrayList<SanPham> listsp=new ArrayList<SanPham>();String query ="SELECT * FROM "+TABLE_OF_BILL +" WHERE

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

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

WHERE "+ID_SP+" = "+cursor.getString(1);Cursor cursor2=db.rawQuery(query2,null);if(cursor2.moveToFirst()){

do{SanPham sp=new SanPham();sp.setmaSP(cursor2.getString(0));sp.settenSP(cursor2.getString(1));sp.setthongtinSP(cursor2.getString(2));sp.setprice(cursor2.getString(3));listsp.add(sp);

}while(cursor2.moveToNext());}

}while(cursor.moveToNext());}

return listsp;}

//them don hang vao 1 khach hang va vao csdlpublic void addSanPham(SanPham sanpham){

SQLiteDatabase db=this.getWritableDatabase();ContentValues values=new ContentValues();values.put(ID_SP, sanpham.getmaSP());

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

Trương Duy Linh - 51101863 60

values.put(NAME_SP, sanpham.gettenSP());values.put(INFO_SP, sanpham.getthongtinSP());values.put(PRICE_SP, sanpham.getprice());//insert 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())});

}

//update san phampublic int updateSanPham(SanPham sanpham){

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

values.put(ID_SP, sanpham.getmaSP());

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

Trương Duy Linh - 51101863 61

values.put(NAME_SP, sanpham.gettenSP());values.put(INFO_SP, sanpham.getthongtinSP());values.put(PRICE_SP, sanpham.getprice());return db.update(TABLE_PRODUCT, values, ID_SP+" = ?", new

String[]{String.valueOf(sanpham.getmaSP())});

}

//xoa don 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()) });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 + " = ?",

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

Trương Duy Linh - 51101863 62

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

}

public boolean chkDB(){boolean chk = false;SQLiteDatabase db = this.getWritableDatabase();Cursor mCursor = db.rawQuery("SELECT * FROM " +

TABLE_KHACHHANG, null);if (mCursor != null){

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

Trương Duy Linh - 51101863 63

mCursor.moveToFirst();if (mCursor.getInt(0) == 0){

chk = false;}

}else{chk = true;

}db.close();return chk;

}//thêm 1 cơ hội vào 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;

SQLiteDatabase db=this.getReadableDatabase();Cursor cursor=db.rawQuery(selectquery, null);if(cursor.moveToFirst()){

do{CoHoi cohoi=new CoHoi();cohoi.setmach(cursor.getString(0));

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

Trương Duy Linh - 51101863 64

cohoi.settench(cursor.getString(1));cohoi.setngaych(cursor.getString(2));cohoi.setmakh_of_ch(cursor.getString(3));CoHoilist.add(cohoi);

}while(cursor.moveToNext());}return CoHoilist;

}

//Kiểm tra khi thêm 1 khách hàng, 1 đơn hàng, 1 cơ hội, mã của nó//có cùng với mã hiện tại hay chư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//Class đơn hàng chứa thông tin đơn hàng gồm mã, tên, date, smoneypublic class DonHang implements Serializable{

private static final long serialVersionUID = 1L;private String maDH;private String tenDH;private String date;private String smoney;

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

Trương Duy Linh - 51101863 65

//khởi tạo danh sách sản phẩmprivate 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,setpublic 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àngpublic void Themsp(SanPham sp){

int i=0;for(;i<arrsp.size();i++){

SanPham old=arrsp.get(i);

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

break;}

}if(i<arrsp.size()){

arrsp.set(i, sp);}else{

arrsp.add(sp);}

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

Trương Duy Linh - 51101863 66

}

//lấy sản phẩm tại vị trí index của mảngpublic SanPham get(int index){

return arrsp.get(index);}

//lấy sô lượng sản phẩmpublic 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;}//--------------------------------------------@Overridepublic 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;@Overrideprotected 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>();

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

Trương Duy Linh - 51101863 67

getData();Event();registerForContextMenu(lvdh);

}/** Lấy khách hàng là chủ của các đơn hàng này* Lấy danh sách các sản phẩm từ CSDL*/public void getData(){

Intent i=getIntent();Bundle b=i.getBundleExtra("DATA");kh=(KhachHang)b.getSerializable("KHACHHANG");arrdh=kh.getListDH();Them_sp_va_tinh_giadonhang();//-----------adapter=new

ArrayAdapter<DonHang>(this,android.R.layout.simple_list_item_1,arrdh);

lvdh.setAdapter(adapter);}

//Xử lí các sự kiệnpublic void Event(){

//Xử lí sự kiện trở về danh sách khách hàngbtnbackDH.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

Intent i=getIntent();Bundle b=new Bundle();b.putSerializable("KHACHHANG", kh);i.putExtra("DATA", b);

setResult(MainActivity.CAPNHAT_DS_DON_HANG_THANHCONG,i);finish();

}});//Xử lí sự kiện click vào item ListViewlvdh.setOnItemLongClickListener(new

OnItemLongClickListener() {

@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View

view,int arg, long id) {

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

Trương Duy Linh - 51101863 68

donhang=arrdh.get(arg);position=arg;

return false;}

});//Xử lí sự kiện thêm đơn hàng cho vào danh sách đơn hàngbtnthemdh.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stubdoThemDonHang();

}});

}

//Đăng kí Contextmenu@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {// TODO Auto-generated method stubsuper.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@Overridepublic boolean onContextItemSelected(MenuItem item){

switch(item.getItemId()){

case R.id.mnusuadh:doSuaDonHang();break;case R.id.mnuxoadh:doXoaDonHang();break;case R.id.mnudssp:doDanhSachSanPham();break;}return super.onContextItemSelected(item);

}

//Intent gọi Activity DanhSachSanPhampublic void doDanhSachSanPham(){

//for(SanPham

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

Trương Duy Linh - 51101863 69

san:db.getdssp_ofdh(Integer.parseInt(donhang.getmaDH()))){//donhang.Themsp(san);

//}Intent i=new Intent(this, DanhSachSanPham.class);Bundle bundle=new Bundle();bundle.putSerializable("DONHANG", donhang);i.putExtra("DATA", bundle);

startActivityForResult(i,MainActivity.MO_ACTIVITY_DANHSACH_SAN_PHAM);

}

//Thêm các sản phẩm vào mỗi đơn hàng tương ứng//tính giá của đơn hàng thông qua các sản phẩm đópublic void Them_sp_va_tinh_giadonhang(){

for(DonHang dhang:arrdh){int gia=0;for(SanPham

san:db.getdssp_ofdh(Integer.parseInt(dhang.getmaDH()))){dhang.Themsp(san);gia+=Integer.parseInt(san.getprice());

}dhang.setsmoney(String.valueOf(gia));db.updateDonHang(dhang);

}}

//Hiển thị form AlertDialog, thực hiện việc xóa đơn hàngpublic 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() {

@Overridepublic void onClick(DialogInterface dialog, int which) {

dialog.cancel();

}});builder.setPositiveButton("Có",new

DialogInterface.OnClickListener() {

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

Trương Duy Linh - 51101863 70

@Overridepublic 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_SuaDonHangpublic 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_ThemDonHangpublic void doThemDonHang(){

Intent i=new Intent(this, Activity_ThemDonHang.class);Bundle b=new Bundle();b.putSerializable("DONHANG", donhang);i.putExtra("DATA", b);startActivityForResult(i,

MainActivity.MO_ACTIVITY_THEM_DON_HANG);}

//Nhận result từ thêm, sửa đơn hàng và cập nhật danh sách sản phẩmthành công

protected void onActivityResult(int requestCode, int resultCode,Intent data) {

// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if(resultCode==MainActivity.SUA_DON_HANG_THANHCONG){

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

Trương Duy Linh - 51101863 71

Bundle b=data.getBundleExtra("DATA");DonHang d=(DonHang)b.getSerializable("DONHANG");arrdh.set(position, d);db.updateDonHang(d);adapter.notifyDataSetChanged();

}else if(resultCode==MainActivity.THEM_DON_HANG_THANHCONG){

Bundle b=data.getBundleExtra("DATA");DonHang d=(DonHang)b.getSerializable("DONHANG");arrdh.add(d);db.addDonHang(d);db.addof_cus(kh, d);adapter.notifyDataSetChanged();

}else

if(resultCode==MainActivity.CAPNHAT_DS_SAN_PHAM_THANHCONG){Bundle bundle=data.getBundleExtra("DATA");DonHang d=(DonHang)bundle.getSerializable("DONHANG");arrdh.get(position).getListSP().clear();arrdh.get(position).getListSP().addAll(d.getListSP());

//Them_sp_va_tinh_giadonhang();//-----------int p=0;for(SanPham s:arrdh.get(position).getListSP()){

p+=Integer.parseInt(s.getprice());}arrdh.get(position).setsmoney(String.valueOf(p));db.updateDonHang(arrdh.get(position));adapter.notifyDataSetChanged();

}

}

}- Class Activity_SuaDonHangpublic class Activity_SuaDonHang extends Activity {

EditText txtma,txtten,txtdate,txtmoney;Button btnxoa,btnluu;DonHang donhang=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

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

Trương Duy Linh - 51101863 72

//goi layout activity_them_don_hangsetContentView(R.layout.activity_them_don_hang);

//get id của các View Buttontxtma=(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() {

@Overridepublic 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ôngbtnluu.setOnClickListener(new OnClickListener() {

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

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

Trương Duy Linh - 51101863 73

Intent i=getIntent();Bundle b=new Bundle();b.putSerializable("DONHANG",donhang);i.putExtra("DATA", b);setResult(MainActivity.SUA_DON_HANG_THANHCONG,i);finish();

}});

}

//get thông tin đơn hàng từ gói DATApublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_them_don_hang);db=new DatabaseHandler(this);txtma=(EditText)findViewById(R.id.txtmaDH);txtten=(EditText)findViewById(R.id.txttenDH);txtngay=(EditText)findViewById(R.id.txtngay);txtmoney=(EditText)findViewById(R.id.txtmoney);btnxoa=(Button)findViewById(R.id.btnxoatt);btnluu=(Button)findViewById(R.id.btnsavettdh);

//clear các dữ liệu hiển thị trên layout

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

Trương Duy Linh - 51101863 74

btnxoa.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

// TODO Auto-generated method stubtxtma.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 DanhSachDonHangbtnluu.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

String ma=txtma.getText()+"";String ten=txtten.getText()+"";String ngay=txtngay.getText()+"";String tien=txtmoney.getText()+"";if(db.checkTrung(ma,"id_dh","donhang")==0){

DonHang dh=new DonHang(ma,ten,ngay,tien);Intent i=getIntent();Bundle b=new Bundle();b.putSerializable("DONHANG", dh);i.putExtra("DATA", b);

setResult(MainActivity.THEM_DON_HANG_THANHCONG,i);finish();

}}

});}

}- Các Class trong Pakage có cấu trúc tương tự như trong Package donhang.- Ngoài ra còn cấu trúc Các menu

+ context_menu_dh: chứa các item Xửa, Xóa, Xem Danh sách sản phẩm+ context_menu_kh: chứa các item Xửa, Xóa, chuyển khách hàng, xem danh sách

cơ hội+ context_menu_level:chứa các item level VIP, THUONG, TIMNANG

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

Trương Duy Linh - 51101863 75

+context_menu_sp: chứa các item Xửa, Xóa sản phẩm.

- Cấu trúc AndroidManifest<application

android:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activity

android:name=".MainActivity"android:label="@string/app_name" ><intent-filter>

<action android:name="android.intent.action.MAIN" />

<categoryandroid:name="android.intent.category.LAUNCHER" />

</intent-filter></activity>

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

<activityandroid:name=".Activity_ThemKhachHang"android:label="@string/app_name" >

</activity><activity

android:name=".DanhSachKhachHang"android:label="@string/app_name" >

</activity>

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

Trương Duy Linh - 51101863 76

<activityandroid:name=".DanhSachCoHoi"android:label="@string/app_name" >

</activity>

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

<activityandroid:name="sanphamco.Activity_ThemSanPham"android:label="@string/app_name" >

</activity>

<activityandroid:name="sanphamco.DanhSachSanPham"android:label="@string/app_name" >

</activity>

<activityandroid:name="sanphamco.Activity_SuaSanPham"android:label="@string/app_name" >

</activity></application>

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

Trương Duy Linh - 51101863 77

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

Activity, CSDL SQLite- Serializable: giải quyết vấn đề giúp quản lí ràn buộc khi đọc và ghi xuống

tập tin.Việc đọc và ghi các đối tượng không phải lúc nào cũng đơn giản, có nhữngđói tượng mà bản thân nó bao gồm nhiều đối tượng khác thì sao? (và những đốitượng lại tham khảo đến hàng tá đối tượng khác nữa). Do đó java hiện thực giaodiệ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 độclậ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ệuvà tương tác lẫn nhau, Android đưa ra khái niệm quan trọng, mấu chốt trong lậptrì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ácthành phần ứng dụng “nói chuyện” được với nhau: yêu cầu chức năng từ thànhphần khác, cho phép tương tác với các thành phần riêng và các ứng dụng khác.Có2 thuộc tính quan trọng của Intent khi lập trình trên Android cần chú ý đó làAction và Data:

Action: qui định hành động chung sẽ được thực hiện. Data: là dữ liệu sẽ được xử lý.

+ Trong Project thực hiện mở 1 Activity khác đồng thời truyền dữ liệu qua vàxử lí kết quả trả về.

Chúng ta dựa vào requestCode, resultCode để xử lí.+ Hàm gọi:

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

Trương Duy Linh - 51101863 78

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àyqua Activity nào đó. Bên kia chỉ cần lấy Bundle này ra, mọi dữ liệu đều nằmtrong 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 giaodiện này

- SQLiteOpenHelper: Một lớp helper để quản lý cơ sở dữ liệu tạo ra và quảnlý 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ệutrong android như file text, xml, SharePreference và SQLite. Do SQLite đượclư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ầnmềm và chạy.

IV. Tổng kết- 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õ đượcvấ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áchhiệ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ểnmộ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ả.

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

Trương Duy Linh - 51101863 79

V. Tài liệu tham khảohttp://www.google.com.vn/giaidap/thread?tid=346d102531410bdc (Tại sao phải quảnlý 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)