Programación en lenguaje C Gestión hotelera Urgente Urgente Se buscan expertos en programación
int CheckRoom(struct room *pr)
{char phonenu[4][12]={"110","119","120","122"}; /*Número de teléfono privado ilegal*/
char type[3][2]={"2","t","T"};
int flag=1, i;
static int pass=1;
if(NULL==pr) {printf("Error: ¡Punto nulo! No se pueden verificar los datos:\n"); return 0;}
printf("Comenzar a parte Mantener:acerca de la habitación\n");
while( strlen(pr->roomnu)>5 )/*Verificar los datos length, para evitar errores al guardar datos binarios*/
{pr->roomnu[5]=0;
printf("ERROR: roomnu: %s tiene más de 5 bytes.\ n",pr->roomnu);
printf("Seleccione otro roomnu más corto:\n");
scanf("%s",pr-> roomnu);
}
while( strlen(pr->cleaner)>19 )/*Compruebe la longitud de los datos para evitar errores al guardar datos binarios*/
{pr- >cleaner[19]=0;
printf("ERROR:el limpiador:%s tiene más de 19 bytes.\n",pr->cleaner);
printf( "Seleccione otro nombre más corto:\n");
scanf("%s",pr->cleaner);
}
while(flag ||strlen(pr->phonenu)>11)/*Compruebe el contenido de los datos (controlado por bandera) y la longitud para evitar errores al guardar datos binarios*/
{
while( strlen (pr->phonenu)>11 )/*comprobar longitud*/
{pr->phonenu[11]=0;
printf(" ERROR: el número de teléfono:%s tiene más de 11 bytes.\n",pr->phonenu);
printf("Seleccione otro número de teléfono más corto:\n");
scanf("%s" ,pr->phonenu);
}
while(flag)/*Comprueba el contenido*//*Este algoritmo también tiene problemas. ¿El contenido es ilegal pero la longitud pasa? */
{for(i=0;flag&&i<4;i++)
if( 0==strcmp(pr->phonenu,phonenu[i]) )
/*Contenido ilegal*/
{printf("ERROR:ilegal phonenu:%s!\n",pr->phonenu);
flag=0;/*Detectado ilegal content*/
}
if(flag) flag=0;/*Comprobación de contenido aprobada*/
else {flag=1;
printf("Ingrese un teléfono legalnu:\n");
scanf("%s",pr->phonenu);/*La verificación de contenido falló, vuelva a ingresar*/< / p>
}
}
}
bandera=1;
while(bandera||strlen(pr- > tipo)>1)/*Compruebe el contenido de los datos (controlado por bandera) y la longitud, este ejemplo es diferente del ejemplo anterior*/
{
while( strlen(pr- >type )>1 )/*Comprobar longitud*/
{pr->type[1]=0;
printf("ERROR:el tipo:%s es más largo que 1 byte .\n",pr->type);
printf("Seleccione otro tipo más corto:\n");
scanf("%s",pr- >tipo );
}
while(flag)/*comprobar contenido*/
{if(strcmp(pr->tipo,tipo[0] )&&strcmp (pr->tipo,tipo[1])&&strcmp(pr->tipo,tipo[2]) )/*Contenido ilegal*/
{printf("ERROR:tipo ilegal:%s !\ n",pr->type);
flag=0;/*Contenido ilegal detectado*/
}
if(flag) flag= 0 ;/*Verificación de contenido aprobada*/
else {flag=1;
printf("Ingrese un tipo legal:\n");
scanf ("%s",pr->type);/*Error en la comprobación del contenido, reimportación*/
}
}
} p >
while( pr->maximum
{printf("ERROR: la capacidad de la sala no se ajusta al número de clientes actuales clientes .\n");
printf("Por favor, modifique el máximo:\n");
scanf("%d",&(pr->máximo)
);
}/*Compruebe si la capacidad máxima de la habitación es compatible con el número actual de huéspedes. Si la primera es menor que la segunda, escriba un archivo de informe de error*/
<. p> printf("Felicitaciones: ROOM Check pass %d!\n",pass++);return 1;
}
int CheckClient(struct client *pc)
{ int flag=1,i;
char sex[4][2]={"m","M","f","F" };
static int pass=1;
if(NULL==pc) {printf("Error: ¡Punto nulo! No se pueden verificar los datos:\n"); return 0;} p>
printf("Comenzar a parte Mantener:acerca del cliente\n");
while( strlen(pc->roomnu)>5 )/*Revisar la habitación length*/
{pc->roomnu[5]=0;
printf("ERROR: roomnu: %s tiene más de 5 bytes.\n",pc- >roomnu);
printf("Seleccione otro roomnu más corto:\n");
scanf("%s",pc->roomnu);
}
while( strlen(pc->identity_card)!=18 )/*Comprueba la longitud del número de identificación*/
{pc->identity_card[18]= 0;
printf("ERROR:la tarjeta de identidad:%s no tiene 18 bytes.\n",pc->identity_card);
printf("Compruebe la longitud y la entrada de nuevo:\n");
scanf("%s",pc->identity_card);
}
while(strlen(pc-> name)>19)/*Compruebe la longitud del nombre*/
{pc->name[19]=0;
printf("ERROR: el nombre:%s es más largo que 19 bytes.\n",pc- >nombre);
printf("Seleccione otro teléfono más cortonu:\n");
scanf("%s",pc- >name);
}
while(flag||strlen(pc->sex)>1)/*Comprueba el contenido de género (controlado por la bandera) y la longitud*/ p>
{
while( strlen(pc->sex)>1 )/*comprobar longitud*/
{pc->sex[1]=0;
printf(" ERROR:el sexo:%s es
más de 1 byte.\n",pc->sex);
printf("Seleccione otro sexo más corto:\n");
scanf("%s", pc->sexo);
}
while(flag)/*comprobar contenido*/
{if(strcmp(pc->sexo,sexo[ 0])&&strcmp(pc->sex,sex[1])&&strcmp(pc->sex,sex[2])&&strcmp(pc->sex,sex[3]) )/*Contenido ilegal*/
{printf("ERROR:sexo ilegal:%s!\n",pc->sexo);
flag=0;/*Contenido ilegal detectado*/
}
if(flag) flag=0;/*Verificación de contenido aprobada*/
else {flag=1;
printf("Ingrese un código legal sex:\n");
scanf("%s",pc->sex);/*La verificación del contenido falló, vuelva a ingresar*/
}
}
}
while( strlen(pc->date)!=8 )/*Comprueba la duración de la fecha*/
{pc- >fecha[8]=0;
printf("ERROR:la fecha:%s no es de 8 bytes.\n",pc->fecha);
printf(" Por favor verifique la longitud e ingrésela nuevamente:\n");
scanf("%s",pc->date);
}
while (strlen(pc->collect)>5)/*Compruebe la longitud del beneficiario*/
{pc->collect[5]=0;
printf("ERROR: the recopilar:%s no tiene 5 bytes.\n",pc->collect);
printf("Compruebe la longitud e introdúzcala nuevamente:\n");
scanf("%s",pc->collect);
}
while(pc->time<0)/*Comprueba el número de días de check-in*/
{printf("ERROR: entrada ilegal de tiempo: %f!\n",pc->time);
printf("Por favor verifíquelo e introdúzcalo nuevamente:\n" );
p>scanf("%f",&pc->tiempo);
}
while(pc->costo<0)/* Consulta las tasas a pagar*/
{printf("ERROR:illega
l ingreso del costo: %f!\n",pc->costo);
printf("Por favor verifique e ingréselo nuevamente:\n");
scanf(" %f",&pc->cost);
}
while(pc->fee<0)/*Verifique la tarifa real*/
{ printf("ERROR: ingreso ilegal del costo: %f!\n",pc->tarifa);
printf("Por favor verifíquelo e introdúzcalo nuevamente:\n");
scanf("%f",&pc->fee);
}
if( pc->fee>pc->cost )/* Verifique la relación entre datos, La tarifa real debe ser menor que el monto a pagar*/
{printf("Puede ser un error:fee=%f > cost=%f\n",pc->fee,pc-> cost) ;
printf("¿Quieres modificarlos?(1:YES;0:NO)\n");
scanf("%d",&flag) ;
while(bandera)
{printf("Ingrese los valores: costo y tarifa\n");
scanf("%f%f ", &pc->costo,&pc->tarifa);
if(pc->tarifa>pc->costo)
{printf("¡¡Error otra vez!!\n" ); flag=1;}
else flag=0;
}
}
printf("Felicitaciones: CLIENTE Verificar pase %d !\n",pass++);
return 1;
}
int CheckAll(struct room *head_room)
{struct client *pc;
struct room *pr;
if(NULL==head_room) {printf("head_room=0\n");return 0;} p>
printf("Comenzar a mantener parte: acerca de la sala y el cliente\n");
pr=head_room;
while(pr)
{ CheckRoom(pr);
pc=pr->head;
while(pc)
{CheckClient(pc);
pc=pc->siguiente;
}
pr=pr->siguiente;
}
devuelve 1;
}
>/**Esta función es para el mantenimiento de datos internos y no proporciona servicios de datos de entrada. Integridad de la entidad, integridad referencial, integridad definida por el usuario
Si ocurre un error, el error se enviará al documento.
El rango de error se define temporalmente de la siguiente manera:
1. Los clientes en la misma habitación tienen diferentes números de habitación (¡la misma búsqueda de habitación!)
2. la tarifa real pagada es mayor que la tarifa a pagar.
(¡Busca en la misma habitación!)
3. El mismo cliente se registró en el hotel dos veces el mismo día (¡busca en toda la lista! El número de identificación y la fecha de entrada son los mismos)
4. El mismo número de cédula de identidad, nombre y sexo son diferentes (¡búsqueda en tabla completa!)
Además, las tareas que se deben completar son:
5. Calcule las tarifas a pagar del cliente -> Para operaciones de costos, debe usar Para: tiempo, precio unitario
6 Calcule el número total de residentes en la habitación (incluidos los residentes actuales) -> Para operaciones totales de cliente, usted. necesita usar: Ninguno
7. Volver a revisar el número actual de residentes ->Para operar el cliente actual, debe usar: tiempo
8. habitación ->Para operar con ingresos, debe usar: tarifa
9. Las tarifas claras pagadas del residente actual -> Para operar con tarifas, debe usar: tiempo
La orden de completar estas operaciones es: 7->6->5->9->8->2-> 1->3->4*/
int Consistency(struct room *head_room) p>
{struct room *pr,*tpr;
struct client * pc,*tpc;
archivo char[12]="error.doc"; p>
int i=0;/*i se utiliza para contar errores*/
static int count=0;
ARCHIVO *fp;
if(NULL==head_room) {printf("head_room=0\n");return 0;}
printf("Empezar a separar Mantener: ¡Consistencia!\n");
pr=head_room;
while(pr)
{pr->clienteactual=0;
/*pr->clientetotal=0;* /
pr->ingresos=0;
pc=pr ->cabeza;
while(pc)
{if( !pc->time) pr->currentclient++;/*Completo...7.. ...*/
/*pr->totalclient++;*/ /*Completo...6.. ...*/
pc-> costo=(pc->tiempo)*(pr->precio_unidad /*Completo...5.....*/
<); p> if(!pc->time) pc->fee=0; /*Completar...9.....*/pr->ingresos=pr->ingresos+pc- >tarifa; /* Completo.........8.....*/
pc=pc->siguiente;
}
pr=pr- >siguiente;
}
if(NULL==( fp=fopen(archivo,"wt") ) )
{ printf("No se puede abrir el archivo :%s!\n",archivo);
r
eturn 0;
}
pr=head_room;
while(pr)
{pc=pr->head; p> p>
while(pc)
{if(pc->tarifa>pc->costo)
{fprintf(fp,"Error %d:tarifa= %f > cost=%f\n",++i,pc->fee,pc->cost);
fprintf(fp,"roomnu identidad_tarjeta nombre sexo fecha clt hora costo tarifa\n"
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n", pc- >roomnu,pc->identity_card, pc->nombre, pc->sexo, pc->fecha, pc->recoger, pc->hora, pc->costo, pc->tarifa);
/*Completo...2.....*/
}
if( strcmp(pr->roomnu,pc->roomnu) )
{fprintf(fp,"Error %d:la habitación del cliente:%s != la habitación del cliente:%s",++i,pc->roomnu,pr->roomnu);
p >fprintf(fp,"roomnu clean phonenu type max area price clientNO\n");
fprintf(fp,"%-6s %-16s %-12s %-4s %-3d % -6.1f %-6.1f %-2d\n",pr->roomnu,pr->limpiador,pr->phonenu,pr->tipo,pr->máximo,pr->área,pr->precio_unitario, pr ->clienteactual);
fprintf(fp,"roomnu tarjeta_identidad nombre sexo fecha clt hora costo tarifa\n");
fprintf(fp,"%-6s %-18s % -15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",pc->roomnu,pc->identity_card,pc->nombre,pc->sexo, pc ->fecha,pc->cobrar,pc->hora,pc->costo,pc->tarifa);
/*Completo...1..... */
}
pc=pc->siguiente;
}
pr=pr->siguiente;
}
/*Esto requiere una búsqueda completa en la tabla Busque en toda la tabla una vez y pase un cliente*/
pr=head_room;
while(pr)
mientras(pc)
{
si(pc->siguiente)
{ tpc= pc->siguiente;
while(tpc)
{if(0==strcmp(pc->identity_card,tpc->identity_card) && 0==strcmp(pc -> date,tpc->date) )
{fprintf(fp,"Error %d:el mismo cliente:%s vivió en nuestro hotel el mismo día:%s\n",++ i, pc->identity_card,pc->date);
fprintf(fp,"roomnu identidad_card nombre sexo fecha clt hora costo tarifa\n");
fprintf(fp, "% -6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->nombre, pc- >sexo,pc->fecha,pc->cobrar,pc->tiempo,pc->costo,pc->tarifa);
fprintf(fp,"%-6s %-18s % -15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->nombre,tpc->sexo,tpc -> fecha,tpc->cobrar,tpc->hora,tpc->costo,tpc->tarifa);
}/*Completar...3.....*/
if(0==strcmp(pc->identity_card,tpc->identity_card) && (strcmp(pc->nombre,tpc->nombre)||strcmp(pc->sexo,tpc->sexo)) )
{fprintf(fp,"Error %d:igual
client:%s tienen un nombre o sexo diferente en nuestro hotel.\n",++i,pc->identity_card);
fprintf(fp,"roomnu identidad_card nombre sexo fecha clt hora costo tarifa\ n");
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n", pc->roomnu,pc->identity_card, pc->nombre, pc->sexo, pc->fecha, pc->recoger, pc->tiempo, pc->costo, pc->tarifa);
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc ->identity_card,tpc->nombre,tpc->sexo,tpc->fecha,tpc->cobrar,tpc->hora,tpc->costo,tpc->tarifa);
}/* Completo......4.....*/
tpc=tpc->next;
}/* while(tpc) salir */ p>
/*La comparación de la habitación actual finaliza y entra en la siguiente habitación*/
tpr=pr->next;
while(tpr)
{tpc=tpr->head;
while(tpc)
{if(0==strcmp(pc->identity_card,tpc->identity_card) && 0==strcmp( pc->date,tpc->date) )
{fprintf(fp,"Error %d:el mismo cliente:%s vivió en nuestro hotel el mismo día:%s\n",+ +i,pc->identity_card,pc->date);
fprintf(fp,"roomnu identidad_card nombre sexo fecha clt hora costo tarifa\n");
fprintf(fp ,"%-6s %-18s %-15s %-
3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->nombre,pc->sexo,pc->fecha,pc- >cobrar,pc->tiempo,pc->costo,pc->tarifa);
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s % -4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->nombre,tpc->sexo,tpc->fecha,tpc->recoger,tpc-> tiempo,tpc->costo,tpc->tarifa);
}/*Completar...3.....*/
if(0 ==strcmp(pc ->identity_card,tpc->identity_card) && (strcmp(pc->nombre,tpc->nombre)||strcmp(pc->sexo,tpc->sexo)) )
{fprintf(fp ,"Error %d:el mismo cliente:%s tienen diferente nombre o sexo en nuestro hotel.\n",++i,pc->identity_card);
fprintf( fp,"roomnu identidad_card nombre sexo fecha clt hora costo tarifa\n");
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1 f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->nombre,pc->sexo,pc->fecha,pc->recoger,pc->hora,pc->costo,pc- >tarifa);
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1 f\n\n ",tpc->roomnu,tpc->identity_card,tpc->nombre,tpc->sexo,tpc->fecha,tpc->recoger,tpc->hora,tpc->costo,tpc->tarifa); p>
}/*Completar...4.....*/
tpc=tpc->siguiente;
}/*mientras(tpc) exi
t */
tpr=tpr->siguiente
}/* while(tpr) salir */
}
else /*Buscar si el siguiente nodo del cliente actual está vacío*/
{tpr=pr->next;
while(tpr)
{tpc = tpr->head
while(tpc)
{if(0==strcmp(pc->identity_card,tpc->identity_card) && 0==strcmp(pc- > date,tpc->date) )
{fprintf(fp,"Error %d:el mismo cliente:%s vivió en nuestro hotel el mismo día:%s\n",++i , pc->identity_card,pc->date);
fprintf(fp,"roomnu identidad_card nombre sexo fecha clt hora costo tarifa\n");
fprintf(fp," % -6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc->identity_card,pc->nombre,pc - >sexo,pc->fecha,pc->cobrar,pc->tiempo,pc->costo,pc->tarifa);
fprintf(fp,"%-6s %-18s %- 15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc->nombre,tpc->sexo,tpc- > fecha,tpc->cobrar,tpc->hora,tpc->costo,tpc->tarifa);
}/*Completar...3.....*/
if(0==strcmp(pc->identity_card,tpc->identity_card) && (strcmp(pc->nombre,tpc->nombre)||strcmp(pc->sexo,tpc->sexo)) )
{fprintf(fp,"Error %d:el mismo cliente:%s tienen n diferentes
nombre o sexo en nuestro hotel.\n",++i,pc->identity_card);
fprintf(fp,"roomnu identidad_card nombre sexo fecha clt hora costo tarifa\n");
fprintf(fp,"%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n",pc->roomnu,pc- >tarjeta_identidad,pc->nombre,pc->sexo,pc->fecha,pc->cobrar,pc->tiempo,pc->costo,pc->tarifa);
fprintf(fp, "%-6s %-18s %-15s %-3s %-8s %-3s %-4.1f %-5.1f %-5.1f\n\n",tpc->roomnu,tpc->identity_card,tpc-> nombre,tpc->sexo,tpc->fecha,tpc->cobrar,tpc->hora,tpc->costo,tpc->tarifa);
}/*Completar... ..4 .....*/
tpc=tpc->siguiente;
}/*mientras(tpc) salir */
tpr= tpr-> next;
}/* while(tpr) exit */
}
pc=pc->next;/*Buscar en toda la tabla una vez Pase un cliente*/
}/*mientras(pc) salir */
pr=pr->siguiente
}/*mientras(pr ) salir * /
printf("Mantener NO. %d\n",++count);
fclose(fp);
return 1; >
}
int ToDate(char *date,int año,int mes,int día)/*Convertir año, mes y día a cadena*/
{int i ,j;
char temp[9];
for(i=3;i>-1;i--)
{j =año% 10;
temp[i]=j+'0';
año=año/10;
}
for(i =1;i>-1;i--)
{j=mes%10;
temp[4+i]=j+'0';
p >mes=mes/10;
}
for(i=1;i>
-1;i--)
{j=día%10;
temp[6+i]=j+'0';
día=día /10;
}
temp[8]=0;
strcpy(fecha,temp);
devuelve 1;
}
int Cuenta(struct room *head_room)
{struct room *pr;
struct client *pc;
char temp[20],fecha[9],nombre[6];
costo flotante, tarifa;
int hora,año,mes,día; p> p>
int flag=1;
clr();
if(NULL==head_room) {printf("head_room=0\n");getch () ;clr();return 0;}
printf("¡Ingrese el ID DEL CLIENTE (18 bytes)!\n");/*mode=1 significa buscar un cliente específico según el ID número*/
scanf("%s",temp);
while(strlen(temp)!=18)
{printf("Error: ¡el cliente (ID=% s) no tiene 18 bytes!",temp);
printf("¡Por favor verifique e ingrese el ID DEL CLIENTE (18bytes), nuevamente!\n");/*mode=1 significa buscar según el número de identificación Cliente específico*/
scanf("%s",temp);
}
/*Buscar cliente*/ p>
pr =head_room;
flag=1;
while(flag&&pr)
{pc=pr->head;
while(flag&&pc )
{if( !strcmp(pc->identity_card,temp)&&!pc->time)
{printf("roomnu identidad_card nombre sexo fecha tarifa de costo de tiempo clt\n ");
PrintClient(pc);
flag=0;
}
if(flag ) pc=pc->siguiente;
}
pr=pr->siguiente;
}
if(NULL== pc) {printf(" Error: ¡el cliente(ID=%s) no existe en nuestro hotel!\n",temp);getch();clr();return 0;}
/ *Obtener fecha*/
año =GetTime(0,1);
mes=GetTime(0,2);
día =GetTime(0, 3);
Hasta la fecha
(fecha,año,mes,día);
tiempo=CountDays(pc->fecha,fecha);
costo=tiempo*pr->precio_unidad;
printf("El ID del cliente=%s que han vivido %d días deben pagar %6.1f $!\n",temp,time,cost);
printf("Por favor, ingrese cuánto ¡obtén de él y tu nombre!\n");
printf("El dinero es:");
scanf("%f",&fee);
printf("Su nombre(recoger) es:");
scanf("%s",nombre);
while(strlen(nombre)>5)
{printf("Error: ¡el nombre=%s tiene más de 5 bytes!",nombre);
printf("¡Por favor, verifique e ingrese de nuevo!\n"); /*mode=1 significa buscar un cliente específico según el número de identificación*/
scanf("%s",name);
}
pc-> tarifa=tarifa;
pc->costo=costo;
pc->tiempo=tiempo;
strcpy(pc->cobrar, nombre);
printf("¡Fin de cuenta! ¡Gracias!\n");
return 1;
}