You are on page 1of 21

Modelos de Desarrollo de Programas

Prctica: contabilidad personal


1. Anlisis
1.1. Modelo ambiental
1.1.1. enunciado del problema
Se trata de programar una contabilidad personal. Se consideran ingresos por un lado y varias partidas de gastos (alimentacin, transporte y otros). Datos de cada tipo de operacin:

Ingreso: fecha, tipo, descripcin, importe. Los ingresos pueden tener asociado un gasto de la partida "otros" (por ejemplo una comisin, retencin de IRFP, etc.) que coincidir en la fecha y descripcin. Gasto en la partida de alimentacin, transporte u otros: fecha, tipo, descripcin, importe

Los tipos asociados a cada partida son los siguientes (al lado de cada tipo aparece su cdigo representado con dos caracteres):
Partida Ingresos Tipos Devolucin (DV) Extra (EX) Nmina (NO) Varios (VA) Alimentacin Transporte Caf (CA) Cena (CE) Comida (CO) Compras (CM) Desayuno (DS) Varios (VA) Avin (AV) Autobs (AU) Gasolina (GA) Metro (ME) Seguro (SE) Taller (TA) Tren (TR) Varios (VA) Otros gastos Comisin (CS) Donacin (DO) Ocio (OC) Prstamo (PR) Retencin (RE) Ropa (RO) Salud (SA) Varios (VA)

Se considera que el identificador de un ingreso es la fecha ms el tipo. En el caso de un gasto, su identificador es la partida, la fecha y el tipo. No se admiten duplicados de ingresos ni de gastos. El programa debe permitir realizar las siguientes acciones:

Registrar y eliminar ingresos. Cuando se elimina el ingreso se debe eliminar su gasto asociado si lo tiene. Registrar y eliminar gastos de cualquiera de los tipos Mostrar el saldo actual de la contabilidad. Deben aparecer los ingresos totales, gastos totales y la diferencia entre ingresos y gastos. Mostrar un resumen de los gastos de una partida determinada, indicando el total de gastos de cada tipo, el total de gastos de la partida y el porcentaje de gastos de esta partida respecto al total de gastos. 1

Para ejecutar el programa habr que realizar la siguiente llamada: CONTAB <entrada> <salida> Donde <entrada> indica el nombre del fichero de entrada y <salida> el nombre del fichero de salida. Formato de la entrada: es un fichero de texto. Cada lnea del mismo tiene un comando para la aplicacin. Comandos:

Nuevo ingreso: "ING" <fecha> <tipo> (<desc>) <imp> [<tipo gasto> <imp gasto>] Nuevo gasto de alimentacin: "ALI" <fecha> <tipo> (<desc>) <imp> Nuevo gasto de transporte: "TRA" <fecha> <tipo> (<desc>) <imp> Nuevo gasto de otro tipo: "OTR" <fecha> <tipo> (<desc>) <imp> Eliminar un ingreso: "ELI" "ING" <fecha> <tipo> Eliminar un gasto: "ELI" <partida> <fecha> <tipo> Mostrar el saldo: "SAL" Mostrar resumen de gastos: "GAS" <partida>

Formato de los campos:


<fecha>: dd/mm/aaaa <tipo>: dos caracteres segn la tabla vista ms arriba <desc>: cadena de 50 caracteres como mximo describiendo el ingreso o gasto. <imp>: importe correspondiente al ingreso o gasto (un nmero entero positivo) <tipo gasto>: tipo (dos caracteres) correspondiente a un gasto asociado a un ingreso <imp gasto>: importe de gasto asociado al ingreso (nmero entero positivo) <partida>: tres caracteres que identifican la partida: "ALI" (alimentacin), "TRA" (transporte) y "OTR" (otros).

Ejemplo de fichero de entrada:


ING ALI TRA SAL ELI SAL OTR GAS ALI GAS SAL ELI SAL 21/2/2000 NO (Salario) 170000 RE 29000 2/3/2000 CE (Invitacin a Compaeros) 30000 4/3/2000 GA (Llenar el depsito) 5500 TRA 4/3/2000 GA 5/3/2000 OC (Cine) 1000 OTR 12/3/2000 CM (Compras del mes) 40000 ALI ING 21/2/2000 NO

