256 lines
8.8 KiB
C
256 lines
8.8 KiB
C
#include<stdio.h>
|
|
#include<stdlib.h>
|
|
|
|
|
|
/*
|
|
Nos han pedido un pequeño programa escrito en C para controlar la afluencia de una sala de cine en
|
|
la que las butacas se distribuyen en filas y asientos (los asientos serían las columnas). Para ello
|
|
utilizaremos un array bidimensional que abarque toda la sala. El encargado nos ha dicho que la sala
|
|
cuenta con 10 filas y 8 asientos por cada fila (el array tendrá una dimensión efectiva de 10 filas y 8
|
|
columnas).
|
|
La manera de indicar si un asiento se encuentra libre o no, es mediante un número entero que tendrá
|
|
valores:
|
|
0 → el asiento está vacío.
|
|
1 → el asiento está ocupado.
|
|
A la hora de mostrar la ocupación de la sala en lugar de con 1 y con 0 lo haremos con los símbolos:
|
|
O → el asiento está vacío.
|
|
X → el asiento está ocupado.
|
|
Así pues, cada vez que mostremos la sala, esta debe tener un aspecto similar al siguiente:
|
|
X X X O O O O O X X
|
|
O O O O O X X O O O
|
|
X X O O X X O O O X
|
|
…
|
|
Y así con todas las filas.
|
|
|
|
Al comienzo del programa la sala se encuentra con todas sus posiciones vacías. El programa debe
|
|
asegurarse de ello al comienzo (al comienzo el array se carga con todas sus posiciones con valor 0).
|
|
Para que el encargado de la sala pueda manejarla, se le presentará un menú con las siguientes
|
|
opciones:
|
|
|
|
1. Comprar entrada. Se le pedirá que indique la fila y el asiento (columna) en el que se quiere
|
|
sentar el espectador. Si ese asiento está ocupado se dará un mensaje de error. Si el asiento está libre,
|
|
se cambia su posición a ocupado y se da un mensaje de “entrada comprada”. La fila y columna
|
|
introducida deben ser válidas (entre 0 y su dimensión máxima), en caso contrario se mostrará un
|
|
mensaje de error.
|
|
|
|
2. Mostrar la ocupación de la sala. Mostrará toda la sala y sus asientos indicando de la manera
|
|
descrita cuales están ocupados y cuales están libres.
|
|
|
|
3. Devolver entrada. Se pedirá que indique la fila y el asiento (columna) que se quiere liberar. Si el
|
|
asiento ya estaba libre, se indicará mediante un mensaje de error. Si el asiento estaba ocupado, éste
|
|
se libera y se indica un mensaje de “asiento liberado”. La fila y columna introducida deben ser
|
|
válidas (entre 0 y su dimensión máxima), en caso contrario se mostrará un mensaje de error.
|
|
|
|
4. Calcular recaudación de la sala. Se calculará la recaudación total de la sala teniendo en cuenta
|
|
solo los asientos ocupados y que cada entrada tiene un valor de 5.5 €.
|
|
|
|
0. Salir.
|
|
|
|
El menú se repetirá hasta que el encargado de la sala pulse la opción de salir.
|
|
|
|
*/
|
|
#define FILAS 10
|
|
#define ASIENTOS 8
|
|
|
|
int main(){
|
|
|
|
// Variables
|
|
|
|
int sala[FILAS][ASIENTOS]={0};
|
|
int i=0;
|
|
int j=0;
|
|
char estado[1];
|
|
int menu, resFila, resAsiento;
|
|
float recauda;
|
|
char salir;
|
|
|
|
|
|
// Mostrar el estado de los asientos vacios.
|
|
|
|
printf("\n------------------------------");
|
|
printf("\n| Estado inicial de la sala |");
|
|
printf("\n------------------------------\n\n");
|
|
printf(" |\t0\t1\t2\t3\t4\t5\t6\t7\t<< Asiento\n");
|
|
printf("_____|_____________________________________________________________________________\n");
|
|
printf(" |\n");
|
|
for(i=0; i<FILAS; i++){
|
|
printf(" %d |\t",i);
|
|
for(j=0; j<ASIENTOS; j++){
|
|
if(sala[i][j]==0){
|
|
fflush(stdin);
|
|
estado[0] = 'O';
|
|
}else{
|
|
fflush(stdin);
|
|
estado[0] = 'X';
|
|
}
|
|
|
|
printf("%s\t", estado);
|
|
|
|
}
|
|
printf("\n");
|
|
}
|
|
printf(" |\n ^ |\nFila |\n\n");
|
|
|
|
|
|
// Empieza el menú de opciones
|
|
do{
|
|
|
|
/* Elegir opción */
|
|
|
|
printf("\n++++++++++++++\n+ MENÚ +\n++++++++++++++");
|
|
printf("\n1 Comprar entrada.");
|
|
printf("\n2 Mostrar la ocupación de la sala.");
|
|
printf("\n3 Devolver entrada");
|
|
printf("\n4 Calcular recaudación de la sala.");
|
|
printf("\n0 Salir\n");
|
|
|
|
printf("\nIntroduce una opción reseñada: ");
|
|
fflush(stdin);
|
|
scanf("%d", &menu);
|
|
|
|
/* Condicional case para seleccionar el número */
|
|
|
|
|
|
switch (menu) {
|
|
// OPCIÓN 1
|
|
case 1:
|
|
|
|
printf("\nPara reservar un asiento necesitamos:\nNúmero de fila: ");
|
|
|
|
// Pedir Fila y control de nº de fila correcto
|
|
do{
|
|
scanf("%d", &resFila);
|
|
if(resFila<0||resFila>9){
|
|
printf("\nSolo tenemos filas del 0 al 9.\nVuelva a intentarlo: ");
|
|
}
|
|
}while (resFila<-1||resFila>9);
|
|
|
|
|
|
printf("Número de asiento: ");
|
|
|
|
// Pedir Asiento y control de nº de asiento correcto
|
|
do{
|
|
scanf("%d", &resAsiento);
|
|
if(resAsiento<0||resAsiento>7){
|
|
printf("\nSolo tenemos asientos del 0 al 7.\nVuelva a intentarlo: ");
|
|
}
|
|
}while (resAsiento<-1||resAsiento>7);
|
|
|
|
// Control si el asiento está ocupado o es una reserva correcta
|
|
if(sala[resFila][resAsiento]==1){
|
|
printf("\n****************************************");
|
|
printf("\nLo sentimos, este lugar ya está ocupado.");
|
|
printf("\n****************************************\n");
|
|
}else{
|
|
sala[resFila][resAsiento]=1;
|
|
printf("\n*****************************************");
|
|
printf("\nSu reserva se ha efectuado correctamente.");
|
|
printf("\n¡GRACIAS POR SU COMPRA!");
|
|
printf("\n*****************************************\n");
|
|
}
|
|
|
|
break;
|
|
|
|
// OPCIÓN 2
|
|
case 2:
|
|
|
|
// Mostrar el estado de los asientos vacios.
|
|
|
|
printf("\n------------------------------");
|
|
printf("\n| Estado actual de la sala |");
|
|
printf("\n------------------------------\n\n");
|
|
printf(" |\t0\t1\t2\t3\t4\t5\t6\t7\t<< Asiento\n");
|
|
printf("_____|_____________________________________________________________________________\n");
|
|
printf(" |\n");
|
|
for(i=0; i<FILAS; i++){
|
|
printf(" %d |\t",i);
|
|
for(j=0; j<ASIENTOS; j++){
|
|
if(sala[i][j]==0){
|
|
fflush(stdin);
|
|
estado[0] = 'O';
|
|
}else{
|
|
fflush(stdin);
|
|
estado[0] = 'X';
|
|
}
|
|
|
|
printf("%s\t", estado);
|
|
|
|
}
|
|
printf("\n");
|
|
}
|
|
printf(" |\n ^ |\nFila |\n\n");
|
|
break;
|
|
|
|
// OPCIÓN 3
|
|
case 3:
|
|
|
|
printf("\nPara devolver una entrada necesitamos su ubicación en la sala:\nNúmero de fila: ");
|
|
|
|
// Pedir Fila y control de nº de fila correcto
|
|
do{
|
|
scanf("%d", &resFila);
|
|
if(resFila<0||resFila>9){
|
|
printf("\nSolo tenemos filas del 0 al 9.\nVuelva a intentarlo: ");
|
|
}
|
|
}while (resFila<-1||resFila>9);
|
|
|
|
|
|
printf("Número de asiento: ");
|
|
|
|
// Pedir Asiento y control de nº de asiento correcto
|
|
do{
|
|
scanf("%d", &resAsiento);
|
|
if(resAsiento<0||resAsiento>7){
|
|
printf("\nSolo tenemos asientos del 0 al 7.\nVuelva a intentarlo: ");
|
|
}
|
|
}while (resAsiento<-1||resAsiento>7);
|
|
|
|
// Control si el asiento está libre (error) o es una anulación correcta
|
|
if(sala[resFila][resAsiento]==0){
|
|
printf("\n***********************************");
|
|
printf("\nLo sentimos, este lugar está libre,\nno puede ser su reserva.");
|
|
printf("\n***********************************\n");
|
|
}else{
|
|
sala[resFila][resAsiento]=0;
|
|
printf("\n*******************************************");
|
|
printf("\nSu reserva ha sido cancelada correctamente.");
|
|
printf("\n¡HASTA PRONTO!");
|
|
printf("\n*******************************************\n");
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
// OPCIÓN 4
|
|
case 4:
|
|
recauda=0;
|
|
for(i=0; i<FILAS; i++){
|
|
for(j=0; j<ASIENTOS; j++){
|
|
if(sala[i][j]==1){
|
|
recauda=recauda+5.5;
|
|
}
|
|
}
|
|
}
|
|
|
|
printf("\n***********************************************");
|
|
printf("\nLa sala lleva recaudado un total de %.2f euros.", recauda);
|
|
printf("\n***********************************************\n");
|
|
break;
|
|
|
|
// OPCIÓN SALIR
|
|
case 0:
|
|
|
|
|
|
break;
|
|
|
|
// ERROR EN EL MENÚ
|
|
default:
|
|
printf("\nNo es un valor correcto para este menu.\nVuelva a intentarlo\n\n");
|
|
}
|
|
}while ( menu != 0 );
|
|
|
|
return 0;
|
|
|
|
|
|
} |