Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Librerías.
A. Stdio.h.
B. Stdin.h.
D. Ctype.h.
E. Conio.h y Conio2.h
Estas librerías nos permiten utilizar variadas funciones para
facilitar la impresión en pantalla. Las funciones utilizadas de estas
funciones son:
Gotoxy(): Esta función nos permite ubicar el curosr en un
punto determinado de la pantalla y asi junto con printf se
puede escribir un texto en cualquier lugar de la pantalla
.
Textbackground(): Esta función nos permite cambiar el
color de fondo de la pantalla y puede ser limitada por
otras textbackgrounds crenado así diferentes colores en la
pantalla.
F. Time.h.
Estructuras
A. Plc.
Esta estructura contiene dentro de ella un arreglo y una variable y
se encarga de tener los datos de una placa de vehiculo. El arreglo es de
tipo char y de tamaño 3, en el se guarda la parte alfabética de una placa
de auto.
La variable es de tipo int y en ella se guarda la parte numérica de la placa
de un auto.
B. Ats.
Esta estructura nos permite guardar dentro de ella datos del carro
que ingresa al parqueadero como su placa, tiempo de ingreso y de salida
y su código. La placa se guarda en una varible de tipo “plc”. El tiempo
de ingreso y de salida, se guardan en dos varibales respectivamente de
tipo time_t. Finalmente el código se guarda en un arreglo de tipo entero y
tamaño 3.
C. Est.
Esta estructura es la encargada de guardar los datos relacionados
con un puesto de parqueo, como su estado y el auto que se encuentra
estacionado en este puesto.La función tiene dos variables. La primera,
llamada autos, es de tipo ats y permite guardar en ella todas las
características del auto que esta estacionado. La segunda llamada estado
es de tipo entero y contiene números entre 0 y 1. Los cuales representan
si el parqueadero esta vacío o lleno respectivamente.
Definiciones
En el programa se definieron varios valores los cuales ayudaron
en algunos aspectos del programa como la simulación, el poder graficar
los parqueaderos, etc. Los valores definidos fueron:
MAXniv: Este valor da el número de niveles que tendrá el
parqueadero. Este valor ayuda en toda operación que tenga que ver
relacionada con guardar datos en la matriz.
MAXfil: Este valor da el número de filas que existe en el
parqueadero. Este valor ayuda en toda operación que este
realacionada con guardar datos en la matriz.
Simulación:
Para la simulación del parqueadero fueron utilizadas tres funciones, las cuales se
encargaron de generar autos, y de posicionarlos en posiciones aleatorias de
parqueo, aparte de asignarles un tiempo de entrada, una placa y un código propio
de salida. Las funciones utilizadas fueron:
A. Randómicos.
Control de Impresión.
D. Imprimir Encabezado.
“void imprimirEncabezado();
E. Imprimir Menu.
“void dibujarMenu();
Esta función al igual que la de imprimir encabezado, no recibe
ningún parámetro. La función es la encargada de imprimir en pantalla el
menú principal donde una puede elegir las diferentes acciones que puede
ejecutar el programa. Esta función usa dentro de ella la función de
imprimir el encabezado.
F. Movimiento Cursor.
“int movimientocursor();
G. Imprimir Parqueaderos
I. Imprimir Factura.
J. Mover SI/NO
“int movsino();
Acciones
La función valida que cada uno de los tres elementos del arreglo
placa, sean letras mayúsculas. Si esto es verdadero la función retornara al
main un 1, caso contrario retornara un 0.
M. Ingresar un Auto
N. Facturar Auto.
P. Buscar Auto.
3. MAIN
Una vez creadas las variables del main, se procede imprimir el encabezado y
titulo de el programa. Después se llama a la función iniciarparqueos() y se crean
las condiciones iniciales para la simulación. Es entonces cuando se abre el menú
principal en la pantalla y se manda a la función movimientocursor() para que
devuelva un valor a opc. Con una función switch() se crea diferentes
condiciones dependiendo del valor de opc. Estas opciones son:
4. Diagrama de Bloques.
5. Código
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include<stdlib.h>// LIBRERIA PARA GENERAR RANDOMICOS
#include <time.h>//LIBRERIA PARA TRABAJAR CON TIEMPO
#include <conio2.h>// LIBRERIA PARA CAMBIAR COLOR DE FUENTE
#define MAXfil 4 //MAXIMO DE FILAS
#define MAXcol 6 //MAXIMO DE COLUMNAS
#define MAXniv 1 // MAXIMO DE NIVELES
#define BLOQUES 3 // BLOQUES POR FILA
#define ESPini 10 //ESPACIADO INICIAL
#define SIMcte 3600
typedef struct {
char Pcar[3];
int Pnum;
}plc;//PLACA-MATRICULA
typedef struct {
time_t tiempoIngreso,tiempoSalida;
plc placa;
int codigo[3];
}ats;//AUTOMOVILES
typedef struct {
ats autos;
int estado;
}est;//ESTACIONAMIENTO
void imprimirEncabezado();
void imprimirHora(int x, int y, int z);
int validarNum(est parqueos[MAXniv][MAXfil][MAXcol],int i, int j, int k);
int validarPlaca(est parqueos[MAXniv][MAXfil][MAXcol],int i, int j, int k);
void imprimirFactura(est parqueos[MAXniv][MAXfil][MAXcol], int pago, float
diffseg,int i, int j, int k);
int movsino();
void facturarAuto(est parqueos[MAXniv][MAXfil][MAXcol],int cont0);
void ingresarAuto(est parqueos[MAXniv][MAXfil][MAXcol],int cont0);//
Ingresa un auto a la base de datos.
void buscarAuto(est parqueos[MAXniv][MAXfil][MAXcol],int cont0);
void gPlcAlf(est parqueos[MAXniv][MAXfil][MAXcol],int i, int j, int k);//
GENERA LA PARTE ALFABETICA DE LA PLACA(SIMULACION)
void dibujarMenu();// DIBUJA EL MENU
int movimientocursor();// MUEVE EL CURSO DEL MENU PARA PODER
ELEGIR UNA OPCION
void iniciarparqueos(est parqueos[MAXniv][MAXfil][MAXcol]);// DA LA
CONDICIONES INICIALES DEL ESTACIONAMIENTO Y DEFINE LOS
TIEMPOS INICIALES.(SIMULACION)
int randomicos(int min, int max);//GENERA RANDOMICOS ENTRE DOS
VALORES DADOS.(SIMULACION)
int frecuencia(est parqueos[MAXniv][MAXfil][MAXcol]);//DETERMINA
CUANTOS ESTACIONAMIENTOS LIBRES Y CUANTOS OCUPADOS
HAY
void imprimirparqueaderos(est parqueos[MAXniv][MAXfil][MAXcol]);//
DIBUJA EL ESTACIONAMIENTO CON SUS LUGARES LIBRES Y
OCUPADOS
int main(){
est parqueos[MAXniv][MAXfil][MAXcol];
int opc,cont0;
imprimirEncabezado();
iniciarparqueos(parqueos);
//cont0=frecuencia(parqueos);
//imprimirparqueaderos(parqueos);
dibujarMenu();
opc=movimientocursor();
do{
switch(opc){
case 0:
fflush(stdin);
clrscr();
imprimirEncabezado();
ingresarAuto(parqueos,cont0);
system("cls");
dibujarMenu();
opc=movimientocursor();
break;
case 1:
fflush(stdin);
clrscr();
imprimirEncabezado();
facturarAuto(parqueos,cont0);
system("cls");
dibujarMenu();
opc=movimientocursor();
break;
case 2:
clrscr();
imprimirEncabezado();
cont0=frecuencia(parqueos);
imprimirparqueaderos(parqueos);
system("cls");
dibujarMenu();
opc=movimientocursor();
break;
case 3:
clrscr();
imprimirEncabezado();
buscarAuto(parqueos,cont0);
clrscr();
dibujarMenu();
opc=movimientocursor();
break;
case 4:
opc=5;
system("cls");
gotoxy(5,5);printf("PROGRAMA TERMINADO\n");
break;
}
}while(opc!=5);
getchar();
return 0;
}
void imprimirEncabezado(){
char
linea1[]={"*******************************************************
*********************************************"};
char linea2[]={"*
*"};
char linea3[]={"* Sistema de Parqueaderos
*"};
char linea4[]={"* Proyecto de Programacion
*"};
char linea5[]={"* Escuela Politecnica Nacional
*"};
char linea6[]={"*
*"};
char
linea7[]={"*******************************************************
*********************************************"};
textbackground(LIGHTGRAY);textcolor(BLACK);highvideo();
gotoxy(1,1);printf("%s",linea1);
gotoxy(1,2);printf("%s",linea2);
gotoxy(1,3);printf("%s",linea3);
gotoxy(1,4);printf("%s",linea4);
gotoxy(1,5);printf("%s",linea5);
gotoxy(1,6);printf("%s",linea6);
gotoxy(1,7);printf("%s",linea7);
textbackground(BLACK);textcolor(WHITE);
return;
}
int movsino(){
int x=0,fin=0,posCursor=0;
char cursor;
textbackground(GREEN);
gotoxy(4,14);printf("1.Si ");
textbackground(BLACK);
gotoxy(4,15);printf("2.No ");
do{
do{
cursor=getch();
if(cursor==72 || cursor== 80 || cursor==13){
x=1;
}
}while(x!=1);
switch(cursor){
case 80:
if(posCursor==1){
posCursor=0;
}else{
posCursor++;
}
//printf("\n%d",posCursor);
break;
case 72:
if(posCursor==0){
posCursor=1;
}else{
posCursor--;
}
//printf("\n%d",posCursor);
break;
case 13:
//printf("\n%d",posCursor);
return posCursor;
}
switch(posCursor){
case 0:
textbackground(GREEN);
gotoxy(4,14);printf("1.Si ");
textbackground(BLACK);
gotoxy(4,15);printf("2.No ");
break;
case 1:
textbackground(BLACK);
gotoxy(4,14);printf("1.Si ");
textbackground(GREEN);
gotoxy(4,15);printf("2.No ");
textbackground(BLACK);
break;
}
}while(fin==0);
return 0;
}
diffseg=difftime(parqueos[i][j][k].autos.tiempoSalida,parqueos[i][j][k].autos.tie
mpoIngreso);
if(diffseg<3600){
pago=0;
}else{
if(diffseg<7200){
gotoxy(2,13);puts("Tiene factura de consumo?");
opc=movsino();
if(opc==0){
pago=0;
}else{
pago=1;
}
}else{
pago=(int)diffseg/3600;
}
}
fflush(stdin);
imprimirFactura(parqueos,pago,diffseg,i,j,k);
clrscr();
imprimirEncabezado();
gotoxy(5,12);printf("PAGO REALIZADO EXITOSAMENTE");
gotoxy(5,14);printf("Puede salir\n\n\n");
printf("Presione cualquier tecla para volver al Menu.");
getchar();
return ;
}
}
if(cont0==0){
system("cls");
gotoxy(5,12);printf("No hay espacios disponibles");
gotoxy(5,14);printf("Presione cualquier tecla para regresar al Menu ");
getchar();
return ;
}
do{
srand(time(NULL));
i=randomicos(0,MAXniv);
j=randomicos(0,MAXfil);
k=randomicos(0,MAXcol);
if(parqueos[i][j][k].estado==0){
parqueos[i][j][k].autos.codigo[0]=i;
parqueos[i][j][k].autos.codigo[1]=j;
parqueos[i][j][k].autos.codigo[2]=k;
parqueos[i][j][k].estado=1;
parqueos[i][j][k].autos.tiempoIngreso=time(NULL);
x=1;
}
}while(x!=1);
horaIngreso=localtime(&parqueos[i][j][k].autos.tiempoIngreso);
gotoxy(2,9);printf("Hora de Ingreso: ");
gotoxy(2,10);imprimirHora(horaIngreso->tm_hour,horaIngreso-
>tm_min,horaIngreso->tm_sec);
gotoxy(2,11);printf("\nDatos Placa:");
//fflush("stdin");
gotoxy(2,13);printf ("\tIngrese Parte Alfabetica (Mayusculas): ");
fgets(parqueos[i][j][k].autos.placa.Pcar,4,stdin);
//parqueos[i][j][k].autos.placa.Pcar[3]='\0';
//printf(" %d ",strlen(parqueos[i][j][k].autos.placa.Pcar));
parqueos[i][j][k].autos.placa.Pcar[0]=toupper(parqueos[i][j][k].autos.placa.Pcar[
0]);
parqueos[i][j][k].autos.placa.Pcar[1]=toupper(parqueos[i][j][k].autos.placa.Pcar[
1]);
parqueos[i][j][k].autos.placa.Pcar[2]=toupper(parqueos[i][j][k].autos.placa.Pcar[
2]);
if(validarPlaca(parqueos,i,j,k)==0){
parqueos[i][j][k].autos.codigo[0]=-i;
parqueos[i][j][k].autos.codigo[1]=-j;
parqueos[i][j][k].autos.codigo[2]=-k;
parqueos[i][j][k].estado=0;
parqueos[i][j][k].autos.tiempoIngreso=0;
system("cls");
imprimirEncabezado();
gotoxy(5,9);printf("Error");
gotoxy(5,12);printf("Placa Ingresada no Valida");
gotoxy(5,14);printf("Presione Enter para Regresar al Menu");
getch();
return;
}
gotoxy(2,15);printf("\n\tIngrese Parte Numerica: ");
scanf("%d",&parqueos[i][j][k].autos.placa.Pnum);
if(validarNum(parqueos,i,j,k)==0){
parqueos[i][j][k].autos.codigo[0]=-i;
parqueos[i][j][k].autos.codigo[1]=-j;
parqueos[i][j][k].autos.codigo[2]=-k;
parqueos[i][j][k].estado=0;
parqueos[i][j][k].autos.tiempoIngreso=0;
system("cls");
gotoxy(5,9);printf("Error");
gotoxy(5,12);printf("Placa Ingresada no Valida");
gotoxy(5,14);printf("Presione Enter para Regresar al Menu");
getchar();
getchar();
return;
}
clrscr();
imprimirEncabezado();
gotoxy(5,12);printf("DATOS INGRESADOS SATISFACTORIAMENTE");
if(k<10 && j<10){
gotoxy(5,13);printf("Su codigo para salir es:
0%d.0%d.0%d\n\n\n",parqueos[i][j][k].autos.codigo[0],parqueos[i][j][k].autos.c
odigo[1],parqueos[i][j][k].autos.codigo[2]);
}else{
if(k>10 && j>10){
gotoxy(5,13);printf("Su codigo para salir es:
0%d.%d.%d\n\n\n",parqueos[i][j][k].autos.codigo[0],parqueos[i][j][k].autos.codi
go[1],parqueos[i][j][k].autos.codigo[2]);
}else{
if(k>10){
gotoxy(5,13);printf("Su codigo para salir es:
0%d.0%d.%d\n\n\n",parqueos[i][j][k].autos.codigo[0],parqueos[i][j][k].autos.co
digo[1],parqueos[i][j][k].autos.codigo[2]);
}else{
gotoxy(5,13);printf("Su codigo para salir es:
0%d.%d.0%d\n\n\n",parqueos[i][j][k].autos.codigo[0],parqueos[i][j][k].autos.co
digo[1],parqueos[i][j][k].autos.codigo[2]);
}
}
}
gotoxy(5,15);printf("Presione cualquier tecla para volver al Menu");
getchar();
getchar();
return;
}
}else{
parqueos[i][j][k].autos.placa.Pcar[l]=letras[n];
}
}
return ;
}
void dibujarMenu(){
imprimirEncabezado();
gotoxy(4,9);printf("Menu: ");
textbackground(GREEN);textcolor(WHITE);
gotoxy(8,11);printf("\t 1. Ingreso de Auto ");
textbackground(BLACK);textcolor(WHITE);
gotoxy(8,12);printf("\t 2. Salida de Auto ");
gotoxy(8,13);printf("\t 3. Estado del Parqueadero");
gotoxy(8,14);printf("\t 4. Buscar Auto ");
gotoxy(8,15);printf("\t 5. Finalizar Programa ");
return;
}
int movimientocursor(){
int x=0,fin=0,posCursor=0;
char cursor;
do{
do{
cursor=getch();
if(cursor==72 || cursor== 80 || cursor==13){
x=1;
}
}while(x==0);
switch(cursor){
case 80:
if(posCursor==4){
posCursor=0;
}else{
posCursor++;
}
break;
case 72:
if(posCursor==0){
posCursor=4;
}else{
posCursor--;
}
break;
case 13:
return posCursor;
}
switch(posCursor){
case 0:
imprimirEncabezado();
gotoxy(4,9);printf("Menu: ");
textbackground(GREEN);textcolor(WHITE);
gotoxy(8,11);printf("\t 1. Ingreso de Auto ");
textbackground(BLACK);textcolor(WHITE);
gotoxy(8,12);printf("\t 2. Salida de Auto ");
gotoxy(8,13);printf("\t 3. Estado del Parqueadero");
gotoxy(8,14);printf("\t 4. Buscar Auto ");
gotoxy(8,15);printf("\t 5. Finalizar Programa ");
break;
case 1:
imprimirEncabezado();
gotoxy(4,9);printf("Menu: ");
gotoxy(8,11);printf("\t 1. Ingreso de Auto ");
textbackground(GREEN);textcolor(WHITE);
gotoxy(8,12);printf("\t 2. Salida de Auto ");
textbackground(BLACK);textcolor(WHITE);
gotoxy(8,13);printf("\t 3. Estado del Parqueadero");
gotoxy(8,14);printf("\t 4. Buscar Auto ");
gotoxy(8,15);printf("\t 5. Finalizar Programa ");
break;
case 2:
imprimirEncabezado();
gotoxy(4,9);printf("Menu: ");
gotoxy(8,11);printf("\t 1. Ingreso de Auto ");
gotoxy(8,12);printf("\t 2. Salida de Auto ");
textbackground(GREEN);textcolor(WHITE);
gotoxy(8,13);printf("\t 3. Estado del Parqueadero");
textbackground(BLACK);textcolor(WHITE);
gotoxy(8,14);printf("\t 4. Buscar Auto ");
gotoxy(8,15);printf("\t 5. Finalizar Programa ");
break;
case 3:
imprimirEncabezado();
gotoxy(4,9);printf("Menu: ");
gotoxy(8,11);printf("\t 1. Ingreso de Auto ");
gotoxy(8,12);printf("\t 2. Salida de Auto ");
gotoxy(8,13);printf("\t 3. Estado del Parqueadero");
textbackground(GREEN);textcolor(WHITE);
gotoxy(8,14);printf("\t 4. Buscar Auto ");
textbackground(BLACK);textcolor(WHITE);
gotoxy(8,15);printf("\t 5. Finalizar Programa ");
break;
case 4:
imprimirEncabezado();
gotoxy(4,9);printf("Menu: ");
gotoxy(8,11);printf("\t 1. Ingreso de Auto ");
gotoxy(8,12);printf("\t 2. Salida de Auto ");
gotoxy(8,13);printf("\t 3. Estado del Parqueadero");
gotoxy(8,14);printf("\t 4. Buscar Auto ");
textbackground(GREEN);textcolor(WHITE);
gotoxy(8,15);printf("\t 5. Finalizar Programa ");
textbackground(BLACK);textcolor(WHITE);
break;
}
}while(fin==0);
return 0;
}
return;
}
6. Capturas de Pantalla
ERRORES:
Ingresar Auto:
Salida de Auto:
Buscar Auto: