\documentclass[10pt]{article}
%%%%%%%% PREÁMBULO %%%%%%%%%%%%
\usepackage[spanish]{babel} %Indica que escribiermos en español
\usepackage[utf8]{inputenc} %Indica qué codificación se está usando ISO-8859-1(latin1) o utf8
\usepackage{amsmath} % Comandos extras para matemáticas (cajas para ecuaciones,
% etc)
\usepackage{amssymb} % Simbolos matematicos (por lo tanto)
\usepackage{graphicx} % Incluir imágenes en LaTeX
\usepackage{color} % Para colorear texto
\usepackage{subfigure} % subfiguras
\usepackage{ulem}
\usepackage{listings} %Sirve para pegar codigo fuente de programas
\usepackage{float} %Podemos usar el especificador [H] en las figuras para que se
% queden donde queramos
\usepackage{capt-of} % Permite usar etiquetas fuera de elementos flotantes
% (etiquetas de figuras)
\usepackage{enumerate} % enumerados
\usepackage{sidecap} % Para poner el texto de las imágenes al lado
\sidecaptionvpos{figure}{c} % Para que el texto se alinie al centro vertical
\usepackage{caption} % Para poder quitar numeracion de figuras
\usepackage{commath} % funcionalidades extras para diferenciales, integrales,
% etc (\od, \dif, etc)
\usepackage{cancel} % para cancelar expresiones (\cancelto{0}{x})
\usepackage{anysize} % Para personalizar el ancho de los márgenes
\marginsize{2cm}{2cm}{2cm}{2cm} % Izquierda, derecha, arriba, abajo
\usepackage{appendix}
\renewcommand{\appendixname}{Apéndices}
\renewcommand{\appendixtocname}{Apéndices}
\renewcommand{\appendixpagename}{Apéndices}
%%%%%%%%%%%%%%%%%%%%%Para la creación de tablas%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{array}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\usepackage{makecell}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Para que las referencias sean hipervínculos a las figuras o ecuaciones y
% aparezcan en color
\usepackage[colorlinks=true,plainpages=true,citecolor=blue,linkcolor=blue]{hyperref}
%\usepackage{hyperref}
% Para agregar encabezado y pie de página
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[L]{\footnotesize UPIITA} %encabezado izquierda
\fancyhead[R]{\footnotesize IPN} % dereecha
\fancyfoot[R]{\footnotesize Análisis y Diseño de Sistemas} % Pie derecha
\fancyfoot[C]{\thepage} % centro
\fancyfoot[L]{\footnotesize Ing. Telemática} %izquierda
\renewcommand{\footrulewidth}{0.4pt}
\usepackage{listings} % Para usar código fuente
\definecolor{dkgreen}{rgb}{0,0.6,0} % Definimos colores para usar en el código
\definecolor{gray}{rgb}{0.5,0.5,0.5}
% configuración para el lenguaje que queramos utilizar
\lstset{language=Matlab,
keywords={break,case,catch,continue,else,elseif,end,for,function,
global,if,otherwise,persistent,return,switch,try,while},
basicstyle=\ttfamily,
keywordstyle=\color{blue},
commentstyle=\color{red},
stringstyle=\color{dkgreen},
numbers=left,
numberstyle=\tiny\color{gray},
stepnumber=1,
numbersep=10pt,
backgroundcolor=\color{white},
tabsize=4,
showspaces=false,
showstringspaces=false}
\newcommand{\sen}{\operatorname{\sen}} % Definimos el comando \sen para el seno
%en español
\title{Sistema de gestión de inventario y personal para maquiladora 1TV2}
%%%%%%%% TERMINA PREÁMBULO %%%%%%%%%%%%
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% PORTADA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
\begin{center} %%%
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}} %%%\left
%%%
\begin{minipage}{0.48\textwidth} \begin{flushleft}
\includegraphics[scale = 0.1]{Imagenes/IPN}
\end{flushleft}\end{minipage}
\begin{minipage}{0.48\textwidth} \begin{flushright}
\includegraphics[scale = 0.4]{Imagenes/upiita}
\end{flushright}\end{minipage}
%%%
\vspace*{-1.5cm} %%%
%%%
\textsc{\huge Instituto Politécnico\\ \vspace{5px} Nacional}\\[1.5cm]
\textsc{\LARGE Unidad Profesional Interdisciplinaria en Ingeniería y %%%
Tecnologías Avanzadas}\\[1.5cm] %%%
%%%
\vspace*{1cm} %%%
%%%
\HRule \\[0.4cm] %%%
{ \huge \bfseries Sistema de gestión de inventario y personal para maquiladora}\\[0.4cm] %%%
%%%
\HRule \\[1.5cm] %%%
%%%
%%%
\begin{minipage}{0.46\textwidth} %%%
\begin{flushleft} \large %%%
\textit{Integrantes del equipo:}\\
Álvarez Santiago Daniela\\
Rojas Solís Juan Carlos\\
Salgado Casiano Milton Aldair\\
Servin Zamora Alejandro\\
%%%
%\vspace*{2cm}
%%%
%%%
\end{flushleft} %%%
\end{minipage}
%%%
\begin{minipage}{0.52\textwidth}
\vspace{-0.6cm} %%%
\begin{flushright} \large %%%
\emph{} %%%
\end{flushright} %%%
\end{minipage}
\vspace*{1cm}
%\begin{flushleft}
%\end{flushleft}
%%%
\flushleft{\textbf{\Large Profesora: Obdulia Pichardo Lagunas} }\\ %%%
\vspace{2cm}
\begin{center}
{\large 06 de junio de 2019} %%%
\end{center}
\end{center}
\newpage
%%%%%%%%%%%%%%%%%%%% TERMINA PORTADA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\tableofcontents
\newpage
\section{Descripción del problema}
Una empresa que se dedica a la manufactura de ropa solicitó que se le realizará una \uline{actualización al sistema que vienen manejando para la gestión del inventario y el personal}. La empresa argumenta que debido al aumento de clientes (pasó de unas decenas de clientes, a cientos de clientes alrededor del mundo) el sistema se ha hecho cada vez más lento y menos eficiente. También comentan que, \uline{si el sistema que vienen manejando es demasiado obsoleto como para actualizarse, cabe la posibilidad de que se haga uno nuevo}.
\newpage
\section{Objetivo general}
Diseñar e implementar un sistema que coadyuve en la correcta gestión de un almacén de materia prima, para la elaboración de ropa. Este mismo podrá agregar, eliminar, buscar y editar algún registro del almacén.
También podra mostrar todos los registros y podrá calcular el costo del material comprado. Asímismo podrá agregar, eliminar, buscar y editar algún registro de los almacenistas, mostrar todos los registros e imprimir un reporte de éstos últimos.
\newpage
\section{Objetivos particulares}
\begin{itemize}
\item Se colocará un mensaje de bienvenida al momento de iniciar el sistema, dicho mensaje contendrá lo siguiente:
\begin{itemize}
\item El nombre del proyecto (``Sistema de gestión de inventario y personal para maquiladora'').
\item El día, mes, año y hora.
\end{itemize}
\item Se implementará un login, pidiendo un usuario y una contraseña:
\begin{itemize}
\item El usuario y la contraseña solo se podrán modificar directamente en el código fuente, el ejecutable no podrá cambiar dichos parámetros.
\item En caso de que el operador del sistema se equivoque escribiendo el usuario y/o la contraseña 3 veces, el sistema desplegará un mensaje diciendo: ``Error, 3 intentos de usuario y/o contraseña incorrectos'' y automáticamente cerrara el programa.
\end{itemize}
\item Se incluirá un módulo que será el menú general. Dicho módulo contendrá:
\begin{enumerate}
\item Menú de almacenista
\item Menú de materia prima
\item Salir
\end{enumerate}
\item El menú de almacenista contendrá 7 opciones:
\begin{enumerate}
\item Agregar registro almacenista:
\begin{itemize}
\item El ID lo generará el programa de forma automática y secuencial, por lo que no se podrá repetir.
\item Luego pedirá el nombre del almacenista.
\end{itemize}
\item Borrar registro almacenista:
\begin{itemize}
\item Para borrar un registro de almacenista pedirá el número de ID.
\end{itemize}
\item Buscar registro almacenista:
\begin{itemize}
\item Para buscar un registro de almacenista pedirá el número de ID. Si el registro existe desplegará el ID y el nombre del almacenista.
\end{itemize}
\item Editar registro almacenista:
\begin{itemize}
\item Para editar un registro de almacenista pedirá el número de ID. Si el registro existe se podrá editar el nombre del almacenista.
\end{itemize}
\item Mostrar registro almacenista:
\begin{itemize}
\item El sistema desplegará el ID y el nombre del almacenista de todos los registros.
\end{itemize}
\item Imprimir reporte:
\begin{itemize}
\item Para mostrar el reporte pedirá el número de ID. Si el registro existe desplegará el ID y el nombre del almacenista (\textbf{NOTA: LO VA A IMPRIMIR EN PANTALLA, NO EN FÍSICO, además de que esto solo muestra un reporte por almacenista})
\end{itemize}
\item Salir del programa:
\end{enumerate}
\item En caso de que el operador escoja cualquier otro número que no sea del 1 al 7, el sistema desplegará el siguiente mensaje: ``Opción no válida, elija nuevamente''.
\newpage
\item El menú de materia prima contendrá 7 opciones:
\begin{enumerate}
\item Agregar materia prima:
\begin{itemize}
\item El ID lo generará el programa de forma automática y secuencial, por lo que no se podrá repetir.
\item Luego pedirá el nombre de la materia prima (por ejemplo, algodón, nilón, cuero, licra, poliéster, lana, etc.)
\item Luego pedirá el nombre del proveedor de la materia prima.
\item Después pedirá el precio unitario.
\item Después las unidades compradas.
\end{itemize}
\item Borrar registro de materia prima:
\begin{itemize}
\item Para borrar un registro del inventario pedirá el número de ID.
\end{itemize}
\item Buscar registro:
\begin{itemize}
\item Para buscar un registro del inventario pedirá el número de ID. Si el registro existe desplegará el ID, el nombre de la materia prima, el nombre del proveedor, el precio unitario y las unidades compradas.
\end{itemize}
\item Editar registros:
\begin{itemize}
\item Para editar un registro del inventario pedirá el número de ID. Si el registro existe se podrá editar el nombre de la materia prima, el nombre del proveedor, el precio unitario y las unidades compradas.
\end{itemize}
\item Mostrar registros:
\begin{itemize}
\item El sistema desplegará el ID, el nombre de la materia prima, el nombre del proveedor, el precio unitario y las unidades compradas de todos los registros de materia prima.
\end{itemize}
\item Calcular costo:
\begin{itemize}
\item Para calcular el costo de un registro del inventario pedirá el número de ID. Si el registro existe desplegará el costo calculado (NOTA: esto solo calculará el costo de un registro a la vez). La operación que realiza para calcular el costo es multiplicar el precio unitario por las unidades compradas.
\end{itemize}
\item Salir del programa:
\end{enumerate}
\item En caso de que el operador escoja cualquier otro número que no sea del 1 al 7, el sistema desplegará el siguiente mensaje: ``Opción no válida, elija nuevamente''.
\end{itemize}
\newpage
\section{Análisis de requerimientos}
Los análisis de requerimientos son la descripción de los servicios proporcionados por el sistema y sus restricciones operativas. Reflejan las necesidades del cliente de un sistema que resolverá un problema. En este capítulo se mostrarán las necesidades de nuestro cliente que se dividen en funcionales y no funcionales.
Funcionales: son funciones externas del programa como la información, interfaz, navegación y personalización del mismo.
No funcionales: son los requerimientos que tienen que ver con la usabilidad, eficiencia, fiabilidad, implementación y portabilidad del sistema.
\subsection{Requerimientos funcionales}
\begin{itemize}
\item El programa desplegará un mensaje de bienvenida que contendrá el nombre del sistema y la fecha (día, mes, año y hora).
\item Solo los usuarios que ingresen el nombre de usuario y la contraseña correctamente podrán ingresar al sistema.
\item El nombre de usuario y la contraseña solo podrán ser modificados directamente en el código fuente.
\item El nombre de usuario es: ``admin'' y la contraseña es: ``MyNewP4ss!''.
\item En caso de que el nombre de usuario o la contraseña sean introducidos de manera incorrecta un máximo de 3 veces, el sistema desplegará un mensaje de alerta y se cerrará el programa.
\item El sistema contendrá 3 menús: el menú general, el menú para todas las operaciones relacionadas con almacenista y el menú para todas las operaciones relacionadas con materia prima.
\item Para el menú almacenista:
\begin{itemize}
\item Contendrá 7 opciones:
\begin{enumerate}
\item Agregar registro almacenista
\begin{itemize}
\item El ID lo generará el programa de forma automática y secuencial, por lo que no se podrá repetir.
\item El ID sera una variable de tipo entero (int).
\item El campo nombre del almacenista podrá aceptar caracteres alfanuméricos.
\end{itemize}
\item Eliminar registro almacenista
\begin{itemize}
\item Esta opción pedirá el número de ID para eliminar el registro de almacenista.
\end{itemize}
\item Buscar registro almacenista
\begin{itemize}
\item Esta opción pedirá el número de ID para buscar el registro de almacenista.
\end{itemize}
\item Editar registro almacenista
\begin{itemize}
\item Esta opción pedirá el número de ID para editar el registro de almacenista.
\end{itemize}
\item Mostrar registros almacenistas
\begin{itemize}
\item Esta opción mostrará todos los registros guardados de almacenistas.
\end{itemize}
\item Imprimir reporte (\textbf{NOTA: LO VA A IMPRIMIR EN PANTALLA, NO EN FÍSICO})
\begin{itemize}
\item Esta opción pedirá el número de ID para imprimir el reporte de un solo almacenista.
\end{itemize}
\item Salir
\end{enumerate}
\end{itemize}
\newpage
\item Para el menú materia prima:
\begin{itemize}
\item Contendrá 7 opciones:
\begin{enumerate}
\item Agregar registro materia prima
\begin{itemize}
\item El ID lo generará el programa de forma automática y secuencial, por lo que no se podrá repetir.
\item El ID será una variable de tipo entero (int).
\item El campo nombre de la materia prima podrá aceptar caracteres alfanuméricos.
\item El campo nombre del proveedor podrá aceptar caracteres alfanuméricos.
\item El campo precio unitario solo podrá aceptar números con o sin decimales.
\item El campo cantidad total comprada solo podrá aceptar números con o sin decimales.
\end{itemize}
\item Eliminar registro materia prima
\begin{itemize}
\item Esta opción pedirá el número de ID para eliminar el registro de materia prima.
\end{itemize}
\item Buscar registro materia prima
\begin{itemize}
\item Esta opción pedirá el número de ID para buscar el registro de materia prima.
\end{itemize}
\item Editar registro materia prima
\begin{itemize}
\item Esta opción pedirá el número de ID para editar el registro de materia prima.
\end{itemize}
\item Mostrar registros materia prima
\begin{itemize}
\item Esta opción mostrará todos los registros guardados de materia prima.
\end{itemize}
\item Costo total por producto
\begin{itemize}
\item Esta opción pedirá el número de ID para calcular el costo total por producto. La operación que realiza es la siguiente: multiplica el precio unitario por la cantidad total comprada y el resultado es el costo total por producto.
\end{itemize}
\item Salir
\end{enumerate}
\end{itemize}
\item El sistema solo podrá ser utilizado en sistemas operativos Windows.
\end{itemize}
\newpage
\subsection{Requerimientos no funcionales}
\begin{itemize}
\item La rapidez de las operaciones del sistema dependerá enteramente del hardware en el que se ejecute.
\item El sistema será desarrollado únicamente para sistemas operativos Windows.
\item El sistema solo manejará el idioma español.
\item El proceso de desarrollo se gestionará por medio de la herramienta proporcionada por el sitio web Github.
\item El sistema no revelará el nombre de usuario y/o contraseña para ingresar al mismo.
\item El sistema no estará bajo ninguna licencia.
\item El sistema será escrito en el lenguaje de programación C++.
\end{itemize}
\newpage
\subsection{Registro de requerimientos en formatos}
\begin{table}[!htb]
\centering
\begin{tabular}{|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|}
\hline
\multicolumn{5}{|c|}{\textbf{Registro de requerimientos}} \\ \hline
\textbf{ID del requerimiento:} & \multicolumn{4}{|c|}{FD01} \\ \hline
\textbf{Nombre del requerimiento:} & \multicolumn{4}{|c|}{Bienvenida} \\ \hline
\textbf{Identificación del requerimiento:} & \multicolumn{4}{|c|}{Mensaje de bienvenida} \\ \hline
\textbf{Características:} & \multicolumn{4}{|c|}{\thead{El programa desplegará un mensaje de bienvenida que contendrá el nombre del sistema \\ y la fecha (día, mes, año y hora)}} \\ \hline
\textbf{Descripción del requerimiento:} & \multicolumn{4}{|c|}{\thead{Este requerimiento será para desplegar el mensaje de bienvenida \\ al momento de iniciar el sistema}} \\ \hline
\textbf{Requerimiento NO funcional:} & \multicolumn{4}{|c|}{NFD01 ; NFD02 ; NFD03 ; NFD04 ; NFD05 ; NFD06 ; NFD07} \\ \hline
\multicolumn{5}{|c|}{\textbf{Prioridad del requerimiento}} \\ \hline
\textbf{Alta} & \textbf{Media Alta} & \textbf{Media} & \textbf{Media Baja} & \textbf{Baja} \\ \hline
& & & X & \\ \hline
\end{tabular}
\newline
\caption{Requerimiento 1}\label{tab1}
\end{table}
\begin{table}[!htb]
\centering
\begin{tabular}{|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|}
\hline
\multicolumn{5}{|c|}{\textbf{Registro de requerimientos}} \\ \hline
\textbf{ID del requerimiento:} & \multicolumn{4}{|c|}{FD02} \\ \hline
\textbf{Nombre del requerimiento:} & \multicolumn{4}{|c|}{Ingreso al sistema} \\ \hline
\textbf{Identificación del requerimiento:} & \multicolumn{4}{|c|}{Usuarios autorizados} \\ \hline
\textbf{Características:} & \multicolumn{4}{|c|}{El usuario y contraseña deberán coincidir con el proporcionado por el desarrollador} \\ \hline
\textbf{Descripción del requerimiento:} & \multicolumn{4}{|c|}{\thead{Solo los usuarios que ingresen el nombre de usuario y la contraseña \\ correctamente podrán ingresar al sistema}} \\ \hline
\textbf{Requerimiento NO funcional:} & \multicolumn{4}{|c|}{NFD01 ; NFD02 ; NFD03 ; NFD04 ; NFD05 ; NFD06 ; NFD07} \\ \hline
\multicolumn{5}{|c|}{\textbf{Prioridad del requerimiento}} \\ \hline
\textbf{Alta} & \textbf{Media Alta} & \textbf{Media} & \textbf{Media Baja} & \textbf{Baja} \\ \hline
X & & & & \\ \hline
\end{tabular}
\newline
\caption{Requerimiento 2}\label{tab2}
\end{table}
\begin{table}[!htb]
\centering
\begin{tabular}{|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|}
\hline
\multicolumn{5}{|c|}{\textbf{Registro de requerimientos}} \\ \hline
\textbf{ID del requerimiento:} & \multicolumn{4}{|c|}{FD03} \\ \hline
\textbf{Nombre del requerimiento:} & \multicolumn{4}{|c|}{Configuración usuario y contraseña} \\ \hline
\textbf{Identificación del requerimiento:} & \multicolumn{4}{|c|}{Configuración seguridad login} \\ \hline
\textbf{Características:} & \multicolumn{4}{|c|}{Solo se podrá cambiar el usuario y contraseña a través del código fuente} \\ \hline
\textbf{Descripción del requerimiento:} & \multicolumn{4}{|c|}{\thead{El nombre de usuario y la contraseña \\ solo podrán ser modificados directamente en el código fuente}} \\ \hline
\textbf{Requerimiento NO funcional:} & \multicolumn{4}{|c|}{NFD01 ; NFD02 ; NFD03 ; NFD04 ; NFD05 ; NFD06 ; NFD07} \\ \hline
\multicolumn{5}{|c|}{\textbf{Prioridad del requerimiento}} \\ \hline
\textbf{Alta} & \textbf{Media Alta} & \textbf{Media} & \textbf{Media Baja} & \textbf{Baja} \\ \hline
X & & & & \\ \hline
\end{tabular}
\newline
\caption{Requerimiento 3}\label{tab3}
\end{table}
\begin{table}[!htb]
\centering
\begin{tabular}{|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|}
\hline
\multicolumn{5}{|c|}{\textbf{Registro de requerimientos}} \\ \hline
\textbf{ID del requerimiento:} & \multicolumn{4}{|c|}{FD04} \\ \hline
\textbf{Nombre del requerimiento:} & \multicolumn{4}{|c|}{Usuario y contraseña} \\ \hline
\textbf{Identificación del requerimiento:} & \multicolumn{4}{|c|}{Credenciales} \\ \hline
\textbf{Características:} & \multicolumn{4}{|c|}{Nombre de usuario y contraseña proporcionados por el desarrollador} \\ \hline
\textbf{Descripción del requerimiento:} & \multicolumn{4}{|c|}{El nombre de usuario es: ``admin'' y la contraseña es: ``MyNewP4ss!''} \\ \hline
\textbf{Requerimiento NO funcional:} & \multicolumn{4}{|c|}{NFD01 ; NFD02 ; NFD03 ; NFD04 ; NFD05 ; NFD06 ; NFD07} \\ \hline
\multicolumn{5}{|c|}{\textbf{Prioridad del requerimiento}} \\ \hline
\textbf{Alta} & \textbf{Media Alta} & \textbf{Media} & \textbf{Media Baja} & \textbf{Baja} \\ \hline
X & & & & \\ \hline
\end{tabular}
\newline
\caption{Requerimiento 4}\label{tab4}
\end{table}
\begin{table}[!htb]
\centering
\begin{tabular}{|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|}
\hline
\multicolumn{5}{|c|}{\textbf{Registro de requerimientos}} \\ \hline
\textbf{ID del requerimiento:} & \multicolumn{4}{|c|}{FD05} \\ \hline
\textbf{Nombre del requerimiento:} & \multicolumn{4}{|c|}{3 intentos} \\ \hline
\textbf{Identificación del requerimiento:} & \multicolumn{4}{|c|}{Error al tercer intento login} \\ \hline
\textbf{Características:} & \multicolumn{4}{|c|}{Se tendrá un máximo de 3 intentos para ingresar al sistema} \\ \hline
\textbf{Descripción del requerimiento:} & \multicolumn{4}{|c|}{\thead{En caso de que el nombre de usuario o la contraseña sean introducidos de manera incorrecta \\ un máximo de 3 veces, el sistema desplegará un mensaje de alerta y \\ se cerrará el programa}} \\ \hline
\textbf{Requerimiento NO funcional:} & \multicolumn{4}{|c|}{NFD01 ; NFD02 ; NFD03 ; NFD04 ; NFD05 ; NFD06 ; NFD07} \\ \hline
\multicolumn{5}{|c|}{\textbf{Prioridad del requerimiento}} \\ \hline
\textbf{Alta} & \textbf{Media Alta} & \textbf{Media} & \textbf{Media Baja} & \textbf{Baja} \\ \hline
X & & & & \\ \hline
\end{tabular}
\newline
\caption{Requerimiento 5}\label{tab5}
\end{table}
\begin{table}
\centering
\begin{tabular}{|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|}
\hline
\multicolumn{5}{|c|}{\textbf{Registro de requerimientos}} \\ \hline
\textbf{ID del requerimiento:} & \multicolumn{4}{|c|}{FD06} \\ \hline
\textbf{Nombre del requerimiento:} & \multicolumn{4}{|c|}{Menús} \\ \hline
\textbf{Identificación del requerimiento:} & \multicolumn{4}{|c|}{3 menús} \\ \hline
\textbf{Características:} & \multicolumn{4}{|c|}{Se tendrán 3 menús} \\ \hline
\textbf{Descripción del requerimiento:} & \multicolumn{4}{|c|}{\thead{El sistema contendrá 3 menus: el menú general, \\ el menú para todas las operaciones relacionadas con almacenista y el menú \\ para todas las operaciones relacionadas con materia prima}} \\ \hline
\textbf{Requerimiento NO funcional:} & \multicolumn{4}{|c|}{NFD01 ; NFD02 ; NFD03 ; NFD04 ; NFD05 ; NFD06 ; NFD07} \\ \hline
\multicolumn{5}{|c|}{\textbf{Prioridad del requerimiento}} \\ \hline
\textbf{Alta} & \textbf{Media Alta} & \textbf{Media} & \textbf{Media Baja} & \textbf{Baja} \\ \hline
& & X & & \\ \hline
\end{tabular}
\newline
\caption{Requerimiento 6}\label{tab6}
\end{table}
\begin{table}[!htb]
\centering
\begin{tabular}{|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|M{2.5cm}|}
\hline
\multicolumn{5}{|c|}{\textbf{Registro de requerimientos}} \\ \hline
\textbf{ID del requerimiento:} & \multicolumn{4}{|c|}{FD07} \\ \hline
\textbf{Nombre del requerimiento:} & \multicolumn{4}{|c|}{Plataforma SO} \\ \hline
\textbf{Identificación del requerimiento:} & \multicolumn{4}{|c|}{Plataforma} \\ \hline
\textbf{Características:} & \multicolumn{4}{|c|}{Solo se podrá ejecutar en sistemas operativos Windows} \\ \hline
\textbf{Descripción del requerimiento:} & \multicolumn{4}{|c|}{El sistema solo podrá ser utilizado en sistemas operativos Windows} \\ \hline
\textbf{Requerimiento NO funcional:} & \multicolumn{4}{|c|}{NFD01 ; NFD02 ; NFD03 ; NFD04 ; NFD05 ; NFD06 ; NFD07} \\ \hline
\multicolumn{5}{|c|}{\textbf{Prioridad del requerimiento}} \\ \hline
\textbf{Alta} & \textbf{Media Alta} & \textbf{Media} & \textbf{Media Baja} & \textbf{Baja} \\ \hline
& & & & X \\ \hline
\end{tabular}
\newline
\caption{Requerimiento 7}\label{tab7}
\end{table}
\clearpage
\begin{itemize}
\item \textbf{NFD01 -} La rapidez de las operaciones del sistema dependerá enteramente del hardware en el que se ejecute.
\item \textbf{NFD02 -} El sistema será desarrollado únicamente para sistemas operativos Windows.
\item \textbf{NFD03 -} El sistema solo manejará el idioma español.
\item \textbf{NFD04 -} El proceso de desarrollo se gestionará por medio de la herramienta proporcionada por el sitio web Github.
\item \textbf{NFD05 -} El sistema no revelará el nombre de usuario y/o contraseña para ingresar al mismo.
\item \textbf{NFD06 -} El sistema no estará bajo ninguna licencia.
\item \textbf{NFD07 -} El sistema será escrito en el lenguaje de programación C++.
\end{itemize}
\clearpage
\newpage
\section{Estado del arte}
El estado del arte nos permite el estudio de conocimiento acumulado sobre un tema específico y de esta manera determinar los avances más importantes en dicho tema, este capítulo tiene como objetivo mostrar la implementación de softwares parecidos al que desarrollamos y sus resultados.
\subsection{Software 1: Daifuku}
Desde 1966 Daifuku desarrolló el primer sistema de almacenamiento. Los objetivos para desarrollar este sistema incluían alcanzar reducciones en la carga de trabajo y ahorros en costos mediante:
\begin{enumerate}[1.]
\item El uso efectivo de la tierra
\item Las mejoras en la eficacia del almacenaje
\item Ahorro en costos de personal y de mano de obra en el trabajo en almacén y
\item Mejoras en los niveles de gestión \cite{IEEEreferencias:Ref1}
\end{enumerate}
\subsection{Software 2: NetSuite}
NetSuite Inc. es una empresa estadounidense de computación en la nube fundada en 1998 con sede en San Mateo, California, que proporciona software y servicios para administrar las finanzas comerciales, las operaciones y las relaciones con los clientes. Su software y servicios están diseñados para pequeñas y medianas empresas.
NetSuite ofrece cuatro soluciones principales de software y servicios opcionales de implementación y soporte:
\begin{itemize}
\item \textbf{Planificación de recursos empresariales (ERP):} NetSuite ERP admite operaciones de back office que incluyen recursos financieros, recursos humanos, compras, pedidos, inventario, envío y facturación.
\item \textbf{NetSuite OneWorld:} ofrece los servicios anteriores más capacidades adicionales para compañías multinacionales, como la capacidad de administrar múltiples subsidiarias, monedas, estándares de contabilidad y requisitos fiscales.
\item \textbf{Gestión de las relaciones con los clientes (CRM):} NetSuite CRM es compatible con las operaciones de marketing, ventas y servicios.
\item \textbf{Comercio electrónico (e-commerce):} SuiteCommerce de NetSuite está pensado como una plataforma para ventas en línea e integración con las herramientas tradicionales de teléfono y punto de venta (POS). La plataforma de SuiteCommerce está actualmente en uso por más de 1600 sitios web en línea.
\item \textbf{Automatización de servicios profesionales (PSA):} NetSuite PSA se basa en la adquisición de OpenAir y administra las operaciones de negocios basados en servicios y orientados a proyectos.
\item \textbf{Servicios Netsuite:} SuitePackages ofrece servicios básicos de implementación para clientes. Packaged Services ofrece personalización e integración de las soluciones Netsuite; el soporte de suite ofrece ayuda y soporte en línea en caso de problemas.\cite{IEEEreferencias:Ref2}
\end{itemize}
\newpage
\subsection{Software 3: Katana MRP}
Katana MRP es un software de producción e inventario para fabricantes. Katana está repleta de características que ayudan a dirigir un taller inteligente.
Características:
\begin{itemize}
\item \textbf{Planeación de producción}
\begin{itemize}
\item Prioridades de arrastrar y soltar para trabajos de fabricación.
\item Rastrear la disponibilidad de materiales requeridos.
\item Identificar los riesgos de demora relacionados con los tiempos de entrega del material.
\item Fechas de finalización esperadas exactas.
\item Obtenga información general del estado de producción en tiempo real desde el nivel del piso.
\end{itemize}
\item \textbf{Control de inventario en tiempo real y optimización}
\begin{itemize}
\item Control de inventario de productos terminados y materias primas.
\item Transacciones de inventario automatizadas.
\item Control en mano, cantidad de stocks comprometidos y esperados en tiempo real.
\item Mantener niveles de inventario óptimos usando puntos de pedido.
\item Tomar decisiones precisas de fabricación y compra.
\item Gestiona fácilmente las variantes de productos y materiales.
\end{itemize}
\item \textbf{Cumplimiento de órdenes de venta}
\begin{itemize}
\item Rastrear la disponibilidad de productos requeridos.
\item Prioridades de arrastrar y soltar de pedidos de clientes.
\item Hacer a pedido o cumplir con el stock de producto disponible.
\item Identifique los riesgos de demora en la entrega y vuelva a priorizar para cumplir con los plazos.
\item Sincronizar pedidos de ventas de múltiples canales en un único panel de control.
\end{itemize}
\item \textbf{Integrado con servicios en línea}
\begin{itemize}
\item Sincronizar ventas con plataformas de comercio electrónico.
\item Empuje las órdenes de venta a la contabilidad para la facturación.
\item Mantener las compras sincronizadas con la contabilidad.\cite{IEEEreferencias:Ref3}
\end{itemize}
\end{itemize}
\subsection{Software 4: Zoho}
Software completo y adecuado para negocios e industrias de todos los tamaños. Equipado con AI.
Características:
\begin{itemize}
\item \textbf{Multicanal:} conéctese en tiempo real con los clientes y clientes potenciales en todos los canales. Desde correo electrónico hasta teléfono, pasando por chat en vivo e incluso en medios sociales. SalesSignals notifica cuando un cliente potencial prioritario navega en su sitio, lee su campaña de correo electrónico o interactúa con su marca en medios sociales.
\item \textbf{Zia (inteligencia artificial):} gracias a que Zia aprende sobre su empresa y su equipo, puede realizar predicciones sobre tendencias, anomalías, conversiones y tratos que se cerrarán. Zia también automatiza de forma automática las tareas más recurrentes para agilizar su ciclo de ventas.
\item \textbf{Automatización de ventas:} las capacidades de automatización avanzadas de Zoho CRM ayudan a que su equipo de ventas ahorre tiempo, ya que completa las tareas de rutina automáticamente, de este modo se pueden enfocar en cerrar una mayor cantidad de tratos en menos tiempo.
\item \textbf{Móvil:} manténgase informado sobre el negocio en cualquier lugar y a toda hora gracias a la edición para dispositivos móviles de Zoho CRM. Infórmese mejor, manténgase conectado con sus clientes y colegas y reaccione a los rápidos cambios que ocurren, dondequiera que se encuentre.\cite{IEEEreferencias:Ref4}
\end{itemize}
\newpage
\section{Marco teórico}
\subsection{Definición lenguaje de programación}
Vamos a comenzar definiendo que es un lenguaje de programación. En informática, se conoce como lenguaje de programación a un programa destinado a la construcción de otros. Su nombre se debe a que comprende un lenguaje formal que está diseñado para organizar algoritmos y procesos lógicos que serán luego llevados a cabo por un ordenador o sistema informático, permitiendo controlar así su comportamiento físico, lógico y su comunicación con el usuario humano.\cite{IEEEreferencias:Ref10}
\subsection{Paradigmas de programación}
Ahora, comúnmente los lenguajes de programación se clasifican por paradigmas de programación. Podemos decir que los paradigmas son propuestas que podemos adoptar o seguir para solucionar un problema. Existen distintos tipos de paradigmas, pero solamente nos enfocaremos en dos: paradigma estructurado y paradigma orientado a objetos (retomaremos estos conceptos más adelante).
\subsubsection{Paradigma estructurado}
El paradigma de la programación estructurada es probablemente el más usado para iniciar en la programación. Tiene reglas muy sencillas:
\begin{itemize}
\item El inicio del archivo es el inicio de la programación y el final del archivo es el final de la programación; en otras palabras es secuencial.
\item Se pueden utilizar instrucciones de control como las condicionales (if)
\item Se pueden utilizar instrucciones de iteración (Bucles)
\end{itemize}
\subsubsection{Paradigma orientado a objetos}
El paradigma de la programación orientada a objetos es de los más usados para desarrollo de software en la industria, esto se debe a que los objetos y las clases son la base de muchos proyectos.
Algunas de las cosas que debemos saber de este paradigmas son:
\begin{itemize}
\item Los objetos se crean y se destruyen
\item Las clases son lo que utilizamos para definir los objetos
\item Las clases pueden contener atributos y métodos.\cite{IEEEreferencias:Ref11}
\end{itemize}
\newpage
\subsection{Antecedentes}
Ahora bien, hablaremos un poco acerca de la historia del lenguaje C. Es uno de los lenguajes de programación más populares en el mundo ya que tiene funciones avanzadas y notorias. Creado en el año 1969 en la empresa de AT\&T, aunque solo era una idea para poder resolver algunos inconvenientes con los lenguajes de la época y fue hasta 1972 donde se sentarón las bases del lenguaje C.\cite{IEEEreferencias:Ref5}
Posteriormente ANSI desarrollo C++ que fue hecho con base en el lenguaje C, y la principal razón por la cual se desarrollo fue para extender el ya existente lenguaje C, con funciones que permitirían la manipulación de objetos, por lo que se puede decir que este lenguaje es un híbrido, ya que se puede tomar como paradigma de programación estructurada o también puede ser orientada a objetos.\cite{IEEEreferencias:Ref6}
Para el paradigma de programación estructurada podemos entender que esta enfocado a mejorar la claridad, calidad y tiempo de desarrollo de un proyecto. De esta manera para poder crear un programa parte de un teorema desarrollado por Edsger Dikjstra, que en el demuestra que todo sistema puede escribirse utilizando únicamente tres estructuras de control:
\begin{enumerate}
\item \textbf{Secuencia:} el bloque secuencial de instrucciones, ejecutadas sucesivamente, una detrás de otra.
\item \textbf{Selección:} la instrucción condicional con doble alternativa, de la forma ``\textbf{if} condición \textbf{then} instrucción 1, \textbf{else} instrucción 2''.
\item \textbf{Iteración:} el bucle condicional ``\textbf{while} condición \textbf{do} instrucción'', este ejecuta repetidamente la acción mientras la condición se cumpla.
\end{enumerate}
Aquí también entra un nuevo enfoque:
\textbf{Segmentación:} es la división de un problema global en varios mas pequeños y así poder resolver mas fácilmente el problema global (divide y vencerás).\cite{IEEEreferencias:Ref8}
Mientras que en la programación estructurada dividía los problemas para obtener unos más pequeños o que sean mas generales, en el paradigma orientado a objetos tomaba otro enfoque en el cual consistía en usar objetos y sus interacciones que pueden llegar a tener con otros objetos.
Esta basado en varias técnicas como:
\begin{itemize}
\item \textbf{Herencia:} es cuando una clase que contiene objetos crea una subclase, en el cual pueden compartir ya sean varias características de la clase madre o tenga todas las características de la principal y aparte ésta subclase tenga mas métodos o atributos autónomos de la clase madre.
\item \textbf{Abstracción:} son las características que puede tener un objeto y que ayuda a diferenciarse de otros.
\item \textbf{Polimorfismo:} es la capacidad que tienen los objetos de una clase de responder al mismo evento en función de los parámetros utilizados durante su invocación. Podemos entender por esto que es el tipo de datos que manejara el objeto para poder trabajar y que al final de su ejecución devolverá un valor del mismo tipo que el objeto.
\item \textbf{Encapsulamiento:} es un mecanismo el cual consiste en no permitir el acceso a datos por cualquier medio distinto a los especificados. Por lo tanto, el encapsulamiento garantiza la integridad de los datos que contiene un objeto.\cite{IEEEreferencias:Ref9}
\end{itemize}
Entonces podemos decir que el paradigma de programación orientada a objetos se diferencía de la estructurada con el manejo de objetos, en el cual depende de creación de clases que son las encargadas de generar los objetos y a su vez estos utilizan ciertos atributos y métodos de la clase para poder realizar una ejecución de un bloque de código que puede o no regresar valores del mismo tipo como resultado de su ejecución.
Para poder ejecutar o ver los resultados del lenguaje C++, este utiliza un programa especial que procesa las instrucciones escritas en un lenguaje de alto nivel y las convierte a lenguaje máquina(binario). El programa permite la comprobación de errores y a su vez crea un archivo ejecutable, que es el que se encarga de mostrar el resultado de lo que se hizo en el lenguaje de programación.\cite{IEEEreferencias:Ref7}
En la actualidad se han desarrollado diversos tipos de programas con este lenguaje, que al trabajar con el te ayuda a entenderlo más fácilmente y así poder crear una solución a un problema. También con ayuda de ciertos diagramas que se elaboran previamente al código fuente podemos tener una perspectiva de como funcionará el programa.
\newpage
\section{Solución propuesta}
En esta sección, se va a mostrar la solución propuesta para el objetivo planteado. Se mostrarán los diagramas que se realizaron para la creación del "Sistema de gestión de inventario y personal para maquiladora".
\subsection{Diagrama de casos de uso}
Como se puede apreciar en las figuras \ref{fig:casosdeuso1} y \ref{fig:casosdeuso2}, se propuso que un solo actor iba a manejar el sistema (en este caso, sería el administrador del almacen).
\begin{figure}[ht]
\begin{center}
\includegraphics[width =\textwidth]{DIAGRAMAS/CASOSDEUSO/DIAGRAMA_CASOS_USO_PARTE1.jpg}
\captionof{figure}{\label{fig:casosdeuso1}Diagrama de casos de uso para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\begin{figure}[ht]
\begin{center}
\includegraphics[width =\textwidth]{DIAGRAMAS/CASOSDEUSO/DIAGRAMA_CASOS_USO_PARTE2.jpg}
\captionof{figure}{\label{fig:casosdeuso2}Diagrama de casos de uso para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\clearpage
\newpage
\subsection{Diagrama de clases}
En la figura \ref{fig:clases}, se propusieron 5 clases. La clase C\_sistema es la superclase, mientras que las clases C\_materia\_prima y C\_almacenista heredan sus métodos (cabe mencionar que son métodos virtuales). La clase C\_ login esta en una relación de composición con la clase C\_menú y con multiplicidad 1 a 1.
\begin{figure}[h]
\begin{center}
\includegraphics[width =\textwidth]{DIAGRAMAS/CLASES/DIAGRAMA_CLASES.jpg}
\captionof{figure}{\label{fig:clases}Diagrama de clases para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\newpage
\subsection{Diagrama de estado}
Debido a que el diagrama de estados iba a ser demasiado grande y complicado de interpretar, se optó por dividir los procesos. Como se puede apreciar en la figura \ref{fig:estado1}, se realizó el diagrama de estados de la opción agregar.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.3]{DIAGRAMAS/ESTADOS/ESTADO_AGREGAR.jpg}
\captionof{figure}{\label{fig:estado1}Diagrama de estados de la opción agregar para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
En la figura \ref{fig:estado2}, se realizó el diagrama de estados de la opción borrar.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.3]{DIAGRAMAS/ESTADOS/ESTADO_BORRAR.jpg}
\captionof{figure}{\label{fig:estado2}Diagrama de estados de la opción borrar para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
En la figura \ref{fig:estado3}, se realizó el diagrama de estados de la opción editar.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.3]{DIAGRAMAS/ESTADOS/ESTADO_EDITAR.jpg}
\captionof{figure}{\label{fig:estado3}Diagrama de estados de la opción editar para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
En la figura \ref{fig:estado4}, se realizó el diagrama de estados de la opción mostrar.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.3]{DIAGRAMAS/ESTADOS/ESTADO_MOSTRAR.jpg}
\captionof{figure}{\label{fig:estado4}Diagrama de estados de la opción mostrar para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\newpage
En la figura \ref{fig:estado5}, se realizó el diagrama de estados de la opción costo total.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.4]{DIAGRAMAS/ESTADOS/ESTADO_COSTO_TOTAL.jpg}
\captionof{figure}{\label{fig:estado5}Diagrama de estados de la opción costo total para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
En la figura \ref{fig:estado6}, se realizó el diagrama de estados de la opción imprimir reporte.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.4]{DIAGRAMAS/ESTADOS/ESTADO_IMPRIMIR_REPORTE.jpg}
\captionof{figure}{\label{fig:estado6}Diagrama de estados de la opción imprimir reporte para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\clearpage
\newpage
\subsection{Diagrama de secuencia}
Se presentarán los diagramas de secuencia que se elaboraron. Como se puede apreciar en la figura \ref{fig:secuencia1}, se realizó el diagrama de secuencia de la opción agregar materia prima.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.45]{DIAGRAMAS/SECUENCIA/SECUENCIA_AGREGAR_MATERIA_PRIMA.jpg}
\captionof{figure}{\label{fig:secuencia1}Diagrama de secuencia de la opción agregar materia prima para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
En la figura \ref{fig:secuencia2}, se realizó el diagrama de secuencia de la opción agregar almacenista.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.45]{DIAGRAMAS/SECUENCIA/SECUENCIA_AGREGAR_ALMACENISTA.jpg}
\captionof{figure}{\label{fig:secuencia2}Diagrama de secuencia de la opción agregar almacenista para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\newpage
En la figura \ref{fig:secuencia3}, se realizó el diagrama de secuencia de la opción editar materia prima.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.45]{DIAGRAMAS/SECUENCIA/SECUENCIA_EDITAR_MATERIA_PRIMA.jpg}
\captionof{figure}{\label{fig:secuencia3}Diagrama de secuencia de la opción editar materia prima para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
En la figura \ref{fig:secuencia4}, se realizó el diagrama de secuencia de la opción editar almacenista.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.45]{DIAGRAMAS/SECUENCIA/SECUENCIA_EDITAR_ALMACENISTA.jpg}
\captionof{figure}{\label{fig:secuencia4}Diagrama de secuencia de la opción editar almacenista para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\newpage
En la figura \ref{fig:secuencia5}, se realizó el diagrama de secuencia de la opción calcular costo materia prima.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.5]{DIAGRAMAS/SECUENCIA/SECUENCIA_CALCULAR_COSTO_MATERIA_PRIMA.jpg}
\captionof{figure}{\label{fig:secuencia5}Diagrama de secuencia de la opción calcular costo materia prima para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
En la figura \ref{fig:secuencia6}, se realizó el diagrama de secuencia de la opción imprimir reporte almacenista.
\begin{figure}[!htb]
\begin{center}
\includegraphics[scale=0.6]{DIAGRAMAS/SECUENCIA/SECUENCIA_IMPRIMIR_REPORTE_ALMACENISTA.jpg}
\captionof{figure}{\label{fig:secuencia6}Diagrama de secuencia de la opción imprimir reporte almacenista para el ``Sistema de gestión de inventario y personal para maquiladora''.}
\end{center}
\end{figure}
\newpage
\subsection{Código}
En esta sección, se mostrarán algunos fragmentos del código que se elaboró para el ``Sistema de gestión de inventario y personal para maquiladora''.
\subsubsection{Agregar almacenista}
Para este fragmento del código, dentro de la clase C\_sistema se declararon métodos virtuales (como se explicó anteriormente en el diagrama de clases). Posteriormente se creo la subclase C\_almacenista y dentro de ésta se creo un método agregar. El código de esta subclase es el siguiente:
\begin{lstlisting}[language=C++]
#ifndef _ALMACENISTA_H
#define _ALMACENISTA_H
#include "SISTEMA.h"
using namespace std;
//C_ALMACENISTA HEREDA ATRIBUTOS Y METODOS DE C_SISTEMA
class C_almacenista : public C_sistema
{
public://ATRIBUTOS
int ID_almacenista;
string nombre_almacenista;
public://METODOS
C_almacenista();
void agregar();
void editar();
void mostrar();
void imprimir_reporte();
};
//CONSTRUCTOR
C_almacenista::C_almacenista()
{
//SE INICIALIZA EL ID DE ALMACENISTAS EN 1
ID_almacenista=1;
};
//METODO AGREGAR
void C_almacenista::agregar()
{
ID_almacenista;
//SE PIDE EL NOMBRE DEL ALMACENISTA
cout<<"Ingresa el nombre del almacenista"<<endl;
getline(cin, nombre_almacenista);
}
\end{lstlisting}
\newpage
Después se creo una clase llamada C\_menú, que será la encargada de administrar las demás clases.
\begin{lstlisting}[language=C++]
#ifndef _MENU_H
#define _MENU_H
#include "ALMACENISTA.h"
#include "MATERIA_PRIMA.h"
#include<vector>
using namespace std;
class C_menu
{
public://ATRIBUTOS
char opcion;
vector<C_almacenista> dato2;
C_almacenista objeto2;
vector<C_materia_prima> dato3;
C_materia_prima objeto3;
int verificar,pos,flag2,flag3;
public://METODOS
C_menu();
void menu_general();
void menu_almacenista();
void menu_materia_prima();
};
//CONSTRUCTOR DE MENU
C_menu::C_menu()
{
pos=-1;
};
\end{lstlisting}
Se crearon vectores de tipo C\_almacenista y C\_materia\_prima. Tambien se crearon objetos para las subclases C\_almacenista y C\_materia\_prima.
Ahora, para finalmente agregar un registro se hizo lo siguiente:
\begin{lstlisting}[language=C++]
//BORRA PANTALLA Y DESPLIEGA EL METODO AGREGAR DE LA CLASE ALMACENISTA
system("cls");
objeto2.agregar();
dato2.push_back(objeto2);//SE GUARDA EL NOMBRE DEL ALMACENISTA
objeto2.ID_almacenista++;//SE DA EL INCREMENTO DEL ID PARA EL SIGUIENTE REGISTRO
cout<<"-------------------------------"<<endl;
cout<<"REGISTRO AGREGADO EXITOSAMENTE"<<endl;
cout<<"-------------------------------"<<endl;
\end{lstlisting}
El código mostrado esta dentro de un switch case, siendo la opción 1 de agregar registro almacenista. Básicamente lo que hace es, llama al método agregar a traves del objeto2, luego todos los datos son metidos dentro de un arreglo dinámico (la función push\_back lo que hace es guarda los datos de atras hacia adelante). Luego se aumenta el ID para que la siguiente vez que se guarde un dato, el ID sea el inmediato superior o lo que es lo mismo, el que le sigue.
\newpage
\subsubsection{Agregar materia prima}
Lo mismo aplica para este método. Solo se pondrá el código del método agregar de la clase C\_materia\_prima.
\begin{lstlisting}[language=C++]
//SE SOLICITAN LOS DATOS DE LA MATERIA PRIMA
ID_materia_prima;
cout<<"Ingresa el nombre de la materia prima"<<endl;
getline(cin, materia_prima);
cout<<"Ingresa el nombre del proveedor"<<endl;
getline(cin, proveedor);
cout<<"Ingrese el precio unitario"<<endl;
cin>>p_unitario;
cin.ignore();
cout<<"Ingrese la cantidad total comprada"<<endl;
cin>>total_comprado;
cin.ignore();
\end{lstlisting}
\subsubsection{Borrar almacenista}
Para borrar un registro de almacenista, no se creo un método borrar como tal ya que la clase C\_menú lo puede hacer. El código que se ocupa es el siguiente:
\begin{lstlisting}[language=C++]
//BORRA LA PANTALLA Y DESPLIEGA EL METODO ELIMINAR ALMACENISTA
system("cls");
cout<<"Ingrese el ID"<<endl;
cin>>verificar;//INGRESA EL ID DEL ALMACENISTA QUE DESEA ELIMINAR
cin.ignore();
flag2=0;
for(int i=0; i<dato2.size();i++)
{
if(dato2[i].ID_almacenista==verificar)
{
pos=i;
dato2.erase(dato2.begin()+pos);//BORRA EL REGISTRO CON EL ID INGRESADO
flag2=1;//NOS DICE SI ENTRO A ELIMINAR EL REGITRO SOLICITADO
}
}
//VALIDA SI EL REGISTRO FUE ELIMINADO O NO
if(flag2==1)
{
cout<<"-------------------------------"<<endl;
cout<<"REGISTRO ELIMINADO EXITOSAMENTE"<<endl;
cout<<"-------------------------------"<<endl;
}
else
{
cout<<"-------------------------------"<<endl;
cout<<"REGISTRO NO ENCONTRADO"<<endl;
cout<<"-------------------------------"<<endl;
}
\end{lstlisting}
Este código lo que hace es, pide el ID del registro que se quiere borrar; posteriormente busca coincidencias, si encuentra invoca a la funcion erase y elimina la información almacenada en el nodo. En dado caso de que no encuentre coincidencias, mostrará el mensaje de ``REGISTRO NO ENCONTRADO''.
\subsubsection{Borrar materia prima}
Y lo mismo aplica para borrar registros de materia prima. Se presenta el código.
\begin{lstlisting}[language=C++]
//LIMPIA PANTALLA Y DESPLIEGA EL METODO ELIMINAR DE LA CLASE MATERIA PRIMA
system("cls");
cout<<"Ingrese el ID"<<endl;
cin>>verificar;
cin.ignore();
flag3=0;
for(int i=0; i<dato3.size();i++)
{
//BUSCA EL REGISTRO
if(dato3[i].ID_materia_prima==verificar)
{
pos=i;
dato3.erase(dato3.begin()+pos);//BORRA EL REGISTRO SOLICITADO
flag3=1;//NOS DICE SI FUE ENCONTRADO Y ELIMINADO EL REGISTRO
}
}
//LE AVISA AL USUARIO SI FUE EXITOSO O NO ELIMINAR EL REGISTRO
if(flag3==1)
{
cout<<"-------------------------------"<<endl;
cout<<"REGISTRO ELIMINADO EXITOSAMENTE"<<endl;
cout<<"-------------------------------"<<endl;
}
else
{
cout<<"-------------------------------"<<endl;
cout<<"REGISTRO NO ENCONTRADO"<<endl;
cout<<"-------------------------------"<<endl;
}
\end{lstlisting}
\newpage
\section{Conclusiones}
El sistema de gestión de inventario y personal para maquiladora fue concluido con las mejoras solicitadas por el cliente (vistas en el apartado de objetivos particulares). Cuenta con un login que ayuda a la seguridad del sistema; cuenta con un solo administrador para todo el sistema; el programa muestra un menú en el que el usuario podrá elegir que acción realizar y de esta manera agilizar la agregación, eliminación, visualización y edición tanto de materias primas como de almacenistas.
Consideramos que a futuro pueden ser implementadas mejoras como incluir más de un administrador, una mejor interfaz ó poder registrar directamente en el programa usuarios y contraseñas.
%%%%%%% Bibliografía %%%%%%%%
\clearpage
\bibliographystyle{bst/IEEEtranUrldate.bst}
\addcontentsline{toc}{section}{Referencias}
\bibliography{bib/IEEEabrv,bib/IEEEreferencias.bib}
%%%%%%% Bibliografía %%%%%%%%
\end{document}