Está en la página 1de 24

UniversidaddeOriente

NcleodeAnzotegui
CoordinacinGeneraldeEstudiosdePostgrado
MaestraenInformticaGerencial

ESTRUCTURADEDATOS
SISTEMADECONTROLDECUENTASPORCOBRAR

Profesor:Ing.JosManuelDazM.Sc.

Integrantes:
CUMANAJOSLUIS,C.I.:18.073.924
MACHADOMARIBEL,C.I.:16.486.212
SMITHMARCI,C.I:17.761.068

Barcelona,juliode2015

PLANTEAMIENTODELPROBLEMA
SISTEMADECONTROLDECUENTASPORCOBRAR.
Para este sistema debe crearse dos archivos de datos, uno para clientes y otro
para facturas, ambos deben ser asociados de manera tal que se tenga
rpidamentelasfacturasdecadaclienteconsufechadeemisin,nmero,monto,
y estado. Las facturas podrn ser almacenadas de dos formas, en orden la
primera en entrar es la primera en salir (FIFO), para las facturas pendientes por
cancelar, la ltima en entrar es la primera en salir (LIFO), para las facturas
canceladas.Segnlaconvenienciaparalaempresa,debepermitiragregarnuevas
facturasyclientes.
Paracadaclientesetieneuncobradorasociado,delcualseposeesunmerode
cedula, nombre, direccin, estos deben estar almacenados en un rbol de modo
que cuando: el rbol se recorra utilizando recorrido en orden, los nmeros de
cedula se ordenen en orden ascendentes , b) el rbol se recorra utilizando
recorrido pre orden, los montos cobrados por cada uno se ordenen
descendentemente,c)elrbolserecorrautilizandorecorridoposorden,elnumero
defacturascobradasseordenenenformadescendente.Dadoquelosnombres
enelarchivodeclientessealmacenaronporseparado:primernombre,segundo
nombre,primerapellido,segundoapellido,debemanipularseestosalosfinesde
que en el listado aparezca primer nombre, inicial del segundo, primer apellido e
inicialdelsegundo,enunespaciomximode50caracteres.
1. Presente las estructuras de datos que servirn para desarrollar el sistema
planteado.Recuerdequeelusodelasestructurasnoesexcluyente.Justifiqueel
usodelasestructurasescogidas.
2. Presente la estructura de programacin mediante el uso de objetos para el
sistemaplanteado.Considerelasventajasdelusodelosdiferenteslenguajesde
programacin: Delphi, C++, Java. Justifique su escogencia. Especifique
consideracionesquenohayansidomencionadasenelplanteamiento.
3.Desarrolleelsistemaenellenguajedesupreferencia.Presentelasolucincon
elsistemaenfuncionamiento.

ANLISIS
Enprogramacin,unaestructuradedatosesunaformadeorganizarunconjunto
de datos elementales con el objetivo de facilitar su manipulacin y aumentar el
rendimiento de un sistema. Un dato elemental es la mnima informacin que se
tieneenunsistema.LasEstructurasdeDatossepuedenclasificardelasiguiente
manera:
1.Internas
1.1Estticas
1.1.1Arreglos
1.1.2Matrices
1.2Dinmicas
1.2.1Lineales
1.2.1.1Listas
1.2.1.2Pilas
1.2.1.3Colas
1.2.2NoLineales
1.2.2.1rboles
1.2.2.2Grafos
2.Externas
2.1BasesdeDatos
2.2Archivos
Enunlenguajedeprogramacin,untipodedatoestdefinidoporelconjuntode
valores que representa y por el conjunto de operaciones que se pueden realizar
con dicho tipo de dato. Por otro lado, podemos decir que en la solucin de un
problema a ser procesado por un computador encontrar dos grandes tipos de
datos:datossimplesydatosestructurados.
Los datos simples son aquellos que, al ser representados por el computador,
ocupan solo una casilla de memoria. Debido avesto, una variable de un tipo de

