venta de boletos de autobuses utilizando (colas ,listas o arboles) y archivos

Iniciado por Anduresu, 27 Julio 2020, 03:22 AM

0 Miembros y 1 Visitante están viendo este tema.

Anduresu

hacer reserva de asientos de un autobús(máximo 10 asientos ) que pida código ,nombre , numero de asiento ,numero de autobús ,precio ,y precio total con impuesto ,guardando los datos en un archivo y utilizando listas o colas y que imprima todo estos datos como un recibo soy estudiante y me ayudaría mucho su ayuda muchas gracias por su tiempo ; si lo siento mucho asta ahii e avanzado

mas que todo queria una idea o una sugerencia de como hacer la parte de colas o listas ya que no se exactamente como proceder
 

#include<stdio.h>
#include<windows.h>

FILE *archivo;

struct pasajero
{
int codigo ,asiento, edad;
char nombre [50];
double precio ,precioTotal;
}pas;
//**************************************************************
double validar(double valor, double li, double ls)
{
while(valor < li || valor > ls)
{
   printf("\n Error...Ingrese un valor entre [%.2lf] y [%.2lf]: ", li, ls);
scanf("%lf",&valor);  
}
return valor;
}
//***************************************************************
void consultar()
{
int cod;

system("cls");

archivo = fopen("pasajero.txt","rt");

if(archivo == NULL)
printf("\nEl archivo No existe.");
else
{
printf("\n Ingrese el codigo del pasajero: ");
scanf("%d",&pas.codigo);

printf("\n codigo Edad Nombre No-asiento");

while(!feof(archivo))
{
fscanf(archivo, "%d %d %s %d",&pas.codigo,&pas.edad,&pas.nombre,&pas.asiento);

if(pas.codigo==cod)
{
printf("%d %d %s %d",pas.codigo,pas.edad,pas.nombre,pas.asiento);
break;
}
else if(feof(archivo))
printf("\n Pasajero no encontrado");
}
}
system("pause");
fclose(archivo);
}
//***************************************************************
void listar()
{
system("cls");

archivo = fopen("pasajero.txt", "rt" );

if(archivo == NULL)
    {
printf("\nEl archivo No existe.");
  }
else
    {
  printf("\nCodigo edad nombre promedio\n");

  while(!feof(archivo))
           {
 fscanf(archivo, "%d %d %s %d", &pas.codigo, &pas.edad, &pas.nombre, &pas.asiento);
   printf("%5d %4d %5s %5d\n", pas.codigo, pas.edad, pas.nombre, pas.asiento);
           }
    }
system("pause");
fclose(archivo);
}
//***************************************************************
void agregar()
{
char resp;
archivo = fopen("pasajero.txt","rt");

if(archivo ==NULL)
{
printf("\nEl archivo No existe");
}
else
{
system("cls");
archivo = fopen("pasajero.txt","at");
do
{
printf("\n\tDatos del pasajero");
printf("\n\t----- --- --------");
printf("\nIngrese el codigo del pasajero :");
scanf("%d",&pas.codigo);
pas.codigo=validar(pas.codigo,1,10);

printf("\nIngrese la edad del pasajero:");
scanf("%d",&pas.edad);
pas.edad=validar(pas.edad,1,100);

printf("\nIngrese el nombre del pasajero: ");
scanf("%s",&pas.nombre);

printf("\nIngrese el numero del asiento:");
scanf("%d",&pas.asiento);

fprintf(archivo, "\n %d", pas.codigo);
         fprintf(archivo, "\n %d", pas.edad);
fprintf(archivo, "\n %s", pas.nombre);
fprintf(archivo, "\n %d", pas.asiento);

do
{
printf("\n Desea agregar otro envio? \n: ");
   scanf("%s", &resp);
   resp = toupper(resp);
   if(resp != 'S' && resp != 'N')
    printf("\n Error... Ingrese [S o N]");
}while(resp != 'S' && resp != 'N');

}while(resp=='S');
}
printf("\n");
system("pause");    
fclose(archivo);
}
//***************************************************************
void crear()
{
archivo = fopen("pasajero.txt","rt");

if(archivo !=NULL)
{
printf("\n El archivo ya existe");
}
else
{
archivo = fopen("pasajero.txt","wt");
printf("\n el archivo a sido creado con exito");
}
system("pause");
fclose(archivo);
}
//***************************************************************
void menu()
{
int opc;
do
{
system("cls");
printf("\nMenu :");
printf("\n[1]...crear");
printf("\n[2]... Agregar");
printf("\n[3]... listar datos ");
printf("\n[4]... consultar pasajero");
printf("\n[5]... salir");
do
{
printf("\nIngrese su opcion [1-5]: ");
scanf("%d",&opc);
if(opc<1 || opc>5)
printf("\nError ingrese [1-5]: ");
}while(opc<1 || opc>7);

switch(opc)
{
case 1:
crear();
break;
case 2:
agregar();
break;
case 3:
listar();
break;
case 4:
consultar();
break;
default:
printf("gracias por usar nuestro sistema");
exit(0);
}
}while(opc != 5);
}
//*********************************************************
main ()
{
menu();

return 0 ;
}

