1. Universidad Técnica de Manabí
Facultad de Ciencias Informáticas
Escuela de Ingeniería en Sistemas Informáticos
Proyecto de Investigación en el Aula:
Diseño y desarrollo de un Sistema Informático en lenguaje de
programación c++ para el control del inventario y la facturación de una
distribuidora de agua purificada envasada en el periodo mayo-
septiembre 2014.
Autor:
Zherdmant Cevallos Erick Joel
Asignaturas: Programación II y Estructura de Datos
Nivel: 2° “A”
Docente Guía: Ing. Christian Torres
Periodo:
Mayo 2014 – Septiembre 2014
Portoviejo – Manabí – Ecuador
2. I. Introducción:
En la actualidad la importancia del software en la vida cotidiana, ha
alcanzado niveles sorprendentes.
Hace varios años atrás, nadie se hubiera imaginado la importancia de los
celulares y las computadoras hoy en día. Desde el hecho de mantenernos
informados, hasta realizar tareas especializadas en la más diversas actividades
de una gran industria.
Todo esto posible, gracias a potentes hardware y por supuesto a grandes
software; que cada día ocupan mayor importancia en el ámbito de los
negocios. Es por esto que este pequeño proyecto está orientado hacia este
sector específicamente al sector de distribución de agua embotellada; con la
finalidad de implementar un sistema informático y aplicar los conocimientos
aprendidos en la materia de Programación II y Estructura de datos durante el
periodo mayo – septiembre 2014.
Este proyecto cuenta con una justificación, su respectivos objetivos, su marco
teórico en donde se explican algunos conceptos básicos de las materia
además de dar una noción de cómo está estructurado la programación; y por
supuesto la respectivas conclusiones y recomendaciones.
3. II. Justificación:
Para justificar este proyecto debemos recurrir a la importancia y a las
facilidades que presta la implementación en los negocio sistemas informáticos;
puesto que permite llevar de mejor manera la contabilidad y tener un mayor
control de las ventas realizadas, y lo que se tiene en stock; además; es uno de
los medios más eficientes al momento de ahorrar papel.
El proyecto se desarrollara en la plataforma Borland c++ 5.2; esto es para
darle aplicación y funcionamiento practico a los conocimientos que hemos
adquiridos durante nuestro proceso de formación en el segundo nivel de la
carrera de ingeniería en sistemas informáticos de la Facultad de Ciencias
Informáticas de la Universidad Técnica de Manabí.
4. III. Objetivos:
3.1. Objetivo General:
Crear un Sistema Informático funcional, eficiente y eficaz en la
plataforma de desarrollo Borland c++ 5.2; que permita en control de
inventario y facturación de una distribuidora de agua purificada
envasada, aplicando los conocimientos adquiridos durante las clases
de Programación II y Estructura de Datos del 2º nivel de la Carrera de
Ingeniería en Sistemas Informáticos.
3.2. Objetivos Específicos:
Aplicar conocimientos básicos adquiridos en la materia programación I
y complementarlos con los adquiridos en la materia programación II;
para mejorar la eficiencia y la eficacia del código implementado en el
sistema.
Mejorar el rendimiento del sistema aplicando los conocimientos de la
materia de Estructura de Datos para una mejor utilización de memoria
en la ejecución del sistema.
Diseñar un sistema informático cuya interfaz sea amigable con el
usuario, además de ser eficiente y eficaz
5. IV. Marco teórico
4.1. Plataforma de Desarrollo
El proyecto será desarrollado en el Compilador Borland 4.5 que utiliza la
plataforma c++, que es un lenguaje de programación diseñado a mediados
de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el
extender al exitoso lenguaje de programación C con mecanismos que
permitan la manipulación de objetos. En ese sentido, desde el punto de vista
de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica, que se
sumó a los otros dos paradigmas que ya estaban admitidos (programación
estructurada y la programación orientada a objetos). Por esto se suele decir
que el C++ es un lenguaje de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido
la mayoría de los fabricantes de compiladores más modernos. Existen también
algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de
poder crear nuevos tipos que se comporten como tipos fundamentales.
El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el
lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes
se había usado el nombre "C con clases". En C++, la expresión "C++" significa
"incremento de C" y se refiere a que C++ es una extensión de C.
4.1.1. Conocimientos a aplicar.
4.1.1.1. Programación orientada a objetos.
La programación orientada a objetos o POO (OOP según sus siglas en inglés)
es un paradigma de programación que usa los objetos en sus interacciones,
para diseñar aplicaciones y programas informáticos. Está basado en varias
técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo,
acoplamiento y encapsulamiento. Su uso se popularizó a principios de la
década de los años 1990. En la actualidad, existe una gran variedad de
lenguajes de programación que soportan la orientación a objetos.
La programación orientada a objetos es una forma de programar que trata de
encontrar una solución a estos problemas. Introduce nuevos conceptos, que
superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los
siguientes:
Clase
Definiciones de las propiedades y comportamiento de un tipo de objeto
concreto. La instanciación es la lectura de estas definiciones y la creación de
un objeto a partir de ellas.
Herencia
(Por ejemplo, herencia de la clase C a la clase D) es la facilidad mediante la
cual la clase D hereda en ella cada uno de los atributos y operaciones de C,
6. como si esos atributos y operaciones hubiesen sido definidos por la misma D.
Por lo tanto, puede usar los mismos métodos y variables públicas declaradas
en C. Los componentes registrados como "privados" (private) también se
heredan, pero como no pertenecen a la clase, se mantienen escondidos al
programador y sólo pueden ser accedidos a través de otros métodos públicos.
Esto es así para mantener hegemónico el ideal de POO.
Objeto
Instancia de una clase. Entidad provista de un conjunto de propiedades o
atributos (datos) y de comportamiento o funcionalidad (métodos), los mismos
que consecuentemente reaccionan a eventos. Se corresponden con los
objetos reales del mundo que nos rodea, o con objetos internos del sistema
(del programa). Es una instancia a una clase.
Método
Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se
desencadena tras la recepción de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un método puede producir
un cambio en las propiedades del objeto, o la generación de un "evento" con
un nuevo mensaje para otro objeto del sistema.
Evento
Es un suceso en el sistema (tal como una interacción del usuario con la
máquina, o un mensaje enviado por un objeto). El sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente. También se puede definir
como evento la reacción que puede desencadenar un objeto; es decir, la
acción que genera.
Atributos
Características que tiene la clase
Mensaje
Una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus
métodos con ciertos parámetros asociados al evento que lo generó.
Propiedad o atributo
Contenedor de un tipo de datos asociados a un objeto (o a una clase de
objetos), que hace los datos visibles desde fuera del objeto y esto se define
como sus características predeterminadas, y cuyo valor puede ser alterado
por la ejecución de algún método.
Estado interno
Es una variable que se declara privada, que puede ser únicamente accedida
y alterada por un método del objeto, y que se utiliza para indicar distintas
situaciones posibles para el objeto (o clase de objetos). No es visible al
programador que maneja una instancia de la clase.
7. Componentes de un objeto
Atributos, identidad, relaciones y métodos.
4.1.2. Estructura de Datos
Es una forma de organizar un conjunto de datos elementales con el objetivo
de facilitar su manipulación. Un dato elemental es la mínima información que
se tiene en un sistema.
Una estructura de datos define la organización e interrelación de estos y un
conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones
básicas son:
Alta, adicionar un nuevo valor a la estructura.
Baja, borrar un valor de la estructura.
Búsqueda, encontrar un determinado valor en la estructura para realizar
una operación con este valor, en forma secuencial o binario (siempre y
cuando los datos estén ordenados).
Otras operaciones que se pueden realizar son:
Ordenamiento, de los elementos pertenecientes a la estructura.
Apareo, dadas dos estructuras originar una nueva ordenada y que
contenga a las apareadas.
Cada estructura ofrece ventajas y desventajas en relación a la
simplicidad y eficiencia para la realización de cada operación. De esta
forma, la elección de la estructura de datos apropiada para cada
problema depende de factores como la frecuencia y el orden en que
se realiza cada operación sobre los datos.
4.2. Funciones del Sistema:
El Sistema contara con un menú, el cual tendrá las siguientes opciones:
Inventario: Esta opción constara con cuatro opciones:
consultar, ingresar, modificar, borrar.
Facturación: constara con una opción para consulta de
ventas realizadas, consulta de clientes, y una opción para la
facturación.
Salir: Cierra la sesión y el sistema.
4.3. Seguridades:
El sistema constara al momento de iniciar con una pantalla para ingresar un
usuario y contraseña, dependiendo si es un administrador o no, puede
acceder a todas las opciones del menú o tendrá ciertas restricciones.
El usuario que no es administrador solo tendrá restricciones en la siguiente
opción:
Inventario: solo podrá acceder a la opción consultar.
8. Facturación. Queda restringida la opción consulta de ventas
realizadas.
4.4. Orientación del Sistema:
El sistema estará orientado a las operaciones que se realizan en una
distribuidora de agua, dentro de estas están la venta de agua purificada
envasa en sus diversas presentaciones: bidones, galones, botellas y fundas.
Todas estas ventas estarán registradas en un archivo en donde solo podrá
acceder aquel usuario que tenga la condición de administrador. Este registro
contara con la fecha de venta, el cliente que realizo la venta, y el monto de la
venta.
Se podrá ingresar mercadería al inventario, modificarla, borrarla, y consultarla.
También se registran todo los clientes que realicen una compra en un archivo
al cual solo podrá acceder el administrador. En este archivo se registrarán:
Nombre
Cedula
Teléfono
Correo
Para agregar un nuevo cliente se lo realizara a través de la facturación, en
donde se pedirá el número de cédula, el sistema buscará en el archivo y si no
la encuentra informara que es un nuevo cliente y pedirá el resto de
información.
4.5. Herramientas utilizadas
4.5.1. Estructuras de Datos.
En este sistema se utiliza, dos tipos de estructuras datos:
Tres listas doblemente enlazadas cerradas;
Un árbol binario.
Las listas doblemente enlazadas están estructuradas de la siguiente manera,
estas servirán para:
Las lista de los clientes y empleados.
Para almacenar los productos que se han adquirido.
La última es la factura en sí, la cual formara los nodos del árbol
binario.
//**********************************************************
//*************************nodos personas*******************
//**********************************************************
typedef struct _Personas
{Persona *ListaP;
struct _Personas *sig,*ant;
9. }tpersona;
typedef tpersona *pnodoLDP;
typedef tpersona *ListaDP;
La cual servirá para manejar la información de los empleados y cliente de la
distribuidora; aplicando polimorfismo.
//**********************************************************
//************************nodos productos*******************
//**********************************************************
typedef struct _Producto
{long cod;
Producto *ListaPro;
int stock;
struct _Producto *sig,*ant;
}tproducto;
typedef tproducto *pnodoLDPRO;
typedef tproducto *ListaDPRO;
Esta estructura nos permitirá almacenar los datos de los productos que se
expenden en nuestra distribuidora; marca, contendido neto, precio y el stock.
//**********************************************************
//************************estructura detalles***************
//**********************************************************
typedef struct _Detalles
{int cant;
long codigo;
char *descripcion;
double puni;
double ppagar;
struct _Detalles *sig,*ant;
}tdetalles;
typedef tdetalles *pnodoDE;
typedef tdetalles *ListaDE;
//***********************************************************
//************************nodos factura**********************
//***********************************************************
typedef struct _Factura
{char *codigo;
char *cedula;
ListaDE *descrip;
double totalpagar;
char *estado;
struct _Factura *izq,*der;
}tfactura;
typedef tfactura *pnodoF;
typedef tfactura *ListaF;
10. Estas dos últimas estructuras, son para el manejo del registro de las ventas
realizadas en la distribuidora, la estructura detalles permitirá crear una lista
dinámica que almacenara los productos comprados en esa factura. La
estructura factura formara los nodos del árbol binario.
4.5.2. Clases y su derivación.
En este proyecto se instanciaron varias clases; todas ellas derivadas de una
sala clase abstracta denominada Producto. De esta se derivan las clases
Media, Litro, Galón, Bidón. Y tenemos un ultima derivación de la clase Media,
de la cual se desprende las clases Funda y Botella.
El esquema seria el siguiente:
En cuanto al manejo de estas clases, se emplean en varias de ellas el
polimorfismo, así como la abstracción de clases en la superclase Producto.
Otra característica empleada en estas es la herencia simple como lo
observamos en el esquema anterior.
Producto
BidónGalónLitro
Media
BotellaFunda
11. V. Conclusión
Se concluye que el lenguaje de programación c++, es un
lenguaje muy versátil aunque anticuado; pero no se puede
negar su importancia dentro del software actual; ya que la
gran mayoría de ellos tienen como base la programación en
lenguaje c.
Los conceptos aprendidos en este lenguaje, servirán como
base a futuro, pues estos mismos conceptos se aplican en
software de desarrollo más actuales tales como Java.
12. VI. Recomendación:
Al ser uno de los lenguajes base para la ingeniería en sistemas
informáticos, se recomienda enseñar este lenguaje de
manera transversal con otros en donde se vean reflejados de
manera más concreta los concepto aprendido tales como: la
herencia y el polimorfismo.