Xây dựng mô hình quản lý CSDL hóa đơn tiền điện, thực hiện chương trình quản lý hệ thống trên Oracle
Vai trò của hệ thống thông tin rất quan trọng. Đối với công tác kinh doanh điện năng, thông qua hệ thống thông tin khách hàng chúng ta có thể đánh giá hiệu quả kinh doanh mang lại. Những người đang trực tiếp làm việc trên hệ thống này cũng như những người truy xuất khai thác số liệu đều nhận thấy Hệ thống quản lý thông tin khách hàng hiện nay có nhiều hạn chế. Nguyên nhân chính là sự lệ thuộc vào cách thức quản lý thông tin theo kiểu cũ, do đó hàng loạt những ứng dụng phát triển dựa trên nền tảng CSDL của hệ thống này cũng bị ảnh hướng theo cách quản lý đó. Xuất phát từ lý do trên, chúng tôi đề ra một mô hình quản lý thông tin mới nhằm đáp ứng tốt các yêu cầu của công tác quản lý kinh doanh điện năng. Đồng thời đối với bản thân hệ thống thông tin, nó sẽ tuân thủ theo những nguyên tắc chuẩn mực của một hệ quản trị cơ sở dữ liệu, bên cạnh đó hệ thống đáp ứng tốt các yêu cầu thông tin của các hệ thống quản lý khác.
1. Lý do chọn đề tài :
- Khối lượng thông tin đồ sộ do khách hàng ngành Điện lớn và gia tăng nhanh.
- Bảo đảm ổn định của hệ thống trước những thay đổi của chính sách giá điện, thuế, quy hoạch dân cư Giảm rủi ro về tính tin cậy của dữ liệu.
- Là nền tảng để phát triển các ứng dụng trong hệ thống.
- Là cơ sở để kết nối, chia sẻ tài nguyên với các hệ thống khác.
2. Mục đích :
- Giảm các chi phí : bảo trì, vận hành, nâng cấp và phát triển hệ thống.
- Bảo đảm độ tin cậy, tính nhất quán và bảo mật dữ liệu (mặt chất lượng)
- Đa dạng hóa thông tin quản lý (mặt số lượng).
- Tạo nền tảng & cơ cở để phát triển các ứng dụng và liên kết với các hệ thống khác : GIS, DSM
- Nâng cao tính linh hoạt của hệ thống nhờ các phương pháp quản lý CSDL hiện đại (ngôn ngữ lập trình hướng đối tượng, ngôn ngữ vấn tin có cấu trúc) giảm bớt cách thể hiện bằng ngôn ngữ lập trình theo dạng thủ tục.
3. Ý nghĩa :
- Đem lại sự thống nhất, quy củ chặt chẽ của CSDL làm nền tảng để nâng cấp, kết nối và phát triển của toàn hệ thống. Từ đó nâng cao hiệu quả của công tác quản lý & kinh doanh điện năng.
- Tiếp cận & sử dụng công nghệ mới.
,TENDC FROM KH_1; INSERT INTO KH_(MAKH,TENDC) SELECT MAKH,TEN||' '||SONHA||' '||TENDUONG FROM KH_2; PROMPT GOM KH TU TIEN CREATE VIEW K1 (MADK,NGAYHL) AS SELECT DISTINCT MADK, NGAYHL FROM TIEN; CREATE VIEW K2 (MADK,NGAYHL,LOTRINH,RATIO,NN,MAKH,MSTHUE,MADL) AS SELECT K1.MADK, K1.NGAYHL , DK.DK_LOTRINH, DK.DK_RATIO, DK.DK_NN_MA, DK.DK_KH_MA,DK.DK_MASOTHUE, DK.DK_TPP_DL_MA FROM K1,DK WHERE K1.MADK=DK.DK_MA AND K1.NGAYHL=DK.DK_NGAYHL; /* KQ */ PROMPT TAO VIEW TTKH CREATE VIEW TTKH (MADK,NGAYHL,LOTRINH,RATIO,NN,TENDC,MSTHUE,MAKH,MADL) AS SELECT K2.MADK,K2.NGAYHL,K2.LOTRINH,K2.RATIO,K2.NN,KH_.TENDC,K2.MSTHUE,K2.MAKH, K2.MADL FROM K2,KH_ WHERE K2.MAKH=KH_.MAKH; PROMPT TAO REPORT CREATE VIEW IN_ (MADK,NGAYHL,LOTRINH,RATIO,NN,TENDC,MSTHUE,MAKH,CSMOI,CSNGUNG,DNTT,CSCU,KY,DOT,SOHO,MSGB,CAPDA,DMDK,TYLE,BAC,GIA,MADL) AS SELECT TTKH.MADK,TTKH.NGAYHL,TTKH.LOTRINH,TTKH.RATIO,TTKH.NN,TTKH.TENDC,TTKH.MSTHUE,TTKH.MAKH,TIEN.CSMOI,TIEN.CSNGUNG,TIEN.DNTT,TIEN.CSCU,TIEN.KY,TIEN.DOT,TIEN.SOHO,TIEN.MSGB,TIEN.CAPDA,TIEN.DMDK,TIEN.TYLE,TIEN.BAC,TIEN.GIA, TTKH.MADL FROM TTKH,TIEN WHERE TTKH.MADK=TIEN.MADK AND TTKH.NGAYHL=TIEN.NGAYHL; /*---CO THE TAO REPORT-- */ CREATE TABLE INHOADON ( MADK VARCHAR2(7), NGAYHL DATE, LOTRINH VARCHAR2(6), RATIO NUMBER(7), NN VARCHAR2(2), TENDC VARCHAR2(50), MSTHUE VARCHAR2(20), MAKH VARCHAR2(7), CSMOI NUMBER(7), CSNGUNG NUMBER(7), DNTT NUMBER(12), CSCU NUMBER(7), SOHO NUMBER(3), MSGB VARCHAR2(2), CAPDA VARCHAR2(2), DMDK VARCHAR2(3), TYLE NUMBER(3), BAC NUMBER(3), GIA NUMBER(9,3), MADL VARCHAR2(1), TENDL VARCHAR2(15), DTHOAI VARCHAR2(15), PHIENTINH NUMBER(2), KYTINH VARCHAR2(6), DOTTINH VARCHAR2(1), KY VARCHAR2(2), NAM VARCHAR2(4), TYGIA NUMBER(8,3), DMDKIN VARCHAR2(2)); INSERT INTO INHOADON (MADK,NGAYHL,LOTRINH,RATIO,NN,TENDC,MSTHUE,MAKH,CSMOI,CSNGUNG, DNTT,CSCU,SOHO,MSGB,CAPDA,DMDK,TYLE,BAC,GIA, MADL, TENDL, DTHOAI, PHIENTINH, KYTINH, DOTTINH, KY, NAM,TYGIA,DMDKIN) SELECT DISTINCT IN_.MADK,IN_.NGAYHL,IN_.LOTRINH,IN_.RATIO,IN_.NN,IN_.TENDC,IN_.MSTHUE,IN_.MAKH, IN_.CSMOI,IN_.CSNGUNG,IN_.DNTT,IN_.CSCU,IN_.SOHO,IN_.MSGB,IN_.CAPDA, IN_.DMDK,IN_.TYLE,IN_.BAC,IN_.GIA, IN_.MADL, DL.DL_TEN, DL.DL_SODIENTHOAI, &&PHIEN_,TO_CHAR(&&KY_), TO_CHAR(&&DOT_), SUBSTR(TO_CHAR(&&KY_),5,2), SUBSTR(TO_CHAR(&&KY_),1,4), &&TYGIA, SUBSTR(IN_.DMDK,1,2) FROM IN_, DL WHERE IN_.MADL=DL.DL_MA AND IN_.GIA<1; INSERT INTO INHOADON (MADK,NGAYHL,LOTRINH,RATIO,NN,TENDC,MSTHUE,MAKH,CSMOI,CSNGUNG, DNTT,CSCU,SOHO,MSGB,CAPDA,DMDK,TYLE,BAC,GIA, MADL, TENDL, DTHOAI, PHIENTINH, KYTINH, DOTTINH, KY, NAM,TYGIA,DMDKIN) SELECT DISTINCT IN_.MADK,IN_.NGAYHL,IN_.LOTRINH,IN_.RATIO,IN_.NN,IN_.TENDC,IN_.MSTHUE,IN_.MAKH, IN_.CSMOI,IN_.CSNGUNG,IN_.DNTT,IN_.CSCU,IN_.SOHO,IN_.MSGB,IN_.CAPDA, IN_.DMDK,IN_.TYLE,IN_.BAC,IN_.GIA, IN_.MADL, DL.DL_TEN, DL.DL_SODIENTHOAI, &&PHIEN_,TO_CHAR(&&KY_), TO_CHAR(&&DOT_), SUBSTR(TO_CHAR(&&KY_),5,2), SUBSTR(TO_CHAR(&&KY_),1,4), 1,SUBSTR(IN_.DMDK,1,2) FROM IN_, DL WHERE IN_.MADL=DL.DL_MA AND IN_.GIA>1; /* --------------------- */ PROMPT XOA BIEN UNDEFINE KY_; UNDEFINE PHIEN_; UNDEFINE DOT_; UNDEFINE TYGIA; COMMIT; PROMPT SQL Writen by THAI HOANG TRINH - PHAM XUAN THAO, July 1999. II. FORM CODE QUẢN LÝ ĐIỆN KẾ : --Kiem tra moi khi them hay sua doi dien ke thi dien ke do --phai duoc nhap Dinh muc dien ke va tong cua chung phai la 100% IF :SYSTEM.RECORD_STATUS = 'NEW' THEN COMMIT; END IF; IF :SYSTEM.RECORD_STATUS IN ('CHANGED','INSERT') THEN DECLARE TONGTYLE NUMBER :=0; BEGIN SELECT SUM(DMDK_TYLE)INTO TONGTYLE FROM DMDK WHERE DMDK_DK_MA=:DK.DK_MA AND DMDK_DK_NGAYHL=:DK.DK_NGAYHL AND DMDK_DK_NGAYKYHD=:DK.DK_NGAYKYHD GROUP BY DMDK_DK_MA, DMDK_DK_NGAYHL, DMDK_DK_NGAYKYHD; IF TONGTYLE100 THEN MESSAGE('Xin bn hºy nhp li ˜M˜K - tng ca 1 ˜iƯn k lª 100% - Ban da nhap '||TO_CHAR(tongtyle)); RAISE FORM_TRIGGER_FAILURE; END IF; Exception when no_data_found then BEGIN IF :DMDK.DMDK_TYLE100 THEN MESSAGE('Xin hay nhap lai Ty le =100'); GO_BLOCK('DMDK'); RAISE FORM_TRIGGER_FAILURE; END IF; END; COMMIT; END; COMMIT; END IF; GO_BLOCK('KH'); --Kiem tra phan dinh muc dien ke cho mot dien ke --tong cac ty le dung cua mot dien ke phai la 100% --MESSAGE(:SYSTEM.RECORD_STATUS); DECLARE TYLE NUMBER :=0; BEGIN SELECT SUM(DMDK_TYLE)INTO TYLE FROM DMDK WHERE DMDK_DK_MA=:DK.DK_MA AND DMDK_DK_NGAYHL=:DK.DK_NGAYHL AND DMDK_DK_NGAYKYHD=:DK.DK_NGAYKYHD GROUP BY DMDK_DK_MA, DMDK_DK_NGAYHL, DMDK_DK_NGAYKYHD; IF :SYSTEM.RECORD_STATUS ='NEW' THEN SELECT TYLE-DMDK.DMDK_TYLE+:DMDK.DMDK_TYLE INTO TYLE FROM DMDK WHERE DMDK_DK_MA=:DK.DK_MA AND DMDK_DK_NGAYHL=:DK.DK_NGAYHL AND DMDK_DK_NGAYKYHD=:DK.DK_NGAYKYHD AND DMDK_TTDM_MA=:TTDM.TTDM_MA; ELSE SELECT TYLE-DMDK.DMDK_TYLE+:DMDK.DMDK_TYLE INTO TYLE FROM DMDK WHERE DMDK_DK_MA=:DK.DK_MA AND DMDK_DK_NGAYHL=:DK.DK_NGAYHL AND DMDK_DK_NGAYKYHD=:DK.DK_NGAYKYHD AND DMDK_TTDM_MA=:TTDM.TTDM_MA; END IF; IF TYLE100 THEN MESSAGE('Xin bn hºy nhp li ˜M˜K - tng ca 1 ˜iƯn k lª 100%- BAN MOI NHAP DUOC' || TO_CHAR(TYLE)); RAISE FORM_TRIGGER_FAILURE; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN IF :DMDK.DMDK_TYLE>100 THEN MESSAGE('Xin hay nhap lai Ty le <=100'); RAISE FORM_TRIGGER_FAILURE; END IF; END; END; LỊCH GHI ĐIỆN PROCEDURE ADD_KPD IS BEGIN IF (:KY.KY_KY IS NOT NULL) THEN BEGIN GO_BLOCK('KY'); COMMIT; DECLARE CURSOR C IS SELECT COUNT(KPD.KPD_KY_KY) SO_REC FROM KPD KPD GROUP BY KPD_KY_KY WHERE kpd.kpd_ky_ky=:KY.KY_KY; SOREC NUMBER; BEGIN OPEN C; FETCH C INTO SOREC; -- IF C%NOTFOUND THEN -- RAISE NO_DATA_FOUND; -- END IF; CLOSE C; IF SOREC=0 OR SOREC IS NULL THEN BEGIN DECLARE KYNHAP VARCHAR2(6) :=:KY.KY_KY; CURSOR T IS SELECT KYNHAP KY, PD.PD_PH_PHIEN PHIEN, PD.PD_DOT_DOT DOT FROM PD PD ORDER BY PHIEN,DOT; REC T%ROWTYPE; BEGIN OPEN T; LOOP FETCH T INTO REC; EXIT WHEN T%NOTFOUND; BEGIN INSERT INTO KPD(KPD_KY_KY, KPD_PD_PH_PHIEN, KPD_PD_DOT_DOT) VALUES (REC.KY, REC.PHIEN, REC.DOT ); EXCEPTION WHEN OTHERS THEN NULL; END; END LOOP; CLOSE T; COMMIT; END; END; ELSE MESSAGE('Bn ¢º nhp ri, kh¤ng cÇn nhp li'); END IF; END; END; END IF; END; *------------------------ PhÇn kiĨm sot cho Nhp k mìi FUNCTION KYMOI RETURN VARCHAR2 IS BEGIN DECLARE TEST VARCHAR2(6); KY_MOI VARCHAR2(6); ND DATE; NC DATE; BEGIN SELECT MAX(KY.KY_KY),KY.KY_NGAYDAU,KY.KY_NGAYCUOI INTO TEST,ND,NC FROM KY; -- IF (ND IS NULL) OR (NC IS NULL) THEN -- MESSAGE('Ban can phai nhap ngay dau va ngay cuoi cho ky '||TEST); -- RAISE Form_Trigger_Failure; -- END IF; IF SUBSTR(TEST,5,2)='12' THEN KY_MOI:=TO_CHAR(TO_NUMBER(SUBSTR(TEST,1,4))+1)||'01'; ELSE KY_MOI:=TO_CHAR(TO_NUMBER(TEST)+1); END IF; RETURN(KY_MOI); END; END; To dư liƯu cho viƯc In lch ghi ¢iƯn vª chun b sn dư liƯu cho BDCS ¢Ĩ khi vao ch cÇn nhp la CSM /* THU TUC NHAP DU LIEU CHO BIEN DONG CHI SO CUA MOI KY GHI DIEN*/ PROCEDURE bdcs IS BEGIN IF (:KPD.KPD_KY_KY IS NOT NULL AND :KPD.KPD_PD_PH_PHIEN IS NOT NULL AND :KPD.KPD_PD_DOT_DOT IS NOT NULL AND :LGD.LGD_NGAY_DCS IS NOT NULL ) THEN DECLARE CURSOR T IS SELECT DK.DK_MA MA, DK.DK_NGAYKYHD NGAYKYHD, MAX(DK.DK_NGAYHL) NGAYHL FROM DK DK WHERE DK.DK_NGAYHL<:LGD.LGD_NGAY_DCS AND DK.DK_PH_PHIEN=:KPD.KPD_PD_PH_PHIEN GROUP BY DK.DK_MA,DK.DK_NGAYKYHD ; REC T%ROWTYPE; BEGIN OPEN T; LOOP FETCH T INTO REC; EXIT WHEN T%NOTFOUND; BEGIN INSERT INTO BD (BD_DK_MA, BD_DK_NGAYHL, BD_DK_NGAYKYHD, BD_LGD_KPD_KY_KY, BD_LGD_KPD_PD_PH_PHIEN, BD_LGD_KPD_PD_DOT_DOT, BD_CSMOI, BD_CSNGUNG) VALUES (REC.MA, REC.NGAYHL, REC.NGAYKYHD, :KPD.KPD_KY_KY, :KPD.KPD_PD_PH_PHIEN, :KPD.KPD_PD_DOT_DOT, 0 ,0 ); EXCEPTION WHEN OTHERS THEN NULL; END; END LOOP; CLOSE T; COMMIT; END; ELSE MESSAGE('Xin bn hºy nhp K, Phi£n , ˜ít, Ngªy ¢c Ch sç ca LG˜'); END IF; END; THỰC TẬP TỐT NGHIỆP Đề tài : Xây dựng mô hình quản lý CSDL hóa đơn tiền điện Nhiệm vụ đề tài : - Phân tích, xây dựng hệ thống CSDL hóa đơn Tìm hiểu phần mềm Oracle Viết Demo tính toán hóa đơn tiền điện Giáo viên hướng dẫn : Nguyễn Mạnh Thọ Sinh viên : Thái Hoàng Trình – Phạm Xuân Thảo Lớp : KSII K6 Yêu cầu đề tài : Nhiệm vụ đề tài : - Phân tích, xây dựng hệ thống CSDL hóa đơn Thiết kế hệ thống trên hệ quản trị CSDL Oracle Viết chương trình tính hoá đơn tiền điện Xây dựng chương trình quản lý Từ mô hình đã xây dựng bổ sung số liệu cần thiết phục vụ cho các yêu cầu tính toán. Viết chương trình tính toán doanh thu & thương phẩm theo yêu cầu thực tế của hệ thống, bao gồm : Viết chương trình tính cho khách hàng riêng biệt, toàn bộ các khách hàng theo dòng thời gian thống kê và hóa đơn ra theo phiên. Viết chương trình quản lý đầu vào : biến động khách hàng, biến động chỉ số Tạo Report hóa đơn, báo cáo doanh thu & thương phẩm và biến động khách hàng. YÊU CẦU LUẬN ÁN : Từ mô hình đã xây dựng bổ sung số liệu cần thiết phục vụ cho các yêu cầu tính toán. Viết chương trình tính toán doanh thu & thương phẩm theo yêu cầu thực tế của hệ thống, bao gồm : Viết chương trình tính cho khách hàng riêng biệt, toàn bộ các khách hàng theo dòng thời gian thống kê và hóa đơn ra theo phiên. Viết chương trình quản lý đầu vào : biến động khách hàng, biến động chỉ số Tạo Report hóa đơn, báo cáo doanh thu & thương phẩm và biến động khách hàng. CÔNG VIỆC Đà THỰC HIỆN ĐẾN GIỮA GIAI ĐOẠN : Hoàn chỉnh sơ đồ ERD Bổ sung số liệu cho hệ thống Tiếp tục nghiên cứu các công cụ của Oracle : Form, Menu, Report, PL/SQL… Tạo giao diện người dùng Phác thảo phương thức tính toán quản lý THỰC HIỆN : Hoàn chỉnh giai đoạn thiết kế : Đã hoàn chỉnh ERD (đính kèm ERD) và số liệu bổ sung sửa đổi theo yêu cầu (số liệu bậc thang, giá điện giá trị gia tăng, điều chỉnh hóa đơn – truy thu, hủy bỏ…) Xây dựng giao diện : Menu : (Xem sơ đồ phụ lục) Các Form nhập liệu : (Xem sơ đồ phụ lục)
File đính kèm:
- Xây dựng mô hình quản lý CSDL hóa đơn tiền điện, thực hiện chương trình quản lý hệ thống trên Oracle.doc