Luận văn Xây dựng hệ thống thông tin quản lý khách hàng và tính cước dịch vụ 178 tại Trung tâm Viễn thông Hà Nội - Công ty Viễn thông Quân đội (Viettel)

Xây dựng, phát triển và nâng cấp các hệ thống thông tin trong các doanh nghiệp trong mọi lĩnh vực đã trở thành một yêu cầu, một tất yếu cuả thời đại. Với mỗi doanh nghiệp tuỳ thuộc vào lĩnh vực hoạt động mà đòi hỏi cho mình một hệ thống thông tin phù hợp. Đối với các doanh nghiệp kinh doanh, một trong những hệ thống thông tin cơ bản là hệ thống thông tin quản lý khách hàng. Hệ thống quản lý khách hàng hoạt động tốt sẽ tạo điều kiện thuận lợi cho sự phát triển của doanh nghiệp. Với những kiến thức có được sau 4 năm học và sự giúp đỡ của thầy cô, bạn bè, em đã hoàn thành luận văn tốt nghiệp đại học này. Trong luận văn, em đã quan tâm đến vấn đề quản lý khách hàng và tính cước sử dụng 178 tại Trung tâm Viễn thông Hà Nội. Chương trình đã đáp ứng được những yêu cầu cơ bản đối với một hệ thống thông tin. Ngoài ra, với giao diện thân thiện, đơn giản đã tạo cho người dùng sự dễ dàng và thuận tiện khi sử dụng.

