Luận văn Xây dựng phần mềm quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân

Ông Thomas Watson, Jr, nghuyên chủ tịch của công ty IBM đã từng nói:”Toàn bộ giá trị của công ty này nằm trong đội ngữ nhân viên và những tệp dữ liệu. Dù tất cả các nhà cửa, văn phòng của công ty bị cháy trụi nhưng vẫn giữ được những con người và những tệp dữ liệu thì chẳng bao lâu chúng ta sẽ lại trở nên hùng mạnh như xưa”. Một cơ quan bị mất trí nhớ thì sẽ không thể tồn tại được. Hãy thử tưởng tượng xem điều gì sẽ xảy ra nếu một công ty phần mềm máy tính đã mất hết những chương trình nguồn mà họ đã lập ra. Các cơ quan phải có trí nhớ, đó là những kho dữ liệu lưu trữ hàng tỷ những điều chi tiết cần thiết cho quá trình kinh doanh và ra quyết định. Nói rằng: ”Dữ liệu của một công ty hay tổ chức có vai trò sống còn: là điều khẳng định không hề quá một chút nào.” • Một số khái niệm về cơ sở dữ liệu (cơ sở dữ liệu): - Mỗi bảng (Table) ghi chép dữ liệu về một nhóm phần tử nào đó gọi là thực thể (Entity). - Mỗi thực thể đều có những đặc điểm riêng mà ta gọi đó là thuộc tính. Mỗi thuộc tính là một yếu tố dữ liệu tách biịet, thường không chia nhỏ được nữa. Các thuộc tính góp phần mô tả thực thể và là những dữ liệu về thực thể mà ta muốn lưu trữ. - Mỗi bảng có những dòng (Row). Mỗi dòng còn được gọi là một bản ghi (Record) bởi vì nó ghi chép dữ liệu về một cá thể (Instante) tức là một biểu hiện riêng của thực thể.

