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.
97 trang |
Chia sẻ: aloso | Lượt xem: 1705 | Lượt tải: 1
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:
- 34052.doc