Beruflich Dokumente
Kultur Dokumente
SENA
Desarrollo de software
Bogotá 2017
N ficha: 1150447
1001 Jm
Jornada mañana
Bogotá D.C
2017
Tabla de contenido:
1. Resumen………………………………………………………………………… .3
2.1 introducción………………………………………………….............. 5
2.4Objetivos generales……………………………………………………………….5
2.5Objetivos específicos…………………………………………………....................5
3. Requerimientos funcionales………………………………………………………9
4. Requerimientos no funcionales………………………………………………….10
5.1.Casos de uso………………………………………………………………….11
6. Diccionario de datos……………………………………………………………..19
9. Anexos……………………………………………………………………………………….49
Resumen:
La tienda de Luna es un negocio de comestibles que quiere crecer, y por ello se piensa
resolver problemas de negocios que ha llevado financieramente durante las semanas de
trabajo. En este proyecto se desarrollará el sistema de información para permitir el uso
de compras, ventas, productos, clientes, proveedores y pago de facturas, con el fin de
encontrar problemas del propietario de la empresa y cumplir el sueño de crecer.
Abstract:
The Luna store is a grocery business which wants to grow, to solve business problems
that has led financially weekness. In this project the information system will be
developed to allow the use of purchases, sales, products, customers, suppliers and bill
payment, in order to find problems of the owner of the company and fulfill the dream of
grow.
The system will provide the assistance required in the business “Luna”, this will
elaborate all processes mentioned above with an accuracy and with the values it may
need to be clear about the money and enters or the money that leaves the business.
Finally, the information system may have graphs in statistical form, where a balance of
purchases and sales will be shown to obtain a more reliable result and all thanks to the
technological power offered by the system itself.
_______________________________________
Sistema de Información:
2.1Introducción:
En el proyecto realizado por Juan Nicolas Ordoñez Velásquez y Leixer Gabuer Molina
Villalba vamos a mejorar el negocio (Tienda Luna), mediante el sistema de
información para que tenga control de: compras, ventas, productos, clientes,
proveedores y registros. Para ello se realizara los respectivos ajustes por cada
formulario que este en nuestro sistema, como por ejemplo, los clientes se modifican
cada día así como también se eliminan o se buscan para asuntos prioritarios, en este
caso con el formulario se busca la organización de estos datos que se pueden revolver
solo con la cantidad de personas que entran y salen de la tienda. En el sistema se verá
reflejado un método innovador sobre el manejo organizado de un negocio por medio de
roles que existen dentro de la tienda, en este caso los clientes, los productos o los
empleados.
En la entrevista hecha el pasado viernes 5 de febrero, la señora Luna nos comentó las
inquietudes sobre su pequeña tienda, entre ellas ella solo subsiste con lo que gana al día
que son 40.000 $ aproximadamente, pero el problema en realidad es que ella no tiene un
inventariado organizado de sus productos y no tiene la intención de expandirse por
cuestiones de subsistencia en su hogar y la economía del país.
También ella hace sus cuentas en un cuaderno, donde tiene anotadas personas las cuales
le fía y en otras hojas tenía solo cuentas matemáticas, en conclusión si por
circunstancias de la vida se llega a dañar o perder ese cuaderno, se perdería los datos y
las cuentas que debe cobrar.
Nosotros vamos a tratar con los problemas del negocio de la señora Luna Gonzales,
para mejorar los problemas referentes a su inventario como también su cuaderno de
cuentas y registro de pago, para que ya no se tenga que fiar o que las deudas no sean a
gran escala con otras entidades exteriores.
Por último se mantendrá al día con pedidos para no ser víctima de grandes deudas,
estafa, etc.
● Permitirá el control de ingresos de la tienda y los gastos del día a día , también
el registro de productos y las compras que se realizan, la caja la maneja la dueña
de la empresa y ya tendría un problema solucionado que es el uso del cuaderno
donde tiene sus cuentas y anotes sobre la tienda. Tendrá registro también de los
que le deben al fiar, ya no tendrán que haber confusión o que se le olvide algún
gasto o venta , que es lo que más se ocupa es en el sistema de información.
También que la dueña deje encargado a alguien de la familia cuando no este ella y
tampoco la hija, requiera ayuda de la dueña o hija pero no este, por algún motivo
Entrevista: Luna
Fecha: 04 de febrero 2016
Lugar: Tienda Luna
1. Nombre de la tienda:
Rta: $40.000 al día- Porque el salario de las personas es muy bajo y ella solo vende en
el conjunto cerrado disminuyendo mi margen de ganancia
Rta: Todos los días-Por las necesidades de los propietarios del conjunto, gracias a que
queda muy cerca de los clientes
Rta: No-Porque a pesar de ser un negocio pequeño, no puede tener algún problema
económico, es una tienda pequeña y un conjunto pequeño
Rta: Si-porque de algún modo se tiene se sacar una ganancia alta para mantener mi
hogar por eso me quiero aferrar un poco a la tecnología
10. Como se fundó la tienda y que propósitos ha ejecutado para que la tienda siga en pie
Rta: Se fundó con un pequeño capital y se ha seguido a pie por ser constante, y
disciplinado con el negocio
11. Estaría dispuesta a aprender de una base de datos que haga las ventas de usted, que
se mantenga al día con sus cuentas y sobre todo que tenga beneficios tecnológicos para
que su negocio tenga un toque moderno?
Rta: Si-porque como lo había dicho antes, quiero tener un inventario ordenado, y
también con la función de vender lo económico y para que la dueña tenga su beneficio y
el cliente tenga un buen producto
Rta: No, porque no soy muy abierta de ideas y solo quiero mantener el negocio con el
poquito que gano
Rta: No es un negocio para ser rico, solo para trabajar en el día a día
Rta: Las ganancias son solo para el negocio porque solo pide lo necesario como: aseo,
alimentos,etc(Solo lo importante)
15. La economía del país puede afectar en el crecimiento del negocio?
Rta: Sí, porque con la crisis de la economía los clientes sólo compran lo esencial y sobre
todo los cambios climáticos que se ha presentado durante el tiempo
3. Requerimientos funcionales:
Prioridad : Alta
Prioridad: Alta
Numero: RF03
Prioridad: Alta
Numero: RF04
Prioridad: Alta
Numero: RF05
Numero: RF06
Prioridad: Alta
4. Requerimientos no funcionales:
● El sistema operativo que tendrá el equipo donde funcionará el sistema de
información
● El usuario que manejara el sistema de información
Numero RNF01
Nombre: Función del sistema
Usuario: Luna Gonzales
Prioridad: Alta
Descripción requerimiento El sistema no funcionara si el equipo de
cómputo no sirviera
Numero: RNF02
Nombre: Usuario del sistema
Usuario: Luna Gonzales
Prioridad: Alta
Descripción requerimiento: El sistema no tendrá acceso si el usuario
no lo usa, es decir que está inhabilitado si
el que va a usar el sistema no está en
operación
5 Estructura casos de uso
Descripción
En este caso el administrador tiene control sobre el inventariado de los productos que se
manejan ,para así tener algo como una lista para estar al tanto de lo que se vende y que no
Flujo normal
Descripción
En este caso se permite administras los productos de cierta manera para su fácil distribución
Flujo normal
Descripción
En este caso se permite controlar todos los productos o surtidores que ingresan al negocio
Flujo normal
CREATEDATABASEPROYECTOFACTURA
USEPROYECTOFACTURA
CREATETABLEClientes(
identificacionClientenumeric(18,0)NOTNULL,
Nombre_clientevarchar (30)NULL,
Apellidovarchar (30)NULL,
Fijonumeric(18,0)null,
celularnumeric(18,0)null,
PRIMARYKEY(identificacionCliente)
)
CREATETABLEEmpleados(
identificacionEmpleadonumeric(18,0)NOTNULL,
Nombre_empleadovarchar (30)NULL,
Apellido_empleadovarchar (30)NULL,
Direccionvarchar (50)NULL,
Cargovarchar (50)NULL,
Fijo_empleadonumeric (18,0)NULL,
Celular_empleadonumeric (18,0)null,
Usuariovarchar (50)null,
Contraseñavarchar(50)null,
PRIMARYKEY(IdentificacionEmpleado)
)
CREATETABLEProductos(
codigonumeric(18,0)notnull,
nombre_productovarchar(50)null,
cantidaddisponibleintnull,
valorunitariobigintnull,
porcentajeivaintnull,
PRIMARYKEY (codigo)
)
createtableProveedor(
Cod_proveedornumeric (18,0)NOTNULL,
Empresavarchar(50)null,
valornumeric (18,0)null,
Nombre_productovarchar(50)null,
codigonumeric(18,0)notnull,
PRIMARYKEY (Cod_proveedor)
)
CreatetableVentas(
Num_factura_ventanumeric(18,0)NOTNULL,
Nombre_productovarchar (50)NULL,
identificacionClientenumeric(18,0)NotNULL,
valornumeric(18,0)NULL,
codigonumeric(18,0)notnull,
Cantidad_para_ventanumeric(18,0)NULL,
PRIMARYKEY (Num_factura_venta)
)
CreatetableDetalleVenta(
id_detalleventaintidentitynotnull,
Num_factura_ventanumeric (18,0)notnull,
identificacionClientenumeric (18,0)notnull,
valornumeric (18,0)null,
Nombre_productovarchar (50)null,
Primarykey (id_detalleventa)
)
CreatetableCompras(
Num_Factura_compranumeric (18,0)notNULL,
Nombre_productovarchar(50)NULL,
Cantidad_para_compranumeric(18,0)NULL,
Subtotalnumeric (18,0)NULL,
codigonumeric(18,0)notNULL,
identificacionEmpleadonumeric (18,0)NULL,
PRIMARYKEY(Num_factura_compra)
)
CreatetableDetalleCompra(
id_detallecompraintidentitynotnull,
Num_Factura_compranumeric (18,0)notnull,
identificacionEmpleadonumeric (18,0)notnull,
codigonumeric(18,0)notnull,
primarykey (id_detallecompra)
)
ALTERTABLEDetalleVenta
ADDCONSTRAINTFK_Ventas_DetalleVenta
FOREIGNKEY (Num_factura_venta)
REFERENCESVentas(Num_factura_venta)
altertableDetalleVenta
addconstraintFK_Clientes_DetalleVenta
foreignkey (identificacionCliente)
referencesClientes(identificacionCliente)
ALTERTABLEProveedor
ADDCONSTRAINTFK_Productos_Proveedor
FOREIGNKEY (Codigo)
REFERENCESProductos(Codigo)
altertableDetalleCompra
addconstraintFK_compras_DetalleCompra
foreignkey (Num_Factura_compra)
referencesCompras(Num_Factura_compra)
altertableDetalleCompra
addconstraintFK_Empleados_DetalleCompra
foreignkey (identificacionEmpleado)
referencesEmpleados(identificacionEmpleado)
ALTERTABLECompras
ADDCONSTRAINTFK_Productos_Compras
FOREIGNKEY (codigo)
REFERENCESProductos(codigo)
ALTERTABLEVentas
ADDCONSTRAINTFK_Productos_Ventas
FOREIGNKEY (codigo)
REFERENCESProductos(codigo)
----------------------------------------------------------------------
-------------
----------------------------------------------------------------------
-----------------
--------------PROCEDIMIENTOS Y TRIGGERS NECESARIOS PARA EL
FUNCIONAMIENTO OPTIMO DE
---------------EL PROYECTO LUNA---------------------------------------
------------------
----------------------------------------------------------------------
--------------
------------Login--------------------
createprocedureIngresar
(
@Usuariovarchar(50),
@contraseñavarchar(50)
)
as
selectCargofromEmpleados
whereUsuario=@UsuarioandContraseña=@contraseña
go
insertintoEmpleadosvalues
(1,'Jose','Suarez','dsdsdsd','Empleado',12345,12345,'Jose','12345')
insertintoEmpleadosvalues
(2,'Jose','garcia','dsdsdsdi','Administrador',123456,123457,'1101','11
01')
select*fromEmpleados
-----------------------------------------------------------Cliente----
---------------------------
createprocedureInsertar_Datos
(
@identificacion_Cliente_numeric(18,0),
@Nombre_varchar (30),
@Apellido_varchar (30),
@Fijo_numeric(18,0),
@celular_numeric(18,0))
asinsertintoClientes
(identificacionCliente,Nombre_cliente,Apellido,Fijo,celular)
values
(@identificacion_Cliente_,@Nombre_,@Apellido_,@Fijo_,@celular_);
select*fromClientes
select*fromClientes
select*fromClientes
----------------- Empleado--------------------------------------------
------
createprocedureInsertar_DatosEm
(
@identificacion_Empleado_numeric(18,0),
@Nombre_varchar (30),
@Apellido_varchar (30),
@Direccion_varchar(30),
@Cargo_varchar(30),
@Fijo_numeric(18,0),
@celular_numeric(18,0))
asinsertintoEmpleados
(identificacionEmpleado,Nombre_empleado,Apellido_empleado,Direccion,Ca
rgo,Fijo_empleado,celular_empleado)
values
(@identificacion_Empleado_,@Nombre_,@Apellido_,@Direccion_,@Cargo_,@Fi
jo_,@celular_);
select*fromEmpleados
------------------------------------------ Productos------------------
-------------------------
createprocInsertar_Producto
(
@codigo_bigint,
@nombre_varchar(50),
@cantidaddisponible_numeric(18),
@valorunitario_bigint,
@porcentajeiva_numeric(18))
asinsertintoProductos
(codigo,nombre_producto,cantidaddisponible,valorunitario,porcentajeiva
)
values
(@codigo_,@nombre_,@cantidaddisponible_,@valorunitario_,@porcentajeiva
_);
select*fromProductos
---------------------------PROVEEDORES--------------------------------
-----------
createprocedureInsertar_DatosPro
(
@Cod_proveedornumeric (18,0),
@Empresavarchar(50),
@valornumeric (18,0),
@Nombre_productovarchar(50))
as
insertintoProveedor
(Cod_proveedor,Empresa,valor,Nombre_producto)
values (@Cod_proveedor,@Empresa,@valor,@Nombre_producto);
select*fromProveedor
------------------------------------------------------------------
----------------------------------------------------------------------
--
--------FINALIZA LOS PROCEDIMIENTOS, AHORA EL TRIGGER SELECCIONADO
PARA
---------------EL PROYECTO--------------------------------------------
createTRIGGERactualizar_CANTIDAD
ONProductos
FORINSERT
AS
DECLARE@Cod_productonumeric(18,0),@CantidadINT
SELECT@Cod_producto=codigo,@Cantidad=cantidaddisponibleFROMinserted
UPDATEProductosSETcantidaddisponible=cantidaddisponible-@Cantidad
WHEREcodigo=@Cod_producto
GO
---------------------------------------------------------------------
-------------------------------------------------------------------
------------------Finaliza--------------------------------------------
-
----------------------------------------------------------------------
---
---------------------------------------------------------------------
7.1Código documentado por cada capa proyecto
Para Datos:
//Libreria de clases//
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Data; //maneja los datos de SQL//
usingSystem.Data.SqlClient;
namespace Datos
{
publicclassConexion// clase publica con el nombre de conexion//
{
privatestring mensaje; //Variable tipo privada de mombre mensaje//
privateSqlConnectionconn;//Variable tipo tpo SQL llamada SQLconettion con el
nombre conn//
publicstring Mensaje
{
get { return mensaje; }// Entra y devuelve la variable mensaje//
set { mensaje = value; }//Modifica y valua la variable mensaje//
}
//metodo consultar en SQL//
publicDataSetConsultarSQL(StringSentenciaSQL)//metodo publico DataSet con el
nombre de consultarSQL//
//donde se pone la sentenciaSQL donde va a estar crood y el tipo es string//
{
try//Comando para disponer los errores que hay en el codigo//
{//revision del sistema//
conn.Open();//abro la conexionconn//
SqlDataAdapterobjRes//variable tipo objeto basada en la programacionrientada a
objetos (POO)//
= newSqlDataAdapter(SentenciaSQL, conn);//SQLdataadapter,puente
para ingresar datos//
DataSet datos = newDataSet();//DataSetdeposito de datos , tabla temporal para
guardar los datos//
objRes.Fill(datos, "DatosConsultados");// vel objeto ObjRes se llena y es igual a
los datos con la consulta//
mensaje = "La consulta de datos es Exitosa";//mensaje de consulta exitosa//
return datos;// retoman datos y se guardan//
}
catch (ExceptionMiExc)//envia un mensaje en caso en que el error no se corrija la
sentencia de arriba//
//Expection con el nombre de MiExc donde muestralos errores//
{
DataSetsindatos = newDataSet();//abrimos un DataSet con el nombre de sindicatos
y le indicamos que es un nuevo DataSet//
mensaje = "ERROR: " + MiExc.Message; //se abre la variable de mensaje y le
decimos que es igual a "error" y con ella que se muestre//
//en la variable MiExc con el metodo de mensaje//
try
{
conn.Open();
SqlCommandmiComando = newSqlCommand();//Envia sentencias de tipo SQL para ser
ejecutadas en visual//
miComando.Connection = conn;//ponemos miComando y le establecemos la coneccion
sobre el comando conn//
miComando.CommandText = SentenciaSQL;//miComando lo vuelvo en forma de texto(que
recibe sentencias por medio de sentencias de SQL) y este es el que se guarda en
la SntenciaSQL//
miComando.ExecuteNonQuery();//ejecuta el comando//
conn.Open();
cmd.ExecuteNonQuery();
returntrue;
}
catch (Exception e)
{
conn.Open();
cmd.ExecuteNonQuery();
returntrue;
}
catch (Exception e)
{
conn.Open();
cmd.ExecuteNonQuery();
returntrue;
}
catch (Exception e)
{
conn.Open();
cmd.ExecuteNonQuery();
returntrue;
}
catch (Exception e)
{
returntrue;
}
catch (Exception e)
{
conn.Open();
dr = cmd.ExecuteReader();
if (dr.Read() == true)
{
roll = dr["Cargo"].ToString();
}
return roll;
}
catch (Exception e)
{
Para lógica:
//libreria de clases//
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
using Datos;//Se hace el uso de la carpeta Datos(conexion)//
usingSystem.Data;
namespaceLogica/* */
{
publicclassClientes:Conexion/*clase publica que hace una referencia a conexion de
la capa de datos*//*mediante F12*/
{
/*DECLARO VARIABLES PRIVADA QUE EL USUARIO NO VA A VER*/
privatelongidentificacion_Cliente;
privatestring Nombre;
privatestring Apellido;
privatestring Fijo;
privatestring celular;
publicstring nombre
{
get { return Nombre; }
set { Nombre = value; }
}
publicstring apellido
{
get { return Apellido; }
set { Apellido = value; }
}
publicstring fijo
{
get { return Fijo; }
set { Fijo = value; }
}
publicstring Celular
{
get { return celular; }
set { celular = value; }
}
publicboolInsertarSPoCliente()
{
boolrespuestaSQL = InsertarSPoCliente(this.identificacion_Cliente, this.Nombre,
this.Apellido, this.Fijo, this.celular);/*llenar*/
/*metodo donde se llama la capa datos como un puente de( capa datos y capa
logica) y ejecuta */
returnrespuestaSQL;/*tipo de dato booleano dependiendo del resultado de la capa
de datos cuando es true*/
}
publicDataSetConsultarClientes(stringidentificacion_Clientexconsultar)
/*metodopublico que traiga datos de consultarxdatos*/
{
stringcadenaSQLConsultar = "SELECT *FROM Clientes WHERE identificacionCliente = "
+ identificacion_Clientexconsultar + " "; /*tipo
cadena*//*concatenar=Unir*//*para que el dato quede unido con la consulta*/
DataSetConsultaResultante = ConsultarSQL(cadenaSQLConsultar); /* */
returnConsultaResultante;
}
publicboolEliminarSPCliente(stringidentificacion_Cliente)
{
boolrespuestaSQL = EliminarSPCliente(this.identificacion_Cliente);
//la respuestaSQL permite devolver mi dato gracias al bool//
returnrespuestaSQL;
}
}
Para presentación:
//libreria de clases//
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;// se conecta con el formulario que se diseña//
usingLogica; // se hace uso de elcodigo que esta en el metodologica//
if (camposvacios() == true)
{
ClientesObjClientes = newClientes();//se crea un objeto de la clase Clientes con
el nombre ObjClientes//
if (respuestaSQL == true)
{
MessageBox.Show("los datos del nuevo cliente fueron insertados correctamente");
textBox1.Text = " ";
textBox2.Text = " ";
textBox3.Text = " ";
textBox4.Text = " ";
textBox5.Text = " ";
}
else
{
MessageBox.Show(ObjClientes.Mensaje);//se llama el mensaje de elmetodoconexion
donde doce que es un error//
}
}
catch (Exception Ex)
{
MessageBox.Show("Error! : " + Ex.Message + " " + ObjClientes.Mensaje);//Muestra y
valida el error para el bucle else//
}
}
}
intnumregistros = Datosconsultados.Rows.Count;
if (numregistros == 0)
{
MessageBox.Show("No existe en la Base de Datos Clientes con esta
identificacion");
}
else
{
textBox2.Text =
Datosconsultados.Rows[0]["Nombre_cliente"].ToString();
textBox3.Text =
Datosconsultados.Rows[0]["Apellido"].ToString();
textBox4.Text = Datosconsultados.Rows[0]["Fijo"].ToString();
textBox5.Text =
Datosconsultados.Rows[0]["celular"].ToString();
}
}
catch (Exception Ex)
{
MessageBox.Show("Error!:" + Ex.Message + " " + ObjClientes.Mensaje);
}
}
try
{
ObjClientes.identificacion_cliente = long.Parse(textBox1.Text);
ObjClientes.nombre = textBox2.Text;
ObjClientes.apellido = textBox3.Text;
ObjClientes.fijo = textBox4.Text;
ObjClientes.Celular = textBox5.Text;
boolrespuestaSQL = ObjClientes.ActualizarSPoClientes();
if (respuestaSQL == true)
{
MessageBox.Show("los datos de este cliente fueron actualizados correctamente");
textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = "";
textBox4.Text = ""; textBox5.Text = "";
}
else
{
MessageBox.Show(ObjClientes.Mensaje);
}
}
catch (Exception Ex)
{
MessageBox.Show("Error!: " + Ex.Message + " " +
ObjClientes.Mensaje);
}
}
try
{
boolrespuestaSQL = ObjClientes.EliminarSPCliente(textBox1.Text);
if (respuestaSQL == true)
{
else
{
MessageBox.Show(ObjClientes.Mensaje);
}
}
catch (Exception Ex)
{
MessageBox.Show("Error !: " + Ex.Message + " " +
ObjClientes.Mensaje);
}
}
intnumregistros = DatosConsultados.Rows.Count;
if (numregistros == 0)
{
MessageBox.Show("No hay ningun Alumno en la base de datos");
}
else
{
dataGridView1.DataSource = DatosConsultados;
}
}
catch (Exception Ex)
{
MessageBox.Show("Error!: " + Ex.Message + " " + ObjClientes.Mensaje);
}
}
privatevoid button6_Click(objectsender, EventArgs e)
{
this.Close();
}
publicboolcamposvacios()
{
if (textBox1.Text.Trim() == "")
{
MessageBox.Show("No pueden quedar campos vacios");
returnfalse;
}
if (textBox2.Text.Trim() == "")
{
MessageBox.Show("No pueden quedar campos vacios");
returnfalse;
}
if (textBox3.Text.Trim() == "")
{
MessageBox.Show("No pueden quedar campos vacios");
returnfalse;
}
if (textBox4.Text.Trim() == "")
{
MessageBox.Show("No pueden quedar campos vacios");
returnfalse;
}
if (textBox5.Text.Trim() == "")
{
MessageBox.Show("No pueden quedar campos vacios");
returnfalse;
}
else
{
returntrue;
}
}
}
9. Anexos
ELEMENTOS PÁGINAS
Datos escritos sobre las problemáticas, el proyecto y la solución del
problema alcanzado [1 a 23]
INTRODUCCION
C conclusiones
A