elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA Reserva de vuelos en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA Reserva de vuelos en C  (Leído 3,808 veces)
B_PORTA

Desconectado Desconectado

Mensajes: 4


Ver Perfil
AYUDA Reserva de vuelos en C
« en: 15 Abril 2016, 01:24 am »

Buenas noches a todos,

Puesto que este es mi primer mensaje en el foro aprovecho para presentarme de forma breve.

Tengo 21 años y soy estudiante de Aeronáutica, actualmente curso 2º y como veis una de las asignaturas es programación en C

Tengo un problema que no puedo resolver, es el siguiente:

Tras haber hecho el código que adjunto a continuación (de gestión de reserva de un vuelo) me piden que al código anterior le incluya un DNI para cada asiento, es decir, cada asiento del avión debe tener asignado un número de DNI, este sería el ejemplo de ejecución de como debería funcionar: (en todo caso las reservas se abren mediante un fichero)


GESTIÓN DE RESERVA DE ASIENTOS
      Reservas actuales:
       01A 01B 01C 01D 01E 01F 02A 02B 02F 03A 03B 03C
03D 21A 21B 21E 21F 29A 29B 29C 30C

Introduce un asiento ('0' para acabar): 27c
DNI o NIE completo, sin espacios: 12345678k
Numero DNI incorrecto, vuelve a probarlo.
DNI o NIE completo, sin espacios:  1234567Z
Numero DNI incorrecto, vuelve a probarlo.
DNI o NIE completo, sin espacios:  123456789
Número DNI incorrecto, reserva anulada.

Reserves actuales:
       01A 01B 01C 01D 01E 01F 02A 02B 02F 03A 03B 03C
03D 21A 21B 21E 21F 29A 29B 29C 30C Seient ('0' para acabar): 27c
DNI o NIE completo, sin espacios:  12345678z Reserva efectuada.
Reserves actuales:
       01A 01B 01C 01D 01E 01F 02A 02B 02F 03A 03B 03C
03D 21A 21B 21E 21F 27C 29A 29B 29C 30C Seient ('0' para acabar): 0
Fin de proceso.


Como podéis ver sólo puedo introducir el DNI mal 3 veces

Este es el código que tengo hasta ahora, muchas gracias de antemano!:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #define MAXSEATS 30*6
  6. #define SEATSLEN 3
  7.  
  8.  
  9. char Seats[MAXSEATS][SEATSLEN+1];
  10. int SeatsQ;
  11.  
  12.  
  13. int ValidacioSeient (char seient[BUFSIZ]){
  14.    int a, b;
  15.    a = -1; //files
  16.    b = 0; //columnes
  17.  
  18.  
  19.    if(isdigit(seient[0])!=0 && isdigit(seient[1])!=0 && isalpha(seient[2])!=0){
  20.  
  21.        b = ((int)seient[2] - (int)'A')+1; //conversió
  22.        if(b>=1 && b<=6){
  23.            if(seient[0]<='2' && seient[1]>='0'){
  24.                if(seient[0]=='0' && seient[1]=='0'){
  25.                    a=-1; //retorna '-1' al main
  26.                }else{
  27.                    a=0; //retorna '0' al main
  28.                }
  29.            }
  30.            if(seient[0]=='3'&& seient[1]=='0'){
  31.                a=0; //retorna '0' al main
  32.            }
  33.        }
  34.    }
  35.  
  36.    return a;
  37. }
  38.  
  39.  
  40.  
  41. void AfegirSeient( char seient[BUFSIZ] ){
  42.    strcpy(Seats[SeatsQ], seient);
  43.  
  44.    SeatsQ = SeatsQ+1;
  45. }
  46.  
  47.  
  48.  
  49. void EliminarSeient( int i ){
  50.    while(i<SeatsQ){
  51.        strcpy(Seats[i], Seats[i+1]);
  52.        i=i+1;
  53.    }
  54.  
  55.    SeatsQ = SeatsQ-1;
  56. }
  57.  
  58.  
  59.  
  60.  
  61. void CercarSeient( char seient[BUFSIZ] ){
  62.    int a, i=0, trobat=0;
  63.    a = 0;
  64.  
  65.    while(i<SeatsQ && trobat==0){
  66.        a=strcmp(seient, Seats[i]);
  67.        if(a==0){
  68.            trobat=1;
  69.            printf("Reserva cancel.lada.\n");
  70.            EliminarSeient(i);
  71.        }
  72.        i=i+1;
  73.    }
  74.  
  75.    if(a!=0){
  76.        if(SeatsQ<MAXSEATS){
  77.            printf("Reserva efectuada.\n");
  78.            AfegirSeient(seient);
  79.        }else{
  80.            printf("ERROR! AVIO COMPLET, No es poden efectuar mes reserves.\n");
  81.        }
  82.    }
  83. }
  84.  
  85.  
  86.  
  87.  
  88. int GuardarSeient( char seient[BUFSIZ] ){
  89.    if(SeatsQ<MAXSEATS){
  90.        strcpy(Seats[SeatsQ], seient);
  91.        SeatsQ = SeatsQ + 1;
  92.    }
  93.    return SeatsQ;
  94. }
  95.  
  96.  
  97.  
  98.  
  99. void ImprimirSeients(){
  100.    int i=0;
  101.  
  102.    printf("Reserves del vol actuals:\n\n");
  103.  
  104.    if(SeatsQ==0){
  105.        printf("  (Taula Buida)\n");
  106.        printf("  No hi ha reserves \n");
  107.    }else{
  108.        while(i<SeatsQ){
  109.            switch (i) {
  110.                case 0-6:
  111.                    printf("  %s\n", Seats[i]);
  112.                    i=i+1;
  113.  
  114.                    break;
  115.  
  116.                default:
  117.                    break;
  118.            }//switch
  119.  
  120.        }//while
  121.    }//else
  122. }//void
  123.  
  124.  
  125.  
  126.  
  127. int CARRREGAFITXER(){
  128.    FILE *fptr;
  129.  
  130.    char seient[BUFSIZ];
  131.    int i, a;
  132.  
  133.    fptr = fopen( "reserves.txt", "rt" );
  134.  
  135.    if( fptr != NULL ){
  136.        i = 0;
  137.        fscanf( fptr, " %s", seient );
  138.  
  139.        while( !feof( fptr ) ){
  140.            a=ValidacioSeient(seient);
  141.            if(a==0){
  142.                i = GuardarSeient(seient);
  143.            }
  144.            fscanf( fptr, " %s", seient );
  145.        }
  146.  
  147.        fclose( fptr );
  148.  
  149.    }else{
  150.        i = -1;
  151.    }
  152.  
  153.    return i;
  154. }
  155.  
  156.  
  157.  
  158.  
  159. void EscriureSeient(){
  160.    int i=0;
  161.  
  162.    FILE *fptr;
  163.  
  164.    fptr = fopen( "reserves.txt", "wt" );
  165.  
  166.    while(i<SeatsQ){
  167.        fprintf( fptr, "%s\n", Seats[i] );
  168.        i=i+1;
  169.    }
  170.    fclose(fptr);
  171. }
  172.  
  173.  
  174.  
  175.  
  176. void EscriureBackup(){
  177.    FILE *fptr;
  178.    FILE *backup;
  179.    char seient[BUFSIZ];
  180.  
  181.    fptr = fopen( "reserves.txt", "rt" );
  182.    backup = fopen ("reserves_copia.txt", "wt");
  183.  
  184.    fscanf( fptr, " %s", seient );
  185.  
  186.    while( !feof( fptr ) ){
  187.        fprintf( backup, "%s\n", seient );
  188.        fscanf( fptr, " %s", seient );
  189.    }
  190.  
  191.    fclose( fptr );
  192.    fclose( backup );
  193. }
  194.  
  195.  
  196.  
  197.  
  198. //FUNCIO PRINCIPAL MAIN
  199.  
  200. int main(){
  201.    char seient[BUFSIZ];
  202.    int a, trobat=0;
  203.    unsigned long c;
  204.  
  205.    SeatsQ = 0;
  206.  
  207.    a =  CARRREGAFITXER();
  208.  
  209.    if(a!=-1){
  210.        EscriureBackup();
  211.    }else{ //En el cas que el fitxer no s'obri
  212.        printf("ERROR!El fitxer no s'ha obert.\n");
  213.    }
  214.    //Menu principal
  215.    printf("********* PROGRAMA PER A LA GESTIO DE RESERVA DE SEIENTS ********* \n\n");
  216.    printf("  Distribucio de cabina:\n\n");
  217.    printf("    01A 01B 01C |  | 01D 01E 01F\n");
  218.    printf("    02A 02B 02C |  | 02D 02E 02F\n");
  219.    printf("    ............................\n");
  220.    printf("    30A 30B 30C |  | 30D 30E 30D\n\n");
  221.    ImprimirSeients();
  222.    printf("\n\nIntroduir Seient (Premer '0' per acabar): ");
  223.    scanf("%s",seient);
  224.  
  225.  
  226.    c = strlen(seient);
  227.  
  228.  
  229.    if(c==1 && seient[0]=='0'){
  230.        trobat=1;
  231.    }
  232.  
  233.  
  234.    while(trobat==0){
  235.  
  236.        if(c==2){
  237.            seient[3]=seient[2];
  238.            seient[2]=seient[1];
  239.            seient[1]=seient[0];
  240.            seient[0]='0';
  241.        }
  242.  
  243.        seient[2]=toupper(seient[2]);
  244.  
  245.        a=ValidacioSeient(seient);
  246.  
  247.  
  248.        if(a==0){
  249.            CercarSeient(seient);
  250.            ImprimirSeients();
  251.        }
  252.  
  253.  
  254.        if(a==-1){
  255.            printf("Codi de seient incorrecte!\n");
  256.        }
  257.  
  258.        printf("\nIntroduir Seient (Premer '0' per acabar): ");
  259.        scanf("%s", seient);
  260.  
  261.        c=strlen(seient);
  262.  
  263.  
  264.        if(c==1 && seient[0]=='0'){
  265.            trobat=1;
  266.        }
  267.  
  268.    }
  269.  
  270.    if(trobat==1){
  271.        EscriureSeient();
  272.        printf("FI DEL PROGRAMA.\n\n\n");
  273.  
  274.    }
  275.  
  276.    return 0;
  277. }


« Última modificación: 15 Abril 2016, 01:50 am por B_PORTA » En línea

HardForo

Desconectado Desconectado

Mensajes: 219


HardForo.com


Ver Perfil WWW
Re: AYUDA Reserva de vuelos en C
« Respuesta #1 en: 15 Abril 2016, 01:36 am »

Y tu DUDA ? donde tienes el probleama ?


En línea

HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *
B_PORTA

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: AYUDA Reserva de vuelos en C
« Respuesta #2 en: 15 Abril 2016, 01:43 am »

Disculpa @boctulus, quizás no me he explicado bien.

La parte del ejemplo de ejecución del primer mensaje (en rojo) es lo que se me pide que haga, ahora mismo si ejecuto el programa tengo esto:

GESTIÓN DE RESERVA DE ASIENTOS 0.0
      Reservas actuales:
       01A 01B 01C 01D 01E 01F 02A 02B 02F 03A 03B 03C
03D 21A 21B 21E 21F 29A 29B 29C 30C
Asiento ('0' para acabar): A01
Código de asiento incorrecto!
Reservas actuales:
       01A 01B 01C 01D 01E 01F 02A 02B 02F 03A 03B 03C
03D 21A 21B 21E 21F 29A 29B 29C 30C
Asiento ('0' para acabar): 1a
Reserva cancelada.
Reservas actuales:
       01B 01C 01D 01E 01F 02A 02B 02F 03A 03B 03C 03D
21A 21B 21E 21F 29A 29B 29C 30C
Asiento ('0' para acabar): 01A Reserva efectuada.
Reservas actuales:
       01A 01B 01C 01D 01E 01F 02A 02B 02F 03A 03B 03C
03D 21A 21B 21E 21F 29A 29B 29C 30C
Asiento ('0' para acabar):  0
Fin de proceso.


Es decir, tengo un fichero con "X" asientos reservados, en el caso que introduzca un asiento que esté en el fichero, me lo elimina, de lo contrario lo añade.

Gracias, un saludo!
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: AYUDA Reserva de vuelos en C
« Respuesta #3 en: 15 Abril 2016, 07:11 am »

Entiendo que el código que has pasado no se puede tocar más que para introducir la funcionalidad del DNI.
En línea

B_PORTA

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: AYUDA Reserva de vuelos en C
« Respuesta #4 en: 15 Abril 2016, 12:45 pm »

Exacto, al programa que he adjuntado hay que añadirle la opcion que asigne un DNI al asiento, aquí es donde me he bloqueado.
Supongo que hay que trabajar con tuplas en todo momento, aunque no estoy seguro...

Gracias a todos!
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: AYUDA Reserva de vuelos en C
« Respuesta #5 en: 15 Abril 2016, 15:10 pm »

Veo que C no es tu primer lenguaje.
Yo veo una tabla de structs
con datos definidos del siguiente estilo:
Un char[] con el tamaño suficiente como para contener una cadena de 3 caracteres, que contendrá el nombre del asiento. <-- Esto está mal. En su lugar debe poner:
Un char[] con el tamaño suficiente como para contener un DNI con su letra.
Un int usado como bool (soy de la vieja escuela) para saber si el asiento está ocupado.
No pondría el nombre del asiento en el struct porqué no lo veo útil. Lo que haría es una función que traduzca el nombre del asiento a un puntero hacia el elemento de la tabla a la que pertenece el asiento.



Editado, razón en el mensaje principal.
« Última modificación: 16 Abril 2016, 14:38 pm por MAFUS » En línea

B_PORTA

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: AYUDA Reserva de vuelos en C
« Respuesta #6 en: 16 Abril 2016, 13:33 pm »

Buenas MAFUS, bueno en realidad es mi primer lenguaje, pero en 1º de carrera ya empezamos a programar, este año es una mezcla de C y C++.
Respecto al programa te he hecho caso y ha funcionado lo del puntero, no lo pensé antes...al final un 10!
Muchísimas gracias por la ayuda, me parece que frecuentaré bastante este foro! Jejejeje

Un saludo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
validar dia reserva php
PHP
kakashi20 2 3,036 Último mensaje 29 Diciembre 2011, 21:35 pm
por kakashi20
AYuda Sistema de reserva
Desarrollo Web
y4ankee231 1 2,031 Último mensaje 15 Noviembre 2012, 10:35 am
por #!drvy
Ayuda como hacer un sistema de reserva de horarios para mi Web
Desarrollo Web
eda6 4 5,289 Último mensaje 10 Abril 2013, 17:20 pm
por l337*
Demandan a un joven por crear una web que ayuda a ahorrar en vuelos por medio...
Noticias
wolfbcn 0 1,170 Último mensaje 30 Diciembre 2014, 13:23 pm
por wolfbcn
Motor de búsqueda de vuelos
Dudas Generales
Kasswed 0 1,849 Último mensaje 1 Enero 2016, 14:34 pm
por Kasswed
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines