1. BASES DE DATOS ORIENTADAS A OBJETOS. <br />MAYO 1 DE 2010.<br />TRABAJO BANCO PLATICA S.A. <br />UNAB TADS <br />INTEGRANTES:<br />SANDRA SALAZAR<br />RAMIRO ROMERO <br />DIEGO GONZALEZ<br />ODAIMAR CARRILLO<br />ENUNCIADO<br />El banco platica S.A. desea ampliar su portafolio de servicios. Para esto se debe implementar en el sistema los siguientes requisitos:<br />Cuando un cliente desea adquirir un servicio en el banco, debe abrir un cuenta de ahorros o una cuenta corriente. Si abre una cuenta de ahorros este deberá mantener un saldo mínimo en su cuenta de 10 000 y se puede mantener activa si mínimo hace una transacción en 3 meses. Además, mantener un saldo mínimo en la cuenta de ahorros de 500 000 pesos le permitirá acceder a intereses corrientes del 7% sobre el saldo. Si el cliente abre una cuenta corriente él podrá hacer movimientos mayores a 3 millones de pesos con un saldo mínimo de 100 000 y podrá hacer sobregiros por el doble del saldo que tenga.<br />Independiente del tipo de cuenta que pueda tener el cliente, este podrá hacer operaciones de depósito o ahorro, de retiro, o transferencias a otras cuentas.<br />Si un cliente tiene los 2 tipos de cuenta, tendrá los beneficios de cada una de ellas, y además podrá acceder a préstamos o a créditos por el doble del mayor saldo mínimo que tenga en la cuenta en el momento de hacer la solicitud<br />ENTREGABLES:<br />Modelo orientado a objetos.<br />Modelo relacional , script de base de datos motor Oracle<br />CREATE TYPE CUENTA_T AS OBJECT<br />(<br />IdNUMBER(15),<br /> SaldoNUMBER(12,2),<br />EstadoCHAR(1),<br />MEMBER PROCEDURE depositar(MONTO IN NUMBER(12,2)),<br />MEMBER PROCEDURE retirar(MONTO IN NUMBER(12,2)),<br />MEMBER PROCEDURE transferir(MONTO IN NUMBER(12,2),CUENTADES IN CUENTA_T),<br />MEMBER FUNCTION obtenersaldo RETURN NUMBER(12,2)<br />) NOT FINAL<br />/<br />CREATE TYPE CUENTAAHORRO_T UNDER CUENTA_T(<br />Intereses NUMBER(3,2),<br />MEMBER PROCEDU<br />RE aumentarsaldo() RETURN,<br />MEMBER PROCEDURE inactivarcuenta(FECHA DATE)<br />MEMBER FUNCTION verificarsaldominimo RETURN BOOLEAN,<br />OVERRIDING MEMBER PROCEDURE retirar(MONTO NUMBER(12,2))<br />)/<br />CREATE TYPE CUENTACORRIENTE_T UNDER CUENTA_T(<br />sobregiro NUMBER(12,2),<br />sobregirocomsumido NUMBER(12,2),<br />MEMBER PROCEDURE calcuarsobregiro,<br />OVERRIDING MEMBER PROCEDURE depositar(MONTO NUMBER(12,2)),<br />OVERRIDING MEMBER PROCEDURE retirar(MONTO NUMBER(12,2)),<br />)/<br />CREATE TABLE CUENTAAHORRO OF CUENTAAHORRO_T(<br />Id PRIMARY KEY<br />)<br />CREATE TABLE CUENTACORRIENTE OF CUENTACORRIENTE_T(<br />Id PRIMARY KEY<br />)<br />CREATE TYPE MOVIMIENTOS_T AS OBJECT(<br />Id NUMBER(15),<br />Valor NUMBER(12,2),<br />Fecha Date,<br />Tipo CHAR(1),<br />cuenta REF CUENTA_T<br />)<br />CREATE TABLE MOVIMIENTOS OF MOVIMIENTOS_T(<br />Id PRIMARY KEY<br />)<br />CREATE TYPE VCUENTAS AS VARRAY(20) OF CUENTA_T<br />CREATE TYPE CLIENTE_T AS OBJECT(<br />IdNUMBER(15),<br />CuentaVCUENTAS,<br />MEMBER PROCEDURE abrircuenta(TIPO CHAR)<br />)<br />CREATE TABLE CLIENTE OF CLIENTE _T(<br />Id PRIMARY KEY<br />)<br />--<br />-- Se crea funcion para generar el deposito de la cuenta:<br />-- tipo cuenta_t<br />create or replace type body cuenta_t as<br />member function depositar(monto) return boolean is<br />begin<br /> boolean swr=false ;<br /> if (monto > 0 ){<br /> saldo += monto;<br /> swr=true;<br /> update cuenta;<br /> }<br /> return swr;<br /> }<br />end cuenta_depositar;<br />end;<br />--<br />-- Se crea funcion para generar el retiro de la cuenta:<br />-- tipo cuenta_t<br />create or replace type body cuenta_t as<br />member function retirar(monto) return boolean is<br />begin<br /> boolean swr=false ;<br /> if (monto <= saldo){<br /> saldo -=monto;<br /> swr=true;<br />update cuenta;<br /> }<br /> return swr;<br />end cuenta_retirar;<br />end;<br />--<br />-- Se crea funcion obtener el saldo de la cuenta:<br />-- tipo cuenta_t<br />create or replace type body cuenta_t as<br />member function obtenersaldo return NUMBER is<br />begin<br /> return saldo;<br />end obtenersaldo;<br />end;<br />--<br />-- Se crea funcion transferencia de la cuenta:<br />-- tipo cuenta_t<br />create or replace type body cuenta_t as<br />member function transferir(MONTO,CUENTADES) return boolean is<br />begin<br /> boolean swr;<br />swr=retirar(monto);<br />if (swr){<br /> swr=CUENTADES.depositar(monto)<br /> commit<br />}<br />else{<br /> rollback<br />}<br />return swr;<br />end transferir;<br />end;<br />--tipo cuentaahorro_t<br />create or replace type body cuentaahorro_t as<br />member function verificarsaldominimo return boolean is<br />begin<br /> boolean swr=false ;<br />if (saldo >= 10000){<br />swr= true;<br />}<br />return swr;<br />end verificarsaldominimo <br />end;<br />--tipo cuentaahorro_t<br />create or replace type body cuentaahorro_t as<br />member function retirar(monto) return boolean is<br />begin<br /> boolean swr=false ;<br />if (verificarsaldominimo()){<br /> if (monto <= (saldo - 10000)){<br /> saldo -=monto;<br /> swr=true;<br /> update cuenta;<br /> }<br /> }<br /> return swr;<br />end cuenta_retirar;<br />end;<br />--tipo cuentaahorro_t<br />create or replace type body cuentaahorro_t as<br />member function aumentarsaldo() return boolean is<br />begin<br /> boolean swr=false ;<br />number ttasainteres = interes;<br />if (saldo > 500000){<br /> ttasainteres = 0.07<br /> }<br />saldo += (saldo * ttasainteres);<br />update cuenta;<br /> return swr;<br />end cuenta_retirar;<br />end;<br />--tipo cuentaahorro_t<br />create or replace type body cuentaahorro_t as<br />member function inactivarcuenta(fecha) return boolean is<br />begin<br /> boolean swr=false ;<br />date fechai ;<br />long tmov = 0;<br />fechai = fecha - 3 meses;<br />select count(*) into :tmov from movimiento where fecha between fechai and fecha <br />if (tmov >= 1) then{<br /> estado = 'I'<br />}<br />update cuenta<br /> return swr;<br />end inactivarcuenta;<br />end;<br />--tipo cuentacorriente_t<br />create or replace type body cuentacorriente_t as<br />member function retirar(monto) return boolean is<br />begin<br /> boolean swr=false ;<br />number sobregiroasig=0;<br />number aobregiroactual=0;<br />if (saldo > monto){<br /> saldo -=monto;<br /> swr=true;<br />}else{<br /> --aplicar sobregiro<br /> if (sobregiro = 0) {<br /> sobregiroasig = saldo * 2<br /> }else{<br /> sobregiroasig = sobregiro<br /> {<br /> <br /> double Sobregirot = monto - saldo;<br /> if ( sobregiroasig < Sobregirot ){<br /> swr = false;<br /> }else{<br /> saldo = 0.0;<br /> Sobregiroconsumido -= Sobregirot;<br /> }<br /> <br />}<br />if (swr){<br /> update cuenta set sobregiro = sobregiroasig<br />}<br /> <br /> return swr;<br />end retirar;<br />end;<br />--tipo cuentacorriente_t<br />create or replace type body cuentacorriente_t as<br />member function depositar(monto) return boolean is<br />begin<br /> if (sobregiro == Sobregiroconsumido){<br /> saldo += monto;<br /> }else{<br /> --si tiene sobregiro, primero se le cubre<br /> double sobregirot= sobregiro - Sobregiroconsumido;<br /> if (sobregirot > monto){<br /> Sobregiroconsumido +=valor;<br /> }else{<br /> sobregiroconsumido += sobregirot;<br /> saldo += (monto - sobregirot);<br /> }<br /> }<br /> update cuenta<br /> <br />end depositar;<br />end;<br />--tipo cuentacorriente_t<br />create or replace type body cuentacorriente_t as<br />member procedure calcularsobregiro<br />begin<br />if(2*saldo<=3000000 && saldo>=100000 ){ sobregiro=2*ssaldo; }<br />update cuenta<br />end calcularsobregiro;<br />end;<br />--tipo cliente _t<br />create or replace type body cliente_t as<br />member procedure abrircuenta is<br />begin<br />if(tipo == '1'){<br />insert into CUENTAAHORROS ;<br />}else{<br />insert into CUENTACORRIENTE ;<br />}<br />end abrircuenta;<br />end;<br />