Formato de la salida: ser un fichero, con una lnea para el resultado o error de cada accin: 2

Nuevo ingreso: "Ingresado" <importe> <fecha> <tipo> (<desc>) Nuevo gasto de alimentacin: "Alimentacin" <importe> <fecha> <tipo> (<desc>) Nuevo gasto de transporte: "Transporte" <importe> <fecha> <tipo> (<desc>) Nuevo gasto de otro tipo: "Otros" <importe> <fecha> <tipo> (<desc>) Eliminar un ingreso: "Ingreso eliminado" <importe> <fecha> <tipo> (<desc>) Eliminar un gasto: "Gasto eliminado" <partida><importe> <fecha> <tipo> (<desc>) Mostrar el saldo: "Ingresos" <ingresos> "Gastos" <gastos> "-> Saldo" <saldo> Mostrar gastos por partida: "Total" <partida> <total de la partida> <porcentaje partida> {<tipo> <total tipo>}(para cada tipo de la partida que tenga algn gasto)

Todos los campos tienen la misma representacin que en la entrada, excepto el campo <tipo> que deber mostrar el nombre completo del tipo. Cuando un nuevo ingreso lleve asociado un gasto, la salida tendr dos lneas: la primera con el resultado del ingreso y la segunda con el resultado del gasto. Cuando se elimina un ingreso que tiene asociado un gasto, la salida tendr dos lneas, la primera con la eliminacin del ingreso y la segunda con la eliminacin del gasto. Ejemplo de salida para el ejemplo anterior
Ingresado 170000 21/2/2000 Nmina (Salario) Otros 29000 21/2/2000 Donacin (Salario) Alimentacin 30000 2/3/2000 Cena (Invitacin a Compaeros) Transporte 5500 4/3/2000 Gasolina (Llenar el depsito) Ingresos 170000 Gastos 64500 -> Saldo 105500 Gasto eliminado Transporte 5500 4/3/2000 Gasolina (Llenar el depsito) Ingresos 170000 Gastos 59000 -> Saldo 111000 Otros 1000 5/3/2000 Ocio (Cine) Total Otros 30000 50% Donacin 29000 Ocio 1000 Alimentacin 40000 12/3/2000 Compras (Compras del mes) Total Alimentacin 70000 70% Cena 30000 Compras 40000 Ingresos 170000 Gastos 100000 -> Saldo 70000 Ingreso eliminado 170000 21/2/2000 Nmina (Salario) Gasto eliminado Otros 29000 21/2/2000 Donacin (Salario) Ingresos 0 Gastos 71000 -> Saldo -71000

Cuando la ejecucin de algn comando produzca un error, la salida correspondiente a ese comando ser una lnea con el formato siguiente: "ERROR" <descripcin del error>. Seguidamente el programa deber procesar normalmente el resto de los comandos del fichero de entrada.

1.1.2. diagrama de contexto

Diagrama de contexto (de nivel 0)

1.1.3. lista de sucesos Registrar un ingreso (flujos di e ii). Registrar un gasto de alimentacin (flujos dga e iga) Registrar un gasto de transporte (flujos dgt e igt) Registrar un gasto de otro tipo (flujos dgo e igo) Eliminar un ingreso (flujos dei e iei) Eliminar un gasto (flujo deg e ieg) Mostrar el saldo (flujo dms e ims) Mostrar el resumen de gastos (flujo dmg e img)

1.2. Modelo de comportamiento


1.2.1. Modelo de procesos 1.2.1.1. Desarrollo de DFD

Diagrama 0 (descomposicin del diagrama de contexto)

datos_gasto_ali datos_gasto_tra datos_gasto_otr

3.1 Registrar gasto inf_registro_gasto

Gasto 3.2 datos_elim_gasto Eliminar gasto inf_eliminacin_gasto

Diagrama 3 (Tratar gasto)

Diagrama 2 (Tratar ingreso)

Diagrama 4 (Tratar Saldo)

Diagrama 5 (Tratar_Res_Gasto)

1.2.1.2.

Especificacin de procesos

Proceso 1: Leer Datos fichero Entrada:


datos // tipo_operacin, datos_operacin

