hola compañeros;
tengo una practica que realizar de C y me gustaria saber si alguien podria hecharme una mano para poder seguir o saber si alguien la tuviera realizada.
Os voi a resumir un poco en que consiste la practica y a continuacion colocare lo que tengo realizado de la practica.
La practica consiste en informatizar la gestion de un complejo turistico que consta de 5 hoteles.Ademas cada hotel cuenta con 15 habitaciones dobles.Se debe realizar un programa en C que permita almacanar y saber la ocupacion instantanea de todos lña hoteles en cualquier momento.Tambien se podra introducir, almacenar y saber los datos personales de los clientes actuales y los anteriores.
El codigo fuente esta realizado con estrusturas de datos y funciones.
este es el programa que tengo realizado;
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
//CONSTANTES
#define HOT 1 //número máximo de hoteles
#define HAB 3 //número máximo de habitaciones
#define N 2 //maximo de personas en una habitación
//TIPOS
typedef struct
{
int dia;
int mes;
int ano;
} fecha;
typedef struct
{
char nombre[20];
char apellido1[20];
char apellido2[20];
char dni[9];
fecha f_entrada;
fecha f_salida;
int nhabita;
} datosper;
typedef struct
{
char dni1[9]; //DNI de la primera persona
char dni2[9]; //DNI de la segunda persona
int nhabita;
int precio;
int ocupado;
} habitacion;
typedef datosper persona[HOT][HAB][N];
typedef habitacion habita[HOT][HAB];
//Cabeceras
void iniciar_lista(persona cliente, habita habi);
void cargar (persona cliente);
void guardar(persona cliente);
void introducir(persona cliente, habita habi);
menu (void);
void baja(persona cliente,habita habi);
//void buscar(persona cliente);
//void ordenar (persona cliente);
main(void)
{
char opcion, nombre,apellido1;
persona cliente;
habita habi;
iniciar_lista(cliente, habi);
for(;;)
{
opcion=menu();
switch(opcion)
{
case 'i' : introducir(cliente,habi);
break;
case 'd' : baja(cliente, habi);
break;
/* case 'b' : buscar(cliente);
break; */
case 'g' : guardar(cliente);
break;
case 'c' : cargar(cliente);
break;
case 's' : return 0;
} //fin switch
} //fin for
printf("FIN MAIN\n");
getch();
return 0;
}//fin main
menu (void)
{
char car;
do{
clrscr();
printf("\n (I) Introducir clientes");
printf("\n (D) Dar de baja a un cliente");
printf("\n (B) Buscar por apellido");
printf("\n (G) Guardar en archivo");
printf("\n (C) Cargar archivo");
printf("\n (S) Salir\t\n");
fflush(stdin);
car=getche();
}while (!strchr("idblgcs",tolower(car)));
return tolower(car);
}//fin menu
///////////////// INICIAR LISTA //////////////////
void iniciar_lista(persona cliente, habita habi)
{
int i,j,k;
for(i=0;i<HOT;i++){
for(j=0;j<HAB;j++){
habi[i][j].ocupado=0;
for(k=0;k<N;k++){
*cliente[i][j][k].apellido1='\0';
cliente[i][j][k].f_salida.dia='00';
cliente[i][j][k].f_salida.mes='00';
cliente[i][j][k].f_salida.ano='00';
}
}
}
}//fin iniciar lista
///////////////////// INTRODUCIR //////////////////
void introducir(persona cliente, habita habi)
{
int i,j,k,num,nhot,nhab,personas=0;
printf("\n Introduce el numero del hotel\n");
scanf("%d",&nhot);
getch();
printf("En el hotel %d estas las siguientes habitaciones disponibles\n",nhot);
for(j=0;j<HAB;j++)
{
if(!(habi[nhot][j].ocupado)) printf("habitacion %d disponible\n",j);
}//finforj
printf("\nCual quiere reservar\n");
scanf("%d",&nhab);
//fflush(stdin);
getch();
do{printf("CUANTAS PERSONAS SE VAN A HOSPEDAR EN LA HABITACION\n");
scanf("%d",&k);
getch();
}while((k<1) && (k>2));
k--;
do{
printf("\n Nombre:");
fflush(stdin);
//fscanf(stdin,"%s",cliente[nhot][nhab][k].nombre);
scanf("%s",cliente[nhot][nhab][k].nombre);
printf("\n Primer apellido:");
fflush(stdin);
fscanf(stdin,"%s",cliente[nhot][nhab][k].apellido1);
printf("\n Segundo apellido:");
fflush(stdin);
fscanf(stdin,"%s",cliente[nhot][nhab][k].apellido2);
printf("\n DNI:");
fflush(stdin);
fscanf(stdin,"%s",cliente[nhot][nhab][k].dni);
if(k==0)
strcpy(habi[nhot][nhab].dni1,cliente[nhot][nhab][k].dni);
if(k==1)
strcpy(habi[nhot][nhab].dni2,cliente[nhot][nhab][k].dni);
cliente[nhot][nhab][k].nhabita=nhab;
habi[nhot][nhab].nhabita=nhab;
habi[nhot][nhab].ocupado=1;
if(k==0){
printf("\n Introduzca el precio de la habitacion:");
fflush(stdin);
fscanf(stdin,"d",&habi[nhot][nhab].precio);
}
printf("Fecha de entrada\n");
printf("\n\t DIA: ");
fflush(stdin);
fscanf(stdin,"%d",&cliente[nhot][nhab][k].f_entrada.dia);
printf("\n\t MES: ");
fflush(stdin);
fscanf(stdin,"%d",&cliente[nhot][nhab][k].f_entrada.mes);
printf("\n\t ANO: ");
fflush(stdin);
fscanf(stdin,"%d",&cliente[nhot][nhab][k].f_entrada.ano);
k--;
}while(k> -1);//finfork*/
}
////////////// DAR DE BAJA ////////////
void baja(persona cliente,habita habi)
{
int hot,hab,cam,i,j,k;
FILE *ft;
printf ("introduce el numero del hotel\n");
scanf ("%i", &hot);
printf ("introduce el numero de la habitacion\n");
scanf ("%i", &hab);
printf ("introduce el numero de la cama\n");
scanf ("%i", &cam);
cam--;
printf ("fecha de salida");
printf ("\n\t DIA:");
fflush(stdin);
fscanf(stdin,"%d", &cliente[hot][hab][cam].f_salida.dia);
printf ("\n\t MES:");
fflush(stdin);
fscanf(stdin,"%d", &cliente[hot][hab][cam].f_salida.mes);
printf ("\n\t AÑO:");
fflush(stdin);
fscanf(stdin,"%d", &cliente[hot][hab][cam].f_salida.ano);
habi[hot][hab].ocupado=0;
if((ft=fopen("registro.dat","a"))==NULL)
{
printf ("\n nose puede abrir el arxivo");
getch();
return;
}
fprintf (ft, "\n %s", cliente[hot][hab][cam].nombre);
fprintf (ft, "\n %s", cliente[hot][hab][cam].apellido1);
fprintf (ft, "\n %s", cliente[hot][hab][cam].apellido2);
fprintf (ft, "\n %s", cliente[hot][hab][cam].dni);
fprintf (ft, "\n %s", cliente[hot][hab][cam].nhabita);
fprintf (ft, "\n %s", cliente[hot][hab][cam].f_entrada.dia);
fprintf (ft, "\n %s", cliente[hot][hab][cam].f_entrada.mes);
fprintf (ft, "\n %s", cliente[hot][hab][cam].f_entrada.ano);
fprintf (ft, "\n %s", cliente[hot][hab][cam].f_salida.dia);
fprintf (ft, "\n %s", cliente[hot][hab][cam].f_salida.mes);
fprintf (ft, "\n %s", cliente[hot][hab][cam].f_salida.ano);
fclose(ft);
}
////////////// BUSCAR /////////////////
void buscar(persona cliente)
{
char dni;
printf("introduce el DNI de la persona\n");
scanf("%c",&dni);
}
falta la funcion de buscar por dni la persona k se desee y la funcion de ordenar, aunke esta ultima es menos importante.
por favor, si podeis exarme una mano os lo agradeceria muxo.
gracias y saludos
////////////// GUARDAR //////////////////
void guardar(persona cliente)
{
FILE *fp;
int i,j,k;
if((fp=fopen("hotel.dat","wt"))==NULL)
{
printf("\n No se puede abrir el archivo");
getch();
return;
}//fin if
for(i=0;i<HOT;i++){
for(j=0;j<HAB;j++){
for(k=0;k<N;k++)
{
fprintf (fp,"\n %s",cliente[i][j][k].nombre);
fprintf (fp,"\n %s",cliente[i][j][k].apellido1);
fprintf (fp,"\n %s",cliente[i][j][k].apellido2);
fprintf (fp,"\n %s",cliente[i][j][k].dni);
fprintf (fp,"\n %d",cliente[i][j][k].nhabita);
fprintf (fp,"\n %d/",cliente[i][j][k].f_entrada.dia);
fprintf (fp,"\n %d/",cliente[i][j][k].f_entrada.mes);
fprintf (fp,"\n %d",cliente[i][j][k].f_entrada.ano);
fprintf (fp,"\n %d/",cliente[i][j][k].f_salida.dia);
fprintf (fp,"\n %d/",cliente[i][j][k].f_salida.mes);
fprintf (fp,"\n %d",cliente[i][j][k].f_salida.ano);
}}}
fclose(fp);
printf("\n\n Archivo guardado");
getch();
}//fin guardar
/////////// CARGAR ////////////////
void cargar (persona cliente)
{
FILE *fp;
int i,j,k;
if((fp=fopen("hoteles.txt","r"))==NULL)
{
printf("\n No se puede abrir el archivo");
getch();
return;
}//fin if
for(i=0;i<HOT;i++){
for(j=0;j<HAB;j++){
for(k=0;k<N;k++)
{
fscanf (fp," %s %s %s %s",cliente[i][j][k].nombre,
cliente[i][j][k].apellido1,
cliente[i][j][k].apellido2,
cliente[i][j][k].dni);
fscanf (fp," %d %d %d %d %d %d %d",&cliente[i][j][k].nhabita,
&cliente[i][j][k].f_entrada.dia,
&cliente[i][j][k].f_entrada.mes,
&cliente[i][j][k].f_entrada.ano,
&cliente[i][j][k].f_salida.dia,
&cliente[i][j][k].f_salida.mes,
&cliente[i][j][k].f_salida.ano);
}}}
fclose(fp);
printf("\n\n Archivo cargado");
getch();
}