K-YreX

Esto no es un lugar donde poner lo que necesitas y que te den el programa completo...

Coloca tus avances (entre etiquetas de Código GeSHi) y el problema del que no puedas salir y es probable que alguien te ayude. En cambio si te limitas a pedir sin esforzarte, esta va a ser la mejor respuesta que vas a obtener...




EDIT: En C no existen las estructuras de datos como sí pasa con C++ por lo que tienes que implementarlas tú. En internet puedes encontrar muchas implementaciones de colas, listas, pilas, etc en C.

Para empezar tienes que crear lo que sería un Nodo (un elemento de la estructura) que suele estar formado por los datos a almacenar y un puntero a otro elemento.

struct Nodo {
  Pasajero *pasajero; // puntero a los datos de un pasajero
  struct Nodo *siguiente; // puntero al siguiente Nodo de la estructura
};


Y ahora puedes crear la estructura en sí:

struct Cola {
  struct Nodo *inicio;
};


Para crear una lista la puedes hacer simple, es decir, con un único puntero hacia delante o doble (con uno hacia atrás y otro hacia delante). Todos estos detalles dependen de tu implementación y como te digo, en Internet hay muchos ejemplos de este tipo de estructuras.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Anduresu

este seria mi avanze hasta ahora estoy fallando en el modificar ya que me guarda los datos pero no elimina los datos anteriores ligados al codigo y tambien que no se como igualar los numeros de las lista a la variable de numero de bus gracias por su ayuda

#include<stdio.h>
#include<windows.h>

FILE * archivo;

struct pasajero
{

int cod, numbus,edad,ruta,identidad[13];
char nombre[50],telefono[8];


}pas;
struct Nodo
{
int dato;
Nodo *siguiente;
};

Nodo * lista =NULL;
//--------------------------------------------------------
int validar(int valor, int li, int ls)
{
while(valor < li || valor > ls)
{
    printf("\n Error...Ingrese un valor entre [%d] y [%d]: ", li, ls);
scanf("%d",&valor);
 
}
return valor;
}
//.----------------------------------------------------
void consultar()
{
system("cls");
int codigo;

archivo = fopen("pasajero.txt","rt");

if(archivo == NULL)
printf("\nEL archivo no existe.");
else
{
printf("\n Ingrese el codigo del pasajero: ");
scanf("%d", &codigo);

printf("\n codigo Nombre Identidad Edad telefono numero de bus \n");

while(!feof(archivo))
{
fscanf(archivo, "%d %s %d %d %s %d ",&pas.cod , &pas.nombre, &pas.identidad, &pas.edad, &pas.telefono,&pas.ruta );

if(pas.cod==codigo)
{
printf("%5d %5s %8d %5d %10s %4d \n\n",pas.cod,pas.nombre,pas.identidad,pas.edad,pas.telefono,pas.ruta);
break;
}
else if(feof(archivo))
printf("\n pasajero no encontrado\n\n");
}
}
system("pause");
fclose(archivo);
}
//-------------------------------------------
void busactivo(Nodo * &lista, int num)
{
Nodo *j = lista;
bool encontrado = false;

while((j != NULL) && (j -> dato <= num )){
if ( j -> dato == num)
encontrado = true;
j = j -> siguiente;
}

if (encontrado == true)
printf("\n El bus numero [%d] esta activo \n",&num);
else
printf("\n El bus numero [%d] NO esta activo \n",&num);

system("pause");
}

//-------------------------------------------
void agregararchi()
{
int num;
archivo = fopen("pasajero.txt", "rt" );

if(archivo!= NULL)
      {
printf("\nEl archivo ya existe.");
  }
else
    {
  archivo = fopen("pasajero.txt", "wt" );
     printf("\nEl archivo se ha creado.");
    }
char resp;
archivo = fopen("pasajero.txt","rt");

if(archivo == NULL)
{
printf("\nEl archivo no existe");
}
else
    {
      system("cls");
      archivo = fopen("pasajero.txt", "at" );
  do
    {
      printf("\n\tDatos de pasajero.");
          printf("\n\t*****\n");
//for para agregar numero de asientos ------>pendiente
 
  printf("\nIngrese codigo del pasajero: ");
          scanf("%d", &pas.cod);
  pas.cod=validar(pas.cod,1,999);

      printf("\nIngrese Nombre del pasajero: ");
          scanf("%s", &pas.nombre);

  printf("\nIngrese Identidad del Pasajero: ");
          scanf("%d", &pas.identidad);

    printf("\nIngrese la edad del Pasajero: ");
          scanf("%d", &pas.edad);
          pas.edad=validar(pas.edad,1,99);
 
  printf("\nIngrese numero de telefono del Pasajero: ");
          scanf("%s", &pas.telefono);
 
  printf("\n\t -RUTAS DISPONIBLES-");
  printf("\n\t--------------------");
  printf("\n\t|Ruta[1]...TEG-->SPS|");
  printf("\n\t|-------------------|");
  printf("\n\t|Ruta[2]...TEG-->CHO|");
  printf("\n\t--------------------");
  printf("\nIngrese su ruta deseada: ");
  scanf("%d",&pas.ruta);
          switch(pas.ruta)
          {
          case 1 :
          printf("\nBus numero 1");
          fprintf(archivo,"\nSu numero de bus es [%d]",pas.ruta);
          break;
          case 2 :
          printf("\nBus numero 2");
          fprintf(archivo,"\nSu numero de bus es [%d]",pas.ruta);
          break;
  }
          fprintf(archivo, "\nCodigo del Pasajero: ");
          fprintf(archivo, "%2d", pas.cod);
          fprintf(archivo, "\nNombre del Pasajero: ");
          fprintf(archivo, "%2s", pas.nombre);
          fprintf(archivo, "\nIdentidad del Pasajero: ");
            fprintf(archivo, "%2d", pas.identidad);
            fprintf(archivo, "\nEdad del Pasajero: ");
  fprintf(archivo, "%2d", pas.edad);
  fprintf(archivo, "\nTelefono del Pasajero: ");
  fprintf(archivo, "%2s", pas.telefono);
  fprintf(archivo, "\nRuta: ");
  fprintf(archivo, "%d", pas.ruta);
  switch(pas.ruta)
  {
  case 1:
  fprintf(archivo,"RUTA #1...TEG-->SPS\n");
  break;
 
  case 2:
  fprintf(archivo,"RUTA #2...TEG-->CHO\n");
 
}
 
  do
    {
printf("\n%cDesea agregar otro pasajero ?: ",168);
     scanf("%s", &resp);
     resp = toupper(resp);
     if(resp != 'S' && resp != 'N')
        printf("\n Error... Ingrese [S o N]");
   } while(resp != 'S' && resp != 'N');

    }while(resp=='S');
    }
system("pause");   
fclose(archivo);
}