datosimplehacereferenciaaunnicovaloralavez.Ejemplodeestostiposde
datossonlosenteros,reales,caracteresybooleanos.
As mismo, los datos estructurados se caracterizan porque su definicin est
compuestadeotrostiposdedatossimples,ascomodeotrosdatosestructurados.
Enestecaso,unnombre(identificadordelavariableestructurada)hacereferencia
nosoloaunacasilladememoria,sinoaungrupodecasillas.
Eltrminoestructuradedatosseutilizaparareferirseaunaformadeorganizar
un conjunto de datos que se relacionan entre si, sean estos simples o
estructurados, con el objetivo de facilitar su manipulacin y de operarlo como un
todo.
Por otro lado, tenemos el trmino Tipo de Dato Abstracto, o TDA, que es muy
comnmente utilizado como equivalente al trmino estructura de datos para
referirsejustamenteauntipodedatoestructuradoquerepresentaunconceptoa
travs de la definicin de sus caractersticas (datos que lo conforman) y de sus
operaciones(algoritmosquemanipulanlosdatosqueloconforman).
Paralasolucindelproblemaseutilizaranlasestructurasdedatoslista,pila,cola
yrbolysecrearansieteclases:Pila_Fact,Cola_Fact,Nodo_Fact,Lista_Cliente,
Nodo_Cliente,Arbol_CobradoryNodo_Arbol.
LasListassontiposdedatosabstractoslinealesquerepresentansecuenciasde
elementosyquepresentanunaparticularflexibilidadensumanejo:puedencrecer
y acortarse segn se necesite, todos los elementos del conjunto se pueden
acceder, se puede aadir nuevos elementos en cualquier lugar de la secuencia
dondeseespecifique,ascomosepuedeeliminarcualquierelemento
delconjunto.

Una pila (stack en ingls) es una lista ordinal o estructura de datos en la que el
modo de acceso a sus elementos es de tipo LIFO (del ingls Last In First Out,
ltimo en entrar, primero en salir) que permite almacenar y recuperar datos. Se
aplicaenmultituddeocasionesdebidoasusimplicidadyordenacinimplcitaen
lapropiaestructura.
LaColaoQueueesotradelasestructurasdedatosimportantes.Comolaspilas,
las colas son muy simples de entender e implementar. La idea de la cola es
simularelfuncionamientodeunacoladelavidareal.Lacolaesunaestructura
quesebasaenelconceptoFIFO:FirstInFirstOut,esdecir,elprimerelemento
queentraeselprimeroquesale.Talcomolaspilas,laimplementacindelapila
esmuyparecidaaladelistaenlazada,yslodifiereenlaformaquegestionamos
loselementosalmacenados.
Muchas veces los seres humanos nos inspiramos en la naturaleza para resolver
nuestros problemas. En el caso de las estructuras de datos, cuando debemos
representar jerarquas o taxonomas y otro tipo de problemas un poco ms
complejos,nosesfcilpensarenellascomoestructurasarbreasinvertidasenlas
cualeselelementodemayorjerarquaseconsideracomolaraz,loselementosde
menor jerarqua ocupan los niveles inferiores dentro de un orden estipulado
permitiendo un manejo de informacin adecuado del problema que deseamos
modelar
rbolesbinarios.
Los rboles binarios son estructuras de datos no lineales, tambin denominadas
recursivas en razn de que su construccin puede hacerse en la aplicacin de
estructurasbsicasaplicadassobresmismas,talycomoocurreconelcasode
losfractales.Enestecasounrbolbinarioesunaestructurarecursivaqueconsta
deunelementoquedenominaremosrazydoselementosadicionalesquepueden
servacosalosquedenominaremoselsubrbolizquierdoyelsubrbolderecho,

los cuales a su vez son rboles con su respectiva raz, subrbol izquierdo y
subrbolderecho.
Aligualqueenotrasestructuraslainformacinquesealmacenaentodosycada
uno de los rboles, debe ser del mismo tipo para garantizar la integridad y
coherencia de la informacin almacenada. En este sentido decimos que los
rboles almacenan elementos de un mismo conjunto y que dichos elementos
pueden mantener o no una relacin de orden entre ellos dependiendo de la
necesidaddelproblemaaresolver.
Acontinuacinsedescribencadaunadelasclasesdefinidas:
Clase Nodo_Fact: Unidad que contiene los datos de la factura, dentro de los
datosseencuentrandospunteros,elprimero(PunteroCliente)apuntaalaclase
Nodo_Cliente y el segundo puntero (Puntero Cobrador) apunta a la clase
Nodo_arbol.Susatributosson:NumerodeFactura(Num_F)detipoentero,Monto
de Factura (Monto_F) de tipo flotante, Fecha de emisin de la Factura
(Fecha_Emision) de tipo fecha, Estado de la Factura (Estado_F) de tipo cadena,
Puntero siguiente (Puntero_sig) de tipo Nodo_Fact. En esta clase no cuanta con
mtodosquedefinanelfuncionamientodelaestructuradedatos.Acontinuacin
seMuestraestaClase.

Clase Pila_Fact: Su estructura de funcionamiento emula una Pila. Sus atributos


son: Puntero tope (pt_tope), el cual hace referencia a una direccin de memoria
que contiene un tipo de dato Nodo_Fact que representa la cima de la pila por
dondesedebeningresaryextraerlosdatos.Susmtodos:
x

Insertarenlapila(Insertar_Pila)estaagregaunelementoenlacimadela
misma.

Extraer de la pila (Extraer_de_Pila) la cual elimina de la pila el elemento


queseencuentraeneltopedelamisma.

Listar los elementos de la pila (Listar_Pila) haciendo el recorrido de los


elementos,utilizandounacolaauxiliar.

Pila Vaca (Pila_Vacia) esta verifica si la pila est vaca, el resultado que
devuelve es verdadero o falso segn sea el caso. En la figura siguiente
podemosvisualizarlaclase.

ClaseCola_Fact:SuestructuradefuncionamientoemulaunaCola.Susvariables
son: Puntero Primero (pt_primero) que hace referencia a una direccin de
memoriaquecontieneuntipodedatoNodo_Factquerepresentaelprincipiodela
cola por donde se debe extraer los datos, Puntero ultimo (pt_ultimo) hace
referencia a una direccin de memoria que contiene un tipo de dato Nodo_Fact
que representa el final de la cola por donde se debe ingresar los datos. Sus
mtodos:
x

Insertarenlacola(Insertar_Cola),agregaunelementoenlaltimaposicin
dedichacola.

Extraer de la cola (Extraer_de_Cola), sustrae un elemento de la posicin


inicialdelacola.

Listarloselementosdelacola(Listar_Cola).

ColaVaca(Cola_Vacia)verificarsilacolaestvacadeseras,devuelve
un valor de tipo Booleano como respuesta, siendo VERDADERO si esta
vacio, de lo contrario devuelve FALSO. En la figura siguiente podemos
visualizarestaclase.

ClaseNodo_Cliente:Unidadquecontienelosdatosdelosclientes,estosdatos
son: Codigo del cliente (Cod_Clt) de tipo entero, primer nombre del cliente
(Primer_N), segundo nombre del cliente (Segundo_Nombre), primer apellido del
cliente (Primer_Apellido) y segundo apellido del cliente (Segundo_N). En esta
clase no cuanta con mtodos que definan el funcionamiento de la estructura de
datos.Acontinuacinsevisualizaestaclase.

Clase Lista_Cliente: Su estructura de funcionamiento emula una Lista. Sus


variables son: un puntero llamado Inicio de tipo Nodo_Cliente, el cual hace
referenciaaunadireccindememoriaquecontieneuntipodedatoNodo_Cliente
que representa el inicio de la lista y un segundo puntero de tipo Nodo_Cliente
llamadofin,querepresentaelfindelalista.Susmtodos:
x

Insertar en la lista (Insertar_Cliente), aade a la lista los elementos de


maneradinmica.

Buscarenlalista(Buscar_Cliente),buscalosdatosdeunclienteespecifico,
desplazndose por todos los nodos que componen la lista a travs de los
punterosaloselementossiguientes.

Listar los elementos de la lista (Listar_Cliente), muestra todos los clientes


queseencuentranagregadosenpantalla.

Mostrarelnombredelcliente(Mostrar_Nombre),muestraelprimernombre,
inicial del segundo, primer apellido e inicial del segundo, en un espacio
mximode50caracteres.

Determinarlacantidaddeelementosdelalista(Cantidad).

Verificarsilalistaseencuentravaca(Lista_Vacia).
Enlafigurasiguientepodemosvisualizarlaclase.

ClaseNodo_Arbol:Unidadquecontienelosdatosdeloscobradores,estosdatos
son:ennmerodecduladelcobrador(NumCed_C)detipoentero,montodela
factura (Monto_F) de tipo flotante, Nombre del Cobrador (Nombre_C) de tipo
cadena de caracteres, direccion del cobrador (Direccion_C) de tipo cadena de
caracteres, un puntero de tipo Nodo_Arbol que apunta al elemento que se
encuentra al lado izquierdo (pt_izq) y por ultimo un puntero de tipo Nodo_Arbol
queapuntaalelementoqueseencuentraalladoderecho(pt_der).Estaclaseno
poseemtodosasociados.Acontinuacinsevisualizaestaclase.

Clase Arbol_Cobrador: Su estructura de funcionamiento emula un rbol. Su


variable es un dato llamado Raiz de tipo Nodo_Arbol que hace referencia al
elementoqueeslarazdelrbol.Susmtodos:
x

Insertarunnuevoelementoalrbol(Insertar_Arbol)demaneraqueelrbol
mantengaelordendeloselementos.

Buscar un elemento en el rbol (Buscar_Arbol) recorriendo el rbol


preorden.

x
x
x

Recorrido del rbol preorden (Recorrer_Pre) de la siguiente manera: raz,


izquierdo,derecho.
Recorridodelrbolinorden(Recorrer_Entre),esdecir,izquierdo,raz,
derecho.
Recorridodelrbolpostorden(Recorrer_Post)siguiendoelordenizquierdo,
derecho,raz.

Luegodeexplicarbrevementelosatributosymtodosdecadaunadelasclases
definidasseprocediarelacionarlas,obteniendoeldiagramadeclasesparalael
sistemadecontroldecuentasporcobrarquemostramosacontinuacin.

DIAGRAMADECLASESPARAELSISTEMADECONTROLDECUENTASPORCOBRAR.

CDIGOFUENTEPARAELSISTEMADECONTROLDECUENTASPOR
COBRAR.
Variables:
Cod_Clt,Primer_N,Segundo_N,Primer_A,Segundo_A,DirCli,NumCed_C,Nombre_
C,Direccio_C,Monto_F,Num_F,Fecha_Emision,Estado_F
TDA:
Lista_Cli,Pila_Fact,Nodo_Pila,Cola_Fact,Nodo_Cola,Arbol_Cob,Nodo_Arbol
##################################################################
##################################################################
#######DEFINICIONCLASEYMETODOSDELISTADECLIENTES#########
##################################################################
##################################################################

##################################################################
##################################################################
############DEFINICIONCLASEYMETODOSDELAPILA###############
##################################################################
##################################################################
ClaseNodo_Pila
publico:
EnteroNum_F,
flotanteMonto_F,
EnteroCod_Clt,
EnteroNumCed_C,
FechaFecha_Emision,
CadenaEstado_F,

Nodo_PilaPuntero_sig#APUNTADORALSIGUIENTEELEMENTO
FinClase
ClasePila_Fact
privado:
Nodo_Pilatope#PUNTEROALTOPEDELAPILA
publico:
Insertar_pila(Entero,Entero,Entero,Entero,Fecha,Cadena)
Extraer_de_Pila()
Listar_pila()
booleanoPila_Vacia()
FinClase
ProcesoInsertar_pila
(Num_F,Monto_F,Cod_Clt,NumCed_C,Fecha_Emision,Estado_F)
Nodo_Pilanuevo
nuevo.Num_F=Num_F
nuevo.Monto_F=Monto_F
nuevo.Cod_Clt=Cod_Clt
nuevo.NumCed_C=NumCed_C
nuevo.Fecha_Emision=Fecha_Emision
nuevo.Estado_F=Estado_F
Sitope=nulo
nuevo.Puntero_sig=nulo
tope=nuevo
SiNo
nuevo.Puntero_sig=tope
tope=nuevo
FinSi
FinProceso