doc110 trang | Chia sẻ: oanh_nt | Lượt xem: 1505 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Luận văn Xây dựng phần mềm quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ngữ cảnh Hình 3.7 Sơ đồ DFD ngữ cảnh của hệ thống quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân 3.3.2.Sơ đồ DFD mức 0 Hình 3.8 Sơ đồ DFD mức 0 của hệ thống quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân 3.4. Sơ đồ luồng thông tin Sơ đồ luồng thông tin được dung để môt tả hệ thống theo cách thức động. Tức là mô tả sự di chuyển của dữ liệu, việc xử lý trong thế giới vật lý bằng các sơ đồ. Ta có sơ đồ luồng thông tin của hệ thống quản trị quan hệ khách hàng Hình 3.9 Sơ đồ luồng thông tin của hệ thống quản trị quan hệ khách hàng tại công ty công nghệ tin học Tinh Vân 3.5. Thiết kế cơ sở dữ liệu 3.5.1.Hệ quản trị cơ sở dữ liệu cho bài toán Sau khi tìm hiểu nghiệp vụ bài toán, căn cứ vào nhu cầu của bài toán và sự hiểu biết của bản than về hệ quản trị cơ sở dữ liệu SQL Server 2000. Em đã quyết định chọn hệ quản trị cơ sở dữ liệu SQL Server làm cơ sở để thực hiện giải pháp. Vậy tại sao lại chọn SQL Server 2000? Ta hãy xem xét sơ lược các tính năng mà SQL Server đem lại hiệu quả khi thực hiện bài toán 3.5.1.1.SQL Server 2000 là gì? SQL Server 2000 là hệ quản trị cơ sở dữ liệu Client/Server: - Client là một thành phần của hệ thống yêu cầu dịch vụ hoặc tài nguyên từ những thành phần hệ thống khác. - Server là một thành phần của hệ thống cung cấp các dịch vụ hoặc tài nguyên cho những thành phần hệ thống khác. SQL Server hỗ trợ việc truy nhập thông qua mạng máy tính. Sự truy nhập này có thể thông qua các ứng dụng từ phía Client như: ứng dụng Client/Server; COM, DCOM, Web… 3.5.1.2.Hỗ trợ ngôn ngữ Transaction SQL(T-SQL) T-SQL là một phiên bản của SQL, nó cũng là một ngôn ngữ lập trình và truy vấn cơ sở dữ liệu, Với T-SQL ta có thể truy vấn, cập nhật dữ liệu, thiết lập, bảo trì, lập trình…rất hiệu quả. 3.5.1.3.Quy mô dữ liệu - Cho phép tạo 2 tỉ bảng / 1 CSDL. - Cho phép tạo 1024 cột (trường)/ 1 bảng. - Cho phép tạo 8060 byte / 1 hàng (các kiểu dữ liệu text, image mỗi kiểu dùng 16 byte / 1 hàng). 3.5.1.4.ADO.NET hỗ trợ Provider để lập trình với SQL server Do công nghệ ADO.NET(ActiveX Data Object) và SQL server đều là các sản phẩm của Microsoft nên giữa hai công nghệ có sự tương tác rất ổn định và có khả năng hỗ trợ nhau khi các sản phẩm này được nâng cấp qua các phiên bản. ADO.NET là một lớp trong Visual Studio.NET, chúng chia ra làm hai loại, lớp kết nối hay còn gọi Connected Layer và lớp không kết nối hay còn gọi là Dísconnected Layer, với hai lớp này chúng ta có thể kết nối và thao tác trên các loại cơ sở dữ liệu như SQL Server, MýQL, MS Access, Oracle và cơ sở dữ liệu phân cấp khác. Lớp kết nối là trình điều khiển kết nối cơ sở dữ liệu (Data Provider), có nghĩa là chúng ta phải sử dụng .NET Data Provider hỗ trợ cho cơ sở sữ liệu đã chọn. Trong khi đó lớp không kết nối sử dụng .NET Data Provider tùy ý, thực chất .NET Data Provider bao gồm 4 lớp sau: - Connection: lớp kết nối cơ sở dữ liệu. - DataAdapter: lớp chứa dữ liệu. - Command: lớp chứa lệnh. - DataReader: lớp đọc dữ liệu một chiều. Trong khi mục đích của những lớp kết nối là cho phép chúng ta truy vấn dữ liệu (SELECT) và thao tác (DELETE, INSERT, UPDATE) đến dữ liệu nguồn. Ngược lại, lớp không kết nối cho phép chúng ta thao tác trên dữ liệu tạm thời, hay dữ liệu mà có thể đọc hay ghi ra luông XML hay tệp tin. 3.5.1.5.Stored Procedure và Trigger * Stored Procedure: là tập hợp các câu lệnh T-SQL được lưu trữ trên Server. Đây là phương thức đóng gói các nhiệm vụ lặp lại giống nhau để có thể tiết kiệm mã, thời gian lập trình. Ưu điểm của Stored Procedure bao gồm: - Chia sẻ ứng dụng logic(Share Application Logic) với các ứng dụng khác bằng cách nhất quán sự truy nhập và sửa chữa dữ liệu. Stored Procedure có thể đóng gói các chức năng nghiệp vụ, quy tắc nghiệp vụ hoặc các hành động. Khi đó việc thay đổi Stored Procedure chỉ ở một nơi thì các ứng dụng dùng chung sẽ nhất quán thay đổi theo. - Che chắn chi tiết lược đồ Database (Shield DB Schema Details): không cho phép người sử dụng xem chi tiết nội dung, cấu trúc của bảng. Nếu tập hợp các Stored Procedure cung cấp đủ các quy tắc, chức năng nghiệp vụcho việc thực hiện thì người sử dụng sẽ không phải truy nhập trực tiếp đến bảng. - Cung cấp cơ chế bảo mật (Provide Sercurity Mechanims): có thể cho phép User thực hiện một Stored Procedure thậm chí khi user đó không có quyền truy nhập tới các bảng hoặc View mà Stored Procedure trỏ tới. - Cải tiến hiệu xuất thực hiện (Improve Performance): Stored Procedure có thể thực hiện rất nhiều công việc bằng các khối câu lệnh T-SQL, do đó khi thực hiện Stored Procedure sẽ cho kết quả nhanh hơn so vớ thực hiện riêng lẻ các câu lệnh đó. - Giảm thiểu lưu thông trên mạng (Redure Network Traffic): thay vì phải gửi hàng trăm câu lệnh từ Client lên Server, user có thể đóng gói các câu lệnh này vào trong một Stored Procedure rồi thực hiện. Khi đó, việc lưu thông trên mạng sẽ giảm thiểu một cách tối đa. * Trigger: là một dạng đặc biệt của Stored Procedure được tự động thực hiện khi user thực hiện thêm, sửa, xoá các bản ghi của bảng mà Trigger liên kết. Các đặc trưng của Trigger gồm: - Trigger đượcliên kết với một bảng. - Được tự động thực hiện khi user thực hiện thêm, sửa, xoá dữ liệu trên bảng. - Không được gọi một cách trực tiếp như Stored Procedure. - Là một phần của Transaction: Trigger có thể gọi lệnh ROLLBACK TRANSACTION thậm chí ngay cả khi không có lệnh BEGIN TRANSACTION trong Trigger. 3.5.1.6.Job Scheduling Cho phép đặt lịch thực hiện các tác vụ, các Stored Procedure hoặc các câu lện T-SQL theo thời gian 3.5.1.7. User – Defined Function Ta có thể định nghĩa các hàm để sử dụng trong các xử lý nghiệp vụ thông qua Stored Procedure mà không phụ thuộc váo các Built-in function. 3.5.1.8.Hỗ trợ lập trình thông qua nhiều Server Điều này thật hữu ích và là điều kiện tiên quyết để có thể xây dựng một ứng dụng có cơ sở dữ liệu phân tán. Nhờ đặc điểm này mà ta có thể: - Viết những câu lệnh SQL đặc biệt để truy nhập dữ liệu được lưu trữ trên Microsoft Server 2000 từ xa hay một nguồn dữ liệu thông qua OLE DB. - Tạo môi trường lien kết các SQL Server hay OLE DB. - Thực hiện truy vấn trên SQL Server liên kết. - Thực hiện một Stored Procedure trên một server từ xa hoặc một server liên kết. - Quản lý nghiệp vụ phân tán. - Sử dụng Distributed Transactions để sửa đổi sữ liệu phân tán. 3.5.1.9.Tính bảo mật cần thiết Các mức bảo mật (Level of Sercurity): có 4 mức cấp độ bảo mật: - Hệ điều hành: để kết nối với hệ phục vụ, một người dùng cần xem xét tỉ mỉ vài kiểu đăng nhập hệ điều hành nhằm truy cập hẹ thống hợp lệ. - SQL Server: để kết nối SQL Server, người dùng cần phải có đăng nhập SQL hợp lệ. - Database: để truy xuất cơ sở dữ liệu người dùng phải được cấp quyền trên cơ sở dữ liệu đó. - Đối tượng (Table, View, Stored Procedure):muốn truy cập một đối tượng trong cơ sở dữ liệu người dùng phải được cấp quyền trên đối tượng đó. Phân cấp tính bảo mật (Sercurity Hỉeachy): trong hệ phân cấp có 4 kiểu người dùng: quản trị viên hệ thống (SA), sở hữu chủ cơ sở dữ liệu (DBO), sở hữu chr đối tượng cơ sở dữ liệu (DBOO) và các người dùng khác. Quyền (Permision) + Quyền đối tượng (Object Permission): điều khiển việc truy cập và thao tác dữ liệu trên các đối tượng trong SQL Server. Khi ban muốn thực hiện một hành động trên một đối tượng, bạn phải có quyền thích hợp. Ví dụ: bạn muốn select * from table 1 thì bạn phảo có quyền select đối với bảng đó. Phân loại quyền đối tượng Kiểu đối tượng Hành động cụ thể Table Column View Stored Procedure Select, Update, Delete, Insert, Reference. Select, Update. Select, Update, Insert, Delete. Execute. + Quyền điều lệnh (Statement Permission): điều khiển việc những ai có thể xoá và tạo các đối tượng trong một có sở dữ liệu. Chỉ có SA và DBO mới có thể quản lý các quyền điều lệnh. Sau khi xem xét các tính năng của SQL Server 2000, ta tiến hành thiết kế cơ sở dữ liệu trên SQL Server 2000. 3.5.2. Thiết kế cơ sở dữ liệu bằng phương pháp mô hình hóa Coi mỗi khách hàng là một đơn vị quản lý. Trong mỗi khách hàng có các trường thuộc tính về khách hàng, các giao dịch,hoạt động chăm sóc khách hàng và các thông tin hỗ trợ cần thiết. Mỗi giao dịch có các thông tin liên quan đến dự án đó như: hợp đồng, kết quả cuộc gặp, ngày bắt đầu, ngày kết thúc, chi phí, tiến độ, tình trạng giao dịch… 3.5.3. Các bảng và mối quan hệ giữa các bảng trong cơ sơ dữ liệu * Sơ đồ quan hệ giữa các bảng trong cơ sở dữ liệu: Bảng khách hàng (Customer) Tên trường Kiểu dữ liệu Độ rộng Mô tả CustomerID Int 4 Mã khách hàng CompanyName Nvarchar 200 Tên công ty CompanyLogo Image 16 Logo của công ty EstablishDate SmallDatetime 4 Năm thành lập WebSiteUrl Nvarchar 50 Địa chỉ website MajorBusiness Nvarchar 200 Lĩnh vực kinh doanh Address Nvarchar 200 Địa chỉ liên hệ TelNo Nvarchar 50 Số điện thoại FaxNo Nvarchar 50 Số fax Email Nvarchar 50 Địa chỉ email CityID SmallInt 2 Mã thành phố CEOName Nvarchar 50 Giám đốc công ty EmployeeNo TinyInt 1 Số lượng nhân viên CreatedDate SmallDatetime 4 Ngày cập nhật thông tin ModifiedDate SmallDatetime 4 Ngày sửa thông tin CategoryID TinyInt 1 Mã nhóm khách hàng IndustryID Int 4 Mã ngành BankName Nvarchar 50 Tên ngân hàng BankAcctNo Nvarchar 50 Số tài khoản tại ngân hàng Description Nvarchar 500 Mô tả chung TaxNo Nvarchar 50 Mã số thuế Bảng các mối quan hệ (Contact) Tên trường Kiểu dữ liệu Độ rộng Mô tả ContactID Int 4 Mã người liên hệ CustomerID Nvarchar 4 Mã khách hàng ContactName Nvarchar 50 Tên người liên hệ ContactPosition Varchar 50 Vị trí làm việc ContactEmail Varchar 50 Địa chỉ email ContactPhone Varchar 20 Số điện thoại ContactAddress Nvarchar 50 Địa chỉ Department Nvarchar 50 Bộ phận CreatedDate SmallDatetime 4 Ngày tạo ra quan hệ ModifiedDate SmallDatetime 4 Ngày sửa BirthDate SmallDatetime 4 Ngày sinh Sex Char 1 Giới tính Hobby Nvarcahr 50 Sở thích Bảng các thông tin thêm về khách hàng (Customer Extention) Tên trường Kiểu dữ liệu Độ rộng Mô tả ExtensionID Int 4 Mã thông tin mở rộng ExtentionName Nvarchar 50 Tên thông tin mở rộng Description Nvarchar 1000 Mô tả chung Priority Smallint 2 CustomerID Int 4 Mã khách hàng Bảng nhóm khách hàng (CustomerCategory) Tên trường Kiểu dữ liệu Độ rộng Mô tả CusCategoryID Tiny 1 Mã nhóm khách hàng CusCategory Nvarchar 50 Tên nhóm khách hàng Bảng giao dịch (Deal) Tên trường Kiểu dữ liệu Độ rộng Mô tả DealID Int 4 Mã giao dịch DealName Nvarchar 50 Tên giao dịch ContactID Int 4 Mã người liên hệ StartDate SmallDatetime 4 Ngày bắt dầu CloseDate SmallDatetime 4 Ngày kết thúc Probability Varchar 12 Cơ hội thành công Description Nvarchar 1000 Mô tả chung Status Char 2 trạng thái giao dịch DealTypeID Int 4 Mã nhóm giao dịch Value Varchar 12 Giá trị giao dịch Bảng tài liệu giao dịch (Document) Tên trường Kiểu dữ liệu Độ rộng Mô tả DocumentID Int 4 Mã tài liệu giao dịch DocumentDesc Nvarchar 100 Mô tả chung DocumentName Nvarchar 50 Tên tài liệu DocumentFileName Nvarchar 50 Tên tệp tài liệu DocumentContent Image 16 Hìh ảnh tài liệu DealID Int 4 Mã giao dịch CaseID Int 4 Mã nghiệp vụ chăm sóc Bảng các hoạt động giao dịch (FollowUp) Tên trường Kiểu dữ liệu Độ rộng Mô tả FollowUpID BigInt 8 Mã hoạt động giao dịch FollowUpTypeID TinyInt 1 Mã nhóm FollowUpDate SmallDatetime 4 Ngày xảy ra hoạt động FollowUpTime Varchar 10 giờ xảy ra hoạt động Note Nvarchar 50 Ghi chú EmployeeID SmallInt 2 Mã nhân viên Status Bit 1 trạng thái hoạt động DealID Int 4 Mã giao dịch CaseID Int 4 Mã chăm sóc khách hàng Bảng chăm sóc, hỗ trợ khách hàng (Case) Tên trường Kiểu dữ liệu Độ rộng Mô tả CaseID Int 4 Mã chăm sóc khách hàng CaseName Nvarchar 50 Tên nghiệp vụ Description Nvarchar 100 Mô tả chung Status Bit 1 trạng thái hỗ trợ CloseDate SmallDatetime 4 Ngày hoàn thành ContactID Int 4 Mã người liên hệ Bảng nhân viên (Employee) Tên trường Kiểu dữ liệu Độ rộng Mô tả EmployeeID SmallInt 2 Mã nhân viên EmployeeName Nvarchar 50 Tên nhân viên DivisionID TinyInt 1 Mã phòng ban Email Varchar 50 Địa chỉ email Manager SmallInt 2 Người quản lý Bảng phòng ban (Division) Tên trường Kiểu dữ liệu Độ rộng Mô tả DivisionID TinyInt 1 Mã phòng ban DivisionName Nvarchar 50 Tên phòng ban Bảng người dùng (User) Tên trường Kiểu dữ liệu Độ rộng Mô tả UserID SmallInt 2 Mã người sử dụng UserName Varchar 20 Tên người sử dụng Password Varchar 20 Mật khẩu Active Bit 1 Hoạt động EmployeeID SmallInt 2 Mã nhân viên Bảng công việc (Task) Tên trường Kiểu dữ liệu Độ rộng Mô tả TaskID SmallInt 2 Mã công việc Task_Title Nvarchar 255 Tiêu đêd của công việc Task_Content Nvarchar 2000 Nội dung công viêc Task_Date SmallDatetime 4 Ngày thực hiện Task_Time Nvarchar 50 Giờ thực hiện Task_Customer Nvarchar 50 Công việc cho khách hàng nào UserID SmallInt 2 Mã người sử dụng Bảng nhân viên - chăm sóc khách hàng (CaseEmployee) Tên trường Kiểu dữ liệu Độ rộng Mô tả CaseID Int 4 Mã nghiệp vụ chăm sóc EmployeeID SmallInt 2 Mã nhân viên Bảng nhân viên - khách hàng (CustomerEmployee) Tên trường Kiểu dữ liệu Độ rộng Mô tả CustomerID Int 4 Mã khách hàng EmployeeID SmallInt 2 Mã nhân viên Bảng nhân viên – giao dịch (DealEmployee) Tên trường Kiểu dữ liệu Độ rộng Mô tả DealID Int 4 Mã giao dịch EmployeeID SmallInt 2 Mã nhân viên Bảng nhóm giao dịch (DealType) Tên trường Kiểu dữ liệu Độ rộng Mô tả DealTypeID Int 4 Mã nhóm giao dịch DealType Nvarchar 100 Tên nhóm giao dịch Bảng danh mục thành phố (City) Tên trường Kiểu dữ liệu Độ rộng Mô tả CityID SmallInt 2 Mã thành phố của khách hàng Cityname Nvarchar 50 Tên thành phố Bảng nhóm hoạt động giao dịch (FollowUpType) Tên trường Kiểu dữ liệu Độ rộng Mô tả FollowUpTypeID TinyInt 1 Mã nhóm hoạt động giao dịch FollowUpType Nvarchar 50 Tên nhóm hoạt động giao dịch Bảng ngành hoạt động của khách hàng (Industry) Tên trường Kiểu dữ liệu Độ rộng Mô tả IndustryID Int 4 Mã ngành IndustryName Nvarchar 50 Tên ngành Bảng số nhân viên trong công ty khách hàng (EmployeeNo) Tên trường Kiểu dữ liệu Độ rộng Mô tả EmployeeNoID TinyInt 1 Mã EmployeeNo Nvarchar 50 Số nhân viên Bảng danh mục quyền (Roles) Tên trường Kiểu dữ liệu Độ rộng Mô tả RoleID TinyInt 1 Mã quyền RoleName Nvarchar 50 Tên quyền Bảng chức năng (Functions) Tên trường Kiểu dữ liệu Độ rộng Mô tả FunctionID SmallInt 2 Mã chức năng ObjectName Nvarchar 50 Tên đối tượng Description Nvarchar 50 Mô tả chung URLIcon Varchar 150 Đường dẫn Icon Bảng quyền - người sử dụng (UserRoles) Tên trường Kiểu dữ liệu Độ rộng Mô tả UserID SmallInt 2 Mã người dùng RoleID TinyInt 1 Mã quyền Bảng quyền - chức năng (Authorization) Tên trường Kiểu dữ liệu Độ rộng Mô tả RoleID TinyInt 1 Mã quyền FunctionID SmallInt 2 Mã chức năng 3.6.Thiết kế giải thuật Trong các bước mô tả và phân tích công việc ở trên giúp chúng ta hình dung các công việc xử lý khi xây dựng các chức năng của chương trình. Tuy nhiên, để thuận tiện cho việc thiết kế các bước xử lý cũng như viết chương trình chúng ta nên xây dựng giải thuật xử lý các công việc chính, phức tạp. Dưới đây là các ký hiệu thường dùng trong thiết kế giải thuật: - Khối đầu: - Khối thao tác: - Khối kiểm tra: - Khối nhập/Xuất thông tin: - Đường mũi tên dùng để chỉ trình tự các bước cần thực hiện trong thuật toán: - Khối kết thúc: Thuật toán đăng nhập vào chương trình: Thuật toán thêm bản ghi vào các bảng: Thuật toán tìm kiếm Thuật toán lên báo cáo: Một số giao diện Màn hình đăng nhập Bạn phải nhập tên và mật khẩu những thông tin này do người có quyền cao nhất đưa cho bạn. Sau khi đăng nhập thành công bạn sẽ vào được giao diện sau: Có hai loại người dùng của hệ thống quản trị quan hệ khách hàng: - Quản trị :(quyền sử dụng cao nhất ) người có quyền sử dụng mọi tính năng của hệ thống. - Nhân viên thông thường: chỉ được sử dụng hạn chế trên một số tính năng thông thường. * Quản lý người sử dụng Ý nghĩa : của các nút : Tạo mới, Lưu lại, Xóa Tạo mới: tạo mới hoàn toàn một đối tuợng người dung. Lưu lại: khi bạn lựa chọn một hàng nào đó ở bảng, chi tiết sẽ được đưa lên phần trên của cửa sổ làm việc. Bạn thay đổi thông tin trên đó và nút Lưu lại sẽ ghi lại những thông tin đó vào cơ sở dữ liệu. Xóa: nút Xóa sẽ xóa đi hàng bạn chọn ở bảng phía dưới. *Hồ sơ khách hàng * Quản lý giao dịch * Tìm kiếm khách hàng -- Nếu bạn chỉ nhớ tên công ty có chứa một từ nào đó ,bạn nhập vào”từ khóa”, ngoài ra bạn có thể lựa chọn các thông tin khác (tỉnh/thành, ngành nghề, loại khách hàng) để tìm kiếm. --Kết quả tìm kiếm được liệt kê theo bảng ở phía dưới.Tại đây để xem chi tiết một công ty vừa tìm được è nháy đúp chuột trái (double-click) vào một hàng của bảng và chi tiết sẽ được hiển thị ở thanh chuyển (thông tin khách hàng). - Ngoài ra ta cũng có thể tìm theo thông tin người liên hệ. Cách tìm kiếm cũng tuơng tự như tìm kiếm khách hàng, và chi tiết về thông tin ngườì liên hệ sẽ được hiển thị ở thanh chuyển (thông tin liên hệ). Tìm kiếm theo người liên hệ Nếu bạn chỉ nhớ một phần của tên giao dịch è nhập vào tên giao dịch. Ngoài ra bạn cũng có thể tìm kiếm theo các yếu tố khác (tên công ty, tên liên hệ, nhân viên phụ trách ,…)è kết quả đựợc hiển thị theo bảng ở phía dưới Để xem chi tiết một hàng ,bạn kích đúp vào nó è chi tiết sẽ được hiển thị tại ở thanh chuyển (thông tin giao dịch). Ngoài ra ta cũng có thể tìm theo: + Thông tin hỗ trợ. + Thông tin liên hệ. * Quản lý báo cáo - Theo kiểu giao dịch: bạn chọn lựa các tiêu chí : ngày tháng,… để có thông báo theo ý muốn Khi đó báo cáo sẽ có dạng: - Báo cáo thông tin hỗ trợ: Báo cáo in ra có dạng: Form tạo báo cáo tiến trình thông tin khách hàng Báo cáo in ra sẽ có dạng Hướng phát triển của chương trình Song song với quá trình thiết kế và xây dựng chương trình em còn được tạo điều kiện để tìm hiểu và tiếp xúc với các công nghệ mới như: Microsoft.NET, XML, UML,COM, COM+…Đây chính là cơ sở để em có thể phát triển hệ thống theo hướng mới: Xây dựng database trên nền tảng SQL Server 2000 (hoặc Oracle). Xây dựng kiến trúc chương trình theo dạng COM+, sử dụng mô hình ba lớp (Presentation – Business Logic – Database). Xây dựng chương trình như úng dụng Web, sử dụng các công nghệ trên nền .NET Xây dựng chương trình than thiện và dễ sử dụng hơn. KẾT LUẬN Cùng với sự phát triển của công nghệ thông tin, tin học đang được áp dụng ngày càng nhiều vào đời sống thực tế và ngày càng trở nên không thể thiếu được trong quá trình phát triển của xã hội nói chung và của các công ty nói riêng. Lĩnh vực quản lý quan hệ khách hàng là một trong những lĩnh vực đòi hỏi tin học hoá cao. Với số lượng khách hàng lớn, đa dạng nếu dùng phương pháp thủ công sẽ tốn rất nhiều công sức và thời gian nhưng kết quả đạt được không cao. Ngược lại khi áp dụng tin học vào việc quản lý sẽ giảm bớt rất nhiều chi phí không đáng có mà hiệu quả công việc lại rất lớn…Chính vì vậy, quản lý quan hệ khách hàng là một đề tài đã được nghiên cứu và xây dựng rất nhiều. Tuy nhiên, tuỳ theo yêu cầu của mỗi công ty, doanh nghiệp mà cách thức quản lý là khác nhau. Do đó, đề tài vẫn là một vấn đề mới mẻ cần được nghiên cứu và phát triển. Chương trình được xây dựng hoàn toàn trên hướng mở nhằm có thể hoàn thiện và nâng cấp trong tương lai. Tuy nhiên, đây chưa phải là một chương trình hoàn chỉnh do còn có những hạn chế về mặt thực tế, kinh nghiệm cũng như thời gian. TÀI LIỆU THAM KHẢO 1.Giáo trình hệ thống thông tin quản lý, TS.Trương Văn Tú – TS.Trần Thị Song Minh, NXB Thống kê, Hà Nội,2000 2.Giáo trình cơ sở dữ liệu SQL, Access, Ths.Trần Công Uẩn, NXB Thống kê, Hà Nội,2000 3.Giáo trình phân tích hệ thống thông tin, Nguyễn Văn Vị, Hà Nội,2004 4.Microsoft HTML Help Workshop 5.Xây dựng và triển khai ứng dụng thương mại điện tử, Phạm Hữu Khang, NXB Lao động xã hội,2005 6. Lập trình với C#, Nguyễn Phương Lan, NXB Lao động xã hội,2004 PHỤ LỤC Login.cs private void OnReady(object sender, System.EventArgs e) { CRMUserControl objUserControl = new CRMUserControl(); try { String strUserName = loginControl1.Username; //String strPassWord = objUserControl.EncryptPassword(strUserName, loginControl1.Password); String strPassWord = loginControl1.Password; // kiem tra du username rong ko if(strUserName.Equals("")) { MessageBox.Show("Chưa có tên đăng nhập!","Thông báo"); return; } // kiem tra mat khau co rong ko if( strPassWord.Equals("")) { MessageBox.Show("Chưa có mật khẩu đăng nhập!","Thông báo"); return ; } //User Name exist if(CommonDA.IsExist(strUserName, "UserName", "Users",Common.GetConString())) { //check Password and Avtive Security objSecu = new Security(Common.GetConString()); UserDA objUser = new UserDA( Common.GetConString()); if(objSecu.PasswordValid(strUserName,strPassWord)) { errorLogin.SetError(txtUserName,""); this.Visible = false; // hien thi main int intUser = objSecu.getUserID(strUserName,strPassWord); int intEmployeeID = Convert.ToInt32( objUser.GetEmployeeID( intUser )); CRMMain objMain = new CRMMain( intUser, intEmployeeID ); objMain.Show (); } else { MessageBox.Show("Mật khẩu sai!","Thông báo"); } } // User Name not found else { MessageBox.Show("Tên đăng nhập không tồn tại!","LoginControl"); this.txtUserName.Focus(); this.txtUserName.SelectAll(); return; } } catch( Exception ex ) { MessageBox.Show( ex.Message); } } Customer.cs private void CRMCustomer_Load(object sender, System.EventArgs e) { try { //Load Tree View LoadListTreeView(); LoadCombo(); LoadListExtention(); LoadListContact(); this.toolTip1.SetToolTip(this.btnAnualRevenue, "Thêm loại doanh thu"); this.toolTip1.SetToolTip(this.btnAddCity, "Thêm tên thành phố"); this.toolTip1.SetToolTip(this.btnEmpNo, "Thêm số lượng nhân viên"); this.toolTip1.SetToolTip(this.btnCustomerCategory, "Thêm loại khách hàng"); this.toolTip1.SetToolTip(this.btnIndustry, "Thêm loại ngành nghề"); } catch( Exception ex ) { MessageBox.Show( ex.Message ); } cboPriority.SelectedIndex = 0; } private void btnCustomerAdd_Click(object sender, System.EventArgs e) { if( ValidateForm() ) { if( txtCusCompanyName.Text.Length != 0 ) { errorProvider.SetError( txtCusCompanyName,""); string strCompanyName = txtCusCompanyName.Text.Trim(); if( txtCusLogo.Text.Length != 0 ) byteImage = Common.WriteImage( txtCusLogo.Text.Trim()); DateTime dtEstablishDate = new DateTime(1900,01,01); if( dtpCusEstablishDate.Enabled ) dtEstablishDate = dtpCusEstablishDate.Value.Date; string strCEOName = txtCusCeoName.Text.Trim(); string strBankName = txtCusBankName.Text.Trim(); string strBankAcc = txtCusAccBank.Text.Trim(); string intCusCapital = txtCusCapital.Text.Trim(); string strDescription = txtCusDescription.Text.Trim(); string strTelNo = txtCusTelNo.Text.Trim(); string strFaxNo = txtCusFaxNo.Text.Trim(); string strEmail = txtCusEmail.Text.Trim(); string strAddress = txtCusAddress.Text.Trim(); string strWebUrl = txtCusWebUrl.Text.Trim(); string strTaxNo = txtCusTaxNo.Text.Trim(); string strABBRName = txtCusAbbrName.Text.Trim(); int intAnualRevenue = Convert.ToInt32( cboAnualRevenue.SelectedValue); string strMajorBusiness= Convert.ToString(cboMajorBusiness.Text); short intCity = Convert.ToInt16 ( cboCity.SelectedValue); int intEmployeeNo = Convert.ToInt32( cboEmpNo.SelectedValue ); int intCusCategory = Convert.ToInt32( cboCustomerCategory.SelectedValue ); int intIndustry = Convert.ToInt32( cboIndustry.SelectedValue); if( InsertCustomer( strCompanyName, byteImage, dtEstablishDate, intCusCapital, strWebUrl, strMajorBusiness, strAddress, strTelNo, strFaxNo, strEmail, intCity, strCEOName, intEmployeeNo, intCusCategory, intIndustry, strBankName, strBankAcc, intAnualRevenue, strDescription, strABBRName, strTaxNo ) > -1 ) ClearControlCustomer(); } else { errorProvider.SetError(txtCusCompanyName,"Bạn chưa nhập tên công ty!"); errorProvider.SetIconAlignment( txtCusCompanyName, ErrorIconAlignment.MiddleLeft); } } LoadListTreeView(); } private void btnExtentionAdd_Click(object sender, System.EventArgs e) { string extName = txtExtentionName.Text.Trim(); string extDes = txtExDescription.Text.Trim(); int intPriority; if( cboPriority.Text.Equals("Cao") ) intPriority = 1; else if( cboPriority.Text.Equals("Trung bình") ) intPriority = 2; else intPriority = 3; int customerId = this.m_intCustomerID; try { if ( extName.Length != 0 ) { if( CommonDA.IsExist( extName,"ExtentionName","CustomerExtension",Common.GetConString()) ) { errorProvider.SetError( txtExtentionName,"Tiêu đề này đã có trong danh sách!"); } else { errorProvider.SetError( txtExtentionName,""); errorProvider.SetError( txtExtentionName,""); CustomerExtensionDA objExt = new CustomerExtensionDA( Common.GetConString()); if( objExt.Insert( new CustomerExtensionDAInfo( extName, extDes, intPriority, customerId )) != -1) LoadListExtention(); } } else { errorProvider.SetError( txtExtentionName,"Chưa nhập tên tiêu đề!"); } } catch( Exception ex ) { MessageBox.Show( ex.Message ); } } private void btnExtentionUpdate_Click(object sender, System.EventArgs e) { MyListView objList = new MyListView(); int index = objList.SelectIndex( lvExtention ); if( index != -1 ) { int id = Convert.ToInt32( lvExtention.Items[index].SubItems[5].Text ); string extName = txtExtentionName.Text.Trim(); string extDes = txtExDescription.Text.Trim(); int intPriority; if( cboPriority.Text.Equals("Cao") ) intPriority = 1; else if( cboPriority.Text.Equals("Trung bình") ) intPriority = 2; else intPriority = 3; int customerId = this.m_intCustomerID; if( CommonDA.IsExistForEdit( extName,"ExtentionName", id, "ExtensionId", "CustomerExtension" ,Common.GetConString())) { if( UpdateExtention( id, extName, extDes, intPriority, customerId ) != -1 ) LoadListExtention(); } else { errorProvider.SetError( txtExtentionName,"Tên tiêu đề này đã có trong danh sách!"); } } } private void btnContacAdd_Click(object sender, System.EventArgs e) { try { int intCustomerId = this.m_intCustomerID; string strContactName = txtContactName.Text.Trim(); DateTime dtBirthDate = Convert.ToDateTime(dtpBirthDate.Value.ToShortDateString()); string strPosition = txtContactPosition.Text.Trim(); string strDepartment = txtContactDepartment.Text.Trim(); bool blnPrimary = chkPrimary.Checked; string strTelNo = txtContactTelNo.Text.Trim(); string strCellNo = txtContactCellNo.Text.Trim(); string strEmail = txtContactEmail.Text.Trim(); string strIM = txtContactIM.Text.Trim(); string strAddress = txtContactAddress.Text.Trim(); string sex = radioMale.Checked?"M":"F"; string hobby = txtContacHobby.Text.Trim(); if( InsertContact( intCustomerId, strContactName, strPosition, strEmail, strTelNo, strCellNo, strAddress, blnPrimary, strDepartment, strIM, dtBirthDate, sex, hobby ) != -1 ) LoadListContact(); } catch( Exception ex ) { MessageBox.Show( ex.Message ); } } private void lvExtention_SelectedIndexChanged(object sender, System.EventArgs e) { BindControlListExtension(); ControlButtonExtension(); } private void btnExtentionDelete_Click(object sender, System.EventArgs e) { MyListView objList = new MyListView(); int index = objList.SelectIndex( lvExtention ); if( index != -1 ) { if( MessageBox.Show("Bạn muốn xóa thông tin này!","Xác nhận!",MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes ) if( DeleteExtention( Convert.ToInt32( lvExtention.Items[index].SubItems[5].Text))!= -1 ) { LoadListExtention(); txtExDescription.Text = ""; txtExtentionName.Text = ""; } } } private void lvContact_SelectedIndexChanged(object sender, System.EventArgs e) { BindControlContact(); ControlButtonContact(); } private void btnContactUpdate_Click(object sender, System.EventArgs e) { MyListView objList = new MyListView(); int index = objList.SelectIndex( lvContact ); if( index != -1 ) { try { int id = Convert.ToInt32(lvContact.Items[index].SubItems[14].Text ); int intCustomerId = this.m_intCustomerID; string strContactName = txtContactName.Text.Trim(); DateTime dtBirthDate = Convert.ToDateTime(dtpBirthDate.Value.ToShortDateString()); string strPosition = txtContactPosition.Text.Trim(); string strDepartment = txtContactDepartment.Text.Trim(); bool blnPrimary = chkPrimary.Checked; string strTelNo = txtContactTelNo.Text.Trim(); string strCellNo = txtContactCellNo.Text.Trim(); string strEmail = txtContactEmail.Text.Trim(); string strIM = txtContactIM.Text.Trim(); string strAddress = txtContactAddress.Text.Trim(); string sex = radioMale.Checked?"M":"F"; string hobby = txtContacHobby.Text.Trim(); if( UpdateContact( id ,intCustomerId, strContactName, strPosition, strEmail, strTelNo, strCellNo, strAddress, blnPrimary, strDepartment, strIM, dtBirthDate, sex, hobby ) != -1 ) LoadListContact(); } catch( Exception ex ) { MessageBox.Show( ex.Message ); } } } public void contactReset() { txtContacHobby.Text = ""; txtContactAddress.Text = ""; txtContactCellNo.Text = ""; txtContactDepartment.Text = ""; txtContactEmail.Text = ""; txtContactIM.Text = ""; txtContactName.Text = ""; txtContactPosition.Text = ""; txtContactTelNo.Text = ""; } private void btnContacDelete_Click(object sender, System.EventArgs e) { MyListView objList = new MyListView(); int index = objList.SelectIndex( lvContact ); if( index != -1 ) { int id = Convert.ToInt32 (lvContact.Items[index].SubItems[14].Text); if( MessageBox.Show("Bạn muốn xóa thông tin này?","Xác nhận!",MessageBoxButtons.YesNo, MessageBoxIcon.Question )==DialogResult.Yes ) if( DeleteContact( id ) != -1 ) LoadListContact(); } contactReset(); } private void btnGetImage_Click(object sender, System.EventArgs e) { openFileDialog.AddExtension = true; openFileDialog.RestoreDirectory = true ; openFileDialog.Filter = "Files(*.GIF;*.JPG;*.PNG;*.JPEG;*.BMP;*.DOC;*.EXL;*.PDF;)|*.GIF;*.JPG;*.PNG;*.JPEG;*.BMP;*.DOC;*.EXL;*.PDF;"; if( openFileDialog.ShowDialog() == DialogResult.OK ) { txtCusLogo.Text = openFileDialog.FileName; } } private void btnCustomerDelete_Click(object sender, System.EventArgs e) { try { if( MessageBox.Show("Bạn muốn xóa thông tin này?","Xác nhận!", MessageBoxButtons.YesNo ) == DialogResult.Yes ) { CustomerDA objCus = new CustomerDA( Common.GetConString()); objCus.Delete( this.m_intCustomerID ); } ClearControlCustomer(); LoadListTreeView(); m_intCustomerID = 0; } catch( Exception ex ) { MessageBox.Show( ex.Message ); } } private void btnView_Click(object sender, System.EventArgs e) { try { if( txtCusLogo.Text.Length != 0 ) { CRMViewImage objView = new CRMViewImage(); objView.Path = txtCusLogo.Text.Trim(); objView.ShowDialog(); } else { if( logo.Length != 0 ) { string filename = "Logo.jpg"; FileStream fs = new FileStream(@".\"+filename,FileMode.Create ); fs.Write( logo,0,logo.Length ); fs.Close(); System.Diagnostics.Process.Start( filename ); } else MessageBox.Show( "Chưa có logo!","Thông báo!" ); } } catch( Exception ex ) { MessageBox.Show( "Chưa có logo!","Thông báo!" ); } } private void tabCustomerInfo_Click(object sender, System.EventArgs e) { CustomerDA objCus = new CustomerDA( Common.GetConString()); DataTable dtCus = objCus.getCustomerID( this.m_intCustomerID ).Tables[0]; DataRow dr = dtCus.Rows[0]; // hien thi du lieu chi tiet ve 1 khach hang BindingControlCustomerTree( dr ); LoadListViewAfterTreeSelect( this.m_intCustomerID ); LoadListExtentionAfter( this.m_intCustomerID ); } private void btnCustomerUpdate_Click(object sender, System.EventArgs e) { try { if( ValidateForm() ) { int customerID = this.m_intCustomerID; if( txtCusCompanyName.Text.Length != 0 ) { string strCompanyName = txtCusCompanyName.Text.Trim(); if( txtCusLogo.Text.Length != 0 ) { logo = Common.WriteImage( txtCusLogo.Text.Trim()); } DateTime dtEstablishDate = new DateTime(1900,01,01) ; if( dtpCusEstablishDate.Enabled ) dtEstablishDate = dtpCusEstablishDate.Value.Date; string strCEOName = txtCusCeoName.Text.Trim(); string strBankName = txtCusBankName.Text.Trim(); string strBankAcc = txtCusAccBank.Text.Trim(); string intCusCapital = txtCusCapital.Text.Trim() ; int intAnualRevenue = Convert.ToInt32( cboAnualRevenue.SelectedValue); string strMajorBusiness = cboMajorBusiness.Text; string strDescription = txtCusDescription.Text.Trim(); string strTelNo = txtCusTelNo.Text.Trim(); string strFaxNo = txtCusFaxNo.Text.Trim(); string strEmail = txtCusEmail.Text.Trim(); string strAddress = txtCusAddress.Text.Trim(); string strWebUrl = txtCusWebUrl.Text.Trim(); short intCity = Convert.ToInt16 ( cboCity.SelectedValue); int intEmployeeNo = Convert.ToInt32( cboEmpNo.SelectedValue ); int intCusCategory = Convert.ToInt32( cboCustomerCategory.SelectedValue ); int intIndustry = Convert.ToInt32( cboIndustry.SelectedValue); string strTaxNo = txtCusTaxNo.Text.Trim(); string strABBRName = txtCusAbbrName.Text.Trim(); if( txtCusLogo.Text.Length != 0 ) byteImage = Common.WriteImage( txtCusLogo.Text.Trim()); if ( intIndustry != 0) { if( UpdateCustomer( customerID,strCompanyName, logo, dtEstablishDate, intCusCapital, strWebUrl, strMajorBusiness, strAddress, strTelNo, strFaxNo, strEmail, intCity, strCEOName, intEmployeeNo, intCusCategory, intIndustry, strBankName, strBankAcc, intAnualRevenue, strDescription, strABBRName, strTaxNo ) > -1 ) //Xoa trang cac control của form khách hàng. ClearControlCustomer(); } else { errorProvider.SetError(cboIndustry,"Chưa chọn ngành nghề !"); } } } LoadListTreeView(); m_intCustomerID = 0; } catch(Exception ex) { MessageBox.Show( ex.Message ); } } private void CRMCustomer_Click(object sender, System.EventArgs e) { ControlButtonContact(); ControlButtonExtension(); } private void tabControl1_SelectedIndexChanged(object sender, System.EventArgs e) { if( m_intContactID != 0 ) { int i=0; if(m_dtContact != null) foreach( DataRow row in m_dtContact.Rows ) { i++; if( Convert.ToInt32(row["ContactID"]) == m_intContactID ) lvContact.Items[i-1].Selected = true; else lvContact.Items[i-1].Selected = false; } } if( m_dtContact != null ) m_dtContact = null; if(tabCustomerInfo.Focus() == true ) this.AcceptButton = this.btnCustomerAdd; if(tabContact.Focus() == true ) this.AcceptButton = this.btnContacAdd; if(tabExtention.Focus() == true ) this.AcceptButton = this.btnExtentionAdd; } private void BindingControlCustomerTree ( DataRow dr ) { // add vao cac control txtCustomerNameExtend.Text = dr["CompanyName"].ToString(); txtCustomerName.Text = dr["CompanyName"].ToString(); txtCusCompanyName.Text = dr["CompanyName"].ToString(); dtpCusEstablishDate.Value = Convert.ToDateTime(dr["EstablishDate"]); txtCusCapital.Text = dr["Capital"].ToString(); txtCusWebUrl.Text = dr["WebSiteUrl"].ToString(); txtCusAddress.Text = dr["Address"].ToString(); txtCusTelNo.Text = dr["TelNo"].ToString(); txtCusFaxNo.Text = dr["FaxNo"].ToString(); txtCusEmail.Text = dr["Email"].ToString(); cboCity.SelectedValue = dr["CityID"].ToString(); txtCusCeoName.Text = dr["CEOName"].ToString(); // thong tin ve nguoi nhan vien dang quan ly lblEmployee.Text = "NV quản lý: " + dr["EmployeeName"].ToString(); cboEmpNo.SelectedValue = dr["EmployeeNo"].ToString(); try { logo = (byte[])(dr["CompanyLogo"]); } catch(Exception ex) { } cboCustomerCategory.SelectedValue = dr["CategoryID"].ToString(); dtpCusCreateDate.Value = Convert.ToDateTime( dr["CreatedDate"].ToString() ); if( dr["ModifiedDate"].ToString().Length != 0 ) dtpCusModifiDate.Value = Convert.ToDateTime( dr["ModifiedDate"].ToString() ); cboCustomerCategory.SelectedValue = dr["CategoryID"].ToString(); string strIn = dr["IndustryID"].ToString(); cboIndustry.SelectedValue = dr["IndustryID"].ToString(); txtCusBankName.Text = dr["BankName"].ToString(); txtCusAccBank.Text = dr["BankAcctNo"].ToString(); cboMajorBusiness.SelectedText = dr["MajorBusiness"].ToString(); txtCusDescription.Text = dr["Description"].ToString(); cboAnualRevenue.SelectedValue = dr["AnualRevenue"].ToString(); txtCusAbbrName.Text = dr["ABBRName"].ToString(); txtCusTaxNo.Text = dr["TaxNo"].ToString(); } public void ControlButtonCustomerTree(int d) { if( d == 0 ) { btnCustomerDelete.Enabled = true; btnCustomerUpdate.Enabled = true; } else { btnCustomerDelete.Enabled = false; btnCustomerUpdate.Enabled = false; } } private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { contactReset(); logo = null; if (e.Node.Nodes.Count == 0) { txtExtentionName.Text = ""; txtExDescription.Text = ""; this.m_intCustomerID = Convert.ToInt32(e.Node.Tag.ToString()); displayLoad(); ControlButtonCustomerTree( e.Node.Nodes.Count ); } } public void DisplayOneCom(int nComID) { contactReset(); logo = null; txtExtentionName.Text = ""; txtExDescription.Text = ""; this.m_intCustomerID = nComID ; displayLoad(); ControlButtonCustomerTree( nComID ); btnCustomerDelete.Enabled = true ; btnCustomerUpdate.Enabled = true ; } public void displayLoad() { CustomerDA objCus = new CustomerDA( Common.GetConString()); DataTable dtCus = objCus.getCustomerID( this.m_intCustomerID ).Tables[0]; DataRow dr = dtCus.Rows[0]; BindingControlCustomerTree( dr ); LoadListViewAfterTreeSelect( this.m_intCustomerID ); LoadListExtentionAfter( this.m_intCustomerID ); } /***************************************************************************** * Load List Listview after select treeview *****************************************************************************/ private void LoadListViewAfterTreeSelect ( int _m_intCustomerID ) { try { lvContact.Items.Clear(); ContactDA objContact = new ContactDA( Common.GetConString()); DataTable dt = objContact.GetContactCus( _m_intCustomerID ).Tables[0]; ListViewItem objListItem; foreach( DataRow row in dt.Rows ) { objListItem = new ListViewItem( row["CompanyName"].ToString()); objListItem.SubItems.Add(row["ContactName"].ToString()); objListItem.SubItems.Add(row["ContactPosition"].ToString()); objListItem.SubItems.Add(row["ContactPhone"].ToString()); objListItem.SubItems.Add(row["ContactCellNo"].ToString()); objListItem.SubItems.Add(row["ContactEmail"].ToString()); objListItem.SubItems.Add(row["ContactAddress"].ToString()); objListItem.SubItems.Add( Convert.ToInt32 (row["Primary"])==1?"Đúng":"Không" ); objListItem.SubItems.Add(row["Department"].ToString()); objListItem.SubItems.Add(Convert.ToDateTime (row["CreatedDate"]).ToString("dd/MM/yyyy")); objListItem.SubItems.Add(Convert.ToDateTime( row["ModifiedDate"]).ToString("dd/MM/yyyy")); objListItem.SubItems.Add(row["IM"].ToString()); objListItem.SubItems.Add(row["BirthDate"].ToString()); objListItem.SubItems.Add(row["customerid"].ToString()); objListItem.SubItems.Add(row["ContactId"].ToString()); objListItem.SubItems.Add( row["Sex"].ToString().Equals("M")?"Nam":"Nữ"); objListItem.SubItems.Add( row["Hobby"].ToString()); lvContact.Items.Add( objListItem ); } } catch( Exception ex ) { MessageBox.Show( ex.Message ); } } /***************************************************************************** * End *****************************************************************************/ private void treeView1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { TreeNode tn = this.treeView1.GetNodeAt(e.X, e.Y); if(tn != null) { int currentNodeIndex = tn.Index; if(currentNodeIndex != oldNodeIndex) { oldNodeIndex = currentNodeIndex; if(this.toolTip1 != null && this.toolTip1.Active) this.toolTip1.Active = false; //turn it off this.toolTip1.SetToolTip(this.treeView1, tn.Text); this.toolTip1.Active = true; //make it active so it can show } } } private void btnAnualRevenue_Click(object sender, System.EventArgs e) { CRMCusAnualRevenue cusAn = new CRMCusAnualRevenue(); cusAn.ShowDialog(); AnualRevenueDA objAnual = new AnualRevenueDA( Common.GetConString()); Common.LoadComboBox( cboAnualRevenue, objAnual.GetAnualRevenue().Tables[0],"AnualRevenueName","AnualRevenueID"); } private void btnEmpNo_Click(object sender, System.EventArgs e) { CRMCusEmployeeNo cusEmpNo = new CRMCusEmployeeNo(); cusEmpNo.ShowDialog(); //Load data to cboEmployeeNo EmployeeNoDA objEmp = new EmployeeNoDA( Common.GetConString()); Common.LoadComboBox( cboEmpNo, objEmp.GetEmployeeNo().Tables[0],"EmployeeNo","EmployeeNoID"); } private void btnCustomerCategory_Click(object sender, System.EventArgs e) { CRMCusCustomerCategory cusCusCate = new CRMCusCustomerCategory(); cusCusCate.ShowDialog(); //Load data to cboCategory CustomerCategoryDA objCus = new CustomerCategoryDA( Common.GetConString()); Common.LoadComboBox( cboCustomerCategory,objCus.GetCustomerCategory().Tables[0],"CustomerCategory","CustomerCategoryID"); } private void btnIndustry_Click(object sender, System.EventArgs e) { CRMCusIndustry cusInd = new CRMCusIndustry(); cusInd.ShowDialog(); //Load data to cboIndustry IndustryDA objInd = new IndustryDA( Common.GetConString()); Common.LoadComboBox( cboIndustry, objInd.GetIndustry().Tables[0],"IndustryName","IndustryID"); } private void btnAddCity_Click(object sender, System.EventArgs e) { CRMCusCity cusCity = new CRMCusCity(); cusCity.ShowDialog(); //Load data to cboCity CityDA objCity = new CityDA( Common.GetConString()); Common.LoadComboBox( cboCity, objCity.GetCity().Tables[0],"CityName","CityID"); } private void chkDate_CheckedChanged(object sender, System.EventArgs e) { if( chkDate.Checked ) dtpCus_u115 ?tablishDate.Enabled = true; else dtpCus_u115 ?tablishDate.Enabled = false; } private void checkBox1_CheckedChanged(object sender, System.EventArgs e) { if( checkBox1.Checked ) dtpBirthDate.Enabled = true; else dtpBirthDate.Enabled = false; } private void lvContact_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { this.toolTip2.SetToolTip(lvContact, "Click vao đây để xem thông tin chi tiết (Xóa / Sửa)" ); } } } Menu.cs public class CRMMenu:MenuItem { CRMMain objMain;//new public CRMMenu(CRMMain main, int employeeId )//moi { objMain=main; m_intEmployeeID = employeeId; } private string m_MenuName; private int m_intEmployeeID; public CRMMenu(string text, EventHandler onClick) { this.Click += new EventHandler(onClick); } public string MenuName { get{return m_MenuName;} set{m_MenuName = value;} } public void OnMenuItemClick(object sender, EventArgs e) { CRMMenu menuItem = (CRMMenu)sender; /// Setup if(menuItem.MenuName.Equals("Authorization")) { // Focus.CRM.WinUI.Task childTask = new Focus.CRM.WinUI.Task(); // childTask.MdiParent = objMain; // childTask.Show(); } if(menuItem.MenuName.Equals("Role")) { CRMUserRole childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMUserRole) { // found it childForm = (CRMUserRole) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMUserRole(); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("User")) { CRMEmployee childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMEmployee) { childForm = (CRMEmployee) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMEmployee(); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("Exit")) { DialogResult d = MessageBox.Show("Bạn thật sự muốn thoát khỏi chương trình ?","Thoát",MessageBoxButtons.OKCancel,MessageBoxIcon.Question); if (DialogResult.OK == d) { Application.Exit(); } } // Customer if(menuItem.MenuName.Equals("Profile")) { CRMCustomer childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMCustomer) { // found it childForm = (CRMCustomer) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMCustomer( m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("CustomerDeal")) { CRMDeal childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMDeal) { // found it childForm = (CRMDeal) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMDeal(m_intEmployeeID); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("CustomerCase")) { CRMCase childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMCase) { // found it childForm = (CRMCase) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMCase( m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("Export Customer Infor")) { MessageBox.Show("Export Customer Infor "); } // Catalog if(menuItem.MenuName.Equals("Focus Catalog")) { MessageBox.Show("Focus Catalog"); } if(menuItem.MenuName.Equals("General Catalog")) { CRMCustomerInfo childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMCustomerInfo) { // found it childForm = (CRMCustomerInfo) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMCustomerInfo( ); childForm.MdiParent = objMain; childForm.Show(); } } //Search if(menuItem.MenuName.Equals("SearchCustomer")) { CRMSearch childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMSearch) { // found it childForm = (CRMSearch) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMSearch( m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("SearchContact")) { Begin childForm = new Begin( m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } /// report if(menuItem.MenuName.Equals("Monthly Deals")) { CRMReportDeal childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMReportDeal) { // found it childForm = (CRMReportDeal) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMReportDeal( m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("Monthly Cases")) { CRMReportCaseForm childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMReportCaseForm) { // found it childForm = (CRMReportCaseForm) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMReportCaseForm( m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("FollowUp by Employee")) { CRMReportEmployees childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMReportEmployees) { // found it childForm = (CRMReportEmployees) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMReportEmployees(); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("FollowUps by Customer")) { CRMReportCustomer childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMReportCustomer) { // found it childForm = (CRMReportCustomer) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMReportCustomer( m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } } // help if(menuItem.MenuName.Equals("Contents")) { MessageBox.Show("Contents"); } if(menuItem.MenuName.Equals("About")) { CRMAbout childForm = null; foreach (Form f in objMain.MdiChildren) { if (f is CRMAbout) { childForm = (CRMAbout) f; break; } } if ( childForm !=null) { childForm.Show(); } else { childForm = new CRMAbout(); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("ProfilePerson")) { CRMProfile childForm = null; foreach(Form f in objMain.MdiChildren) { if(f is CRMProfile) { // found it childForm = (CRMProfile) f; break; } } if( childForm != null) { childForm.Show(); } else { childForm = new CRMProfile( this.m_intEmployeeID ); childForm.MdiParent = objMain; childForm.Show(); } } if(menuItem.MenuName.Equals("ChangePass")) { ChangePass objChangepass = null; objChangepass = new ChangePass( this.m_intEmployeeID ); objChangepass.MdiParent = objMain; objChangepass.Show(); } } } } MỤC LỤC Trang

Các file đính kèm theo tài liệu này:

  • doc36434.doc
Tài liệu liên quan