Proceso: Obtener tipo_operacin if tipo_operacin = 1 | 2 then Obtener datos_operacin_ingreso Ir a Proceso 2 else if tipo_operacin = 3 | 4 then Obtener datos_operacin_gasto Ir a Proceso 3 else if tipo_operacin = 5 then Obtener datos_operacin_saldo Ir a Proceso 4 else if tipo_operacin = 6 then Obtener datos_operacin_resumen_gastos Ir a Proceso 5 endif Salida:
datos_ingreso | datos_gasto | datos_saldo | datos_res_gasto

Proceso 2.1: Registrar ingreso Entrada:


datos_ingreso // fecha [dd/mm/aaaa], tipo, (desc), importe, [tipoGasto, impGasto], Almacn Ingresos, Almacn Gastos

Proceso: encontrado = Buscar (fecha, tipo, Almacen Ingresos) 7

if encontrado then Escribir Ingreso duplicado else Registrar un Ingreso (fecha, tipo, desc, importe, Almacn Ingresos) Escribir Ingresado + importe + fecha + tipo + desc if (impGasto!=0) RegistrarGasto (tipoGasto, impGasto, fecha, desc, Almacen Gastos) endif endif Volver al proceso 1 Salida:
inf_ingreso Almacn Ingresos Almacn Gastos

Proceso 2.2: Eliminar ingreso Entrada:


datos_elim._ingreso // fecha, tipo, Almacn Ingresos, Almacn Gastos

Proceso: encontrado = Buscar (fecha, tipo, Almacen Ingresos) if encontrado then (hayGastoAsoc, tipoGasto) = Eliminar un Ingreso (fecha, tipo, Almacn Ingresos) Escribir Ingreso Eliminado + importe + fecha + tipo + desc if (hayGastoAsoc) Eliminar un Gasto (tipoGasto, fecha, Almacn Gastos) endif else Escribir No se encontro el Ingreso endif Volver al proceso 1 Salida:
inf_elim_ingreso Almacn Ingresos Almacn Gastos

Proceso 3.1: Registrar gasto Entrada:


datos_gasto_ali // partida, fecha [dd/mm/aaaa], (desc), importe, Almacn Gastos datos_gasto_tra // partida, fecha [dd/mm/aaaa], (desc), importe, Almacn Gastos datos_gasto_otr // partida, fecha [dd/mm/aaaa], (desc), importe, Almacn Gastos

Proceso: 8

case partida ALI: correcto = Registrar gasto de alimentacin TRA: correcto = Registrar gasto de transporte OTR: correcto = Registrar gasto de otro default: Registrar ERROR endcase if correcto then Escribir El gasto ya existe else Escribir partida + <importe> + <fecha> + <tipo> + (<desc>) endif Volver al proceso 1 Salida:
inf_registro_gasto Almacn Gastos

Proceso 3.2: Eliminar gasto Entrada:


datos_elim_gasto // partida, fecha [dd/mm/aaaa], tipo, Almacn Gastos

Proceso: encontrado = Buscar (descripcin de operacin de gasto) if encontrado then (importe, desc)=EliminarGasto (partida, fecha, tipo) Escribir Gasto Eliminado + partida + importe + fecha + tipo + desc else Escribir El gasto no existe endif Volver al proceso 1 Salida:
inf_eliminacin_gasto Almacn Gastos

Proceso 4: Tratar saldo Entrada:


Datos_saldo // Almacen Ingresos, Almacen Gastos

Proceso: Escribir Ingresos + ingresos + Gastos + gastos + + (ingresos-gastos) Salida:


Info_saldo

Saldo

1.2.1.3 Diccionario de datos


Datos = tipo_operacin + datos_operacin Tipo_operacin = [ * 1 * Registrar_Ingreso | * 2 * Eliminar_Ingreso | * 3 * Registrar_Gasto | * 4 * Eliminar_Gasto | * 5 * Saldo | * 6 * Gastos ] Datos_operacin = [datos_operacin_ingresos | datos_operacin_gastos | datos_operacin_resumen_gastos] Datos_operacin_ingresos = fecha + tipo + importe + (tipo_gasto + importe_gasto) Datos_operacin_gastos = partida + fecha + tipo + importe Datos_operacin_resumen_gastos = [ALI | TRA | OTR ]

1.2.2. Modelo de datos

Diagrama de Entidad / Relacin

10

1.2.3. Diagrama de transicin de estados

1.3. Modelo de implantacin de usuario: nada

2. Diseo
2.1. Modelo de implantacin del sistema
Este punto no es necesario ya que no es un sistema distribuido.

2.2. Modelo de implantacin de programas

11

2.2.1. Diagrama de estructuras refinado

12

2.2.2. Diagrama estructurado del mdulo principal y de al menos otro mdulo

Diagrama Arborescente del mdulo principal

13

Diagrama arborescente de Registrar Gasto

14

Modelo orientado a objetos 1. Anlisis


1.1. Diagrama de clases inicial
Contabilidad 1 * Ingreso 1 * GastoAlim. 1 ......{OR}......... * GastoTransp 1 ..........{OR}......... * GastoOtros 1

1.2.
Concepto
CrearContabilidad AgregarIngreso

DIO de anlisis
MC
Contabilidad () cn.AadirIngreso () ing.ComprobarNExis(datosI) ing.Aadir (datosI) gx.ComprobarNExis(datosG) gx.Aadir (datosG)

Contabilidad (cn)

GastoTipoX (gx)

Ingreso (ing)

EliminarIngreso

cn.EliminarIngreso () ing.ComprobarExiste(datosI) ~Ingreso() ~GastoTipoX()

AgregarGasto

cn.AadirGasto () gx.ComprobarNExis(datos) gx.Aadir (datos)

EliminarGasto

cn.EliminarGasto () gx.ComprobarExiste(datos) ~GastoTipoX()

MostrarSaldo GastosPartida

cn.MostrarSaldo () cn.GastosPartida (partida) gx.Consultar ()

DestruirContabilidad

~Contabilidad () ~GastoTipoX() ~Ingreso()

15

1.3.

Diagrama de clases refinado


Contabilidad
float ingresos, gastos

Contabilidad () ~ Contabilidad () Aadir (fecha, tipo, desc, importe, hayGasto, tipoGasto, impGasto) Aadir (fecha, tipo, desc, importe, hayIng, tipoIngreso) Eliminar (tipo, fecha, hayIng) Eliminar (partida, tipo, fecha, hayGasto) MostrarSaldo () GastosPartida (partida)

1 *
GastoOtros

*
Ingreso
TFecha fecha, TipoIngreso tipo, char desc[50], long importe,bool hayGasto, TipoGasto tipoGasto, long impGasto Ingreso (fecha, tipo, desc, importe, hayGasto, tipoGasto) ~ Ingreso () bool ComprobarExiste (tipo, fecha) bool ComprobarNExiste (tipo, fecha)

TFecha fecha, TipoGasto tipo, char desc[50], long importe,bool hayIng, TipoIngreso tipoIngreso Gasto (fecha, tipo, desc, importe, hayIng, tipoIng) ~ Ingreso () bool ComprobarExiste (tipo, fecha) bool ComprobarNExiste (tipo, fecha) Consultar ()

*
GastoAlimentacin
TFecha fecha, TipoGasto tipo, char desc[50], long importe,bool hayIng, TipoIngreso tipoIngreso Gasto (fecha, tipo, desc, importe, hayIng, tipoIng) ~ Ingreso () bool ComprobarExiste (tipo, fecha) bool ComprobarNExiste (tipo, fecha) Consultar ()

*
GastoTransporte
TFecha fecha, TipoGasto tipo, char desc[50], long importe,bool hayIng, TipoIngreso tipoIngreso Gasto (fecha, tipo, desc, importe, hayIng, tipoIng) ~ Ingreso () bool ComprobarExiste (tipo, fecha) bool ComprobarNExiste (tipo, fecha) Consultar ()

16

2. Diseo
2.1 Diseo lgico
Diagrama de clases del diseo (incluye atributos y relaciones)
Clases: Contabilidad ListaIngresos ListaGastos TipoElemento TipoIngreso TipoGasto

17

DIO de diseo

18

Diagrama de clases refinado

19

Diseo del mdulo de control

20

2.2 Diseo fsico


Diagrama de componentes:

contaboo.cp

contabil.h

Contabil.cpp

Lectura.h

FechaOO.h

Lectura.cpp

FechaOO.cp p

Nota: El archivo tipos.h esta incluido en todos ellos con definiciones bsicas tales como bool o Tpartida.

21

You might also like