//-------------------------------------------
void mostrar(Nodo*lista)
{
Nodo *i=lista;

if(lista==NULL){
printf ("\n\t** LISTA VACIA **\n");
}else{
while((i!=NULL)){
printf("bus[%d] --> ",i->dato);
i=i->siguiente;
}
printf("No hay mas buses encontados ");
}

printf("\n\n");
system("pause");

}
//-------------------------------------------
void agregar(Nodo *&lista, int &num)
{
Nodo * nuevo_nodo = new Nodo();
nuevo_nodo -> dato = num;

Nodo * auxi1 = lista;
Nodo * auxi2;

while((auxi1 != NULL) && ( auxi1 -> dato))
{
auxi2 = auxi1;
auxi1 = auxi1 -> siguiente;
}
if(lista == auxi1)
lista = nuevo_nodo;
  else
auxi2 -> siguiente = nuevo_nodo;

nuevo_nodo-> siguiente = auxi1;
system("cls");
printf("\n El bus[%d] se agrego correctamente \n", num);


}
//--------------------------------------------
void menu()
{
int id;
char res;
int num;
int opc, marcador;

do
{
system("cls");
printf("\n\tTerminal de buses:" );
printf("\n\t** *\n" );
printf("\n [1]... Agregar cliente al bus" );
printf("\n [2]... Mostrar todos los buses disponibles" );
printf("\n [3]... Agregar pasajeros al autobus" );
printf("\n [4]... Consultar pasajero" );//cessar
printf("\n [5]... Modificar datos del pasajero " );//jose
printf("\n [6]... Eliminar pasajero");//andres
printf("\n [7]... Salir " );
do
{
printf("\nIngrese su opcion [1-7]: ");
scanf("%d", &opc);
if(opc<1 || opc>7)
printf("\nError...Ingrese su opci%cn de [1-7]: ",162);
}while(opc<1 || opc>7);

switch(opc)
{
case 1:
system("cls");
printf ("\n\t Ingreso de Buses a la Lista Disponible");
printf ("\n\t *** * ** * * ** ****\n");
do
{
printf("\nIngrese el numero Bus en Estado Disponible: ");
scanf("%d",&num);
num=validar(num,1,5);
agregar(lista,num);
do
{
printf("\n%cDesea Agregar otro Bus Disponible[S-N]: ",168);
scanf("%s",&res);
res = toupper(res);
if (res != 'S' && res != 'N')
printf("\n Error... opci%cn incorrecta\n",162);
}while(res != 'S' && res !='N');
}while(res == 'S');
break;
case 2:
system("cls");
printf ("\n Consulta los buses disponibles en la LISTA ");
printf ("\n ****** \n");
mostrar(lista);
break;
case 3:
system("cls");
printf("\nIngrese datos del pasajero");
agregararchi();
break;
case 4:

printf("\n\t----Consultar Datos----");
printf("\n\t***********************\n");
consultar();

break;
case 5:

system("cls");

printf("\n\t----- MODIFICAR DATOS -----");
printf("\n\t*********\n");
printf("\n Ingrese el codigo de pasajero a buscar: ");
scanf("%d", &id);

if(archivo == NULL)
{
printf("\nEl archivo no existe");
}
else if(id==pas.cod)
    {
      system("cls");
      archivo = fopen("pasajero.txt", "at" );
 
      printf("\n\tDatos de pasajero.");
          printf("\n\t*****\n");
//for para agregar numero de asientos ------>pendiente
 
  printf("\nIngrese codigo del pasajero: ");
          scanf("%d", &pas.cod);
  pas.cod=validar(pas.cod,1,999);

      printf("\nIngrese Nombre del pasajero: ");
          scanf("%s", &pas.nombre);

  printf("\nIngrese Identidad del Pasajero: ");
          scanf("%d", &pas.identidad);

    printf("\nIngrese la edad del Pasajero: ");
          scanf("%d", &pas.edad);
          pas.edad=validar(pas.edad,1,99);
 
  printf("\nIngrese numero de telefono del Pasajero: ");
          scanf("%s", &pas.telefono);
 
  printf("\n\t -RUTAS DISPONIBLES-");
  printf("\n\t--------------------");
  printf("\n\t|Ruta[1]...TEG-->SPS|");
  printf("\n\t|-------------------|");
  printf("\n\t|Ruta[2]...TEG-->CHO|");
  printf("\n\t--------------------");
  printf("\nIngrese su ruta deseada: ");
  scanf("%d",&pas.ruta);
          switch(pas.ruta)
          {
          case 1 :
          printf("\nBus numero 1");
          fprintf(archivo,"\nSu numero de bus es [%d]",pas.ruta);
          break;
          case 2 :
          printf("\nBus numero 2");
          fprintf(archivo,"\nSu numero de bus es [%d]",pas.ruta);
          break;
  }
          fprintf(archivo, "\nCodigo del Pasajero: ");
          fprintf(archivo, "%2d", pas.cod);
          fprintf(archivo, "\nNombre del Pasajero: ");
          fprintf(archivo, "%2s", pas.nombre);
          fprintf(archivo, "\nIdentidad del Pasajero: ");
            fprintf(archivo, "%2d", pas.identidad);
            fprintf(archivo, "\nEdad del Pasajero: ");
  fprintf(archivo, "%2d", pas.edad);
  fprintf(archivo, "\nTelefono del Pasajero: ");
  fprintf(archivo, "%2s", pas.telefono);
  fprintf(archivo, "\nRuta: ");
  fprintf(archivo, "%d", pas.ruta);
  switch(pas.ruta)
  {
  case 1:
  fprintf(archivo,"RUTA #1...TEG-->SPS\n");
  break;
 
  case 2:
  fprintf(archivo,"RUTA #2...TEG-->CHO\n");
 
}
 
    }
printf("\n\n");
system("pause");
break;
//case 6:
// break;
case 7:
default:
printf("\n FELIZ VIAJE");
exit(0);
}
}while(opc!=7);

}
main()
{
menu();
return 0;
}