ProcesoExtraer_de_Pila()
Sitope<>nulo
CadenaDatos[5]
Datos[0]=tope.Num_F
Datos[1]=tope.Monto_F
Datos[2]=tope.Cod_Clt
Datos[3]=tope.NumCed_C
Datos[4]=tope.Fecha_Emision
Datos[5]=tope.Estado_F
tope=tope.Puntero_sig
retornarDatos
SiNo
retornarnulo
FinSi
FinProceso
ProcesoListar_pila()
Nodo_Pilareco=tope
Escribir"Listadodetodosloselementosenlapiladefacturas:"
Mientrasreco<>nulo
Escribirreco.Num_F+""+reco.Monto_F+""+reco.Cod_Clt+""+
reco.NumCed_C+""+reco.Fecha_Emision+""+reco.Estado_F
reco=reco.Puntero_sig
FinMientras
FinProceso
ProcesoPila_Vacia()
Sitope=nulo
retornarverdadero
SiNo
retornarfalso

FinSi
FinProceso
##################################################################
##################################################################
############DEFINICIONCLASEYMETODOSDELACOLA##############
##################################################################
##################################################################
ClaseNodo_Cola
Publicos:
EnteroNum_F,
flotanteMonto_F,
EnteroCod_Clt,
EnteroNumCed_C,
FechaFecha_Emision,
CadenaEstado_F,
Nodo_ColaPt_sig#APUNTADORALSIGUIENTENODO
FinClase
ClaseCola_Fact
Privados:
Nodo_Colapt_primero#PUNTEROALPRIMERELEMENTODELA
COLA
Nodo_Colapt_ultimo#PUNTEROALULTIMOELEMENTODELA
COLA
Publicos:
Insertar_Cola(Entero,Entero,Entero,Entero,Fecha,Cadena)
Extraer_de_Cola()
Listar_Cola
BooleanoCola_Vacia()

FinClase
ProcesoCola_Vacia()
Sipt_primero=nulo
RetornarVerdadero
SiNo
RetornarFalso
FinSi
FinProceso
ProcesoInsertar_Cola
(Num_F,Monto_F,Cod_Clt,NumCed_C,Fecha_Emision,Estado_F)
Nodo_Colanuevo
nuevo.Num_F=Num_F
nuevo.Monto_F=Monto_F
nuevo.Cod_Clt=Cod_Clt
nuevo.NumCed_C=NumCed_C
nuevo.Fecha_Emision=Fecha_Emision
nuevo.Estado_F=Estado_F
nuevo.Pt_sig=nulo
SiCola_Vacia()
pt_primero=nuevo
pt_ultimo=nuevo
SiNo
pt_ultimo.Pt_sig=nuevo
pt_ultimo=nuevo
FinSi
FinProceso
ProcesoExtraer_de_Cola()
SiNOCola_Vacia()

CadenaDatos
Datos[0]=pt_primero.Num_F
Datos[1]=pt_primero.Monto_F
Datos[2]=pt_primero.Cod_Clt
Datos[3]=pt_primero.NumCed_C
Datos[4]=pt_primero.Fecha_Emision
Datos[5]=pt_primero.Estado_F
Sipt_primero==pt_ultimo
pt_primero=nulo
pt_ultimo=nulo
SiNo
pt_primero=pt_primero.Pt_sig
FinSi
retornarDatos
SiNo
retornar
FinSi
FinProceso
ProcesoListar_Cola()
{
Nodo_Colareco=pt_primero
Escribir"Listadodetodosloselementosenlacoladefacturas."
Mientrasreco<>nulo
Escribirreco.Num_F+""+reco.Monto_F+""+reco.Cod_Clt+""+
reco.NumCed_C+""+reco.Fecha_Emision+""+reco.Estado_F
reco=reco.Pt_sig
FinMIentras
FinProceso

##################################################################
##################################################################
############DEFINICIONCLASEYMETODOSDELARBOL##############
##################################################################
##################################################################
ClaseArbol_Cob
ClaseNodo_Arbol
EnteroNumCed_C,Num_F
CadenaNombre_C,Direccion_C,
FlotanteMonto_F
Nodo_Arbolizq,der
FinClase
Nodo_Arbolraiz
Publicos:
Insertar_en_Arbol(entero,cadena,cadena,entero,flotante)
RecorrerPre()
RecorrerEntre()
RecorrerPost()
Privados:
RecorrerPre(Nodo_Arbol)
RecorrerEntre(Nodo_Arbol)
RecorrerPost(Nodo_Arbol)
FinClase
ProcesoInsertar_en_Arbol(NumCed_C,Nombre_C,Direccion_C,Num_F,Monto_F)
Nodo_Arbolnuevo
nuevo.NumCed_C=NumCed_C
nuevo.Nombre_C=Nombre_C
nuevo.Direccion_C=Direccion_C
nuevo.Num_F=Num_F

nuevo.Monto_F=Monto_F
nuevo.izq=nulo
nuevo.der=nulo
Siraiz=nulo
raiz=nuevo
SiNo
Nodo_Arbolanterior=nulo
Nodo_Arbolreco
reco=raiz
Mientrasreco<>nulo
anterior=reco
SiNumCed_C<reco.NumCed_C
reco=reco.izq
SiNo
reco=reco.der
FinSi
FinMientras
SiNumCed_C<anterior.NumCed_C
anterior.izq=nuevo
SiNo
anterior.der=nuevo
FinSi
FinSi
FinProceso
ProcesoRecorrerPre(Nodo_Arbolreco)
Sireco<>null
Console.Write(reco.info+"")
RecorrerPre(reco.izq)
RecorrerPre(reco.der)
FinSi

FinProceso
ProcesoRecorrerPre()
RecorrerPre(raiz)
FinProceso
ProcesoRecorrerEntre(Nodo_Arbolreco)
Sireco<>null
RecorrerEntre(reco.izq)
Console.Write(reco.info+"")
RecorrerEntre(reco.der)
FinSi
FinProceso
ProcesoRecorrerEntre()
RecorrerEntre(raiz)
FinProceso
ProcesoRecorrerPost(Nodo_Arbolreco)
Sireco<>null
RecorrerPost(reco.izq)
RecorrerPost(reco.der)
Console.Write(reco.info+"")
FinSi
FinProceso
ProcesoRecorrerPost()
RecorrerPost(raiz)
FinProceso

##################################################################
##################################################################
############ALGORITMOGENERALDELAAPLICACION################
##################################################################
##################################################################
Cod_Clt,
Primer_N,
Segundo_N,
Primer_A,
Segundo_A,
NumCed_C,
Nombre_C,
Direccion_C,
Monto_F,
Num_F,
Fecha_Emision,
Estado_F
HACER
Imprimir"DeseaAgregaroModificarunaFactura?"
LeerRespuesta
SiRespuesta="Si"
HACER
Cola_FactCola_de_Facturas
Pila_FactPila_de_Facturas
Leerdatos
Cliente(Cod_Clt,Primer_N,Segundo_N,Primer_A,Segundo_A,DirCli)
LeerdatosCobrador(NumCed_C,Nombre_C,Direccion_C)
Leerdatos
Factura(Num_F,Monto_F,Fecha_Emision,Estado_F)
agregar_cliente()
agregar_cobrador()

SiEstado_F="Pendiente"
Cola_de_Facturas.Insertar_Cola
(Num_F,Monto_F,Cod_Clt,NumCed_C,Fecha_Emision,Estado_F)
SiNo
Pila_de_Facturas.Insertar_pila
(Num_F,Monto_F,Cod_Clt,NumCed_C,Fecha_Emision,Estado_F)
FinSi
Imprimir"DeseaAgregarotraFactura?"
LeerRespuesta
MIENTRAS(Respuesta="Si")
FinSi
Limpiar_Pantalla()
Imprimir"DeseaBuscarunCobrador?"
LeerRespuesta
Si(Respuesta="Si")
Imprimir"DeseaBuscarporCedula"
LeerRespuesta
Si(Respuesta="Si")
ordenar_cedula()
buscar_inorden()
Sino
Imprimir"DeseaBuscarpormontoCobrado"
LeerRespuesta
Si(Respuesta="Si")
ordenar_monto()
buscar_preorden()
SiNo
Imprimir"DeseaBuscarporNro.Factura"
LeerRespuesta
Si(Respuesta="Si")
ordenar_posorden()

buscar_posorden()
FinSi
FinSi
FinSi
FinSi
Imprimir"DeseaFinalizar?"
LeerRespuesta
MIENTRAS(Respuesta="Si")

También podría gustarte