doc97 trang | Chia sẻ: aloso | Lượt xem: 1536 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Xây dựng hệ thống thông tin quản lý khách hàng và tính cước dịch vụ 178 tại Trung tâm Viễn thông Hà Nội - Công ty Viễn thông Quân đội (Viettel), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
thiết bị hiện đại của tin học, chịu sự quản lý của một hệ thống chương trình máy tính, nhằm cung cấp thông tin cho nhiều người sử dụng khác nhau và cho những mục đích khác nhau. Ngôn ngữ lập trình Visual Foxpro Visual Foxpro giúp triển khai các ứng dụng quản lý một cách dễ dàng, giảm bớt được khối lượng lập trình nặng nhọc. Visual Foxpro hỗ trợ được lập trình hướng đối tượng, hỗ trợ khả năng thiết kế giao diện trực quan. Với Visual Foxpro cho phép người dùng sử dụng các câu lệnh đơn giản, hiệu quả và giao tác với người dùng bằng một giao diện thân thiện. Đây là ngôn ngữ lập trình rất thích hợp với chương trình quản lý khách hàng và tính cước mà em đang xây dựng, chính vì vậy em chọn ngôn ngữ này cho thiết kế chương trình quản lý khách hàng và tính cước của luận văn này. Chương III PHân tích, thiết kế hệ thống thông tin quản lý khách hàng và tính cước sử dụng 178 tại trung tâm viễn thông hà nội I. Phân tích yêu cầu 1. Phân tích yêu cầu bài toán Quản lý khách hàng là bài toán không mới, bởi với bất kỳ doanh nghiệp kinh doanh nào thì khách hàng là một yếu tố quan trọng quyết định sự thành công hay thất bại của doanh nghiệp đó. Tuy nhiên, khách hàng của mỗi doanh nghiệp đều có những điểm khác biệt không giống với doanh nghiệp khác. Khách hàng của Trung tâm Viễn thông Hà Nội hiện nay chủ yếu là khách hàng sử dụng dịch vụ 178 để gọi điện thoại liên tỉnh và quốc tế. Các khách hàng này đều thuộc địa bàn Hà Nội. Do đó những thông tin về những khách hàng này là không nhiều. Khách hàng quản lý theo khu vực với những cộng tác viên được giao nhiệm vụ thu cước. Về xác định giá cước dựa vào thời gian cuộc gọi và vùng theo quy định. Giá cước không cố định, biến đổi theo thời điểm và theo vùng. Cách tính cước cho các cuộc gọi sử dụng dịch vụ 178 cụ thể là: + Gọi liên tỉnh: Vùng 1: 727 đồng/1 phút Vùng 2: 1190 đồng/1 phút Vùng 3: 1490 đồng/1 phút + Gọi quốc tế: 0.58 $/1 block trong đó 1 block = 6 giây. Thời gian liên lạc tính đối với gọi liên tỉnh quy tròn theo đơn vị phút. Còn đối với gọi quốc tế phút đầu tính tròn, từ phút thứ hai tính theo block 6 giây. Quy trình quản lý dữ liệu khách hàng: - Hàng ngày, phòng tính cước nhận được từ Trung tâm dữ liệu thô về thông tin các cuộc gọi (gọi là file cước) của khách hàng sử dụng dịch vụ 178 (gọi chung là gọi VoIP). Dữ liệu này bao gồm dữ liệu về cuộc gọi đi trong nước và cuộc gọi đi quốc tế của các thuê bao Hà Nội. - Dữ liệu này đã được trung tâm xử lý tuy nhiên vẫn còn chưa chính xác hoàn toàn. - Nhân viên phòng tính cước sẽ lọc ra những khách hàng mới chưa có trong cơ sở dữ liệu. Trên cơ sở số điện thoại của khách hàng, nhân viên sẽ tra cứu địa chỉ của khách hàng đó. Tiếp theo với địa chỉ có được, tách ra phường, quận và ghép khách hàng cho cộng tác viên thu cước. Các thông tin này sẽ được cập nhật vào cơ sở dữ liệu. - Với file cước này, nhân viên sẽ phải tính tiền của các cuộc gọi. Hết một chu kỳ cước là từ ngày 01 đến ngày cuối cùng của tháng, số liệu cước phát sinh trong tháng được xử lý chuẩn. Với số liệu chuẩn, nhân viên sẽ in hoá đơn, in bảng kê chi tiết các cuộc gọi. - Hàng tháng, phòng tính cước nhận thông tin sửa đổi, cập nhật thêm thông tin của khách hàng từ cộng tác viên. Một khách hàng có thể có một hoặc nhiều thuê bao nên phải tách gộp thuê bao của khách hàng. - Khi có thắc mắc của khách hàng hay có yêu cầu tra cứu dữ liệu của phòng kinh doanh, nhân viên phòng tính cước sẽ tra cứu những dữ liệu này thông qua các câu lệnh thi hành trực tiếp trên các bảng dữ liệu có được. - Khi có thay đổi giá cước và phân chia lại cộng tác viên thì sẽ được cập nhật lại. 2. Mô tả bài toán quản lý khách hàng và tính cước Các chức năng chính: - Quản lý khách hàng theo cộng tác viên. - Cập nhật, sửa đổi thông tin của khách hàng khi có yêu cầu. - Xử lý các cuộc gọi và cập nhật thông tin chi tiết về các cuộc gọi. Các trường hợp cần xử lý cuộc gọi bao gồm: Các cuộc gọi lạ, là một trong những cuộc gọi sau: + Số máy hoặc số bị gọi có độ dài số không đúng quy định. + Số máy hoặc số bị gọi xuất hiện các ký tự không phải là số. + Đầu số của số máy, số bị gọi không đúng quy định. Các cuộc gọi trùng là các cuộc gọi: + Có cùng số máy chủ gọi và bị gọi. + Có cùng thời gian liên lạc. + Có cùng thời gian bắt đầu hoặc thời gian kết thúc. + Số máy chủ gọi không phải là thuê bao của ISDN. + Số máy chủ gọi không phải là mã của một chùm trung kế. Các cuộc gọi chờm là các cuộc gọi: + Có cùng số máy chủ gọi. + Số máy chủ gọi không phải là thuê bao của ISDN. + Số chủ gọi không phải là mã giả cho một chùm trung kế số. + Thời điểm bắt đầu của một cuộc gọi trong nhóm sau hoặc bằng thời điểm bắt đầu của một cuộc gọi bất kỳ trong nhóm hoặc thời điểm bắt đầu của một cuộc gọi trong nhóm trước hoặc bằng thời điểm kết thúc của một cuộc gọi bất kỳ trong nhóm. Các cuộc gọi liên tiếp là các cuộc gọi có thời gian ngắn là nhóm bao gồm các cuộc gọi sau: + Có cùng số máy chủ gọi. + Có cùng số máy bị gọi. + Thời gian liên lạc dưới 60 giây. + Khoảng cách giữa thời gian kết thúc cuộc gọi và thời gian bắt đầu cuộc gọi sau dưới 30 giây. + Nhóm các cuộc có ít nhất 3 cuộc trở lên. - Tách, gộp thuê bao. - Tra cứu cước nóng và dữ liệu khách hàng - Lên các báo cáo: + Báo cáo về doanh thu trong nước, quốc tế theo khoảng thời gian hoặc theo chu kỳ tuỳ theo yêu cầu nghiệp vụ của phòng kinh doanh thu cước. + Báo cáo về các thuê bao bỏ dùng, mới dùng theo chu kỳ tùy theo yêu cầu của bộ phận chăm sóc khách hàng. + Các bảng kê chi tiết các cuộc gọi của khách hàng. + Báo cáo theo yêu cầu của phòng ban, lãnh đạo. Dữ liệu vào: - Thông tin về khách hàng. - Thông tin về chi tiết các cuộc gọi. - Các thay đổi về cước. Sơ đồ luồng thông tin – IFD - Xem xét sơ đồ IFD của quá trình : + Tính cước phát sinh của khách hàng. + Cập nhật thông tin của khách hàng. - Các ký pháp sử dụng để biểu diễn sơ đồ luồng thông tin: + Xử lý: Thủ công Giao tác người – máy Tin học hoá hoàn toàn + Kho dữ liệu: Thủ công Tin học hóa + Dòng thông tin + Điều khiển Hình 3.1. Sơ đồ IFD quá trình tính cước của khách hàng Hình 3.2. Sơ đồ IFD quá trình cập nhật thông tin của khách hàng II. Mô hình hoá các yêu cầu của hệ thống Sơ đồ chức năng của hệ thống Hình 3.3. Mô hình chức năng của hệ thống 2. Sơ đồ luồng dữ liệu của hệ thống Hình 3.4. Sơ đồ ngữ cảnh của hệ thống Hình 3.5. Sơ đồ luồng dữ liệu mức 0 của hệ thống Hình 3.6. Sơ đồ luồng dữ liệu phân rã mức 1 của chức năng “Ghi thông tin cuộc gọi” Hình 3.7. Sơ đồ luồng dữ liệu mức 1 của chức năng “Cập nhật dữ liệu khách hàng” Hình 3.8. Sơ đồ luồng dữ liệu mức 1 của chức năng “Tra cứu” Hình 3.9. Sơ đồ luồng dữ liệu mức 1 chức năng “Báo cáo” 4. Các phích từ điển dữ liệu chính của chương trình - Các phích xử lý lôgic Phích xử lý lôgic Xử lý cuộc gọi Tên tiến trình : Xử lý cuộc gọi. Tiến trình : 1.2 Mô tả: Xử lý cuộc gọi như : cuộc gọi trùng, cuộc gọi liên tiếp, cuộc gọi chờm. Các luồng dữ liệu vào : thông tin về cuộc gọi nhận được từ Trung tâm điện thoại cố định . Các luồng dữ liệu ra : thông tin đã xử lý đầy đủ. Kho dữ liệu của xử lý : tệp hồ sơ cuộc gọi hoàn chỉnh. Phích xử lý lôgic Ghi thông tin khách hàng Tên xử lý : Ghi thông tin khách hàng. Tiến trình : 2.1 Mô tả : Hàng ngày đều có những khách hàng mới sử dụng dịch vụ 178 . Cán bộ phòng tin học sẽ ghi lại các thông tin về những khách hàng mới này. Các luồng dữ liệu vào : thông tin về cuộc gọi. Các luồng dữ liệu ra : thông tin về khách hàng Kho dữ liệu của xử lý : tệp hồ sơ khách hàng. Phích xử lý lôgic sửa thông tin khách hàng Tên xử lý : sửa thông tin khách hàng. Tiến trình : 2.2 Mô tả : Sửa đổi thông tin khách hàng theo yêu cầu. Các luồng dữ liệu vào : thông tin sửa đổi của khách hàng. Các luồng dữ liệu ra : thông tin đã sửa đổi. Kho dữ liệu của xử lý : tệp hồ sơ khách hàng. Mô tả lôgic của xử lý : hàng tháng, sau khi cộng tác viên thu tiền sử dụng của khách hàng thường có những thông tin mà khách hàng muốn sửa đổi như : thông tin về địa chỉ, thông tin về mã số thuế… Cán bộ phòng tin học sẽ xem thông tin của khách hàng trước khi sửa đổi. Sau đó sửa đổi các thông tin theo yêu cầu và lưu trữ vào cơ sở dữ liệu. Phích xử lý lôgic tra cứu cước nóng Tên xử lý : tra cứu cước nóng. Tiến trình : 3.1 Mô tả : tra cứu thông tin về các cuộc gọi của khách hàng theo yêu cầu của khách hàng hay các phòng ban như : phòng kinh doanh, phòng chăm sóc khách hàng... Các luồng dữ liệu vào : yêu cầu tra cứu của khách hàng hay phòng ban. Các luồng dữ liệu ra : thông tin về các cuộc gọi của khách hàng hay tiền cước phát sinh. Kho dữ liệu của xử lý : tệp thông tin về cuộc gọi. Mô tả lôgic của xử lý : khi cán bộ phòng tin học tra cứu thông tin về khách hàng mới sử dụng dịch vụ 178 sẽ có những khách hàng hỏi về thông tin các cuộc gọi đã sử dụng dịch vụ 178 như : ngày, giờ, nơi gọi đến, số máy gọi đến, tiền cước…. Hay khi các phòng ban muốn biết nhanh chóng doanh thu trong những khoảng thời gian nào đó để phục vụ công tác chuyên môn, các phòng ban sẽ yêu cầu tra cứu cước nóng. Khi có những yêu cầu này, cán bộ phòng tin học sẽ xem xét yêu cầu tra cứu của khách hàng hay phòng ban và trả lời các yêu cầu đó. Phích xử lý lôgic tra cứu dữ liệu khách hàng Tên xử lý : tra cứu dữ liệu khách hàng. Tiến trình : 3.2 Mô tả : tra cứu thông tin về khách hàng theo yêu cầu của các phòng ban hay phục vụ yêu cầu của chính các cán bộ phòng tin học. Các luồng dữ liệu vào : yêu cầu tra cứu của nhân viên hay phòng ban. Các luồng dữ liệu ra : thông tin khách hàng cần tra cứu. Kho dữ liệu của xử lý : tệp hồ sơ khách hàng. Mô tả lôgic của xử lý : khi cần biết thông tin về một khách hàng hay một thuê bao, cán bộ phòng tin học sẽ tra cứu những thông tin này dựa theo một tiêu thức nào đó để có thể có được những thông tin đầy đủ hơn. 6. Phích xử lý lôgic Báo cáo về cước Tên xử lý : Báo cáo liên quan đến cước. Tiến trình : 4.1 Mô tả : lập các báo cáo liên quan đến cước theo yêu cầu của các phòng ban hay của lãnh đạo như : báo cáo doanh thu trong nước, quốc tế, số cuộc gọi, lưu lượng cuộc gọi, sản lượng cuộc gọi… Các luồng dữ liệu vào : yêu cầu báo cáo của phòng ban hay lãnh đạo. Các luồng dữ liệu ra : các báo cáo liên quan đến cước. Kho dữ liệu của xử lý : tệp thông tin về cuộc gọi. Mô tả lôgic của xử lý : hàng tháng, phòng kinh doanh có yêu cầu các báo cáo liên quan đến cước. Hay khi cần, phòng kinh doanh và lãnh đạo cũng cần những báo cáo này, cán bộ phòng tin học khi nhận được yêu cầu sẽ lên các báo cáo tuỳ thuộc vào những tiêu thức như : thời gian, trong nước hay quốc tế.. 7. Phích xử lý lôgic Báo cáo về khách hàng Tên xử lý : Báo cáo liên quan đến khách hàng sử dụng dịch vụ 178. Tiến trình : 4.2 Mô tả : lập các báo cáo liên quan đến khách hàng theo yêu cầu của các phòng ban như : báo cáo thuê bao bỏ dùng, mới dùng trong nước và quốc tế, số lượng khách hàng mới phát sinh trong tháng… Các luồng dữ liệu vào : yêu cầu báo cáo của phòng ban hay lãnh đạo. Các luồng dữ liệu ra : các báo cáo liên quan đến khách hàng. Kho dữ liệu của xử lý : tệp hồ sơ khách hàng. Mô tả lôgic của xử lý : hàng tháng, bộ phận chăm sóc khách hàng có yêu cầu các báo cáo liên quan đến thuê bao bỏ dùng, mới dùng dịch vụ 178…. Hay khi cần, phòng kinh doanh cũng cần những báo cáo này, cán bộ phòng tin học khi nhận được yêu cầu sẽ lên các báo cáo tuỳ thuộc vào những tiêu thức như : thời gian, trong nước hay quốc tế.. III. Thiết kế hệ thống thông tin quản lý khách hàng Thiết kế cơ sở dữ liệu lôgic Phương pháp thiết kế cơ sở dữ liệu bằng phương pháp mô hình hoá Bước 1: mô tả mối quan hệ giữa các thực thể trong bài toán quản lý khách hàng và tính cước sử dụng 178 + Mỗi khách hàng có một hoặc nhiều thuê bao sử dụng dịch vụ 178. + Mỗi thuê bao có một hoặc nhiều cuộc gọi gọi liên tỉnh hay quốc tế có sử dụng dịch vụ 178. + Mỗi cuộc gọi gọi đến một nơi nhất định. + Mỗi một nơi có một hoặc nhiều cuộc gọi được thực hiện. + Mỗi một tỉnh thuộc một loại vùng nhất định. Mỗi một vùng như thế sẽ có một hoặc nhiều tỉnh tuỳ thuộc vào sự quy định chung của công ty. + Mỗi một vùng thuê bao lại có một mức giá cước nhất định tuỳ thuộc vào mức cước quy định của công ty. + Mỗi khách hàng thuộc một phường nhất định. + Mỗi quận huyện có một hay nhiều phường. + Mỗi quận huyện có một hay nhiều cộng tác viên thu tiền cước. + Mỗi cộng tác viên phụ trách thu tiền của khách hàng trong một hay nhiều phường tuỳ thuộc vào sự phân công của phòng kế hoạch và lao động. - Mô tả các thực thể : STT Kiểu thực thể ý nghĩa 1 Khách hàng Các khách hàng sử dụng dịch vụ 178. 2 Thuê bao Một khách hàng có một hay nhiều thuê bao. 3 Chi tiết cuộc gọi Thông tin về cuộc gọi mà thuê bao đã thực hiện. 4 Cộng tác viên Nhân viên thu tiền của khách hàng. 5 Cước vùng Mức giá cước được quy định cho từng vùng nhất định. 6 Tỉnh( thành phố) Là nơi các cuộc gọi đến. 7. Phường( xã) Là các đơn vị hành chính mà các khách hàng trú tại. 8 Quận(huyện) Một quận (huyện) có một hoặc nhiều phường(xã). Bước 2: Vẽ sơ đồ quan hệ thực thể ( ERD) Hình 3.10. Sơ đồ quan hệ thực thể của hệ thống Bước 3: Đưa ra một số thuộc tính riêng có của thực thể. Lúc này mô hình quan hệ thực thể như sau : Hình 3.11. Sơ đồ quan hệ thực thể với một số thuộc tính riêng có của thực thể Bước 4 : chuyển đổi sơ đồ quan hệ thực thể (ERD) sang sơ đồ cấu trúc dữ liệu (DSD) Hình 3.12. Sơ đồ cấu trúc dữ liệu của hệ thống Thiết kế biểu mẫu (form) và báo cáo (report) Form Đăng nhập hệ thống - Tên form : Login - Mục đích : kiểm tra tính hợp lệ và quyền của người sử dụng trước khi tham gia vào chương trình. - Kết cấu : + Một nhãn với hướng dẫn thực hiện để truy nhập chương trình. + Một textbox cho phép nhập tên truy nhập của người sử dụng. + Một textbox cho phép nhập mật khẩu của người sử dụng. + Một combobox cho phép chọn năm làm việc. + Hai nút: - Nút Đăng nhập : nếu tên và mật khẩu đúng sẽ cho phép vào chương trình. - Nút Thoát: thoát khỏi form. Form sửa thông tin của khách hàng - Tên form: Sửa khách hàng - Mục đích: sửa đổi thông tin khách hàng và các thuê bao của khách hàng đó. - Kết cấu: + Có 2 textbxox để điền thông tin về khách hàng cần sửa đổi thông tin đó là số thuê bao đại diện hoặc mã khách hàng. + Các nhãn và textbox thể hiện thông tin chi tiết về khách hàng cần sửa đổi . + Các nút lệnh: Nút Sửa đổi : cho phép sửa đổi thông tin về khách hàng. Nút Lưu : lưu giữ thông tin đã sửa đổi. Nút Chi tiết thuê bao : cho phép hiện ra một bảng chứa thông tin về các thuê bao của khách hàng. Nút Thoát : thoát khỏi form. Khi nhấn nút Chi tiết thuê bao ta sẽ có bảng chi tiết về thuê bao.Với bảng này ta có thể thêm, sửa, xoá thông tin về các thuê bao của khách hàng cần sửa đổi thông tin. Form cập nhật thông tin chi tiết cuộc gọi - Tên form : Cập nhật cuộc gọi - Mục đích : cập nhật thông tin chi tiết về các cuộc gọi của các thuê bao sử dụng gọi điện thoại đường dài và quốc tế sử dụng dịch vụ 178. - Kết cấu : + Một combobox : cho phép điền đường dẫn đến các tệp muốn cập nhật thông tin. + Nút lệnh Browse : cho phép chọn đường dẫn mà không cần phải tự điền đường dẫn vào combobox. + Nút Thực hiện : thực hiện cập nhật thông tin cuộc gọi từ các tệp theo đường dẫn. + Nút Thoát : thoát khỏi form. Report chi tiết cuộc gọi của khách hàng. - Tên report : báo cáo cước khách hàng. - Mục đích : trình bày thông tin chi tiết về các cuộc gọi của khách hàng theo từng thuê bao (số máy). - Kết cấu của report : + Phần tên report : bảng kê chi tiết cuộc gọi khách hàng. Thông tin về thời gian, tỷ giá của chu kỳ cước. + Phần thân report : hiện thông tin chi tiết về các cuộc gọi của thuê bao dưới dạng bảng bao gồm : ngày gọi, thời gian bắt đầu gọi, thời gian đã gọi, số máy gọi đến, tiền cước, nơi gọi đến. + Phần cuối report : tính tổng số tiền cước của thuê bao và của khách hàng. 3. Thiết kế giao diện và hội thoại Thiết kế giao diện của chương trình Chương trình sử dụng giao diện thực đơn ( menu) Các chức năng được phân cấp như sau: Hình 3.13. Sơ đồ modul “Cập nhật” của chương trình Hình 3.14. Sơ đồ modul “Tìm kiếm” của chương trình Hình 3.15. Sơ đồ modul “Báo cáo” của chương trình Hình 3.16. Sơ đồ modul “Hệ thống” của chương trình Thiết kế các hội thoại - Chương trình sử dụng rất nhiều hội thoại để giao tiếp với người sử dụng, nhằm tránh điền thông tin không chính xác và tạo sự thân thiện với người dùng. - Hội thoại thông báo cho người dùng khi người dùng không điền thông tin về thuê bao khi người dùng muốn xem cước nóng của thuê bao: - Hội thoại dùng khi người dùng muốn xoá thông tin về xã phường. Mục đích khẳng định lại thực sự có muốn xoá không : - Hội thoại dùng khi người dùng cập nhật dữ liệu về cuộc gọi mà dữ liệu này đã được cập nhật. Mục đích ngăn ngừa không cho cập nhật hai lần cùng một dữ liệu. 4. Thiết kế cơ sở dữ liệu mức vật lý Cơ sở dữ liệu bao gồm các bảng với các thuộc tính như sau : Bảng khách hàng (khach_hang.dbf) Lưu thông tin về các khách hàng sử dụng dịch vụ 178. Tên trường Kiểu và kích thước Giải thích Ma_kh Character (15) Mã khách hàng Ten_kh Character (55) Tên khách hàng Dia_chi Character (85) Địa chỉ Ngaybd Date(8) Ngày bắt đầu sử dụng dịch vụ 178 Mst Character (15) Mã số thuế Ma_xp Character (10) Mã xã phường Ma_ctv Character (15) Mã cộng tác viên Bảng thuê bao (thue_bao.dbf) Một khách hàng có một hoặc nhiều thuê bao, bảng thuê bao sẽ lưu thông tin về các thuê bao trực thuộc các khách hàng cụ thể. Tên trường Kiểu và kích thước Giải thích So_may Character (10) Số máy Ten_tbao Character (55) Tên thuê bao Dia_chi Character (85) Địa chỉ Ma_kh Character (20) Mã khách hàng Bảng chi tiết cuộc gọi (chitiet_cuocgoi.dbf) Lưu thông tin về các cuộc gọi mà các thuê bao thực hiện gọi đường dài và quốc tế có sử dụng dịch vụ 178 Tên trường Kiểu và kích thước Giải thích Ma_cg Character (35) Mã cuộc gọi Ngay Date (8) Ngày Giobd Character (6) Giờ bắt đầu So_may Character (10) Số máy Sobg Character (25) Số bị gọi Tgll Numeric (8) Thời gian liên lạc Donvi Numeric (8) Đơn vị( quy theo phút hay block) Vung Character (10) Vùng gọi Bảng mã vùng (vung.dbf) Mỗi cuộc gọi đều gọi đến một tỉnh hay thành phố trong nước hoặc quốc tế. Bảng mã vùng sẽ lưu thông tin về các vùng mà sử dụng được dịch vụ 178 gọi đến. Tên trường Kiểu và kích thước Giải thích Ma_vung Character (15) Mã vùng Ten_vung Character (40) Tên vùng Loai_gia Character (8) Loại giá cước Bảng cước theo vùng (cuoctheo_vung.dbf) Mỗi cuộc gọi thực hiện đều gọi đến một tỉnh hay một thành phố trong nước hay quốc tế. Và các tỉnh, thành phố này lại được phân theo các vùng nhất định. Với mỗi vùng lại có một mức giá cước. Giá cước tính theo đôla Mỹ với gọi quốc tế. Bảng này sẽ lưu các thông tin đó. Tên trường Kiểu và kích thước Giải thích Loai_gia Character (6) Loại giá cước Ten_vung Character (20) Tên vùng Ty_gia Numeric (8.2) Tỷ giá đôla Mỹ trong chu kỳ cước Bảng xã phường (xa_phuong.dbf) Mỗi khách hàng thuộc một phường nhất định.Bảng này lưu trữ các thông tin về phường( xã) nơi khách hàng thuộc về. Tên trường Kiểu và kích thước Giải thích Ma_xp Character (10) Mã phưỡng xã Ten_xp Character (35) Tên phường xã Ma_qh Character (10) Mã quận huyện Bảng danh mục quận huyện (dm_quanhuyen.dbf) Bảng này lưu trữ thông tin về quận, huyện. Mỗi quận, huyện có một hay nhiều phường, xã. Tên trường Kiểu và kích thước Giải thích Ma_qh Character (10) Mã quận huyện Ten_qh Character (30) Tên quận huyện Bảng cộng tác viên (dm_ctv.dbf) Bảng này lưu trữ thông tin về các cộng tác viên. Mỗi khách hàng quản lý thu tiền cước của một hay nhiều cộng tác viên thuộc một hay nhiều phường thuộc một quận, huyện nhất định. Tên trường Kiểu và kích thước Giải thích Ma_ctv Character (10) Mã cộng tác vien Ten_ctv Character (35) Tên cộng tác viên Ma_qh Character (10) Mã quận huyện IV. Triển khai hệ thống thông tin quản lý khách hàng và tính cước 1. Một số thuật toán sử dụng trong chương trình Thuật toán đăng nhập chương trình Thuật toán báo cáo cước nóng khách hàng Thuật toán sửa đổi thông tin khách hàng 2. Một số giao diện của chương trình Form cập nhật khách hàng : cho phép cập nhật thông tin về khách hàng mới hàng ngày. Có thể cập nhật từng khách hàng hoặc cập nhật nhiều khách hàng cùng một lúc. Form danh mục mã vùng: cho phép thêm, sửa, xoá thông tin về mã vùng gọi 178. Khi chọn nút thêm (hay ấn F4) form thêm vùng sẽ được mở với các nút : ghi và thoát. Khi nhấn nút sửa( hay ấn F3) để sửa thông tin cho vùng gọi VoIP quốc tế Canada, form sửa thông tin vùng sẽ được mở với các nút : nhận và thoát. Khi ấn nút xoá( hay ấn F8) để xoá thông tin vùng gọi VoIP quốc tế Canada, sẽ mở hộp thoại sau: Form gộp thuê bao. (Một khách hàng có nhiều thuê bao, tuy nhiên có những thuê bao trong cùng một công ty nhưng lại không cùng mã khách hàng với mã khách hàng của công ty. Khi có yêu cầu, sẽ gộp những thuê bao này vào cùng với công ty). Form tra cứu thông tin khách hàng Form tra cước nóng thuê bao Giả sử cho thuê bao (4).7236066 từ ngày 01/12/2004 đến 15/12/2004 ta có kết quả sau : Form báo cáo doanh thu quốc tế Giả sử chọn báo cáo từ ngày 01/12/2004 đến 15/12/2004 ta có kết quả : Form báo cáo thuê bao mới, bỏ dùng Giả sử chọn thời gian từ 01/12/2004 đến 15/12/2004 ta có kết quả sau : Form thêm mới, sửa đổi, xoá thông tin người dùng chương trình Khi chọn nút sửa, ta có kết quả : Hướng dẫn cài đặt và sử dụng Để chương trình có thể chạy được thì cần đạt được một số yêu cầu sau : Phần cứng Một máy PC với các thông só: Bộ xử lý có tốc độ tối thiểu là 350 Ram 32 trở lên ổ cứng còn trống ít nhất 150 MB Máy in Phần mềm Chương trình chạy được trong môi trường của hệ điều hành : Win9X, Win2K, WinXP. Yêu cầu cài đặt Visual Foxpro. Hướng dẫn sử dụng Để sử dụng chương trình, yêu cầu sao lưu toàn bộ thư mục có tên “QLKH” vào ổ C (hoặc ổ D) giữ nguyên tên hoặc đổi tên (Ví dụ : quan_ly_khach_hang). Chạy chương trình với đường dẫn phù hợp với bắt buộc phải có qlkh.app Ví dụ: C:\QLKH\qlkh.app hoặc C:\ quan_ly_khach_hang\qlkh.app Kết luận Xây dựng, phát triển và nâng cấp các hệ thống thông tin trong các doanh nghiệp trong mọi lĩnh vực đã trở thành một yêu cầu, một tất yếu cuả thời đại. Với mỗi doanh nghiệp tuỳ thuộc vào lĩnh vực hoạt động mà đòi hỏi cho mình một hệ thống thông tin phù hợp. Đối với các doanh nghiệp kinh doanh, một trong những hệ thống thông tin cơ bản là hệ thống thông tin quản lý khách hàng. Hệ thống quản lý khách hàng hoạt động tốt sẽ tạo điều kiện thuận lợi cho sự phát triển của doanh nghiệp. Với những kiến thức có được sau 4 năm học và sự giúp đỡ của thầy cô, bạn bè, em đã hoàn thành luận văn tốt nghiệp đại học này. Trong luận văn, em đã quan tâm đến vấn đề quản lý khách hàng và tính cước sử dụng 178 tại Trung tâm Viễn thông Hà Nội. Chương trình đã đáp ứng được những yêu cầu cơ bản đối với một hệ thống thông tin. Ngoài ra, với giao diện thân thiện, đơn giản đã tạo cho người dùng sự dễ dàng và thuận tiện khi sử dụng. Dù đã rất cố gắng nhưng do trình độ của bản thân còn hạn chế nên chương trình chưa được như mong muốn. Sau khi có điều kiện, chương trình sẽ được nâng cấp, mở rộng đi sâu hơn nữa để có thể trở thành phần mềm có ích và có khả năng ứng dụng trong nhiều doanh nghiệp. Qua quá trình thực tập cùng với thời gian làm luận văn, em đã có được những kinh nghiệm quý báu cho bản thân. Em xin chân thành cảm ơn thầy giáo TS. Trương Văn Tú, các thầy cô giáo trong Khoa Tin học kinh tế và các cán bộ phòng tính cước Trung tâm Viễn thông Hà Nội đã giúp đỡ và chỉ bảo em. Tài liệu tham khảo TS. Trương Văn Tú – TS. Trần Thị Song Minh Giáo trình hệ thống thông tin quản lý, Hà Nội, 2000. TS. Hàn Viết Thuận (chủ biên) Giáo trình tin học đại cương, NXB lao động – xã hội, 2002. VN – Guide và Đinh Xuân Lân tổng hợp và biên dịch Những bài thực hành Visual Foxpro, NXB Thống kê, Hà nội, 2004. Nguyễn Ngọc Minh Sử dụng và khai thác Visaual Foxpro 6.0, NXB Giáo dục, 2000. Phụ lục Một số chương trình nguồn cơ bản Cập nhật thông tin cuộc gọi * XU LY CAC CUOC GOI VA APPEN DU LIEU LUON set talk on set safe off set date dmy close table all local m,n,p,i, ng m=dd local cStartDir m.cStartDir = Lower(sys(5)+curdir()) use &m *if not open ('&m') then *=messagebox(' khong co') *return *else count to Scd index on dtoc(Ngay)+allt(Giobd)+allt(So_may)+allt(Sobg) to T uniq wait wind ' Dang xu ly cuoc goi va cap nhat du lieu' nowait copy to m.cStartDir+'Trunggian' close data *endi Creat table m.cStartDir+' Filexuly' (ma_cg C(36),Ngay D,Giobd C(6),; So_may C(10),Sobg C(18),Tgll N(8),donvi N(10),tien N(10),mabc C(10),vung C(10)) sele a use m.cStartDir+' filexuly' appen from m.cStartDir+'trunggian' count to Scc Trung=Scd-Scc * ghep ma cuoc goi cho tung cuoc goi repl all ma_cg with dtoc(ngay)+giobd+so_may * ghep ma buu cuc cho tung cuoc goi repl all mabc with 'PTO' for left((sobg),7)='1780210' repl all mabc with 'LCU' for left((sobg),6)='178023' repl all mabc with 'BGG' for left((sobg),7)='1780240' repl all mabc with 'BNH' for left((sobg),7)='1780241' repl all mabc with 'LSN' for left((sobg),6)='178025' repl all mabc with 'TQG' for left((sobg),6)='178027' repl all mabc with 'NBH' for left((sobg),6)='178030' repl all mabc with 'HPG' for left((sobg),6)='178031' repl all mabc with 'HDG' for left((sobg),7)='1780320' repl all mabc with 'QNH' for left((sobg),6)='178033' repl all mabc with 'HTY' for left((sobg),6)='178034' repl all mabc with 'NDH' for left((sobg),7)='1780350' repl all mabc with 'HNM' for left((sobg),7)='1780351' repl all mabc with 'THA' for left((sobg),6)='178037' repl all mabc with 'NAN' for left((sobg),6)='178038' repl all mabc with 'HTH' for left((sobg),6)='178039' repl all mabc with 'DLC' for left((sobg),6)='178050' repl all mabc with 'DNG' for left((sobg),7)='1780511' repl all mabc with 'HUE' for left((sobg),6)='178054' repl all mabc with 'PYN' for left((sobg),6)='178057' repl all mabc with 'KHA' for left((sobg),6)='178058' repl all mabc with 'GLI' for left((sobg),6)='178059' repl all mabc with 'DNI' for left((sobg),6)='178061' repl all mabc with 'BTN' for left((sobg),6)='178062' repl all mabc with 'VTU' for left((sobg),6)='178064' repl all mabc with 'BDG' for left((sobg),7)='1780650' repl all mabc with 'TNH' for left((sobg),6)='178066' repl all mabc with 'DTP' for left((sobg),6)='178067' repl all mabc with 'CTO' for left((sobg),6)='178071' repl all mabc with 'LAN' for left((sobg),6)='178072' repl all mabc with 'TGG' for left((sobg),6)='178073' repl all mabc with 'BTE' for left((sobg),6)='178075' repl all mabc with 'AGG' for left((sobg),6)='178076' repl all mabc with 'KGG' for left((sobg),6)='178077' repl all mabc with 'BLU' for left((sobg),7)='1780781' repl all mabc with 'STG' for left((sobg),6)='178079' repl all mabc with 'HCM' for left((sobg),5)='17808' * ghep ma 178 cuoc goi repl all vung with '1780210' for mabc ='PTO' repl all vung with '1780240' for mabc ='BGG' repl all vung with '1780241' for mabc ='BNH' repl all vung with '178025' for mabc ='LSN' repl all vung with '178027' for mabc ='TQG' repl all vung with '178030' for mabc ='NBH' repl all vung with '178031' for mabc ='HPG' repl all vung with '1780320' for mabc='HDG' repl all vung with '178033' for mabc='QNH' repl all vung with '178034' for mabc ='HTY' repl all vung with '1780350' for mabc ='NDH' repl all vung with '1780351' for mabc ='HNM' repl all vung with '178037' for mabc='THA' repl all vung with '178038' for mabc='NAN' repl all vung with '178039' for mabc='HTH' repl all vung with '178050' for mabc='DLC' repl all vung with '1780511' for mabc='DNG' repl all vung with '178054' for mabc='HUE' repl all vung with '178057' for mabc='PYN' repl all vung with '178058' for mabc='KHA' repl all vung with '178059' for mabc ='GLI' repl all vung with '178061' for mabc='DNI' repl all vung with '178062' for mabc ='BTN' repl all vung with '178064' for mabc='VTU' repl all vung with '1780650' for mabc='BDG' repl all vung with '178066' for mabc ='TNH' repl all vung with '178067' for mabc='DTP' repl all vung with '178071' for mabc ='CTO' repl all vung with '178072' for mabc ='LAN' repl all vung with '178073' for mabc='TGG' repl all vung with '178075' for mabc='BTE' repl all vung with '178076' for mabc='AGG' repl all vung with '178077' for mabc ='KGG' repl all vung with '1780781' for mabc ='BLU' repl all vung with '178079' for mabc='STG' repl all vung with '17808' for mabc='HCM' repl all vung with '178023' for mabc='LCU' *sele filexuly count to m go top n = alltr(str(day(ngay))) p = alltr(str(month(ngay))) i = alltr(str(year(ngay))) ng =ngay sele b use chitiet_cuocgoi inde on ngay to c3 seek ng if found() then if messagebox(' Dữ liệu này đã được cập nhật. Có nhập lại không', 36, ' Thông báo')= 6 then appen_cuocgoi.command1.setfocus return else appen_cuocgoi.release endi else appen from m.cStartDir+' filexuly' =messagebox(" Đã cập nhật được : "+ alltr(str(m))+ " cuộc gọi trong ngày "+ n+'/'+p+'/'+i, 16, 'Thông báo' ) endi use in chitiet_cuocgoi use in m.cStartDir+'filexuly' use in m.cStartDir+'trunggian2' release m,n,p,i,ng Sửa dữ liệu khách hàng Hiện thông tin khách hàng theo thuê bao đại diện LPARAMETERS nKeyCode, nShiftAltCtrl if nkeycode = 13 then set date dmy close table all public m,n m = alltr(thisform.text1.value) if len(m) 8 then =messagebox('Khong tim thay khach hang nao ',16) thisform.text1.setfocus else sele 1 use thue_bao n = lookup(thue_bao.ma_kh, alltr(m), thue_bao.so_may) if empty(n) then =messagebox('Khong tim thay khach hang nao ',16) thisform.text1.setfocus else sele 2 use khach_hang alias khach_hang p= alltr(lookup(khach_hang.ten_kh, alltr(n), khach_hang.ma_kh)) q= alltr(lookup(khach_hang.dia_chi, alltr(n), khach_hang.ma_kh)) t= alltr(lookup(khach_hang.ma_xp, alltr(n), khach_hang.ma_kh)) c= alltr(lookup(khach_hang.ma_ctv, alltr(n), khach_hang.ma_kh)) b= alltr(lookup(khach_hang.ma_st, alltr(n), khach_hang.ma_kh)) d= lookup(khach_hang.ngay_bd, alltr(n), khach_hang.ma_kh) thisform.txtmakh.value = n thisform.txtten.value = p thisform.txtdiachi.value=q thisform.txtmaqh.value=t thisform.txtmactv.value=c thisform.txtmst.value=b thisform.txtngay.value=d thisform.txtmakh.readonly =.T. thisform.txtten.readonly =.T. thisform.txtdiachi.readonly =.T. thisform.txtmaqh.readonly =.T. thisform.txtmactv.readonly =.T. thisform.txtngay.readonly=.T. thisform.txtmst.readonly=.T. use in khach_hang use in thue_bao ** TEN XA PHUONG sele 3 use maphuong mp=lookup(ten_xp, alltr(t), ma_xp) thisform.lbtenqh.caption= PADR(ALLTRIM(mp),20) use in maphuong ** TEN CONG TAC VIEN sele 4 use congtac_vien mc=lookup(ten_ctv, alltr(c), ma_ctv) thisform.lbtenctv.caption= PADR(ALLTRIM(mc),35) use in congtac_vien ** thisform.command3.enabled= .T. thisform.command4.enabled= .T. endi endi endi Lưu trữ thông tin đã sửa đổi SET SAFETY off SET EXACT on Private m_mk,m_tk, m_dc, m_qh, m_ctv, m_st, m_ngay m_mk=thisform.txtmakh.Value m_tk=thisform.txtten.Value m_dc=thisform.txtdiachi.Value m_xp=thisform.txtmaqh.Value m_ctv=thisform.txtmactv.Value m_st=thisform.txtmst.Value m_ngay= thisform.txtngay.Value IF EMPTY(thisform.txtmakh.Value) MESSAGEBOX("Ma khach hang khong the de trong") thisform.txtmakh.setfocus ELSE IF EMPTY(thisform.txtten.Value) then MESSAGEBOX("Tên khách hàng không được để trống!") thisform.txtten.setfocus ELSE use khach_hang LOCATE FOR ma_kh=m_mk AND ten_kh=m_tk AND dia_chi= m_dc AND ma_xp = m_xp AND ma_ctv= m_ctv; AND ma_st=m_st AND ngay_bd=m_ngay AND ma_kh m_mk IF FOUND() then MESSAGEBOX("Mã khách hàng và tên khách hàng đã có!") ELSE replace ma_kh WITH m_mk FOR ma_kh=m_mk replace ten_kh WITH m_tk FOR ma_kh=m_mk replace dia_chi WITH m_dc FOR ma_kh=m_mk replace ma_xp WITH m_xp FOR ma_kh=m_mk replace ma_ctv WITH m_ctv FOR ma_kh=m_mk replace ma_st WITH m_st FOR ma_kh=m_mk replace ngay_bd WITH m_ngay FOR ma_kh=m_mk use in khach_hang thisform.command4.enabled=.T. thisform.command3.enabled=.T. ENDIF ENDIF ENDIF Hiện danh mục thuê bao theo khách hàng ZOOM WINDOW SCREEN MAX &&_SCREEN.WINDOWSTATE = 2 M_ScrRow = SROW() M_ScrCol = SCOL() m_font_name='vntime' m_font_size=12 DEFINE WINDOW M_WinBrw FROM 00, 01 TO 450,610 COLOR SCHEME 10 FONT M_Font_name, M_Font_Size *CLOSE FLOAT GROW MINIMIZE ZOOM SYSTEM FONT M_Font_name, M_Font_Size public m m = alltr(edit_kh_2.txtmakh.value) if not used("thue_bao") then sele 3 use thue_bao orde so_may alias thue_bao set filter to ma_kh= m ON KEY LABEL F3 DO form edit_tbao ON KEY LABEL F4 DO form add_tbao ON KEY LABEL F8 DO xoa_tbao BROWSE; NOAPPEND NOMODIFY NODELETE ; WINDOW M_WinBrw ; TITLE 'Chi tiết thuê bao' + [. F3 - Sửa , F4-Thêm , F8 - Xoá , Esc-Quay ra] ; FONT '.Vntime', 12 ON KEY LABEL F3 ON KEY LABEL F4 ON KEY LABEL F8 endi return use in thue_bao *** Xoa thue bao PROCEDURE xoa_tbao PRIVATE _Ans, _RecNo *USE IN thue_bao exclusive _RecNo = RECNO() _Ans = messageBox(' Có chắc chắn xoá không?', 4+32+256, 'Chú ý') IF _Ans # 6 GO _Recno RETURN .T. ENDIF GO _Recno M.Status="*" DELETE *SET DELETED on pack RETURN .T. *** close all Báo cáo cước nóng khách hàng set talk off set safe off set date FREN local c, a, m public _fromdate, _todate,_year,_month,_ty_gia _fromdate= thisform.txtfromdate.value _todate= thisform.txttodate.value _year=alltr(thisform.combo2.value) _month= alltr(thisform.combo1.value) a= alltr(thisform.text1.value) C= 'QT' * CHON TY GIA close table all use cuoctheo_vung _ty_gia=lookup(ty_gia, alltr(c),cuoctheo_vung.loai_vung) use in cuoctheo_vung * Kiem tra du lieu nhap vao * khong chon so thue bao if empty(thisform.text1.value) then = messagebox(' Không chọn số thuê bao', 16 ) thisform.text1.setfocus return else if left(alltr(a),1)'4' then = messagebox('Phải thêm số 4 trước số máy',16) thisform.text1.setfocus return else if len(a) 8 then = messagebox('Không có số thuê bao này',16) thisform.text1.setfocus return else use thue_bao inde on so_may to c1 seek a if found() then m= alltr(so_may) else = messagebox('Không có số thuê bao này',16) thisform.text1.setfocus return endi use in thue_bao endi endi endi **** khong chon nam if empty(thisform.combo2.value) then = messagebox(' Khong chon nam cho chu ky cuoc', 16 ) thisform.combo2.setfocus return endi ** khong chon chu ky cuoc if thisform.opg2.value=1 then if empty(thisform.combo1.value) then = messagebox(' Khong chon chu ky cuoc', 16 ) thisform.combo1.setfocus return endi else IF (Thisform.txtToDate.Value > DATE()) OR (Thisform.txtFromDate.Value > THISFORM.txtToDate.Value) =messagebox(' Du lieu ngay nhap khong chinh xac', 64, 'Chu y' ) = 6 THISFORM.txtToDate.Setfocus RETURN ENDIF endi *** bat dau IF thisform.opg2.value=1 then do form frmdoi create cursor rpt_cuoc_kh ( so_may C(15), ten_tbao C(40),dia_chi C(80), ; ngay D, giobd C(6), sobg C(20), tgll N(5), donvi N(5),tien N(8), ten_vung C(35)) SELECT Thue_bao.so_may, Thue_bao.ten_tbao, Thue_bao.dia_chi,; Chitiet_cuocgoi.ngay, Chitiet_cuocgoi.giobd, Chitiet_cuocgoi.sobg,; Chitiet_cuocgoi.tgll, Chitiet_cuocgoi.donvi,; Chitiet_cuocgoi.donvi*Cuoctheo_vung.gia_cuoc*Cuoctheo_vung.ty_gia AS tien,; Ma_vung.ten_vung; FROM cdtt!cuoctheo_vung INNER JOIN cdtt!ma_vung; INNER JOIN cdtt!chitiet_cuocgoi; INNER JOIN cdtt!thue_bao ; ON Thue_bao.so_may = Chitiet_cuocgoi.so_may ; ON Ma_vung.ma_vung = Chitiet_cuocgoi.vung ; ON Cuoctheo_vung.loai_vung = Ma_vung.loai_vung; WHERE Chitiet_cuocgoi.donvi >= 1 AND MONTH(chitiet_cuocgoi.ngay)= val(_MONTH); AND YEAR(chitiet_cuocgoi.ngay) = val(_year); AND like(m,thue_bao.so_may); ORDER BY thue_bao.so_may; INTO CURSOR cuoc_kh SCAN INSER INTO rpt_cuoc_kh VALUE (cuoc_kh.so_may, cuoc_kh.ten_tbao, cuoc_kh.dia_chi,; cuoc_kh.ngay,cuoc_kh.giobd,cuoc_kh.sobg, cuoc_kh.tgll,; cuoc_kh.donvi, cuoc_kh.tien,cuoc_kh.ten_vung) ENDSCAN sele rpt_cuoc_kh repl all tien with tien *0.7 for ngay={^2004/12/04} or ngay={^2004/12/05} or ngay ={^2004/12/11} or ngay ={^2004/12/12} or ngay ={^2004/12/18}; or ngay ={^2004/12/19} or ngay ={^2004/12/25} or ngay ={^2004/12/26} or ngay ={^2005/01/01} or ngay ={^2005/01/02} or ngay ={^2005/01/08} or ngay ={^2005/01/09} ; or ngay ={^2005/01/15} or ngay ={^2005/01/16} or ngay ={^2005/01/22} or ngay ={^2005/01/23} or ngay ={^2005/01/29} or ngay ={^2005/01/30} repl all tien with tien*0.7 for giobd {^2004/12/11}and ngay {^2004/12/12}and ngay {^2004/12/18}; and ngay {^2004/12/19} and ngay {^2004/12/25} and ngay {^2004/12/26} and ngay {^2005/01/01} and ngay {^2005/01/02} and ngay {^2005/01/08} and ngay {^2005/01/09} ; and ngay {^2005/01/15} and ngay {^2005/01/16} and ngay {^2005/01/22} and ngay {^2005/01/23} and ngay {^2005/01/29} and ngay {^2005/01/30} repl all tien with tien*0.7 for giobd >='230000' and ngay != {^2004/12/04}and ngay!={^2004/12/05} and ngay {^2004/12/11}and ngay {^2004/12/12}and ngay {^2004/12/18}; and ngay {^2004/12/19} and ngay {^2004/12/25} and ngay {^2004/12/26} and ngay {^2005/01/01} and ngay {^2005/01/02} and ngay {^2005/01/08} and ngay {^2005/01/09} ; and ngay {^2005/01/15} and ngay {^2005/01/16} and ngay {^2005/01/22} and ngay {^2005/01/23} and ngay {^2005/01/29} and ngay {^2005/01/30} if Reccount() = 0 then frmdoi.release = messagebox(' Khong co du lieu de bao cao', 16, 'Thong bao') return endi do case case thisform.opg3.value =1 frmdoi.release report form rpt_cuoc_tb_thang preview case thisform.opg3.value =2 frmdoi.release report form rpt_cuoc_tb_thang to printe noconsole endcase use in rpt_cuoc_kh ELSE do form frmdoi create cursor rpt_cuoc_kh ( so_may C(15), ten_tbao C(40),dia_chi C(80), ; ngay D, giobd C(6), sobg C(20), tgll N(5), donvi N(5),tien N(8), ten_vung C(35)) SELECT Thue_bao.so_may, thue_bao.ten_tbao, thue_bao.dia_chi, Chitiet_cuocgoi.ngay, Chitiet_cuocgoi.giobd,; Chitiet_cuocgoi.sobg, Chitiet_cuocgoi.tgll, Chitiet_cuocgoi.donvi,; Chitiet_cuocgoi.donvi* Cuoctheo_vung.gia_cuoc* Cuoctheo_vung.ty_gia AS tien,; Ma_vung.ten_vung; FROM cdtt!thue_bao INNER JOIN cdtt!chitiet_cuocgoi; INNER JOIN cdtt!ma_vung; INNER JOIN cdtt!cuoctheo_vung ; ON Cuoctheo_vung.loai_vung = Ma_vung.loai_vung ; ON Ma_vung.ma_vung = Chitiet_cuocgoi.vung ; ON Thue_bao.so_may = Chitiet_cuocgoi.so_may ; WHERE Chitiet_cuocgoi.donvi >= 1 AND BETWEEN(chitiet_cuocgoi.ngay, _fromdate,_todate) AND YEAR(chitiet_cuocgoi.ngay)=val(_year); AND like(m,thue_bao.so_may); ORDER BY thue_bao.so_may; INTO CURSOR cuoc_kh SCAN INSER INTO rpt_cuoc_kh VALUE (cuoc_kh.so_may, cuoc_kh.ten_tbao, cuoc_kh.dia_chi,; cuoc_kh.ngay,cuoc_kh.giobd,cuoc_kh.sobg, cuoc_kh.tgll,; cuoc_kh.donvi, cuoc_kh.tien,cuoc_kh.ten_vung) ENDSCAN sele rpt_cuoc_kh repl all tien with tien *0.7 for ngay={^2004/12/04} or ngay={^2004/12/05} or ngay ={^2004/12/11} or ngay ={^2004/12/12} or ngay ={^2004/12/18}; or ngay ={^2004/12/19} or ngay ={^2004/12/25} or ngay ={^2004/12/26} or ngay ={^2005/01/01} or ngay ={^2005/01/02} or ngay ={^2005/01/08} or ngay ={^2005/01/09} ; or ngay ={^2005/01/15} or ngay ={^2005/01/16} or ngay ={^2005/01/22} or ngay ={^2005/01/23} or ngay ={^2005/01/29} or ngay ={^2005/01/30} repl all tien with tien*0.7 for giobd {^2004/12/11}and ngay {^2004/12/12}and ngay {^2004/12/18}; and ngay {^2004/12/19} and ngay {^2004/12/25} and ngay {^2004/12/26} and ngay {^2005/01/01} and ngay {^2005/01/02} and ngay {^2005/01/08} and ngay {^2005/01/09} ; and ngay {^2005/01/15} and ngay {^2005/01/16} and ngay {^2005/01/22} and ngay {^2005/01/23} and ngay {^2005/01/29} and ngay {^2005/01/30} repl all tien with tien*0.7 for giobd >='230000' and ngay != {^2004/12/04}and ngay!={^2004/12/05} and ngay {^2004/12/11}and ngay {^2004/12/12}and ngay {^2004/12/18}; and ngay {^2004/12/19} and ngay {^2004/12/25} and ngay {^2004/12/26} and ngay {^2005/01/01} and ngay {^2005/01/02} and ngay {^2005/01/08} and ngay {^2005/01/09} ; and ngay {^2005/01/15} and ngay {^2005/01/16} and ngay {^2005/01/22} and ngay {^2005/01/23} and ngay {^2005/01/29} and ngay {^2005/01/30} if Reccount() = 0 then frmdoi.release = messagebox(' Khong co du lieu de bao cao', 16, 'Thong bao') return endi do case case thisform.opg3.value =1 frmdoi.release report form rpt_cuoc_tb_ngay preview case thisform.opg3.value =2 frmdoi.release report form rpt_cuoc_tb_ngay to printe noconsole endcase use in rpt_cuoc_kh use in cuoc_kh endi release c,a,m Tách thuê bao Hiện thông tin các thuê bao của khách hàng có thuê bao cần tách LPARAMETERS nKeyCode, nShiftAltCtrl if nkeycode = 13 then close table all public _ma_kh local m, n m = alltr(thisform.text2.value) if len(m) 8 then =messagebox('Khong tim thay khach hang nao ',16) else sele 1 use thue_bao n = lookup(thue_bao.ma_kh, alltr(m), thue_bao.so_may) if empty(n) then =messagebox('Khong tim thay khach hang nao ',16) thisform.text2.setfocus return else sele so_may, ten_tbao,dia_chi, ma_kh from cdtt!thue_bao where like(n, ma_kh) into cursor thu sele thu _ma_kh= alltr(thu.ma_kh) if reccount() 0 then thisform.list1.clear SCAN thisform.list1.AddListItem(so_may,recno(),1) thisform.list1.AddListItem(ten_tbao,recno(),2) thisform.list1.AddListItem(dia_chi,recno(),3) thisform.list1.AddListItem(ma_kh,recno(),4) ENDSCAN else = messagebox(' Không tìm thấy khách hàng nào', 16, 'Thông báo') thisform.text2.setfocus return endi THISform.lbtotal.Caption = PADR(ALLTRIM(STR(THISform.list1.ListCount)),5) use in thu use in thue_bao endi endi endi release m, n Thực hiện việc tách thuê bao close all set talk off set safe off local m, sm,dc,tbao,sm1 sm = alltr(thisform.text1.value) if len(sm) 8 then =messagebox('Không tìm thấy số thuê bao này ',16) thisform.text1.setfocus return else sele so_may, ten_tbao, dia_chi, ma_kh from cdtt!thue_bao where alltr(so_may)= alltr(sm) and alltr(ma_kh) = alltr(_ma_kh) into cursor thu sele thu sm1= alltr(thu.so_may) dc= thu.dia_chi tbao= thu.ten_tbao if reccount() 0 then m= "HNI" +alltr(sm1)+"tttt" sele 1 use khach_hang inde on ma_kh to c1 seek _ma_kh if found() then cngbd= khach_hang.ngay_bd cmst= khach_hang.ma_st cmctv= khach_hang.ma_ctv cmxp=khach_hang.ma_xp endi inser into khach_hang( ma_kh, ten_kh, dia_chi, ngay_bd, ma_st, ma_xp, ma_ctv) values (m, tbao, dc ,cngbd, cmst, cmxp, cmctv) sele 2 use thue_bao repl ma_kh with alltr(m) for alltr(so_may)=alltr(sm) else =messagebox('Không tìm thấy số thuê bao này ',16) thisform.text1.setfocus return endi endi use in khach_hang use in thue_bao local m, sm,dc,tbao,sm1 if messagebox(' Có tiếp tục tách nữa không?' , 36, ' Thông báo') = 6 then thisform.text1.setfocus return else thisform.release endi 5.Tìm kiếm thông tin khách hàng Tìm kiếm chính xác theo thuê bao đại diện LPARAMETERS nKeyCode, nShiftAltCtrl if nkeycode = 13 then close table all public m,n m = alltr(thisform.pg.p1.text1.value) sele 1 use thue_bao n = lookup(thue_bao.ma_kh, alltr(m), thue_bao.so_may) if empty(n) then =messagebox('Khong tim thay khach hang nao ',16) thisform.pg.p1.text1.setfocus else sele 2 use khach_hang alias khach_hang p= alltr(lookup(khach_hang.ten_kh, alltr(n), khach_hang.ma_kh)) q= alltr(lookup(khach_hang.dia_chi, alltr(n), khach_hang.ma_kh)) t= alltr(lookup(khach_hang.ma_xp, alltr(n), khach_hang.ma_kh)) c= alltr(lookup(khach_hang.ma_ctv, alltr(n), khach_hang.ma_kh)) b= alltr(lookup(khach_hang.ma_st, alltr(n), khach_hang.ma_kh)) d= lookup(khach_hang.ngay_bd, alltr(n), khach_hang.ma_kh) thisform.pg.p1.txtmakh.value = n thisform.pg.p1.txtten.value = p thisform.pg.p1.txtdiachi.value=q thisform.pg.p1.txtmaqh.value=t thisform.pg.p1.txtmactv.value=c thisform.pg.p1.txtmst.value=b thisform.pg.p1.txtngay.value=d use in khach_hang use in thue_bao ** TEN XA PHUONG sele 3 use maphuong m=lookup(ten_xp, alltr(t), ma_xp) thisform.pg.p1.lbtenqh.caption= PADR(ALLTRIM(m),20) use in maphuong ** TEN CONG TAC VIEN sele 4 use congtac_vien m=lookup(ten_ctv, alltr(c), ma_ctv) thisform.pg.p1.lbtenctv.caption= PADR(ALLTRIM(m),30) use in congtac_vien ** sele so_may, ten_tbao, dia_chi from cdtt!thue_bao where ma_kh = alltr(n) into cursor thu sele thu if reccount() 0 then thisform.pg.p1.list2.clear SCAN thisform.pg.p1.list2.AddListItem(so_may,recno(),1) thisform.pg.p1.list2.AddListItem(ten_tbao,recno(),2) thisform.pg.p1.list2.AddListItem(dia_chi,recno(),3) ENDSCAN endi THISform.pg.p1.lbtotal.Caption = PADR(ALLTRIM(STR(THISform.pg.p1.list2.ListCount)),5) use in thu endi endi Tìm kiếm tương đối theo tên khách hàng LPARAMETERS nKeyCode, nShiftAltCtrl if nkeycode = 13 then close table all public m,n n= upper(alltr(thisform.pg.p2.text1.value)) sele ma_kh,ten_kh,dia_chi from cdtt!khach_hang where n $ upper(alltr(ten_kh)) into cursor thu sele thu if reccount() = 0 then =messagebox('Khong tim thay khach hang nao ',16) thisform.pg.p2.text1.setfocus else thisform.pg.p2.list2.clear SCAN thisform.pg.p2.list2.AddListItem(ma_kh,recno(),1) thisform.pg.p2.list2.AddListItem(ten_kh,recno(),2) thisform.pg.p2.list2.AddListItem(dia_chi,recno(),3) ENDSCAN endi THISform.pg.p2.label3.Caption = PADR(ALLTRIM(STR(THISform.pg.p2.list2.ListCount)),5) use in thu endi 6. Thêm, sửa, xoá thông tin người dùng Sự kiện click để lựa chọn công việc LPARAMETER ccode ccode=cCurrentUser THISFORM.CurrentKey = ALLTRIM(cCode) *set procedure to ctmatma DO CASE CASE thisform.opg1.value= 1 THISform.Caption = "Tạo người dùng mới" THISform.cmdAdd.Caption = "\<Thêm" *THISform.txtUsername.Enabled = .F. *THISform.txtPassword.Enabled = .F. *THISform.txtright.Enabled = .F. *THISform.txtConfirm.Enabled = .F. CASE thisform.opg1.value= 2 THISform.txtUsername.Enabled = .F. THISform.txtPassword.Enabled = .T. THISform.txtright.Enabled = .T. THISform.txtConfirm.Enabled = .T. THISform.Caption = "Sửa đổi thông tin người dùng " THISform.cmdAdd.Caption = "\<Lưu" SELECT * FROM usertab WHERE ALLTRIM(Username) == ALLTRIM(cCode) INTO CURSOR GetUserinfo THISform.txtUsername.Value = Username THISform.txtPassword.Value = Lower(alltr(Password)) THISform.txtConfirm.Value = THISform.txtPassword.Value THISform.txtright.Value = quyen USE IN GetUserInfo *THISform.cmdRight.Enabled = .F. CASE thisform.opg1.value= 3 THISform.Caption = "Xoá bỏ thông tin người dùng" THISform.cmdAdd.Caption = "\<Xoá" SELECT * FROM usertab WHERE ALLTRIM(Username) == ALLTRIM(cCode) into CURSOR GetUserinfo THISform.txtUsername.Value = Username THISform.txtPassword.Value = Lower(alltr(Password)) THISform.txtConfirm.Value = THISform.txtPassword.Value THISform.txtright.Value = quyen USE IN GetUserInfo *THISform.cmdRight.Enabled = .F. ENDCASE Nút lưu set safe off set talk off set date dmy *set procedure to ctmatma DO CASE CASE THISFORM.opg1.value=1 DO CASE CASE THIS.Caption = "\<Thêm" THIS.Caption = "\<Lưu" THISform.txtUsername.Enabled = .T. *THISform.txtPassword.Enabled = .T. *THISform.txtright.Enabled = .T. *THISform.txtConfirm.Enabled = .T. *THIS.Parent.cmdRight.Enabled = .F. THIS.Parent.txtUsername.Value = "" THIS.Parent.txtPassword.Value = "" THIS.Parent.txtConfirm.Value = "" THIS.Parent.txtright.Value="" THIS.Parent.txtUsername.Setfocus CASE THIS.Caption = "\<Lưu" *THISform.txtUsername.Enabled = .F. *THISform.txtPassword.Enabled = .F. *THISform.txtright.Enabled = .F. *THISform.txtConfirm.Enabled = .F. cUsername = alltr(THIS.Parent.txtUsername.Value) cPassword = alltr(THIS.Parent.txtPassword.Value) cConfirm = alltr(THIS.Parent.txtConfirm.Value) cright=alltr(THIS.Parent.txtright.Value) IF EMPTY(cUsername) messagebox(' Tên không được để trống', 16, 'Thông báo') THIS.Parent.txtUsername.Setfocus RETURN ENDIF IF EMPTY(cPassword) messagebox(' Mật khẩu không được để trống', 16, 'Thông báo') THIS.Parent.txtpassword.Setfocus RETURN ENDIF IF EMPTY(cright) messagebox(' Quyền không được để trống', 16, 'Thông báo') THIS.Parent.txtright.Setfocus RETURN ENDIF SELECT Username FROM Usertab WHERE !Deleted() ; AND ALLTRIM(Username) == cUsername INTO CURSOR GetUsername IF Reccount() # 0 = messagebox(' Đã có tên người dùng này', 16, 'Thông báo') THIS.Parent.txtUsername.Setfocus USE IN GetUsername RETURN ENDIF USE IN GetUsername IF cPassword == cConfirm INSERT INTO Usertab VALUE (cUsername, Upper(cPassword), cright) USE IN Usertab THIS.Caption = "\<Thêm" ELSE = messagebox( "Mật khẩu không đúng, hãy kiểm tra lại.", 16, 'Thông báo') THIS.Parent.txtPassword.Setfocus RETURN ENDIF ENDCASE CASE THISFORM.opg1.value= 2 DO CASE CASE THIS.Caption = "\<Sửa" CASE THIS.Caption = "\<Lưu" cUsername = alltr(THISFORM.txtUsername.Value) cPassword = alltr(THISFORM.txtPassword.Value) cright = alltr(THISFORM.txtright.Value) UPDATE Usertab SET Password = upper(cPassword),quyen = cright ; WHERE ALLTRIM(Username) == ALLTRIM(cUsername) USE IN Usertab THIS.Caption = "\<Sửa" THIS.Enabled = .F. *THISFORM.cmdRight.Enabled = .T. ENDCASE CASE THISFORM.opg1.value= 3 IF THIS.Caption = "\<Xoá" if messagebox(' Bạn có chắc chắn xoá không?' , 36, 'Thông báo') = 6 then close table all use usertab exclusive inde on username to c4 m= alltr(thisform.txtusername.value) seek m if found() delete pack endi return else return endi ENDIF ENDCASE

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

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